Skip to content

fix(qqbot): enable qqbot plugin by default so runtime deps install be…#71051

Merged
sliverp merged 2 commits into
openclaw:mainfrom
cxyhhhhh:feat/qrcode-fix
Apr 24, 2026
Merged

fix(qqbot): enable qqbot plugin by default so runtime deps install be…#71051
sliverp merged 2 commits into
openclaw:mainfrom
cxyhhhhh:feat/qrcode-fix

Conversation

@cxyhhhhh

@cxyhhhhh cxyhhhhh commented Apr 24, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Problem: The qqbot plugin manifest was missing enabledByDefault: true. Without it, ensureBundledPluginRuntimeDeps treats qqbot as bundled-but-disabled-by-default (isBundledPluginConfiguredForRuntimeDeps returns false when no qqbot channel/account is configured yet), so @tencent-connect/qqbot-connector is never installed into dist/extensions/qqbot/node_modules on first launch.
  • Why it matters: This creates a chicken-and-egg failure for the QR-code binding flow. finalize.ts dynamically imports @tencent-connect/qqbot-connector to run qrConnect(), but the package isn't present yet because no account is configured — and binding is exactly the step that configures the first account. Users hit: ERR_MODULE_NOT_FOUND: Cannot find package '@tencent-connect/qqbot-connector'.
  • What changed: Added "enabledByDefault": true to extensions/qqbot/openclaw.plugin.json, making the host install qqbot's runtime deps eagerly on first launch.
  • What did NOT change (scope boundary): No code logic changes. The existing runtime-deps install pipeline handles everything once the gate is opened. This mirrors the pattern already used by 59 other bundled plugins (mistral / groq / deepgram / amazon-bedrock-mantle, etc.) whose providers must be available before any channel config exists.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

  • Closes #
  • Related #
  • This PR fixes a bug or regression

Root Cause (if applicable)

  • Root cause: extensions/qqbot/openclaw.plugin.json was missing the enabledByDefault: true field. isBundledPluginConfiguredForRuntimeDeps returns false when no qqbot channel/account is configured, causing ensureBundledPluginRuntimeDeps to skip installing qqbot's runtime dependencies entirely.
  • Missing detection / guardrail: No validation or warning for the case where a plugin declares channelEnvVars but does not set enabledByDefault.
  • Contributing context (if known): The qqbot plugin was added later as a channel plugin and did not follow the convention established by other bundled plugins.

Regression Test Plan (if applicable)

  • Coverage level that should have caught this:
    • Unit test
    • Seam / integration test
    • End-to-end test
    • Existing coverage already sufficient
  • Target test or file: src/plugins/bundled-runtime-deps.test.ts
  • Scenario the test should lock in: When a bundled plugin declares channelEnvVars and requires runtime dependencies, ensureBundledPluginRuntimeDeps should install its dependencies even if no account is configured, as long as enabledByDefault: true is set.
  • Why this is the smallest reliable guardrail: This function is the sole entry point for runtime dependency installation; testing its response to enabledByDefault directly covers this scenario.
  • If no new test is added, why not: This change only modifies a JSON manifest with no logic changes. The existing bundled-runtime-deps.test.ts already covers enabledByDefault behavior.

User-visible / Behavior Changes

  • On first launch, qqbot's runtime dependency (@tencent-connect/qqbot-connector) is now automatically installed. Users no longer need a pre-existing account configuration to use the QR-code binding flow.
  • Previously, selecting "QR-code binding" on first launch resulted in ERR_MODULE_NOT_FOUND. It now works as expected.

Diagram (if applicable)

Before:
[first launch] -> ensureBundledPluginRuntimeDeps
               -> qqbot has no enabledByDefault
               -> isBundledPluginConfiguredForRuntimeDeps = false
               -> skip installing @tencent-connect/qqbot-connector
               -> [user selects QR bind] -> import qqbot-connector -> ERR_MODULE_NOT_FOUND ❌

