Skip to content

[Bug]: 2026.5.2 external plugin sandbox ping-pong: restoring Brave can remove Feishu, restoring Feishu can break Brave #76959

Description

@Kevin-Li-jgrc

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

In 2026.5.2, Brave was externalized and Feishu is also loaded as an external channel plugin. When both brave and feishu are configured, the external plugin npm sandbox can get into a ping-pong state: restoring one plugin prunes/removes the other from ~/.openclaw/npm, so the next gateway restart fails on the other plugin.

This is distinct from #76373 (bare openclaw plugins install brave alias/package metadata). After installing the correct scoped packages, the system can still break if the external plugin sandbox is repaired/installed one package at a time instead of preserving the full external-plugin dependency set.

Steps to reproduce

On OpenClaw 2026.5.2 (8b2a6e5) with both configured:

  • tools.web.search.provider = brave
  • Feishu channel accounts configured and enabled
  • external plugin sandbox at ~/.openclaw/npm

Reproduction seen on macOS:

  1. Start after upgrade/restart with both Brave and Feishu configured.
  2. Gateway reports one of the plugins missing, e.g. plugin not found: feishu or web_search provider is not available: brave.
  3. Restore Brave alone in the external plugin sandbox / repair path.
  4. Gateway can then fail to load Feishu: Feishu config still exists, but the Feishu channel plugin is not in the runtime registry.
  5. Restore Feishu alone.
  6. Brave can then disappear / fail provider validation on the next restart.
  7. Installing all required external plugins in one npm transaction fixes it:
    npm install @openclaw/[email protected] @openclaw/[email protected] @openclaw/[email protected] --save-exact --prefix ~/.openclaw/npm

Expected behavior

Installing or repairing one official external plugin should not remove other configured official external plugins from the shared ~/.openclaw/npm sandbox.

Gateway startup / doctor / plugin repair should either:

  • preserve the existing external-plugin dependency set, or
  • install all configured external plugins in one transaction, or
  • store configured external plugin package dependencies in ~/.openclaw/npm/package.json and use npm install without pruning unrelated plugins.

Actual behavior

Restoring one configured external plugin can make the other configured external plugin unavailable. This causes a loop such as:

  • Brave unavailable → install Brave → Feishu unavailable
  • Feishu unavailable → install Feishu → Brave unavailable

User-visible failures included:

  • Feishu channel plugin not loaded, so Feishu bots stop receiving/sending messages.
  • tools.web.search.provider=brave fails validation / runtime provider lookup.
  • message routing could fall back to another channel because Feishu was absent from the runtime channel registry.

OpenClaw version

2026.5.2 (8b2a6e5)

Operating system

macOS Darwin 25.3.0 arm64

Install method

openclaw update / Homebrew global npm install

Model

N/A — plugin installation/runtime registry issue

Provider / routing chain

  • web search provider: brave
  • channel plugin: feishu

Logs, screenshots, and evidence

Observed state after applying the workaround:

$ node -e 'const p=require("~/.openclaw/npm/package.json"); console.log(p.dependencies)'
{
  "@openclaw/bluebubbles": "2026.5.2",
  "@openclaw/brave-plugin": "2026.5.2",
  "@openclaw/feishu": "2026.5.2"
}

$ npm ls @openclaw/feishu @openclaw/brave-plugin --depth=0 --prefix ~/.openclaw/npm --json
{
  "dependencies": {
    "@openclaw/brave-plugin": { "version": "2026.5.2" },
    "@openclaw/feishu": { "version": "2026.5.2" }
  }
}

After installing both plugins together and doing a real gateway restart:

  • Feishu accounts were all running and probe OK.
  • Brave web search resolved as the configured provider and returned results.

Impact and severity

High for users with both external channel plugins and external web-search plugins configured. A gateway restart after upgrading to 2026.5.2 can silently drop a messaging channel or break web_search, and trying to repair the missing plugin one-at-a-time can keep flipping which plugin is broken.

Additional information

Related but not duplicate:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions