mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-12 21:53:00 -06:00
refactor: remove expired plugin compatibility surfaces (#111451)
* docs(secrets): remove retired web credential paths * refactor(web): remove retired provider compatibility paths * refactor(providers): delete retired compatibility routes * refactor(secrets): remove retired credential aliases * refactor(plugin-sdk): delete retired compatibility surfaces * docs(plugin-sdk): remove retired migration guidance * chore(plugin-sdk): refresh rebased surface budgets * chore(plugin-sdk): refresh API removal baseline * refactor(compat): migrate retired internal callers * chore(plugin-sdk): refresh current-main baselines * test(config): migrate plugin-owned secret assertions * test(gateway): narrow plugin secret refs * fix(plugin-sdk): preserve private boundary type identity * chore(compat): remove stale sweep references * chore(lint): lower max-lines budget * refactor(secrets): remove unused web helper * build(plugin-sdk): drop removed compat entries * chore(plugin-sdk): refresh rebased API baseline * chore(plugin-sdk): use Linux API baseline hash * fix(plugin-sdk): preserve private bundled build entries * fix(plugin-sdk): package private runtime facades * fix(plugins): preserve external credential contracts
This commit is contained in:
committed by
GitHub
parent
e6d7aee41d
commit
c7e7ac2728
@@ -631,7 +631,6 @@ src/channels/turn/kernel.test.ts
|
||||
src/cli/capability-cli.test.ts
|
||||
src/cli/command-secret-gateway.test.ts
|
||||
src/cli/command-secret-gateway.ts
|
||||
src/cli/command-secret-targets.test.ts
|
||||
src/cli/command-secret-targets.ts
|
||||
src/cli/config-cli.test.ts
|
||||
src/cli/config-cli.ts
|
||||
@@ -1007,7 +1006,6 @@ src/plugins/marketplace.test.ts
|
||||
src/plugins/marketplace.ts
|
||||
src/plugins/official-external-plugin-catalog.test.ts
|
||||
src/plugins/official-external-plugin-catalog.ts
|
||||
src/plugins/plugin-metadata-snapshot.ts
|
||||
src/plugins/plugin-registry-snapshot.test.ts
|
||||
src/plugins/provider-runtime.test.ts
|
||||
src/plugins/provider-runtime.ts
|
||||
|
||||
@@ -1,333 +1,140 @@
|
||||
4f222069c2ba0c355b72e48a27da2294484dcce0a9b4b3fd3a7ea90a134130c7 module/index
|
||||
f8baddc86ac0e924c7806957f90a6ebdd5916a362ad24b665824503ee77fc6a9 module/access-groups
|
||||
7a8753532854ff6f6d2a0c8e6386653adce285f9f6a9b5e56e88c9ea49e79cc2 module/account-core
|
||||
e7519fd1b7ff7003a6c8b9b640ffedd443a3754a10efc82877d48cd98cc6ba28 module/account-helpers
|
||||
cbf4e2c3088f8886a7c9ea91325a66e0f0846cea21f0b2891f36399b4811306c module/account-id
|
||||
6b674e7aa4006240227c16eb5c74360f1d67639e8f5580ad72499d6ed28283c4 module/account-resolution
|
||||
820af87fab6f24d5aafe5f264fff8f3c4324edab10761022c28b6926f359e6e0 module/account-resolution-runtime
|
||||
822ddd0df21c641ba0b198da30d60d8cddd38c0d740b005232287ffcb0bf5171 module/acp-binding-resolve-runtime
|
||||
35395a46410738203c1b9621e4263e8214955af77a3011d45668f777c55cd4a1 module/acp-binding-runtime
|
||||
2a7a3321dbad3e78e6d6ce2898666674f9cab6adeae9190e47c277079d32ae36 module/acp-runtime
|
||||
ed5dd7c56969decc47a2528cf1115b781ee7b368f72b9f47e12c3bacd65d95d2 module/acp-runtime-backend
|
||||
e5e67ddf3cab38fcbf9220bc3160715897e2709d9a9ff6ff36f1ecc9453c2367 module/agent-config-primitives
|
||||
30452bae2a689fb75dcb6dba9ef11e5b95f9cbe0c62eb190a0fcb82d0a19ae52 module/agent-core
|
||||
74daa746deb548379d3f0d6eac3c4d082df1034c4360cc03bf51fee0f10a2e4d module/agent-harness
|
||||
e09226afd443cee02ed648f032f53bfeb60585617bb523a649995764d3c38da9 module/agent-harness-exec-review-runtime
|
||||
ffacec9f51060b81c597a9d169e7ee0fa463fcbd18daffdce129d144897b2c5b module/agent-harness-runtime
|
||||
ec22d7a039fb58d0b8343ad149322960d3d8ca58b3f4c70f2fa8a099f8186d0c module/agent-harness-task-runtime
|
||||
5f63bf587bf3547d59d0dc5d0dc2fee54745aa6edaab4aa3ae700dba03443edb module/agent-harness-tool-runtime
|
||||
c67e52e5bc6d6917f9a13f4133e7b18e111dbd33b66b6a5eae79623d9ff6e918 module/agent-harness-runtime
|
||||
5168648cd946abad8a92822889f13ceacc87ed502314a66190d0b1eb8ebe76ea module/agent-media-payload
|
||||
2c60564ae141dc249234e409994498f4143943d36c7860fa5759a63e4375e377 module/agent-runtime
|
||||
d5191546cfd0b2dde39f6d9f5077ab1539aa359a90cf9a2ab13c5c19b7c948b9 module/agent-sessions
|
||||
dd9282f1eeadf44db2887599b52d80db7f5fb99c6d9eac720dbf1b77065f2145 module/allow-from
|
||||
55cea5390d68839ca7768b4a0cc570b17b65fa0fa3bc4d76130ef0f16cb79ede module/allowlist-config-edit
|
||||
7ddd81bd5f55de9adf64bf4d92d012f24b37b6da0a72805a3a220d8feff24ca3 module/approval-auth-runtime
|
||||
a973b03d88f2aa71d3b6c39241527c18d9b1b75f5639bf39cc9b080efbe7b6c6 module/approval-client-runtime
|
||||
49cd817c2a01f9ba581f24d932dc04a65d79399746df862b3c3947cab659dda4 module/approval-delivery-runtime
|
||||
2fd995aaf62ce912b97ac01f60260707c5e91b4e40d62167e6704acd5b533527 module/approval-gateway-runtime
|
||||
37346f8621e2a12ca819f44075882aec1e4a7ebf12dbcd9ba772aeb8413404db module/approval-delivery-runtime
|
||||
1ad8a27933d4092fb26c7ca1be389a0e463023004735d9e992656f81a4e2956f module/approval-gateway-runtime
|
||||
aceab327f18983cfa074384b4510648be2156dfdd30415a2d7a48fd1f38da1c6 module/approval-handler-adapter-runtime
|
||||
a453261fc6c0d45ad652992bfa3139a1295b6e6296878ee5fde2cf12b995516e module/approval-handler-runtime
|
||||
1cb17e85297fa4419f7beb7fe7e03747bb6841277ec49fd0fb8794695b0a31f8 module/approval-native-runtime
|
||||
f7564f1ac34e77d31a38fbd913089799ff459ca8d4500850f4bf35c22cabaa27 module/approval-reaction-runtime
|
||||
0796ab79f6edbe0c5d6f8393224cc0069358e0a3b4d35d89364ec3dff6ddcc49 module/approval-reference-runtime
|
||||
0426247e235b793bf13307439a2499ccc9359dab45c5fe05f9a2541240700651 module/approval-reply-runtime
|
||||
a5e9215460bc99fb6e6cdd4bc67eb6466a5e99f28279e13d1769599c18dfe0b3 module/approval-runtime
|
||||
6c81b9122ab0a5c3190700c0a234047274a8d48edddcc8f26d3859b886696068 module/async-lock-runtime
|
||||
b8cfc79901397a7b6ec8b3df9ecccbc36b125ebda23be794deb1e9109acff628 module/approval-runtime
|
||||
ad60ccc4fe9084d47f0477e02d9296bacad32f26d7456e2a84be8d25a53a25c2 module/boolean-param
|
||||
333a906d4ad9d3e89102ab7eb9059a7f9c7277328041223ee3b0713442f56a29 module/browser-config
|
||||
c117222faacb1c68bf6df6594fbf47c3ea0240fd1403f913ecb72e08730d32cf module/bundled-channel-config-schema
|
||||
b6e53fb9c69840d71785325cd9a244809ffd6d3f0dd08ed0cccf816dd993f210 module/channel-actions
|
||||
fcfd76dbfe818e8e8574a425f340fee935acf53d4484e961f54c3ec760fb15fe module/channel-activity-runtime
|
||||
24c53c9cefacd8c1bec2aa91ba2b01e606f8b8477bc5cb2f99567225a4dcf67c module/channel-config-helpers
|
||||
6e3b8ccee738f8eddde5d813b6e204d6f7c8541fda4cb279a3be3ead27f47e7d module/channel-actions
|
||||
00d326fdff396dfcc657d1fd16a4015b81d60ae8bf7dad09ac1010b376814de6 module/channel-config-helpers
|
||||
16dc9d32e8ca3ef78fc63e0fc4b20e6b943633e9572de1a49d24a880b6ffc66c module/channel-config-primitives
|
||||
5da2caccf30780a4cf86ac710e2ca42cc9576cb1c49291c0929889fec0cc2257 module/channel-config-schema
|
||||
e6c20ca52397a90297c49928e9b8d98a48059ed107d21f8cec6a7ec9c9e2d1ab module/channel-config-schema-legacy
|
||||
8740f7cc786a380043e41aaf710ac47931b3587c122bb152d5f0231f98fd5351 module/channel-config-writes
|
||||
2dd98659d9600e755f09ef00dd91c36692b8562ed3700461937e94f6cd1e640a module/channel-contract
|
||||
3db1a968e5b8aa97623a48a9ee76393d578d4bb90634fa59f499a2fd87b9da72 module/channel-core
|
||||
a6bc51efd3ce23e65432c9a6790670e2a0acb96ae7263fedbaed52ea353228be module/channel-core
|
||||
fbf353eb38ae68d8ded3f2a60b432c7bb2c245d2ec7e7c9f53c6da19a0db0938 module/channel-entry-contract
|
||||
264a002a036aa66f87008971130c0264b15e62b00a35f473149aa846e3bcddad module/channel-envelope
|
||||
982f29a18e07228e3da82cae67d06ff38249592a29c2fd28f01f0d2016ff80d9 module/channel-feedback
|
||||
19d42de92c4f27a6d785638d6118a2e1302f0cb64cc71a12d6c1875e1e9e1e9a module/channel-inbound
|
||||
31b33966c8b55f5055066182cf05b3fc68390c26026ce09fe9fb9e176f794925 module/channel-inbound
|
||||
2940039d5ebdb16c1d745914390db01c0f5f1e9cff33f95ea36c9e77d97c2bae module/channel-inbound-debounce
|
||||
c84239139c3ce21cc8ca7c01ae9f2a653197afdc7be95a7598616e112e743f4f module/channel-inbound-roots
|
||||
91425ad75ddb58a3796f7bc88570cb2c81b3db0dd6521a7ce0e55f9148880a47 module/channel-ingress-runtime
|
||||
c97dd36cdf8f83c2893c33e9430a93cd131a03d855725783ca5b545de0cf84f8 module/channel-lifecycle
|
||||
25230ecd4db8a49f94e29fffce985d40017227a778b1dd59b9c426b9ca627194 module/channel-location
|
||||
159d034b431d113f3a6dc41ec0bcadba2d6664051f158330b0e3dd3da8b5d42f module/channel-logging
|
||||
a693996a92b387ec26146daa7ba73b6b026cd8fc5e6d72874a6856d9c38b3f53 module/channel-mention-gating
|
||||
5eccd03e85c032753e0d8931dace4cd952b83e4975d0acae272849fdabfbfe90 module/channel-message
|
||||
1eeb53fdc4f526945c2cad5783e3b3184491d14c5286a5cca8145b5c97345e1d module/channel-message-runtime
|
||||
e2b4d1923a19b927e912622576d43d20a6e188c124a7bc588fe567cd3c1c924e module/channel-outbound
|
||||
50c61de5d522abadcae79841335aeac25e3791e6dbb0cfc3d64b2720a8c514ce module/channel-pairing
|
||||
e3f8f0d0aaa3ea3a773ce2011d7af30f18b40c27cbbad0df2d53cd582a56b631 module/channel-pairing-paths
|
||||
ee4292b069d4d48cce4fc2dc26df5b5c87eb1fa4769f1f6be9a10c3e1221e1a9 module/channel-plugin-common
|
||||
bb82ca1819308189c4ba7b1e83e0c39fb0fb8b5a7081ee874480d64426778454 module/channel-policy
|
||||
9c8c877ab0c28ac2d9a84ad33a60e09eecfd68ce0080989ac033df14a8e9bff5 module/channel-reply-options-runtime
|
||||
cc0a77137b304b27a313791aa30e43efb4acc254da7590bd47493d81e7104fba module/channel-reply-pipeline
|
||||
7521b7b935944c2ca5fdd8171ba921f134b68e6f29e2c9409e4e6290ce667de1 module/channel-route
|
||||
a676d58af7bc732dbee41157d4e5c9efba4d429ae6502224de0d8ee2d4c23220 module/channel-runtime
|
||||
bba5540be7cf9613a163663decdb2affe2af9bbd3ad7914989ab186f9c2abec1 module/channel-runtime-context
|
||||
17cec26bc71fc43a066049ef63f95bf29737113c26ab13689ceff602b9aa11d6 module/channel-secret-basic-runtime
|
||||
0ceb4378709eb2d92a62a275f87fa04e18f77df8f942a9a0acef81019ebc1e24 module/channel-secret-runtime
|
||||
96e38ca99edb7d39839a7675939d5b8c199f8625502cae15e66b4bc7885922a7 module/channel-secret-tts-runtime
|
||||
7c90157a95bc0523fc66b1f78ce140f7ec7dbf809dfa3a480244efc01f972754 module/channel-send-result
|
||||
e705b97daac4fbd7f6aeb2e515b1cdaa1db342684644eaef8197767b2595826e module/channel-setup
|
||||
47719805c7a1d2623dcecafad50abb6cc674262b250e1f0d7020a79ad41cfd42 module/channel-status
|
||||
a4918b82b795f086ae71acb43e2b725fda01f6c8bf2333c155a52581bd4cf8aa module/channel-streaming
|
||||
dce2e08fdc6794298b93d8ace5dbcbf9dc9981ed43e41b9e894c6c9f656501c6 module/channel-targets
|
||||
a8afdbd6b36b7e94b64ada56a579a5be72179e9b5e6d2b67542f084f5f7a29c4 module/chat-channel-ids
|
||||
f687dbadcf1c63d09c03c09d1999bb37e8d49593a311b1c0fa42bcc035477146 module/cli-backend
|
||||
1ed3823c895332a492eccac1bbf7214d63faa57e64de77f1e33004da7e394e8b module/cli-runtime
|
||||
5f4c67188a022b1c9ad57799df82d2cef6e5744f3ddc29698de4e8e70a30f143 module/codex-mcp-projection
|
||||
c89ec1b194b76f67a6f4dd108dccf460da6065646cba31374c8aa748f23a39e4 module/collection-runtime
|
||||
ff4173b17c0140965b08ddf93d4b32c47cd50b65a52ff9ac43db2921658d3a30 module/command-auth
|
||||
391e6f0c77da2e17a058fc5aea87fd193830b2a14e12fae77c7f63b0226f0bb5 module/command-auth
|
||||
7dede491d22f7226d955210befca09b32e955c59436c27500f0c7d1971ba07d5 module/command-auth-native
|
||||
fa2df02bede6ed8843e5c2bd605c6ea5cd20313c305593fbd371dba6f1b931c3 module/command-detection
|
||||
a224ce0381a32ed7a9d2261669c444f7f46701c15bf2f6121e9b057d9910da78 module/command-gating
|
||||
28a0cae8dee664aef14b1a64c86a46d0fb5637cf9f671790d4fc9ba205e42820 module/command-primitives-runtime
|
||||
eb4c757fe0086c1dbfa4c3f3caf3dcff0d3cab3924c608237f08f740a6ee5f59 module/command-status
|
||||
10f073c8c7c7384843cb89548e01cf66241e23ebabea01ccc1f9ac7e774f563e module/command-status-runtime
|
||||
d340686cf814326b5a554a32cc5ca324a9e1254a933c4d9d8d1ada5ac7109a10 module/command-surface
|
||||
e26e0f75b43c5bbadd34401b21d8c76406ca0b87cc997be5abd100462d318f1a module/compat
|
||||
2cf2f7732af5491a14466fc984f833ddce2b0f6a20b1c82796c3ee856e2966ce module/concurrency-runtime
|
||||
235a9e4d983042c3db156efcab0e333984cbbf13ebdfcc44a3a5ab40cf3edb4f module/config-contracts
|
||||
20f3f8042de53e4eee61b64de9102c8c202b9299e6a29235647a4729f70145f2 module/config-mutation
|
||||
316949815affe623ac63951a5db580527f02663576dffa084f02768f612c0c1c module/config-runtime
|
||||
a8ce8d7a8df9d427956a3d6f2daf00b0234be473e8cec2d01b84f34c6d7c78bb module/config-schema
|
||||
b317e9810e57d07ddd720d68c1ce93172e5bc331d9c095a332edc52f565d5ce4 module/config-types
|
||||
42d15153981cfe3adc1d5f91621434c56f07a9bd48c15ce34742f72dd040c142 module/context-visibility-runtime
|
||||
03636897fb99cb73e4d8620c8a0e0d72b4d52fc32bf94f525af2aa88c489c6c2 module/conversation-binding-runtime
|
||||
0c0bb80f81d0c769f343e3be95f01b3d734077c12e831367440952052aafbeb7 module/config-runtime
|
||||
c1ea9510dfda047609a99d5d2cd1f1560f5d469a36e6b695766213d695c25b0f module/conversation-runtime
|
||||
d4ade9c9530585638e57602fcbe3ba1caa21a8d1ce88d87019d2d7048e3988b4 module/core
|
||||
93b61bc7893ed37047c97c10360588c0acf5df72cf49c54678ce68ed8d07f65c module/cron-store-runtime
|
||||
e6fc74e18435cd4639801d9bd1f224154d1cd9405cdb3ba91a24b67c0792e9d2 module/dangerous-name-runtime
|
||||
d9267aacc65aeebf0046d4eef691e5a510764063e6c7942b1d6bc7a282ca67a1 module/core
|
||||
4af19d59c2f18674e7d7f7dc1b358b644dc707e6bd601dc47168bd9e4a669940 module/dedupe-runtime
|
||||
feb743a5f25297abc7bb47d22ef060e0ed54b0cff69ac50885681dfade970f8e module/delivery-queue-runtime
|
||||
f70c93d28053ca2e8353e45e6515ce7acef188097c6117d1545965d0699c8004 module/device-bootstrap
|
||||
6215d3af5923bf5a616d73062534968b69f448e3e30adc64ae9caebdd1a46d71 module/diagnostic-runtime
|
||||
9885951a437128dd3ebea5a54dcd59e6e9f4a1ba78b166c2c4aa0a286f108fe5 module/direct-dm
|
||||
9cdf7fbc6551e0373d6ab007128a266b200b5c8916fc4f73ffa77192cb0c3e9b module/direct-dm-access
|
||||
371ee1fd78810526745c93c24c4b85562c981676adcc33aaa0c627f5d2d45810 module/direct-dm-guard-policy
|
||||
91278c800e0f87d7111f226e1cfcb6f29552936fec7215b3b69be4da7e2ee8fb module/directory-config-runtime
|
||||
ea81ef06956c1bc0853fa00afbbc2b5a4019116aaf8a436e1b27d06f7a2c9e88 module/directory-runtime
|
||||
7e953d227d71e4e07c412b21f6db0604279cb6360eb6e025aceb79576212afd0 module/discord
|
||||
f41f9b34ab771c894293453bcdf072860c7cd509dd4e0172156634a816b8d727 module/document-extractor
|
||||
3ac20ebba52de5a2f18807c0c8ade6e61f59e260a35fc1d077c9dedb9960dabd module/embedding-providers
|
||||
c7c9119cd43e2ed2eed4fe8bd57a6b75d2ee9a1f7926c432634c49b54ff7f9a6 module/discord
|
||||
46c05a90b66032d1d7ad08445840a4bf81aa2bd325348f87710ad4538daf38f6 module/error-runtime
|
||||
64060c2042b1cb587c6180b5fc09b3be29f0defee9770e1ae46592d5666e8362 module/exec-approvals-runtime
|
||||
8a60bf4ab024c45a6ebb45a88ddd346c75325a579b8e3abea0efd0a2d46bc88f module/expect-runtime
|
||||
b013053a61e7d9be3d0c683c02baf57fa7e4393ec54e0df6a46ab0f2fe2348fd module/extension-shared
|
||||
733faa5d260108da26d39aa0ada4105085719b26ff19f84b89b7cb9980e948f7 module/fetch-runtime
|
||||
e2d4a336857b4bdc98137162d16a683d8aa39b46028b74deb731b9f939efc62b module/file-access-runtime
|
||||
d13708bc224297df10a7f91e244f87e822fef9d71e2ca799442a49e42b6868c5 module/file-lock
|
||||
ceacad83db01c66e7be6aa21a291597020f13f737b697690eae7d47098e6499a module/gateway-method-runtime
|
||||
1b8eea4bad785031864822f0f07dc03cbe8670e76e0c3ee8fa51c7a2ee5c5e15 module/gateway-runtime
|
||||
4611de9835515711d641f0f3e48d3c4e528afc343d5e5934fe3ed62072955511 module/global-singleton
|
||||
6062869202e3d7fdaa1f6801d6c1df7bf7406b8118cc4c7167ed409f5257b05c module/group-access
|
||||
5e672df8c679d90e2e61b30d08cc9de8f1a1cac439e7020869b088ee9ab4e5ce module/group-activation
|
||||
412aa303344407c046ee26c83306db0f8a6cccbdd6e7835437711d4dd8d26522 module/health
|
||||
e1b72e4c2d926d39d216df80775e0a5f44705d04f5040c01fe1043ad7a2c2fe4 module/heartbeat-runtime
|
||||
182dc685f2103ff66c1a4839a48f4f40d2eeb0070cd74e449b47aacc4e6f1c22 module/hook-runtime
|
||||
580b0f80fe6d6fe1700d993a8a07e5f7a718fe9128e7767dcacf6ad14bbc3f8f module/host-runtime
|
||||
1e1dd2480c0fb57a46c6f7a88b51071b44e411b02cbd9051943e00513526e7be module/html-entity-runtime
|
||||
319df2c4a8637db38c9f115f9fe3d9b8ecbac6520c5e9c44254f2c00d5c9842e module/image-generation
|
||||
284bda4aca2e435885ec10f1847bce57695168d1416b418e0326251125a656c8 module/image-generation-core
|
||||
21a233e9008f0701df1efbefe521a9ced45c61da6e297e788bdd86895d793128 module/image-generation-runtime
|
||||
f6e3c44e7d1090a97aca554a3c247219b8de78b3cb4399cac5efde8a0a6c1156 module/inbound-envelope
|
||||
67142e8e63ea860a03b0cbb5660f63405a83ec575f2ef7a96f9b87f1be362808 module/inbound-reply-dispatch
|
||||
c1826ee55763f9c1f86e873cda221bdf32122fce5f5a5a46c384521a8ec8bf6c module/infra-runtime
|
||||
841de925321fbc69c8dcc1beed2468dfcd5f28cc38a8aad6fcde20d85158a985 module/infra-runtime
|
||||
2e717cccb3db127aed0287d4ea14c41a8e64e46d60c728638153e31e2fb0d296 module/ingress-effect-once
|
||||
3d0431e2575abf67c7fd9e9763b08b7a46018e01c290ffea8d4af9874d3c3fc4 module/inline-image-data-url-runtime
|
||||
74fee62a94618d830a5282a7816a73b85570b2e4ce17b90078078734510511d7 module/interactive-runtime
|
||||
9353103e334009222e5ae4fe4a2992a1d00552735013a69f93f17f74f14eb9ee module/json-schema-runtime
|
||||
9dd66baf2def46386ad4706380e57f9068fa9bb3878be2d9ba961ec2f46d3d87 module/json-store
|
||||
ee34dd840075bd687624ead228d3aa906fc52965e1708a5a335bb3ad3b671949 module/json-unsafe-integers
|
||||
8f37bca66178f4d77303fdd3ded0d445c9358b4f094c07a2f8e32b1721e953e4 module/keyed-async-queue
|
||||
d8ca27a737f235e09f1a9f8cd4b82ac0cde96f10c662347b6ac82e27b70b4a40 module/lazy-runtime
|
||||
bedaf7b615a4acc66ca4897f2d99da883df638cc427ed3963e974b69bf8b0a32 module/llm
|
||||
6ae9b0f1f55ec50fa3e0ebc02052bfd04eca5f34c4a936692634b36a4cfa2035 module/lmstudio
|
||||
dd166527916dc5b9694512e3526e774da0b2427ba7fc8316d2fd799c06238e80 module/lmstudio-runtime
|
||||
fd00374a91ab5b393152bbbaf90010f9140cf15827bde360d0c6c8724ed34e2e module/logging-core
|
||||
d0d01050ec5c0401fca65e482a183643b40a53ebc95b2a0fa4982e5bba6d93da module/markdown-table-runtime
|
||||
7670808d8c6227a52b2cddb72121aed9767313dd674f294a1f426dc185c13046 module/matrix
|
||||
08c4cb46f218c303356c203dac30722cc6c609b6b34604a8846259f684bed2bf module/mattermost
|
||||
149b66a9e1ce771567495164a7c1680759a4d589f0af87caa72c58cc90bbf163 module/media-generation-runtime
|
||||
28f843eb592e3f376713f2743acf26087885cd30eba666af98eaea63fd15ecae module/media-generation-runtime-shared
|
||||
a5f59c9acbcaa3f82247bf806eb5ba08032373fb853719f0ec9457690f16fc70 module/media-mime
|
||||
7b30827ec2f616ae9de0c1d81348a2112a41e9b4a8aeb8f072cfb1480d2eb864 module/media-runtime
|
||||
7a5a1de743fff9d5a86515b501ffd88e7fa49970c9f46a5153816e2ebaef7bb0 module/media-store
|
||||
c5e3eb1a584f4b8126d9d6c177a840ec9103671e8d1242634ee67db9b5b9e573 module/media-understanding
|
||||
c0ffaed532578cf33493992e1ff806b2268b8e3774a92edbaede5cf5bda162a6 module/media-understanding-runtime
|
||||
075b7a2783cf22c3210cfce630b815c2e3b7e85c1f5606f0dde4730d47242365 module/meeting-runtime
|
||||
bdcdb7db74523c557b6bcaa98a47210ad90f16bc97f9143227d03108c7fd8c23 module/memory-core
|
||||
6ae3c62fd51b36439cd3f22286f2e52c6bb27bc85de648650b805c3b7603a487 module/memory-core-engine-runtime
|
||||
2bc363010e81c6990c30fd6743e3ffa37320ec39b91abfc222302dc812d8bd33 module/memory-core-host-embedding-registry
|
||||
ae67c256150b14f1a58738dce0a703071035b86ec26fc344ab03e942253aa72c module/memory-core-host-engine-embeddings
|
||||
4205ab767b79e740c7c7137079b19b315c85f7f8c748592840f00bbf70a71709 module/memory-core-host-engine-foundation
|
||||
cb8dcef652580ca82242d6e9506eda094006c85848f9b16b8b1c1aadff1706a8 module/memory-core-host-engine-qmd
|
||||
bbc06f2bb23d9e4a3445744711f691de9f902270e61c9740fd746f222d10fccb module/memory-core-host-engine-storage
|
||||
39e86819441281365dedb3d7d59979672bb90196f49206edb50b879bd747c9f0 module/memory-core-host-events
|
||||
fe87e7d794bbbdaed3c834b218a787e98c0e69b26b0fac582b0668b8effab9b4 module/memory-core-host-multimodal
|
||||
746e155bb06b398749a6a1bfdc1b435b1ec1941dca3854554a912577731218dd module/memory-core-host-query
|
||||
e2377479799d52d8f67dcccf8f499f28a63948b0c03fa6043fc67e476a22ec0d module/memory-core-host-runtime-cli
|
||||
813b7f8b864e3e0497970f03a543801ff3f69cda2f80aecb26e947ef0e22534e module/memory-core-host-runtime-core
|
||||
f8eb835f0769eba8324033141ecddb9f45bdb3d3241d2a5959fe8426ba6a2280 module/memory-core-host-runtime-files
|
||||
ebbf937b2258487f773b8a6fbd6c648feea96399cae5fbea18ec7d29e027523d module/memory-core-host-secret
|
||||
16bdd82751898ffa98157fd27c86fa0eb9ea415fb8ed703eb4e9b170f0a9501b module/memory-core-host-status
|
||||
646773d8282a2ac6a89101685c406200935ddb3459a2830e820da132fa433b3c module/memory-host-core
|
||||
f7bde3a0231ac75c128d6ae367d5020de886715fe9edbb2faaf673c6bd168398 module/memory-host-events
|
||||
059856bc3671ccba7a2191f47c0295e0a91a374f7048cc2bc22784b389d15182 module/memory-host-files
|
||||
ba07f497aa5469915ebb5b6787148ff1f0f267d7e48c48f0c95d32b7dda8d91a module/memory-host-markdown
|
||||
896d315fb78af09effd0af467e2b6e84331272b0123d4132e5b1f2254e80108e module/memory-host-search
|
||||
fa72e6a00014824db9a40c25b404b548feb125c500005ca3b9670c79ffb96fb1 module/memory-host-status
|
||||
2343c1092d2d6dbfe215052711d273c8d39cfc8a67056d80831ca157958d51d1 module/message-tool-delivery-hints
|
||||
87b7a3206346c0d4b294fb3a2395cbaabc3e73ff8b1b9ea925bc3aade3e52687 module/messaging-targets
|
||||
fd79467013bf189fc6cdd5698a3b970fd370542e2f4aaed70a1f3cac9a8dad4a module/migration
|
||||
90c0578b615d0938a9c1d4bf5cc2e169813176620b57a1ebc3949b8aaeeeb8ff module/migration-runtime
|
||||
09f842a2787b87117d88ba6545aa0441ff8afdb85e2e66ae4d1838ebecb16148 module/model-session-runtime
|
||||
44655a08ce111a036c837b8d2e796cf0036941379ab317e5764c6c01e73b39f3 module/models-provider-runtime
|
||||
4096b2c64b074c651f9e5b0d0e2310082f1002dd5793c6b8a81c268467cef438 module/music-generation
|
||||
f1167c6fc033405b98c88e55f20e80061dc932acf627b42526e2bc345544145d module/music-generation-core
|
||||
55a7e1e57345726b2b54a4c71c66744d5559dd40a164ca552808b689306f53f8 module/native-command-config-runtime
|
||||
1892da4151de02907448430a4661b8578295bb91638fa6c8d940d858d902876f module/native-command-registry
|
||||
0532bafd9f77262d6e41b95d42e6b841383a790ea1710ba9e65eccf270fad41c module/node-host
|
||||
ebd0c2fd5ac9a42d9922deed139ec47184d71e32d7ab5141d86490a3c9d3b114 module/number-runtime
|
||||
ac2114469f321477a1e11133ea629fa672afe1aa9118fd165054009987aec2bb module/outbound-media
|
||||
1d3fb77912c0fba61487b0ae0c1c6e6e513130808d808335582b3f48136e12d5 module/outbound-runtime
|
||||
4a7fb40ea1a45e5727ac2adc8ba64204fa1beb4caeec4de1f9ebd5b56bedff5e module/outbound-send-deps
|
||||
50c4a8ebc6777f422e39a708d01a34b15f42264709da8bd44e1802246d3bbbcd module/pair-loop-guard-runtime
|
||||
9470d8e08f7e1d2fe144a81da1b4a331b31a0c74d0c9a5f7cfaa15814e953ea2 module/param-readers
|
||||
8d8c0c4ebfc6e0c6125df3ae64ec66c10cd797a325de5ea7869fcd84068ab290 module/persistent-dedupe
|
||||
987648ebe317cc4d6c0505a52d344b12ce9c3a8261a5bd969cee3423c0c53529 module/plugin-config-runtime
|
||||
4f40506eda3a3a54156ec63e43c946cfc11197cf5ef7639c4c1ee9b549ea821d module/plugin-entry
|
||||
a5e4304b8b5878d5b7b7732939e1c91d009b4d3e9ee1c41d2f6ccde81c10eb99 module/plugin-entry
|
||||
b41a69c03c3a671a120963bebec65f379261220b72a4636242223d8bb15b830c module/plugin-runtime
|
||||
109f2b3b0984552e620adfb33c2d5dea6f70b4b440677e77d4fd89679e286683 module/plugin-state-runtime
|
||||
1a5be86c0c661469b3ba07bb1c3c0db4d893cbe3042040c298a412bfffc10b5b module/poll-runtime
|
||||
c305e43d9cc43cd699759f36212527a1fc1f1c8d26cfa96425b0dae4a98e91b2 module/process-runtime
|
||||
f9717249bb66c5fff4fce145c260c5b8ac1d6063a03de6025afe19f90efd1ab6 module/provider-auth
|
||||
a5d3fbf94ef6b3186861c9db8510e749e6caf95a16f87a439c395fd8466ef45d module/provider-auth-api-key
|
||||
fbe62044a65a728bc6a89fabd80a2ecbc4f8199b4ca6ab15282035db0f76b0b3 module/provider-auth-login
|
||||
b20eeddd6af4ad509dc0802591180843873a9c6b337edab142a63869d270ebc1 module/provider-auth-login-flow-runtime
|
||||
b32f041136217c510e559e5fcf7ed4361cf51ebfad0fa15799d69fe539780feb module/provider-auth-result
|
||||
3381bf9416f0fad6509b43cdf24cf32547f9fa18632ddb5755e3dd7212bd65a3 module/provider-auth-runtime
|
||||
7a0adc27e12f90f5ab95f36d75fb208029ffc83c29af167ea3fa992273561023 module/provider-catalog-live-runtime
|
||||
83df49f1fcb2fc4ac1bd2406a87a10be71bbcdb0967f61e9a6ccaa23c534149f module/provider-auth
|
||||
71bebeac51e701cd7c8e63d22754b9bcbd82b024aced303aa055d229781129d7 module/provider-catalog-runtime
|
||||
ee5184ab251bcbe49a4cb9c845eee31975733bce1dc2300854cff14e99cf6db7 module/provider-catalog-shared
|
||||
ca5d408937bc0ff92021673320aeba6ae6fce705711b251f15797887b8f34d3a module/provider-entry
|
||||
52085bfaa917f4fd262508a93af923e5e834901b5f0f017c93b02a0798073344 module/provider-env-vars
|
||||
3b311719eae8dbb061ac2e79f0a58f8540f7a416ec281f3ee0c1cc3cfa6b401f module/provider-http
|
||||
47564e55d5ae9174fc402d6a1ef7120a799a92bb3625106327b642d4d9eb3bd9 module/provider-model-shared
|
||||
966830793fccc5e5a7e6ae2f7df84f5f39120ac9a6af8c10be1e070eaf257f32 module/provider-model-types
|
||||
f1452aec01b1bc1d8764b666131b6237bce5b78477ce1137d622c4aa0b691a8e module/provider-oauth-runtime
|
||||
c543747f32aebde42508e31606db325739f0c54fcc7cf683f68ac941c835f737 module/provider-onboard
|
||||
3e4187704f3c12b3a058864ef474036f63285dabe687c70461713f869aafbd9d module/provider-selection-runtime
|
||||
096f53f25cde2c3428b6ff042f1687c5a7c1b161a375ba97aefcdf2f1c38887f module/provider-setup
|
||||
413af0d4597c1bab45e2f1a260b520445a25b9d11abd46a98fdfb74c60ddd601 module/provider-stream
|
||||
ea8bd63655e983dacfd306fe77d0793097166228a2dabd9b7fc8e33252eb359f module/provider-stream-family
|
||||
2285e2c23d64af94ff6b9bd6108e854343f1ec55eca6212fc4fd22138253363b module/provider-stream-shared
|
||||
5a907292055c941ec7420163ea50e8bc90ead816b3c5867d94a23024d3b579e8 module/provider-tools
|
||||
8236935f56423a26aeb7219173c0c8c8c7aacb4a13d0d851f05bdf2d35790cd4 module/provider-transport-runtime
|
||||
009a594b19aa9f0d0c0c28f54968f807cad4b3ee40ec13c685367116d63aafdc module/provider-usage
|
||||
b6c43bdb895139e6bbdb30f861b7e0e66bd2e8960e4129cc2bdb562c575c5f2f module/provider-web-fetch
|
||||
8ef7d8c1cef0b23b73b3ec1e8dc8974a4b98ea622a3ad2659ce38e9aec03d499 module/provider-web-fetch-contract
|
||||
fdcde43943f9bbd4dba4e4b45b396e380708dd3a7314bef141d13a6c8a1fc19e module/provider-web-search
|
||||
fffda485ad0492168b0b58671a5fe232de028c64cd1c0e36ab710ba7d58bf9d3 module/provider-web-search-config-contract
|
||||
17c2bf31435cc29125e2115142c780447cefc967fd5ca26f363668f01008dc66 module/provider-web-search-contract
|
||||
69e205f87efbee176778ef5810c104dc0528e2545cafcf31b6cc8ea360e06020 module/provider-zai-endpoint
|
||||
56151035047a69e6163d5578023d00f51a2413b777f3784af88e06261c039345 module/proxy-capture
|
||||
08f9f6abbe7f01fab7f96d611058f0de55996026a0e90cfd014fd2fdbe62ba0a module/qa-runner-runtime
|
||||
aa2a56b4448c8ebdec9d06aac95d809995f533093d42fa32cd75e1d852967245 module/question-gateway-runtime
|
||||
5e6ac90d11f2f6ed764f5c53ef98110551ff4beaa0d5dcc343a3e7d97e41844d module/realtime-bootstrap-context
|
||||
6f551c1da49e6652f4af775798f45d3f3d5949c884c2e1967fc6254d34e9867e module/realtime-transcription
|
||||
4c42bf622e25f5896194512aee7698ae8fbf8a2844657aea7a54bef767602368 module/realtime-voice
|
||||
2e09c3181e79e157ed5366b144d116ef8cc06023256ace3fa59b35c43cab513a module/reply-chunking
|
||||
b673d50862d0c5fd00723252a541ab3baeac196b75f689f56439fdb63a68fda0 module/reply-dedupe
|
||||
bd2355e94248d21c252148085e5afa5db9a2f3f48f665a8b3e0fcf77326d9b6c module/reply-dispatch-runtime
|
||||
b215c812a6be8565a25439f52b528fb951f922d2e37900c89a32decddc643ee8 module/reply-history
|
||||
f394fe4d5a7ed9e4d574063ae44e8d6af85c9a0e7d8b329f750ca16b0664325f module/reply-payload
|
||||
82fcb700b918f0776008e198c72c087ce8c387a9bc982e1e255e67fc5b43cc00 module/reply-reference
|
||||
4e886f327f912688c338a1eccb208298987613f81325d4f999852b6925487eb2 module/reply-runtime
|
||||
132c734e81f821ba2dfeac1266d4c946d1d89aa834231eb3312087f458360294 module/request-url
|
||||
04c04da4ee8dd042787076c759e650941c458d16e725f0d3f9997ff1bfccb213 module/response-limit-runtime
|
||||
dba5987236821b24a3cfe2767841b99cb4ecfd9c567abc6f9cc2cd675ce503ca module/retry-runtime
|
||||
f7cf5c4b7be10345ac34e5f88990985f418ab855d4c0f25042b7b8cc933176f2 module/routing
|
||||
ff6cca86f54f94f238205f5b122af36666314e0a380f3ec7f0ccb9ed9208df31 module/run-command
|
||||
af338ca9fbd0dc5701ad085e17937471953241369a0c961f8894ca7df467b72d module/runtime
|
||||
53b0295cec105696a1664c5c7f5576a7b55d197eb95dcd9185486f010bd53750 module/runtime
|
||||
fcf103d18c1d64ffa9719f1d5a1ca349df3a6125d00c9d54a1b76c195ba8691b module/runtime-config-snapshot
|
||||
1392e45b8e8ef50b72a9d012a6abe5a73d00b74b6eccc53c817096dfe7a8f591 module/runtime-doctor
|
||||
b6b8edc50ecab8386c9acd8f374a207212b5a99c8f518538bbcf0c458dda3881 module/runtime-env
|
||||
841bee5465fd523116f8739eb36f79fd9efc8139dff9d98d32e35002c1614fe7 module/runtime-fetch
|
||||
1b223b31f6f78d9eca4a07b92802e59684f24d7a1d040b83856ad165d0dd70fd module/runtime-group-policy
|
||||
99ca5432af104f82cea78a632d3fd14c924a859f268063b48bfdf3f080bb1c0c module/runtime-logger
|
||||
edaa91de9edc92d684c5b5410a86c9a6c072877a43ea699965807c565e2d6a1f module/runtime-secret-resolution
|
||||
0d8f2c5f3a3325d7d190d2c395835f58ac57f1bea9b6fa516c6942b96d9bf605 module/runtime-store
|
||||
e9c4398b04d04fead0e46ec618589d8f597a0b6087805ab132138e941b76e190 module/sandbox
|
||||
79bba48c5fcb578a86149c99c26745ac00cb1b5c2be7d48e982e826b37e2ea26 module/secret-file-runtime
|
||||
9e34f73592f9df1c01f2df10b6aecbbb2494938e8cc1a6198ef4d56eacedc7c1 module/secret-input
|
||||
57dcb1462d4c4f9a98d934c4ca975b163d704758af9821a64001ff3ac05637c3 module/secret-input-runtime
|
||||
3718c15f255d6f315f863a100ae28a578277f07f45034d8403e254e7cb90be49 module/secret-provider-integration
|
||||
17a6a199714ba8308e62928c0491bcf9fd214c923c3879aa99a047a30138253d module/secret-ref-runtime
|
||||
7af94d4b67b9d39a80b154ad84987bf4d63b008a63c3cc807baea5b36fbd4138 module/secure-random-runtime
|
||||
596a315d426121c9620b314e3a9a7f523840b46e007d94d0d5e83cdedf789d15 module/security-runtime
|
||||
50beebb77e461deaccdbff038f6a461dff1d5773426322dc6d7991f6e05a7c37 module/self-hosted-provider-setup
|
||||
250476d121ffa4ed67d497c59d9c7bb1886973e92ebed39325a02609217bade0 module/session-binding-runtime
|
||||
ed35a448c8f7650acb34739a591334267371f1ffe352505fc2808330d78580bd module/session-catalog
|
||||
31b785e74f1f8f56241b7756ef6a5d86199c5ce177cbb1c234a261866972f270 module/session-discussion
|
||||
f07839f5b8929a179857a0b4b89f8448864078cd5972dd53f9a30e50bf55408d module/session-key-runtime
|
||||
f59099aa2d536246d4b1297f01bcea66796351a9259debdd45909afeb7a42d86 module/session-store-runtime
|
||||
b1d0a76337122cb9dbb0c89fbb8bfacc1a88ce689270d3d684019c9a03ce669a module/session-transcript-hit
|
||||
04c19558a5f27380ea13cadee1e3238729788c18a919fb078b24d2d67d006ecf module/session-transcript-runtime
|
||||
a8fb87c7c39ec6e874926a311d2306b49843767ee5659e006024c59af822466e module/session-visibility
|
||||
695971d31b3e16f0bf9b643acc30df312fe94b3c0dfb27a2e6156c8a00b5e261 module/setup
|
||||
575fe05081bf9edd1c6d886143e4835c218fb8d0641ce148a4a69d3cefcea2ef module/setup-adapter-runtime
|
||||
9129c17df1523903f34beffd348ce177fcaa2983e155a8c854a50cf1bd7e99c4 module/setup-runtime
|
||||
cd431f6ba8327b81438b7a63b1963120f200f5abd145fb6aa7c5c561339cb0b1 module/setup-tools
|
||||
f2095165f836537aa6c145aecfff32543c9cc7b3935d33d107869b5f975475ee module/simple-completion-runtime
|
||||
18e384ec43d9eaee52c8e286e127bda2048370e2337964a754d94b236724ca9e module/skill-commands-runtime
|
||||
7eaea43619ee15e8b0d2d17c81c63b057576b251fecebcb5034d4e06e5940aea module/skills-runtime
|
||||
6639d26ccc022ee5c55e23aa52071e30dbbddb17e7c4ecf62b152358380e087f module/speech
|
||||
5c228af0457bf14b2833c2d0994c98212f6a7451abec7d5fe5cad0632115bb84 module/speech-core
|
||||
ae469f32799380e6b045abaefefee6eb3f00d714ffbf36b6eeef5025dc529472 module/speech-settings
|
||||
59f8e58aea2ba7870b0bb758d597360241901b8c5165b695df1f4a62912e41d9 module/sqlite-runtime
|
||||
e1379adab6398cdeda7671a4e6cc268508d21270815b53fef793249698a8d601 module/ssrf-dispatcher
|
||||
9e521fe9073dfd1a6a6855f909fa6befe8613e18403f0a65faaba973a8b630c1 module/ssrf-policy
|
||||
c564f2f5d1e6cf7a9fb1d3f1a7fa3ccb42c61306a8497524fcab5d4d785d108d module/ssrf-runtime
|
||||
ff35f9f74d35d37a2eb6126b57f3dc5a4d580b6222fe3a34c9368779ad32eab7 module/state-paths
|
||||
c5ff317bb7957d0870cb806e7989c1d48877e3bed583c173ce2f8e9cfe57ee36 module/status-helpers
|
||||
537047854c21ad20ea0572f8019503cbda3bbafece8194a28c30b0639bde2fde module/string-coerce-runtime
|
||||
eb9a25321eaa2bbea1721f7d4b8b218bed398379494e09a21a621f264435b39a module/string-normalization-runtime
|
||||
32f031eb75c887b24b8eaa693cd0aa1a4648dca85eab7bfdfb3d08136861c274 module/system-event-runtime
|
||||
65361dc9a23578787c1ccf98f7df99e443574614e7ce95889f9a295725e12fae module/talk-config-runtime
|
||||
9efd666b8c2cc8a9abf816751fd9420f3c048d158e48570cae8b7a4cbc52a83f module/target-resolver-runtime
|
||||
ec6df323a2dbd1f837df25c0290289031bf60e0b0250f47172f3eaa316667c90 module/telegram-account
|
||||
7729f9f201c08f114925da75ee86a5a8deb6677e5d1b5ee86bc60aacaa01f63b module/telegram-command-config
|
||||
1b5b9a4532db991fce807ba736b550de27aa5f9de2e1f508a8f4f09cae76ea29 module/telegram-account
|
||||
110944726884fca94f38c9c329b5950629438b9a719f4782c4beeade8bd67746 module/temp-path
|
||||
a65f17db3d04c2ca1b34f9a4ebe8748952bbcb00318b741adbe3f227d2e2de20 module/text-autolink-runtime
|
||||
e24c49c1c7b35e8b4403d45eb76bb0f33ec2f23f714bda322e1363251737d6cd module/text-chunking
|
||||
1df5a33be5dbf611e301c01c6b8bcf502c3101aae10cd14a79f1bbb58b116497 module/text-runtime
|
||||
4bdc79e3b42814a30c3c84401f1f0e4620706092787a1f5d2b6c4148b202fe02 module/text-utility-runtime
|
||||
dac9afb3833e237e3edcc9d687240caceb8288abd0c6b757dcc3c16a819eb029 module/thread-bindings-runtime
|
||||
65c9b0b77c0c19140765ec282f9a6424f6ce8a55d0e318b30485d52fd41968e9 module/thread-bindings-session-runtime
|
||||
360458567c29e4b577b7cd3ded81ed3fff6977221f4bd607662690f502a7f620 module/time-runtime
|
||||
de34bdf5b05937a1dc6b7bd6a06a0372a8017702d5f5fb998b1f065fa46a5570 module/tool-payload
|
||||
a94c9ff59cc361b04f8731a47d722c4bc88cfabf942221369a8cb67bdcda7249 module/tool-plugin
|
||||
c3c90ba2b012732413c5275d65a1c0ff07a937cd67d04d1acbd6207243544d43 module/tool-results
|
||||
9d6ab352913a573b226e054e1dc8c6d088493aea9954950c65585923b5b6895a module/tool-send
|
||||
5d02a59fe9a44a4aaaf027427238874d5ff883688b22b213e05c9f171edfbff5 module/transcripts
|
||||
14ec8a05b813027a5afb9b92eab79995e0d61768545783081ff1515a84383b2c module/transport-ready-runtime
|
||||
eb92e9bf85a08cf263e61b5b3497010b1de73f19bdcc5e826b0b9416ad053b90 module/tts-runtime
|
||||
bf0ffa969b46486f52201900956ed266107f062b22e9be73e5b81356a32185f1 module/types
|
||||
20946e039f15f52023735836f5d48c72a51c4ace80c019edcb0301571cc79101 module/video-generation
|
||||
37c7c8e392583c905c4ad6546dfe4f76e52771ef0272b41a57fd4418d70f638e module/video-generation-core
|
||||
70965c7827aabf85fccedfbba9b1050af476b6772cad2f8ed65e1bee470371a5 module/video-generation-runtime
|
||||
c1688367f51f96507230782f9eb68b9ba2a4eb2b952a074b8f28e05ac57b36cb module/web-content-extractor
|
||||
541df9dea799f25e83ea483d481ecebc5b91c016effab593c54d3efe3ee6517b module/web-media
|
||||
2e59dcb46af00a4a1a1c9c240013c9445d1d938e29e7689db0c450561d49581d module/webhook-ingress
|
||||
30a1d4dd8c540a1320b7775dc7dbe4464df8c33d0dbfe03f3fc9610b3221a322 module/webhook-path
|
||||
c1fe90c8d833e82aa6a94885b4ec5cb54d0463ce5a3bee25ad24124ff8cc2d20 module/webhook-ingress
|
||||
9f2739dfe035d9a053fcd678aa76be79980832495041b770c326ed973a979bee module/webhook-request-guards
|
||||
8ea24940688b1bf82f0f46e3b9ead88afcd0bc39d2871722cd71a9b9311bd61a module/webhook-targets
|
||||
1cc469eacda2818a116ab7b63847b9ddf86225e8d02e62fac48e618ba41a9852 module/widget-html
|
||||
1a6449dbd48d2b9a60d5377a8c3b119df5f6aa2606ca5d61de1d04828125ac93 module/windows-spawn
|
||||
76e3a7b6eb10921d5c18eeaa2eb22654b5412162eb85810109b333ba5b3e9d18 module/zalouser
|
||||
9161b36ec0ab062ea41b363c894fcd672a7727f21cb726739f99f9c184fce69d module/zod
|
||||
|
||||
+1
-5
@@ -405,7 +405,7 @@ For runtime hook debugging:
|
||||
|
||||
Plugin install metadata is machine-managed state, not user config. Installs and updates write it to the shared SQLite state database under the active OpenClaw state directory. The `installed_plugin_index` row stores durable `installRecords` metadata, including records for broken or missing plugin manifests, plus a manifest-derived cold registry cache used by `openclaw plugins update`, uninstall, diagnostics, and the cold plugin registry.
|
||||
|
||||
When OpenClaw sees shipped legacy `plugins.installs` records in config, runtime reads treat them as compatibility input without rewriting `openclaw.json`. Explicit plugin writes and `openclaw doctor --fix` move those records into the plugin index and remove the config key when config writes are allowed; if either write fails, the config records are kept so the install metadata is not lost.
|
||||
`plugins.installs` is a retired authored-config surface. Runtime and update commands read only the SQLite installed-plugin index. Run `openclaw doctor --fix` to import legacy config records into the index and remove the retired key before normal runtime use.
|
||||
|
||||
## Uninstall
|
||||
|
||||
@@ -525,10 +525,6 @@ Use `plugins registry` to inspect whether the persisted registry is present, cur
|
||||
|
||||
`openclaw doctor --fix` also repairs registry-adjacent managed npm drift: if an orphaned or recovered `@openclaw/*` package under a managed plugin npm project or the legacy flat managed npm root shadows a bundled plugin, doctor removes that stale package and rebuilds the registry so startup validates against the bundled manifest. Doctor also relinks the host `openclaw` package into managed npm plugins that declare `peerDependencies.openclaw`, so package-local runtime imports such as `openclaw/plugin-sdk/*` resolve after updates or npm repairs.
|
||||
|
||||
<Warning>
|
||||
`OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY=1` is a deprecated break-glass compatibility switch for registry read failures. Prefer `plugins registry --refresh` or `openclaw doctor --fix`; the env fallback is only for emergency startup recovery while the migration rolls out.
|
||||
</Warning>
|
||||
|
||||
## Marketplace
|
||||
|
||||
```bash
|
||||
|
||||
@@ -64,7 +64,6 @@ These run inside the agent loop or gateway pipeline:
|
||||
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `before_model_resolve` | Pre-session (no `messages`), to deterministically override provider/model before resolution. |
|
||||
| `before_prompt_build` | After session load (with `messages`), to inject `prependContext`, `systemPrompt`, `prependSystemContext`, or `appendSystemContext` before submission. Use `prependContext` for per-turn dynamic text and the system-context fields for stable guidance that belongs in system prompt space. |
|
||||
| `before_agent_start` | Legacy compatibility hook that may run in either phase; prefer the explicit hooks above. |
|
||||
| `before_agent_reply` | After inline actions, before the LLM call. Lets a plugin claim the turn and return a synthetic reply or silence it entirely. |
|
||||
| `agent_end` | After completion, with the final message list and run metadata. |
|
||||
| `before_compaction` / `after_compaction` | Observe or annotate compaction cycles. |
|
||||
|
||||
@@ -151,7 +151,7 @@ a restart.
|
||||
The refactor absorbed or deprecated: `reply-runtime`, `reply-dispatch-runtime`,
|
||||
`reply-reference`, `reply-chunking`, `reply-payload` helpers exposed as public
|
||||
API, `inbound-reply-dispatch`, `channel-reply-pipeline`, and most public uses
|
||||
of `outbound-runtime`. `src/plugin-sdk/channel-message.ts` is now a
|
||||
of the old outbound facade. `src/plugin-sdk/channel-message.ts` is now a
|
||||
`@deprecated` re-export barrel pointing at `channel-outbound` /
|
||||
`channel-inbound`; `channel.turn` runtime aliases were removed and the old
|
||||
`/plugins/sdk-channel-turn` doc page redirects to
|
||||
|
||||
+3
-4
@@ -5599,7 +5599,6 @@ Do not edit it by hand; run `pnpm docs:map:gen`.
|
||||
- H2: Public capability model
|
||||
- H3: External compatibility stance
|
||||
- H3: Plugin shapes
|
||||
- H3: Legacy hooks
|
||||
- H3: Compatibility signals
|
||||
- H2: Architecture overview
|
||||
- H3: Plugin metadata snapshot and lookup table
|
||||
@@ -7502,7 +7501,7 @@ Do not edit it by hand; run `pnpm docs:map:gen`.
|
||||
- H2: Removed compatibility surfaces
|
||||
- H3: Process-global API-provider publication
|
||||
- H3: Private testing barrel
|
||||
- H2: Active deprecations
|
||||
- H2: Migration reference
|
||||
- H2: Talk and realtime voice migration
|
||||
- H2: Removal timeline
|
||||
- H2: Suppressing the warnings temporarily
|
||||
@@ -7579,8 +7578,8 @@ Do not edit it by hand; run `pnpm docs:map:gen`.
|
||||
- Route: /plugins/sdk-subpaths
|
||||
- Headings:
|
||||
- H2: Plugin entry
|
||||
- H3: Deprecated compatibility and test helpers
|
||||
- H3: Reserved bundled plugin helper subpaths
|
||||
- H3: Compatibility and private-local helpers
|
||||
- H3: Bundled plugin helper subpaths
|
||||
- H2: Related
|
||||
|
||||
## plugins/sdk-testing.md
|
||||
|
||||
@@ -251,7 +251,7 @@ See [MCP](/cli/mcp#openclaw-as-an-mcp-client-registry) and
|
||||
- `allow`: optional allowlist (only listed plugins load). `deny` wins.
|
||||
- `plugins.entries.<id>.apiKey`: plugin-level API key convenience field (when supported by the plugin).
|
||||
- `plugins.entries.<id>.env`: plugin-scoped env var map.
|
||||
- `plugins.entries.<id>.hooks.allowPromptInjection`: when `false`, core blocks `before_prompt_build` and ignores prompt-mutating fields from legacy `before_agent_start`, while preserving legacy `modelOverride` and `providerOverride`. Applies to native plugin hooks and supported bundle-provided hook directories.
|
||||
- `plugins.entries.<id>.hooks.allowPromptInjection`: when `false`, core blocks prompt-mutating hooks such as `before_prompt_build`. Applies to native plugin hooks and supported bundle-provided hook directories.
|
||||
- `plugins.entries.<id>.hooks.allowConversationAccess`: when `true`, trusted non-bundled plugins may read raw conversation content from typed hooks such as `llm_input`, `llm_output`, `before_model_resolve`, `before_agent_reply`, `before_agent_run`, `before_agent_finalize`, and `agent_end`.
|
||||
- `plugins.entries.<id>.subagent.allowModelOverride`: explicitly trust this plugin to request per-run `provider` and `model` overrides for background subagent runs.
|
||||
- `plugins.entries.<id>.subagent.allowedModels`: optional allowlist of canonical `provider/model` targets for trusted subagent overrides. Use `"*"` only when you intentionally want to allow any model.
|
||||
@@ -360,7 +360,7 @@ precedence when the same app is present in both paths. If `app/list` cannot be
|
||||
read, account-wide exposure fails closed.
|
||||
|
||||
- `plugins.entries.firecrawl.config.webFetch`: Firecrawl web-fetch provider settings.
|
||||
- `apiKey`: Optional Firecrawl API key for higher limits (accepts SecretRef). Falls back to `plugins.entries.firecrawl.config.webSearch.apiKey`, legacy `tools.web.fetch.firecrawl.apiKey`, or `FIRECRAWL_API_KEY` env var.
|
||||
- `apiKey`: Optional Firecrawl API key for higher limits (accepts SecretRef). Falls back to `plugins.entries.firecrawl.config.webSearch.apiKey` or `FIRECRAWL_API_KEY` env var.
|
||||
- `baseUrl`: Firecrawl API base URL (default: `https://api.firecrawl.dev`; self-hosted overrides must target private/internal endpoints).
|
||||
- `onlyMainContent`: extract only the main content from pages (default: `true`).
|
||||
- `maxAgeMs`: maximum cache age in milliseconds (default: `172800000` / 2 days).
|
||||
|
||||
@@ -27,10 +27,6 @@ At startup, OpenClaw does roughly this:
|
||||
7. call native `register(api)` hooks and collect registrations into the plugin registry
|
||||
8. expose the registry to commands/runtime surfaces
|
||||
|
||||
<Note>
|
||||
`activate` is a legacy alias for `register` — the loader resolves whichever is present (`def.register ?? def.activate`) and calls it at the same point. All bundled plugins use `register`; prefer `register` for new plugins.
|
||||
</Note>
|
||||
|
||||
Safety gates run **before** runtime execution. Discovery blocks a candidate
|
||||
when:
|
||||
|
||||
@@ -228,10 +224,9 @@ conversation, and it runs after core approval handling finishes.
|
||||
Provider plugins have three layers:
|
||||
|
||||
- **Manifest metadata** for cheap pre-runtime lookup:
|
||||
`setup.providers[].envVars`, deprecated compatibility `providerAuthEnvVars`,
|
||||
`providerAuthAliases`, `providerAuthChoices`, and `channelEnvVars`.
|
||||
- **Config-time hooks**: `catalog` (legacy `discovery`) plus
|
||||
`applyConfigDefaults`.
|
||||
`setup.providers[].envVars`, `providerAuthAliases`, `providerAuthChoices`,
|
||||
and `channelConfigs`.
|
||||
- **Config-time hooks**: `catalog` plus `applyConfigDefaults`.
|
||||
- **Runtime hooks**: 40+ optional hooks covering auth, model resolution,
|
||||
stream wrapping, thinking levels, replay policy, and usage endpoints. See
|
||||
[Hook order and usage](#hook-order-and-usage).
|
||||
@@ -242,9 +237,7 @@ behavior without needing a whole custom inference transport.
|
||||
|
||||
Use manifest `setup.providers[].envVars` when the provider has env-based
|
||||
credentials that generic auth/status/model-picker paths should see without
|
||||
loading plugin runtime. Deprecated `providerAuthEnvVars` is still read by the
|
||||
compatibility adapter during the deprecation window, and non-bundled plugins
|
||||
that use it receive a manifest diagnostic. Use manifest `providerAuthAliases`
|
||||
loading plugin runtime. Use manifest `providerAuthAliases`
|
||||
when one provider id should reuse another provider id's env vars, auth profiles,
|
||||
config-backed auth, and API-key onboarding choice. Use manifest
|
||||
`providerAuthChoices` when onboarding/auth-choice CLI surfaces should know the
|
||||
@@ -253,9 +246,8 @@ loading provider runtime. Keep provider runtime
|
||||
`envVars` for operator-facing hints such as onboarding labels or OAuth
|
||||
client-id/client-secret setup vars.
|
||||
|
||||
Use manifest `channelEnvVars` when a channel has env-driven auth or setup that
|
||||
generic shell-env fallback, config/status checks, or setup prompts should see
|
||||
without loading channel runtime.
|
||||
Describe env-driven channel setup and auth through the owning
|
||||
`channelConfigs.<id>.schema` and setup descriptors.
|
||||
|
||||
### Hook order and usage
|
||||
|
||||
@@ -571,7 +563,6 @@ Notes:
|
||||
schemas while OpenClaw owns the provider/runtime boundary.
|
||||
- Uses core media-understanding audio configuration (`tools.media.audio`) and provider fallback order.
|
||||
- Returns `{ text: undefined }` when no transcription output is produced (for example skipped/unsupported input).
|
||||
- `api.runtime.stt.transcribeAudioFile(...)` remains as a compatibility alias.
|
||||
|
||||
Plugins can also launch background subagent runs through `api.runtime.subagent`:
|
||||
|
||||
@@ -686,12 +677,11 @@ Notes:
|
||||
Use narrow SDK subpaths instead of the monolithic `openclaw/plugin-sdk` root
|
||||
barrel when authoring new plugins. Core subpaths:
|
||||
|
||||
| Subpath | Purpose |
|
||||
| ----------------------------------- | -------------------------------------------------- |
|
||||
| `openclaw/plugin-sdk/plugin-entry` | Plugin registration primitives |
|
||||
| `openclaw/plugin-sdk/channel-core` | Channel entry/build helpers |
|
||||
| `openclaw/plugin-sdk/core` | Generic shared helpers and umbrella contract |
|
||||
| `openclaw/plugin-sdk/config-schema` | Root `openclaw.json` Zod schema (`OpenClawSchema`) |
|
||||
| Subpath | Purpose |
|
||||
| ---------------------------------- | -------------------------------------------- |
|
||||
| `openclaw/plugin-sdk/plugin-entry` | Plugin registration primitives |
|
||||
| `openclaw/plugin-sdk/channel-core` | Channel entry/build helpers |
|
||||
| `openclaw/plugin-sdk/core` | Generic shared helpers and umbrella contract |
|
||||
|
||||
Channel plugins pick from a family of narrow seams — `channel-setup`,
|
||||
`setup-runtime`, `setup-tools`, `channel-pairing`,
|
||||
@@ -709,11 +699,10 @@ Runtime and config helpers live under matching focused `*-runtime` subpaths
|
||||
instead of the broad `config-runtime` compatibility barrel.
|
||||
|
||||
<Info>
|
||||
`openclaw/plugin-sdk/channel-runtime`, `openclaw/plugin-sdk/channel-lifecycle`,
|
||||
small channel helper facades, `openclaw/plugin-sdk/outbound-runtime`,
|
||||
`openclaw/plugin-sdk/outbound-send-deps`, `openclaw/plugin-sdk/config-runtime`,
|
||||
and `openclaw/plugin-sdk/infra-runtime` are deprecated compatibility shims for
|
||||
older plugins. New code should import narrower generic primitives instead.
|
||||
`openclaw/plugin-sdk/channel-lifecycle`, small channel helper facades,
|
||||
`openclaw/plugin-sdk/config-runtime`, and `openclaw/plugin-sdk/infra-runtime`
|
||||
are deprecated compatibility shims for older plugins. New code should import
|
||||
narrower generic primitives instead.
|
||||
</Info>
|
||||
|
||||
Repo-internal entry points (per bundled plugin package root):
|
||||
@@ -1014,7 +1003,6 @@ Useful `openclaw.channel` fields beyond the minimal example:
|
||||
- `exposure.configured`: hide the channel from configured-channel listing surfaces when set to `false`
|
||||
- `exposure.setup`: hide the channel from interactive setup/configure pickers when set to `false`
|
||||
- `exposure.docs`: mark the channel as internal/private for docs navigation surfaces
|
||||
- `showConfigured` / `showInSetup`: legacy aliases still accepted for compatibility; prefer `exposure`
|
||||
- `quickstartAllowFrom`: opt the channel into the standard quickstart `allowFrom` flow
|
||||
- `forceAccountBinding`: require explicit account binding even when only one account exists
|
||||
- `preferSessionLookupForAnnounceTarget`: prefer session lookup when resolving announce targets
|
||||
|
||||
@@ -88,18 +88,6 @@ OpenClaw classifies every loaded plugin into a shape based on its actual registr
|
||||
|
||||
Use `openclaw plugins inspect <id>` to see a plugin's shape and capability breakdown. See [CLI reference](/cli/plugins#inspect) for details.
|
||||
|
||||
### Legacy hooks
|
||||
|
||||
The `before_agent_start` hook remains supported as a compatibility path for hook-only plugins. Legacy real-world plugins still depend on it.
|
||||
|
||||
Direction:
|
||||
|
||||
- keep it working
|
||||
- document it as legacy
|
||||
- prefer `before_model_resolve` for model/provider override work
|
||||
- prefer `before_prompt_build` for prompt mutation work
|
||||
- remove only after real usage drops and fixture coverage proves migration safety
|
||||
|
||||
### Compatibility signals
|
||||
|
||||
`openclaw doctor`, `openclaw plugins inspect <id>`, `openclaw status --all`, and `openclaw plugins doctor` surface these compatibility notices:
|
||||
@@ -108,7 +96,6 @@ Direction:
|
||||
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------- |
|
||||
| **config valid** | Config parses fine and plugins resolve |
|
||||
| **hook-only** (info) | Plugin registers only hooks; a supported path, but not migrated to capability registration yet |
|
||||
| **legacy `before_agent_start`** (warn) | Plugin uses the deprecated `before_agent_start` hook instead of `before_model_resolve`/`before_prompt_build` |
|
||||
| **deprecated memory-embedding API** (warn) | Non-bundled plugin uses the old memory-specific embedding provider API instead of `registerEmbeddingProvider` |
|
||||
| **hard error** | Config is invalid or plugin failed to load |
|
||||
|
||||
@@ -322,7 +309,6 @@ import {
|
||||
describeImageWithModel,
|
||||
transcribeOpenAiCompatibleAudio,
|
||||
} from "openclaw/plugin-sdk/media-understanding";
|
||||
import { createPluginBackedWebSearchProvider } from "openclaw/plugin-sdk/provider-web-search";
|
||||
|
||||
const plugin: OpenClawPluginDefinition = {
|
||||
id: "exampleai",
|
||||
@@ -355,12 +341,12 @@ const plugin: OpenClawPluginDefinition = {
|
||||
},
|
||||
});
|
||||
|
||||
api.registerWebSearchProvider(
|
||||
createPluginBackedWebSearchProvider({
|
||||
id: "exampleai-search",
|
||||
// credential + fetch logic
|
||||
}),
|
||||
);
|
||||
api.registerWebSearchProvider({
|
||||
id: "exampleai-search",
|
||||
createTool() {
|
||||
// Return the vendor-owned web search tool.
|
||||
},
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -333,12 +333,6 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
|
||||
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
|
||||
```
|
||||
|
||||
Do not import from the deprecated root barrel:
|
||||
|
||||
```typescript
|
||||
import { definePluginEntry } from "openclaw/plugin-sdk";
|
||||
```
|
||||
|
||||
Within your plugin package, use local barrel files such as `api.ts` and
|
||||
`runtime-api.ts` for internal imports. Do not import your own plugin through an
|
||||
SDK path. Provider-specific helpers should stay in the provider package unless
|
||||
|
||||
@@ -62,58 +62,24 @@ compatibility and mark it `active` instead.
|
||||
|
||||
## Current compatibility areas
|
||||
|
||||
The registry currently tracks around 70 compatibility codes across these
|
||||
areas. New plugin code should use the replacement in each area and in the
|
||||
specific migration guide; existing plugins can keep using a compatibility
|
||||
path until docs, diagnostics, and release notes announce a removal window.
|
||||
The July 2026 sweep removed the expired root SDK, manifest, provider, runtime,
|
||||
registry-flag, and plugin-owned web-config aliases. Doctor migrations remain
|
||||
separately tracked so supported upgrade paths can still repair old config.
|
||||
|
||||
- legacy broad SDK imports such as `openclaw/plugin-sdk/compat`
|
||||
- legacy hook-only plugin shapes and `before_agent_start`
|
||||
- legacy `api.on("deactivate", ...)` cleanup hook names while plugins
|
||||
migrate to `gateway_stop`
|
||||
- legacy `activate(api)` plugin entrypoints while plugins migrate to
|
||||
`register(api)`
|
||||
- legacy SDK aliases such as `openclaw/extension-api`,
|
||||
`openclaw/plugin-sdk/channel-runtime`, `openclaw/plugin-sdk/command-auth`
|
||||
status builders, `openclaw/plugin-sdk/test-utils` (replaced by focused
|
||||
`openclaw/plugin-sdk/*` test subpaths), and the `ClawdbotConfig` /
|
||||
`OpenClawSchemaType` type aliases
|
||||
- bundled plugin allowlist and enablement behavior
|
||||
- legacy provider/channel env-var manifest metadata
|
||||
- legacy provider plugin hooks and type aliases while providers move to
|
||||
explicit catalog, auth, thinking, replay, and transport hooks
|
||||
- legacy runtime aliases such as `api.runtime.taskFlow`,
|
||||
`api.runtime.subagent.getSession`, `api.runtime.stt`, and deprecated
|
||||
`api.runtime.config.loadConfig()` / `api.runtime.config.writeConfigFile(...)`
|
||||
- WhatsApp `WebInboundMessage` flat callback fields (see below)
|
||||
- WhatsApp `WebInboundMessage` top-level admission fields (see below)
|
||||
- legacy memory-plugin split registration while memory plugins move to
|
||||
`registerMemoryCapability`
|
||||
- legacy memory-specific embedding provider registration while embedding
|
||||
providers move to `api.registerEmbeddingProvider(...)` and
|
||||
`contracts.embeddingProviders`
|
||||
- legacy channel SDK helpers for native message schemas, mention gating,
|
||||
inbound envelope formatting, and approval capability nesting
|
||||
- legacy channel route key and comparable-target helper aliases while
|
||||
plugins move to `openclaw/plugin-sdk/channel-route`
|
||||
- activation hints being replaced by manifest contribution ownership
|
||||
- `setup-api` runtime fallback while setup descriptors move to cold
|
||||
`setup.requiresRuntime: false` metadata
|
||||
- provider `discovery` hooks while provider catalog hooks move to
|
||||
`catalog.run(...)`
|
||||
- channel `showConfigured` / `showInSetup` metadata while channel packages
|
||||
move to `openclaw.channel.exposure`
|
||||
- legacy runtime-policy config keys while doctor migrates operators to
|
||||
`agentRuntime`
|
||||
- generated bundled channel config metadata fallback while registry-first
|
||||
`channelConfigs` metadata lands
|
||||
- persisted plugin registry disable and install-migration env flags while
|
||||
repair flows migrate operators to `openclaw plugins registry --refresh`
|
||||
and `openclaw doctor --fix`
|
||||
- legacy plugin-owned web search, web fetch, and x_search config paths
|
||||
while doctor migrates them to `plugins.entries.<plugin>.config`
|
||||
- legacy `plugins.installs` authored config and bundled plugin load-path
|
||||
aliases while install metadata moves into the state-managed plugin ledger
|
||||
The remaining dated compatibility areas are:
|
||||
|
||||
- the August and September SDK subpath windows listed in the migration guide
|
||||
- `api.on("deactivate", ...)` and `api.on("subagent_spawning", ...)` hook aliases
|
||||
- memory-specific embedding registration and the beta.5 session-store bridge
|
||||
- WhatsApp inbound callback aliases described below
|
||||
- explicit channel target parsing and `openclaw/plugin-sdk/messaging-targets`
|
||||
- embedded Pi agent aliases
|
||||
- the shipped agent-harness SDK aliases, whose removal is pending a new
|
||||
externally documented migration decision
|
||||
|
||||
Active, undated registry records cover supported behavior rather than removal
|
||||
debt, including activation hints, plugin capture, bundled plugin enablement,
|
||||
and the generated channel-config fallback.
|
||||
|
||||
### WhatsApp inbound callback flat aliases
|
||||
|
||||
|
||||
@@ -209,8 +209,7 @@ plus a small set of env defaults inside `extensions/copilot/src/`:
|
||||
| `enableSessionTelemetry` | Optional SDK session telemetry flag. |
|
||||
|
||||
OpenClaw plugin hooks need no Copilot-specific attempt configuration. The
|
||||
harness runs `before_prompt_build` (and the legacy `before_agent_start`
|
||||
compatibility hook), `llm_input`, `llm_output`, and `agent_end` through the
|
||||
harness runs `before_prompt_build`, `llm_input`, `llm_output`, and `agent_end` through the
|
||||
standard harness helpers. Successful SDK compactions also run
|
||||
`before_compaction` and `after_compaction`. Bridged OpenClaw tools run
|
||||
`before_tool_call` and report `after_tool_call`; `hooksConfig` remains for
|
||||
|
||||
@@ -121,7 +121,6 @@ observation-only.
|
||||
| `before_model_resolve` | Override provider or model before session messages load |
|
||||
| `agent_turn_prepare` | Consume queued plugin turn injections and add same-turn context before prompt hooks |
|
||||
| `before_prompt_build` | Add dynamic context or system-prompt text before the model call |
|
||||
| `before_agent_start` | Compatibility-only combined phase; prefer the two hooks above |
|
||||
| **`before_agent_run`** | Inspect the final prompt and session messages before model submission; can block the run |
|
||||
| **`before_agent_reply`** | Short-circuit the model turn with a synthetic reply or silence |
|
||||
| **`before_agent_finalize`** | Inspect the natural final answer and request one more model pass |
|
||||
@@ -478,9 +477,6 @@ Use the phase-specific hooks for new plugins:
|
||||
`prependContext` or `appendContext`. Intended for background monitors that
|
||||
need to summarize current state without changing user-initiated turns.
|
||||
|
||||
`before_agent_start` remains for compatibility. Prefer the explicit hooks
|
||||
above so the plugin does not depend on a legacy combined phase.
|
||||
|
||||
`before_agent_run` runs after prompt construction and before any model input,
|
||||
including prompt-local image loading and `llm_input` observation. It receives
|
||||
the current user input as `prompt`, plus loaded session history in `messages`
|
||||
@@ -497,7 +493,7 @@ excluded from transcript, history, broadcast, log, and diagnostics payloads.
|
||||
Observability should use sanitized fields such as blocker id, outcome,
|
||||
timestamp, or a safe category.
|
||||
|
||||
`before_agent_start` and `agent_end` include `event.runId` when OpenClaw can
|
||||
Agent-turn hooks including `agent_end` include `event.runId` when OpenClaw can
|
||||
identify the active run; the same value is also on `ctx.runId`. Cron-driven
|
||||
runs also expose `ctx.jobId` (the originating cron job id) on the agent-turn
|
||||
context so hooks can scope metrics, side effects, or state to a specific
|
||||
@@ -927,9 +923,6 @@ before the next major release:
|
||||
handlers. Read `BodyForAgent` and the structured user-context blocks
|
||||
instead of parsing flat envelope text. See
|
||||
[Plaintext channel envelopes → BodyForAgent](/plugins/sdk-migration#active-deprecations).
|
||||
- **`before_agent_start`** remains for compatibility. New plugins should use
|
||||
`before_model_resolve` and `before_prompt_build` instead of the combined
|
||||
phase.
|
||||
- **`subagent_spawning`** remains for compatibility with older plugins, but
|
||||
new plugins should not return thread routing from it. Core prepares
|
||||
`thread: true` subagent bindings through channel session-binding adapters
|
||||
|
||||
@@ -94,9 +94,6 @@ See [Plugins](/tools/plugin) for the full plugin system guide, and [Capability m
|
||||
"providerAuthAliases": {
|
||||
"openrouter-coding": "openrouter"
|
||||
},
|
||||
"channelEnvVars": {
|
||||
"openrouter-chatops": ["OPENROUTER_CHATOPS_TOKEN"]
|
||||
},
|
||||
"providerAuthChoices": [
|
||||
{
|
||||
"provider": "openrouter",
|
||||
@@ -157,10 +154,8 @@ See [Plugins](/tools/plugin) for the full plugin system guide, and [Capability m
|
||||
| `syntheticAuthRefs` | No | `string[]` | Provider or CLI backend refs whose plugin-owned synthetic auth hook should be probed during cold model discovery before runtime loads. |
|
||||
| `nonSecretAuthMarkers` | No | `string[]` | Bundled-plugin-owned placeholder API key values that represent non-secret local, OAuth, or ambient credential state. |
|
||||
| `commandAliases` | No | `object[]` | Command names owned by this plugin that should produce plugin-aware config and CLI diagnostics before runtime loads. |
|
||||
| `providerAuthEnvVars` | No | `Record<string, string[]>` | Deprecated compatibility env metadata for provider auth/status lookup. Prefer `setup.providers[].envVars` for new plugins; OpenClaw still reads this during the deprecation window. |
|
||||
| `providerUsageAuthEnvVars` | No | `Record<string, string[]>` | Usage/billing-only provider credentials. OpenClaw uses these names for usage discovery and secret scrubbing but never for inference auth. |
|
||||
| `providerAuthAliases` | No | `Record<string, string>` | Provider ids that should reuse another provider id for auth lookup, for example a coding provider that shares the base provider API key and auth profiles. |
|
||||
| `channelEnvVars` | No | `Record<string, string[]>` | Cheap channel env metadata that OpenClaw can inspect without loading plugin code. Use this for env-driven channel setup or auth surfaces that generic startup/config helpers should see. |
|
||||
| `providerAuthChoices` | No | `object[]` | Cheap auth-choice metadata for onboarding pickers, preferred-provider resolution, and simple CLI flag wiring. |
|
||||
| `activation` | No | `object` | Cheap activation planner metadata for startup, provider, command, channel, route, and capability-triggered loading. Metadata only; plugin runtime still owns actual behavior. |
|
||||
| `setup` | No | `object` | Cheap setup/onboarding descriptors that discovery and setup surfaces can inspect without loading plugin runtime. |
|
||||
@@ -495,7 +490,7 @@ Top-level `cliBackends` stays valid and continues to describe CLI inference back
|
||||
|
||||
When present, `setup.providers` and `setup.cliBackends` are the preferred descriptor-first lookup surface for setup discovery. If the descriptor only narrows the candidate plugin and setup still needs richer setup-time runtime hooks, set `requiresRuntime: true` and keep `setup-api` in place as the fallback execution path.
|
||||
|
||||
OpenClaw also includes `setup.providers[].envVars` in generic provider auth and env-var lookups. `providerAuthEnvVars` remains supported through a compatibility adapter during the deprecation window, but non-bundled plugins that still use it receive a manifest diagnostic. New plugins should put setup/status env metadata on `setup.providers[].envVars`.
|
||||
OpenClaw includes `setup.providers[].envVars` in generic provider auth and env-var lookups. Put setup and status env metadata there.
|
||||
|
||||
Use `providerUsageAuthEnvVars` when a billing or organization-level credential must activate `resolveUsageAuth` without becoming an inference credential. These names join workspace dotenv blocking, ACP child-process stripping, sandbox secret filtering, and broad secret scrubbing. The provider runtime still reads and classifies the value inside `resolveUsageAuth`.
|
||||
|
||||
@@ -1291,7 +1286,7 @@ See [Configuration reference](/gateway/configuration) for the full `plugins.*` s
|
||||
- `providerCatalogEntry` must stay lightweight and should not import broad runtime code; use it for static provider catalog metadata or narrow discovery descriptors, not request-time execution.
|
||||
- Exclusive plugin kinds are selected through `plugins.slots.*`: `kind: "memory"` via `plugins.slots.memory` (default `memory-core`), `kind: "context-engine"` via `plugins.slots.contextEngine` (default `legacy`).
|
||||
- Declare exclusive plugin kind in this manifest. Runtime-entry `OpenClawPluginDefinition.kind` is deprecated and remains only as a compatibility fallback for older plugins.
|
||||
- Env-var metadata (`setup.providers[].envVars`, deprecated `providerAuthEnvVars`, and `channelEnvVars`) is declarative only. Status, audit, cron delivery validation, and other read-only surfaces still apply plugin trust and effective activation policy before treating an env var as configured.
|
||||
- Env-var metadata in `setup.providers[].envVars` is declarative only. Status, audit, cron delivery validation, and other read-only surfaces still apply plugin trust and effective activation policy before treating an env var as configured.
|
||||
- For runtime wizard metadata that requires provider code, see [Provider runtime hooks](/plugins/architecture-internals#provider-runtime-hooks).
|
||||
- If your plugin depends on native modules, document the build steps and any package-manager allowlist requirements (for example, pnpm `allow-build-scripts` + `pnpm rebuild <package>`).
|
||||
|
||||
|
||||
@@ -5,13 +5,11 @@ title: "Channel message API"
|
||||
|
||||
This page moved to [Channel outbound API](/plugins/sdk-channel-outbound).
|
||||
|
||||
`openclaw/plugin-sdk/channel-message` and
|
||||
`openclaw/plugin-sdk/channel-message-runtime` remain deprecated compatibility
|
||||
subpaths for older plugins; both are thin aliases over the shared channel
|
||||
message core. New channel plugins should use
|
||||
`openclaw/plugin-sdk/channel-message` remains a deprecated compatibility
|
||||
subpath for older plugins. New channel plugins should use
|
||||
`openclaw/plugin-sdk/channel-outbound` for message lifecycle, receipt,
|
||||
durable send, and live preview helpers instead of adding new helpers to the
|
||||
deprecated subpaths.
|
||||
deprecated subpath.
|
||||
|
||||
Removal plan: keep these aliases through the external plugin migration
|
||||
window, then remove them in the next major SDK cleanup after callers have
|
||||
|
||||
@@ -4,7 +4,7 @@ title: "Channel outbound API"
|
||||
read_when:
|
||||
- You are building or refactoring a messaging channel plugin send path
|
||||
- You need durable final reply delivery, receipts, live preview finalization, or receive acknowledgement policy
|
||||
- You are migrating from channel-message, channel-message-runtime, or legacy reply dispatch helpers
|
||||
- You are migrating from channel-message or legacy reply dispatch helpers
|
||||
---
|
||||
|
||||
Channel plugins expose outbound message behavior from
|
||||
|
||||
@@ -480,10 +480,9 @@ adapter/wizard fail closed on config writes and finalization, and they reuse
|
||||
the same install-required message across validation, finalize, and docs-link
|
||||
copy.
|
||||
|
||||
If your channel supports env-driven setup or auth and generic startup/config
|
||||
flows should know those env names before runtime loads, declare them in the
|
||||
plugin manifest with `channelEnvVars`. Keep channel runtime `envVars` or local
|
||||
constants for operator-facing copy only.
|
||||
If your channel supports env-driven setup or auth, expose it through the
|
||||
channel config schema and setup descriptors. Keep channel runtime `envVars` or
|
||||
local constants for operator-facing copy only.
|
||||
|
||||
If your channel can appear in `status`, `channels list`, `channels status`, or
|
||||
SecretRef scans before the plugin runtime starts, add `openclaw.setupEntry` in
|
||||
@@ -527,10 +526,6 @@ surfaces:
|
||||
and adapter registration
|
||||
- `openclaw/plugin-sdk/agent-media-payload` only when a legacy agent/media
|
||||
payload field layout is still required
|
||||
- `openclaw/plugin-sdk/telegram-command-config` (deprecated: no bundled
|
||||
plugin uses it in production) for Telegram custom-command normalization,
|
||||
duplicate/conflict validation, and a fallback-stable command config
|
||||
contract; prefer plugin-local command config handling for new plugin code
|
||||
|
||||
Auth-only channels can usually stop at the default path: core handles
|
||||
approvals and the plugin just exposes outbound/auth capabilities. Native
|
||||
|
||||
+56
-231
@@ -16,31 +16,32 @@ change, this guide gets it onto the current contracts.
|
||||
|
||||
## What changed
|
||||
|
||||
Two wide-open import surfaces used to let plugins reach almost anything from a
|
||||
single entry point:
|
||||
Several wide-open import surfaces used to let plugins reach almost anything
|
||||
from a single entry point:
|
||||
|
||||
- **`openclaw/plugin-sdk/compat`** - re-exported dozens of helpers to keep
|
||||
older hook-based plugins working while the new architecture was built.
|
||||
- **`openclaw/plugin-sdk`** and **`openclaw/plugin-sdk/compat`** - re-exported
|
||||
dozens of helpers while the focused SDK was being built. Both roots are now
|
||||
removed; import a documented subpath instead.
|
||||
- **`openclaw/plugin-sdk/infra-runtime`** - a broad barrel mixing system
|
||||
events, heartbeat state, delivery queues, fetch/proxy helpers, file helpers,
|
||||
approval types, and unrelated utilities.
|
||||
- **`openclaw/plugin-sdk/config-runtime`** - a broad config barrel still
|
||||
carrying deprecated direct load/write helpers during the migration window.
|
||||
- **`openclaw/extension-api`** - a bridge giving plugins direct access to
|
||||
host-side helpers like the embedded agent runner.
|
||||
- **`openclaw/plugin-sdk/config-runtime`** - a broad config barrel retained
|
||||
only for its later compatibility window; direct runtime load/write helpers
|
||||
have been removed.
|
||||
- **`openclaw/extension-api`** - a removed bridge that gave plugins direct
|
||||
access to host-side helpers like the embedded agent runner.
|
||||
- **`api.registerEmbeddedExtensionFactory(...)`** - a removed embedded-runner-only
|
||||
hook that observed embedded-runner events such as `tool_result`. Use agent
|
||||
tool-result middleware instead (see [Migrate embedded tool-result extensions
|
||||
to middleware](#how-to-migrate)).
|
||||
|
||||
These surfaces are **deprecated**: they still work, but new plugins must not
|
||||
use them, and existing plugins should migrate before the next major release
|
||||
removes them. `registerEmbeddedExtensionFactory` has already been removed;
|
||||
legacy registrations no longer load.
|
||||
The root SDK, compat barrel, extension bridge, and embedded extension factory
|
||||
have been removed. `infra-runtime` and `config-runtime` remain only for their
|
||||
separately recorded later windows; new plugins should use focused subpaths.
|
||||
|
||||
<Warning>
|
||||
The backwards-compatibility layer will be removed in a future major release.
|
||||
Plugins still importing from these surfaces will break when that happens.
|
||||
Plugins importing the removed root, compat, or extension surfaces no longer
|
||||
load. Follow the mappings below before upgrading.
|
||||
</Warning>
|
||||
|
||||
OpenClaw does not remove or reinterpret documented plugin behavior in the same
|
||||
@@ -137,10 +138,9 @@ SDK.
|
||||
tests and logging; the gateway remains responsible for applying or
|
||||
scheduling the restart.
|
||||
|
||||
`loadConfig` and `writeConfigFile` remain as deprecated compatibility
|
||||
helpers for external plugins and warn once with the
|
||||
`runtime-config-load-write` compatibility code. Bundled plugins and repo
|
||||
runtime code are guarded by `pnpm check:deprecated-api-usage` and
|
||||
`loadConfig` and `writeConfigFile` have been removed from the plugin
|
||||
runtime. Bundled plugins and repo runtime code are guarded by
|
||||
`pnpm check:deprecated-api-usage` and
|
||||
`pnpm check:no-runtime-action-load-config`: new production plugin usage
|
||||
fails outright, direct config writes fail, gateway server methods must use
|
||||
the request runtime snapshot, runtime channel send/action/client helpers
|
||||
@@ -372,181 +372,11 @@ SDK.
|
||||
|
||||
## Import path reference
|
||||
|
||||
<Accordion title="Common import path table">
|
||||
| Import path | Purpose | Key exports |
|
||||
| --- | --- | --- |
|
||||
| `plugin-sdk/plugin-entry` | Canonical plugin entry helper | `definePluginEntry` |
|
||||
| `plugin-sdk/core` | Legacy umbrella re-export for channel entry definitions/builders | `defineChannelPluginEntry`, `createChatChannelPlugin` |
|
||||
| `plugin-sdk/config-schema` | Root config schema export | `OpenClawSchema` |
|
||||
| `plugin-sdk/provider-entry` | Single-provider entry helper | `defineSingleProviderPluginEntry` |
|
||||
| `plugin-sdk/channel-core` | Focused channel entry definitions and builders | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `createChannelConfigUiHints` |
|
||||
| `plugin-sdk/setup` | Shared setup wizard helpers | Setup translator, allowlist prompts, setup status builders |
|
||||
| `plugin-sdk/setup-runtime` | Setup-time runtime helpers | `createSetupTranslator`, import-safe setup patch adapters, lookup-note helpers, `promptResolvedAllowFrom`, `splitSetupEntries`, delegated setup proxies |
|
||||
| `plugin-sdk/setup-adapter-runtime` | Deprecated setup adapter alias | Use `plugin-sdk/setup-runtime` |
|
||||
| `plugin-sdk/setup-tools` | Setup tooling helpers | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
|
||||
| `plugin-sdk/account-core` | Multi-account helpers | Account list/config/action-gate helpers |
|
||||
| `plugin-sdk/account-id` | Account-id helpers | `DEFAULT_ACCOUNT_ID`, account-id normalization |
|
||||
| `plugin-sdk/account-resolution` | Account lookup helpers | Account lookup + default-fallback helpers |
|
||||
| `plugin-sdk/account-helpers` | Narrow account helpers | Account list/account-action helpers |
|
||||
| `plugin-sdk/channel-setup` | Setup wizard adapters | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`, plus `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` |
|
||||
| `plugin-sdk/channel-pairing` | DM pairing primitives | `createChannelPairingController` |
|
||||
| `plugin-sdk/channel-reply-pipeline` | Reply prefix, typing, and source-delivery wiring | `createChannelReplyPipeline`, `resolveChannelSourceReplyDeliveryMode` |
|
||||
| `plugin-sdk/channel-config-helpers` | Config adapter factories and DM access helpers | `createHybridChannelConfigAdapter`, `resolveChannelDmAccess`, `resolveChannelDmAllowFrom`, `resolveChannelDmPolicy`, `normalizeChannelDmPolicy`, `normalizeLegacyDmAliases` |
|
||||
| `plugin-sdk/channel-config-schema` | Config schema builders | Shared channel config schema primitives and the generic builder only |
|
||||
| `plugin-sdk/bundled-channel-config-schema` | Bundled config schemas | OpenClaw-maintained bundled plugins only; new plugins must define plugin-local schemas |
|
||||
| `plugin-sdk/channel-config-schema-legacy` | Deprecated bundled config schemas | Compatibility alias only; use `plugin-sdk/bundled-channel-config-schema` for maintained bundled plugins |
|
||||
| `plugin-sdk/telegram-command-config` | Telegram command config helpers | Command-name normalization, description trimming, duplicate/conflict validation |
|
||||
| `plugin-sdk/channel-policy` | Group/DM policy resolution | `resolveChannelGroupRequireMention` |
|
||||
| `plugin-sdk/channel-lifecycle` | Deprecated compatibility facade | Use `plugin-sdk/channel-outbound` |
|
||||
| `plugin-sdk/inbound-envelope` | Inbound envelope helpers | Shared route + envelope builder helpers |
|
||||
| `plugin-sdk/channel-inbound` | Inbound receive helpers | Context building, formatting, roots, runners, prepared reply dispatch, and dispatch predicates |
|
||||
| `plugin-sdk/messaging-targets` | Deprecated target parsing import path | Use `plugin-sdk/channel-targets` for generic target parsing helpers, `plugin-sdk/channel-route` for route comparison, and plugin-owned `messaging.targetResolver` / `messaging.resolveOutboundSessionRoute` for provider-specific target resolution |
|
||||
| `plugin-sdk/outbound-media` | Outbound media helpers | Shared outbound media loading |
|
||||
| `plugin-sdk/outbound-send-deps` | Deprecated compatibility facade | Use `plugin-sdk/channel-outbound` |
|
||||
| `plugin-sdk/channel-outbound` | Outbound message lifecycle helpers | Message adapters, receipts, durable send helpers, live preview/streaming helpers, reply options, lifecycle helpers, outbound identity, and payload planning |
|
||||
| `plugin-sdk/channel-streaming` | Deprecated compatibility facade | Use `plugin-sdk/channel-outbound` |
|
||||
| `plugin-sdk/outbound-runtime` | Deprecated compatibility facade | Use `plugin-sdk/channel-outbound` |
|
||||
| `plugin-sdk/thread-bindings-runtime` | Thread-binding helpers | Thread-binding lifecycle and adapter helpers |
|
||||
| `plugin-sdk/agent-media-payload` | Legacy media payload helpers | Agent media payload builder for legacy field layouts |
|
||||
| `plugin-sdk/channel-runtime` | Deprecated compatibility shim | Legacy channel runtime utilities only |
|
||||
| `plugin-sdk/channel-send-result` | Send result types | Reply result types |
|
||||
| `plugin-sdk/runtime-store` | Persistent plugin storage | `createPluginRuntimeStore` |
|
||||
| `plugin-sdk/runtime` | Broad runtime helpers | Runtime/logging/backup/plugin-install helpers |
|
||||
| `plugin-sdk/runtime-env` | Narrow runtime env helpers | Logger/runtime env, timeout, retry, and backoff helpers |
|
||||
| `plugin-sdk/plugin-runtime` | Shared plugin runtime helpers | Plugin commands/hooks/http/interactive helpers |
|
||||
| `plugin-sdk/hook-runtime` | Hook pipeline helpers | Shared webhook/internal hook pipeline helpers |
|
||||
| `plugin-sdk/lazy-runtime` | Lazy runtime helpers | `createLazyRuntimeModule`, `createLazyRuntimeMethod`, `createLazyRuntimeMethodBinder`, `createLazyRuntimeNamedExport`, `createLazyRuntimeSurface` |
|
||||
| `plugin-sdk/process-runtime` | Process helpers | Shared exec helpers |
|
||||
| `plugin-sdk/cli-runtime` | CLI runtime helpers | Command formatting, waits, version helpers |
|
||||
| `plugin-sdk/gateway-runtime` | Gateway helpers | Gateway client, event-loop-ready start helper, advertised LAN host resolution, and channel-status patch helpers |
|
||||
| `plugin-sdk/config-runtime` | Deprecated config compatibility shim | Prefer `config-contracts`, `plugin-config-runtime`, `runtime-config-snapshot`, and `config-mutation` |
|
||||
| `plugin-sdk/telegram-command-config` | Telegram command helpers | Fallback-stable Telegram command validation helpers when the bundled Telegram contract surface is unavailable |
|
||||
| `plugin-sdk/approval-runtime` | Approval prompt helpers | Exec/plugin approval payload, approval capability/profile helpers, native approval routing/runtime helpers, and structured approval display path formatting |
|
||||
| `plugin-sdk/approval-auth-runtime` | Approval auth helpers | Approver resolution, same-chat action auth |
|
||||
| `plugin-sdk/approval-client-runtime` | Approval client helpers | Native exec approval profile/filter helpers |
|
||||
| `plugin-sdk/approval-delivery-runtime` | Approval delivery helpers | Native approval capability/delivery adapters |
|
||||
| `plugin-sdk/approval-gateway-runtime` | Approval gateway helpers | Shared approval gateway resolver |
|
||||
| `plugin-sdk/approval-reference-runtime` | Approval transport references | Deterministic durable-locator helper for transport-limited callbacks |
|
||||
| `plugin-sdk/approval-handler-adapter-runtime` | Approval adapter helpers | Lightweight native approval adapter loading helpers for hot channel entrypoints |
|
||||
| `plugin-sdk/approval-handler-runtime` | Approval handler helpers | Broader approval handler runtime helpers; prefer the narrower adapter/gateway seams when they are enough |
|
||||
| `plugin-sdk/approval-native-runtime` | Approval target helpers | Native approval target/account binding helpers |
|
||||
| `plugin-sdk/approval-reply-runtime` | Approval reply helpers | Exec/plugin approval reply payload helpers |
|
||||
| `plugin-sdk/channel-runtime-context` | Channel runtime-context helpers | Generic channel runtime-context register/get/watch helpers |
|
||||
| `plugin-sdk/security-runtime` | Security helpers | Shared trust, DM gating, root-bounded file/path helpers, external-content, and secret-collection helpers |
|
||||
| `plugin-sdk/ssrf-policy` | SSRF policy helpers | Host allowlist and private-network policy helpers |
|
||||
| `plugin-sdk/ssrf-runtime` | SSRF runtime helpers | Pinned-dispatcher, guarded fetch, SSRF policy helpers |
|
||||
| `plugin-sdk/system-event-runtime` | System event helpers | `enqueueSystemEvent` (including keyed replacement), `peekSystemEventEntries` |
|
||||
| `plugin-sdk/heartbeat-runtime` | Heartbeat helpers | Heartbeat wake, event, and visibility helpers |
|
||||
| `plugin-sdk/delivery-queue-runtime` | Delivery queue helpers | `drainPendingDeliveries` |
|
||||
| `plugin-sdk/channel-activity-runtime` | Channel activity helpers | `recordChannelActivity` |
|
||||
| `plugin-sdk/dedupe-runtime` | Dedupe helpers | In-memory and persistent-backed dedupe caches |
|
||||
| `plugin-sdk/file-access-runtime` | File access helpers | Safe local-file/media path helpers |
|
||||
| `plugin-sdk/transport-ready-runtime` | Transport readiness helpers | `waitForTransportReady` |
|
||||
| `plugin-sdk/exec-approvals-runtime` | Exec approval policy helpers | `loadExecApprovals`, `resolveExecApprovalsFromFile`, `ExecApprovalsFile` |
|
||||
| `plugin-sdk/collection-runtime` | Bounded cache helpers | `pruneMapToMaxSize` |
|
||||
| `plugin-sdk/diagnostic-runtime` | Diagnostic gating helpers | `isDiagnosticFlagEnabled`, `isDiagnosticsEnabled` |
|
||||
| `plugin-sdk/error-runtime` | Error helpers | `formatUncaughtError`, `isApprovalNotFoundError`, error graph helpers, `PlatformMessageNotDispatchedError` |
|
||||
| `plugin-sdk/fetch-runtime` | Wrapped fetch/proxy helpers | `resolveFetch`, proxy helpers, EnvHttpProxyAgent option helpers |
|
||||
| `plugin-sdk/host-runtime` | Host normalization helpers | `normalizeHostname`, `normalizeScpRemoteHost` |
|
||||
| `plugin-sdk/retry-runtime` | Retry helpers | `RetryConfig`, `retryAsync`, policy runners |
|
||||
| `plugin-sdk/allow-from` | Allowlist formatting and input mapping | `formatAllowFromLowercase`, `mapAllowlistResolutionInputs` |
|
||||
| `plugin-sdk/command-auth` | Command gating and command-surface helpers | `resolveControlCommandGate`, sender-authorization helpers, command registry helpers including dynamic argument menu formatting |
|
||||
| `plugin-sdk/command-status` | Command status/help renderers | `buildCommandsMessage`, `buildCommandsMessagePaginated`, `buildHelpMessage` |
|
||||
| `plugin-sdk/secret-input` | Secret input parsing | Secret input helpers |
|
||||
| `plugin-sdk/webhook-ingress` | Webhook request helpers | Webhook target utilities |
|
||||
| `plugin-sdk/webhook-request-guards` | Webhook body guard helpers | Request body read/limit helpers |
|
||||
| `plugin-sdk/reply-runtime` | Shared reply runtime | Inbound dispatch, heartbeat, reply planner, chunking |
|
||||
| `plugin-sdk/reply-dispatch-runtime` | Narrow reply dispatch helpers | Finalize, provider dispatch, and conversation-label helpers |
|
||||
| `plugin-sdk/reply-history` | Reply-history helpers | `createChannelHistoryWindow`; deprecated map-helper compatibility exports such as `buildPendingHistoryContextFromMap`, `recordPendingHistoryEntry`, and `clearHistoryEntriesIfEnabled` |
|
||||
| `plugin-sdk/reply-reference` | Reply reference planning | `createReplyReferencePlanner` |
|
||||
| `plugin-sdk/reply-chunking` | Reply chunk helpers | Text/markdown chunking helpers |
|
||||
| `plugin-sdk/session-store-runtime` | Session store helpers | Scoped session row helpers, store path helpers, and updated-at reads |
|
||||
| `plugin-sdk/state-paths` | State path helpers | State and OAuth dir helpers |
|
||||
| `plugin-sdk/routing` | Routing/session-key helpers | `resolveAgentRoute`, `buildAgentSessionKey`, `resolveDefaultAgentBoundAccountId`, session-key normalization helpers |
|
||||
| `plugin-sdk/status-helpers` | Channel status helpers | Channel/account status summary builders, runtime-state defaults, issue metadata helpers |
|
||||
| `plugin-sdk/target-resolver-runtime` | Target resolver helpers | Shared target resolver helpers |
|
||||
| `plugin-sdk/string-normalization-runtime` | String normalization helpers | Slug/string normalization helpers |
|
||||
| `plugin-sdk/request-url` | Request URL helpers | Extract string URLs from request-like inputs |
|
||||
| `plugin-sdk/run-command` | Timed command helpers | Timed command runner with normalized stdout/stderr |
|
||||
| `plugin-sdk/param-readers` | Param readers | Common tool/CLI param readers |
|
||||
| `plugin-sdk/tool-payload` | Tool payload extraction | Extract normalized payloads from tool result objects |
|
||||
| `plugin-sdk/tool-send` | Tool send extraction | Extract canonical send target fields from tool args |
|
||||
| `plugin-sdk/temp-path` | Temp path helpers | Shared temp-download path helpers |
|
||||
| `plugin-sdk/logging-core` | Logging helpers | Subsystem logger and redaction helpers |
|
||||
| `plugin-sdk/markdown-table-runtime` | Markdown-table helpers | Markdown table mode helpers |
|
||||
| `plugin-sdk/reply-payload` | Message reply types | Reply payload types |
|
||||
| `plugin-sdk/provider-setup` | Curated local/self-hosted provider setup helpers | Self-hosted provider discovery/config helpers |
|
||||
| `plugin-sdk/self-hosted-provider-setup` | Focused OpenAI-compatible self-hosted provider setup helpers | Same self-hosted provider discovery/config helpers |
|
||||
| `plugin-sdk/provider-auth-runtime` | Provider runtime auth helpers | Runtime API-key resolution helpers |
|
||||
| `plugin-sdk/provider-auth-api-key` | Provider API-key setup helpers | API-key onboarding/profile-write helpers |
|
||||
| `plugin-sdk/provider-auth-result` | Provider auth-result helpers | Standard OAuth auth-result builder |
|
||||
| `plugin-sdk/provider-selection-runtime` | Provider selection helpers | Configured-or-auto provider selection and raw provider config merging |
|
||||
| `plugin-sdk/provider-env-vars` | Provider env-var helpers | Provider auth env-var lookup helpers |
|
||||
| `plugin-sdk/provider-model-shared` | Shared provider model/replay helpers | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, shared replay-policy builders, provider-endpoint helpers, and model-id normalization helpers |
|
||||
| `plugin-sdk/provider-catalog-shared` | Shared provider catalog helpers | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `buildManifestModelProviderConfig`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
|
||||
| `plugin-sdk/provider-onboard` | Provider onboarding patches | Onboarding config helpers |
|
||||
| `plugin-sdk/provider-http` | Provider HTTP helpers | Generic provider HTTP/endpoint capability helpers, including audio transcription multipart form helpers |
|
||||
| `plugin-sdk/provider-web-fetch` | Provider web-fetch helpers | Web-fetch provider registration/cache helpers |
|
||||
| `plugin-sdk/provider-web-search-config-contract` | Provider web-search config helpers | Narrow web-search config/credential helpers for providers that do not need plugin-enable wiring |
|
||||
| `plugin-sdk/provider-web-search-contract` | Provider web-search contract helpers | Narrow web-search config/credential contract helpers such as `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig`, and scoped credential setters/getters |
|
||||
| `plugin-sdk/provider-web-search` | Provider web-search helpers | Web-search provider registration/cache/runtime helpers |
|
||||
| `plugin-sdk/provider-tools` | Provider tool/schema compat helpers | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, and DeepSeek/Gemini/OpenAI schema cleanup + diagnostics |
|
||||
| `plugin-sdk/provider-usage` | Provider usage helpers | `fetchClaudeUsage`, `fetchGeminiUsage`, `fetchGithubCopilotUsage`, and other provider usage helpers |
|
||||
| `plugin-sdk/provider-stream` | Provider stream wrapper helpers | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, stream wrapper types, and shared Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot wrapper helpers |
|
||||
| `plugin-sdk/provider-transport-runtime` | Provider transport helpers | Native provider transport helpers such as guarded fetch, tool-result text extraction, transport message transforms, and writable transport event streams |
|
||||
| `plugin-sdk/keyed-async-queue` | Ordered async queue | `KeyedAsyncQueue` |
|
||||
| `plugin-sdk/media-runtime` | Shared media helpers | Media fetch/transform/store helpers, ffprobe-backed video dimension probing, and media payload builders |
|
||||
| `plugin-sdk/media-generation-runtime` | Shared media-generation helpers | Shared failover helpers, candidate selection, and missing-model messaging for image/video/music generation |
|
||||
| `plugin-sdk/media-understanding` | Media-understanding helpers | Media understanding provider types plus provider-facing image/audio helper exports |
|
||||
| `plugin-sdk/text-runtime` | Deprecated broad text compatibility export | Use `string-coerce-runtime`, `text-chunking`, `text-utility-runtime`, and `logging-core` |
|
||||
| `plugin-sdk/text-chunking` | Text chunking helpers | Outbound text and offset-preserving range chunking helpers |
|
||||
| `plugin-sdk/speech` | Speech helpers | Speech provider types plus provider-facing directive, registry, validation helpers, and OpenAI-compatible TTS builder |
|
||||
| `plugin-sdk/speech-core` | Shared speech core | Speech provider types, registry, directives, normalization |
|
||||
| `plugin-sdk/speech-settings` | Speech settings | Lightweight TTS config resolution and normalization primitives without provider registries or synthesis runtime |
|
||||
| `plugin-sdk/realtime-transcription` | Realtime transcription helpers | Provider types, registry helpers, and shared WebSocket session helper |
|
||||
| `plugin-sdk/realtime-voice` | Realtime voice helpers | Provider types, registry/resolution helpers, bridge session helpers, the transport-independent session harness, audio-energy/speech-onset gates, shared agent talk-back queues, active-run voice control, transcript/event health, echo suppression, consult question matching, forced-consult coordination, turn-context tracking, output activity tracking, and fast context consult helpers |
|
||||
| `plugin-sdk/image-generation` | Image-generation helpers | Image generation provider types plus image asset/data URL helpers and the OpenAI-compatible image provider builder |
|
||||
| `plugin-sdk/image-generation-core` | Shared image-generation core | Image-generation types, failover, auth, and registry helpers |
|
||||
| `plugin-sdk/music-generation` | Music-generation helpers | Music-generation provider/request/result types |
|
||||
| `plugin-sdk/music-generation-core` | Shared music-generation core | Music-generation types, failover helpers, provider lookup, and model-ref parsing |
|
||||
| `plugin-sdk/video-generation` | Video-generation helpers | Video-generation provider/request/result types |
|
||||
| `plugin-sdk/video-generation-core` | Shared video-generation core | Video-generation types, failover helpers, provider lookup, and model-ref parsing |
|
||||
| `plugin-sdk/interactive-runtime` | Interactive reply helpers | Interactive reply payload normalization/reduction |
|
||||
| `plugin-sdk/channel-config-primitives` | Channel config primitives | Narrow channel config-schema primitives |
|
||||
| `plugin-sdk/channel-config-writes` | Channel config-write helpers | Channel config-write authorization helpers |
|
||||
| `plugin-sdk/channel-plugin-common` | Shared channel prelude | Shared channel plugin prelude exports |
|
||||
| `plugin-sdk/channel-status` | Channel status helpers | Shared channel status snapshot/summary helpers |
|
||||
| `plugin-sdk/allowlist-config-edit` | Allowlist config helpers | Allowlist config edit/read helpers |
|
||||
| `plugin-sdk/group-access` | Group access helpers | Shared group-access decision helpers |
|
||||
| `plugin-sdk/direct-dm`, `plugin-sdk/direct-dm-access` | Deprecated compatibility facades | Use `plugin-sdk/channel-inbound` |
|
||||
| `plugin-sdk/direct-dm-guard-policy` | Direct-DM guard helpers | Narrow pre-crypto guard policy helpers |
|
||||
| `plugin-sdk/extension-shared` | Shared extension helpers | Passive-channel/status and ambient proxy helper primitives |
|
||||
| `plugin-sdk/webhook-targets` | Webhook target helpers | Webhook target registry and route-install helpers |
|
||||
| `plugin-sdk/webhook-path` | Deprecated webhook path alias | Use `plugin-sdk/webhook-ingress` |
|
||||
| `plugin-sdk/web-media` | Shared web media helpers | Remote/local media loading helpers |
|
||||
| `plugin-sdk/zod` | Deprecated Zod compatibility re-export | Import `zod` from `zod` directly |
|
||||
| `plugin-sdk/memory-core` | Bundled memory-core helpers | Memory manager/config/file/CLI helper surface |
|
||||
| `plugin-sdk/memory-core-engine-runtime` | Memory engine runtime facade | Memory index/search runtime facade |
|
||||
| `plugin-sdk/memory-core-host-embedding-registry` | Memory embedding registry | Lightweight memory embedding provider registry helpers |
|
||||
| `plugin-sdk/memory-core-host-engine-foundation` | Memory host foundation engine | Memory host foundation engine exports |
|
||||
| `plugin-sdk/memory-core-host-engine-embeddings` | Memory host embedding engine | Memory embedding contracts, registry access, local provider, and generic batch/remote helpers; concrete remote providers live in their owning plugins |
|
||||
| `plugin-sdk/memory-core-host-engine-qmd` | Memory host QMD engine | Memory host QMD engine exports |
|
||||
| `plugin-sdk/memory-core-host-engine-storage` | Memory host storage engine | Memory host storage engine exports |
|
||||
| `plugin-sdk/memory-core-host-multimodal` | Memory host multimodal helpers | Memory host multimodal helpers |
|
||||
| `plugin-sdk/memory-core-host-query` | Memory host query helpers | Memory host query helpers |
|
||||
| `plugin-sdk/memory-core-host-secret` | Memory host secret helpers | Memory host secret helpers |
|
||||
| `plugin-sdk/memory-core-host-events` | Deprecated memory event alias | Use `plugin-sdk/memory-host-events` |
|
||||
| `plugin-sdk/memory-core-host-status` | Memory host status helpers | Memory host status helpers |
|
||||
| `plugin-sdk/memory-core-host-runtime-cli` | Memory host CLI runtime | Memory host CLI runtime helpers |
|
||||
| `plugin-sdk/memory-core-host-runtime-core` | Memory host core runtime | Memory host core runtime helpers |
|
||||
| `plugin-sdk/memory-core-host-runtime-files` | Memory host file/runtime helpers | Memory host file/runtime helpers |
|
||||
| `plugin-sdk/memory-host-core` | Memory host core runtime alias | Vendor-neutral alias for memory host core runtime helpers |
|
||||
| `plugin-sdk/memory-host-events` | Memory host event journal alias | Vendor-neutral alias for memory host event journal helpers |
|
||||
| `plugin-sdk/memory-host-files` | Deprecated memory file/runtime alias | Use `plugin-sdk/memory-core-host-runtime-files` |
|
||||
| `plugin-sdk/memory-host-markdown` | Managed markdown helpers | Shared managed-markdown helpers for memory-adjacent plugins |
|
||||
| `plugin-sdk/memory-host-search` | Active memory search facade | Lazy active-memory search-manager runtime facade |
|
||||
| `plugin-sdk/memory-host-status` | Deprecated memory host status alias | Use `plugin-sdk/memory-core-host-status` |
|
||||
</Accordion>
|
||||
The public package export map is the source of truth for importable SDK
|
||||
subpaths. Use the topical SDK guides linked from [SDK overview](/plugins/sdk-overview)
|
||||
and prefer the narrowest documented public subpath. The compiler inventory in
|
||||
`scripts/lib/plugin-sdk-entrypoints.json` also contains private-local entries used
|
||||
to build bundled plugins; their presence there does not make them public package exports.
|
||||
|
||||
This table is the common migration subset, not the full SDK surface. The
|
||||
compiler entrypoint inventory lives in `scripts/lib/plugin-sdk-entrypoints.json`;
|
||||
@@ -566,6 +396,12 @@ contract should own it.
|
||||
|
||||
## Removed compatibility surfaces
|
||||
|
||||
The July 2026 sweep removed the root SDK and compat barrels, the extension API
|
||||
bridge, the expired SDK subpath aliases, unused SDK subpaths, and the public
|
||||
exports for bundled-only SDK modules. Bundled-only modules remain available to
|
||||
their repository owners through private-local build mappings; they are not
|
||||
importable from the published package.
|
||||
|
||||
### Process-global API-provider publication
|
||||
|
||||
`registerApiProvider(...)` and `unregisterApiProviders(...)` were removed from
|
||||
@@ -586,20 +422,21 @@ tests use focused subpaths such as `plugin-sdk/plugin-test-runtime`,
|
||||
`plugin-sdk/channel-test-helpers`, `plugin-sdk/channel-target-testing`,
|
||||
`plugin-sdk/test-env`, and `plugin-sdk/test-fixtures`.
|
||||
|
||||
## Active deprecations
|
||||
## Migration reference
|
||||
|
||||
Narrower deprecations across the plugin SDK, provider contract, runtime
|
||||
surface, and manifest. Each still works today but will be removed in a future
|
||||
major release. Every entry maps the old API to its canonical replacement.
|
||||
These mappings cover both removed July 2026 surfaces and later-window active
|
||||
deprecations. A mapping is migration guidance, not evidence that the old
|
||||
surface remains available; consult the compatibility registry and removal
|
||||
timeline for current status.
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="command-auth help builders -> command-status">
|
||||
**Old (`openclaw/plugin-sdk/command-auth`)**: `buildCommandsMessage`,
|
||||
`buildCommandsMessagePaginated`, `buildHelpMessage`.
|
||||
|
||||
**New (`openclaw/plugin-sdk/command-status`)**: same signatures, same
|
||||
exports - just imported from the narrower subpath. `command-auth`
|
||||
re-exports them as compat stubs.
|
||||
**New (`openclaw/plugin-sdk/command-status`)**: same signatures, imported
|
||||
from the narrower subpath. The `command-auth` compatibility re-exports
|
||||
have been removed.
|
||||
|
||||
```typescript
|
||||
// Before
|
||||
@@ -627,13 +464,12 @@ major release. Every entry maps the old API to its canonical replacement.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Channel runtime shim and channel actions helpers">
|
||||
`openclaw/plugin-sdk/channel-runtime` is a compatibility shim for older
|
||||
channel plugins. Do not import it from new code; use
|
||||
`openclaw/plugin-sdk/channel-runtime` has been removed. Use
|
||||
`openclaw/plugin-sdk/channel-runtime-context` for registering runtime
|
||||
objects.
|
||||
|
||||
`channelActions*` helpers in `openclaw/plugin-sdk/channel-actions` are
|
||||
deprecated alongside raw "actions" channel exports. Expose capabilities
|
||||
The native message schema helpers in `openclaw/plugin-sdk/channel-actions`
|
||||
were removed alongside raw "actions" channel exports. Expose capabilities
|
||||
through the semantic `presentation` surface instead - channel plugins
|
||||
declare what they render (cards, buttons, selects) rather than which raw
|
||||
action names they accept.
|
||||
@@ -729,7 +565,8 @@ major release. Every entry maps the old API to its canonical replacement.
|
||||
| `ProviderDiscoveryResult` | `ProviderCatalogResult` |
|
||||
| `ProviderPluginDiscovery` | `ProviderPluginCatalog` |
|
||||
|
||||
Plus the legacy `ProviderCapabilities` static bag - provider plugins
|
||||
The aliases and legacy `ProviderCapabilities` static bag have been
|
||||
removed. Provider plugins
|
||||
should use explicit provider hooks such as `buildReplayPolicy`,
|
||||
`normalizeToolSchemas`, and `wrapStreamFn` rather than a static object.
|
||||
|
||||
@@ -750,8 +587,7 @@ major release. Every entry maps the old API to its canonical replacement.
|
||||
catalog facts to expose a model-specific profile only when the configured
|
||||
request contract supports it.
|
||||
|
||||
Implement one hook instead of three. The legacy hooks keep working during
|
||||
the deprecation window but are not composed with the profile result.
|
||||
Implement one hook instead of three. The legacy hooks have been removed.
|
||||
|
||||
</Accordion>
|
||||
|
||||
@@ -779,8 +615,7 @@ major release. Every entry maps the old API to its canonical replacement.
|
||||
on the manifest. This consolidates setup/status env metadata in one place
|
||||
and avoids booting the plugin runtime just to answer env-var lookups.
|
||||
|
||||
`providerAuthEnvVars` remains supported through a compatibility adapter
|
||||
until the deprecation window closes.
|
||||
`providerAuthEnvVars` is no longer accepted.
|
||||
|
||||
</Accordion>
|
||||
|
||||
@@ -890,7 +725,7 @@ major release. Every entry maps the old API to its canonical replacement.
|
||||
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
|
||||
```
|
||||
|
||||
Removed after 2026-07-26.
|
||||
The legacy aliases were removed in July 2026.
|
||||
|
||||
</Accordion>
|
||||
|
||||
@@ -903,14 +738,14 @@ major release. Every entry maps the old API to its canonical replacement.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="OpenClawSchemaType alias -> OpenClawConfig">
|
||||
`OpenClawSchemaType` re-exported from `openclaw/plugin-sdk` is now a
|
||||
one-line alias for `OpenClawConfig`. Prefer the canonical name.
|
||||
The `OpenClawSchemaType` root-SDK alias was removed. Use the canonical
|
||||
`OpenClawConfig` name.
|
||||
|
||||
```typescript
|
||||
// Before
|
||||
import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
|
||||
// After
|
||||
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
|
||||
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-contracts";
|
||||
```
|
||||
|
||||
</Accordion>
|
||||
@@ -1055,25 +890,15 @@ apps own device capture/playback UX.
|
||||
| **Each compat record's `removeAfter` date** | That specific surface is eligible for removal; `pnpm plugins:boundary-report --fail-on-eligible-compat` fails CI once the date passes. |
|
||||
| **Next major release** | Any surfaces still not migrated are removed; plugins still using them will fail. |
|
||||
|
||||
The public SDK subpaths below have registry-backed removal or demotion windows.
|
||||
They do not currently emit a runtime warning when an external plugin imports
|
||||
them. The repository deprecated-usage guard applies only to the fully unused
|
||||
θ1 tier and the earlier compatibility tier; θ2 remains available to bundled
|
||||
plugins during the window.
|
||||
The remaining public SDK subpaths below have registry-backed removal windows.
|
||||
The July 30 rows were removed after their early maintainer-authorized sweep:
|
||||
unused subpaths were deleted, earlier compatibility aliases were deleted, and
|
||||
bundled-only modules were demoted to private-local build mappings.
|
||||
|
||||
For the window introduced on 2026-07-15, θ1 has no known external or bundled
|
||||
consumers and will be deleted after the window. θ2 has bundled consumers but no
|
||||
known external consumers; only its public package export will be retired. Its
|
||||
module will remain available to bundled plugins as a private-local-only
|
||||
subpath.
|
||||
|
||||
| `removeAfter` | Tier | SDK subpaths |
|
||||
| ------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `2026-07-30` | Earlier compatibility deprecations | `agent-dir-compat`, `channel-envelope`, `channel-inbound-roots`, `channel-location`, `channel-message-runtime`, `channel-pairing-paths`, `channel-reply-options-runtime`, `config-schema`, `config-types`, `direct-dm`, `direct-dm-access`, `mattermost`, `media-generation-runtime-shared`, `memory-core`, `memory-core-engine-runtime`, `memory-core-host-events`, `memory-core-host-multimodal`, `memory-core-host-query`, `memory-host-files`, `memory-host-status`, `music-generation-core`, `outbound-runtime`, `outbound-send-deps`, `provider-auth-login`, `provider-zai-endpoint`, `reply-dedupe`, `runtime-logger`, `runtime-secret-resolution`, `self-hosted-provider-setup`, `setup-adapter-runtime`, `telegram-command-config`, `webhook-path`, `zalouser` |
|
||||
| `2026-07-30` | θ1: fully unused; remove subpath | `command-gating`, `lmstudio`, `lmstudio-runtime`, `secret-provider-integration`, `skills-runtime` |
|
||||
| `2026-07-30` | θ2: bundled-only; retire public export | `access-groups`, `account-resolution-runtime`, `acp-binding-resolve-runtime`, `acp-binding-runtime`, `acp-runtime`, `acp-runtime-backend`, `agent-core`, `agent-harness-exec-review-runtime`, `agent-harness-task-runtime`, `agent-harness-tool-runtime`, `agent-media-payload`, `agent-sessions`, `approval-reaction-runtime`, `approval-reference-runtime`, `async-lock-runtime`, `browser-config`, `bundled-channel-config-schema`, `channel-activity-runtime`, `channel-config-writes`, `channel-mention-gating`, `channel-route`, `channel-secret-tts-runtime`, `channel-targets`, `chat-channel-ids`, `cli-backend`, `cli-runtime`, `codex-mcp-projection`, `command-status-runtime`, `command-surface`, `concurrency-runtime`, `context-visibility-runtime`, `conversation-binding-runtime`, `cron-store-runtime`, `dangerous-name-runtime`, `delivery-queue-runtime`, `direct-dm-guard-policy`, `directory-config-runtime`, `document-extractor`, `embedding-providers`, `exec-approvals-runtime`, `expect-runtime`, `fetch-runtime`, `file-access-runtime`, `file-lock`, `global-singleton`, `group-activation`, `heartbeat-runtime`, `host-runtime`, `html-entity-runtime`, `image-generation`, `image-generation-core`, `image-generation-runtime`, `inline-image-data-url-runtime`, `json-schema-runtime`, `json-unsafe-integers`, `keyed-async-queue`, `llm`, `markdown-table-runtime`, `media-generation-runtime`, `media-understanding`, `memory-core-host-embedding-registry`, `memory-core-host-engine-embeddings`, `memory-core-host-engine-qmd`, `memory-core-host-engine-storage`, `memory-core-host-runtime-cli`, `memory-core-host-runtime-core`, `memory-core-host-runtime-files`, `memory-core-host-secret`, `memory-core-host-status`, `memory-host-core`, `memory-host-events`, `memory-host-markdown`, `memory-host-search`, `message-tool-delivery-hints`, `migration`, `migration-runtime`, `music-generation`, `node-host`, `number-runtime`, `outbound-media`, `pair-loop-guard-runtime`, `plugin-config-runtime`, `plugin-state-runtime`, `poll-runtime`, `process-runtime`, `provider-auth-api-key`, `provider-auth-login-flow-runtime`, `provider-auth-result`, `provider-auth-runtime`, `provider-catalog-live-runtime`, `provider-catalog-shared`, `provider-entry`, `provider-env-vars`, `provider-http`, `provider-model-shared`, `provider-model-types`, `provider-oauth-runtime`, `provider-onboard`, `provider-selection-runtime`, `provider-setup`, `provider-stream`, `provider-stream-family`, `provider-stream-shared`, `provider-tools`, `provider-transport-runtime`, `provider-usage`, `provider-web-fetch`, `provider-web-fetch-contract`, `provider-web-search`, `provider-web-search-config-contract`, `provider-web-search-contract`, `qa-runner-runtime`, `realtime-bootstrap-context`, `realtime-transcription`, `realtime-voice`, `reply-reference`, `request-url`, `response-limit-runtime`, `retry-runtime`, `runtime-doctor`, `runtime-fetch`, `sandbox`, `secret-file-runtime`, `secure-random-runtime`, `session-binding-runtime`, `session-catalog`, `session-key-runtime`, `session-transcript-hit`, `session-transcript-runtime`, `session-visibility`, `simple-completion-runtime`, `speech`, `speech-core`, `sqlite-runtime`, `ssrf-dispatcher`, `string-normalization-runtime`, `system-event-runtime`, `talk-config-runtime`, `target-resolver-runtime`, `text-autolink-runtime`, `text-utility-runtime`, `thread-bindings-runtime`, `thread-bindings-session-runtime`, `time-runtime`, `tool-payload`, `tool-plugin`, `tool-results`, `transcripts`, `transport-ready-runtime`, `tts-runtime`, `types`, `video-generation`, `video-generation-core`, `video-generation-runtime`, `web-content-extractor`, `webhook-targets`, `windows-spawn` |
|
||||
| `2026-08-15` | Earlier compatibility deprecations | `agent-config-primitives`, `channel-logging`, `channel-secret-runtime`, `channel-streaming`, `group-access`, `inbound-reply-dispatch`, `matrix`, `text-runtime`, `zod` |
|
||||
| `2026-09-01` | Earlier compatibility deprecations | `channel-lifecycle`, `channel-message`, `channel-reply-pipeline`, `config-runtime`, `infra-runtime` |
|
||||
| `removeAfter` | Tier | SDK subpaths |
|
||||
| ------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `2026-08-15` | Earlier compatibility deprecations | `agent-config-primitives`, `channel-logging`, `channel-secret-runtime`, `channel-streaming`, `group-access`, `inbound-reply-dispatch`, `matrix`, `text-runtime`, `zod` |
|
||||
| `2026-09-01` | Earlier compatibility deprecations | `channel-lifecycle`, `channel-message`, `channel-reply-pipeline`, `config-runtime`, `infra-runtime` |
|
||||
|
||||
All core plugins have already migrated. External plugins should migrate
|
||||
before the next major release. Run `pnpm plugins:boundary-report` to see which
|
||||
|
||||
@@ -41,9 +41,8 @@ For channel config, publish the channel-owned JSON Schema through
|
||||
`openclaw.plugin.json#channelConfigs`. The `plugin-sdk/channel-config-schema`
|
||||
subpath is for shared schema primitives and the generic builder. OpenClaw's
|
||||
bundled plugins use `plugin-sdk/bundled-channel-config-schema` for retained
|
||||
bundled-channel schemas. Deprecated compatibility exports remain on
|
||||
`plugin-sdk/channel-config-schema-legacy`; neither bundled schema subpath is a
|
||||
pattern for new plugins.
|
||||
bundled-channel schemas. That bundled schema subpath is not a pattern for new
|
||||
plugins.
|
||||
|
||||
<Warning>
|
||||
Do not import provider- or channel-branded convenience seams (for example
|
||||
@@ -445,8 +444,7 @@ The contracts intentionally split authority:
|
||||
own command names or aliases.
|
||||
- `allowPromptInjection=false` disables prompt-mutating hooks including
|
||||
`agent_turn_prepare`, `before_prompt_build`, `heartbeat_prompt_contribution`,
|
||||
prompt fields from legacy `before_agent_start`, and
|
||||
`enqueueNextTurnInjection`.
|
||||
and `enqueueNextTurnInjection`.
|
||||
|
||||
Examples of non-Plan consumers:
|
||||
|
||||
@@ -603,9 +601,6 @@ For an end-to-end authoring guide, see
|
||||
| ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `api.registerContextEngine(id, factory)` | Context engine (one active at a time). Lifecycle callbacks receive `runtimeSettings` when the host can provide model/provider/mode diagnostics; older strict engines are retried without that key. |
|
||||
| `api.registerMemoryCapability(capability)` | Unified memory capability |
|
||||
| `api.registerMemoryPromptSection(builder)` | Memory prompt section builder |
|
||||
| `api.registerMemoryFlushPlan(resolver)` | Memory flush plan resolver |
|
||||
| `api.registerMemoryRuntime(runtime)` | Memory runtime adapter |
|
||||
|
||||
### Deprecated memory embedding adapters
|
||||
|
||||
@@ -613,13 +608,11 @@ For an end-to-end authoring guide, see
|
||||
| ---------------------------------------------- | ---------------------------------------------- |
|
||||
| `api.registerMemoryEmbeddingProvider(adapter)` | Memory embedding adapter for the active plugin |
|
||||
|
||||
- `registerMemoryCapability` is the preferred exclusive memory-plugin API.
|
||||
- `registerMemoryCapability` is the exclusive memory-plugin API.
|
||||
- `registerMemoryCapability` may also expose `publicArtifacts.listArtifacts(...)`
|
||||
so companion plugins can consume exported memory artifacts through
|
||||
`openclaw/plugin-sdk/memory-host-core` instead of reaching into a specific
|
||||
memory plugin's private layout.
|
||||
- `registerMemoryPromptSection`, `registerMemoryFlushPlan`, and
|
||||
`registerMemoryRuntime` are legacy-compatible exclusive memory-plugin APIs.
|
||||
- `MemoryFlushPlan.model` can pin the flush turn to an exact `provider/model`
|
||||
reference, such as `ollama/qwen3:8b`, without inheriting the active fallback
|
||||
chain.
|
||||
|
||||
@@ -43,9 +43,8 @@ Persist changes with `api.runtime.config.mutateConfigFile(...)` or `api.runtime.
|
||||
|
||||
The mutation helpers return `afterWrite` plus a typed `followUp` summary so callers can log or test whether they requested a restart. The gateway still owns when that restart actually happens.
|
||||
|
||||
<Warning>
|
||||
`api.runtime.config.loadConfig()` and `api.runtime.config.writeConfigFile(...)` are deprecated. They warn once per plugin at runtime and remain available only for old external plugins during the migration window. Bundled plugins must not use them: an internal config boundary guard fails the build if plugin code calls them or imports those helpers from plugin SDK subpaths. Use `current()`, a passed-in `cfg`, `mutateConfigFile(...)`, or `replaceConfigFile(...)` instead.
|
||||
</Warning>
|
||||
Use `current()`, a passed-in `cfg`, `mutateConfigFile(...)`, or
|
||||
`replaceConfigFile(...)` for runtime config access and writes.
|
||||
|
||||
For direct SDK imports, prefer the focused config subpaths over the broad `openclaw/plugin-sdk/config-runtime` compatibility barrel: `config-contracts` for types, `plugin-config-runtime` for already-loaded config assertions, plugin entry lookup, and canonical config merging, `runtime-config-snapshot` for current process snapshots, and `config-mutation` for writes. Bundled plugin tests should mock these focused subpaths directly instead of mocking the broad compatibility barrel.
|
||||
|
||||
@@ -409,7 +408,6 @@ two-party event loops that do not go through the shared inbound reply runner.
|
||||
|
||||
- `api.runtime.tasks.managedFlows` is mutation-capable: create, advance, and cancel Task Flows.
|
||||
- `api.runtime.tasks.flows` and `api.runtime.tasks.runs` are read-only DTO views for listing and status lookups; both expose `bindSession(...)` / `fromToolContext(...)` plus `get`, `list`, `findLatest`, and `resolve`.
|
||||
- `api.runtime.tasks.flow` is a deprecated alias for `managedFlows`.
|
||||
|
||||
Task Flow tracks durable multi-step workflow state. It is not a scheduler:
|
||||
use Cron or `api.session.workflow.scheduleSessionTurn(...)` for future
|
||||
@@ -533,10 +531,6 @@ two-party event loops that do not go through the shared inbound reply runner.
|
||||
|
||||
`describeImageFileWithModel(...)` describes an already-known image through a specific provider/model, bypassing the default active-model resolution that `describeImageFile(...)` uses.
|
||||
|
||||
<Info>
|
||||
`api.runtime.stt.transcribeAudioFile(...)` remains as a compatibility alias for `api.runtime.mediaUnderstanding.transcribeAudioFile(...)`.
|
||||
</Info>
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="api.runtime.imageGeneration">
|
||||
Image generation.
|
||||
@@ -836,7 +830,7 @@ two-party event loops that do not go through the shared inbound reply runner.
|
||||
- `implicitMentionKindWhen`
|
||||
- `resolveInboundMentionDecision`
|
||||
|
||||
`api.runtime.channel.mentions` intentionally does not expose the older `resolveMentionGating*` compatibility helpers. Prefer the normalized `{ facts, policy }` path.
|
||||
Use the normalized `{ facts, policy }` path for mention decisions.
|
||||
|
||||
Several fields under `reply`, `session`, and `inbound` carry per-field `@deprecated` notes pointing at the current channel-turn kernel or channel-outbound adapters; check the inline JSDoc on the specific helper before building new code on it.
|
||||
|
||||
|
||||
@@ -165,10 +165,6 @@ Example:
|
||||
- `setup`: include the channel in interactive setup/configure pickers
|
||||
- `docs`: mark the channel as public-facing in docs/navigation surfaces
|
||||
|
||||
<Note>
|
||||
`showConfigured` and `showInSetup` remain supported as legacy aliases. Prefer `exposure`.
|
||||
</Note>
|
||||
|
||||
### `openclaw.install`
|
||||
|
||||
`openclaw.install` is package metadata, not manifest metadata.
|
||||
@@ -343,11 +339,10 @@ Bundled workspace channels that keep setup-safe exports in sidecar modules can u
|
||||
|
||||
For hot setup-only paths, prefer the narrow setup helper seams over the broader `plugin-sdk/setup` umbrella when you only need part of the setup surface:
|
||||
|
||||
| Import path | Use it for | Key exports |
|
||||
| ---------------------------------- | ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `plugin-sdk/setup-runtime` | setup-time runtime helpers that stay available in `setupEntry` / deferred channel startup | `createSetupTranslator`, `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` |
|
||||
| `plugin-sdk/setup-adapter-runtime` | deprecated compatibility alias; use `plugin-sdk/setup-runtime` | `createEnvPatchedAccountSetupAdapter` |
|
||||
| `plugin-sdk/setup-tools` | setup/install CLI/archive/docs helpers | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
|
||||
| Import path | Use it for | Key exports |
|
||||
| -------------------------- | ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `plugin-sdk/setup-runtime` | setup-time runtime helpers that stay available in `setupEntry` / deferred channel startup | `createSetupTranslator`, `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` |
|
||||
| `plugin-sdk/setup-tools` | setup/install CLI/archive/docs helpers | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
|
||||
|
||||
Use the broader `plugin-sdk/setup` seam when you want the full shared setup toolbox, including config-patch helpers such as `moveSingleAccountChannelSectionToDefaultAccount(...)`.
|
||||
|
||||
|
||||
+139
-184
@@ -6,9 +6,9 @@ read_when:
|
||||
title: "Plugin SDK subpaths"
|
||||
---
|
||||
|
||||
The plugin SDK is exposed as a set of narrow public subpaths under
|
||||
`openclaw/plugin-sdk/`. This page catalogs the commonly used subpaths grouped by
|
||||
purpose. Three files define the surface:
|
||||
The plugin SDK contains narrow public subpaths and repository-only bundled
|
||||
helpers under `openclaw/plugin-sdk/`. This page catalogs both and labels
|
||||
private-local entries explicitly. Three files define the boundary:
|
||||
|
||||
- `scripts/lib/plugin-sdk-entrypoints.json`: the maintained entrypoint inventory
|
||||
the build compiles.
|
||||
@@ -31,23 +31,20 @@ For the plugin authoring guide, see [Plugin SDK overview](/plugins/sdk-overview)
|
||||
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `plugin-sdk/plugin-entry` | `definePluginEntry` |
|
||||
| `plugin-sdk/core` | `defineChannelPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `defineSetupPluginEntry`, `buildChannelConfigSchema`, `buildJsonChannelConfigSchema`, `resolveTailscalePublishedHost` |
|
||||
| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` |
|
||||
| `plugin-sdk/migration` | Migration provider item helpers such as `createMigrationItem`, reason constants, item status markers, redaction helpers, and `summarizeMigrationItems` |
|
||||
| `plugin-sdk/migration-runtime` | Runtime migration helpers such as `copyMigrationFileItem`, `resolvePlannedMigrationTargets`, `withCachedMigrationConfigRuntime`, and `writeMigrationReport` |
|
||||
| `plugin-sdk/provider-entry` | Private-local after July 2026; `defineSingleProviderPluginEntry` |
|
||||
| `plugin-sdk/migration` | Private-local after July 2026; Migration provider item helpers such as `createMigrationItem`, reason constants, item status markers, redaction helpers, and `summarizeMigrationItems` |
|
||||
| `plugin-sdk/migration-runtime` | Private-local after July 2026; Runtime migration helpers such as `copyMigrationFileItem`, `resolvePlannedMigrationTargets`, `withCachedMigrationConfigRuntime`, and `writeMigrationReport` |
|
||||
| `plugin-sdk/health` | Doctor health-check registration, detection, repair, selection, severity, and finding types for bundled health consumers |
|
||||
| `plugin-sdk/config-schema` | Deprecated. Root `openclaw.json` Zod schema (`OpenClawSchema`); define plugin-local schemas instead and validate with `plugin-sdk/json-schema-runtime` |
|
||||
|
||||
### Deprecated compatibility and test helpers
|
||||
### Compatibility and private-local helpers
|
||||
|
||||
Deprecated subpaths stay exported for older plugins, but new code should use the
|
||||
focused SDK subpaths below. The maintained list is
|
||||
Only the later-window deprecated subpaths remain exported. July 2026 aliases and
|
||||
unused subpaths were deleted, while bundled-only helpers were removed from the
|
||||
public package and are labeled private-local below. The maintained list is
|
||||
`scripts/lib/plugin-sdk-deprecated-public-subpaths.json`; CI rejects bundled
|
||||
production imports from it. Broad barrels such as `plugin-sdk/compat`,
|
||||
`plugin-sdk/config-types`, `plugin-sdk/infra-runtime`, and
|
||||
`plugin-sdk/text-runtime` are compatibility only, and `plugin-sdk/zod` is a
|
||||
compatibility re-export: import `zod` directly from `zod`. The broad domain
|
||||
barrels `plugin-sdk/agent-runtime`, `plugin-sdk/channel-lifecycle`,
|
||||
`plugin-sdk/channel-runtime`, `plugin-sdk/cli-runtime`,
|
||||
`plugin-sdk/conversation-runtime`, `plugin-sdk/hook-runtime`,
|
||||
`plugin-sdk/media-runtime`, `plugin-sdk/plugin-runtime`, and
|
||||
`plugin-sdk/security-runtime` are likewise deprecated in favor of focused
|
||||
@@ -64,22 +61,11 @@ longer package exports: `agent-runtime-test-contracts`,
|
||||
`ssrf-runtime-internal` and `codex-native-task-runtime` are also repo-local
|
||||
only.
|
||||
|
||||
### Reserved bundled plugin helper subpaths
|
||||
### Bundled plugin helper subpaths
|
||||
|
||||
`plugin-sdk/codex-mcp-projection` is the only reserved subpath: a plugin-owned
|
||||
compatibility surface for the bundled Codex plugin, not a general SDK API.
|
||||
Cross-owner plugin imports are blocked by package contract guardrails, and
|
||||
CI fails when a reserved subpath stops being imported.
|
||||
`plugin-sdk/codex-native-task-runtime` is repo-local only and is not a package
|
||||
export.
|
||||
|
||||
`src/plugin-sdk/entrypoints.ts` also tracks supported bundled facades, SDK
|
||||
Bundled-only helper modules are private-local after the July 2026 sweep. Cross-owner imports are blocked by package contract guardrails. `src/plugin-sdk/entrypoints.ts` separately tracks the supported bundled facades that remain public, SDK
|
||||
entrypoints backed by their bundled plugin until generic contracts replace
|
||||
them: `plugin-sdk/discord`, `plugin-sdk/lmstudio`, `plugin-sdk/lmstudio-runtime`,
|
||||
`plugin-sdk/matrix`, `plugin-sdk/mattermost`,
|
||||
`plugin-sdk/memory-core-engine-runtime`, `plugin-sdk/provider-zai-endpoint`,
|
||||
`plugin-sdk/qa-runner-runtime`, `plugin-sdk/telegram-account`,
|
||||
`plugin-sdk/tts-runtime`, and `plugin-sdk/zalouser`. Several of these are also
|
||||
deprecated for new code; see the per-row notes below.
|
||||
|
||||
<AccordionGroup>
|
||||
@@ -87,113 +73,95 @@ deprecated for new code; see the per-row notes below.
|
||||
| Subpath | Key exports |
|
||||
| --- | --- |
|
||||
| `plugin-sdk/channel-core` | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `createChannelConfigUiHints` |
|
||||
| `plugin-sdk/json-schema-runtime` | Cached JSON Schema validation helper for plugin-owned schemas |
|
||||
| `plugin-sdk/json-schema-runtime` | Private-local after July 2026; Cached JSON Schema validation helper for plugin-owned schemas |
|
||||
| `plugin-sdk/channel-setup` | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`, plus `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` |
|
||||
| `plugin-sdk/setup` | Shared setup wizard helpers, setup translator, allowlist prompts, setup status builders |
|
||||
| `plugin-sdk/setup-runtime` | `createSetupTranslator`, `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` |
|
||||
| `plugin-sdk/setup-adapter-runtime` | Deprecated compatibility alias; use `plugin-sdk/setup-runtime` |
|
||||
| `plugin-sdk/setup-tools` | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
|
||||
| `plugin-sdk/account-core` | Multi-account config/action-gate helpers, default-account fallback helpers |
|
||||
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`, account-id normalization helpers |
|
||||
| `plugin-sdk/account-resolution` | Account lookup + default-fallback helpers |
|
||||
| `plugin-sdk/account-helpers` | Narrow account-list/account-action helpers |
|
||||
| `plugin-sdk/access-groups` | Access-group allowlist parsing and redacted group diagnostics helpers |
|
||||
| `plugin-sdk/access-groups` | Private-local after July 2026; Access-group allowlist parsing and redacted group diagnostics helpers |
|
||||
| `plugin-sdk/channel-pairing` | `createChannelPairingController` |
|
||||
| `plugin-sdk/channel-reply-pipeline` | Deprecated compatibility facade. Use `plugin-sdk/channel-outbound`. |
|
||||
| `plugin-sdk/channel-config-helpers` | `createHybridChannelConfigAdapter`, `resolveChannelDmAccess`, `resolveChannelDmAllowFrom`, `resolveChannelDmPolicy`, `normalizeChannelDmPolicy`, `normalizeLegacyDmAliases` |
|
||||
| `plugin-sdk/channel-config-schema` | Shared channel config schema primitives plus Zod and direct JSON/TypeBox builders |
|
||||
| `plugin-sdk/bundled-channel-config-schema` | Bundled OpenClaw channel config schemas for maintained bundled plugins only |
|
||||
| `plugin-sdk/chat-channel-ids` | `BUNDLED_CHAT_CHANNEL_IDS`, `BUNDLED_CHAT_CHANNEL_ENVELOPE_PREFIXES`, `ChatChannelId`. Canonical bundled/official chat channel ids plus formatter labels/aliases for plugins that need to recognize envelope-prefixed text without hardcoding their own table. |
|
||||
| `plugin-sdk/channel-config-schema-legacy` | Deprecated compatibility alias for bundled-channel config schemas |
|
||||
| `plugin-sdk/telegram-command-config` | Deprecated Telegram command-name/description normalization and duplicate/conflict checks; use plugin-local command config handling in new plugin code |
|
||||
| `plugin-sdk/command-gating` | Narrow command authorization gate helpers |
|
||||
| `plugin-sdk/bundled-channel-config-schema` | Private-local after July 2026; Bundled OpenClaw channel config schemas for maintained bundled plugins only |
|
||||
| `plugin-sdk/chat-channel-ids` | Private-local after July 2026; `BUNDLED_CHAT_CHANNEL_IDS`, `BUNDLED_CHAT_CHANNEL_ENVELOPE_PREFIXES`, `ChatChannelId`. Canonical bundled/official chat channel ids plus formatter labels/aliases for plugins that need to recognize envelope-prefixed text without hardcoding their own table. |
|
||||
| `plugin-sdk/channel-policy` | `resolveChannelGroupRequireMention` |
|
||||
| `plugin-sdk/channel-ingress-runtime` | Experimental high-level channel ingress runtime resolver, implicit-mention policy resolver, and route fact builders for migrated channel receive paths. Prefer this over assembling effective allowlists, command allowlists, and legacy projections in each plugin. See [Channel ingress API](/plugins/sdk-channel-ingress). |
|
||||
| `plugin-sdk/channel-lifecycle` | Deprecated compatibility facade. Use `plugin-sdk/channel-outbound`. |
|
||||
| `plugin-sdk/channel-outbound` | Message lifecycle contracts plus reply pipeline options, receipts, live preview/streaming, lifecycle helpers, outbound identity, payload planning, durable sends, and message-send context helpers. See [Channel outbound API](/plugins/sdk-channel-outbound). |
|
||||
| `plugin-sdk/channel-message` | Deprecated compatibility alias for `plugin-sdk/channel-outbound`. |
|
||||
| `plugin-sdk/channel-message-runtime` | Deprecated compatibility alias for `plugin-sdk/channel-outbound`. |
|
||||
| `plugin-sdk/inbound-envelope` | Shared inbound route + envelope builder helpers |
|
||||
| `plugin-sdk/inbound-reply-dispatch` | Deprecated compatibility facade. Use `plugin-sdk/channel-inbound` for inbound runners and dispatch predicates, and `plugin-sdk/channel-outbound` for message delivery helpers. |
|
||||
| `plugin-sdk/messaging-targets` | Deprecated target parsing alias; use `plugin-sdk/channel-targets` |
|
||||
| `plugin-sdk/outbound-media` | Shared outbound media loading and hosted-media state helpers |
|
||||
| `plugin-sdk/outbound-send-deps` | Deprecated compatibility facade. Use `plugin-sdk/channel-outbound`. |
|
||||
| `plugin-sdk/outbound-runtime` | Deprecated compatibility facade. Use `plugin-sdk/channel-outbound`. |
|
||||
| `plugin-sdk/poll-runtime` | Narrow poll normalization helpers |
|
||||
| `plugin-sdk/thread-bindings-runtime` | Thread-binding lifecycle and adapter helpers |
|
||||
| `plugin-sdk/outbound-media` | Private-local after July 2026; Shared outbound media loading and hosted-media state helpers |
|
||||
| `plugin-sdk/poll-runtime` | Private-local after July 2026; Narrow poll normalization helpers |
|
||||
| `plugin-sdk/thread-bindings-runtime` | Private-local after July 2026; Thread-binding lifecycle and adapter helpers |
|
||||
| `plugin-sdk/agent-media-payload` | Agent media payload roots and loaders |
|
||||
| `plugin-sdk/conversation-runtime` | Deprecated broad barrel for conversation/thread binding, pairing, and configured-binding helpers; prefer focused binding subpaths such as `plugin-sdk/thread-bindings-runtime` and `plugin-sdk/session-binding-runtime` |
|
||||
| `plugin-sdk/runtime-group-policy` | Runtime group-policy resolution helpers |
|
||||
| `plugin-sdk/channel-status` | Shared channel status snapshot/summary helpers |
|
||||
| `plugin-sdk/channel-config-primitives` | Narrow channel config-schema primitives |
|
||||
| `plugin-sdk/channel-config-writes` | Channel config-write authorization helpers |
|
||||
| `plugin-sdk/channel-config-writes` | Private-local after July 2026; Channel config-write authorization helpers |
|
||||
| `plugin-sdk/channel-plugin-common` | Shared channel plugin prelude exports |
|
||||
| `plugin-sdk/allowlist-config-edit` | Allowlist config edit/read helpers |
|
||||
| `plugin-sdk/group-access` | Deprecated group-access decision helpers; use `resolveChannelMessageIngress` from `plugin-sdk/channel-ingress-runtime` |
|
||||
| `plugin-sdk/direct-dm`, `plugin-sdk/direct-dm-access` | Deprecated compatibility facades. Use `plugin-sdk/channel-inbound`. |
|
||||
| `plugin-sdk/direct-dm-guard-policy` | Narrow direct-DM pre-crypto guard policy helpers |
|
||||
| `plugin-sdk/direct-dm-guard-policy` | Private-local after July 2026; Narrow direct-DM pre-crypto guard policy helpers |
|
||||
| `plugin-sdk/discord` | Deprecated Discord compatibility facade for published `@openclaw/discord@2026.3.13` and tracked owner compatibility; new plugins should use generic channel SDK subpaths |
|
||||
| `plugin-sdk/telegram-account` | Deprecated Telegram account-resolution compatibility facade for tracked owner compatibility; new plugins should use injected runtime helpers or generic channel SDK subpaths |
|
||||
| `plugin-sdk/zalouser` | Deprecated Zalo Personal compatibility facade for published Lark/Zalo packages that still import sender command authorization; new plugins should use generic channel SDK subpaths |
|
||||
| `plugin-sdk/interactive-runtime` | Semantic message presentation, delivery, and legacy interactive reply helpers. See [Message Presentation](/plugins/message-presentation) |
|
||||
| `plugin-sdk/question-gateway-runtime` | Resolve runtime-authored `ask_user` choices through the Gateway from channel interaction handlers |
|
||||
| `plugin-sdk/channel-inbound` | Shared inbound helpers for event classification, context building, formatting, roots, debounce, mention matching, mention-policy, and inbound logging |
|
||||
| `plugin-sdk/channel-inbound-debounce` | Narrow inbound debounce helpers |
|
||||
| `plugin-sdk/channel-mention-gating` | Narrow mention-policy, mention marker, and mention text helpers without the broader inbound runtime surface |
|
||||
| `plugin-sdk/channel-envelope`, `plugin-sdk/channel-inbound-roots`, `plugin-sdk/channel-location`, `plugin-sdk/channel-logging` | Deprecated compatibility facades. Use `plugin-sdk/channel-inbound` or `plugin-sdk/channel-outbound`. |
|
||||
| `plugin-sdk/channel-pairing-paths` | Deprecated compatibility facade. Use `plugin-sdk/channel-pairing`. |
|
||||
| `plugin-sdk/channel-reply-options-runtime` | Deprecated compatibility facade. Use `plugin-sdk/channel-outbound`. |
|
||||
| `plugin-sdk/channel-mention-gating` | Private-local after July 2026; Narrow mention-policy, mention marker, and mention text helpers without the broader inbound runtime surface |
|
||||
| `plugin-sdk/channel-streaming` | Deprecated compatibility facade. Use `plugin-sdk/channel-outbound`. |
|
||||
| `plugin-sdk/channel-send-result` | Reply result types |
|
||||
| `plugin-sdk/channel-actions` | Channel message-action helpers, plus deprecated native schema helpers kept for plugin compatibility |
|
||||
| `plugin-sdk/channel-route` | Shared route normalization, parser-driven target resolution, thread-id stringification, dedupe/compact route keys, parsed-target types, and route/target comparison helpers |
|
||||
| `plugin-sdk/channel-targets` | Target parsing helpers; route comparison callers should use `plugin-sdk/channel-route` |
|
||||
| `plugin-sdk/channel-route` | Private-local after July 2026; Shared route normalization, parser-driven target resolution, thread-id stringification, dedupe/compact route keys, parsed-target types, and route/target comparison helpers |
|
||||
| `plugin-sdk/channel-targets` | Private-local after July 2026; Target parsing helpers; route comparison callers should use `plugin-sdk/channel-route` |
|
||||
| `plugin-sdk/channel-contract` | Channel contract types |
|
||||
| `plugin-sdk/channel-feedback` | Feedback/reaction wiring |
|
||||
</Accordion>
|
||||
|
||||
Deprecated channel helper families stay available only for published-plugin
|
||||
compatibility. The removal plan is: keep them through the external plugin
|
||||
migration window, keep repo/bundled plugins on `channel-inbound` and
|
||||
`channel-outbound`, then remove the compatibility subpaths in the next major
|
||||
SDK cleanup. This applies to the old channel message/runtime, channel
|
||||
streaming, direct-DM access, inbound helper splinter, reply-options,
|
||||
and pairing-path families.
|
||||
Later-window channel compatibility subpaths remain public only through their
|
||||
registry dates. July aliases such as direct-DM access, reply-options, pairing
|
||||
paths, and channel runtime splinters have been removed; bundled-only helpers
|
||||
are private-local.
|
||||
|
||||
<Accordion title="Provider subpaths">
|
||||
| Subpath | Key exports |
|
||||
| --- | --- |
|
||||
| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` |
|
||||
| `plugin-sdk/lmstudio` | Supported LM Studio provider facade for setup, catalog discovery, and runtime model preparation |
|
||||
| `plugin-sdk/lmstudio-runtime` | Supported LM Studio runtime facade for local server defaults, model discovery, request headers, and loaded-model helpers |
|
||||
| `plugin-sdk/provider-setup` | Curated local/self-hosted provider setup helpers |
|
||||
| `plugin-sdk/self-hosted-provider-setup` | Deprecated OpenAI-compatible self-hosted setup helpers; use `plugin-sdk/provider-setup` or plugin-owned setup helpers |
|
||||
| `plugin-sdk/cli-backend` | CLI backend defaults + watchdog constants |
|
||||
| `plugin-sdk/provider-auth-runtime` | Provider auth runtime helpers: OAuth loopback flow, token exchange, auth persistence, and API-key resolution |
|
||||
| `plugin-sdk/provider-oauth-runtime` | Generic provider OAuth callback types, callback-page rendering, PKCE/state helpers, authorization-input parsing, token-expiry helpers, and abort helpers |
|
||||
| `plugin-sdk/provider-auth-api-key` | API-key onboarding/profile-write helpers such as `upsertApiKeyProfile` |
|
||||
| `plugin-sdk/provider-auth-result` | Standard OAuth auth-result builder |
|
||||
| `plugin-sdk/provider-env-vars` | Provider auth env-var lookup helpers |
|
||||
| `plugin-sdk/provider-entry` | Private-local after July 2026; `defineSingleProviderPluginEntry` |
|
||||
| `plugin-sdk/provider-setup` | Private-local after July 2026; Curated local/self-hosted provider setup helpers |
|
||||
| `plugin-sdk/cli-backend` | Private-local after July 2026; CLI backend defaults + watchdog constants |
|
||||
| `plugin-sdk/provider-auth-runtime` | Private-local after July 2026; Provider auth runtime helpers: OAuth loopback flow, token exchange, auth persistence, and API-key resolution |
|
||||
| `plugin-sdk/provider-oauth-runtime` | Private-local after July 2026; Generic provider OAuth callback types, callback-page rendering, PKCE/state helpers, authorization-input parsing, token-expiry helpers, and abort helpers |
|
||||
| `plugin-sdk/provider-auth-api-key` | Private-local after July 2026; API-key onboarding/profile-write helpers such as `upsertApiKeyProfile` |
|
||||
| `plugin-sdk/provider-auth-result` | Private-local after July 2026; Standard OAuth auth-result builder |
|
||||
| `plugin-sdk/provider-env-vars` | Private-local after July 2026; Provider auth env-var lookup helpers |
|
||||
| `plugin-sdk/provider-auth` | `createProviderApiKeyAuthMethod`, `ensureApiKeyFromOptionEnvOrPrompt`, `upsertAuthProfile`, `upsertApiKeyProfile`, `writeOAuthCredentials`, OpenAI Codex auth-import helpers, deprecated `resolveOpenClawAgentDir` compatibility export |
|
||||
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `selectPreferredLocalModelId`, `normalizeModelCompat`, shared replay-policy builders, provider-endpoint helpers, and shared model-id normalization helpers |
|
||||
| `plugin-sdk/provider-catalog-live-runtime` | Live provider model catalog helpers for guarded `/models`-style discovery: `buildLiveModelProviderConfig`, `fetchLiveProviderModelRows`, `getCachedLiveProviderModelRows`, `fetchLiveProviderModelIds`, `LiveModelCatalogHttpError`, `clearLiveCatalogCacheForTests`, model-id filtering, TTL cache, and static fallback |
|
||||
| `plugin-sdk/provider-model-shared` | Private-local after July 2026; `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `selectPreferredLocalModelId`, `normalizeModelCompat`, shared replay-policy builders, provider-endpoint helpers, and shared model-id normalization helpers |
|
||||
| `plugin-sdk/provider-catalog-live-runtime` | Private-local after July 2026; Live provider model catalog helpers for guarded `/models`-style discovery: `buildLiveModelProviderConfig`, `fetchLiveProviderModelRows`, `getCachedLiveProviderModelRows`, `fetchLiveProviderModelIds`, `LiveModelCatalogHttpError`, `clearLiveCatalogCacheForTests`, model-id filtering, TTL cache, and static fallback |
|
||||
| `plugin-sdk/provider-catalog-runtime` | Provider catalog augmentation runtime hook and plugin-provider registry seams for contract tests |
|
||||
| `plugin-sdk/provider-catalog-shared` | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `buildManifestModelProviderConfig`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
|
||||
| `plugin-sdk/provider-http` | Generic provider HTTP/endpoint capability helpers, provider HTTP errors, and audio transcription multipart form helpers |
|
||||
| `plugin-sdk/provider-web-fetch-contract` | Narrow web-fetch config/selection contract helpers such as `enablePluginInConfig` and `WebFetchProviderPlugin` |
|
||||
| `plugin-sdk/provider-web-fetch` | Web-fetch provider registration/cache helpers |
|
||||
| `plugin-sdk/provider-web-search-config-contract` | Narrow web-search config/credential helpers for providers that do not need plugin-enable wiring |
|
||||
| `plugin-sdk/provider-web-search-contract` | Narrow web-search config/credential contract helpers such as `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig`, and scoped credential setters/getters |
|
||||
| `plugin-sdk/provider-web-search` | Web-search provider registration/cache/runtime helpers |
|
||||
| `plugin-sdk/embedding-providers` | General embedding provider types and read helpers, including `EmbeddingProviderAdapter`, `getEmbeddingProvider(...)`, and `listEmbeddingProviders(...)`; plugins register providers through `api.registerEmbeddingProvider(...)` so manifest ownership is enforced |
|
||||
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, and DeepSeek/Gemini/OpenAI schema cleanup + diagnostics |
|
||||
| `plugin-sdk/provider-usage` | Provider usage snapshot types, shared usage fetch helpers, and provider fetchers such as `fetchClaudeUsage` |
|
||||
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, stream wrapper types, plain-text tool-call compat, and shared Anthropic/Google/Kilocode/MiniMax/Moonshot/OpenAI/OpenRouter/Z.AI wrapper helpers |
|
||||
| `plugin-sdk/provider-stream-shared` | Public shared provider stream wrapper helpers including `composeProviderStreamWrappers`, `createOpenAICompatibleCompletionsThinkingOffWrapper`, `createPlainTextToolCallCompatWrapper`, `createPayloadPatchStreamWrapper`, `createToolStreamWrapper`, `normalizeOpenAICompatibleReasoningPayload`, `setQwenChatTemplateThinking`, and Anthropic/DeepSeek/OpenAI-compatible stream utilities |
|
||||
| `plugin-sdk/provider-transport-runtime` | Native provider transport helpers such as guarded fetch, tool-result text extraction, transport message transforms, and writable transport event streams |
|
||||
| `plugin-sdk/provider-onboard` | Onboarding config patch helpers |
|
||||
| `plugin-sdk/global-singleton` | Process-local singleton/map/cache helpers |
|
||||
| `plugin-sdk/group-activation` | Narrow group activation mode and command parsing helpers |
|
||||
| `plugin-sdk/provider-catalog-shared` | Private-local after July 2026; `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `buildManifestModelProviderConfig`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
|
||||
| `plugin-sdk/provider-http` | Private-local after July 2026; Generic provider HTTP/endpoint capability helpers, provider HTTP errors, and audio transcription multipart form helpers |
|
||||
| `plugin-sdk/provider-web-fetch-contract` | Private-local after July 2026; Narrow web-fetch config/selection contract helpers such as `enablePluginInConfig` and `WebFetchProviderPlugin` |
|
||||
| `plugin-sdk/provider-web-fetch` | Private-local after July 2026; Web-fetch provider registration/cache helpers |
|
||||
| `plugin-sdk/provider-web-search-config-contract` | Private-local after July 2026; Narrow web-search config/credential helpers for providers that do not need plugin-enable wiring |
|
||||
| `plugin-sdk/provider-web-search-contract` | Private-local after July 2026; Narrow web-search config/credential contract helpers such as `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig`, and scoped credential setters/getters |
|
||||
| `plugin-sdk/provider-web-search` | Private-local after July 2026; Web-search provider registration/cache/runtime helpers |
|
||||
| `plugin-sdk/embedding-providers` | Private-local after July 2026; General embedding provider types and read helpers, including `EmbeddingProviderAdapter`, `getEmbeddingProvider(...)`, and `listEmbeddingProviders(...)`; plugins register providers through `api.registerEmbeddingProvider(...)` so manifest ownership is enforced |
|
||||
| `plugin-sdk/provider-tools` | Private-local after July 2026; `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, and DeepSeek/Gemini/OpenAI schema cleanup + diagnostics |
|
||||
| `plugin-sdk/provider-usage` | Private-local after July 2026; Provider usage snapshot types, shared usage fetch helpers, and provider fetchers such as `fetchClaudeUsage` |
|
||||
| `plugin-sdk/provider-stream` | Private-local after July 2026; `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, stream wrapper types, plain-text tool-call compat, and shared Anthropic/Google/Kilocode/MiniMax/Moonshot/OpenAI/OpenRouter/Z.AI wrapper helpers |
|
||||
| `plugin-sdk/provider-stream-shared` | Private-local after July 2026; Public shared provider stream wrapper helpers including `composeProviderStreamWrappers`, `createOpenAICompatibleCompletionsThinkingOffWrapper`, `createPlainTextToolCallCompatWrapper`, `createPayloadPatchStreamWrapper`, `createToolStreamWrapper`, `normalizeOpenAICompatibleReasoningPayload`, `setQwenChatTemplateThinking`, and Anthropic/DeepSeek/OpenAI-compatible stream utilities |
|
||||
| `plugin-sdk/provider-transport-runtime` | Private-local after July 2026; Native provider transport helpers such as guarded fetch, tool-result text extraction, transport message transforms, and writable transport event streams |
|
||||
| `plugin-sdk/provider-onboard` | Private-local after July 2026; Onboarding config patch helpers |
|
||||
| `plugin-sdk/global-singleton` | Private-local after July 2026; Process-local singleton/map/cache helpers |
|
||||
| `plugin-sdk/group-activation` | Private-local after July 2026; Narrow group activation mode and command parsing helpers |
|
||||
</Accordion>
|
||||
|
||||
Provider usage snapshots normally report one or more quota `windows`, each with
|
||||
@@ -212,28 +180,26 @@ usage endpoint failed or returned no usable usage data.
|
||||
| `plugin-sdk/approval-client-runtime` | Native exec approval profile/filter helpers |
|
||||
| `plugin-sdk/approval-delivery-runtime` | Native approval capability/delivery adapters |
|
||||
| `plugin-sdk/approval-gateway-runtime` | Shared approval gateway resolver |
|
||||
| `plugin-sdk/approval-reference-runtime` | Deterministic durable-locator helper for transport-limited approval callbacks |
|
||||
| `plugin-sdk/approval-reference-runtime` | Private-local after July 2026; Deterministic durable-locator helper for transport-limited approval callbacks |
|
||||
| `plugin-sdk/approval-handler-adapter-runtime` | Lightweight native approval adapter loading helpers for hot channel entrypoints |
|
||||
| `plugin-sdk/approval-handler-runtime` | Broader approval handler runtime helpers; prefer the narrower adapter/gateway seams when they are enough |
|
||||
| `plugin-sdk/approval-native-runtime` | Native approval target, account-binding, route-gate, forwarding fallback, and local native exec prompt suppression helpers |
|
||||
| `plugin-sdk/approval-reaction-runtime` | Hardcoded approval reaction bindings, reaction prompt payloads, reaction target stores, reaction hint text helpers, and compatibility export for local native exec prompt suppression |
|
||||
| `plugin-sdk/approval-reaction-runtime` | Private-local after July 2026; Hardcoded approval reaction bindings, reaction prompt payloads, reaction target stores, reaction hint text helpers, and compatibility export for local native exec prompt suppression |
|
||||
| `plugin-sdk/approval-reply-runtime` | Exec/plugin approval reply payload helpers |
|
||||
| `plugin-sdk/approval-runtime` | Exec/plugin approval payload helpers, approval-capability builders, approval auth/profile helpers, native approval routing/runtime helpers, and structured approval display helpers such as `formatApprovalDisplayPath` |
|
||||
| `plugin-sdk/reply-dedupe` | Deprecated narrow inbound reply dedupe reset helpers |
|
||||
| `plugin-sdk/command-auth-native` | Native command auth, dynamic argument menu formatting, and native session-target helpers |
|
||||
| `plugin-sdk/command-detection` | Shared command detection helpers |
|
||||
| `plugin-sdk/command-primitives-runtime` | Lightweight command text predicates for hot channel paths |
|
||||
| `plugin-sdk/command-surface` | Command-body normalization and command-surface helpers |
|
||||
| `plugin-sdk/command-surface` | Private-local after July 2026; Command-body normalization and command-surface helpers |
|
||||
| `plugin-sdk/allow-from` | `formatAllowFromLowercase` |
|
||||
| `plugin-sdk/provider-auth-login-flow-runtime` | Lazy provider auth login flow helpers for private channel and Web UI device-code pairing |
|
||||
| `plugin-sdk/provider-auth-login-flow-runtime` | Private-local after July 2026; Lazy provider auth login flow helpers for private channel and Web UI device-code pairing |
|
||||
| `plugin-sdk/channel-secret-runtime` | Deprecated broad secret-contract surface (`collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, secret target types); prefer the focused subpaths below |
|
||||
| `plugin-sdk/channel-secret-basic-runtime` | Narrow secret-contract exports and target-registry builders for non-TTS channel/plugin secret surfaces |
|
||||
| `plugin-sdk/channel-secret-tts-runtime` | Narrow nested channel TTS secret assignment helpers |
|
||||
| `plugin-sdk/channel-secret-tts-runtime` | Private-local after July 2026; Narrow nested channel TTS secret assignment helpers |
|
||||
| `plugin-sdk/secret-ref-runtime` | Narrow SecretRef typing, resolution, and plan-target path lookup for secret-contract/config parsing |
|
||||
| `plugin-sdk/secret-provider-integration` | Type-only SecretRef provider integration manifest and preset contracts for plugins that publish external secret provider presets |
|
||||
| `plugin-sdk/security-runtime` | Deprecated broad barrel for trust, DM gating, root-bounded file/path helpers including create-only writes, sync/async atomic file replacement, sibling temp writes, cross-device move fallback, private file-store helpers, symlink-parent guards, external-content, sensitive text redaction, constant-time secret comparison, and secret-collection helpers; prefer focused security/SSRF/secret subpaths |
|
||||
| `plugin-sdk/ssrf-policy` | Host allowlist and private-network SSRF policy helpers |
|
||||
| `plugin-sdk/ssrf-dispatcher` | Narrow pinned-dispatcher helpers without the broad infra runtime surface |
|
||||
| `plugin-sdk/ssrf-dispatcher` | Private-local after July 2026; Narrow pinned-dispatcher helpers without the broad infra runtime surface |
|
||||
| `plugin-sdk/ssrf-runtime` | Pinned-dispatcher, SSRF-guarded fetch, SSRF error, and SSRF policy helpers |
|
||||
| `plugin-sdk/secret-input` | Secret input parsing helpers |
|
||||
| `plugin-sdk/webhook-ingress` | Webhook request/target helpers and raw websocket/body coercion |
|
||||
@@ -245,107 +211,105 @@ usage endpoint failed or returned no usable usage data.
|
||||
| --- | --- |
|
||||
| `plugin-sdk/runtime` | Runtime/logging/backup helpers, plugin install-path warnings, and process helpers |
|
||||
| `plugin-sdk/runtime-env` | Narrow runtime env, logger, timeout, retry, and backoff helpers |
|
||||
| `plugin-sdk/browser-config` | Supported browser config facade for normalized profile/defaults, CDP URL parsing, and browser-control auth helpers |
|
||||
| `plugin-sdk/agent-harness-task-runtime` | Generic task lifecycle and completion delivery helpers for harness-backed agents using a host-issued task scope |
|
||||
| `plugin-sdk/codex-mcp-projection` | Reserved bundled Codex helper for projecting user MCP server config into Codex thread config; not for third-party plugins |
|
||||
| `plugin-sdk/browser-config` | Private-local after July 2026; Supported browser config facade for normalized profile/defaults, CDP URL parsing, and browser-control auth helpers |
|
||||
| `plugin-sdk/agent-harness-task-runtime` | Private-local after July 2026; Generic task lifecycle and completion delivery helpers for harness-backed agents using a host-issued task scope |
|
||||
| `plugin-sdk/codex-mcp-projection` | Private-local after July 2026; Reserved bundled Codex helper for projecting user MCP server config into Codex thread config; not for third-party plugins |
|
||||
| `plugin-sdk/codex-native-task-runtime` | Repo-local bundled Codex helper for native task mirror/runtime wiring; not a package export |
|
||||
| `plugin-sdk/channel-runtime-context` | Generic channel runtime-context registration and lookup helpers |
|
||||
| `plugin-sdk/matrix` | Deprecated Matrix compatibility facade for older third-party channel packages; new plugins should import `plugin-sdk/run-command` directly |
|
||||
| `plugin-sdk/mattermost` | Deprecated Mattermost compatibility facade for older third-party channel packages; new plugins should import generic SDK subpaths directly |
|
||||
| `plugin-sdk/runtime-store` | `createPluginRuntimeStore` |
|
||||
| `plugin-sdk/plugin-runtime` | Deprecated broad barrel for plugin command/hook/http/interactive helpers; prefer focused plugin runtime subpaths |
|
||||
| `plugin-sdk/hook-runtime` | Deprecated broad barrel for webhook/internal hook pipeline helpers; prefer focused hook/plugin runtime subpaths |
|
||||
| `plugin-sdk/lazy-runtime` | Lazy runtime import/binding helpers such as `createLazyRuntimeModule`, `createLazyRuntimeMethod`, and `createLazyRuntimeSurface` |
|
||||
| `plugin-sdk/process-runtime` | Process exec helpers |
|
||||
| `plugin-sdk/node-host` | Node-host executable resolution and PTY resume helpers |
|
||||
| `plugin-sdk/cli-runtime` | Deprecated broad barrel for CLI formatting, wait, version, argument-invocation, and lazy command-group helpers; prefer focused CLI/runtime subpaths |
|
||||
| `plugin-sdk/qa-runner-runtime` | Supported facade exposing plugin QA scenarios through the CLI command surface |
|
||||
| `plugin-sdk/tts-runtime` | Supported facade for text-to-speech config schemas and runtime helpers |
|
||||
| `plugin-sdk/process-runtime` | Private-local after July 2026; Process exec helpers |
|
||||
| `plugin-sdk/node-host` | Private-local after July 2026; Node-host executable resolution and PTY resume helpers |
|
||||
| `plugin-sdk/cli-runtime` | Private-local after July 2026; Deprecated broad barrel for CLI formatting, wait, version, argument-invocation, and lazy command-group helpers; prefer focused CLI/runtime subpaths |
|
||||
| `plugin-sdk/qa-runner-runtime` | Private-local after July 2026; Supported facade exposing plugin QA scenarios through the CLI command surface |
|
||||
| `plugin-sdk/tts-runtime` | Private-local after July 2026; Supported facade for text-to-speech config schemas and runtime helpers |
|
||||
| `plugin-sdk/gateway-method-runtime` | Reserved Gateway method dispatch helper for plugin HTTP routes that declare `contracts.gatewayMethodDispatch: ["authenticated-request"]` |
|
||||
| `plugin-sdk/gateway-runtime` | Gateway client, event-loop-ready client start helper, gateway CLI RPC, gateway protocol errors, advertised LAN host resolution, and channel-status patch helpers |
|
||||
| `plugin-sdk/config-contracts` | Focused type-only config surface for plugin config shapes such as `OpenClawConfig` and channel/provider config types |
|
||||
| `plugin-sdk/plugin-config-runtime` | Runtime plugin-config helpers such as `mergeDeep`, `requireRuntimeConfig`, `resolvePluginConfigObject`, and `resolveLivePluginConfigObject` |
|
||||
| `plugin-sdk/config-mutation` | Transactional config mutation helpers such as `mutateConfigFile`, `replaceConfigFile`, and `logConfigUpdated` |
|
||||
| `plugin-sdk/message-tool-delivery-hints` | Shared message-tool delivery metadata hint strings |
|
||||
| `plugin-sdk/message-tool-delivery-hints` | Private-local after July 2026; Shared message-tool delivery metadata hint strings |
|
||||
| `plugin-sdk/runtime-config-snapshot` | Current process config snapshot helpers such as `getRuntimeConfig`, `getRuntimeConfigSnapshot`, and test snapshot setters |
|
||||
| `plugin-sdk/text-autolink-runtime` | File-reference autolink detection without the broad text barrel |
|
||||
| `plugin-sdk/text-autolink-runtime` | Private-local after July 2026; File-reference autolink detection without the broad text barrel |
|
||||
| `plugin-sdk/reply-runtime` | Shared inbound/reply runtime helpers, chunking, dispatch, heartbeat, reply planner |
|
||||
| `plugin-sdk/reply-dispatch-runtime` | Narrow reply dispatch/finalize and conversation-label helpers |
|
||||
| `plugin-sdk/reply-history` | Shared short-window reply-history helpers. New message-turn code should use `createChannelHistoryWindow`; lower-level map helpers remain deprecated compatibility exports only |
|
||||
| `plugin-sdk/reply-reference` | `createReplyReferencePlanner` |
|
||||
| `plugin-sdk/reply-reference` | Private-local after July 2026; `createReplyReferencePlanner` |
|
||||
| `plugin-sdk/reply-chunking` | Narrow text/markdown chunking helpers |
|
||||
| `plugin-sdk/session-store-runtime` | Session workflow helpers (`getSessionEntry`, `listSessionEntries`, `patchSessionEntry`, `upsertSessionEntry`), repair/lifecycle helpers (`deleteSessionEntry`, `cleanupSessionLifecycleArtifacts`, `resolveSessionStoreBackupPaths`), marker helpers for transitional `sessionFile` values, bounded recent user/assistant transcript text reads by session identity, session store path/session-key helpers, and updated-at reads, without broad config writes/maintenance imports |
|
||||
| `plugin-sdk/session-transcript-runtime` | Transcript identity, bounded raw and visible cursors, scoped target/read/write helpers, visible message-entry projection, update publishing, write locks, and transcript memory hit keys |
|
||||
| `plugin-sdk/sqlite-runtime` | Focused SQLite agent-schema, path, and transaction helpers for first-party runtime, without database lifecycle controls |
|
||||
| `plugin-sdk/cron-store-runtime` | Cron store path/load/save helpers |
|
||||
| `plugin-sdk/session-transcript-runtime` | Private-local after July 2026; Transcript identity, bounded raw and visible cursors, scoped target/read/write helpers, visible message-entry projection, update publishing, write locks, and transcript memory hit keys |
|
||||
| `plugin-sdk/sqlite-runtime` | Private-local after July 2026; Focused SQLite agent-schema, path, and transaction helpers for first-party runtime, without database lifecycle controls |
|
||||
| `plugin-sdk/cron-store-runtime` | Private-local after July 2026; Cron store path/load/save helpers |
|
||||
| `plugin-sdk/state-paths` | State/OAuth dir path helpers |
|
||||
| `plugin-sdk/plugin-state-runtime` | Plugin-scoped keyed-state, BLOB, and cooperative SQLite lease contracts plus connection pragma, verified WAL maintenance, and atomic STRICT-schema migration helpers. Lease callbacks receive an abort signal and typed errors distinguish timeout, cancellation, lost ownership, invalid input, and storage failure |
|
||||
| `plugin-sdk/plugin-state-runtime` | Private-local after July 2026; Plugin-scoped keyed-state, BLOB, and cooperative SQLite lease contracts plus connection pragma, verified WAL maintenance, and atomic STRICT-schema migration helpers. Lease callbacks receive an abort signal and typed errors distinguish timeout, cancellation, lost ownership, invalid input, and storage failure |
|
||||
| `plugin-sdk/routing` | Route/session-key/account binding helpers such as `resolveAgentRoute`, `buildAgentSessionKey`, and `resolveDefaultAgentBoundAccountId` |
|
||||
| `plugin-sdk/status-helpers` | Shared channel/account status summary helpers, runtime-state defaults, and issue metadata helpers |
|
||||
| `plugin-sdk/target-resolver-runtime` | Shared target resolver helpers |
|
||||
| `plugin-sdk/string-normalization-runtime` | Slug/string normalization helpers |
|
||||
| `plugin-sdk/request-url` | Extract string URLs from fetch/request-like inputs |
|
||||
| `plugin-sdk/target-resolver-runtime` | Private-local after July 2026; Shared target resolver helpers |
|
||||
| `plugin-sdk/string-normalization-runtime` | Private-local after July 2026; Slug/string normalization helpers |
|
||||
| `plugin-sdk/request-url` | Private-local after July 2026; Extract string URLs from fetch/request-like inputs |
|
||||
| `plugin-sdk/run-command` | Timed command runner with normalized stdout/stderr results |
|
||||
| `plugin-sdk/param-readers` | Common tool/CLI param readers |
|
||||
| `plugin-sdk/tool-plugin` | Define a simple typed agent-tool plugin and expose static metadata for manifest generation |
|
||||
| `plugin-sdk/tool-payload` | Extract normalized payloads from tool result objects |
|
||||
| `plugin-sdk/tool-payload` | Private-local after July 2026; Extract normalized payloads from tool result objects |
|
||||
| `plugin-sdk/tool-send` | Extract canonical send target fields from tool args |
|
||||
| `plugin-sdk/sandbox` | Sandbox backend types and SSH/OpenShell command helpers, including fail-fast exec command preflight |
|
||||
| `plugin-sdk/sandbox` | Private-local after July 2026; Sandbox backend types and SSH/OpenShell command helpers, including fail-fast exec command preflight |
|
||||
| `plugin-sdk/temp-path` | Shared temp-download path helpers and private secure temp workspaces |
|
||||
| `plugin-sdk/logging-core` | Subsystem logger and redaction helpers |
|
||||
| `plugin-sdk/markdown-table-runtime` | Markdown table mode and conversion helpers |
|
||||
| `plugin-sdk/markdown-table-runtime` | Private-local after July 2026; Markdown table mode and conversion helpers |
|
||||
| `plugin-sdk/model-session-runtime` | Model/session override helpers such as `applyModelOverrideToSessionEntry` and `resolveAgentMaxConcurrent` |
|
||||
| `plugin-sdk/talk-config-runtime` | Talk provider config resolution helpers |
|
||||
| `plugin-sdk/talk-config-runtime` | Private-local after July 2026; Talk provider config resolution helpers |
|
||||
| `plugin-sdk/json-store` | Small JSON state read/write helpers |
|
||||
| `plugin-sdk/json-unsafe-integers` | JSON parsing helpers that preserve unsafe integer literals as strings |
|
||||
| `plugin-sdk/file-lock` | Re-entrant file-lock helpers plus Doctor-safe reclaim of definitely stale, unchanged retired lock sidecars |
|
||||
| `plugin-sdk/json-unsafe-integers` | Private-local after July 2026; JSON parsing helpers that preserve unsafe integer literals as strings |
|
||||
| `plugin-sdk/file-lock` | Private-local after July 2026; Re-entrant file-lock helpers plus Doctor-safe reclaim of definitely stale, unchanged retired lock sidecars |
|
||||
| `plugin-sdk/persistent-dedupe` | Disk-backed dedupe cache helpers |
|
||||
| `plugin-sdk/ingress-effect-once` | Durable claim/commit guard for non-idempotent ingress side effects |
|
||||
| `plugin-sdk/acp-runtime` | ACP runtime/session and reply-dispatch helpers |
|
||||
| `plugin-sdk/acp-runtime-backend` | Lightweight ACP backend registration and reply-dispatch helpers for startup-loaded plugins |
|
||||
| `plugin-sdk/acp-binding-resolve-runtime` | Read-only ACP binding resolution without lifecycle startup imports |
|
||||
| `plugin-sdk/acp-runtime` | Private-local after July 2026; ACP runtime/session and reply-dispatch helpers |
|
||||
| `plugin-sdk/acp-runtime-backend` | Private-local after July 2026; Lightweight ACP backend registration and reply-dispatch helpers for startup-loaded plugins |
|
||||
| `plugin-sdk/acp-binding-resolve-runtime` | Private-local after July 2026; Read-only ACP binding resolution without lifecycle startup imports |
|
||||
| `plugin-sdk/agent-config-primitives` | Deprecated agent runtime config-schema primitives; import schema primitives from a maintained plugin-owned surface |
|
||||
| `plugin-sdk/boolean-param` | Loose boolean param reader |
|
||||
| `plugin-sdk/dangerous-name-runtime` | Dangerous-name matching resolution helpers |
|
||||
| `plugin-sdk/dangerous-name-runtime` | Private-local after July 2026; Dangerous-name matching resolution helpers |
|
||||
| `plugin-sdk/device-bootstrap` | Device bootstrap and pairing token helpers, including `BOOTSTRAP_HANDOFF_OPERATOR_SCOPES` |
|
||||
| `plugin-sdk/extension-shared` | Shared passive-channel, status, and ambient proxy helper primitives |
|
||||
| `plugin-sdk/models-provider-runtime` | `/models` command/provider reply helpers |
|
||||
| `plugin-sdk/skill-commands-runtime` | Skill command listing helpers |
|
||||
| `plugin-sdk/native-command-registry` | Native command registry/build/serialize helpers |
|
||||
| `plugin-sdk/agent-harness` | Experimental trusted-plugin surface for low-level agent harnesses: harness types, active-run steer/abort helpers, OpenClaw tool bridge helpers, runtime-plan tool policy helpers, terminal outcome classification, tool progress formatting/detail helpers, and attempt result utilities |
|
||||
| `plugin-sdk/provider-zai-endpoint` | Deprecated Z.AI provider-owned endpoint detection facade; use the Z.AI plugin public API |
|
||||
| `plugin-sdk/async-lock-runtime` | Process-local async lock helper for small runtime state files |
|
||||
| `plugin-sdk/channel-activity-runtime` | Channel activity telemetry helper |
|
||||
| `plugin-sdk/concurrency-runtime` | Bounded async task concurrency helper |
|
||||
| `plugin-sdk/async-lock-runtime` | Private-local after July 2026; Process-local async lock helper for small runtime state files |
|
||||
| `plugin-sdk/channel-activity-runtime` | Private-local after July 2026; Channel activity telemetry helper |
|
||||
| `plugin-sdk/concurrency-runtime` | Private-local after July 2026; Bounded async task concurrency helper |
|
||||
| `plugin-sdk/dedupe-runtime` | In-memory and persistent-backed dedupe cache helpers |
|
||||
| `plugin-sdk/delivery-queue-runtime` | Outbound pending-delivery drain helper |
|
||||
| `plugin-sdk/file-access-runtime` | Safe local-file and media-source path helpers |
|
||||
| `plugin-sdk/heartbeat-runtime` | Heartbeat wake, event, and visibility helpers |
|
||||
| `plugin-sdk/expect-runtime` | Required-value assertion helper for provable runtime invariants |
|
||||
| `plugin-sdk/number-runtime` | Numeric coercion helper |
|
||||
| `plugin-sdk/secure-random-runtime` | Secure token/UUID helpers |
|
||||
| `plugin-sdk/system-event-runtime` | System event queue helpers |
|
||||
| `plugin-sdk/transport-ready-runtime` | Transport readiness wait helper |
|
||||
| `plugin-sdk/exec-approvals-runtime` | Exec approval policy file helpers without the broad infra-runtime barrel |
|
||||
| `plugin-sdk/delivery-queue-runtime` | Private-local after July 2026; Outbound pending-delivery drain helper |
|
||||
| `plugin-sdk/file-access-runtime` | Private-local after July 2026; Safe local-file and media-source path helpers |
|
||||
| `plugin-sdk/heartbeat-runtime` | Private-local after July 2026; Heartbeat wake, event, and visibility helpers |
|
||||
| `plugin-sdk/expect-runtime` | Private-local after July 2026; Required-value assertion helper for provable runtime invariants |
|
||||
| `plugin-sdk/number-runtime` | Private-local after July 2026; Numeric coercion helper |
|
||||
| `plugin-sdk/secure-random-runtime` | Private-local after July 2026; Secure token/UUID helpers |
|
||||
| `plugin-sdk/system-event-runtime` | Private-local after July 2026; System event queue helpers |
|
||||
| `plugin-sdk/transport-ready-runtime` | Private-local after July 2026; Transport readiness wait helper |
|
||||
| `plugin-sdk/exec-approvals-runtime` | Private-local after July 2026; Exec approval policy file helpers without the broad infra-runtime barrel |
|
||||
| `plugin-sdk/infra-runtime` | Deprecated compatibility shim; use the focused runtime subpaths above |
|
||||
| `plugin-sdk/collection-runtime` | Small bounded cache helpers |
|
||||
| `plugin-sdk/diagnostic-runtime` | Diagnostic flag, event, and trace-context helpers |
|
||||
| `plugin-sdk/error-runtime` | Error graph, formatting, shared error classification helpers, `PlatformMessageNotDispatchedError`, `isApprovalNotFoundError` |
|
||||
| `plugin-sdk/fetch-runtime` | Wrapped fetch, proxy, EnvHttpProxyAgent option, and pinned lookup helpers |
|
||||
| `plugin-sdk/runtime-fetch` | Dispatcher-aware runtime fetch without proxy/guarded-fetch imports |
|
||||
| `plugin-sdk/inline-image-data-url-runtime` | Inline image data URL sanitizer and signature sniffing helpers without the broad media runtime surface |
|
||||
| `plugin-sdk/response-limit-runtime` | Byte-, idle-, and deadline-bounded response-body readers without the broad media runtime surface |
|
||||
| `plugin-sdk/session-binding-runtime` | Current conversation binding state without configured binding routing or pairing stores |
|
||||
| `plugin-sdk/context-visibility-runtime` | Context visibility resolution and supplemental context filtering without broad config/security imports |
|
||||
| `plugin-sdk/fetch-runtime` | Private-local after July 2026; Wrapped fetch, proxy, EnvHttpProxyAgent option, and pinned lookup helpers |
|
||||
| `plugin-sdk/runtime-fetch` | Private-local after July 2026; Dispatcher-aware runtime fetch without proxy/guarded-fetch imports |
|
||||
| `plugin-sdk/inline-image-data-url-runtime` | Private-local after July 2026; Inline image data URL sanitizer and signature sniffing helpers without the broad media runtime surface |
|
||||
| `plugin-sdk/response-limit-runtime` | Private-local after July 2026; Byte-, idle-, and deadline-bounded response-body readers without the broad media runtime surface |
|
||||
| `plugin-sdk/session-binding-runtime` | Private-local after July 2026; Current conversation binding state without configured binding routing or pairing stores |
|
||||
| `plugin-sdk/context-visibility-runtime` | Private-local after July 2026; Context visibility resolution and supplemental context filtering without broad config/security imports |
|
||||
| `plugin-sdk/string-coerce-runtime` | Narrow primitive record/string coercion and normalization helpers without markdown/logging imports |
|
||||
| `plugin-sdk/html-entity-runtime` | Single-pass semicolon-terminated HTML5 entity decoding without broad text utilities |
|
||||
| `plugin-sdk/text-utility-runtime` | Low-level text and path helpers, including five-entity HTML escaping |
|
||||
| `plugin-sdk/html-entity-runtime` | Private-local after July 2026; Single-pass semicolon-terminated HTML5 entity decoding without broad text utilities |
|
||||
| `plugin-sdk/text-utility-runtime` | Private-local after July 2026; Low-level text and path helpers, including five-entity HTML escaping |
|
||||
| `plugin-sdk/widget-html` | Complete-document detection, size validation, and tool input errors for self-contained HTML widgets |
|
||||
| `plugin-sdk/host-runtime` | Hostname and SCP host normalization helpers |
|
||||
| `plugin-sdk/retry-runtime` | Retry config and retry runner helpers |
|
||||
| `plugin-sdk/host-runtime` | Private-local after July 2026; Hostname and SCP host normalization helpers |
|
||||
| `plugin-sdk/retry-runtime` | Private-local after July 2026; Retry config and retry runner helpers |
|
||||
| `plugin-sdk/agent-runtime` | Deprecated broad barrel for agent dir/identity/workspace helpers, including `resolveAgentDir`, `resolveDefaultAgentDir`, and the deprecated `resolveOpenClawAgentDir` compatibility export; prefer focused agent/runtime subpaths |
|
||||
| `plugin-sdk/directory-runtime` | Config-backed directory query/dedup |
|
||||
| `plugin-sdk/keyed-async-queue` | `KeyedAsyncQueue` |
|
||||
| `plugin-sdk/keyed-async-queue` | Private-local after July 2026; `KeyedAsyncQueue` |
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Capability and testing subpaths">
|
||||
@@ -354,25 +318,23 @@ usage endpoint failed or returned no usable usage data.
|
||||
| `plugin-sdk/media-runtime` | Deprecated broad media barrel including `saveRemoteMedia`, `saveResponseMedia`, `readRemoteMediaBuffer`, and deprecated `fetchRemoteMedia`; prefer `plugin-sdk/media-store`, `plugin-sdk/media-mime`, `plugin-sdk/outbound-media`, and capability runtime subpaths, and prefer store helpers before buffer reads when a URL should become OpenClaw media |
|
||||
| `plugin-sdk/media-mime` | Narrow MIME normalization, file-extension mapping, MIME detection, and media-kind helpers |
|
||||
| `plugin-sdk/media-store` | Narrow media store helpers such as `saveMediaBuffer` and `saveMediaStream` |
|
||||
| `plugin-sdk/media-generation-runtime` | Shared media-generation failover helpers, candidate selection, and missing-model messaging |
|
||||
| `plugin-sdk/media-generation-runtime` | Private-local after July 2026; Shared media-generation failover helpers, candidate selection, and missing-model messaging |
|
||||
| `plugin-sdk/media-understanding` | Media understanding provider types plus provider-facing image/audio/structured-extraction helper exports |
|
||||
| `plugin-sdk/text-chunking` | Outbound text and offset-preserving range chunking, markdown chunking/render helpers, quote-aware HTML tag tokenization, markdown table conversion, directive-tag stripping, and safe-text utilities |
|
||||
| `plugin-sdk/speech` | Speech provider types plus provider-facing directive, registry, validation, OpenAI-compatible TTS builder, and speech helper exports |
|
||||
| `plugin-sdk/speech-core` | Shared speech provider types, registry, directive, normalization, and speech helper exports |
|
||||
| `plugin-sdk/speech` | Private-local after July 2026; Speech provider types plus provider-facing directive, registry, validation, OpenAI-compatible TTS builder, and speech helper exports |
|
||||
| `plugin-sdk/speech-core` | Private-local after July 2026; Shared speech provider types, registry, directive, normalization, and speech helper exports |
|
||||
| `plugin-sdk/speech-settings` | Lightweight TTS config resolution and normalization primitives without provider registries or synthesis runtime |
|
||||
| `plugin-sdk/realtime-transcription` | Realtime transcription provider types, registry helpers, and shared WebSocket session helper |
|
||||
| `plugin-sdk/realtime-bootstrap-context` | Realtime profile bootstrap helper for bounded `IDENTITY.md`, `USER.md`, and `SOUL.md` context injection |
|
||||
| `plugin-sdk/realtime-voice` | Realtime voice provider types, registry helpers, shared audio-energy/speech-onset gates, and realtime voice behavior helpers, including the transport-independent session harness and output activity tracking |
|
||||
| `plugin-sdk/realtime-transcription` | Private-local after July 2026; Realtime transcription provider types, registry helpers, and shared WebSocket session helper |
|
||||
| `plugin-sdk/realtime-bootstrap-context` | Private-local after July 2026; Realtime profile bootstrap helper for bounded `IDENTITY.md`, `USER.md`, and `SOUL.md` context injection |
|
||||
| `plugin-sdk/realtime-voice` | Private-local after July 2026; Realtime voice provider types, registry helpers, shared audio-energy/speech-onset gates, and realtime voice behavior helpers, including the transport-independent session harness and output activity tracking |
|
||||
| `plugin-sdk/meeting-runtime` | Browser-meeting session runtime, realtime audio engines/transports, `MeetingPlatformAdapter`, browser/node control, agent-consult, voice-call delegation, setup checks, and SoX command helpers |
|
||||
| `plugin-sdk/image-generation` | Image generation provider types plus image asset/data URL helpers and the OpenAI-compatible image provider builder |
|
||||
| `plugin-sdk/image-generation-core` | Shared image-generation types, failover, auth, and registry helpers |
|
||||
| `plugin-sdk/music-generation` | Music generation provider/request/result types |
|
||||
| `plugin-sdk/music-generation-core` | Deprecated shared music-generation types, failover helpers, provider lookup, and model-ref parsing; prefer plugin-owned music provider surfaces |
|
||||
| `plugin-sdk/video-generation` | Video generation provider/request/result types |
|
||||
| `plugin-sdk/video-generation-core` | Shared video-generation types, failover helpers, provider lookup, and model-ref parsing |
|
||||
| `plugin-sdk/transcripts` | Shared transcripts source provider types, registry helpers, session descriptors, and utterance metadata |
|
||||
| `plugin-sdk/webhook-targets` | Webhook target registry and route-install helpers |
|
||||
| `plugin-sdk/webhook-path` | Deprecated compatibility alias; use `plugin-sdk/webhook-ingress` |
|
||||
| `plugin-sdk/image-generation` | Private-local after July 2026; Image generation provider types plus image asset/data URL helpers and the OpenAI-compatible image provider builder |
|
||||
| `plugin-sdk/image-generation-core` | Private-local after July 2026; Shared image-generation types, failover, auth, and registry helpers |
|
||||
| `plugin-sdk/music-generation` | Private-local after July 2026; Music generation provider/request/result types |
|
||||
| `plugin-sdk/video-generation` | Private-local after July 2026; Video generation provider/request/result types |
|
||||
| `plugin-sdk/video-generation-core` | Private-local after July 2026; Shared video-generation types, failover helpers, provider lookup, and model-ref parsing |
|
||||
| `plugin-sdk/transcripts` | Private-local after July 2026; Shared transcripts source provider types, registry helpers, session descriptors, and utterance metadata |
|
||||
| `plugin-sdk/webhook-targets` | Private-local after July 2026; Webhook target registry and route-install helpers |
|
||||
| `plugin-sdk/web-media` | Shared remote/local media loading helpers |
|
||||
| `plugin-sdk/zod` | Deprecated compatibility re-export; import `zod` from `zod` directly |
|
||||
| `plugin-sdk/plugin-test-api` | Repo-local minimal `createTestPluginApi` helper for direct plugin registration unit tests without importing repo test helper bridges |
|
||||
@@ -383,7 +345,7 @@ usage endpoint failed or returned no usable usage data.
|
||||
| `plugin-sdk/plugin-test-contracts` | Repo-local plugin package, registration, public artifact, direct import, runtime API, and import side-effect contract helpers |
|
||||
| `plugin-sdk/plugin-state-test-runtime` | Repo-local plugin state store, ingress queue, and state DB test helpers |
|
||||
| `plugin-sdk/provider-test-contracts` | Repo-local provider runtime, auth, discovery, onboard, catalog, wizard, media capability, replay policy, realtime STT live-audio, web-search/fetch, and stream contract helpers |
|
||||
| `plugin-sdk/provider-http-test-mocks` | Repo-local opt-in Vitest HTTP/auth mocks for provider tests that exercise `plugin-sdk/provider-http` |
|
||||
| `plugin-sdk/provider-http-test-mocks` | Private-local after July 2026; Repo-local opt-in Vitest HTTP/auth mocks for provider tests that exercise `plugin-sdk/provider-http` |
|
||||
| `plugin-sdk/reply-payload-testing` | Repo-local helpers for attaching metadata to reply payload fixtures |
|
||||
| `plugin-sdk/sqlite-runtime-testing` | Repo-local SQLite lifecycle helpers for first-party tests |
|
||||
| `plugin-sdk/test-fixtures` | Repo-local generic CLI runtime capture, sandbox context, skill writer, agent-message, system-event, module reload, bundled plugin path, terminal-text, chunking, auth-token, and typed-case fixtures |
|
||||
@@ -393,27 +355,20 @@ usage endpoint failed or returned no usable usage data.
|
||||
<Accordion title="Memory subpaths">
|
||||
| Subpath | Key exports |
|
||||
| --- | --- |
|
||||
| `plugin-sdk/memory-core` | Deprecated compatibility alias; use `plugin-sdk/memory-host-core` |
|
||||
| `plugin-sdk/memory-core-engine-runtime` | Deprecated memory index/search runtime facade; prefer vendor-neutral memory-host subpaths |
|
||||
| `plugin-sdk/memory-core-host-embedding-registry` | Lightweight memory embedding provider registry helpers |
|
||||
| `plugin-sdk/memory-core-host-embedding-registry` | Private-local after July 2026; Lightweight memory embedding provider registry helpers |
|
||||
| `plugin-sdk/memory-core-host-engine-foundation` | Memory host foundation engine exports |
|
||||
| `plugin-sdk/memory-core-host-engine-embeddings` | Memory host embedding contracts, registry access, local provider, and generic batch/remote helpers. `registerMemoryEmbeddingProvider` on this surface is deprecated; use the generic embedding provider API for new providers. |
|
||||
| `plugin-sdk/memory-core-host-engine-qmd` | Memory host QMD engine exports |
|
||||
| `plugin-sdk/memory-core-host-engine-storage` | Memory host storage engine exports |
|
||||
| `plugin-sdk/memory-core-host-multimodal` | Deprecated memory host multimodal helpers; prefer vendor-neutral memory-host subpaths |
|
||||
| `plugin-sdk/memory-core-host-query` | Deprecated memory host query helpers; prefer vendor-neutral memory-host subpaths |
|
||||
| `plugin-sdk/memory-core-host-secret` | Memory host secret helpers |
|
||||
| `plugin-sdk/memory-core-host-events` | Deprecated compatibility alias; use `plugin-sdk/memory-host-events` |
|
||||
| `plugin-sdk/memory-core-host-status` | Memory host status helpers |
|
||||
| `plugin-sdk/memory-core-host-runtime-cli` | Memory host CLI runtime helpers |
|
||||
| `plugin-sdk/memory-core-host-runtime-core` | Memory host core runtime helpers |
|
||||
| `plugin-sdk/memory-core-host-runtime-files` | Memory host file/runtime helpers |
|
||||
| `plugin-sdk/memory-host-core` | Vendor-neutral alias for memory host core runtime helpers |
|
||||
| `plugin-sdk/memory-host-events` | Vendor-neutral alias for memory host event journal helpers |
|
||||
| `plugin-sdk/memory-host-files` | Deprecated compatibility alias; use `plugin-sdk/memory-core-host-runtime-files` |
|
||||
| `plugin-sdk/memory-host-markdown` | Shared managed-markdown helpers for memory-adjacent plugins |
|
||||
| `plugin-sdk/memory-host-search` | Active memory runtime facade for search-manager access |
|
||||
| `plugin-sdk/memory-host-status` | Deprecated compatibility alias; use `plugin-sdk/memory-core-host-status` |
|
||||
| `plugin-sdk/memory-core-host-engine-embeddings` | Private-local after July 2026; Memory host embedding contracts, registry access, local provider, and generic batch/remote helpers. `registerMemoryEmbeddingProvider` on this surface is deprecated; use the generic embedding provider API for new providers. |
|
||||
| `plugin-sdk/memory-core-host-engine-qmd` | Private-local after July 2026; Memory host QMD engine exports |
|
||||
| `plugin-sdk/memory-core-host-engine-storage` | Private-local after July 2026; Memory host storage engine exports |
|
||||
| `plugin-sdk/memory-core-host-secret` | Private-local after July 2026; Memory host secret helpers |
|
||||
| `plugin-sdk/memory-core-host-status` | Private-local after July 2026; Memory host status helpers |
|
||||
| `plugin-sdk/memory-core-host-runtime-cli` | Private-local after July 2026; Memory host CLI runtime helpers |
|
||||
| `plugin-sdk/memory-core-host-runtime-core` | Private-local after July 2026; Memory host core runtime helpers |
|
||||
| `plugin-sdk/memory-core-host-runtime-files` | Private-local after July 2026; Memory host file/runtime helpers |
|
||||
| `plugin-sdk/memory-host-core` | Vendor-neutral memory host core runtime helpers |
|
||||
| `plugin-sdk/memory-host-events` | Private-local after July 2026; Vendor-neutral alias for memory host event journal helpers |
|
||||
| `plugin-sdk/memory-host-markdown` | Private-local after July 2026; Shared managed-markdown helpers for memory-adjacent plugins |
|
||||
| `plugin-sdk/memory-host-search` | Private-local after July 2026; Active memory runtime facade for search-manager access |
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Reserved bundled-helper subpaths">
|
||||
@@ -426,7 +381,7 @@ usage endpoint failed or returned no usable usage data.
|
||||
|
||||
| Subpath | Owner and purpose |
|
||||
| --- | --- |
|
||||
| `plugin-sdk/codex-mcp-projection` | Bundled Codex plugin helper for projecting user MCP server config into Codex app-server thread config (reserved package export) |
|
||||
| `plugin-sdk/codex-mcp-projection` | Private-local after July 2026; Bundled Codex plugin helper for projecting user MCP server config into Codex app-server thread config (reserved package export) |
|
||||
| `plugin-sdk/codex-native-task-runtime` | Bundled Codex plugin helper for mirroring Codex app-server native subagents into OpenClaw task state (repo-local only, not a package export) |
|
||||
|
||||
</Accordion>
|
||||
|
||||
+12
-14
@@ -50,10 +50,10 @@ import { mockNodeBuiltinModule } from "openclaw/plugin-sdk/test-node-mocks";
|
||||
|
||||
Use these focused subpaths for bundled plugin tests. The former
|
||||
`openclaw/plugin-sdk/testing` barrel was repo-local, excluded from shipped
|
||||
packages, and has been removed. The legacy `openclaw/plugin-sdk/test-utils`
|
||||
alias remains repo-local; `pnpm run lint:plugins:no-extension-test-core-imports`
|
||||
(`scripts/check-no-extension-test-core-imports.ts`) rejects new extension-test
|
||||
imports of that alias.
|
||||
packages, and has been removed. The former `openclaw/plugin-sdk/test-utils`
|
||||
alias was removed with it. `pnpm run lint:plugins:no-extension-test-core-imports`
|
||||
(`scripts/check-no-extension-test-core-imports.ts`) keeps extension tests on
|
||||
the focused test subpaths above.
|
||||
|
||||
### Available exports
|
||||
|
||||
@@ -188,11 +188,9 @@ entry to declare `kind: "memory"`.
|
||||
|
||||
### Testing runtime config access
|
||||
|
||||
Prefer the shared plugin runtime mock from `openclaw/plugin-sdk/plugin-test-runtime`.
|
||||
Its `runtime.config.loadConfig()` and `runtime.config.writeConfigFile(...)`
|
||||
mocks throw by default so tests catch new usage of deprecated compatibility
|
||||
APIs. Override those mocks only when the test is explicitly covering legacy
|
||||
compatibility behavior.
|
||||
Prefer the shared plugin runtime mock from
|
||||
`openclaw/plugin-sdk/plugin-test-runtime`. Its runtime config helpers model the
|
||||
current snapshot and mutation APIs.
|
||||
|
||||
### Unit testing a channel plugin
|
||||
|
||||
@@ -340,11 +338,11 @@ pnpm test src/plugins/contracts/runtime-seams.contract.test.ts
|
||||
`scripts/run-additional-boundary-checks.mjs` runs a set of `lint:plugins:*`
|
||||
import-boundary checks in CI; each can also be run standalone locally:
|
||||
|
||||
| Command | Enforces |
|
||||
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
|
||||
| `pnpm run lint:plugins:no-monolithic-plugin-sdk-entry-imports` | Bundled plugins cannot import the monolithic `openclaw/plugin-sdk` root barrel. |
|
||||
| `pnpm run lint:plugins:no-extension-src-imports` | Production extension files cannot import the repo `src/**` tree directly (`../../src/...`). |
|
||||
| `pnpm run lint:plugins:no-extension-test-core-imports` | Extension test files cannot import `plugin-sdk/test-utils` or other core-only test helpers. |
|
||||
| Command | Enforces |
|
||||
| -------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
|
||||
| `pnpm run lint:plugins:no-monolithic-plugin-sdk-entry-imports` | Bundled plugins cannot import the monolithic `openclaw/plugin-sdk` root barrel. |
|
||||
| `pnpm run lint:plugins:no-extension-src-imports` | Production extension files cannot import the repo `src/**` tree directly (`../../src/...`). |
|
||||
| `pnpm run lint:plugins:no-extension-test-core-imports` | Extension test files cannot import removed SDK test aliases or other core-only test helpers. |
|
||||
|
||||
External plugins are not subject to these lint rules, but following the same
|
||||
patterns is recommended.
|
||||
|
||||
@@ -42,12 +42,12 @@ The lists below are generated from the source target registry and checked agains
|
||||
- `talk.providers.*.apiKey`
|
||||
- `talk.realtime.providers.*.apiKey`
|
||||
- `messages.tts.providers.*.apiKey`
|
||||
- `tools.web.fetch.firecrawl.apiKey`
|
||||
- `plugins.entries.acpx.config.mcpServers.*.env.*`
|
||||
- `plugins.entries.brave.config.webSearch.apiKey`
|
||||
- `plugins.entries.codex.config.appServer.authToken`
|
||||
- `plugins.entries.codex.config.appServer.headers.*`
|
||||
- `plugins.entries.exa.config.webSearch.apiKey`
|
||||
- `plugins.entries.firecrawl.config.webFetch.apiKey`
|
||||
- `plugins.entries.google-meet.config.realtime.providers.*.apiKey`
|
||||
- `plugins.entries.google.config.webSearch.apiKey`
|
||||
- `plugins.entries.xai.config.webSearch.apiKey`
|
||||
@@ -62,8 +62,6 @@ The lists below are generated from the source target registry and checked agains
|
||||
- `plugins.entries.voice-call.config.tts.providers.*.apiKey`
|
||||
- `plugins.entries.voice-call.config.twilio.authToken`
|
||||
- `plugins.entries.webhooks.config.routes.*.secret`
|
||||
- `tools.web.search.*.apiKey`
|
||||
- `tools.web.search.apiKey`
|
||||
- `gateway.auth.password`
|
||||
- `gateway.auth.token`
|
||||
- `gateway.remote.token`
|
||||
@@ -137,7 +135,7 @@ Notes:
|
||||
- OAuth policy guard: `auth.profiles.<id>.mode = "oauth"` cannot be combined with SecretRef inputs for that profile. Startup/reload and auth-profile resolution fail fast when this policy is violated.
|
||||
- For SecretRef-managed model providers, generated `agents/*/agent/models.json` entries persist non-secret markers (not resolved secret values) for `apiKey`/header surfaces. Marker persistence is source-authoritative: OpenClaw writes markers from the active source config snapshot (pre-resolution), not from resolved runtime secret values.
|
||||
- Cold Gateway startup can isolate retryable resolution failures for mapped, non-Gateway owners. Current mapped classes include model providers and skills, media/TTS/cron providers, eligible auth profiles, per-agent memory, sandbox SSH, channel accounts, and manifest-declared plugin routes. Startup keeps each failed owner's explicit refs in the runtime snapshot, reports the owner through status and doctor, and rejects requests for that owner without trying lower-precedence credentials. Reload and config-write preflight use the same owner-aware policy: healthy owners refresh; an eligible failed owner stays stale only when its ref identities, provider definitions, and complete non-secret owner contract are unchanged; a new or changed failure becomes cold. Gateway ingress auth, structurally invalid refs or values, fail-closed owners, and currently unmapped owners remain strict.
|
||||
- For web search: in explicit provider mode (`tools.web.search.provider` set), only the selected provider key is active. In auto mode (`tools.web.search.provider` unset), only the first provider key that resolves by precedence is active, and non-selected provider refs are treated as inactive until selected. Legacy `tools.web.search.*` provider paths still resolve during the compatibility window, but the canonical SecretRef surface is `plugins.entries.<plugin>.config.webSearch.*`.
|
||||
- For web search: in explicit provider mode (`tools.web.search.provider` set), only the selected provider key is active. In auto mode (`tools.web.search.provider` unset), only the first provider key that resolves by precedence is active, and non-selected provider refs are treated as inactive until selected. Provider credentials use `plugins.entries.<plugin>.config.webSearch.*`.
|
||||
- Slack `identity: "user"` uses `channels.slack.userToken` with `channels.slack.appToken` for Socket Mode or `channels.slack.signingSecret` for HTTP mode. The same pairing applies under `channels.slack.accounts.*`; no bot token is required for this identity.
|
||||
|
||||
## Unsupported credentials
|
||||
|
||||
@@ -603,6 +603,13 @@
|
||||
"secretShape": "secret_input",
|
||||
"optIn": true
|
||||
},
|
||||
{
|
||||
"id": "plugins.entries.firecrawl.config.webFetch.apiKey",
|
||||
"configFile": "openclaw.json",
|
||||
"path": "plugins.entries.firecrawl.config.webFetch.apiKey",
|
||||
"secretShape": "secret_input",
|
||||
"optIn": true
|
||||
},
|
||||
{
|
||||
"id": "plugins.entries.firecrawl.config.webSearch.apiKey",
|
||||
"configFile": "openclaw.json",
|
||||
@@ -721,27 +728,6 @@
|
||||
"path": "talk.realtime.providers.*.apiKey",
|
||||
"secretShape": "secret_input",
|
||||
"optIn": true
|
||||
},
|
||||
{
|
||||
"id": "tools.web.fetch.firecrawl.apiKey",
|
||||
"configFile": "openclaw.json",
|
||||
"path": "tools.web.fetch.firecrawl.apiKey",
|
||||
"secretShape": "secret_input",
|
||||
"optIn": true
|
||||
},
|
||||
{
|
||||
"id": "tools.web.search.*.apiKey",
|
||||
"configFile": "openclaw.json",
|
||||
"path": "tools.web.search.*.apiKey",
|
||||
"secretShape": "secret_input",
|
||||
"optIn": true
|
||||
},
|
||||
{
|
||||
"id": "tools.web.search.apiKey",
|
||||
"configFile": "openclaw.json",
|
||||
"path": "tools.web.search.apiKey",
|
||||
"secretShape": "secret_input",
|
||||
"optIn": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ OpenClaw supports Brave Search API as a `web_search` provider.
|
||||
}
|
||||
```
|
||||
|
||||
Provider-specific Brave search settings live under `plugins.entries.brave.config.webSearch.*`; this is the canonical config path. A shared top-level `tools.web.search.apiKey` and a scoped `tools.web.search.brave.*` still load through a compatibility merge, but new config should use the plugin-scoped path above.
|
||||
Provider-specific Brave search settings live under `plugins.entries.brave.config.webSearch.*`; this is the canonical config path.
|
||||
|
||||
`webSearch.mode` controls the Brave transport:
|
||||
|
||||
|
||||
@@ -63,8 +63,8 @@ also prompts for:
|
||||
`tools.web.search.provider` is auto-detected from available API keys when omitted;
|
||||
set it to `kimi` explicitly if multiple search credentials are configured.
|
||||
|
||||
Equivalent scoped form under `tools.web.search.kimi` (`apiKey`, `baseUrl`, `model`)
|
||||
also works; both shapes merge into the same resolved config.
|
||||
Configure Kimi-specific `apiKey`, `baseUrl`, and `model` values under
|
||||
`plugins.entries.moonshot.config.webSearch`.
|
||||
|
||||
Defaults: `baseUrl` defaults to `https://api.moonshot.ai/v1` when omitted, `model`
|
||||
defaults to `kimi-k2.6`.
|
||||
|
||||
@@ -75,7 +75,7 @@ MiniMax Search uses these endpoints:
|
||||
If `plugins.entries.minimax.config.webSearch.region` is unset, OpenClaw resolves
|
||||
the region in this order:
|
||||
|
||||
1. `tools.web.search.minimax.region` / plugin-owned `webSearch.region`
|
||||
1. Plugin-owned `webSearch.region`
|
||||
2. `MINIMAX_API_HOST`
|
||||
3. `models.providers.minimax.baseUrl`
|
||||
4. `models.providers.minimax-portal.baseUrl`
|
||||
|
||||
+1
-2
@@ -545,8 +545,7 @@ every provider. xAI credentials are always required.
|
||||
`x_search` posts to `<baseUrl>/responses` when
|
||||
`plugins.entries.xai.config.xSearch.baseUrl` is set. If that field is omitted,
|
||||
it falls back to `plugins.entries.xai.config.webSearch.baseUrl`, then the
|
||||
legacy `tools.web.search.grok.baseUrl`, and finally the public xAI endpoint
|
||||
(`https://api.x.ai/v1`).
|
||||
public xAI endpoint (`https://api.x.ai/v1`).
|
||||
|
||||
### x_search parameters
|
||||
|
||||
|
||||
@@ -34,9 +34,6 @@
|
||||
"contracts": {
|
||||
"webSearchProviders": ["brave"]
|
||||
},
|
||||
"configContracts": {
|
||||
"compatibilityRuntimePaths": ["tools.web.search.apiKey"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -92,8 +92,10 @@ function describeBraveRequestUrl(url: URL): {
|
||||
|
||||
function resolveBraveApiKey(searchConfig?: SearchConfigRecord): string | undefined {
|
||||
return (
|
||||
readConfiguredSecretString(searchConfig?.apiKey, "tools.web.search.apiKey") ??
|
||||
readProviderEnvValue(["BRAVE_API_KEY"])
|
||||
readConfiguredSecretString(
|
||||
searchConfig?.apiKey,
|
||||
"plugins.entries.brave.config.webSearch.apiKey",
|
||||
) ?? readProviderEnvValue(["BRAVE_API_KEY"])
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -122,6 +122,34 @@ function createBodyOnlyErrorResponse(params: { body: string; status: number }):
|
||||
} as Response;
|
||||
}
|
||||
|
||||
function createBraveTool(
|
||||
params: {
|
||||
webSearch?: Record<string, unknown>;
|
||||
searchConfig?: Record<string, unknown>;
|
||||
config?: Record<string, unknown>;
|
||||
} = {},
|
||||
) {
|
||||
const tool = createBraveWebSearchProvider().createTool({
|
||||
config: {
|
||||
...params.config,
|
||||
plugins: {
|
||||
entries: {
|
||||
brave: {
|
||||
config: {
|
||||
webSearch: params.webSearch ?? {},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
searchConfig: params.searchConfig ?? {},
|
||||
} as never);
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
return tool;
|
||||
}
|
||||
|
||||
describe("brave web search provider", () => {
|
||||
const priorFetch = global.fetch;
|
||||
|
||||
@@ -140,41 +168,9 @@ describe("brave web search provider", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("exposes legacy top-level apiKey as a Brave-owned compatibility fallback", () => {
|
||||
const apiKey = { source: "env", provider: "default", id: "BRAVE_API_KEY" } as const;
|
||||
const config = {
|
||||
tools: {
|
||||
web: {
|
||||
search: {
|
||||
apiKey,
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
expect(createBraveWebSearchProvider().getConfiguredCredentialValue?.(config)).toEqual(apiKey);
|
||||
expect(createBraveWebSearchContractProvider().getConfiguredCredentialValue?.(config)).toEqual(
|
||||
apiKey,
|
||||
);
|
||||
expect(createBraveWebSearchProvider().getConfiguredCredentialFallback?.(config)).toEqual({
|
||||
path: "tools.web.search.apiKey",
|
||||
value: apiKey,
|
||||
});
|
||||
expect(
|
||||
createBraveWebSearchContractProvider().getConfiguredCredentialFallback?.(config),
|
||||
).toEqual({
|
||||
path: "tools.web.search.apiKey",
|
||||
value: apiKey,
|
||||
});
|
||||
});
|
||||
|
||||
it("points missing-key users to fetch/browser alternatives", async () => {
|
||||
vi.stubEnv("BRAVE_API_KEY", "");
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({ config: {}, searchConfig: {} });
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
const tool = createBraveTool();
|
||||
|
||||
const result = await tool.execute({ query: "OpenClaw docs" });
|
||||
|
||||
@@ -274,20 +270,13 @@ describe("brave web search provider", () => {
|
||||
});
|
||||
global.fetch = mockFetch as typeof global.fetch;
|
||||
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
const tool = createBraveTool({
|
||||
webSearch: {
|
||||
apiKey: "brave-test-key",
|
||||
brave: {
|
||||
baseUrl: "https://api.search.brave.com/proxy/",
|
||||
mode: "web",
|
||||
},
|
||||
baseUrl: "https://api.search.brave.com/proxy/",
|
||||
mode: "web",
|
||||
},
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
|
||||
await tool.execute({ query: "latest ai news" });
|
||||
|
||||
@@ -299,20 +288,13 @@ describe("brave web search provider", () => {
|
||||
it("uses configured Brave baseUrl for llm-context requests", async () => {
|
||||
vi.stubEnv("BRAVE_API_KEY", "");
|
||||
const mockFetch = installBraveLlmContextFetch();
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
const tool = createBraveTool({
|
||||
webSearch: {
|
||||
apiKey: "brave-test-key",
|
||||
brave: {
|
||||
baseUrl: "https://api.search.brave.com/proxy",
|
||||
mode: "llm-context",
|
||||
},
|
||||
baseUrl: "https://api.search.brave.com/proxy",
|
||||
mode: "llm-context",
|
||||
},
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
|
||||
await tool.execute({ query: "latest ai news" });
|
||||
|
||||
@@ -327,17 +309,7 @@ describe("brave web search provider", () => {
|
||||
});
|
||||
global.fetch = mockFetch as typeof global.fetch;
|
||||
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "brave-test-key",
|
||||
brave: { mode: "web" },
|
||||
},
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
const tool = createBraveTool({ webSearch: { apiKey: "brave-test-key", mode: "web" } });
|
||||
|
||||
await expect(tool.execute({ query: "latest ai news" })).rejects.toThrow(
|
||||
"Brave Search API error: malformed JSON response",
|
||||
@@ -351,17 +323,9 @@ describe("brave web search provider", () => {
|
||||
});
|
||||
global.fetch = mockFetch as typeof global.fetch;
|
||||
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "brave-test-key",
|
||||
brave: { mode: "llm-context" },
|
||||
},
|
||||
const tool = createBraveTool({
|
||||
webSearch: { apiKey: "brave-test-key", mode: "llm-context" },
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
|
||||
await expect(tool.execute({ query: "latest ai news" })).rejects.toThrow(
|
||||
"Brave LLM Context API error: malformed JSON response",
|
||||
@@ -378,17 +342,7 @@ describe("brave web search provider", () => {
|
||||
);
|
||||
global.fetch = mockFetch as typeof global.fetch;
|
||||
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "brave-test-key",
|
||||
brave: { mode: "web" },
|
||||
},
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
const tool = createBraveTool({ webSearch: { apiKey: "brave-test-key", mode: "web" } });
|
||||
|
||||
const error = await tool.execute({ query: "latest ai news" }).catch((value: unknown) => value);
|
||||
expect(error).toBeInstanceOf(Error);
|
||||
@@ -408,17 +362,9 @@ describe("brave web search provider", () => {
|
||||
);
|
||||
global.fetch = mockFetch as typeof global.fetch;
|
||||
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "brave-test-key",
|
||||
brave: { mode: "llm-context" },
|
||||
},
|
||||
const tool = createBraveTool({
|
||||
webSearch: { apiKey: "brave-test-key", mode: "llm-context" },
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
|
||||
const error = await tool.execute({ query: "latest ai news" }).catch((value: unknown) => value);
|
||||
expect(error).toBeInstanceOf(Error);
|
||||
@@ -435,30 +381,20 @@ describe("brave web search provider", () => {
|
||||
});
|
||||
global.fetch = mockFetch as typeof global.fetch;
|
||||
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const firstTool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
const firstTool = createBraveTool({
|
||||
webSearch: {
|
||||
apiKey: "brave-test-key",
|
||||
brave: {
|
||||
baseUrl: "https://api.search.brave.com/proxy-one",
|
||||
mode: "web",
|
||||
},
|
||||
baseUrl: "https://api.search.brave.com/proxy-one",
|
||||
mode: "web",
|
||||
},
|
||||
});
|
||||
const secondTool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
const secondTool = createBraveTool({
|
||||
webSearch: {
|
||||
apiKey: "brave-test-key",
|
||||
brave: {
|
||||
baseUrl: "https://api.search.brave.com/proxy-two",
|
||||
mode: "web",
|
||||
},
|
||||
baseUrl: "https://api.search.brave.com/proxy-two",
|
||||
mode: "web",
|
||||
},
|
||||
});
|
||||
if (!firstTool || !secondTool) {
|
||||
throw new Error("Expected tool definitions");
|
||||
}
|
||||
|
||||
await firstTool.execute({ query: "base url cache identity" });
|
||||
await secondTool.execute({ query: "base url cache identity" });
|
||||
@@ -523,17 +459,7 @@ describe("brave web search provider", () => {
|
||||
|
||||
it("returns validation errors for invalid date ranges", async () => {
|
||||
vi.stubEnv("BRAVE_API_KEY", "");
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "BSA...",
|
||||
brave: { apiKey: "BSA..." },
|
||||
},
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
const tool = createBraveTool({ webSearch: { apiKey: "BSA..." } });
|
||||
|
||||
const result = await tool.execute({
|
||||
query: "latest gpu news",
|
||||
@@ -551,17 +477,9 @@ describe("brave web search provider", () => {
|
||||
it("passes freshness to Brave llm-context endpoint", async () => {
|
||||
vi.stubEnv("BRAVE_API_KEY", "test-key");
|
||||
const mockFetch = installBraveLlmContextFetch();
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "BSA...",
|
||||
brave: { mode: "llm-context" },
|
||||
},
|
||||
const tool = createBraveTool({
|
||||
webSearch: { apiKey: "BSA...", mode: "llm-context" },
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
|
||||
await tool.execute({ query: "latest ai news", freshness: "week" });
|
||||
|
||||
@@ -577,17 +495,7 @@ describe("brave web search provider", () => {
|
||||
});
|
||||
global.fetch = mockFetch as typeof global.fetch;
|
||||
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "brave-test-key",
|
||||
brave: { mode: "web" },
|
||||
},
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
const tool = createBraveTool({ webSearch: { apiKey: "brave-test-key", mode: "web" } });
|
||||
|
||||
await tool.execute({ query: "latest ai news" });
|
||||
|
||||
@@ -600,17 +508,9 @@ describe("brave web search provider", () => {
|
||||
it("sends Brave llm-context auth in the X-Subscription-Token header", async () => {
|
||||
vi.stubEnv("BRAVE_API_KEY", "");
|
||||
const mockFetch = installBraveLlmContextFetch();
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "brave-test-key",
|
||||
brave: { mode: "llm-context" },
|
||||
},
|
||||
const tool = createBraveTool({
|
||||
webSearch: { apiKey: "brave-test-key", mode: "llm-context" },
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
|
||||
await tool.execute({ query: "latest ai news" });
|
||||
|
||||
@@ -623,17 +523,9 @@ describe("brave web search provider", () => {
|
||||
it("passes bounded date ranges to Brave llm-context endpoint", async () => {
|
||||
vi.stubEnv("BRAVE_API_KEY", "test-key");
|
||||
const mockFetch = installBraveLlmContextFetch();
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "BSA...",
|
||||
brave: { mode: "llm-context" },
|
||||
},
|
||||
const tool = createBraveTool({
|
||||
webSearch: { apiKey: "BSA...", mode: "llm-context" },
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
|
||||
await tool.execute({
|
||||
query: "latest ai news",
|
||||
@@ -649,17 +541,9 @@ describe("brave web search provider", () => {
|
||||
it("uses today as the end date for Brave llm-context date_after-only ranges", async () => {
|
||||
vi.stubEnv("BRAVE_API_KEY", "test-key");
|
||||
const mockFetch = installBraveLlmContextFetch();
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "BSA...",
|
||||
brave: { mode: "llm-context" },
|
||||
},
|
||||
const tool = createBraveTool({
|
||||
webSearch: { apiKey: "BSA...", mode: "llm-context" },
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
|
||||
await tool.execute({ query: "latest ai news", date_after: "2025-01-01" });
|
||||
|
||||
@@ -672,17 +556,9 @@ describe("brave web search provider", () => {
|
||||
it("rejects future Brave llm-context date_after-only ranges before fetch", async () => {
|
||||
vi.stubEnv("BRAVE_API_KEY", "test-key");
|
||||
const mockFetch = installBraveLlmContextFetch();
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "BSA...",
|
||||
brave: { mode: "llm-context" },
|
||||
},
|
||||
const tool = createBraveTool({
|
||||
webSearch: { apiKey: "BSA...", mode: "llm-context" },
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
|
||||
const result = await tool.execute({
|
||||
query: "latest ai news",
|
||||
@@ -700,17 +576,9 @@ describe("brave web search provider", () => {
|
||||
it("rejects Brave llm-context date_before-only ranges before fetch", async () => {
|
||||
vi.stubEnv("BRAVE_API_KEY", "test-key");
|
||||
const mockFetch = installBraveLlmContextFetch();
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "BSA...",
|
||||
brave: { mode: "llm-context" },
|
||||
},
|
||||
const tool = createBraveTool({
|
||||
webSearch: { apiKey: "BSA...", mode: "llm-context" },
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
|
||||
const result = await tool.execute({
|
||||
query: "latest ai news",
|
||||
@@ -733,17 +601,7 @@ describe("brave web search provider", () => {
|
||||
});
|
||||
global.fetch = mockFetch as typeof global.fetch;
|
||||
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
config: {},
|
||||
searchConfig: {
|
||||
apiKey: "BSA...",
|
||||
brave: { apiKey: "BSA..." },
|
||||
},
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
const tool = createBraveTool({ webSearch: { apiKey: "BSA..." } });
|
||||
|
||||
await tool.execute({
|
||||
query: "latest Vietnam news",
|
||||
@@ -771,17 +629,10 @@ describe("brave web search provider", () => {
|
||||
});
|
||||
global.fetch = mockFetch as typeof global.fetch;
|
||||
|
||||
const provider = createBraveWebSearchProvider();
|
||||
const tool = provider.createTool({
|
||||
const tool = createBraveTool({
|
||||
config: { diagnostics: { flags: ["brave.http"] } },
|
||||
searchConfig: {
|
||||
apiKey: "brave-test-key",
|
||||
brave: { mode: "web" },
|
||||
},
|
||||
webSearch: { apiKey: "brave-test-key", mode: "web" },
|
||||
});
|
||||
if (!tool) {
|
||||
throw new Error("Expected tool definition");
|
||||
}
|
||||
|
||||
await tool.execute({ query: "unique brave diagnostics query", count: 1 });
|
||||
await tool.execute({ query: "unique brave diagnostics query", count: 1 });
|
||||
|
||||
@@ -11,22 +11,6 @@ import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
|
||||
/** Canonical config path for the Brave Search API key. */
|
||||
const BRAVE_CREDENTIAL_PATH = "plugins.entries.brave.config.webSearch.apiKey";
|
||||
|
||||
/** Resolve legacy top-level Brave credentials from old web-search config. */
|
||||
function resolveLegacyTopLevelBraveCredential(
|
||||
config: unknown,
|
||||
): { path: string; value: unknown } | undefined {
|
||||
if (!isRecord(config)) {
|
||||
return undefined;
|
||||
}
|
||||
const tools = isRecord(config.tools) ? config.tools : undefined;
|
||||
const web = isRecord(tools?.web) ? tools.web : undefined;
|
||||
const search = isRecord(web?.search) ? web.search : undefined;
|
||||
if (!search || !("apiKey" in search)) {
|
||||
return undefined;
|
||||
}
|
||||
return { path: "tools.web.search.apiKey", value: search.apiKey };
|
||||
}
|
||||
|
||||
function resolveBraveWebSearchPluginConfig(config: unknown): Record<string, unknown> | undefined {
|
||||
if (!isRecord(config)) {
|
||||
return undefined;
|
||||
@@ -38,12 +22,9 @@ function resolveBraveWebSearchPluginConfig(config: unknown): Record<string, unkn
|
||||
return isRecord(pluginConfig?.webSearch) ? pluginConfig.webSearch : undefined;
|
||||
}
|
||||
|
||||
/** Resolve Brave credentials from current plugin config or legacy fallback. */
|
||||
/** Resolve Brave credentials from current plugin config. */
|
||||
function resolveConfiguredBraveCredential(config: unknown): unknown {
|
||||
return (
|
||||
resolveBraveWebSearchPluginConfig(config)?.apiKey ??
|
||||
resolveLegacyTopLevelBraveCredential(config)?.value
|
||||
);
|
||||
return resolveBraveWebSearchPluginConfig(config)?.apiKey;
|
||||
}
|
||||
|
||||
/** Build the common Brave provider metadata without the runtime tool executor. */
|
||||
@@ -66,6 +47,5 @@ export function buildBraveWebSearchProviderBase(): Omit<WebSearchProviderPlugin,
|
||||
configuredCredential: { pluginId: "brave" },
|
||||
}),
|
||||
getConfiguredCredentialValue: resolveConfiguredBraveCredential,
|
||||
getConfiguredCredentialFallback: resolveLegacyTopLevelBraveCredential,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -4,9 +4,6 @@
|
||||
"onStartup": false
|
||||
},
|
||||
"channels": ["clickclack"],
|
||||
"channelEnvVars": {
|
||||
"clickclack": ["CLICKCLACK_BOT_TOKEN"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -31,6 +31,13 @@
|
||||
"setupEntry": "./setup-entry.ts",
|
||||
"channel": {
|
||||
"id": "clickclack",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"CLICKCLACK_BOT_TOKEN"
|
||||
]
|
||||
}
|
||||
},
|
||||
"label": "ClickClack",
|
||||
"selectionLabel": "ClickClack",
|
||||
"detailLabel": "ClickClack Bot",
|
||||
|
||||
@@ -181,9 +181,6 @@ export async function prepareCodexAttemptPrompt(context: CodexAttemptContext) {
|
||||
messages: structuredClone(historyState.messages),
|
||||
ctx: hookContext,
|
||||
bootstrapContextRunKind: params.bootstrapContextRunKind,
|
||||
...("beforeAgentStartResult" in params
|
||||
? { beforeAgentStartResult: params.beforeAgentStartResult }
|
||||
: {}),
|
||||
});
|
||||
const resolveShiftedPromptInputRange = (
|
||||
prompt: string,
|
||||
|
||||
@@ -799,25 +799,6 @@ describe("runCopilotAttempt", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("reuses the precomputed legacy before_agent_start result", async () => {
|
||||
const beforeAgentStart = vi.fn();
|
||||
initializeGlobalHookRunner(
|
||||
createMockPluginRegistry([{ hookName: "before_agent_start", handler: beforeAgentStart }]),
|
||||
);
|
||||
const sdk = makeFakeSdk();
|
||||
|
||||
await runCopilotAttempt(
|
||||
makeParams({
|
||||
beforeAgentStartResult: { prependContext: "Use the cached result." },
|
||||
} as never),
|
||||
{ pool: makeFakePool(sdk) },
|
||||
);
|
||||
|
||||
expect(beforeAgentStart).not.toHaveBeenCalled();
|
||||
const messageOptions = sdk.sessions[0]?.sendAndWait.mock.calls[0]?.[0] as { prompt?: string };
|
||||
expect(messageOptions.prompt).toBe("Use the cached result.\n\nhello");
|
||||
});
|
||||
|
||||
it("preserves native Copilot SDK hooks alongside generic lifecycle hooks", async () => {
|
||||
const sdk = makeFakeSdk();
|
||||
const onPreToolUse = vi.fn();
|
||||
|
||||
@@ -736,9 +736,6 @@ export async function runCopilotAttempt(
|
||||
messages,
|
||||
ctx: hookContext,
|
||||
bootstrapContextRunKind: input.bootstrapContextRunKind,
|
||||
...("beforeAgentStartResult" in input
|
||||
? { beforeAgentStartResult: input.beforeAgentStartResult }
|
||||
: {}),
|
||||
});
|
||||
const attemptInput =
|
||||
promptBuild.prompt === input.prompt ? input : { ...input, prompt: promptBuild.prompt };
|
||||
|
||||
@@ -6,9 +6,6 @@
|
||||
"enabledByDefault": true,
|
||||
"providers": ["deepinfra"],
|
||||
"providerCatalogEntry": "./provider-discovery.ts",
|
||||
"providerAuthEnvVars": {
|
||||
"deepinfra": ["DEEPINFRA_API_KEY"]
|
||||
},
|
||||
"providerEndpoints": [
|
||||
{
|
||||
"endpointClass": "deepinfra-native",
|
||||
|
||||
@@ -21,11 +21,6 @@
|
||||
"discord-voice"
|
||||
]
|
||||
},
|
||||
"channelEnvVars": {
|
||||
"discord": [
|
||||
"DISCORD_BOT_TOKEN"
|
||||
]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -39,6 +39,13 @@
|
||||
},
|
||||
"channel": {
|
||||
"id": "discord",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"DISCORD_BOT_TOKEN"
|
||||
]
|
||||
}
|
||||
},
|
||||
"approvalFlags": ["native"],
|
||||
"label": "Discord",
|
||||
"selectionLabel": "Discord (Bot API)",
|
||||
@@ -52,13 +59,6 @@
|
||||
"commands": {
|
||||
"nativeCommandsAutoEnabled": true,
|
||||
"nativeSkillsAutoEnabled": true
|
||||
},
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"allOf": [
|
||||
"DISCORD_BOT_TOKEN"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"install": {
|
||||
|
||||
@@ -42,10 +42,7 @@ const resolveConfiguredBindingRouteMock = vi.hoisted(() =>
|
||||
vi.fn<ResolveConfiguredBindingRoute>(() => createUnboundConfiguredRouteResult()),
|
||||
);
|
||||
const providerThinkingMocks = vi.hoisted(() => ({
|
||||
resolveProviderBinaryThinking: vi.fn(),
|
||||
resolveProviderDefaultThinkingLevel: vi.fn(),
|
||||
resolveProviderThinkingProfile: vi.fn(),
|
||||
resolveProviderXHighThinking: vi.fn(),
|
||||
}));
|
||||
const buildModelsProviderDataMock = vi.hoisted(() => vi.fn());
|
||||
|
||||
@@ -166,26 +163,11 @@ function installProviderThinkingRegistryForTest(): void {
|
||||
label: "Discord Test Thinking",
|
||||
aliases: ["anthropic", "openai"],
|
||||
auth: [],
|
||||
isBinaryThinking: (context) =>
|
||||
providerThinkingMocks.resolveProviderBinaryThinking({
|
||||
provider: context.provider,
|
||||
context,
|
||||
}),
|
||||
supportsXHighThinking: (context) =>
|
||||
providerThinkingMocks.resolveProviderXHighThinking({
|
||||
provider: context.provider,
|
||||
context,
|
||||
}),
|
||||
resolveThinkingProfile: (context) =>
|
||||
providerThinkingMocks.resolveProviderThinkingProfile({
|
||||
provider: context.provider,
|
||||
context,
|
||||
}),
|
||||
resolveDefaultThinkingLevel: (context) =>
|
||||
providerThinkingMocks.resolveProviderDefaultThinkingLevel({
|
||||
provider: context.provider,
|
||||
context,
|
||||
}),
|
||||
},
|
||||
});
|
||||
setActivePluginRegistry(registry);
|
||||
@@ -204,13 +186,19 @@ async function loadDiscordThinkAutocompleteModulesForTest() {
|
||||
|
||||
describe("discord native /think autocomplete", () => {
|
||||
beforeAll(async () => {
|
||||
providerThinkingMocks.resolveProviderBinaryThinking.mockReturnValue(undefined);
|
||||
providerThinkingMocks.resolveProviderDefaultThinkingLevel.mockReturnValue(undefined);
|
||||
providerThinkingMocks.resolveProviderThinkingProfile.mockReturnValue(undefined);
|
||||
providerThinkingMocks.resolveProviderXHighThinking.mockImplementation(({ provider, context }) =>
|
||||
provider === "openai" && ["gpt-5.4", "gpt-5.4-pro"].includes(context.modelId)
|
||||
? true
|
||||
: undefined,
|
||||
providerThinkingMocks.resolveProviderThinkingProfile.mockImplementation(
|
||||
({ provider, context }) =>
|
||||
provider === "openai" && ["gpt-5.4", "gpt-5.4-pro"].includes(context.modelId)
|
||||
? {
|
||||
levels: [
|
||||
{ id: "off" },
|
||||
{ id: "low" },
|
||||
{ id: "medium" },
|
||||
{ id: "high" },
|
||||
{ id: "xhigh" },
|
||||
],
|
||||
}
|
||||
: undefined,
|
||||
);
|
||||
buildModelsProviderDataMock.mockResolvedValue({
|
||||
byProvider: new Map<string, Set<string>>(),
|
||||
@@ -235,17 +223,20 @@ describe("discord native /think autocomplete", () => {
|
||||
ensureConfiguredBindingRouteReadyMock.mockResolvedValue({ ok: true });
|
||||
resolveConfiguredBindingRouteMock.mockReset();
|
||||
resolveConfiguredBindingRouteMock.mockReturnValue(createUnboundConfiguredRouteResult());
|
||||
providerThinkingMocks.resolveProviderBinaryThinking.mockReset();
|
||||
providerThinkingMocks.resolveProviderBinaryThinking.mockReturnValue(undefined);
|
||||
providerThinkingMocks.resolveProviderDefaultThinkingLevel.mockReset();
|
||||
providerThinkingMocks.resolveProviderDefaultThinkingLevel.mockReturnValue(undefined);
|
||||
providerThinkingMocks.resolveProviderThinkingProfile.mockReset();
|
||||
providerThinkingMocks.resolveProviderThinkingProfile.mockReturnValue(undefined);
|
||||
providerThinkingMocks.resolveProviderXHighThinking.mockReset();
|
||||
providerThinkingMocks.resolveProviderXHighThinking.mockImplementation(({ provider, context }) =>
|
||||
provider === "openai" && ["gpt-5.4", "gpt-5.4-pro"].includes(context.modelId)
|
||||
? true
|
||||
: undefined,
|
||||
providerThinkingMocks.resolveProviderThinkingProfile.mockImplementation(
|
||||
({ provider, context }) =>
|
||||
provider === "openai" && ["gpt-5.4", "gpt-5.4-pro"].includes(context.modelId)
|
||||
? {
|
||||
levels: [
|
||||
{ id: "off" },
|
||||
{ id: "low" },
|
||||
{ id: "medium" },
|
||||
{ id: "high" },
|
||||
{ id: "xhigh" },
|
||||
],
|
||||
}
|
||||
: undefined,
|
||||
);
|
||||
installProviderThinkingRegistryForTest();
|
||||
await saveSessionOverride({
|
||||
|
||||
@@ -26,9 +26,6 @@
|
||||
"contracts": {
|
||||
"webSearchProviders": ["exa"]
|
||||
},
|
||||
"configContracts": {
|
||||
"compatibilityRuntimePaths": ["tools.web.search.apiKey"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -112,7 +112,7 @@ function resolveExaConfig(searchConfig?: SearchConfigRecord): ExaConfig {
|
||||
|
||||
function resolveExaApiKey(exa?: ExaConfig): string | undefined {
|
||||
return (
|
||||
readConfiguredSecretString(exa?.apiKey, "tools.web.search.exa.apiKey") ??
|
||||
readConfiguredSecretString(exa?.apiKey, "plugins.entries.exa.config.webSearch.apiKey") ??
|
||||
readProviderEnvValue(["EXA_API_KEY"])
|
||||
);
|
||||
}
|
||||
@@ -438,7 +438,7 @@ function missingExaKeyPayload() {
|
||||
return {
|
||||
error: "missing_exa_api_key",
|
||||
message:
|
||||
"web_search (exa) needs an Exa API key. Set EXA_API_KEY in the Gateway environment, or configure tools.web.search.exa.apiKey.",
|
||||
"web_search (exa) needs an Exa API key. Set EXA_API_KEY in the Gateway environment, or configure plugins.entries.exa.config.webSearch.apiKey.",
|
||||
docs: "https://docs.openclaw.ai/tools/web",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -110,14 +110,6 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"channelEnvVars": {
|
||||
"feishu": [
|
||||
"FEISHU_APP_ID",
|
||||
"FEISHU_APP_SECRET",
|
||||
"FEISHU_VERIFICATION_TOKEN",
|
||||
"FEISHU_ENCRYPT_KEY"
|
||||
]
|
||||
},
|
||||
"skills": ["./skills"],
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
|
||||
@@ -34,6 +34,16 @@
|
||||
"setupEntry": "./setup-entry.ts",
|
||||
"channel": {
|
||||
"id": "feishu",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"FEISHU_APP_ID",
|
||||
"FEISHU_APP_SECRET",
|
||||
"FEISHU_VERIFICATION_TOKEN",
|
||||
"FEISHU_ENCRYPT_KEY"
|
||||
]
|
||||
}
|
||||
},
|
||||
"label": "Feishu",
|
||||
"selectionLabel": "Feishu/Lark (飞书)",
|
||||
"docsPath": "/channels/feishu",
|
||||
|
||||
@@ -38,9 +38,6 @@
|
||||
"webSearchProviders": ["firecrawl", "firecrawl-free"],
|
||||
"tools": ["firecrawl_search", "firecrawl_scrape"]
|
||||
},
|
||||
"configContracts": {
|
||||
"compatibilityRuntimePaths": ["tools.web.search.apiKey"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -10,18 +10,6 @@ const DEFAULT_FIRECRAWL_SCRAPE_TIMEOUT_SECONDS = 60;
|
||||
const DEFAULT_FIRECRAWL_MAX_AGE_MS = 172_800_000;
|
||||
const FIRECRAWL_API_KEY_ENV_VAR = "FIRECRAWL_API_KEY";
|
||||
|
||||
type WebSearchConfig = NonNullable<OpenClawConfig["tools"]>["web"] extends infer Web
|
||||
? Web extends { search?: infer Search }
|
||||
? Search
|
||||
: undefined
|
||||
: undefined;
|
||||
|
||||
type WebFetchConfig = NonNullable<OpenClawConfig["tools"]>["web"] extends infer Web
|
||||
? Web extends { fetch?: infer Fetch }
|
||||
? Fetch
|
||||
: undefined
|
||||
: undefined;
|
||||
|
||||
type FirecrawlSearchConfig =
|
||||
| {
|
||||
apiKey?: unknown;
|
||||
@@ -55,37 +43,13 @@ type FirecrawlFetchConfig =
|
||||
}
|
||||
| undefined;
|
||||
|
||||
function resolveSearchConfig(cfg?: OpenClawConfig): WebSearchConfig {
|
||||
const search = cfg?.tools?.web?.search;
|
||||
if (!search || typeof search !== "object") {
|
||||
return undefined;
|
||||
}
|
||||
return search;
|
||||
}
|
||||
|
||||
function resolveFetchConfig(cfg?: OpenClawConfig): WebFetchConfig {
|
||||
const fetch = cfg?.tools?.web?.fetch;
|
||||
if (!fetch || typeof fetch !== "object") {
|
||||
return undefined;
|
||||
}
|
||||
return fetch;
|
||||
}
|
||||
|
||||
function resolveFirecrawlSearchConfig(cfg?: OpenClawConfig): FirecrawlSearchConfig {
|
||||
const pluginConfig = cfg?.plugins?.entries?.firecrawl?.config as PluginEntryConfig;
|
||||
const pluginWebSearch = pluginConfig?.webSearch;
|
||||
if (pluginWebSearch && typeof pluginWebSearch === "object" && !Array.isArray(pluginWebSearch)) {
|
||||
return pluginWebSearch;
|
||||
}
|
||||
const search = resolveSearchConfig(cfg);
|
||||
if (!search || typeof search !== "object") {
|
||||
return undefined;
|
||||
}
|
||||
const firecrawl = "firecrawl" in search ? search.firecrawl : undefined;
|
||||
if (!firecrawl || typeof firecrawl !== "object") {
|
||||
return undefined;
|
||||
}
|
||||
return firecrawl as FirecrawlSearchConfig;
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function resolveFirecrawlFetchConfig(cfg?: OpenClawConfig): FirecrawlFetchConfig {
|
||||
@@ -94,15 +58,7 @@ function resolveFirecrawlFetchConfig(cfg?: OpenClawConfig): FirecrawlFetchConfig
|
||||
if (pluginWebFetch && typeof pluginWebFetch === "object" && !Array.isArray(pluginWebFetch)) {
|
||||
return pluginWebFetch;
|
||||
}
|
||||
const fetch = resolveFetchConfig(cfg);
|
||||
if (!fetch || typeof fetch !== "object") {
|
||||
return undefined;
|
||||
}
|
||||
const firecrawl = "firecrawl" in fetch ? fetch.firecrawl : undefined;
|
||||
if (!firecrawl || typeof firecrawl !== "object") {
|
||||
return undefined;
|
||||
}
|
||||
return firecrawl as FirecrawlFetchConfig;
|
||||
return undefined;
|
||||
}
|
||||
|
||||
type ConfiguredSecretResolution =
|
||||
@@ -151,7 +107,6 @@ function resolveConfiguredSecret(
|
||||
export function resolveFirecrawlApiKey(cfg?: OpenClawConfig): string | undefined {
|
||||
const pluginConfig = cfg?.plugins?.entries?.firecrawl?.config as PluginEntryConfig;
|
||||
const search = resolveFirecrawlSearchConfig(cfg);
|
||||
const fetch = resolveFirecrawlFetchConfig(cfg);
|
||||
const configuredCandidates: Array<{ value: unknown; path: string }> = [
|
||||
{
|
||||
value: pluginConfig?.webFetch?.apiKey,
|
||||
@@ -161,14 +116,6 @@ export function resolveFirecrawlApiKey(cfg?: OpenClawConfig): string | undefined
|
||||
value: search?.apiKey,
|
||||
path: "plugins.entries.firecrawl.config.webSearch.apiKey",
|
||||
},
|
||||
{
|
||||
value: search?.apiKey,
|
||||
path: "tools.web.search.firecrawl.apiKey",
|
||||
},
|
||||
{
|
||||
value: fetch?.apiKey,
|
||||
path: "tools.web.fetch.firecrawl.apiKey",
|
||||
},
|
||||
];
|
||||
let blockedConfiguredSecret = false;
|
||||
for (const candidate of configuredCandidates) {
|
||||
|
||||
@@ -23,10 +23,7 @@ export const FIRECRAWL_WEB_FETCH_PROVIDER_SHARED = {
|
||||
docsUrl: "https://docs.firecrawl.dev",
|
||||
autoDetectOrder: 50,
|
||||
credentialPath: "plugins.entries.firecrawl.config.webFetch.apiKey",
|
||||
inactiveSecretPaths: [
|
||||
"plugins.entries.firecrawl.config.webFetch.apiKey",
|
||||
"tools.web.fetch.firecrawl.apiKey",
|
||||
],
|
||||
inactiveSecretPaths: ["plugins.entries.firecrawl.config.webFetch.apiKey"],
|
||||
getCredentialValue: (fetchConfig) => {
|
||||
if (!fetchConfig || typeof fetchConfig !== "object") {
|
||||
return undefined;
|
||||
|
||||
@@ -756,9 +756,6 @@
|
||||
"nativeDocumentInputs": ["pdf"]
|
||||
}
|
||||
},
|
||||
"configContracts": {
|
||||
"compatibilityRuntimePaths": ["tools.web.search.apiKey"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -172,7 +172,7 @@ function resolveGeminiTimeRangeFilter(
|
||||
|
||||
function resolveGeminiRuntimeApiKey(gemini?: GeminiConfig): string | undefined {
|
||||
return (
|
||||
readConfiguredSecretString(gemini?.apiKey, "tools.web.search.gemini.apiKey") ??
|
||||
readConfiguredSecretString(gemini?.apiKey, "plugins.entries.google.config.webSearch.apiKey") ??
|
||||
readProviderEnvValue(["GEMINI_API_KEY"]) ??
|
||||
readConfiguredSecretString(gemini?.providerApiKey, "models.providers.google.apiKey")
|
||||
);
|
||||
|
||||
@@ -7,9 +7,6 @@
|
||||
"onStartup": false
|
||||
},
|
||||
"channels": ["googlechat"],
|
||||
"channelEnvVars": {
|
||||
"googlechat": ["GOOGLE_CHAT_SERVICE_ACCOUNT", "GOOGLE_CHAT_SERVICE_ACCOUNT_FILE"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -30,6 +30,14 @@
|
||||
"setupEntry": "./setup-entry.ts",
|
||||
"channel": {
|
||||
"id": "googlechat",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"GOOGLE_CHAT_SERVICE_ACCOUNT",
|
||||
"GOOGLE_CHAT_SERVICE_ACCOUNT_FILE"
|
||||
]
|
||||
}
|
||||
},
|
||||
"approvalFlags": ["native"],
|
||||
"label": "Google Chat",
|
||||
"selectionLabel": "Google Chat (Chat API)",
|
||||
|
||||
@@ -77,7 +77,7 @@ export function createIMessagePluginBase(params: {
|
||||
meta: {
|
||||
...getChatChannelMeta(IMESSAGE_CHANNEL),
|
||||
aliases: ["imsg"],
|
||||
showConfigured: false,
|
||||
exposure: { configured: false },
|
||||
},
|
||||
setupWizard: params.setupWizard,
|
||||
capabilities: {
|
||||
|
||||
@@ -4,20 +4,6 @@
|
||||
"onStartup": false
|
||||
},
|
||||
"channels": ["irc"],
|
||||
"channelEnvVars": {
|
||||
"irc": [
|
||||
"IRC_HOST",
|
||||
"IRC_PORT",
|
||||
"IRC_TLS",
|
||||
"IRC_NICK",
|
||||
"IRC_USERNAME",
|
||||
"IRC_REALNAME",
|
||||
"IRC_PASSWORD",
|
||||
"IRC_CHANNELS",
|
||||
"IRC_NICKSERV_PASSWORD",
|
||||
"IRC_NICKSERV_REGISTER_EMAIL"
|
||||
]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -20,6 +20,14 @@
|
||||
"setupEntry": "./setup-entry.ts",
|
||||
"channel": {
|
||||
"id": "irc",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"allOf": [
|
||||
"IRC_HOST",
|
||||
"IRC_NICK"
|
||||
]
|
||||
}
|
||||
},
|
||||
"label": "IRC",
|
||||
"selectionLabel": "IRC (Server + Nick)",
|
||||
"detailLabel": "IRC",
|
||||
@@ -29,15 +37,7 @@
|
||||
"aliases": [
|
||||
"internet-relay-chat"
|
||||
],
|
||||
"systemImage": "network",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"allOf": [
|
||||
"IRC_HOST",
|
||||
"IRC_NICK"
|
||||
]
|
||||
}
|
||||
}
|
||||
"systemImage": "network"
|
||||
},
|
||||
"compat": {
|
||||
"pluginApi": ">=2026.7.2"
|
||||
|
||||
@@ -7,9 +7,6 @@
|
||||
"onStartup": false
|
||||
},
|
||||
"channels": ["line"],
|
||||
"channelEnvVars": {
|
||||
"line": ["LINE_CHANNEL_ACCESS_TOKEN", "LINE_CHANNEL_SECRET"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -30,6 +30,14 @@
|
||||
"setupEntry": "./setup-entry.ts",
|
||||
"channel": {
|
||||
"id": "line",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"LINE_CHANNEL_ACCESS_TOKEN",
|
||||
"LINE_CHANNEL_SECRET"
|
||||
]
|
||||
}
|
||||
},
|
||||
"label": "LINE",
|
||||
"selectionLabel": "LINE (Messaging API)",
|
||||
"detailLabel": "LINE Bot",
|
||||
|
||||
@@ -9,20 +9,6 @@
|
||||
"onCommands": ["matrix"]
|
||||
},
|
||||
"channels": ["matrix"],
|
||||
"channelEnvVars": {
|
||||
"matrix": [
|
||||
"MATRIX_HOMESERVER",
|
||||
"MATRIX_USER_ID",
|
||||
"MATRIX_ACCESS_TOKEN",
|
||||
"MATRIX_PASSWORD",
|
||||
"MATRIX_DEVICE_ID",
|
||||
"MATRIX_DEVICE_NAME",
|
||||
"MATRIX_OPS_HOMESERVER",
|
||||
"MATRIX_OPS_ACCESS_TOKEN",
|
||||
"MATRIX_OPS_DEVICE_ID",
|
||||
"MATRIX_OPS_DEVICE_NAME"
|
||||
]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -39,6 +39,22 @@
|
||||
},
|
||||
"channel": {
|
||||
"id": "matrix",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"MATRIX_HOMESERVER",
|
||||
"MATRIX_USER_ID",
|
||||
"MATRIX_ACCESS_TOKEN",
|
||||
"MATRIX_PASSWORD",
|
||||
"MATRIX_DEVICE_ID",
|
||||
"MATRIX_DEVICE_NAME",
|
||||
"MATRIX_OPS_HOMESERVER",
|
||||
"MATRIX_OPS_ACCESS_TOKEN",
|
||||
"MATRIX_OPS_DEVICE_ID",
|
||||
"MATRIX_OPS_DEVICE_NAME"
|
||||
]
|
||||
}
|
||||
},
|
||||
"approvalFlags": ["native"],
|
||||
"label": "Matrix",
|
||||
"selectionLabel": "Matrix (plugin)",
|
||||
|
||||
@@ -23,7 +23,7 @@ function normalizeLowercaseStringOrEmpty(value) {
|
||||
|
||||
function hasTrustedOpenClawRootIndicator(packageRoot, packageJson) {
|
||||
const packageExports = packageJson?.exports ?? {};
|
||||
if (!Object.hasOwn(packageExports, "./plugin-sdk")) {
|
||||
if (!Object.hasOwn(packageExports, "./plugin-sdk/core")) {
|
||||
return false;
|
||||
}
|
||||
const hasCliEntryExport = Object.hasOwn(packageExports, "./cli-entry");
|
||||
|
||||
@@ -40,7 +40,7 @@ function writeOpenClawPackageFixture(fixtureRoot: string) {
|
||||
name: "openclaw",
|
||||
type: "module",
|
||||
exports: {
|
||||
"./plugin-sdk": "./dist/plugin-sdk/index.js",
|
||||
"./plugin-sdk/core": "./dist/plugin-sdk/core.js",
|
||||
},
|
||||
},
|
||||
null,
|
||||
@@ -48,7 +48,7 @@ function writeOpenClawPackageFixture(fixtureRoot: string) {
|
||||
) + "\n",
|
||||
);
|
||||
writeFixtureFile(fixtureRoot, "openclaw.mjs", "export {};\n");
|
||||
writeFixtureFile(fixtureRoot, "dist/plugin-sdk/index.js", "export {};\n");
|
||||
writeFixtureFile(fixtureRoot, "dist/plugin-sdk/core.js", "export {};\n");
|
||||
}
|
||||
|
||||
function writeSourceRuntimeWrapperFixture(
|
||||
|
||||
@@ -5,9 +5,6 @@
|
||||
"onStartup": false
|
||||
},
|
||||
"channels": ["mattermost"],
|
||||
"channelEnvVars": {
|
||||
"mattermost": ["MATTERMOST_BOT_TOKEN", "MATTERMOST_URL"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -30,6 +30,14 @@
|
||||
"setupEntry": "./setup-entry.ts",
|
||||
"channel": {
|
||||
"id": "mattermost",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"allOf": [
|
||||
"MATTERMOST_BOT_TOKEN",
|
||||
"MATTERMOST_URL"
|
||||
]
|
||||
}
|
||||
},
|
||||
"label": "Mattermost",
|
||||
"selectionLabel": "Mattermost (plugin)",
|
||||
"docsPath": "/channels/mattermost",
|
||||
|
||||
@@ -147,10 +147,6 @@ function expectHookRegistered(on: ReturnType<typeof vi.fn>, hookName: string) {
|
||||
expect(hookHandler(on, hookName)).toBeTypeOf("function");
|
||||
}
|
||||
|
||||
function expectHookNotRegistered(on: ReturnType<typeof vi.fn>, hookName: string) {
|
||||
expect(on.mock.calls.map(([name]) => name)).not.toContain(hookName);
|
||||
}
|
||||
|
||||
function expectToolExecute(tool: unknown, name?: string) {
|
||||
const record = tool as { execute?: unknown; name?: unknown };
|
||||
if (name) {
|
||||
@@ -409,7 +405,6 @@ describe("memory plugin e2e", () => {
|
||||
registerTestPlugin(memoryPlugin, mockApi);
|
||||
|
||||
expectHookRegistered(on, "before_prompt_build");
|
||||
expectHookNotRegistered(on, "before_agent_start");
|
||||
});
|
||||
|
||||
test("registers memory public artifact provider for memory-wiki bridge parity", async () => {
|
||||
|
||||
@@ -97,9 +97,6 @@
|
||||
"webSearchProviders": ["minimax"],
|
||||
"usageProviders": ["minimax"]
|
||||
},
|
||||
"configContracts": {
|
||||
"compatibilityRuntimePaths": ["tools.web.search.apiKey"]
|
||||
},
|
||||
"mediaUnderstandingProviderMetadata": {
|
||||
"minimax": {
|
||||
"capabilities": ["image"],
|
||||
|
||||
@@ -57,8 +57,10 @@ type MiniMaxSearchResponse = {
|
||||
|
||||
function resolveMiniMaxApiKey(searchConfig?: SearchConfigRecord): string | undefined {
|
||||
return (
|
||||
readConfiguredSecretString(searchConfig?.apiKey, "tools.web.search.apiKey") ??
|
||||
readProviderEnvValue([...MINIMAX_TOKEN_PLAN_ENV_VARS, "MINIMAX_API_KEY"])
|
||||
readConfiguredSecretString(
|
||||
searchConfig?.apiKey,
|
||||
"plugins.entries.minimax.config.webSearch.apiKey",
|
||||
) ?? readProviderEnvValue([...MINIMAX_TOKEN_PLAN_ENV_VARS, "MINIMAX_API_KEY"])
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -207,9 +207,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"configContracts": {
|
||||
"compatibilityRuntimePaths": ["tools.web.search.apiKey"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -98,7 +98,7 @@ function resolveKimiConfig(searchConfig?: SearchConfigRecord): KimiConfig {
|
||||
|
||||
function resolveKimiApiKey(kimi?: KimiConfig): string | undefined {
|
||||
return (
|
||||
readConfiguredSecretString(kimi?.apiKey, "tools.web.search.kimi.apiKey") ??
|
||||
readConfiguredSecretString(kimi?.apiKey, "plugins.entries.moonshot.config.webSearch.apiKey") ??
|
||||
readProviderEnvValue(["KIMI_API_KEY", "MOONSHOT_API_KEY"])
|
||||
);
|
||||
}
|
||||
@@ -358,7 +358,7 @@ export async function executeKimiWebSearchProviderTool(
|
||||
return {
|
||||
error: "missing_kimi_api_key",
|
||||
message:
|
||||
"web_search (kimi) needs a Moonshot API key. Set KIMI_API_KEY or MOONSHOT_API_KEY in the Gateway environment, or configure tools.web.search.kimi.apiKey. If you do not want to configure a search API key, use web_fetch for a specific URL or the browser tool for interactive pages.",
|
||||
"web_search (kimi) needs a Moonshot API key. Set KIMI_API_KEY or MOONSHOT_API_KEY in the Gateway environment, or configure plugins.entries.moonshot.config.webSearch.apiKey. If you do not want to configure a search API key, use web_fetch for a specific URL or the browser tool for interactive pages.",
|
||||
docs: "https://docs.openclaw.ai/tools/web",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -6,9 +6,6 @@
|
||||
"onStartup": false
|
||||
},
|
||||
"channels": ["msteams"],
|
||||
"channelEnvVars": {
|
||||
"msteams": ["MSTEAMS_APP_ID", "MSTEAMS_APP_PASSWORD", "MSTEAMS_TENANT_ID"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -36,6 +36,15 @@
|
||||
"setupEntry": "./setup-entry.ts",
|
||||
"channel": {
|
||||
"id": "msteams",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"MSTEAMS_APP_ID",
|
||||
"MSTEAMS_APP_PASSWORD",
|
||||
"MSTEAMS_TENANT_ID"
|
||||
]
|
||||
}
|
||||
},
|
||||
"label": "Microsoft Teams",
|
||||
"selectionLabel": "Microsoft Teams (Teams SDK)",
|
||||
"docsPath": "/channels/msteams",
|
||||
|
||||
@@ -7,9 +7,6 @@
|
||||
"onStartup": false
|
||||
},
|
||||
"channels": ["nextcloud-talk"],
|
||||
"channelEnvVars": {
|
||||
"nextcloud-talk": ["NEXTCLOUD_TALK_BOT_SECRET", "NEXTCLOUD_TALK_API_PASSWORD"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -26,6 +26,14 @@
|
||||
"setupEntry": "./setup-entry.ts",
|
||||
"channel": {
|
||||
"id": "nextcloud-talk",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"NEXTCLOUD_TALK_BOT_SECRET",
|
||||
"NEXTCLOUD_TALK_API_PASSWORD"
|
||||
]
|
||||
}
|
||||
},
|
||||
"label": "Nextcloud Talk",
|
||||
"selectionLabel": "Nextcloud Talk (self-hosted)",
|
||||
"docsPath": "/channels/nextcloud-talk",
|
||||
|
||||
@@ -6,9 +6,6 @@
|
||||
"onStartup": false
|
||||
},
|
||||
"channels": ["nostr"],
|
||||
"channelEnvVars": {
|
||||
"nostr": ["NOSTR_PRIVATE_KEY"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -30,6 +30,13 @@
|
||||
"setupEntry": "./setup-entry.ts",
|
||||
"channel": {
|
||||
"id": "nostr",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"NOSTR_PRIVATE_KEY"
|
||||
]
|
||||
}
|
||||
},
|
||||
"label": "Nostr",
|
||||
"selectionLabel": "Nostr (NIP-04 DMs)",
|
||||
"docsPath": "/channels/nostr",
|
||||
|
||||
@@ -5,10 +5,7 @@ import type {
|
||||
ModelDefinitionConfig,
|
||||
} from "openclaw/plugin-sdk/provider-model-shared";
|
||||
|
||||
/**
|
||||
* Provider config input type — partial config without required `models`.
|
||||
* Replaces the deprecated `openclaw/plugin-sdk/config-types` import.
|
||||
*/
|
||||
/** Provider config input type — partial config without required `models`. */
|
||||
type OllamaProviderConfigInput = Omit<Partial<ModelProviderConfig>, "models"> & {
|
||||
models?: ModelDefinitionConfig[];
|
||||
};
|
||||
|
||||
@@ -4,10 +4,7 @@ import type {
|
||||
ModelDefinitionConfig,
|
||||
} from "openclaw/plugin-sdk/provider-model-shared";
|
||||
|
||||
/**
|
||||
* Provider config input type — partial config without required `models`.
|
||||
* Replaces the deprecated `openclaw/plugin-sdk/config-types` import.
|
||||
*/
|
||||
/** Provider config input type — partial config without required `models`. */
|
||||
type OllamaProviderConfigInput = Omit<Partial<ModelProviderConfig>, "models"> & {
|
||||
models?: ModelDefinitionConfig[];
|
||||
};
|
||||
|
||||
@@ -558,12 +558,6 @@ describe("openrouter provider hooks", () => {
|
||||
modelId: "openrouter/deepseek/deepseek-v4-flash",
|
||||
} as never)?.defaultLevel,
|
||||
).toBe("high");
|
||||
expect(
|
||||
provider.supportsXHighThinking?.({
|
||||
provider: "openrouter",
|
||||
modelId: "openrouter/deepseek/deepseek-v4-pro",
|
||||
} as never),
|
||||
).toBe(true);
|
||||
expect(
|
||||
provider.resolveThinkingProfile?.({
|
||||
provider: "openrouter",
|
||||
|
||||
@@ -31,10 +31,7 @@ import {
|
||||
import { resolveOpenRouterExtraParamsForTransport } from "./provider-routing.js";
|
||||
import { buildOpenRouterSpeechProvider } from "./speech-provider.js";
|
||||
import { wrapOpenRouterProviderStream } from "./stream.js";
|
||||
import {
|
||||
resolveOpenRouterThinkingProfile,
|
||||
supportsOpenRouterXHighThinking,
|
||||
} from "./thinking-policy.js";
|
||||
import { resolveOpenRouterThinkingProfile } from "./thinking-policy.js";
|
||||
import { fetchOpenRouterUsage } from "./usage.js";
|
||||
import {
|
||||
buildOpenRouterVideoGenerationProvider,
|
||||
@@ -358,7 +355,6 @@ export default definePluginEntry({
|
||||
...passthroughGeminiReplayHooks,
|
||||
buildReplayPolicy: buildOpenRouterReplayPolicy,
|
||||
resolveReasoningOutputMode: () => "native",
|
||||
supportsXHighThinking: ({ modelId }) => supportsOpenRouterXHighThinking(modelId),
|
||||
resolveThinkingProfile: ({ modelId }) => resolveOpenRouterThinkingProfile(modelId),
|
||||
isModernModelRef: () => true,
|
||||
resolveSystemPromptContribution: resolveOpenRouterFusionPromptContribution,
|
||||
|
||||
@@ -22,10 +22,6 @@ const OPENROUTER_DEEPSEEK_V4_THINKING_PROFILE = {
|
||||
defaultLevel: "high",
|
||||
} satisfies ProviderThinkingProfile;
|
||||
|
||||
export function supportsOpenRouterXHighThinking(modelId: string): boolean {
|
||||
return isOpenRouterDeepSeekV4ModelId(modelId);
|
||||
}
|
||||
|
||||
export function resolveOpenRouterThinkingProfile(
|
||||
modelId: string,
|
||||
): ProviderThinkingProfile | undefined {
|
||||
|
||||
@@ -26,9 +26,6 @@
|
||||
"contracts": {
|
||||
"webSearchProviders": ["parallel", "parallel-free"]
|
||||
},
|
||||
"configContracts": {
|
||||
"compatibilityRuntimePaths": ["tools.web.search.apiKey"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -62,8 +62,10 @@ function resolveParallelConfig(searchConfig?: SearchConfigRecord): ParallelConfi
|
||||
|
||||
function resolveParallelApiKey(parallel?: ParallelConfig): string | undefined {
|
||||
return (
|
||||
readConfiguredSecretString(parallel?.apiKey, "tools.web.search.parallel.apiKey") ??
|
||||
readProviderEnvValue(["PARALLEL_API_KEY"])
|
||||
readConfiguredSecretString(
|
||||
parallel?.apiKey,
|
||||
"plugins.entries.parallel.config.webSearch.apiKey",
|
||||
) ?? readProviderEnvValue(["PARALLEL_API_KEY"])
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,9 +31,6 @@
|
||||
"contracts": {
|
||||
"webSearchProviders": ["perplexity"]
|
||||
},
|
||||
"configContracts": {
|
||||
"compatibilityRuntimePaths": ["tools.web.search.apiKey"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -81,7 +81,7 @@ function resolvePerplexityApiKey(perplexity?: PerplexityConfig): {
|
||||
} {
|
||||
const fromConfig = readConfiguredSecretString(
|
||||
perplexity?.apiKey,
|
||||
"tools.web.search.perplexity.apiKey",
|
||||
"plugins.entries.perplexity.config.webSearch.apiKey",
|
||||
);
|
||||
if (fromConfig) {
|
||||
return { apiKey: fromConfig, source: "config" };
|
||||
@@ -318,7 +318,7 @@ export async function executePerplexitySearch(
|
||||
return {
|
||||
error: "missing_perplexity_api_key",
|
||||
message:
|
||||
"web_search (perplexity) needs an API key. Set PERPLEXITY_API_KEY or OPENROUTER_API_KEY in the Gateway environment, or configure tools.web.search.perplexity.apiKey. If you do not want to configure a search API key, use web_fetch for a specific URL or the browser tool for interactive pages.",
|
||||
"web_search (perplexity) needs an API key. Set PERPLEXITY_API_KEY or OPENROUTER_API_KEY in the Gateway environment, or configure plugins.entries.perplexity.config.webSearch.apiKey. If you do not want to configure a search API key, use web_fetch for a specific URL or the browser tool for interactive pages.",
|
||||
docs: "https://docs.openclaw.ai/tools/web",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ describe("perplexity web search provider", () => {
|
||||
await expect(tool.execute({ query: "OpenClaw docs" })).resolves.toEqual({
|
||||
error: "missing_perplexity_api_key",
|
||||
message:
|
||||
"web_search (perplexity) needs an API key. Set PERPLEXITY_API_KEY or OPENROUTER_API_KEY in the Gateway environment, or configure tools.web.search.perplexity.apiKey. If you do not want to configure a search API key, use web_fetch for a specific URL or the browser tool for interactive pages.",
|
||||
"web_search (perplexity) needs an API key. Set PERPLEXITY_API_KEY or OPENROUTER_API_KEY in the Gateway environment, or configure plugins.entries.perplexity.config.webSearch.apiKey. If you do not want to configure a search API key, use web_fetch for a specific URL or the browser tool for interactive pages.",
|
||||
docs: "https://docs.openclaw.ai/tools/web",
|
||||
});
|
||||
},
|
||||
|
||||
@@ -6,8 +6,14 @@
|
||||
"onStartup": false
|
||||
},
|
||||
"enabledByDefault": true,
|
||||
"providerAuthEnvVars": {
|
||||
"pixverse": ["PIXVERSE_API_KEY"]
|
||||
"setup": {
|
||||
"providers": [
|
||||
{
|
||||
"id": "pixverse",
|
||||
"authMethods": ["api-key"],
|
||||
"envVars": ["PIXVERSE_API_KEY"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"providerAuthChoices": [
|
||||
{
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
"contracts": {
|
||||
"tools": ["qqbot_channel_api", "qqbot_remind"]
|
||||
},
|
||||
"channelEnvVars": {
|
||||
"qqbot": ["QQBOT_APP_ID", "QQBOT_CLIENT_SECRET"]
|
||||
},
|
||||
"enabledByDefault": true,
|
||||
"skills": ["./skills"],
|
||||
"configSchema": {
|
||||
|
||||
@@ -37,6 +37,14 @@
|
||||
"setupEntry": "./setup-entry.ts",
|
||||
"channel": {
|
||||
"id": "qqbot",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"QQBOT_APP_ID",
|
||||
"QQBOT_CLIENT_SECRET"
|
||||
]
|
||||
}
|
||||
},
|
||||
"approvalFlags": ["native"],
|
||||
"label": "QQ Bot",
|
||||
"selectionLabel": "QQ Bot (Official API)",
|
||||
|
||||
@@ -22,5 +22,5 @@ export { getQQBotRuntime, setQQBotRuntime };
|
||||
|
||||
/** Type-narrowed getter for engine/ modules that need GatewayPluginRuntime. */
|
||||
export function getQQBotRuntimeForEngine(): GatewayPluginRuntime {
|
||||
return getQQBotRuntime() as GatewayPluginRuntime;
|
||||
return getQQBotRuntime() as unknown as GatewayPluginRuntime;
|
||||
}
|
||||
|
||||
@@ -34,9 +34,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"channelEnvVars": {
|
||||
"raft": ["RAFT_PROFILE"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -40,6 +40,13 @@
|
||||
},
|
||||
"channel": {
|
||||
"id": "raft",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"RAFT_PROFILE"
|
||||
]
|
||||
}
|
||||
},
|
||||
"label": "Raft",
|
||||
"selectionLabel": "Raft (CLI wake bridge)",
|
||||
"docsPath": "/channels/raft",
|
||||
|
||||
@@ -17,9 +17,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"channelEnvVars": {
|
||||
"slack": ["SLACK_BOT_TOKEN", "SLACK_APP_TOKEN", "SLACK_USER_TOKEN"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -35,6 +35,15 @@
|
||||
"setupEntry": "./setup-entry.ts",
|
||||
"channel": {
|
||||
"id": "slack",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"SLACK_BOT_TOKEN",
|
||||
"SLACK_APP_TOKEN",
|
||||
"SLACK_USER_TOKEN"
|
||||
]
|
||||
}
|
||||
},
|
||||
"approvalFlags": ["native"],
|
||||
"label": "Slack",
|
||||
"selectionLabel": "Slack (Socket Mode)",
|
||||
@@ -47,15 +56,6 @@
|
||||
"commands": {
|
||||
"nativeCommandsAutoEnabled": false,
|
||||
"nativeSkillsAutoEnabled": false
|
||||
},
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"SLACK_APP_TOKEN",
|
||||
"SLACK_BOT_TOKEN",
|
||||
"SLACK_USER_TOKEN"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"install": {
|
||||
|
||||
@@ -6,18 +6,6 @@
|
||||
"onStartup": false
|
||||
},
|
||||
"channels": ["sms"],
|
||||
"channelEnvVars": {
|
||||
"sms": [
|
||||
"TWILIO_ACCOUNT_SID",
|
||||
"TWILIO_AUTH_TOKEN",
|
||||
"TWILIO_PHONE_NUMBER",
|
||||
"TWILIO_SMS_FROM",
|
||||
"TWILIO_MESSAGING_SERVICE_SID",
|
||||
"SMS_PUBLIC_WEBHOOK_URL",
|
||||
"SMS_WEBHOOK_PATH",
|
||||
"SMS_ALLOWED_USERS"
|
||||
]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -19,6 +19,20 @@
|
||||
],
|
||||
"channel": {
|
||||
"id": "sms",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"TWILIO_ACCOUNT_SID",
|
||||
"TWILIO_AUTH_TOKEN",
|
||||
"TWILIO_PHONE_NUMBER",
|
||||
"TWILIO_SMS_FROM",
|
||||
"TWILIO_MESSAGING_SERVICE_SID",
|
||||
"SMS_PUBLIC_WEBHOOK_URL",
|
||||
"SMS_WEBHOOK_PATH",
|
||||
"SMS_ALLOWED_USERS"
|
||||
]
|
||||
}
|
||||
},
|
||||
"label": "SMS",
|
||||
"selectionLabel": "SMS (Twilio)",
|
||||
"detailLabel": "Twilio SMS",
|
||||
|
||||
@@ -7,16 +7,6 @@
|
||||
"onStartup": false
|
||||
},
|
||||
"channels": ["synology-chat"],
|
||||
"channelEnvVars": {
|
||||
"synology-chat": [
|
||||
"SYNOLOGY_CHAT_TOKEN",
|
||||
"SYNOLOGY_CHAT_INCOMING_URL",
|
||||
"SYNOLOGY_NAS_HOST",
|
||||
"SYNOLOGY_ALLOWED_USER_IDS",
|
||||
"SYNOLOGY_RATE_LIMIT",
|
||||
"OPENCLAW_BOT_NAME"
|
||||
]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -17,6 +17,18 @@
|
||||
"setupEntry": "./setup-entry.ts",
|
||||
"channel": {
|
||||
"id": "synology-chat",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"SYNOLOGY_CHAT_TOKEN",
|
||||
"SYNOLOGY_CHAT_INCOMING_URL",
|
||||
"SYNOLOGY_NAS_HOST",
|
||||
"SYNOLOGY_ALLOWED_USER_IDS",
|
||||
"SYNOLOGY_RATE_LIMIT",
|
||||
"OPENCLAW_BOT_NAME"
|
||||
]
|
||||
}
|
||||
},
|
||||
"label": "Synology Chat",
|
||||
"selectionLabel": "Synology Chat (Webhook)",
|
||||
"docsPath": "/channels/synology-chat",
|
||||
|
||||
@@ -28,9 +28,6 @@
|
||||
"webSearchProviders": ["tavily"],
|
||||
"tools": ["tavily_search", "tavily_extract"]
|
||||
},
|
||||
"configContracts": {
|
||||
"compatibilityRuntimePaths": ["tools.web.search.apiKey"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -5,9 +5,6 @@
|
||||
"onStartup": false
|
||||
},
|
||||
"channels": ["telegram"],
|
||||
"channelEnvVars": {
|
||||
"telegram": ["TELEGRAM_BOT_TOKEN"]
|
||||
},
|
||||
"configSchema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
@@ -25,6 +25,13 @@
|
||||
},
|
||||
"channel": {
|
||||
"id": "telegram",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"TELEGRAM_BOT_TOKEN"
|
||||
]
|
||||
}
|
||||
},
|
||||
"approvalFlags": ["native"],
|
||||
"label": "Telegram",
|
||||
"selectionLabel": "Telegram (Bot API)",
|
||||
@@ -42,13 +49,6 @@
|
||||
"commands": {
|
||||
"nativeCommandsAutoEnabled": true,
|
||||
"nativeSkillsAutoEnabled": true
|
||||
},
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"allOf": [
|
||||
"TELEGRAM_BOT_TOKEN"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user