After:
[first launch] -> ensureBundledPluginRuntimeDeps
               -> qqbot enabledByDefault: true
               -> isBundledPluginConfiguredForRuntimeDeps = true
               -> install @tencent-connect/qqbot-connector ✓
               -> [user selects QR bind] -> import qqbot-connector -> qrConnect() succeeds ✅

Security Impact (required)

  • New permissions/capabilities? No
  • Secrets/tokens handling changed? No
  • New/changed network calls? No
  • Command/tool execution surface changed? No
  • Data access scope changed? No

Repro + Verification

Environment

  • OS: macOS (darwin)
  • Runtime/container: Node.js
  • Model/provider: N/A
  • Integration/channel: QQ Bot (qqbot)
  • Relevant config: Fresh install, no pre-existing qqbot account configuration

Steps

  1. Fresh install of openclaw with no pre-configured qqbot account.
  2. Run openclaw channels add and select QQ Bot.
  3. Select "扫码绑定(推荐)" (QR-code binding).

Expected

  • The QR-code binding flow starts normally and displays a QR code for the user to scan.

Actual (before fix)

  • Error: QQ Bot 绑定失败: Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@tencent-connect/qqbot-connector' imported from .../dist/extensions/qqbot/channel-*.js

Evidence

  • Trace/log snippets

Before fix:

QQ Bot 绑定失败: Error [ERR_MODULE_NOT_FOUND]: Cannot find package
'@tencent-connect/qqbot-connector' imported from
.../dist/extensions/qqbot/channel-*.js

After fix: @tencent-connect/qqbot-connector is pre-installed on first launch; QR-code binding flow proceeds normally.

Human Verification (required)

  • Verified scenarios: Fresh environment first launch followed by QR-code binding flow; confirmed @tencent-connect/qqbot-connector is pre-installed.
  • Edge cases checked: Upgrade scenario with existing account configuration is unaffected (enabledByDefault only influences the initial install gate).
  • What you did NOT verify: Cross-platform (Windows/Linux) installation behavior.

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

Compatibility / Migration

  • Backward compatible? Yes
  • Config/env changes? No
  • Migration needed? No

Risks and Mitigations

  • Risk: enabledByDefault: true causes qqbot's runtime dependencies to be installed on first launch for all users, even those who do not intend to use QQ Bot.
    • Mitigation: This is consistent with the behavior of 59 other bundled plugins (anthropic, google, microsoft, etc.). Runtime dependency installation is lightweight and only triggers on first launch or when dependencies are missing, with negligible impact on startup performance.

@greptile-apps

greptile-apps Bot commented Apr 24, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds "enabledByDefault": true to extensions/qqbot/openclaw.plugin.json so that @tencent-connect/qqbot-connector is installed eagerly on first launch, resolving a bootstrap failure where the QR-code binding flow needed the package before any account was configured.

Confidence Score: 5/5

Safe to merge — single-field config addition with no logic changes and clear precedent across the codebase.

The change is a one-line JSON addition that mirrors an established pattern used by many other bundled plugins. No security implications, no runtime logic changes, and the PR description accurately diagnoses the root cause.

No files require special attention.

Reviews (1): Last reviewed commit: "fix(qqbot): enable qqbot plugin by defau..." | Re-trigger Greptile

cxyhhhhh and others added 2 commits April 24, 2026 17:48
…fore QR-code setup

The qqbot plugin manifest was missing the enabledByDefault: true flag.
Without it, ensureBundledPluginRuntimeDeps treats qqbot as bundled-but-
disabled-by-default (isBundledPluginConfiguredForRuntimeDeps returns
false when no qqbot channel/account is configured yet), so
@tencent-connect/qqbot-connector is never installed into
dist/extensions/qqbot/node_modules on first launch.

This creates a chicken-and-egg failure for the QR-code binding flow:
finalize.ts dynamically imports @tencent-connect/qqbot-connector to run
qrConnect(), but the package isn't present yet because no account is
configured — binding is exactly the step that configures the first
account. Users hit:

  QQ Bot 绑定失败: Error [ERR_MODULE_NOT_FOUND]: Cannot find package
  '@tencent-connect/qqbot-connector' imported from
  .../dist/extensions/qqbot/channel-*.js

