mirror of
https://github.com/openclaw/openclaw.git
synced 2026-10-03 17:53:39 +00:00
* test(gateway): await yielded orchestrator cleanup Wait for the existing registry cleanup publication instead of racing real SQLite worker completion against a two-second polling window. Reuse the plugin-subagent observer and bind the new waits to the test abort signal so timeouts release their subscriptions. Keep yielded follow-up dispatch on real timers so the acknowledgement helper cannot prematurely run the registry sweeper against mocked run liveness. Preserve all requester lineage, announcement, delivery, cleanup, and predecessor lifecycle assertions. (cherry picked from commit 0591abe71e703b7cf7c69a42cd8b93287d9fe8d9) * fix(test): stop resume registry sweeper before gateway teardown The resume Gateway fixture left its subagent registry sweeper scheduled across files. A later tick used the retired module generation to open a shared-state worker against the next fixture's state directory. The worker registered with the old database lifecycle, escaped current teardown, and rejected the recreated SQLite pathname. Reset the fixture-owned registry without persistence before closing the Gateway so its timers stop before database retirement. Validation: the six-file same-worker driver reproduced the pathname error before the fix (270.19s instrumented), then passed all 49 tests (215.72s). The delete-state-lifecycle file passed all 10 tests alone (102.65s wall). Targeted oxfmt, oxlint, git diff --check, and independent review passed. All diagnostic instrumentation was removed. (cherry picked from commit 613b3f8818d21d0c0d65333b29aabce11dd5afe9) * test: settle reply recovery before deleting fixtures The aborted-restart fixture could delete its store while asynchronous main-session recovery-owner release was still preparing a write. Tracing reproduced that release recreating/registering the prior store during the following onAdopted test, invalidating the shared registry generation. Join reply successor-admission barriers and close each fixture database root before deleting its directory or resetting the reply registry. Extract the fixture owner to keep the existing large test file from growing. Re-enable the adopted-claim cancellation test. Production registry guards and retry contracts are unchanged. Validation with OPENCLAW_E2E_SKIP_BUILD=1 pnpm test:e2e:gateway against src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts: - Original file: 220 passed, 1 registry failure, 1 skipped; 358.38s Vitest. - Original isolated adoption case repeated 20 times: passed; 170.95s Vitest. - Repaired aborted-restart/cancellation/adoption sequence: 3 clean runs, 3 tests each; CLI wall 225.68s, 190.48s, 99.70s. - Repaired full file: 221 passed, 1 different steering timeout; 528.47s Vitest. Remaining failure: keeps the replacement source when retired admission completes, first source admission did not persist (existing 5s guard). Focused replay passed in 151.18s Vitest; this does not establish a fix for that timeout. No timeout was changed. - Source test types, scoped oxlint, formatting, and independent review passed. Broad check:changed guards passed through the core graph boundary; stopped before its duplicate messaging type pass. pnpm tsgo:test:src passed that graph plus the remaining source test graphs. The full original CI shard and Telegram case were not replayed within the requested 35-minute investigation limit. (cherry picked from commit0b679e62f6) * fix(release): retire the 2026.9.7 live-shard waiver before main moves to 2026.9.7 RELEASE_WAIVED_LIVE_FILES (28597852) keyed on package version 2026.9.7 dropped three live files whose only case was skipped on the release branch. Main keeps those cases enabled, so once the closeout sets main to 2026.9.7 the adapter would silently stop running them. Refs #161083 #161084. * chore(release): record the shipped 2026.9.7 changelog on main CHANGELOG/2026.9.7.md, its contribution record, the index entry, the finalized Unreleased section, and the Matrix plugin changelog, byte-identical to the 2026.9.7 release SHAc074824a. * chore(release): set main to the shipped 2026.9.7 version and record its update compatibility Root version 2026.9.7 with pnpm release:prep version alignment, the macOS Info.plist version, and the verified npm tarball (sha512-/8N2Ln…RQwRWA==) recorded in the update compatibility inventory. * test(gateway): move yielded orchestrator follow-up cases into their own module The 0591abe7 forward-port grew agent.sessions-and-models.test-utils.ts past its line-cap ratchet. The yielded-orchestrator follow-up matrix is a self-contained case set, so it moves unchanged into agent.yielded-orchestrator.test-utils.ts, still loaded by agent.test.ts in the same module graph.
33 lines
38 KiB
JSON
33 lines
38 KiB
JSON
{
|
||
"entries": [
|
||
{"name":"@agentmail/agentmail","description":"Official AgentMail email channel and CLI-backed skill.","source":"external","kind":"channel","openclaw":{"plugin":{"id":"agentmail","label":"AgentMail"},"channel":{"id":"agentmail","label":"AgentMail","selectionLabel":"AgentMail (Email)","detailLabel":"AgentMail Email","docsPath":"https://www.agentmail.to/docs/integrations/openclaw","docsLabel":"agentmail","exposure":{"docs":false},"blurb":"Durable, allowlisted, reply-only email conversations through AgentMail.","order":89,"quickstartAllowFrom":true,"configuredState":{"env":{"anyOf":["AGENTMAIL_API_KEY"]}}},"channelConfigs":{"agentmail":{"label":"AgentMail","description":"AgentMail email channel accounts and sender allowlist.","schema":{"type":"object","additionalProperties":true}}},"install":{"clawhubSpec":"clawhub:@agentmail/agentmail@0.2.1","expectedIntegrity":"sha256:155221cec38673a39bc27629f9f6ec87567ce4e37b7fa619ec4b1f7ca3d28730","defaultChoice":"clawhub","minHostVersion":">=2026.8.1-beta.2","allowInvalidConfigRecovery":true}}},
|
||
{"name":"@openclaw/buzz","version":"2026.9.7","description":"Connect OpenClaw agents to Buzz rooms","source":"official","kind":"channel","openclaw":{"channelConfigs":{"buzz":{"label":"Buzz","description":"Connect OpenClaw agents to Buzz team rooms."}},"channel":{"id":"buzz","configuredState":{"env":{"allOf":["BUZZ_RELAY_URL","BUZZ_PRIVATE_KEY"]}},"label":"Buzz","selectionLabel":"Buzz","docsPath":"/channels/buzz","docsLabel":"buzz","blurb":"Connect OpenClaw agents to Buzz team rooms.","markdownCapable":true,"order":56,"setup":{"fields":[{"key":"relayUrl","kind":"string","cli":{"flags":"--relay-url <url>","description":"Buzz relay WebSocket URL"}},{"key":"privateKey","kind":"string","sensitive":true,"cli":{"flags":"--private-key <key>","description":"Buzz bot Nostr private key"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use BUZZ_PRIVATE_KEY with the supplied relay URL"},"envVars":["BUZZ_PRIVATE_KEY"]}]}},"install":{"clawhubSpec":"clawhub:@openclaw/buzz","npmSpec":"@openclaw/buzz","defaultChoice":"npm","minHostVersion":">=2026.7.2"}}},
|
||
{"name":"@openclaw/clickclack","version":"2026.9.7","description":"OpenClaw ClickClack channel plugin","source":"official","kind":"channel","openclaw":{"contracts":{"tools":["discussion"]},"channelConfigs":{"clickclack":{"label":"ClickClack","description":"ClickClack channel accounts and group activation policy."}},"channel":{"id":"clickclack","configuredState":{"env":{"anyOf":["CLICKCLACK_BOT_TOKEN"]}},"label":"ClickClack","selectionLabel":"ClickClack","detailLabel":"ClickClack Bot","docsPath":"/channels/clickclack","docsLabel":"clickclack","blurb":"self-hosted chat via first-class ClickClack bot tokens.","systemImage":"bubble.left.and.bubble.right","markdownCapable":true,"preferSessionLookupForAnnounceTarget":true,"order":85,"commands":{"nativeCommandsAutoEnabled":false,"nativeSkillsAutoEnabled":false},"setup":{"fields":[{"key":"code","kind":"string","sensitive":true,"cli":{"flags":"--code <code>","description":"ClickClack one-time setup code or setup URL"}},{"key":"token","kind":"string","sensitive":true,"cli":{"flags":"--token <token>","description":"ClickClack bot token"}},{"key":"tokenFile","kind":"string","sensitive":true,"cli":{"flags":"--token-file <path>","description":"ClickClack bot token file"}},{"key":"baseUrl","kind":"string","cli":{"flags":"--base-url <url>","description":"ClickClack API base URL"}},{"key":"workspace","kind":"string","cli":{"flags":"--workspace <workspace>","description":"ClickClack workspace id, slug, or name"}},{"key":"defaultTo","kind":"string","cli":{"flags":"--default-to <target>","description":"Default ClickClack target"}},{"key":"allowFrom","kind":"string-list","cli":{"flags":"--allow-from <ids>","description":"Allowed ClickClack senders"}},{"key":"agentActivity","kind":"boolean","cli":{"flags":"--agent-activity","description":"Enable ClickClack agent activity"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use CLICKCLACK_BOT_TOKEN"},"envVars":["CLICKCLACK_BOT_TOKEN"]}]}},"install":{"clawhubSpec":"clawhub:@openclaw/clickclack","npmSpec":"@openclaw/clickclack","defaultChoice":"npm","minHostVersion":">=2026.6.9","allowInvalidConfigRecovery":true}}},
|
||
{"name":"@openclaw/discord","version":"2026.9.7","description":"OpenClaw Discord channel plugin for channels, DMs, commands, and app events.","source":"official","kind":"channel","openclaw":{"contracts":{"transcriptSourceProviders":["discord-voice"]},"channel":{"id":"discord","configuredState":{"env":{"anyOf":["DISCORD_BOT_TOKEN"]}},"approvalFlags":["native"],"label":"Discord","selectionLabel":"Discord (Bot API)","detailLabel":"Discord Bot","docsPath":"/channels/discord","docsLabel":"discord","blurb":"very well supported right now.","systemImage":"bubble.left.and.bubble.right","markdownCapable":true,"preferSessionLookupForAnnounceTarget":true,"setup":{"fields":[{"key":"token","kind":"string","sensitive":true,"cli":{"flags":"--token <token>","description":"Discord bot token"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use DISCORD_BOT_TOKEN"},"envVars":["DISCORD_BOT_TOKEN"]}]},"commands":{"nativeCommandsAutoEnabled":true,"nativeSkillsAutoEnabled":true},"doctorCapabilities":{"dmAllowFromMode":"topOnly","groupModel":"route","groupAllowFromFallbackToAllowFrom":false,"warnOnEmptyGroupSenderAllowlist":false}},"install":{"clawhubSpec":"clawhub:@openclaw/discord","npmSpec":"@openclaw/discord","defaultChoice":"npm","minHostVersion":">=2026.5.26","allowInvalidConfigRecovery":true}}},
|
||
{"name":"@openclaw/feishu","version":"2026.9.7","description":"OpenClaw Feishu/Lark channel plugin for chats and workplace tools (community maintained by @m1heng).","source":"official","kind":"channel","openclaw":{"contracts":{"tools":["feishu_app_scopes","feishu_bitable_create_app","feishu_bitable_create_field","feishu_bitable_create_record","feishu_bitable_get_meta","feishu_bitable_get_record","feishu_bitable_list_fields","feishu_bitable_list_records","feishu_bitable_update_record","feishu_chat","feishu_doc","feishu_drive","feishu_perm","feishu_wiki"]},"channel":{"id":"feishu","configuredState":{"env":{"anyOf":["FEISHU_APP_ID","FEISHU_APP_SECRET","FEISHU_VERIFICATION_TOKEN","FEISHU_ENCRYPT_KEY"]},"specifier":"./configured-state","exportName":"hasConfiguredFeishuChannelState"},"label":"Feishu","selectionLabel":"Feishu/Lark (飞书)","docsPath":"/channels/feishu","docsLabel":"feishu","blurb":"飞书/Lark enterprise messaging with doc/wiki/drive tools.","aliases":["lark"],"order":35,"quickstartAllowFrom":true,"setup":{"fields":[]}},"install":{"clawhubSpec":"clawhub:@openclaw/feishu","npmSpec":"@openclaw/feishu","defaultChoice":"npm","minHostVersion":">=2026.5.29"}}},
|
||
{"name":"@openclaw/googlechat","version":"2026.9.7","description":"OpenClaw Google Chat channel plugin for spaces and direct messages.","source":"official","kind":"channel","openclaw":{"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)","detailLabel":"Google Chat","docsPath":"/channels/googlechat","docsLabel":"googlechat","blurb":"Google Workspace Chat app with HTTP webhook.","aliases":["gchat","google-chat"],"order":55,"systemImage":"message.badge","markdownCapable":true,"doctorCapabilities":{"dmAllowFromMode":"topOnly","groupModel":"route","groupAllowFromFallbackToAllowFrom":false,"warnOnEmptyGroupSenderAllowlist":false},"setup":{"fields":[{"key":"token","kind":"string","sensitive":true,"cli":{"flags":"--token <json>","description":"Google Chat service account JSON"}},{"key":"tokenFile","kind":"string","sensitive":true,"cli":{"flags":"--token-file <path>","description":"Google Chat service account file"}},{"key":"audienceType","kind":"choice","choices":["app-url","project-number"],"cli":{"flags":"--audience-type <type>","description":"Google Chat audience type"}},{"key":"audience","kind":"string","cli":{"flags":"--audience <value>","description":"Google Chat audience value"}},{"key":"webhookPath","kind":"string","cli":{"flags":"--webhook-path <path>","description":"Google Chat webhook path"}},{"key":"webhookUrl","kind":"string","cli":{"flags":"--webhook-url <url>","description":"Google Chat webhook URL"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use Google Chat environment credentials"},"envVars":["GOOGLE_CHAT_SERVICE_ACCOUNT","GOOGLE_CHAT_SERVICE_ACCOUNT_FILE"],"envVarMode":"any"}]}},"install":{"clawhubSpec":"clawhub:@openclaw/googlechat","npmSpec":"@openclaw/googlechat","defaultChoice":"npm","minHostVersion":">=2026.4.10"}}},
|
||
{"name":"@openclaw/imessage","version":"2026.9.7","description":"OpenClaw iMessage channel plugin using imsg on a signed-in Mac","source":"official","kind":"channel","openclaw":{"channel":{"id":"imessage","approvalFlags":["native"],"label":"iMessage","selectionLabel":"iMessage (imsg)","detailLabel":"iMessage","docsPath":"/channels/imessage","docsLabel":"imessage","blurb":"Local iMessage/SMS through the imsg bridge, including private API message actions when enabled.","aliases":["imsg"],"systemImage":"message.fill","setup":{"fields":[{"key":"cliPath","kind":"string","cli":{"flags":"--cli-path <path>","description":"iMessage CLI path"}},{"key":"dbPath","kind":"string","cli":{"flags":"--db-path <path>","description":"iMessage database path"}},{"key":"service","kind":"choice","choices":["imessage","sms","auto"],"cli":{"flags":"--service <service>","description":"iMessage service"}},{"key":"region","kind":"string","cli":{"flags":"--region <region>","description":"SMS region"}}]}},"install":{"clawhubSpec":"clawhub:@openclaw/imessage","npmSpec":"@openclaw/imessage","defaultChoice":"npm","minHostVersion":">=2026.7.2","allowInvalidConfigRecovery":true}}},
|
||
{"name":"@openclaw/irc","version":"2026.9.7","description":"OpenClaw IRC channel plugin","source":"official","kind":"channel","openclaw":{"channel":{"id":"irc","configuredState":{"env":{"allOf":["IRC_HOST","IRC_NICK"]}},"label":"IRC","selectionLabel":"IRC (Server + Nick)","detailLabel":"IRC","docsPath":"/channels/irc","docsLabel":"irc","blurb":"classic IRC networks with DM/channel routing and pairing controls.","aliases":["internet-relay-chat"],"systemImage":"network","setup":{"fields":[{"key":"host","kind":"string","cli":{"flags":"--host <host>","description":"IRC server host"}},{"key":"port","kind":"string","cli":{"flags":"--port <port>","description":"IRC server port"}},{"key":"tls","kind":"boolean","cli":{"flags":"--tls","description":"Use TLS for IRC"}},{"key":"nick","kind":"string","cli":{"flags":"--nick <nick>","description":"IRC nickname"}},{"key":"username","kind":"string","cli":{"flags":"--username <name>","description":"IRC username"}},{"key":"realname","kind":"string","cli":{"flags":"--realname <name>","description":"IRC real name"}},{"key":"channels","kind":"string-list","cli":{"flags":"--channels <names>","description":"IRC channels"}},{"key":"password","kind":"string","sensitive":true,"cli":{"flags":"--password <password>","description":"IRC server password"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use IRC environment configuration"},"envVars":["IRC_HOST","IRC_NICK"]}]}},"install":{"clawhubSpec":"clawhub:@openclaw/irc","npmSpec":"@openclaw/irc","defaultChoice":"npm","minHostVersion":">=2026.6.9","allowInvalidConfigRecovery":true}}},
|
||
{"name":"@openclaw/line","version":"2026.9.7","description":"OpenClaw LINE channel plugin for LINE Bot API chats.","source":"official","kind":"channel","openclaw":{"channel":{"id":"line","configuredState":{"env":{"allOf":["LINE_CHANNEL_ACCESS_TOKEN","LINE_CHANNEL_SECRET"]}},"label":"LINE","selectionLabel":"LINE (Messaging API)","detailLabel":"LINE Bot","docsPath":"/channels/line","docsLabel":"line","blurb":"LINE Messaging API webhook bot.","systemImage":"message","order":75,"quickstartAllowFrom":true,"doctorCapabilities":{"dmAllowFromMode":"topOnly","groupModel":"sender","groupAllowFromFallbackToAllowFrom":false,"warnOnEmptyGroupSenderAllowlist":true},"setup":{"fields":[{"key":"channelAccessToken","kind":"string","sensitive":true,"cli":{"flags":"--channel-access-token <token>","description":"LINE channel access token"}},{"key":"token","kind":"string","sensitive":true,"cli":{"flags":"--token <token>","description":"LINE channel access token (alias)"}},{"key":"channelSecret","kind":"string","sensitive":true,"cli":{"flags":"--channel-secret <secret>","description":"LINE channel secret"}},{"key":"tokenFile","kind":"string","sensitive":true,"cli":{"flags":"--token-file <path>","description":"LINE access token file"}},{"key":"secretFile","kind":"string","sensitive":true,"cli":{"flags":"--secret-file <path>","description":"LINE channel secret file"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use LINE environment credentials"},"envVars":["LINE_CHANNEL_ACCESS_TOKEN","LINE_CHANNEL_SECRET"]}]}},"install":{"clawhubSpec":"clawhub:@openclaw/line","npmSpec":"@openclaw/line","defaultChoice":"npm","minHostVersion":">=2026.4.10"}}},
|
||
{"name":"@openclaw/matrix","version":"2026.9.7","description":"OpenClaw Matrix channel plugin for rooms and direct messages.","source":"official","kind":"channel","openclaw":{"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)","docsPath":"/channels/matrix","docsLabel":"matrix","blurb":"open protocol; install the plugin to enable.","order":70,"markdownCapable":true,"quickstartAllowFrom":true,"doctorCapabilities":{"dmAllowFromMode":"nestedOnly","groupModel":"sender","groupAllowFromFallbackToAllowFrom":false,"warnOnEmptyGroupSenderAllowlist":true},"setup":{"fields":[{"key":"homeserver","kind":"string","cli":{"flags":"--homeserver <url>","description":"Matrix homeserver URL"}},{"key":"userId","kind":"string","cli":{"flags":"--user-id <id>","description":"Matrix user id"}},{"key":"accessToken","kind":"string","sensitive":true,"cli":{"flags":"--access-token <token>","description":"Matrix access token"}},{"key":"password","kind":"string","sensitive":true,"cli":{"flags":"--password <password>","description":"Matrix password"}},{"key":"deviceName","kind":"string","cli":{"flags":"--device-name <name>","description":"Matrix device name"}},{"key":"avatarUrl","kind":"string","cli":{"flags":"--avatar-url <url>","description":"Matrix avatar URL"}},{"key":"initialSyncLimit","kind":"integer","cli":{"flags":"--initial-sync-limit <n>","description":"Matrix initial sync room limit"}},{"key":"proxy","kind":"string","cli":{"flags":"--proxy <url>","description":"Matrix proxy URL"}},{"key":"dangerouslyAllowPrivateNetwork","kind":"boolean","cli":{"flags":"--dangerously-allow-private-network","description":"Allow private-network Matrix homeservers"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use Matrix environment credentials"}}]},"persistedAuthState":{"specifier":"./auth-presence","exportName":"hasAnyMatrixAuth","backingStore":"plugin-state"}},"install":{"clawhubSpec":"clawhub:@openclaw/matrix","npmSpec":"@openclaw/matrix","defaultChoice":"npm","minHostVersion":">=2026.4.10","allowInvalidConfigRecovery":true}}},
|
||
{"name":"@openclaw/mattermost","version":"2026.9.7","description":"OpenClaw Mattermost channel plugin","source":"official","kind":"channel","openclaw":{"channel":{"id":"mattermost","configuredState":{"env":{"allOf":["MATTERMOST_BOT_TOKEN","MATTERMOST_URL"]}},"label":"Mattermost","selectionLabel":"Mattermost (plugin)","docsPath":"/channels/mattermost","docsLabel":"mattermost","blurb":"self-hosted Slack-style chat; install the plugin to enable.","order":65,"setup":{"fields":[{"key":"token","kind":"string","sensitive":true,"cli":{"flags":"--token <token>","description":"Mattermost bot token"}},{"key":"botToken","kind":"string","sensitive":true,"cli":{"flags":"--bot-token <token>","description":"Mattermost bot token"}},{"key":"httpUrl","kind":"string","cli":{"flags":"--http-url <url>","description":"Mattermost server URL"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use Mattermost environment credentials"},"envVars":["MATTERMOST_BOT_TOKEN","MATTERMOST_URL"]}]}},"install":{"clawhubSpec":"clawhub:@openclaw/mattermost","npmSpec":"@openclaw/mattermost","defaultChoice":"npm","minHostVersion":">=2026.6.9","allowInvalidConfigRecovery":true}}},
|
||
{"name":"@openclaw/msteams","version":"2026.9.7","description":"OpenClaw Microsoft Teams channel plugin for bot conversations.","source":"official","kind":"channel","openclaw":{"channel":{"id":"msteams","configuredState":{"env":{"anyOf":["MSTEAMS_APP_ID","MSTEAMS_APP_PASSWORD","MSTEAMS_TENANT_ID"]},"specifier":"./configured-state","exportName":"hasConfiguredMSTeamsChannelState"},"label":"Microsoft Teams","selectionLabel":"Microsoft Teams (Teams SDK)","docsPath":"/channels/msteams","docsLabel":"msteams","blurb":"Teams SDK; enterprise support.","aliases":["teams"],"order":60,"doctorCapabilities":{"dmAllowFromMode":"topOnly","groupModel":"hybrid","groupAllowFromFallbackToAllowFrom":true,"warnOnEmptyGroupSenderAllowlist":true},"setup":{"fields":[]}},"install":{"clawhubSpec":"clawhub:@openclaw/msteams","npmSpec":"@openclaw/msteams","defaultChoice":"npm","minHostVersion":">=2026.4.10"}}},
|
||
{"name":"@openclaw/nextcloud-talk","version":"2026.9.7","description":"OpenClaw Nextcloud Talk channel plugin for conversations.","source":"official","kind":"channel","openclaw":{"channel":{"id":"nextcloud-talk","configuredState":{"env":{"anyOf":["NEXTCLOUD_TALK_BOT_SECRET","NEXTCLOUD_TALK_API_PASSWORD"]},"specifier":"./configured-state","exportName":"hasConfiguredNextcloudTalkChannelState"},"label":"Nextcloud Talk","selectionLabel":"Nextcloud Talk (self-hosted)","docsPath":"/channels/nextcloud-talk","docsLabel":"nextcloud-talk","blurb":"Self-hosted chat via Nextcloud Talk webhook bots.","aliases":["nc-talk","nc"],"order":65,"quickstartAllowFrom":true,"setup":{"fields":[{"key":"baseUrl","kind":"string","cli":{"flags":"--base-url <url>","description":"Nextcloud base URL"}},{"key":"url","kind":"string","cli":{"flags":"--url <url>","description":"Legacy Nextcloud base URL alias"}},{"key":"secret","kind":"string","sensitive":true,"cli":{"flags":"--secret <secret>","description":"Nextcloud Talk bot secret"}},{"key":"token","kind":"string","sensitive":true,"cli":{"flags":"--token <secret>","description":"Legacy Nextcloud bot secret alias"}},{"key":"password","kind":"string","sensitive":true,"cli":{"flags":"--password <secret>","description":"Legacy Nextcloud bot secret alias"}},{"key":"secretFile","kind":"string","sensitive":true,"cli":{"flags":"--secret-file <path>","description":"Nextcloud Talk bot secret file"}},{"key":"tokenFile","kind":"string","sensitive":true,"cli":{"flags":"--token-file <path>","description":"Legacy Nextcloud bot secret file alias"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use Nextcloud Talk environment credentials"},"envVars":["NEXTCLOUD_TALK_BOT_SECRET"]}]}},"install":{"clawhubSpec":"clawhub:@openclaw/nextcloud-talk","npmSpec":"@openclaw/nextcloud-talk","defaultChoice":"npm","minHostVersion":">=2026.4.10"}}},
|
||
{"name":"@openclaw/nostr","version":"2026.9.7","description":"OpenClaw Nostr channel plugin for NIP-04 encrypted direct messages.","source":"official","kind":"channel","openclaw":{"channel":{"id":"nostr","configuredState":{"env":{"anyOf":["NOSTR_PRIVATE_KEY"]}},"label":"Nostr","selectionLabel":"Nostr (NIP-04 DMs)","docsPath":"/channels/nostr","docsLabel":"nostr","blurb":"Decentralized protocol; encrypted DMs via NIP-04.","order":55,"quickstartAllowFrom":true,"setup":{"fields":[{"key":"privateKey","kind":"string","sensitive":true,"cli":{"flags":"--private-key <key>","description":"Nostr private key"}},{"key":"relayUrls","kind":"string","cli":{"flags":"--relay-urls <urls>","description":"Nostr relay URLs"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use NOSTR_PRIVATE_KEY"},"envVars":["NOSTR_PRIVATE_KEY"]}]}},"install":{"clawhubSpec":"clawhub:@openclaw/nostr","npmSpec":"@openclaw/nostr","defaultChoice":"npm","minHostVersion":">=2026.4.10"}}},
|
||
{"name":"@tencent-weixin/openclaw-weixin","description":"OpenClaw Weixin channel plugin by the Tencent Weixin team.","source":"external","kind":"channel","openclaw":{"plugin":{"id":"openclaw-weixin","label":"Weixin"},"channel":{"id":"openclaw-weixin","label":"Weixin","selectionLabel":"Weixin(微信)","detailLabel":"Weixin","docsPath":"/channels/wechat","docsLabel":"weixin","blurb":"Personal WeChat messaging via QR-code login.","aliases":["weixin","wechat","微信"],"order":75},"channelConfigs":{"openclaw-weixin":{"label":"Weixin","description":"Personal WeChat conversation channel.","schema":{"type":"object","additionalProperties":true}}},"install":{"npmSpec":"@tencent-weixin/openclaw-weixin@2.4.8","defaultChoice":"npm","expectedIntegrity":"sha512-hhO9prUQwzfSpIL6XGWazRsxNs89K+Mis3iQW6a8eum4AIDxOUiTFMg4nlNVD/au0SjAx5CcJjo3KYWZqGpgQA==","minHostVersion":">=2026.5.12"}}},
|
||
{"name":"@zalo-platforms/openclaw-zaloclawbot","description":"OpenClaw Zalo ClawBot channel plugin by the Zalo Platforms team.","source":"external","kind":"channel","openclaw":{"plugin":{"id":"openclaw-zaloclawbot","label":"Zalo ClawBot"},"channel":{"id":"openclaw-zaloclawbot","label":"Zalo ClawBot","selectionLabel":"Zalo ClawBot (QR)","detailLabel":"Zalo ClawBot","docsPath":"/channels/zaloclawbot","docsLabel":"zaloclawbot","blurb":"Personal Zalo assistant bot via QR-code login — owner-bound, no setup.","aliases":["zaloclawbot","zalo-clawbot"],"order":82},"channelConfigs":{"openclaw-zaloclawbot":{"label":"Zalo ClawBot","description":"Personal Zalo assistant — QR-onboarded, owner-bound.","schema":{"type":"object","additionalProperties":true}}},"install":{"npmSpec":"@zalo-platforms/openclaw-zaloclawbot@0.1.4","defaultChoice":"npm","expectedIntegrity":"sha512-5IxZriHJYACLLGqkCPPsTP9tas62kXEOFqTFAFMdunAM3SPhIJwVFRp0WvoP/m7L2PX85weD0g8LOtxM93VDYg==","minHostVersion":">=2026.4.10"}}},
|
||
{"name":"@tencent-connect/openclaw-qqbot","description":"OpenClaw QQ Bot channel plugin by the Tencent Connect team.","source":"external","kind":"channel","openclaw":{"plugin":{"id":"openclaw-qqbot","label":"QQ Bot"},"setupFeatures":{"configPromotion":"preserve-root"},"legacyNpmPackageNames":["@openclaw/qqbot"],"contracts":{"tools":["qqbot_platform_api","qqbot_remind"]},"channel":{"id":"qqbot","label":"QQ Bot","selectionLabel":"QQ Bot (Official API)","detailLabel":"QQ Bot","docsPath":"/channels/qqbot","docsLabel":"qqbot","blurb":"connect to QQ via official QQ Bot API with group chat and direct message support.","envVars":["QQBOT_APP_ID","QQBOT_CLIENT_SECRET"],"approvalFlags":["native"],"doctorCapabilities":{"openDmRequiresAllowFromWildcard":false},"systemImage":"bubble.left.and.bubble.right"},"channelSecrets":{"fields":[{"field":"clientSecret","activationField":"appId","activationEnv":"QQBOT_APP_ID"}]},"channelHostConfig":{"docsSource":"official","compatibilityMigration":"qqbot.tencent-2.0-compatibility","schemaAllOf":[{"not":{"required":["defaultAccount"]},"properties":{"allowFrom":{"type":"array","minItems":1,"items":{"allOf":[{"not":{"const":"*"}},{"anyOf":[{"const":"openclaw:approval-disabled"},{"type":"string","pattern":"^[^a-z]*$"}]}]}},"accounts":{"type":"object","not":{"required":["default"]},"additionalProperties":{"type":"object","properties":{"allowFrom":{"type":"array","minItems":1,"items":{"allOf":[{"not":{"const":"*"}},{"anyOf":[{"const":"openclaw:approval-disabled"},{"type":"string","pattern":"^[^a-z]*$"}]}]}}},"required":["allowFrom"]}}},"required":["allowFrom"]}]},"channelConfigs":{"qqbot":{"label":"QQ Bot","description":"QQ Bot API conversation channel.","preferOver":["qqbot"],"schema":{"type":"object","additionalProperties":true,"properties":{"appId":{"type":"string"},"clientSecret":{"type":"string"}}}}},"install":{"npmSpec":"@tencent-connect/openclaw-qqbot@2.0.3","defaultChoice":"npm","expectedIntegrity":"sha512-yngu/2cPeZjJfIfHWCXWB2/6KlDHrb9vpOUjKLdQxePLSp6wCn3CFOALcBIVq/9o6jlYz9WTU9idW6nfX1xpFA=="}}},
|
||
{"name":"@openclaw/raft","version":"2026.9.7","description":"OpenClaw Raft channel plugin for Raft CLI wake bridges.","source":"official","kind":"channel","openclaw":{"channelConfigs":{"raft":{"label":"Raft","description":"Raft External Agent CLI wake bridge."}},"channel":{"id":"raft","configuredState":{"env":{"anyOf":["RAFT_PROFILE"]}},"label":"Raft","selectionLabel":"Raft (CLI wake bridge)","docsPath":"/channels/raft","docsLabel":"raft","blurb":"Raft CLI wake bridge for human and agent collaboration.","order":72,"setup":{"fields":[{"key":"profile","kind":"string","cli":{"flags":"--profile <profile>","description":"Raft CLI profile"}}]}},"install":{"clawhubSpec":"clawhub:@openclaw/raft","npmSpec":"@openclaw/raft","defaultChoice":"npm","minHostVersion":">=2026.6.8"}}},
|
||
{"name":"@openclaw/signal","version":"2026.9.7","description":"OpenClaw Signal channel plugin","source":"official","kind":"channel","openclaw":{"channel":{"id":"signal","approvalFlags":["native"],"label":"Signal","selectionLabel":"Signal (signal-cli)","detailLabel":"Signal REST","docsPath":"/channels/signal","docsLabel":"signal","blurb":"signal-cli linked device with additional setup for the local REST bridge.","systemImage":"antenna.radiowaves.left.and.right","markdownCapable":true,"setup":{"fields":[{"key":"signalNumber","kind":"string","cli":{"flags":"--signal-number <e164>","description":"Signal account number (E.164)"}},{"key":"signalTransport","kind":"choice","choices":["external-native","container"],"cli":{"flags":"--signal-transport <kind>","description":"Signal HTTP transport (external-native or container)"}},{"key":"cliPath","kind":"string","cli":{"flags":"--cli-path <path>","description":"signal-cli executable path"}},{"key":"httpUrl","kind":"string","cli":{"flags":"--http-url <url>","description":"Signal HTTP service URL"}},{"key":"httpHost","kind":"string","cli":{"flags":"--http-host <host>","description":"Signal HTTP daemon host"}},{"key":"httpPort","kind":"string","cli":{"flags":"--http-port <port>","description":"Signal HTTP daemon port"}}]}},"install":{"clawhubSpec":"clawhub:@openclaw/signal","npmSpec":"@openclaw/signal","defaultChoice":"npm","minHostVersion":">=2026.6.9","allowInvalidConfigRecovery":true}}},
|
||
{"name":"@openclaw/slack","version":"2026.9.7","description":"OpenClaw Slack channel plugin for channels, DMs, commands, and app events.","source":"official","kind":"channel","openclaw":{"channelConfigs":{"slack":{"label":"Slack","description":"Slack channel, DM, command, and app event integration."}},"channel":{"id":"slack","configuredState":{"env":{"anyOf":["SLACK_BOT_TOKEN","SLACK_APP_TOKEN","SLACK_USER_TOKEN"]},"specifier":"./configured-state","exportName":"hasConfiguredSlackChannelState"},"approvalFlags":["native"],"label":"Slack","selectionLabel":"Slack (Socket Mode)","detailLabel":"Slack Bot","docsPath":"/channels/slack","docsLabel":"slack","blurb":"supported (Socket Mode).","systemImage":"number","markdownCapable":true,"doctorCapabilities":{"dmAllowFromMode":"topOnly","groupModel":"route","groupAllowFromFallbackToAllowFrom":false,"warnOnEmptyGroupSenderAllowlist":false},"commands":{"nativeCommandsAutoEnabled":false,"nativeSkillsAutoEnabled":false},"setup":{"fields":[{"key":"botToken","kind":"string","sensitive":true,"cli":{"flags":"--bot-token <token>","description":"Slack bot token"}},{"key":"appToken","kind":"string","sensitive":true,"cli":{"flags":"--app-token <token>","description":"Slack app token"}},{"key":"userToken","kind":"string","sensitive":true,"cli":{"flags":"--user-token <token>","description":"Slack user token"}},{"key":"signingSecret","kind":"string","sensitive":true,"cli":{"flags":"--signing-secret <secret>","description":"Slack signing secret"}},{"key":"identity","kind":"choice","choices":["bot","user"],"cli":{"flags":"--identity <kind>","description":"Slack identity"}},{"key":"mode","kind":"choice","choices":["socket","http"],"cli":{"flags":"--mode <mode>","description":"Slack connection mode"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use Slack environment credentials"},"envVars":["SLACK_BOT_TOKEN"]}]}},"install":{"clawhubSpec":"clawhub:@openclaw/slack","npmSpec":"@openclaw/slack","defaultChoice":"npm","minHostVersion":">=2026.5.28","allowInvalidConfigRecovery":true}}},
|
||
{"name":"@openclaw/sms","version":"2026.9.7","description":"OpenClaw SMS/MMS channel plugin for Twilio messages.","source":"official","kind":"channel","openclaw":{"channel":{"id":"sms","configuredState":{"env":{"anyOf":["TWILIO_ACCOUNT_SID","TWILIO_AUTH_TOKEN","TWILIO_PHONE_NUMBER","TWILIO_SMS_FROM","TWILIO_MESSAGING_SERVICE_SID"]},"specifier":"./configured-state","exportName":"hasConfiguredSmsChannelState"},"label":"SMS","selectionLabel":"SMS (Twilio)","detailLabel":"Twilio SMS/MMS","docsPath":"/channels/sms","docsLabel":"sms","blurb":"Twilio-backed SMS/MMS with inbound webhooks and outbound replies.","order":88,"quickstartAllowFrom":true,"setup":{"fields":[{"key":"accountSid","kind":"string","sensitive":true,"cli":{"flags":"--account-sid <sid>","description":"Twilio account SID"}},{"key":"authToken","kind":"string","sensitive":true,"cli":{"flags":"--auth-token <token>","description":"Twilio auth token"}},{"key":"fromNumber","kind":"string","cli":{"flags":"--from-number <e164>","description":"Twilio sender phone number"}},{"key":"messagingServiceSid","kind":"string","cli":{"flags":"--messaging-service-sid <sid>","description":"Twilio Messaging Service SID"}},{"key":"defaultTo","kind":"string","cli":{"flags":"--default-to <e164>","description":"Default SMS recipient"}},{"key":"webhookPath","kind":"string","cli":{"flags":"--webhook-path <path>","description":"SMS webhook path"}},{"key":"publicWebhookUrl","kind":"string","cli":{"flags":"--public-webhook-url <url>","description":"Public SMS webhook URL"}},{"key":"dmPolicy","kind":"choice","choices":["pairing","allowlist","open","disabled"],"cli":{"flags":"--dm-policy <policy>","description":"SMS DM policy"}},{"key":"allowFrom","kind":"string-list","cli":{"flags":"--allow-from <numbers>","description":"Allowed SMS senders"}}]}},"install":{"clawhubSpec":"clawhub:@openclaw/sms","npmSpec":"@openclaw/sms","defaultChoice":"npm","minHostVersion":">=2026.6.9","allowInvalidConfigRecovery":true}}},
|
||
{"name":"@openclaw/synology-chat","version":"2026.9.7","description":"Synology Chat channel plugin for OpenClaw channels and direct messages.","source":"official","kind":"channel","openclaw":{"channel":{"id":"synology-chat","configuredState":{"env":{"allOf":["SYNOLOGY_CHAT_TOKEN","SYNOLOGY_CHAT_INCOMING_URL"]}},"label":"Synology Chat","selectionLabel":"Synology Chat (Webhook)","docsPath":"/channels/synology-chat","docsLabel":"synology-chat","blurb":"Connect your Synology NAS Chat to OpenClaw with full agent capabilities.","order":90,"setup":{"fields":[{"key":"token","kind":"string","sensitive":true,"cli":{"flags":"--token <token>","description":"Synology Chat token"}},{"key":"url","kind":"string","sensitive":true,"cli":{"flags":"--url <url>","description":"Synology Chat webhook URL"}},{"key":"webhookUrl","kind":"string","sensitive":true,"cli":{"flags":"--webhook-url <url>","description":"Public HTTPS Synology Chat callback URL used for attachments"}},{"key":"webhookPath","kind":"string","cli":{"flags":"--webhook-path <path>","description":"Synology Chat webhook path"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use Synology Chat environment credentials"},"envVars":["SYNOLOGY_CHAT_TOKEN"]}]}},"install":{"clawhubSpec":"clawhub:@openclaw/synology-chat","npmSpec":"@openclaw/synology-chat","defaultChoice":"npm","minHostVersion":">=2026.4.10"}}},
|
||
{"name":"@openclaw/tlon","version":"2026.9.7","description":"OpenClaw Tlon/Urbit channel plugin for chat workflows.","source":"official","kind":"channel","openclaw":{"channel":{"id":"tlon","label":"Tlon","selectionLabel":"Tlon (Urbit)","docsPath":"/channels/tlon","docsLabel":"tlon","blurb":"decentralized messaging on Urbit; install the plugin to enable.","order":90,"quickstartAllowFrom":true,"setup":{"fields":[{"key":"ship","kind":"string","cli":{"flags":"--ship <ship>","description":"Tlon ship"}},{"key":"url","kind":"string","cli":{"flags":"--url <url>","description":"Tlon URL"}},{"key":"code","kind":"string","sensitive":true,"cli":{"flags":"--code <code>","description":"Tlon login code"}},{"key":"dangerouslyAllowPrivateNetwork","kind":"boolean","cli":{"flags":"--dangerously-allow-private-network","description":"Allow private-network Tlon URLs"}},{"key":"groupChannels","kind":"string-list","cli":{"flags":"--group-channels <list>","description":"Tlon group channels"}},{"key":"dmAllowlist","kind":"string-list","cli":{"flags":"--dm-allowlist <list>","description":"Tlon DM allowlist"}},{"key":"autoDiscoverChannels","kind":"boolean","cli":{"flags":"--auto-discover-channels","negatedFlags":"--no-auto-discover-channels","description":"Auto-discover Tlon group channels"}},{"key":"ownerShip","kind":"string","cli":{"flags":"--owner-ship <ship>","description":"Tlon owner ship"}}]}},"install":{"clawhubSpec":"clawhub:@openclaw/tlon","npmSpec":"@openclaw/tlon","defaultChoice":"npm","minHostVersion":">=2026.4.10"}}},
|
||
{"name":"@openclaw/twitch","version":"2026.9.7","description":"OpenClaw Twitch channel plugin for chat and moderation workflows.","source":"official","kind":"channel","openclaw":{"channel":{"id":"twitch","configuredState":{"env":{"anyOf":["OPENCLAW_TWITCH_ACCESS_TOKEN"]}},"label":"Twitch","selectionLabel":"Twitch (Chat)","docsPath":"/channels/twitch","blurb":"Twitch chat integration","aliases":["twitch-chat"],"setup":{"fields":[]}},"install":{"clawhubSpec":"clawhub:@openclaw/twitch","npmSpec":"@openclaw/twitch","defaultChoice":"npm","minHostVersion":">=2026.4.10"}}},
|
||
{"name":"@wecom/wecom-openclaw-plugin","description":"OpenClaw WeCom channel plugin by the Tencent WeCom team.","source":"external","kind":"channel","openclaw":{"plugin":{"id":"wecom-openclaw-plugin","label":"WeCom"},"contracts":{"tools":["wecom_mcp"]},"channel":{"id":"wecom","label":"WeCom","selectionLabel":"WeCom(企业微信)","detailLabel":"WeCom","docsPath":"/channels/wecom","docsLabel":"wecom","blurb":"Enterprise messaging and documents, scheduling, task tools.","aliases":["qywx","wework","enterprise-wechat"],"order":45},"channelConfigs":{"wecom":{"label":"WeCom","description":"Enterprise WeChat conversation channel.","schema":{"type":"object","additionalProperties":true}}},"install":{"npmSpec":"@wecom/wecom-openclaw-plugin@2026.7.2","defaultChoice":"npm","expectedIntegrity":"sha512-7kqdBIOF3SgDDoBoFtO6jxnxofbYSgbKdxZDNabD0y0jg2xKcVqlXZOOJ9+XQho/QOtIFrnRH2IRnPukFEYwJg=="}}},
|
||
{"name":"@openclaw/whatsapp","version":"2026.9.7","description":"OpenClaw WhatsApp channel plugin for WhatsApp Web chats.","source":"official","kind":"channel","openclaw":{"contracts":{"tools":["whatsapp_call","whatsapp_login"]},"channel":{"id":"whatsapp","approvalFlags":["native"],"label":"WhatsApp","selectionLabel":"WhatsApp (QR link)","detailLabel":"WhatsApp Web","docsPath":"/channels/whatsapp","docsLabel":"whatsapp","blurb":"works with your own number; recommend a separate phone + eSIM.","systemImage":"message","persistedAuthState":{"specifier":"./auth-presence","exportName":"hasAnyWhatsAppAuth"},"setup":{"fields":[{"key":"authDir","kind":"string","cli":{"flags":"--auth-dir <path>","description":"WhatsApp auth directory override"}}]}},"install":{"clawhubSpec":"clawhub:@openclaw/whatsapp","npmSpec":"@openclaw/whatsapp","defaultChoice":"npm","minHostVersion":">=2026.4.25"}}},
|
||
{"name":"openclaw-plugin-yuanbao","description":"OpenClaw Yuanbao channel plugin by the Tencent Yuanbao team.","source":"external","kind":"channel","openclaw":{"plugin":{"id":"openclaw-plugin-yuanbao","label":"Yuanbao"},"contracts":{"tools":["query_group_info","query_session_members","yuanbao_remind"]},"channel":{"id":"yuanbao","label":"Yuanbao","selectionLabel":"Yuanbao (元宝)","detailLabel":"Yuanbao","docsPath":"/channels/yuanbao","docsLabel":"yuanbao","blurb":"Tencent Yuanbao AI assistant conversation channel.","aliases":["yuanbao","yb","tencent-yuanbao","元宝"],"order":85},"channelConfigs":{"yuanbao":{"label":"Yuanbao","description":"Tencent Yuanbao AI assistant channel.","schema":{"type":"object","additionalProperties":true}}},"install":{"npmSpec":"openclaw-plugin-yuanbao@2.18.2","defaultChoice":"npm","expectedIntegrity":"sha512-cL85zWLePhi/GWRsXL8ogS4tejNuCE/J0V/OYhDFJzElF2TmndVCUAXaJdssgv/ULJ9sBaic88wAzRllIgZIwA=="}}},
|
||
{"name":"@openclaw/zalo","version":"2026.9.7","description":"OpenClaw Zalo channel plugin for bot and webhook chats.","source":"official","kind":"channel","openclaw":{"channel":{"id":"zalo","configuredState":{"env":{"anyOf":["ZALO_BOT_TOKEN"]}},"label":"Zalo","selectionLabel":"Zalo (Bot API)","docsPath":"/channels/zalo","docsLabel":"zalo","blurb":"Vietnam-focused messaging platform with Bot API.","aliases":["zl"],"order":80,"quickstartAllowFrom":true,"setup":{"fields":[{"key":"token","kind":"string","sensitive":true,"cli":{"flags":"--token <token>","description":"Zalo bot token"}},{"key":"tokenFile","kind":"string","sensitive":true,"cli":{"flags":"--token-file <path>","description":"Zalo bot token file"}},{"key":"useEnv","kind":"boolean","cli":{"flags":"--use-env","description":"Use ZALO_BOT_TOKEN"},"envVars":["ZALO_BOT_TOKEN"]}]}},"install":{"clawhubSpec":"clawhub:@openclaw/zalo","npmSpec":"@openclaw/zalo","defaultChoice":"npm","minHostVersion":">=2026.4.10"}}},
|
||
{"name":"@openclaw/zalouser","version":"2026.9.7","description":"OpenClaw Zalo Personal Account plugin via native zca-js integration.","source":"official","kind":"channel","openclaw":{"contracts":{"tools":["zalouser"]},"channel":{"id":"zalouser","configuredState":{"env":{"anyOf":["ZALOUSER_PROFILE","ZCA_PROFILE"]}},"label":"Zalo Personal","selectionLabel":"Zalo (Personal Account)","docsPath":"/channels/zalouser","docsLabel":"zalouser","blurb":"Zalo personal account via QR code login.","aliases":["zlu"],"order":85,"quickstartAllowFrom":false,"doctorCapabilities":{"dmAllowFromMode":"topOnly","groupModel":"hybrid","groupAllowFromFallbackToAllowFrom":false,"warnOnEmptyGroupSenderAllowlist":false},"setup":{"fields":[]}},"install":{"clawhubSpec":"clawhub:@openclaw/zalouser","npmSpec":"@openclaw/zalouser","defaultChoice":"npm","minHostVersion":">=2026.4.10"}}}
|
||
]
|
||
}
|