diff --git a/docs/channels/clickclack.md b/docs/channels/clickclack.md index 41e5a71f8bc..a2a5e5e9686 100644 --- a/docs/channels/clickclack.md +++ b/docs/channels/clickclack.md @@ -63,9 +63,9 @@ If `plugins.allow` is a non-empty restrictive list, explicitly selecting ClickClack in channel setup or running `openclaw plugins enable clickclack` appends `clickclack` to that list. Onboarding installation uses the same explicit-selection behavior. These paths do not override `plugins.deny` or a -global `plugins.enabled: false` setting. Direct `openclaw plugins install -clickclack` follows the normal plugin-install policy and also records ClickClack -in an existing allowlist. +global `plugins.enabled: false` setting. Direct +`openclaw plugins install @openclaw/clickclack` follows the normal +plugin-install policy and also records ClickClack in an existing allowlist. ## Multiple bots diff --git a/docs/channels/index.md b/docs/channels/index.md index 6b1f5867215..c015eb1c87f 100644 --- a/docs/channels/index.md +++ b/docs/channels/index.md @@ -42,7 +42,7 @@ Text is supported everywhere; media and reactions vary by channel. - [Raft](/channels/raft) - Raft CLI wake bridge for human and agent collaboration (external plugin). - [Signal](/channels/signal) - signal-cli; privacy-focused. - [Slack](/channels/slack) - Bolt SDK; workspace apps. -- [SMS](/channels/sms) - Twilio-backed SMS through the Gateway webhook (bundled plugin). +- [SMS](/channels/sms) - Twilio-backed SMS through the Gateway webhook (official plugin). - [Synology Chat](/channels/synology-chat) - Synology NAS Chat via outgoing+incoming webhooks (bundled plugin). - [Telegram](/channels/telegram) - Bot API via grammY; supports groups. - [Tlon](/channels/tlon) - Urbit-based messenger (bundled plugin). diff --git a/docs/channels/irc.md b/docs/channels/irc.md index 4dfa0d3b3e3..cfeb3597f3a 100644 --- a/docs/channels/irc.md +++ b/docs/channels/irc.md @@ -7,12 +7,18 @@ read_when: --- Use IRC when you want OpenClaw in classic channels (`#room`) and direct messages. -IRC ships as a bundled plugin, but it is configured in the main config under `channels.irc`. +Install the official IRC plugin, then configure it under `channels.irc`. ## Quick start -1. Enable IRC config in `~/.openclaw/openclaw.json`. -2. Set at least: +1. Install the plugin: + +```bash +openclaw plugins install @openclaw/irc +``` + +2. Enable IRC config in `~/.openclaw/openclaw.json`. +3. Set at least: ```json5 { @@ -31,7 +37,7 @@ IRC ships as a bundled plugin, but it is configured in the main config under `ch Prefer a private IRC server for bot coordination. If you intentionally use a public IRC network, common choices include Libera.Chat, OFTC, and Snoonet. Avoid predictable public channels for bot or swarm backchannel traffic. -3. Start/restart gateway: +4. Start/restart gateway: ```bash openclaw gateway run diff --git a/docs/channels/mattermost.md b/docs/channels/mattermost.md index 41781269574..ed96d2ccf8c 100644 --- a/docs/channels/mattermost.md +++ b/docs/channels/mattermost.md @@ -32,7 +32,7 @@ Details: [Plugins](/tools/plugin) - Current packaged OpenClaw releases already bundle it. Older/custom installs can add it manually with the commands above. + Install `@openclaw/mattermost` with the command above, then restart the Gateway if it is already running. Create a Mattermost bot account and copy the **bot token**. diff --git a/docs/channels/signal.md b/docs/channels/signal.md index 1fa0d0a3436..72ba444b629 100644 --- a/docs/channels/signal.md +++ b/docs/channels/signal.md @@ -20,12 +20,18 @@ Status: external CLI integration. Gateway talks to `signal-cli` over HTTP — ei ## Quick setup (beginner) 1. Use a **separate Signal number** for the bot (recommended). -2. Install `signal-cli` (Java required if you use the JVM build). -3. Choose one setup path: +2. Install the OpenClaw plugin: + +```bash +openclaw plugins install @openclaw/signal +``` + +3. Install `signal-cli` (Java required if you use the JVM build). +4. Choose one setup path: - **Path A (QR link):** `signal-cli link -n "OpenClaw"` and scan with Signal. - **Path B (SMS register):** register a dedicated number with captcha + SMS verification. -4. Configure OpenClaw and restart the gateway. -5. Send a first DM and approve pairing (`openclaw pairing approve signal `). +5. Configure OpenClaw and restart the gateway. +6. Send a first DM and approve pairing (`openclaw pairing approve signal `). Minimal config: diff --git a/docs/channels/sms.md b/docs/channels/sms.md index b4b2a567d04..8fa6d548c6f 100644 --- a/docs/channels/sms.md +++ b/docs/channels/sms.md @@ -24,6 +24,7 @@ OpenClaw can receive and send SMS through a Twilio phone number or Messaging Ser You need: +- The official SMS plugin installed with `openclaw plugins install @openclaw/sms`. - A Twilio account with an SMS-capable phone number, or a Twilio Messaging Service. - The Twilio Account SID and Auth Token. - A public HTTPS URL that reaches your OpenClaw Gateway. @@ -34,6 +35,11 @@ Use one Twilio number for both SMS and Voice Call if the number has both capabil ## Quick Setup + + ```bash + openclaw plugins install @openclaw/sms + ``` + In Twilio, open **Phone Numbers > Manage > Active numbers** and choose an SMS-capable number. Save: diff --git a/docs/concepts/model-providers.md b/docs/concepts/model-providers.md index 4d0b84afe0d..689e48782c6 100644 --- a/docs/concepts/model-providers.md +++ b/docs/concepts/model-providers.md @@ -333,7 +333,7 @@ Gateway model capability checks also read explicit `models.providers..models ### Moonshot AI (Kimi) -Moonshot ships as a bundled provider plugin. Use the built-in provider by default, and add an explicit `models.providers.moonshot` entry only when you need to override the base URL or model metadata: +Install `@openclaw/moonshot-provider` before onboarding. Add an explicit `models.providers.moonshot` entry only when you need to override the base URL or model metadata: - Provider: `moonshot` - Auth: `MOONSHOT_API_KEY` diff --git a/docs/plugins/plugin-inventory.md b/docs/plugins/plugin-inventory.md index 02a453be396..4700d3f1761 100644 --- a/docs/plugins/plugin-inventory.md +++ b/docs/plugins/plugin-inventory.md @@ -51,7 +51,7 @@ Each entry lists the package, distribution route, and description. ## Core npm package -72 plugins +59 plugins - **[admin-http-rpc](/plugins/reference/admin-http-rpc)** (`@openclaw/admin-http-rpc`) - included in OpenClaw. OpenClaw admin HTTP RPC endpoint. @@ -69,8 +69,6 @@ Each entry lists the package, distribution route, and description. - **[canvas](/plugins/reference/canvas)** (`@openclaw/canvas-plugin`) - included in OpenClaw. Experimental Canvas control and A2UI rendering surfaces for paired nodes. -- **[clickclack](/plugins/reference/clickclack)** (`@openclaw/clickclack`) - included in OpenClaw. Adds the Clickclack channel surface for sending and receiving OpenClaw messages. - - **[codex-supervisor](/plugins/reference/codex-supervisor)** (`@openclaw/codex-supervisor`) - included in OpenClaw. Supervise Codex app-server sessions from OpenClaw. - **[cohere](/plugins/reference/cohere)** (`@openclaw/cohere-provider`) - included in OpenClaw; npm; ClawHub: `clawhub:@openclaw/cohere-provider`. OpenClaw Cohere provider plugin. @@ -91,8 +89,6 @@ Each entry lists the package, distribution route, and description. - **[file-transfer](/plugins/reference/file-transfer)** (`@openclaw/file-transfer`) - included in OpenClaw. Fetch, list, and write files on paired nodes via dedicated node commands. Bypasses bash stdout truncation by using base64 over node.invoke for binaries up to 16 MB. -- **[fireworks](/plugins/reference/fireworks)** (`@openclaw/fireworks-provider`) - included in OpenClaw. Adds Fireworks model provider support to OpenClaw. - - **[github-copilot](/plugins/reference/github-copilot)** (`@openclaw/github-copilot-provider`) - included in OpenClaw. Adds GitHub Copilot model provider support to OpenClaw. - **[google](/plugins/reference/google)** (`@openclaw/google-plugin`) - included in OpenClaw. Adds Google, Google Gemini CLI, Google Vertex model provider support to OpenClaw. @@ -101,16 +97,12 @@ Each entry lists the package, distribution route, and description. - **[imessage](/plugins/reference/imessage)** (`@openclaw/imessage`) - included in OpenClaw. Adds the iMessage channel surface for sending and receiving OpenClaw messages. -- **[irc](/plugins/reference/irc)** (`@openclaw/irc`) - included in OpenClaw. Adds the IRC channel surface for sending and receiving OpenClaw messages. - - **[litellm](/plugins/reference/litellm)** (`@openclaw/litellm-provider`) - included in OpenClaw. Adds LiteLLM model provider support to OpenClaw. - **[llm-task](/plugins/reference/llm-task)** (`@openclaw/llm-task`) - included in OpenClaw. Generic JSON-only LLM tool for structured tasks callable from workflows. - **[lmstudio](/plugins/reference/lmstudio)** (`@openclaw/lmstudio-provider`) - included in OpenClaw. Adds LM Studio model provider support to OpenClaw. -- **[mattermost](/plugins/reference/mattermost)** (`@openclaw/mattermost`) - included in OpenClaw. Adds the Mattermost channel surface for sending and receiving OpenClaw messages. - - **[memory-core](/plugins/reference/memory-core)** (`@openclaw/memory-core`) - included in OpenClaw. Adds agent-callable tools. - **[memory-wiki](/plugins/reference/memory-wiki)** (`@openclaw/memory-wiki`) - included in OpenClaw. Persistent wiki compiler and Obsidian-friendly knowledge vault for OpenClaw. @@ -127,8 +119,6 @@ Each entry lists the package, distribution route, and description. - **[mistral](/plugins/reference/mistral)** (`@openclaw/mistral-provider`) - included in OpenClaw. Adds Mistral model provider support to OpenClaw. -- **[moonshot](/plugins/reference/moonshot)** (`@openclaw/moonshot-provider`) - included in OpenClaw. Adds Moonshot model provider support to OpenClaw. - - **[novita](/plugins/reference/novita)** (`@openclaw/novita-provider`) - included in OpenClaw. Adds Novita, Novita AI, Novitaai model provider support to OpenClaw. - **[nvidia](/plugins/reference/nvidia)** (`@openclaw/nvidia-provider`) - included in OpenClaw. Adds NVIDIA model provider support to OpenClaw. @@ -151,32 +141,18 @@ Each entry lists the package, distribution route, and description. - **[runway](/plugins/reference/runway)** (`@openclaw/runway-provider`) - included in OpenClaw. Adds video generation provider support. -- **[searxng](/plugins/reference/searxng)** (`@openclaw/searxng-plugin`) - included in OpenClaw. Adds web search provider support. - - **[senseaudio](/plugins/reference/senseaudio)** (`@openclaw/senseaudio-provider`) - included in OpenClaw. Adds media understanding provider support. - **[sglang](/plugins/reference/sglang)** (`@openclaw/sglang-provider`) - included in OpenClaw. Adds SGLang model provider support to OpenClaw. -- **[signal](/plugins/reference/signal)** (`@openclaw/signal`) - included in OpenClaw. Adds the Signal channel surface for sending and receiving OpenClaw messages. - -- **[sms](/plugins/reference/sms)** (`@openclaw/sms`) - included in OpenClaw. Twilio SMS channel plugin for OpenClaw text messages. - - **[synthetic](/plugins/reference/synthetic)** (`@openclaw/synthetic-provider`) - included in OpenClaw. Adds Synthetic model provider support to OpenClaw. -- **[tavily](/plugins/reference/tavily)** (`@openclaw/tavily-plugin`) - included in OpenClaw. Adds agent-callable tools. Adds web search provider support. - - **[telegram](/plugins/reference/telegram)** (`@openclaw/telegram`) - included in OpenClaw. Adds the Telegram channel surface for sending and receiving OpenClaw messages. -- **[tencent](/plugins/reference/tencent)** (`@openclaw/tencent-provider`) - included in OpenClaw. Adds Tencent TokenHub model provider support to OpenClaw. - - **[together](/plugins/reference/together)** (`@openclaw/together-provider`) - included in OpenClaw. Adds Together model provider support to OpenClaw. - **[tts-local-cli](/plugins/reference/tts-local-cli)** (`@openclaw/tts-local-cli`) - included in OpenClaw. Adds text-to-speech provider support. -- **[venice](/plugins/reference/venice)** (`@openclaw/venice-provider`) - included in OpenClaw. Adds Venice model provider support to OpenClaw. - -- **[vercel-ai-gateway](/plugins/reference/vercel-ai-gateway)** (`@openclaw/vercel-ai-gateway-provider`) - included in OpenClaw. Adds Vercel AI Gateway model provider support to OpenClaw. - - **[vllm](/plugins/reference/vllm)** (`@openclaw/vllm-provider`) - included in OpenClaw. Adds vLLM model provider support to OpenClaw. - **[volcengine](/plugins/reference/volcengine)** (`@openclaw/volcengine-provider`) - included in OpenClaw. Adds Volcengine, Volcengine Plan model provider support to OpenClaw. @@ -195,11 +171,9 @@ Each entry lists the package, distribution route, and description. - **[xiaomi](/plugins/reference/xiaomi)** (`@openclaw/xiaomi-provider`) - included in OpenClaw. Adds Xiaomi, Xiaomi Token Plan model provider support to OpenClaw. -- **[zai](/plugins/reference/zai)** (`@openclaw/zai-provider`) - included in OpenClaw. Adds Z.AI model provider support to OpenClaw. - ## Official external packages -55 plugins +68 plugins - **[acpx](/plugins/reference/acpx)** (`@openclaw/acpx`) - npm; ClawHub. OpenClaw ACP runtime backend with plugin-owned session and transport management. @@ -217,6 +191,8 @@ Each entry lists the package, distribution route, and description. - **[chutes](/plugins/reference/chutes)** (`@openclaw/chutes-provider`) - npm; ClawHub: `clawhub:@openclaw/chutes-provider`. Adds Chutes model provider support to OpenClaw. +- **[clickclack](/plugins/reference/clickclack)** (`@openclaw/clickclack`) - npm; ClawHub: `clawhub:@openclaw/clickclack`. Adds the Clickclack channel surface for sending and receiving OpenClaw messages. + - **[cloudflare-ai-gateway](/plugins/reference/cloudflare-ai-gateway)** (`@openclaw/cloudflare-ai-gateway-provider`) - npm; ClawHub: `clawhub:@openclaw/cloudflare-ai-gateway-provider`. Adds Cloudflare AI Gateway model provider support to OpenClaw. - **[codex](/plugins/reference/codex)** (`@openclaw/codex`) - npm; ClawHub. OpenClaw Codex app-server harness and model provider plugin with a Codex-managed GPT catalog. @@ -243,6 +219,8 @@ Each entry lists the package, distribution route, and description. - **[firecrawl](/plugins/reference/firecrawl)** (`@openclaw/firecrawl-plugin`) - npm; ClawHub: `clawhub:@openclaw/firecrawl-plugin`. Adds agent-callable tools. Adds web fetch provider support. Adds web search provider support. +- **[fireworks](/plugins/reference/fireworks)** (`@openclaw/fireworks-provider`) - npm; ClawHub: `clawhub:@openclaw/fireworks-provider`. Adds Fireworks model provider support to OpenClaw. + - **[gmi](/plugins/reference/gmi)** (`@openclaw/gmi-provider`) - npm; ClawHub: `clawhub:@openclaw/gmi-provider`. OpenClaw GMI Cloud provider plugin. - **[google-meet](/plugins/reference/google-meet)** (`@openclaw/google-meet`) - npm; ClawHub. OpenClaw Google Meet participant plugin for joining calls through Chrome or Twilio transports. @@ -255,6 +233,8 @@ Each entry lists the package, distribution route, and description. - **[inworld](/plugins/reference/inworld)** (`@openclaw/inworld-speech`) - npm; ClawHub: `clawhub:@openclaw/inworld-speech`. Inworld streaming text-to-speech (MP3, OGG_OPUS, PCM telephony). +- **[irc](/plugins/reference/irc)** (`@openclaw/irc`) - npm; ClawHub: `clawhub:@openclaw/irc`. Adds the IRC channel surface for sending and receiving OpenClaw messages. + - **[kilocode](/plugins/reference/kilocode)** (`@openclaw/kilocode-provider`) - npm; ClawHub: `clawhub:@openclaw/kilocode-provider`. Adds Kilocode model provider support to OpenClaw. - **[kimi](/plugins/reference/kimi)** (`@openclaw/kimi-provider`) - npm; ClawHub: `clawhub:@openclaw/kimi-provider`. Adds Kimi, Kimi Coding model provider support to OpenClaw. @@ -267,8 +247,12 @@ Each entry lists the package, distribution route, and description. - **[matrix](/plugins/reference/matrix)** (`@openclaw/matrix`) - ClawHub: `clawhub:@openclaw/matrix`; npm. OpenClaw Matrix channel plugin for rooms and direct messages. +- **[mattermost](/plugins/reference/mattermost)** (`@openclaw/mattermost`) - npm; ClawHub: `clawhub:@openclaw/mattermost`. Adds the Mattermost channel surface for sending and receiving OpenClaw messages. + - **[memory-lancedb](/plugins/reference/memory-lancedb)** (`@openclaw/memory-lancedb`) - npm; ClawHub. OpenClaw LanceDB-backed long-term memory plugin with auto-recall, auto-capture, and vector search. +- **[moonshot](/plugins/reference/moonshot)** (`@openclaw/moonshot-provider`) - npm; ClawHub: `clawhub:@openclaw/moonshot-provider`. Adds Moonshot model provider support to OpenClaw. + - **[msteams](/plugins/reference/msteams)** (`@openclaw/msteams`) - npm; ClawHub. OpenClaw Microsoft Teams channel plugin for bot conversations. - **[nextcloud-talk](/plugins/reference/nextcloud-talk)** (`@openclaw/nextcloud-talk`) - npm; ClawHub. OpenClaw Nextcloud Talk channel plugin for conversations. @@ -291,22 +275,38 @@ Each entry lists the package, distribution route, and description. - **[raft](/plugins/reference/raft)** (`@openclaw/raft`) - npm; ClawHub. OpenClaw Raft channel plugin for secure CLI wake bridges. +- **[searxng](/plugins/reference/searxng)** (`@openclaw/searxng-plugin`) - npm; ClawHub: `clawhub:@openclaw/searxng-plugin`. Adds web search provider support. + +- **[signal](/plugins/reference/signal)** (`@openclaw/signal`) - npm; ClawHub: `clawhub:@openclaw/signal`. Adds the Signal channel surface for sending and receiving OpenClaw messages. + - **[slack](/plugins/reference/slack)** (`@openclaw/slack`) - npm; ClawHub. OpenClaw Slack channel plugin for channels, DMs, commands, and app events. +- **[sms](/plugins/reference/sms)** (`@openclaw/sms`) - npm; ClawHub: `clawhub:@openclaw/sms`. Twilio SMS channel plugin for OpenClaw text messages. + - **[stepfun](/plugins/reference/stepfun)** (`@openclaw/stepfun-provider`) - npm; ClawHub: `clawhub:@openclaw/stepfun-provider`. Adds StepFun, StepFun Plan model provider support to OpenClaw. - **[synology-chat](/plugins/reference/synology-chat)** (`@openclaw/synology-chat`) - npm; ClawHub. Synology Chat channel plugin for OpenClaw channels and direct messages. +- **[tavily](/plugins/reference/tavily)** (`@openclaw/tavily-plugin`) - npm; ClawHub: `clawhub:@openclaw/tavily-plugin`. Adds agent-callable tools. Adds web search provider support. + +- **[tencent](/plugins/reference/tencent)** (`@openclaw/tencent-provider`) - npm; ClawHub: `clawhub:@openclaw/tencent-provider`. Adds Tencent TokenHub model provider support to OpenClaw. + - **[tlon](/plugins/reference/tlon)** (`@openclaw/tlon`) - npm; ClawHub. OpenClaw Tlon/Urbit channel plugin for chat workflows. - **[tokenjuice](/plugins/reference/tokenjuice)** (`@openclaw/tokenjuice`) - npm; ClawHub: `clawhub:@openclaw/tokenjuice`. Compacts exec and bash tool results with tokenjuice reducers. - **[twitch](/plugins/reference/twitch)** (`@openclaw/twitch`) - npm; ClawHub. OpenClaw Twitch channel plugin for chat and moderation workflows. +- **[venice](/plugins/reference/venice)** (`@openclaw/venice-provider`) - npm; ClawHub: `clawhub:@openclaw/venice-provider`. Adds Venice model provider support to OpenClaw. + +- **[vercel-ai-gateway](/plugins/reference/vercel-ai-gateway)** (`@openclaw/vercel-ai-gateway-provider`) - npm; ClawHub: `clawhub:@openclaw/vercel-ai-gateway-provider`. Adds Vercel AI Gateway model provider support to OpenClaw. + - **[voice-call](/plugins/reference/voice-call)** (`@openclaw/voice-call`) - npm; ClawHub. OpenClaw voice-call plugin for Twilio, Telnyx, and Plivo phone calls. - **[whatsapp](/plugins/reference/whatsapp)** (`@openclaw/whatsapp`) - ClawHub: `clawhub:@openclaw/whatsapp`; npm. OpenClaw WhatsApp channel plugin for WhatsApp Web chats. +- **[zai](/plugins/reference/zai)** (`@openclaw/zai-provider`) - npm; ClawHub: `clawhub:@openclaw/zai-provider`. Adds Z.AI model provider support to OpenClaw. + - **[zalo](/plugins/reference/zalo)** (`@openclaw/zalo`) - npm; ClawHub. OpenClaw Zalo channel plugin for bot and webhook chats. - **[zalouser](/plugins/reference/zalouser)** (`@openclaw/zalouser`) - npm; ClawHub. OpenClaw Zalo Personal Account plugin via native zca-js integration. diff --git a/docs/plugins/reference/clickclack.md b/docs/plugins/reference/clickclack.md index f11fa52610a..9ef203b7534 100644 --- a/docs/plugins/reference/clickclack.md +++ b/docs/plugins/reference/clickclack.md @@ -12,7 +12,7 @@ Adds the Clickclack channel surface for sending and receiving OpenClaw messages. ## Distribution - Package: `@openclaw/clickclack` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/clickclack` ## Surface diff --git a/docs/plugins/reference/fireworks.md b/docs/plugins/reference/fireworks.md index f009fbfc195..f4cf6c89897 100644 --- a/docs/plugins/reference/fireworks.md +++ b/docs/plugins/reference/fireworks.md @@ -12,7 +12,7 @@ Adds Fireworks model provider support to OpenClaw. ## Distribution - Package: `@openclaw/fireworks-provider` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/fireworks-provider` ## Surface diff --git a/docs/plugins/reference/irc.md b/docs/plugins/reference/irc.md index a31d8a3c9d3..b3bea9c8cd7 100644 --- a/docs/plugins/reference/irc.md +++ b/docs/plugins/reference/irc.md @@ -12,7 +12,7 @@ Adds the IRC channel surface for sending and receiving OpenClaw messages. ## Distribution - Package: `@openclaw/irc` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/irc` ## Surface diff --git a/docs/plugins/reference/mattermost.md b/docs/plugins/reference/mattermost.md index f8e0cc23faf..da271bdce30 100644 --- a/docs/plugins/reference/mattermost.md +++ b/docs/plugins/reference/mattermost.md @@ -12,7 +12,7 @@ Adds the Mattermost channel surface for sending and receiving OpenClaw messages. ## Distribution - Package: `@openclaw/mattermost` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/mattermost` ## Surface diff --git a/docs/plugins/reference/moonshot.md b/docs/plugins/reference/moonshot.md index cb320b53667..37670f81e31 100644 --- a/docs/plugins/reference/moonshot.md +++ b/docs/plugins/reference/moonshot.md @@ -12,7 +12,7 @@ Adds Moonshot model provider support to OpenClaw. ## Distribution - Package: `@openclaw/moonshot-provider` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/moonshot-provider` ## Surface diff --git a/docs/plugins/reference/searxng.md b/docs/plugins/reference/searxng.md index 2e9ad813790..76a09be4383 100644 --- a/docs/plugins/reference/searxng.md +++ b/docs/plugins/reference/searxng.md @@ -12,7 +12,7 @@ Adds web search provider support. ## Distribution - Package: `@openclaw/searxng-plugin` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/searxng-plugin` ## Surface diff --git a/docs/plugins/reference/signal.md b/docs/plugins/reference/signal.md index 045315b425f..abb11354a21 100644 --- a/docs/plugins/reference/signal.md +++ b/docs/plugins/reference/signal.md @@ -12,7 +12,7 @@ Adds the Signal channel surface for sending and receiving OpenClaw messages. ## Distribution - Package: `@openclaw/signal` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/signal` ## Surface diff --git a/docs/plugins/reference/sms.md b/docs/plugins/reference/sms.md index 714d4078b59..4e6af3c6ea5 100644 --- a/docs/plugins/reference/sms.md +++ b/docs/plugins/reference/sms.md @@ -12,7 +12,7 @@ Twilio SMS channel plugin for OpenClaw text messages. ## Distribution - Package: `@openclaw/sms` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/sms` ## Surface diff --git a/docs/plugins/reference/tavily.md b/docs/plugins/reference/tavily.md index 6e56f328076..79fd4b7ccd6 100644 --- a/docs/plugins/reference/tavily.md +++ b/docs/plugins/reference/tavily.md @@ -12,7 +12,7 @@ Adds agent-callable tools. Adds web search provider support. ## Distribution - Package: `@openclaw/tavily-plugin` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/tavily-plugin` ## Surface diff --git a/docs/plugins/reference/tencent.md b/docs/plugins/reference/tencent.md index 652f109e97f..7921212b5d6 100644 --- a/docs/plugins/reference/tencent.md +++ b/docs/plugins/reference/tencent.md @@ -12,7 +12,7 @@ Adds Tencent TokenHub model provider support to OpenClaw. ## Distribution - Package: `@openclaw/tencent-provider` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/tencent-provider` ## Surface diff --git a/docs/plugins/reference/venice.md b/docs/plugins/reference/venice.md index 648080095fa..389d639b088 100644 --- a/docs/plugins/reference/venice.md +++ b/docs/plugins/reference/venice.md @@ -12,7 +12,7 @@ Adds Venice model provider support to OpenClaw. ## Distribution - Package: `@openclaw/venice-provider` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/venice-provider` ## Surface diff --git a/docs/plugins/reference/vercel-ai-gateway.md b/docs/plugins/reference/vercel-ai-gateway.md index 8976a4d2fe1..1f8d6a8fff6 100644 --- a/docs/plugins/reference/vercel-ai-gateway.md +++ b/docs/plugins/reference/vercel-ai-gateway.md @@ -12,7 +12,7 @@ Adds Vercel AI Gateway model provider support to OpenClaw. ## Distribution - Package: `@openclaw/vercel-ai-gateway-provider` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/vercel-ai-gateway-provider` ## Surface diff --git a/docs/plugins/reference/zai.md b/docs/plugins/reference/zai.md index a6c8d14a2b6..b89cbf93beb 100644 --- a/docs/plugins/reference/zai.md +++ b/docs/plugins/reference/zai.md @@ -12,7 +12,7 @@ Adds Z.AI model provider support to OpenClaw. ## Distribution - Package: `@openclaw/zai-provider` -- Install route: included in OpenClaw +- Install route: npm; ClawHub: `clawhub:@openclaw/zai-provider` ## Surface diff --git a/docs/providers/fireworks.md b/docs/providers/fireworks.md index a759bbc7c08..ce10f132578 100644 --- a/docs/providers/fireworks.md +++ b/docs/providers/fireworks.md @@ -7,12 +7,12 @@ read_when: - You are debugging Kimi thinking-off behavior on Fireworks --- -[Fireworks](https://fireworks.ai) exposes open-weight and routed models through an OpenAI-compatible API. OpenClaw includes a bundled Fireworks provider plugin that ships with two pre-cataloged Kimi models and accepts any Fireworks model or router id at runtime. +[Fireworks](https://fireworks.ai) exposes open-weight and routed models through an OpenAI-compatible API. Install the official Fireworks provider plugin to use two pre-cataloged Kimi models and any Fireworks model or router id at runtime. | Property | Value | | --------------- | ------------------------------------------------------ | | Provider id | `fireworks` (alias: `fireworks-ai`) | -| Plugin | bundled, `enabledByDefault: true` | +| Package | `@openclaw/fireworks-provider` | | Auth env var | `FIREWORKS_API_KEY` | | Onboarding flag | `--auth-choice fireworks-api-key` | | Direct CLI flag | `--fireworks-api-key ` | @@ -24,6 +24,11 @@ read_when: ## Getting started + + ```bash + openclaw plugins install @openclaw/fireworks-provider + ``` + @@ -108,7 +113,7 @@ OpenClaw accepts any Fireworks model or router id at runtime. Use the exact id s - Fireworks K2.6 returns a 400 if the request carries `reasoning_*` parameters even though Kimi supports thinking through Moonshot's own API. The bundled policy (`extensions/fireworks/thinking-policy.ts`) advertises only the `off` thinking level for Kimi model ids, so manual `/think` switches and provider-policy surfaces stay aligned with the runtime contract. + Fireworks K2.6 returns a 400 if the request carries `reasoning_*` parameters even though Kimi supports thinking through Moonshot's own API. The provider policy (`extensions/fireworks/thinking-policy.ts`) advertises only the `off` thinking level for Kimi model ids, so manual `/think` switches and provider-policy surfaces stay aligned with the runtime contract. To use Kimi reasoning end-to-end, configure the [Moonshot provider](/providers/moonshot) and route the same model through it. diff --git a/docs/providers/moonshot.md b/docs/providers/moonshot.md index 4d843bc0282..e6835a96285 100644 --- a/docs/providers/moonshot.md +++ b/docs/providers/moonshot.md @@ -30,7 +30,7 @@ Moonshot and Kimi Coding are **separate providers**. Keys are not interchangeabl [//]: # "moonshot-kimi-k2-ids:end" -Bundled cost estimates for current Moonshot-hosted K2 models use Moonshot's +Catalog cost estimates for current Moonshot-hosted K2 models use Moonshot's published pay-as-you-go rates: Kimi K2.7 Code is $0.19/MTok cache hit, $0.95/MTok input, and $4.00/MTok output; Kimi K2.6 is $0.16/MTok cache hit, $0.95/MTok input, and $4.00/MTok output; Kimi K2.5 is $0.10/MTok cache hit, @@ -213,6 +213,11 @@ Choose your provider and follow the setup steps. + + ```bash + openclaw plugins install @openclaw/kimi-provider + ``` + ```bash openclaw onboard --auth-choice kimi-code-api-key @@ -257,8 +262,7 @@ Choose your provider and follow the setup steps. ## Kimi web search -OpenClaw also ships **Kimi** as a `web_search` provider, backed by Moonshot web -search. +The Moonshot plugin also registers **Kimi** as a `web_search` provider, backed by Moonshot web search. @@ -405,7 +409,7 @@ Config lives under `plugins.entries.moonshot.config.webSearch`: capabilities, so compatible custom provider ids targeting the same native Moonshot hosts inherit the same streaming-usage behavior. - With the bundled K2.6 pricing, streamed usage that includes input, output, + With the catalog K2.6 pricing, streamed usage that includes input, output, and cache-read tokens is also converted into local estimated USD cost for `/status`, `/usage full`, `/usage cost`, and transcript-backed session accounting. diff --git a/docs/providers/tencent.md b/docs/providers/tencent.md index 7b425ed27c9..9f5bbffd3bf 100644 --- a/docs/providers/tencent.md +++ b/docs/providers/tencent.md @@ -6,12 +6,12 @@ read_when: - You need the TokenHub API key setup --- -Tencent Cloud ships as a bundled provider plugin in OpenClaw. It gives access to Tencent Hy3 preview through the TokenHub endpoint (`tencent-tokenhub`) using an OpenAI-compatible API. +Install the official Tencent Cloud provider plugin to access Tencent Hy3 preview through the TokenHub endpoint (`tencent-tokenhub`) using an OpenAI-compatible API. | Property | Value | | ---------------- | ----------------------------------------------------- | | Provider id | `tencent-tokenhub` | -| Plugin | bundled, `enabledByDefault: true` | +| Package | `@openclaw/tencent-provider` | | Auth env var | `TOKENHUB_API_KEY` | | Onboarding flag | `--auth-choice tokenhub-api-key` | | Direct CLI flag | `--tokenhub-api-key ` | @@ -23,6 +23,11 @@ Tencent Cloud ships as a bundled provider plugin in OpenClaw. It gives access to ## Quick start + + ```bash + openclaw plugins install @openclaw/tencent-provider + ``` + Create an API key in Tencent Cloud TokenHub. If you choose a limited access scope for the key, include **Hy3 preview** in the allowed models. @@ -78,7 +83,7 @@ Hy3 preview is Tencent Hunyuan's large MoE language model for reasoning, long-co ## Tiered pricing -The bundled catalog ships tiered cost metadata that scales with input window length, so cost estimates are populated without manual overrides. +The provider catalog ships tiered cost metadata that scales with input window length, so cost estimates are populated without manual overrides. | Input tokens range | Input rate | Output rate | Cache read | | ------------------ | ---------- | ----------- | ---------- | diff --git a/docs/providers/venice.md b/docs/providers/venice.md index 92e480d09f6..03adaae8f9e 100644 --- a/docs/providers/venice.md +++ b/docs/providers/venice.md @@ -42,6 +42,11 @@ Anonymized models are **not** fully private. Venice strips metadata before forwa ## Getting started + + ```bash + openclaw plugins install @openclaw/venice-provider + ``` + 1. Sign up at [venice.ai](https://venice.ai) 2. Go to **Settings > API Keys > Create new key** diff --git a/docs/providers/vercel-ai-gateway.md b/docs/providers/vercel-ai-gateway.md index 65febfbdd66..7463d6485f3 100644 --- a/docs/providers/vercel-ai-gateway.md +++ b/docs/providers/vercel-ai-gateway.md @@ -9,12 +9,13 @@ read_when: The [Vercel AI Gateway](https://vercel.com/ai-gateway) provides a unified API to access hundreds of models through a single endpoint. -| Property | Value | -| ------------- | -------------------------------- | -| Provider | `vercel-ai-gateway` | -| Auth | `AI_GATEWAY_API_KEY` | -| API | Anthropic Messages compatible | -| Model catalog | Auto-discovered via `/v1/models` | +| Property | Value | +| ------------- | -------------------------------------- | +| Provider | `vercel-ai-gateway` | +| Package | `@openclaw/vercel-ai-gateway-provider` | +| Auth | `AI_GATEWAY_API_KEY` | +| API | Anthropic Messages compatible | +| Model catalog | Auto-discovered via `/v1/models` | OpenClaw auto-discovers the Gateway `/v1/models` catalog, so @@ -26,6 +27,11 @@ OpenClaw auto-discovers the Gateway `/v1/models` catalog, so ## Getting started + + ```bash + openclaw plugins install @openclaw/vercel-ai-gateway-provider + ``` + Run onboarding and choose the AI Gateway auth option: diff --git a/docs/providers/zai.md b/docs/providers/zai.md index 99fcb0d10ff..0094654d8b3 100644 --- a/docs/providers/zai.md +++ b/docs/providers/zai.md @@ -13,6 +13,7 @@ OpenClaw uses the `zai` provider with a Z.AI API key. | Property | Value | | -------- | -------------------------------------------- | | Provider | `zai` | +| Package | `@openclaw/zai-provider` | | Auth | `ZAI_API_KEY` (legacy alias: `Z_AI_API_KEY`) | | API | Z.AI Chat Completions (Bearer auth) | @@ -23,6 +24,12 @@ refs such as `zai/glm-5.2`: provider `zai`, model id `glm-5.2`. ## Getting started +Install the provider plugin first: + +```bash +openclaw plugins install @openclaw/zai-provider +``` + **Best for:** most users. OpenClaw probes supported Z.AI endpoints with your API key and applies the correct base URL automatically. @@ -96,7 +103,7 @@ you want to force a specific Coding Plan or general API surface. ## Built-in catalog -OpenClaw ships the bundled `zai` provider catalog in the plugin manifest, so read-only +The `zai` provider plugin ships its catalog in the plugin manifest, so read-only listing can show known GLM rows without loading provider runtime: ```bash @@ -143,7 +150,7 @@ known to your installed version. - Unknown `glm-5*` ids still forward-resolve on the bundled provider path by + Unknown `glm-5*` ids still forward-resolve on the provider path by synthesizing provider-owned metadata from the `glm-4.7` template when the id matches the current GLM-5 family shape. @@ -200,7 +207,7 @@ known to your installed version. - The bundled Z.AI plugin registers image understanding. + The Z.AI plugin registers image understanding. | Property | Value | | ------------- | ----------- | diff --git a/docs/tools/searxng-search.md b/docs/tools/searxng-search.md index eb364007f64..d654f1ab0e3 100644 --- a/docs/tools/searxng-search.md +++ b/docs/tools/searxng-search.md @@ -20,6 +20,11 @@ Advantages: ## Setup + + ```bash + openclaw plugins install @openclaw/searxng-plugin + ``` + ```bash docker run -d -p 8888:8080 searxng/searxng diff --git a/docs/tools/tavily.md b/docs/tools/tavily.md index dd73eedddd0..96e30f7438b 100644 --- a/docs/tools/tavily.md +++ b/docs/tools/tavily.md @@ -15,16 +15,22 @@ title: "Tavily" Tavily returns structured results optimized for LLM consumption with configurable search depth, topic filtering, domain filters, AI-generated answer summaries, and content extraction from URLs (including JavaScript-rendered pages). -| Property | Value | -| ------------- | ----------------------------------- | -| Plugin id | `tavily` | -| Auth | `TAVILY_API_KEY` or config `apiKey` | -| Base URL | `https://api.tavily.com` (default) | -| Bundled tools | `tavily_search`, `tavily_extract` | +| Property | Value | +| --------- | ----------------------------------- | +| Plugin id | `tavily` | +| Package | `@openclaw/tavily-plugin` | +| Auth | `TAVILY_API_KEY` or config `apiKey` | +| Base URL | `https://api.tavily.com` (default) | +| Tools | `tavily_search`, `tavily_extract` | ## Getting started + + ```bash + openclaw plugins install @openclaw/tavily-plugin + ``` + Create a Tavily account at [tavily.com](https://tavily.com), then generate an API key in the dashboard. @@ -60,7 +66,7 @@ Tavily returns structured results optimized for LLM consumption with configurabl -Choosing Tavily in onboarding or `openclaw configure --section web` enables the bundled Tavily plugin automatically. +Choosing Tavily in onboarding or `openclaw configure --section web` installs and enables the official Tavily plugin when needed. ## Tool reference diff --git a/extensions/clickclack/README.md b/extensions/clickclack/README.md new file mode 100644 index 00000000000..e1709b32a90 --- /dev/null +++ b/extensions/clickclack/README.md @@ -0,0 +1,13 @@ +# ClickClack OpenClaw channel + +Official OpenClaw channel plugin for ClickClack. + +## Install + +```sh +openclaw plugins install @openclaw/clickclack +``` + +## Docs + +See `docs/channels/clickclack.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/channels/clickclack`. diff --git a/extensions/clickclack/npm-shrinkwrap.json b/extensions/clickclack/npm-shrinkwrap.json new file mode 100644 index 00000000000..20fd00ed397 --- /dev/null +++ b/extensions/clickclack/npm-shrinkwrap.json @@ -0,0 +1,54 @@ +{ + "name": "@openclaw/clickclack", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/clickclack", + "version": "2026.6.9", + "dependencies": { + "ws": "8.21.0", + "zod": "4.4.3" + }, + "peerDependencies": { + "openclaw": ">=2026.6.9" + }, + "peerDependenciesMeta": { + "openclaw": { + "optional": true + } + } + }, + "node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/extensions/clickclack/package.json b/extensions/clickclack/package.json index 2492b977e34..65252e6c8e4 100644 --- a/extensions/clickclack/package.json +++ b/extensions/clickclack/package.json @@ -1,13 +1,12 @@ { "name": "@openclaw/clickclack", "version": "2026.6.9", - "private": true, "description": "OpenClaw ClickClack channel plugin", "type": "module", "exports": { - ".": "./index.ts", - "./api.js": "./api.ts", - "./runtime-api.js": "./runtime-api.ts" + ".": "./dist/index.js", + "./api.js": "./dist/api.js", + "./runtime-api.js": "./dist/runtime-api.js" }, "dependencies": { "ws": "8.21.0", @@ -45,6 +44,28 @@ "nativeCommandsAutoEnabled": false, "nativeSkillsAutoEnabled": false } + }, + "install": { + "clawhubSpec": "clawhub:@openclaw/clickclack", + "npmSpec": "@openclaw/clickclack", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true + }, + "compat": { + "pluginApi": ">=2026.6.9" + }, + "build": { + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true } + }, + "repository": { + "type": "git", + "url": "https://github.com/openclaw/openclaw" } } diff --git a/extensions/fireworks/README.md b/extensions/fireworks/README.md new file mode 100644 index 00000000000..5a773057e27 --- /dev/null +++ b/extensions/fireworks/README.md @@ -0,0 +1,13 @@ +# Fireworks OpenClaw provider + +Official OpenClaw provider plugin for Fireworks. + +## Install + +```sh +openclaw plugins install @openclaw/fireworks-provider +``` + +## Docs + +See `docs/providers/fireworks.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/providers/fireworks`. diff --git a/extensions/fireworks/npm-shrinkwrap.json b/extensions/fireworks/npm-shrinkwrap.json new file mode 100644 index 00000000000..5f6b7b79b5b --- /dev/null +++ b/extensions/fireworks/npm-shrinkwrap.json @@ -0,0 +1,12 @@ +{ + "name": "@openclaw/fireworks-provider", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/fireworks-provider", + "version": "2026.6.9" + } + } +} diff --git a/extensions/fireworks/package.json b/extensions/fireworks/package.json index 15c82a22050..1ac23b703a9 100644 --- a/extensions/fireworks/package.json +++ b/extensions/fireworks/package.json @@ -1,7 +1,6 @@ { "name": "@openclaw/fireworks-provider", "version": "2026.6.9", - "private": true, "description": "OpenClaw Fireworks provider plugin", "type": "module", "devDependencies": { @@ -10,6 +9,27 @@ "openclaw": { "extensions": [ "./index.ts" - ] + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/fireworks-provider", + "npmSpec": "@openclaw/fireworks-provider", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9" + }, + "compat": { + "pluginApi": ">=2026.6.9" + }, + "build": { + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true + } + }, + "repository": { + "type": "git", + "url": "https://github.com/openclaw/openclaw" } } diff --git a/extensions/irc/README.md b/extensions/irc/README.md new file mode 100644 index 00000000000..22506228154 --- /dev/null +++ b/extensions/irc/README.md @@ -0,0 +1,13 @@ +# IRC OpenClaw channel + +Official OpenClaw channel plugin for IRC. + +## Install + +```sh +openclaw plugins install @openclaw/irc +``` + +## Docs + +See `docs/channels/irc.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/channels/irc`. diff --git a/extensions/irc/npm-shrinkwrap.json b/extensions/irc/npm-shrinkwrap.json new file mode 100644 index 00000000000..c9bcec78565 --- /dev/null +++ b/extensions/irc/npm-shrinkwrap.json @@ -0,0 +1,24 @@ +{ + "name": "@openclaw/irc", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/irc", + "version": "2026.6.9", + "dependencies": { + "zod": "4.4.3" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/extensions/irc/package.json b/extensions/irc/package.json index ea195553d62..a722374c782 100644 --- a/extensions/irc/package.json +++ b/extensions/irc/package.json @@ -11,7 +11,11 @@ "./index.ts" ], "install": { - "minHostVersion": ">=2026.4.10" + "clawhubSpec": "clawhub:@openclaw/irc", + "npmSpec": "@openclaw/irc", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true }, "setupEntry": "./setup-entry.ts", "channel": { @@ -36,9 +40,24 @@ "specifier": "./configured-state", "exportName": "hasIrcConfiguredState" } + }, + "compat": { + "pluginApi": ">=2026.6.9" + }, + "build": { + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true } }, "dependencies": { "zod": "4.4.3" + }, + "repository": { + "type": "git", + "url": "https://github.com/openclaw/openclaw" } } diff --git a/extensions/mattermost/README.md b/extensions/mattermost/README.md new file mode 100644 index 00000000000..acacb7195bb --- /dev/null +++ b/extensions/mattermost/README.md @@ -0,0 +1,13 @@ +# Mattermost OpenClaw channel + +Official OpenClaw channel plugin for Mattermost. + +## Install + +```sh +openclaw plugins install @openclaw/mattermost +``` + +## Docs + +See `docs/channels/mattermost.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/channels/mattermost`. diff --git a/extensions/mattermost/npm-shrinkwrap.json b/extensions/mattermost/npm-shrinkwrap.json new file mode 100644 index 00000000000..28dd679e585 --- /dev/null +++ b/extensions/mattermost/npm-shrinkwrap.json @@ -0,0 +1,54 @@ +{ + "name": "@openclaw/mattermost", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/mattermost", + "version": "2026.6.9", + "dependencies": { + "ws": "8.21.0", + "zod": "4.4.3" + }, + "peerDependencies": { + "openclaw": ">=2026.6.9" + }, + "peerDependenciesMeta": { + "openclaw": { + "optional": true + } + } + }, + "node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/extensions/mattermost/package.json b/extensions/mattermost/package.json index 2cdc02d06e0..3cd9fa731a5 100644 --- a/extensions/mattermost/package.json +++ b/extensions/mattermost/package.json @@ -38,7 +38,22 @@ "order": 65 }, "install": { - "minHostVersion": ">=2026.4.10" + "clawhubSpec": "clawhub:@openclaw/mattermost", + "npmSpec": "@openclaw/mattermost", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true + }, + "compat": { + "pluginApi": ">=2026.6.9" + }, + "build": { + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true } } } diff --git a/extensions/moonshot/README.md b/extensions/moonshot/README.md new file mode 100644 index 00000000000..279266cc2f5 --- /dev/null +++ b/extensions/moonshot/README.md @@ -0,0 +1,13 @@ +# Moonshot OpenClaw provider + +Official OpenClaw provider plugin for Moonshot. + +## Install + +```sh +openclaw plugins install @openclaw/moonshot-provider +``` + +## Docs + +See `docs/providers/moonshot.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/providers/moonshot`. diff --git a/extensions/moonshot/npm-shrinkwrap.json b/extensions/moonshot/npm-shrinkwrap.json new file mode 100644 index 00000000000..4de713fb912 --- /dev/null +++ b/extensions/moonshot/npm-shrinkwrap.json @@ -0,0 +1,12 @@ +{ + "name": "@openclaw/moonshot-provider", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/moonshot-provider", + "version": "2026.6.9" + } + } +} diff --git a/extensions/moonshot/package.json b/extensions/moonshot/package.json index 70c4b0ff610..3963435191e 100644 --- a/extensions/moonshot/package.json +++ b/extensions/moonshot/package.json @@ -1,7 +1,6 @@ { "name": "@openclaw/moonshot-provider", "version": "2026.6.9", - "private": true, "description": "OpenClaw Moonshot provider plugin", "type": "module", "devDependencies": { @@ -10,6 +9,27 @@ "openclaw": { "extensions": [ "./index.ts" - ] + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/moonshot-provider", + "npmSpec": "@openclaw/moonshot-provider", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9" + }, + "compat": { + "pluginApi": ">=2026.6.9" + }, + "build": { + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true + } + }, + "repository": { + "type": "git", + "url": "https://github.com/openclaw/openclaw" } } diff --git a/extensions/searxng/README.md b/extensions/searxng/README.md new file mode 100644 index 00000000000..8eaa6684ed9 --- /dev/null +++ b/extensions/searxng/README.md @@ -0,0 +1,13 @@ +# SearXNG OpenClaw plugin + +Official OpenClaw plugin for SearXNG. + +## Install + +```sh +openclaw plugins install @openclaw/searxng-plugin +``` + +## Docs + +See `docs/tools/searxng-search.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/tools/searxng-search`. diff --git a/extensions/searxng/npm-shrinkwrap.json b/extensions/searxng/npm-shrinkwrap.json new file mode 100644 index 00000000000..098d5721c9d --- /dev/null +++ b/extensions/searxng/npm-shrinkwrap.json @@ -0,0 +1,12 @@ +{ + "name": "@openclaw/searxng-plugin", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/searxng-plugin", + "version": "2026.6.9" + } + } +} diff --git a/extensions/searxng/package.json b/extensions/searxng/package.json index 264a2db1304..9f36a5599d2 100644 --- a/extensions/searxng/package.json +++ b/extensions/searxng/package.json @@ -1,7 +1,6 @@ { "name": "@openclaw/searxng-plugin", "version": "2026.6.9", - "private": true, "description": "OpenClaw SearXNG plugin", "type": "module", "devDependencies": { @@ -10,6 +9,28 @@ "openclaw": { "extensions": [ "./index.ts" - ] + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/searxng-plugin", + "npmSpec": "@openclaw/searxng-plugin", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true + }, + "compat": { + "pluginApi": ">=2026.6.9" + }, + "build": { + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true + } + }, + "repository": { + "type": "git", + "url": "https://github.com/openclaw/openclaw" } } diff --git a/extensions/signal/README.md b/extensions/signal/README.md new file mode 100644 index 00000000000..33b41736eec --- /dev/null +++ b/extensions/signal/README.md @@ -0,0 +1,13 @@ +# Signal OpenClaw channel + +Official OpenClaw channel plugin for Signal. + +## Install + +```sh +openclaw plugins install @openclaw/signal +``` + +## Docs + +See `docs/channels/signal.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/channels/signal`. diff --git a/extensions/signal/npm-shrinkwrap.json b/extensions/signal/npm-shrinkwrap.json new file mode 100644 index 00000000000..de8ef785afc --- /dev/null +++ b/extensions/signal/npm-shrinkwrap.json @@ -0,0 +1,36 @@ +{ + "name": "@openclaw/signal", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/signal", + "version": "2026.6.9", + "dependencies": { + "ws": "8.21.0" + } + }, + "node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/extensions/signal/package.json b/extensions/signal/package.json index cc172011b6c..a477269a931 100644 --- a/extensions/signal/package.json +++ b/extensions/signal/package.json @@ -1,7 +1,6 @@ { "name": "@openclaw/signal", "version": "2026.6.9", - "private": true, "description": "OpenClaw Signal channel plugin", "type": "module", "dependencies": { @@ -39,6 +38,28 @@ "description": "Signal HTTP daemon port" } ] + }, + "install": { + "clawhubSpec": "clawhub:@openclaw/signal", + "npmSpec": "@openclaw/signal", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true + }, + "compat": { + "pluginApi": ">=2026.6.9" + }, + "build": { + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true } + }, + "repository": { + "type": "git", + "url": "https://github.com/openclaw/openclaw" } } diff --git a/extensions/sms/README.md b/extensions/sms/README.md new file mode 100644 index 00000000000..46a99c0983a --- /dev/null +++ b/extensions/sms/README.md @@ -0,0 +1,13 @@ +# SMS OpenClaw channel + +Official OpenClaw channel plugin for SMS. + +## Install + +```sh +openclaw plugins install @openclaw/sms +``` + +## Docs + +See `docs/channels/sms.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/channels/sms`. diff --git a/extensions/sms/npm-shrinkwrap.json b/extensions/sms/npm-shrinkwrap.json new file mode 100644 index 00000000000..e5b7f30e265 --- /dev/null +++ b/extensions/sms/npm-shrinkwrap.json @@ -0,0 +1,24 @@ +{ + "name": "@openclaw/sms", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/sms", + "version": "2026.6.9", + "dependencies": { + "zod": "4.4.3" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/extensions/sms/package.json b/extensions/sms/package.json index 83aca319e36..e9450e4c0da 100644 --- a/extensions/sms/package.json +++ b/extensions/sms/package.json @@ -6,7 +6,6 @@ "type": "git", "url": "https://github.com/openclaw/openclaw" }, - "private": true, "type": "module", "dependencies": { "zod": "4.4.3" @@ -33,7 +32,19 @@ "pluginApi": ">=2026.6.9" }, "build": { - "openclawVersion": "2026.6.9" + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "install": { + "clawhubSpec": "clawhub:@openclaw/sms", + "npmSpec": "@openclaw/sms", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true } } } diff --git a/extensions/tavily/README.md b/extensions/tavily/README.md new file mode 100644 index 00000000000..04918665fa3 --- /dev/null +++ b/extensions/tavily/README.md @@ -0,0 +1,13 @@ +# Tavily OpenClaw plugin + +Official OpenClaw plugin for Tavily. + +## Install + +```sh +openclaw plugins install @openclaw/tavily-plugin +``` + +## Docs + +See `docs/tools/tavily.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/tools/tavily`. diff --git a/extensions/tavily/npm-shrinkwrap.json b/extensions/tavily/npm-shrinkwrap.json new file mode 100644 index 00000000000..e80cfc4fe46 --- /dev/null +++ b/extensions/tavily/npm-shrinkwrap.json @@ -0,0 +1,21 @@ +{ + "name": "@openclaw/tavily-plugin", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/tavily-plugin", + "version": "2026.6.9", + "dependencies": { + "typebox": "1.1.39" + } + }, + "node_modules/typebox": { + "version": "1.1.39", + "resolved": "https://registry.npmjs.org/typebox/-/typebox-1.1.39.tgz", + "integrity": "sha512-vj0afVtOfLQvv0GR0VxVagYxsXN64btL7Z9XoaG0ZggH3mruMMkOO6hXdgMsjCY3shZgEvooAWVeznQVs5c43w==", + "license": "MIT" + } + } +} diff --git a/extensions/tavily/package.json b/extensions/tavily/package.json index fa5e6699f87..0b6c2d7d81b 100644 --- a/extensions/tavily/package.json +++ b/extensions/tavily/package.json @@ -1,7 +1,6 @@ { "name": "@openclaw/tavily-plugin", "version": "2026.6.9", - "private": true, "description": "OpenClaw Tavily plugin", "type": "module", "dependencies": { @@ -13,6 +12,28 @@ "openclaw": { "extensions": [ "./index.ts" - ] + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/tavily-plugin", + "npmSpec": "@openclaw/tavily-plugin", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true + }, + "compat": { + "pluginApi": ">=2026.6.9" + }, + "build": { + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true + } + }, + "repository": { + "type": "git", + "url": "https://github.com/openclaw/openclaw" } } diff --git a/extensions/tencent/README.md b/extensions/tencent/README.md new file mode 100644 index 00000000000..f878646bf13 --- /dev/null +++ b/extensions/tencent/README.md @@ -0,0 +1,13 @@ +# Tencent Cloud OpenClaw provider + +Official OpenClaw provider plugin for Tencent Cloud. + +## Install + +```sh +openclaw plugins install @openclaw/tencent-provider +``` + +## Docs + +See `docs/providers/tencent.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/providers/tencent`. diff --git a/extensions/tencent/npm-shrinkwrap.json b/extensions/tencent/npm-shrinkwrap.json new file mode 100644 index 00000000000..fb89e915fd4 --- /dev/null +++ b/extensions/tencent/npm-shrinkwrap.json @@ -0,0 +1,12 @@ +{ + "name": "@openclaw/tencent-provider", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/tencent-provider", + "version": "2026.6.9" + } + } +} diff --git a/extensions/tencent/package.json b/extensions/tencent/package.json index e5ad807486c..45d04c1a519 100644 --- a/extensions/tencent/package.json +++ b/extensions/tencent/package.json @@ -1,7 +1,6 @@ { "name": "@openclaw/tencent-provider", "version": "2026.6.9", - "private": true, "description": "OpenClaw Tencent Cloud provider plugin (TokenHub + Token Plan)", "type": "module", "devDependencies": { @@ -10,6 +9,27 @@ "openclaw": { "extensions": [ "./index.ts" - ] + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/tencent-provider", + "npmSpec": "@openclaw/tencent-provider", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9" + }, + "compat": { + "pluginApi": ">=2026.6.9" + }, + "build": { + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true + } + }, + "repository": { + "type": "git", + "url": "https://github.com/openclaw/openclaw" } } diff --git a/extensions/venice/README.md b/extensions/venice/README.md new file mode 100644 index 00000000000..a0bbbe48158 --- /dev/null +++ b/extensions/venice/README.md @@ -0,0 +1,13 @@ +# Venice OpenClaw provider + +Official OpenClaw provider plugin for Venice. + +## Install + +```sh +openclaw plugins install @openclaw/venice-provider +``` + +## Docs + +See `docs/providers/venice.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/providers/venice`. diff --git a/extensions/venice/npm-shrinkwrap.json b/extensions/venice/npm-shrinkwrap.json new file mode 100644 index 00000000000..f884962c02c --- /dev/null +++ b/extensions/venice/npm-shrinkwrap.json @@ -0,0 +1,12 @@ +{ + "name": "@openclaw/venice-provider", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/venice-provider", + "version": "2026.6.9" + } + } +} diff --git a/extensions/venice/package.json b/extensions/venice/package.json index f7c450df2e7..82b0f54de6e 100644 --- a/extensions/venice/package.json +++ b/extensions/venice/package.json @@ -1,7 +1,6 @@ { "name": "@openclaw/venice-provider", "version": "2026.6.9", - "private": true, "description": "OpenClaw Venice provider plugin", "type": "module", "devDependencies": { @@ -10,6 +9,27 @@ "openclaw": { "extensions": [ "./index.ts" - ] + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/venice-provider", + "npmSpec": "@openclaw/venice-provider", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9" + }, + "compat": { + "pluginApi": ">=2026.6.9" + }, + "build": { + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true + } + }, + "repository": { + "type": "git", + "url": "https://github.com/openclaw/openclaw" } } diff --git a/extensions/vercel-ai-gateway/README.md b/extensions/vercel-ai-gateway/README.md new file mode 100644 index 00000000000..9bba9693dfc --- /dev/null +++ b/extensions/vercel-ai-gateway/README.md @@ -0,0 +1,13 @@ +# Vercel AI Gateway OpenClaw provider + +Official OpenClaw provider plugin for Vercel AI Gateway. + +## Install + +```sh +openclaw plugins install @openclaw/vercel-ai-gateway-provider +``` + +## Docs + +See `docs/providers/vercel-ai-gateway.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/providers/vercel-ai-gateway`. diff --git a/extensions/vercel-ai-gateway/npm-shrinkwrap.json b/extensions/vercel-ai-gateway/npm-shrinkwrap.json new file mode 100644 index 00000000000..3abbd632c52 --- /dev/null +++ b/extensions/vercel-ai-gateway/npm-shrinkwrap.json @@ -0,0 +1,12 @@ +{ + "name": "@openclaw/vercel-ai-gateway-provider", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/vercel-ai-gateway-provider", + "version": "2026.6.9" + } + } +} diff --git a/extensions/vercel-ai-gateway/package.json b/extensions/vercel-ai-gateway/package.json index 39f1bc2d01d..b25300bb031 100644 --- a/extensions/vercel-ai-gateway/package.json +++ b/extensions/vercel-ai-gateway/package.json @@ -1,7 +1,6 @@ { "name": "@openclaw/vercel-ai-gateway-provider", "version": "2026.6.9", - "private": true, "description": "OpenClaw Vercel AI Gateway provider plugin", "type": "module", "devDependencies": { @@ -10,6 +9,27 @@ "openclaw": { "extensions": [ "./index.ts" - ] + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/vercel-ai-gateway-provider", + "npmSpec": "@openclaw/vercel-ai-gateway-provider", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9" + }, + "compat": { + "pluginApi": ">=2026.6.9" + }, + "build": { + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true + } + }, + "repository": { + "type": "git", + "url": "https://github.com/openclaw/openclaw" } } diff --git a/extensions/zai/README.md b/extensions/zai/README.md new file mode 100644 index 00000000000..90705810043 --- /dev/null +++ b/extensions/zai/README.md @@ -0,0 +1,13 @@ +# Z.AI OpenClaw provider + +Official OpenClaw provider plugin for Z.AI. + +## Install + +```sh +openclaw plugins install @openclaw/zai-provider +``` + +## Docs + +See `docs/providers/zai.md` in the OpenClaw repository, or the published docs at `https://docs.openclaw.ai/providers/zai`. diff --git a/extensions/zai/npm-shrinkwrap.json b/extensions/zai/npm-shrinkwrap.json new file mode 100644 index 00000000000..782ddc01abf --- /dev/null +++ b/extensions/zai/npm-shrinkwrap.json @@ -0,0 +1,12 @@ +{ + "name": "@openclaw/zai-provider", + "version": "2026.6.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@openclaw/zai-provider", + "version": "2026.6.9" + } + } +} diff --git a/extensions/zai/package.json b/extensions/zai/package.json index 639e0d2ebcd..b3783d2bbde 100644 --- a/extensions/zai/package.json +++ b/extensions/zai/package.json @@ -1,7 +1,6 @@ { "name": "@openclaw/zai-provider", "version": "2026.6.9", - "private": true, "description": "OpenClaw Z.AI provider plugin", "type": "module", "devDependencies": { @@ -10,6 +9,27 @@ "openclaw": { "extensions": [ "./index.ts" - ] + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/zai-provider", + "npmSpec": "@openclaw/zai-provider", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9" + }, + "compat": { + "pluginApi": ">=2026.6.9" + }, + "build": { + "openclawVersion": "2026.6.9", + "bundledDist": false + }, + "release": { + "publishToClawHub": true, + "publishToNpm": true + } + }, + "repository": { + "type": "git", + "url": "https://github.com/openclaw/openclaw" } } diff --git a/package.json b/package.json index 900cf7a35eb..73b1c285777 100644 --- a/package.json +++ b/package.json @@ -85,6 +85,7 @@ "!dist/extensions/brave/**", "!dist/extensions/cerebras/**", "!dist/extensions/chutes/**", + "!dist/extensions/clickclack/**", "!dist/extensions/cloudflare-ai-gateway/**", "!dist/extensions/codex/**", "!dist/extensions/copilot/**", @@ -98,19 +99,23 @@ "!dist/extensions/exa/**", "!dist/extensions/feishu/**", "!dist/extensions/firecrawl/**", + "!dist/extensions/fireworks/**", "!dist/extensions/google-meet/**", "!dist/extensions/googlechat/**", "!dist/extensions/gmi/**", "!dist/extensions/gradium/**", "!dist/extensions/groq/**", "!dist/extensions/inworld/**", + "!dist/extensions/irc/**", "!dist/extensions/kilocode/**", "!dist/extensions/kimi-coding/**", "!dist/extensions/line/**", "!dist/extensions/llama-cpp/**", "!dist/extensions/lobster/**", + "!dist/extensions/mattermost/**", "!dist/extensions/memory-lancedb/**", "!dist/extensions/matrix/**", + "!dist/extensions/moonshot/**", "!dist/extensions/msteams/**", "!dist/extensions/nextcloud-talk/**", "!dist/extensions/nostr/**", @@ -125,14 +130,22 @@ "!dist/extensions/qa-matrix/**", "!dist/extensions/openshell/**", "!dist/extensions/qwen/**", + "!dist/extensions/searxng/**", + "!dist/extensions/signal/**", "!dist/extensions/slack/**", + "!dist/extensions/sms/**", "!dist/extensions/stepfun/**", "!dist/extensions/synology-chat/**", + "!dist/extensions/tavily/**", + "!dist/extensions/tencent/**", "!dist/extensions/tokenjuice/**", "!dist/extensions/tlon/**", "!dist/extensions/twitch/**", + "!dist/extensions/venice/**", + "!dist/extensions/vercel-ai-gateway/**", "!dist/extensions/voice-call/**", "!dist/extensions/whatsapp/**", + "!dist/extensions/zai/**", "!dist/extensions/zalo/**", "!dist/extensions/zalouser/**", "!dist/plugin-sdk/extensions/qa-channel/**", diff --git a/scripts/lib/bundled-runtime-sidecar-paths.json b/scripts/lib/bundled-runtime-sidecar-paths.json index 893b7400b81..13344e4dd9c 100644 --- a/scripts/lib/bundled-runtime-sidecar-paths.json +++ b/scripts/lib/bundled-runtime-sidecar-paths.json @@ -1,20 +1,15 @@ [ "dist/extensions/browser/runtime-api.js", "dist/extensions/canvas/runtime-api.js", - "dist/extensions/clickclack/runtime-api.js", "dist/extensions/copilot-proxy/runtime-api.js", "dist/extensions/google/runtime-api.js", "dist/extensions/imessage/runtime-api.js", - "dist/extensions/irc/runtime-api.js", "dist/extensions/lmstudio/runtime-api.js", - "dist/extensions/mattermost/runtime-api.js", "dist/extensions/memory-core/runtime-api.js", "dist/extensions/ollama/runtime-api.js", "dist/extensions/open-prose/runtime-api.js", - "dist/extensions/signal/runtime-api.js", "dist/extensions/telegram/runtime-api.js", "dist/extensions/telegram/runtime-setter-api.js", "dist/extensions/webhooks/runtime-api.js", - "dist/extensions/workboard/runtime-api.js", - "dist/extensions/zai/runtime-api.js" + "dist/extensions/workboard/runtime-api.js" ] diff --git a/scripts/lib/official-external-channel-catalog.json b/scripts/lib/official-external-channel-catalog.json index 6adf3fd89a7..eecf9959c6e 100644 --- a/scripts/lib/official-external-channel-catalog.json +++ b/scripts/lib/official-external-channel-catalog.json @@ -160,6 +160,41 @@ } } }, + { + "name": "@openclaw/clickclack", + "description": "OpenClaw ClickClack channel plugin", + "source": "official", + "kind": "channel", + "openclaw": { + "channel": { + "id": "clickclack", + "label": "ClickClack", + "selectionLabel": "ClickClack", + "detailLabel": "ClickClack Bot", + "docsPath": "/channels/clickclack", + "docsLabel": "clickclack", + "blurb": "self-hosted chat via first-class ClickClack bot tokens.", + "envVars": [ + "CLICKCLACK_BOT_TOKEN" + ], + "systemImage": "bubble.left.and.bubble.right", + "markdownCapable": true, + "preferSessionLookupForAnnounceTarget": true, + "order": 85, + "commands": { + "nativeCommandsAutoEnabled": false, + "nativeSkillsAutoEnabled": false + } + }, + "install": { + "clawhubSpec": "clawhub:@openclaw/clickclack", + "npmSpec": "@openclaw/clickclack", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true + } + } + }, { "name": "@openclaw/discord", "description": "OpenClaw Discord channel plugin", @@ -260,6 +295,46 @@ } } }, + { + "name": "@openclaw/irc", + "description": "OpenClaw IRC channel plugin", + "source": "official", + "kind": "channel", + "openclaw": { + "channel": { + "id": "irc", + "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" + ], + "envVars": [ + "IRC_HOST", + "IRC_PORT", + "IRC_TLS", + "IRC_NICK", + "IRC_USERNAME", + "IRC_REALNAME", + "IRC_PASSWORD", + "IRC_CHANNELS", + "IRC_NICKSERV_PASSWORD", + "IRC_NICKSERV_REGISTER_EMAIL" + ], + "systemImage": "network" + }, + "install": { + "clawhubSpec": "clawhub:@openclaw/irc", + "npmSpec": "@openclaw/irc", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true + } + } + }, { "name": "@openclaw/line", "description": "OpenClaw LINE channel plugin", @@ -285,6 +360,34 @@ } } }, + { + "name": "@openclaw/mattermost", + "description": "OpenClaw Mattermost channel plugin", + "source": "official", + "kind": "channel", + "openclaw": { + "channel": { + "id": "mattermost", + "label": "Mattermost", + "selectionLabel": "Mattermost (plugin)", + "docsPath": "/channels/mattermost", + "docsLabel": "mattermost", + "blurb": "self-hosted Slack-style chat; install the plugin to enable.", + "envVars": [ + "MATTERMOST_BOT_TOKEN", + "MATTERMOST_URL" + ], + "order": 65 + }, + "install": { + "clawhubSpec": "clawhub:@openclaw/mattermost", + "npmSpec": "@openclaw/mattermost", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true + } + } + }, { "name": "@openclaw/matrix", "description": "OpenClaw Matrix channel plugin", @@ -432,6 +535,46 @@ } } }, + { + "name": "@openclaw/signal", + "description": "OpenClaw Signal channel plugin", + "source": "official", + "kind": "channel", + "openclaw": { + "channel": { + "id": "signal", + "label": "Signal", + "selectionLabel": "Signal (signal-cli)", + "detailLabel": "Signal REST", + "docsPath": "/channels/signal", + "docsLabel": "signal", + "blurb": "signal-cli linked device with extra setup for the local REST bridge.", + "systemImage": "antenna.radiowaves.left.and.right", + "markdownCapable": true, + "cliAddOptions": [ + { + "flags": "--signal-number ", + "description": "Signal account number (E.164)" + }, + { + "flags": "--http-host ", + "description": "Signal HTTP daemon host" + }, + { + "flags": "--http-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", "description": "OpenClaw Slack channel plugin", @@ -467,6 +610,42 @@ } } }, + { + "name": "@openclaw/sms", + "description": "OpenClaw SMS channel plugin for Twilio text messages.", + "source": "official", + "kind": "channel", + "openclaw": { + "channel": { + "id": "sms", + "label": "SMS", + "selectionLabel": "SMS (Twilio)", + "detailLabel": "Twilio SMS", + "docsPath": "/channels/sms", + "docsLabel": "sms", + "blurb": "Twilio-backed SMS with inbound webhooks and outbound replies.", + "envVars": [ + "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" + ], + "order": 88, + "quickstartAllowFrom": true + }, + "install": { + "clawhubSpec": "clawhub:@openclaw/sms", + "npmSpec": "@openclaw/sms", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true + } + } + }, { "name": "@openclaw/synology-chat", "description": "Synology Chat channel plugin for OpenClaw", diff --git a/scripts/lib/official-external-plugin-catalog.json b/scripts/lib/official-external-plugin-catalog.json index b2fe1001277..8ced2ba4c8f 100644 --- a/scripts/lib/official-external-plugin-catalog.json +++ b/scripts/lib/official-external-plugin-catalog.json @@ -482,6 +482,97 @@ } } }, + { + "name": "@openclaw/searxng-plugin", + "description": "OpenClaw SearXNG plugin", + "source": "official", + "kind": "plugin", + "openclaw": { + "plugin": { + "id": "searxng", + "label": "SearXNG" + }, + "contracts": { + "webSearchProviders": [ + "searxng" + ] + }, + "webSearchProviders": [ + { + "id": "searxng", + "label": "SearXNG Search", + "hint": "Self-hosted meta-search with no API key required", + "onboardingScopes": [ + "text-inference" + ], + "requiresCredential": true, + "credentialLabel": "SearXNG Base URL", + "envVars": [ + "SEARXNG_BASE_URL" + ], + "placeholder": "http://localhost:8080", + "signupUrl": "https://docs.searxng.org/", + "docsUrl": "https://docs.openclaw.ai/tools/searxng-search", + "credentialPath": "plugins.entries.searxng.config.webSearch.baseUrl", + "autoDetectOrder": 200 + } + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/searxng-plugin", + "npmSpec": "@openclaw/searxng-plugin", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true + } + } + }, + { + "name": "@openclaw/tavily-plugin", + "description": "OpenClaw Tavily plugin", + "source": "official", + "kind": "plugin", + "openclaw": { + "plugin": { + "id": "tavily", + "label": "Tavily" + }, + "contracts": { + "webSearchProviders": [ + "tavily" + ], + "tools": [ + "tavily_search", + "tavily_extract" + ] + }, + "webSearchProviders": [ + { + "id": "tavily", + "label": "Tavily Search", + "hint": "Structured results with domain filters and AI answer summaries", + "onboardingScopes": [ + "text-inference" + ], + "credentialLabel": "Tavily API key", + "envVars": [ + "TAVILY_API_KEY" + ], + "placeholder": "tvly-...", + "signupUrl": "https://tavily.com/", + "docsUrl": "https://docs.openclaw.ai/tools/tavily", + "credentialPath": "plugins.entries.tavily.config.webSearch.apiKey", + "autoDetectOrder": 70 + } + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/tavily-plugin", + "npmSpec": "@openclaw/tavily-plugin", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9", + "allowInvalidConfigRecovery": true + } + } + }, { "name": "@openclaw/tokenjuice", "description": "OpenClaw tokenjuice exec output compaction plugin", diff --git a/scripts/lib/official-external-provider-catalog.json b/scripts/lib/official-external-provider-catalog.json index 71b53271cee..d2df733af35 100644 --- a/scripts/lib/official-external-provider-catalog.json +++ b/scripts/lib/official-external-provider-catalog.json @@ -952,6 +952,431 @@ } } }, + { + "name": "@openclaw/fireworks-provider", + "description": "OpenClaw Fireworks provider plugin", + "source": "official", + "kind": "provider", + "openclaw": { + "plugin": { + "id": "fireworks", + "label": "Fireworks" + }, + "providers": [ + { + "id": "fireworks", + "aliases": [ + "fireworks-ai" + ], + "name": "Fireworks", + "docs": "/providers/fireworks", + "categories": [ + "cloud", + "llm" + ], + "envVars": [ + "FIREWORKS_API_KEY" + ], + "authChoices": [ + { + "method": "api-key", + "choiceId": "fireworks-api-key", + "choiceLabel": "Fireworks API key", + "choiceHint": "API key", + "groupId": "fireworks", + "groupLabel": "Fireworks", + "groupHint": "API key", + "optionKey": "fireworksApiKey", + "cliFlag": "--fireworks-api-key", + "cliOption": "--fireworks-api-key ", + "cliDescription": "Fireworks API key", + "onboardingScopes": [ + "text-inference" + ] + } + ] + } + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/fireworks-provider", + "npmSpec": "@openclaw/fireworks-provider", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9" + } + } + }, + { + "name": "@openclaw/moonshot-provider", + "description": "OpenClaw Moonshot provider plugin", + "source": "official", + "kind": "provider", + "openclaw": { + "plugin": { + "id": "moonshot", + "label": "Moonshot" + }, + "providers": [ + { + "id": "moonshot", + "aliases": [ + "moonshotai", + "moonshot-ai" + ], + "name": "Moonshot", + "docs": "/providers/moonshot", + "categories": [ + "cloud", + "llm" + ], + "envVars": [ + "MOONSHOT_API_KEY", + "KIMI_API_KEY" + ], + "authChoices": [ + { + "method": "api-key", + "choiceId": "moonshot-api-key", + "choiceLabel": "Moonshot API key (.ai)", + "choiceHint": "Kimi K2.6 + Kimi", + "groupId": "moonshot", + "groupLabel": "Moonshot AI (Kimi K2.6)", + "groupHint": "Kimi K2.6", + "optionKey": "moonshotApiKey", + "cliFlag": "--moonshot-api-key", + "cliOption": "--moonshot-api-key ", + "cliDescription": "Moonshot API key", + "onboardingScopes": [ + "text-inference" + ] + }, + { + "method": "api-key-cn", + "choiceId": "moonshot-api-key-cn", + "choiceLabel": "Moonshot API key (.cn)", + "choiceHint": "Kimi K2.6 + Kimi", + "groupId": "moonshot", + "groupLabel": "Moonshot AI (Kimi K2.6)", + "groupHint": "Kimi K2.6", + "optionKey": "moonshotApiKey", + "cliFlag": "--moonshot-api-key", + "cliOption": "--moonshot-api-key ", + "cliDescription": "Moonshot API key", + "onboardingScopes": [ + "text-inference" + ] + } + ] + } + ], + "contracts": { + "mediaUnderstandingProviders": [ + "moonshot" + ], + "webSearchProviders": [ + "kimi" + ] + }, + "webSearchProviders": [ + { + "id": "kimi", + "label": "Kimi (Moonshot)", + "hint": "Requires Moonshot / Kimi API key · Moonshot web search", + "onboardingScopes": [ + "text-inference" + ], + "credentialLabel": "Moonshot / Kimi API key", + "envVars": [ + "KIMI_API_KEY", + "MOONSHOT_API_KEY" + ], + "placeholder": "sk-...", + "signupUrl": "https://platform.moonshot.cn/", + "docsUrl": "https://docs.openclaw.ai/tools/web", + "credentialPath": "plugins.entries.moonshot.config.webSearch.apiKey", + "autoDetectOrder": 40 + } + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/moonshot-provider", + "npmSpec": "@openclaw/moonshot-provider", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9" + } + } + }, + { + "name": "@openclaw/tencent-provider", + "description": "OpenClaw Tencent Cloud provider plugin (TokenHub + Token Plan)", + "source": "official", + "kind": "provider", + "openclaw": { + "plugin": { + "id": "tencent", + "label": "Tencent Cloud" + }, + "providers": [ + { + "id": "tencent-tokenhub", + "name": "Tencent TokenHub", + "docs": "/providers/tencent", + "categories": [ + "cloud", + "llm" + ], + "envVars": [ + "TOKENHUB_API_KEY" + ], + "authChoices": [ + { + "method": "api-key", + "choiceId": "tokenhub-api-key", + "choiceLabel": "Tencent TokenHub", + "choiceHint": "Hy via Tencent TokenHub Gateway", + "groupId": "tencent", + "groupLabel": "Tencent Cloud", + "groupHint": "Tencent TokenHub", + "optionKey": "tokenhubApiKey", + "cliFlag": "--tokenhub-api-key", + "cliOption": "--tokenhub-api-key ", + "cliDescription": "Tencent TokenHub API key", + "onboardingScopes": [ + "text-inference" + ] + } + ] + } + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/tencent-provider", + "npmSpec": "@openclaw/tencent-provider", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9" + } + } + }, + { + "name": "@openclaw/venice-provider", + "description": "OpenClaw Venice provider plugin", + "source": "official", + "kind": "provider", + "openclaw": { + "plugin": { + "id": "venice", + "label": "Venice" + }, + "providers": [ + { + "id": "venice", + "name": "Venice", + "docs": "/providers/venice", + "categories": [ + "cloud", + "llm" + ], + "envVars": [ + "VENICE_API_KEY" + ], + "authChoices": [ + { + "method": "api-key", + "choiceId": "venice-api-key", + "choiceLabel": "Venice AI API key", + "choiceHint": "Privacy-focused (uncensored models)", + "groupId": "venice", + "groupLabel": "Venice AI", + "groupHint": "Privacy-focused (uncensored models)", + "optionKey": "veniceApiKey", + "cliFlag": "--venice-api-key", + "cliOption": "--venice-api-key ", + "cliDescription": "Venice API key", + "onboardingScopes": [ + "text-inference" + ] + } + ] + } + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/venice-provider", + "npmSpec": "@openclaw/venice-provider", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9" + } + } + }, + { + "name": "@openclaw/vercel-ai-gateway-provider", + "description": "OpenClaw Vercel AI Gateway provider plugin", + "source": "official", + "kind": "provider", + "openclaw": { + "plugin": { + "id": "vercel-ai-gateway", + "label": "Vercel AI Gateway" + }, + "providers": [ + { + "id": "vercel-ai-gateway", + "name": "Vercel AI Gateway", + "docs": "/providers/vercel-ai-gateway", + "categories": [ + "cloud", + "llm" + ], + "envVars": [ + "AI_GATEWAY_API_KEY" + ], + "authChoices": [ + { + "method": "api-key", + "choiceId": "ai-gateway-api-key", + "choiceLabel": "Vercel AI Gateway API key", + "choiceHint": "API key", + "groupId": "ai-gateway", + "groupLabel": "Vercel AI Gateway", + "groupHint": "API key", + "optionKey": "aiGatewayApiKey", + "cliFlag": "--ai-gateway-api-key", + "cliOption": "--ai-gateway-api-key ", + "cliDescription": "Vercel AI Gateway API key", + "onboardingScopes": [ + "text-inference" + ] + } + ] + } + ], + "install": { + "clawhubSpec": "clawhub:@openclaw/vercel-ai-gateway-provider", + "npmSpec": "@openclaw/vercel-ai-gateway-provider", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9" + } + } + }, + { + "name": "@openclaw/zai-provider", + "description": "OpenClaw Z.AI provider plugin", + "source": "official", + "kind": "provider", + "openclaw": { + "plugin": { + "id": "zai", + "label": "Z.AI" + }, + "providers": [ + { + "id": "zai", + "aliases": [ + "z-ai", + "z.ai" + ], + "name": "Z.AI", + "docs": "/providers/zai", + "categories": [ + "cloud", + "llm" + ], + "envVars": [ + "ZAI_API_KEY", + "Z_AI_API_KEY" + ], + "authChoices": [ + { + "method": "api-key", + "choiceId": "zai-api-key", + "choiceLabel": "Z.AI API key", + "groupId": "zai", + "groupLabel": "Z.AI", + "groupHint": "GLM Coding Plan / Global / CN", + "optionKey": "zaiApiKey", + "cliFlag": "--zai-api-key", + "cliOption": "--zai-api-key ", + "cliDescription": "Z.AI API key", + "onboardingScopes": [ + "text-inference" + ] + }, + { + "method": "coding-global", + "choiceId": "zai-coding-global", + "choiceLabel": "Coding-Plan-Global", + "choiceHint": "GLM Coding Plan Global (api.z.ai)", + "groupId": "zai", + "groupLabel": "Z.AI", + "groupHint": "GLM Coding Plan / Global / CN", + "optionKey": "zaiApiKey", + "cliFlag": "--zai-api-key", + "cliOption": "--zai-api-key ", + "cliDescription": "Z.AI API key", + "onboardingScopes": [ + "text-inference" + ] + }, + { + "method": "coding-cn", + "choiceId": "zai-coding-cn", + "choiceLabel": "Coding-Plan-CN", + "choiceHint": "GLM Coding Plan CN (open.bigmodel.cn)", + "groupId": "zai", + "groupLabel": "Z.AI", + "groupHint": "GLM Coding Plan / Global / CN", + "optionKey": "zaiApiKey", + "cliFlag": "--zai-api-key", + "cliOption": "--zai-api-key ", + "cliDescription": "Z.AI API key", + "onboardingScopes": [ + "text-inference" + ] + }, + { + "method": "global", + "choiceId": "zai-global", + "choiceLabel": "Global", + "choiceHint": "Z.AI Global (api.z.ai)", + "groupId": "zai", + "groupLabel": "Z.AI", + "groupHint": "GLM Coding Plan / Global / CN", + "optionKey": "zaiApiKey", + "cliFlag": "--zai-api-key", + "cliOption": "--zai-api-key ", + "cliDescription": "Z.AI API key", + "onboardingScopes": [ + "text-inference" + ] + }, + { + "method": "cn", + "choiceId": "zai-cn", + "choiceLabel": "CN", + "choiceHint": "Z.AI CN (open.bigmodel.cn)", + "groupId": "zai", + "groupLabel": "Z.AI", + "groupHint": "GLM Coding Plan / Global / CN", + "optionKey": "zaiApiKey", + "cliFlag": "--zai-api-key", + "cliOption": "--zai-api-key ", + "cliDescription": "Z.AI API key", + "onboardingScopes": [ + "text-inference" + ] + } + ] + } + ], + "contracts": { + "mediaUnderstandingProviders": [ + "zai" + ] + }, + "install": { + "clawhubSpec": "clawhub:@openclaw/zai-provider", + "npmSpec": "@openclaw/zai-provider", + "defaultChoice": "npm", + "minHostVersion": ">=2026.6.9" + } + } + }, { "name": "@openclaw/stepfun-provider", "description": "OpenClaw StepFun provider plugin.", diff --git a/src/channels/config-presence.test.ts b/src/channels/config-presence.test.ts index beff93d3156..602c2413889 100644 --- a/src/channels/config-presence.test.ts +++ b/src/channels/config-presence.test.ts @@ -100,6 +100,25 @@ describe("config presence", () => { ).toEqual([{ channelId: "matrix", source: "env" }]); }); + it("detects official external channel env vars", () => { + const env = { + MATTERMOST_URL: "https://mattermost.example.test", + MATTERMOST_BOT_TOKEN: "token", + } as NodeJS.ProcessEnv; + + expectPotentialConfiguredChannelCase({ + cfg: {}, + env, + expectedIds: ["mattermost"], + options: { includePersistedAuthState: false }, + }); + expect( + listPotentialConfiguredChannelPresenceSignals({}, env, { + includePersistedAuthState: false, + }), + ).toEqual([{ channelId: "mattermost", source: "env" }]); + }); + it("detects persisted Matrix credentials without config or env", () => { const stateDir = makeTempStateDir().replace( "openclaw-channel-config-presence-", diff --git a/src/channels/config-presence.ts b/src/channels/config-presence.ts index 8b7208ceda9..ec9d2f85480 100644 --- a/src/channels/config-presence.ts +++ b/src/channels/config-presence.ts @@ -15,6 +15,7 @@ import { resolveStateDir } from "../config/paths.js"; import type { OpenClawConfig } from "../config/types.openclaw.js"; import { hasNonEmptyString } from "../infra/outbound/channel-target.js"; import type { PluginDiscoveryResult } from "../plugins/discovery.js"; +import { listOfficialExternalChannelEnvVars } from "../plugins/official-external-plugin-catalog.js"; import { isRecord } from "../utils.js"; import { listBundledChannelIds } from "./plugins/bundled-ids.js"; @@ -146,6 +147,16 @@ export function listPotentialConfiguredChannelPresenceSignals( const configuredChannelIds = new Set(); const channelIds = options.channelIds ?? listBundledChannelIds(env, options.discovery); const channelEnvPrefixes = listChannelEnvPrefixes(channelIds); + const scopedChannelIds = options.channelIds + ? new Set( + options.channelIds + .map((channelId) => normalizeOptionalLowercaseString(channelId)) + .filter((channelId): channelId is string => Boolean(channelId)), + ) + : undefined; + const officialExternalChannelEnvVars = listOfficialExternalChannelEnvVars().filter( + ({ channelId }) => !scopedChannelIds || scopedChannelIds.has(channelId), + ); const channels = isRecord(cfg.channels) ? cfg.channels : null; if (channels) { for (const [key, value] of Object.entries(channels)) { @@ -171,6 +182,12 @@ export function listPotentialConfiguredChannelPresenceSignals( addSignal(channelId, "env"); } } + for (const { channelId, envVars } of officialExternalChannelEnvVars) { + if (envVars.includes(key)) { + configuredChannelIds.add(channelId); + addSignal(channelId, "env"); + } + } } if (options.includePersistedAuthState !== false && hasPersistedChannelState(env)) { diff --git a/src/plugins/official-external-plugin-catalog.test.ts b/src/plugins/official-external-plugin-catalog.test.ts index be7adaa7b63..2fb8939e7fb 100644 --- a/src/plugins/official-external-plugin-catalog.test.ts +++ b/src/plugins/official-external-plugin-catalog.test.ts @@ -42,6 +42,21 @@ describe("official external plugin catalog", () => { ["parallel", "@openclaw/parallel-plugin"], ["perplexity", "@openclaw/perplexity-plugin"], ] as const; + const newlyExternalized = [ + ["clickclack", "@openclaw/clickclack"], + ["fireworks", "@openclaw/fireworks-provider"], + ["irc", "@openclaw/irc"], + ["mattermost", "@openclaw/mattermost"], + ["moonshot", "@openclaw/moonshot-provider"], + ["searxng", "@openclaw/searxng-plugin"], + ["signal", "@openclaw/signal"], + ["sms", "@openclaw/sms"], + ["tavily", "@openclaw/tavily-plugin"], + ["tencent", "@openclaw/tencent-provider"], + ["venice", "@openclaw/venice-provider"], + ["vercel-ai-gateway", "@openclaw/vercel-ai-gateway-provider"], + ["zai", "@openclaw/zai-provider"], + ] as const; for (const [id, npmSpec] of [...providers, ...plugins]) { expect(resolveOfficialExternalPluginInstall(expectCatalogEntry(id))).toEqual({ @@ -51,6 +66,14 @@ describe("official external plugin catalog", () => { minHostVersion: ">=2026.6.8", }); } + for (const [id, npmSpec] of newlyExternalized) { + expect(resolveOfficialExternalPluginInstall(expectCatalogEntry(id))).toMatchObject({ + clawhubSpec: `clawhub:${npmSpec}`, + npmSpec, + defaultChoice: "npm", + minHostVersion: ">=2026.6.9", + }); + } }); it("advertises StepFun with its ClawHub package and plugin API floor", () => { @@ -150,9 +173,9 @@ describe("official external plugin catalog", () => { expect( resolveOfficialExternalProviderContractPluginIds({ contract: "mediaUnderstandingProviders", - providerIds: new Set(["groq"]), + providerIds: new Set(["groq", "moonshot", "zai"]), }), - ).toEqual(["groq"]); + ).toEqual(["groq", "moonshot", "zai"]); }); it("maps env-only web-fetch credentials to external plugin owners", () => { @@ -190,9 +213,16 @@ describe("official external plugin catalog", () => { GROQ_API_KEY: "groq-key", KILOCODE_API_KEY: "kilocode-key", KIMICODE_API_KEY: "kimi-key", + KIMI_API_KEY: "moonshot-kimi-key", + MOONSHOT_API_KEY: "moonshot-key", QIANFAN_API_KEY: "qianfan-key", MODELSTUDIO_API_KEY: "qwen-key", STEPFUN_API_KEY: "stepfun-key", + FIREWORKS_API_KEY: "fireworks-key", + TOKENHUB_API_KEY: "tokenhub-key", + VENICE_API_KEY: "venice-key", + AI_GATEWAY_API_KEY: "gateway-key", + ZAI_API_KEY: "zai-key", }), ).toEqual([ "arcee", @@ -201,12 +231,18 @@ describe("official external plugin catalog", () => { "cloudflare-ai-gateway", "deepinfra", "deepseek", + "fireworks", "groq", "kilocode", "kimi", + "moonshot", "qianfan", "qwen", "stepfun", + "tencent", + "venice", + "vercel-ai-gateway", + "zai", ]); expect(resolveOfficialExternalProviderPluginIdsForEnv({ GROQ_API_KEY: " " })).toEqual([]); }); @@ -237,6 +273,14 @@ describe("official external plugin catalog", () => { npmSpec: "@openclaw/discord", allowInvalidConfigRecovery: true, }); + expect(resolveOfficialExternalPluginInstall(expectCatalogEntry("mattermost"))).toMatchObject({ + npmSpec: "@openclaw/mattermost", + allowInvalidConfigRecovery: true, + }); + expect(resolveOfficialExternalPluginInstall(expectCatalogEntry("tavily"))).toMatchObject({ + npmSpec: "@openclaw/tavily-plugin", + allowInvalidConfigRecovery: true, + }); }); it("lists Matrix as an official external ClawHub channel after cutover", () => { @@ -249,7 +293,7 @@ describe("official external plugin catalog", () => { } expect(ids.has("matrix")).toBe(true); - expect(ids.has("mattermost")).toBe(false); + expect(ids.has("mattermost")).toBe(true); expect(resolveOfficialExternalPluginInstall(expectCatalogEntry("matrix"))).toEqual({ clawhubSpec: "clawhub:@openclaw/matrix", npmSpec: "@openclaw/matrix", diff --git a/src/plugins/official-external-plugin-catalog.ts b/src/plugins/official-external-plugin-catalog.ts index cbd63a4efeb..7eec0e86d67 100644 --- a/src/plugins/official-external-plugin-catalog.ts +++ b/src/plugins/official-external-plugin-catalog.ts @@ -66,6 +66,7 @@ export type OfficialExternalPluginCatalogManifest = { channel?: { id?: string; label?: string; + envVars?: readonly string[]; }; providers?: readonly OfficialExternalProviderCatalogProvider[]; webSearchProviders?: readonly OfficialExternalWebSearchProvider[]; @@ -320,6 +321,22 @@ export function listOfficialExternalChannelCatalogEntries(): OfficialExternalPlu ); } +export function listOfficialExternalChannelEnvVars(): Array<{ + channelId: string; + envVars: readonly string[]; +}> { + return listOfficialExternalChannelCatalogEntries().flatMap((entry) => { + const channel = getOfficialExternalPluginCatalogManifest(entry)?.channel; + const channelId = normalizeOptionalString(channel?.id)?.toLowerCase(); + const envVars = uniqueStrings( + (channel?.envVars ?? []) + .map((envVar) => normalizeOptionalString(envVar)) + .filter((envVar): envVar is string => Boolean(envVar)), + ); + return channelId && envVars.length > 0 ? [{ channelId, envVars }] : []; + }); +} + export function listOfficialExternalProviderCatalogEntries(): OfficialExternalPluginCatalogEntry[] { return listOfficialExternalPluginCatalogEntries().filter( (entry) => (getOfficialExternalPluginCatalogManifest(entry)?.providers?.length ?? 0) > 0, diff --git a/src/plugins/web-search-install-catalog.test.ts b/src/plugins/web-search-install-catalog.test.ts index 5b43640b354..ccf859c7267 100644 --- a/src/plugins/web-search-install-catalog.test.ts +++ b/src/plugins/web-search-install-catalog.test.ts @@ -38,9 +38,12 @@ describe("web-search install catalog", () => { resolveWebSearchInstallCatalogEntriesForEnv({ EXA_API_KEY: "exa-key", FIRECRAWL_API_KEY: "firecrawl-key", + KIMI_API_KEY: "kimi-key", OPENROUTER_API_KEY: "openrouter-key", PARALLEL_API_KEY: "parallel-key", + SEARXNG_BASE_URL: "http://search.local", + TAVILY_API_KEY: "tavily-key", }).map((entry) => entry.pluginId), - ).toEqual(["exa", "firecrawl", "parallel", "perplexity"]); + ).toEqual(["exa", "firecrawl", "moonshot", "parallel", "perplexity", "searxng", "tavily"]); }); });