Adding enabledByDefault: true makes the host install qqbot's runtime
deps eagerly on first launch, mirroring the pattern already used by
mistral / groq / deepgram / amazon-bedrock-mantle and other bundled
plugins whose providers must be available before any channel config
exists. No code changes required; the existing runtime-deps install
pipeline handles everything once the gate is opened.
@sliverp sliverp merged commit 4013c65 into openclaw:main Apr 24, 2026
9 checks passed
@sliverp

sliverp commented Apr 24, 2026

Copy link
Copy Markdown
Member

Landed via temp rebase onto main.

  • Gate: pnpm lint && pnpm build (tests skipped by maintainer — trivial 1-line manifest flag, no logic change)
  • Land commit: c8c36da
  • Merge commit: 4013c65

Thanks @cxyhhhhh!

Angfr95 pushed a commit to Angfr95/openclaw that referenced this pull request Apr 25, 2026
openclaw#71051)

* fix(qqbot): enable qqbot plugin by default so runtime deps install before QR-code setup

The qqbot plugin manifest was missing the enabledByDefault: true flag.
Without it, ensureBundledPluginRuntimeDeps treats qqbot as bundled-but-
disabled-by-default (isBundledPluginConfiguredForRuntimeDeps returns
false when no qqbot channel/account is configured yet), so
@tencent-connect/qqbot-connector is never installed into
dist/extensions/qqbot/node_modules on first launch.

This creates a chicken-and-egg failure for the QR-code binding flow:
finalize.ts dynamically imports @tencent-connect/qqbot-connector to run
qrConnect(), but the package isn't present yet because no account is
configured — binding is exactly the step that configures the first
account. Users hit:

  QQ Bot 绑定失败: Error [ERR_MODULE_NOT_FOUND]: Cannot find package
  '@tencent-connect/qqbot-connector' imported from
  .../dist/extensions/qqbot/channel-*.js

Adding enabledByDefault: true makes the host install qqbot's runtime
deps eagerly on first launch, mirroring the pattern already used by
mistral / groq / deepgram / amazon-bedrock-mantle and other bundled
plugins whose providers must be available before any channel config
exists. No code changes required; the existing runtime-deps install
pipeline handles everything once the gate is opened.

* fix(qqbot): changelog for enable-by-default fix (openclaw#71051) (thanks @cxyhhhhh)

---------

Co-authored-by: sliverp <870080352@qq.com>
ogt-redknie pushed a commit to ogt-redknie/OPENX that referenced this pull request May 2, 2026
openclaw#71051)

* fix(qqbot): enable qqbot plugin by default so runtime deps install before QR-code setup

The qqbot plugin manifest was missing the enabledByDefault: true flag.
Without it, ensureBundledPluginRuntimeDeps treats qqbot as bundled-but-
disabled-by-default (isBundledPluginConfiguredForRuntimeDeps returns
false when no qqbot channel/account is configured yet), so
@tencent-connect/qqbot-connector is never installed into
dist/extensions/qqbot/node_modules on first launch.

This creates a chicken-and-egg failure for the QR-code binding flow:
finalize.ts dynamically imports @tencent-connect/qqbot-connector to run
qrConnect(), but the package isn't present yet because no account is
configured — binding is exactly the step that configures the first
account. Users hit:

  QQ Bot 绑定失败: Error [ERR_MODULE_NOT_FOUND]: Cannot find package
  '@tencent-connect/qqbot-connector' imported from
  .../dist/extensions/qqbot/channel-*.js

Adding enabledByDefault: true makes the host install qqbot's runtime
deps eagerly on first launch, mirroring the pattern already used by
mistral / groq / deepgram / amazon-bedrock-mantle and other bundled
plugins whose providers must be available before any channel config
exists. No code changes required; the existing runtime-deps install
pipeline handles everything once the gate is opened.

* fix(qqbot): changelog for enable-by-default fix (openclaw#71051) (thanks @cxyhhhhh)

---------

Co-authored-by: sliverp <870080352@qq.com>
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 9, 2026
openclaw#71051)

* fix(qqbot): enable qqbot plugin by default so runtime deps install before QR-code setup

The qqbot plugin manifest was missing the enabledByDefault: true flag.
Without it, ensureBundledPluginRuntimeDeps treats qqbot as bundled-but-
disabled-by-default (isBundledPluginConfiguredForRuntimeDeps returns
false when no qqbot channel/account is configured yet), so
@tencent-connect/qqbot-connector is never installed into
dist/extensions/qqbot/node_modules on first launch.

This creates a chicken-and-egg failure for the QR-code binding flow:
finalize.ts dynamically imports @tencent-connect/qqbot-connector to run
qrConnect(), but the package isn't present yet because no account is
configured — binding is exactly the step that configures the first
account. Users hit:

  QQ Bot 绑定失败: Error [ERR_MODULE_NOT_FOUND]: Cannot find package
  '@tencent-connect/qqbot-connector' imported from
  .../dist/extensions/qqbot/channel-*.js

Adding enabledByDefault: true makes the host install qqbot's runtime
deps eagerly on first launch, mirroring the pattern already used by
mistral / groq / deepgram / amazon-bedrock-mantle and other bundled
plugins whose providers must be available before any channel config
exists. No code changes required; the existing runtime-deps install
pipeline handles everything once the gate is opened.

* fix(qqbot): changelog for enable-by-default fix (openclaw#71051) (thanks @cxyhhhhh)

---------

Co-authored-by: sliverp <870080352@qq.com>
globalcaos pushed a commit to globalcaos/tinkerclaw that referenced this pull request May 13, 2026
openclaw#71051)

* fix(qqbot): enable qqbot plugin by default so runtime deps install before QR-code setup

The qqbot plugin manifest was missing the enabledByDefault: true flag.
Without it, ensureBundledPluginRuntimeDeps treats qqbot as bundled-but-
disabled-by-default (isBundledPluginConfiguredForRuntimeDeps returns
false when no qqbot channel/account is configured yet), so
@tencent-connect/qqbot-connector is never installed into
dist/extensions/qqbot/node_modules on first launch.

This creates a chicken-and-egg failure for the QR-code binding flow:
finalize.ts dynamically imports @tencent-connect/qqbot-connector to run
qrConnect(), but the package isn't present yet because no account is
configured — binding is exactly the step that configures the first
account. Users hit:

  QQ Bot 绑定失败: Error [ERR_MODULE_NOT_FOUND]: Cannot find package
  '@tencent-connect/qqbot-connector' imported from
  .../dist/extensions/qqbot/channel-*.js

Adding enabledByDefault: true makes the host install qqbot's runtime
deps eagerly on first launch, mirroring the pattern already used by
mistral / groq / deepgram / amazon-bedrock-mantle and other bundled
plugins whose providers must be available before any channel config
exists. No code changes required; the existing runtime-deps install
pipeline handles everything once the gate is opened.

* fix(qqbot): changelog for enable-by-default fix (openclaw#71051) (thanks @cxyhhhhh)

---------

Co-authored-by: sliverp <870080352@qq.com>
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 24, 2026
openclaw#71051)

* fix(qqbot): enable qqbot plugin by default so runtime deps install before QR-code setup

The qqbot plugin manifest was missing the enabledByDefault: true flag.
Without it, ensureBundledPluginRuntimeDeps treats qqbot as bundled-but-
disabled-by-default (isBundledPluginConfiguredForRuntimeDeps returns
false when no qqbot channel/account is configured yet), so
@tencent-connect/qqbot-connector is never installed into
dist/extensions/qqbot/node_modules on first launch.

This creates a chicken-and-egg failure for the QR-code binding flow:
finalize.ts dynamically imports @tencent-connect/qqbot-connector to run
qrConnect(), but the package isn't present yet because no account is
configured — binding is exactly the step that configures the first
account. Users hit:

  QQ Bot 绑定失败: Error [ERR_MODULE_NOT_FOUND]: Cannot find package
  '@tencent-connect/qqbot-connector' imported from
  .../dist/extensions/qqbot/channel-*.js

Adding enabledByDefault: true makes the host install qqbot's runtime
deps eagerly on first launch, mirroring the pattern already used by
mistral / groq / deepgram / amazon-bedrock-mantle and other bundled
plugins whose providers must be available before any channel config
exists. No code changes required; the existing runtime-deps install
pipeline handles everything once the gate is opened.

* fix(qqbot): changelog for enable-by-default fix (openclaw#71051) (thanks @cxyhhhhh)

---------

Co-authored-by: sliverp <870080352@qq.com>
jameslcowan pushed a commit to jameslcowan/openclaw that referenced this pull request Jun 2, 2026
openclaw#71051)

* fix(qqbot): enable qqbot plugin by default so runtime deps install before QR-code setup

The qqbot plugin manifest was missing the enabledByDefault: true flag.
Without it, ensureBundledPluginRuntimeDeps treats qqbot as bundled-but-
disabled-by-default (isBundledPluginConfiguredForRuntimeDeps returns
false when no qqbot channel/account is configured yet), so
@tencent-connect/qqbot-connector is never installed into
dist/extensions/qqbot/node_modules on first launch.

This creates a chicken-and-egg failure for the QR-code binding flow:
finalize.ts dynamically imports @tencent-connect/qqbot-connector to run
qrConnect(), but the package isn't present yet because no account is
configured — binding is exactly the step that configures the first
account. Users hit:

  QQ Bot 绑定失败: Error [ERR_MODULE_NOT_FOUND]: Cannot find package
  '@tencent-connect/qqbot-connector' imported from
  .../dist/extensions/qqbot/channel-*.js

Adding enabledByDefault: true makes the host install qqbot's runtime
deps eagerly on first launch, mirroring the pattern already used by
mistral / groq / deepgram / amazon-bedrock-mantle and other bundled
plugins whose providers must be available before any channel config
exists. No code changes required; the existing runtime-deps install
pipeline handles everything once the gate is opened.

* fix(qqbot): changelog for enable-by-default fix (openclaw#71051) (thanks @cxyhhhhh)

---------

Co-authored-by: sliverp <870080352@qq.com>
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
openclaw#71051)

* fix(qqbot): enable qqbot plugin by default so runtime deps install before QR-code setup

The qqbot plugin manifest was missing the enabledByDefault: true flag.
Without it, ensureBundledPluginRuntimeDeps treats qqbot as bundled-but-
disabled-by-default (isBundledPluginConfiguredForRuntimeDeps returns
false when no qqbot channel/account is configured yet), so
@tencent-connect/qqbot-connector is never installed into
dist/extensions/qqbot/node_modules on first launch.

This creates a chicken-and-egg failure for the QR-code binding flow:
finalize.ts dynamically imports @tencent-connect/qqbot-connector to run
qrConnect(), but the package isn't present yet because no account is
configured — binding is exactly the step that configures the first
account. Users hit:

  QQ Bot 绑定失败: Error [ERR_MODULE_NOT_FOUND]: Cannot find package
  '@tencent-connect/qqbot-connector' imported from
  .../dist/extensions/qqbot/channel-*.js

Adding enabledByDefault: true makes the host install qqbot's runtime
deps eagerly on first launch, mirroring the pattern already used by
mistral / groq / deepgram / amazon-bedrock-mantle and other bundled
plugins whose providers must be available before any channel config
exists. No code changes required; the existing runtime-deps install
pipeline handles everything once the gate is opened.

* fix(qqbot): changelog for enable-by-default fix (openclaw#71051) (thanks @cxyhhhhh)

---------

Co-authored-by: sliverp <870080352@qq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants