fix: preserve bundled channel plugin compat#58873
Conversation
Greptile SummaryThis PR fixes a compatibility bug where bundled channel plugins (e.g. Key changes:
Confidence Score: 5/5Safe to merge — targeted fix with good test coverage and correct precedence handling for all disable/bypass combinations. All changes are focused and well-reasoned. The bypass added to No files require special attention. Reviews (1): Last reviewed commit: "fix: preserve bundled channel plugin com..." | Re-trigger Greptile |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e41b20edf6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
e41b20e to
7fc3770
Compare
🔒 Aisle Security AnalysisWe found 1 potential security issue(s) in this PR:
1. 🟡 Bundled channel plugins can be enabled even when not in plugins.allow allowlist
Description
This creates an allowlist bypass for bundled channel plugins:
Vulnerable logic: if (
!base.enabled &&
(base.reason === "bundled (disabled by default)" || base.reason === "not in allowlist") &&
isBundledChannelEnabledByChannelConfig(params.rootConfig, params.id)
) {
return { enabled: true };
}If an operator relies on RecommendationDo not allow Options:
if (
!base.enabled &&
base.reason === "bundled (disabled by default)" &&
isBundledChannelEnabledByChannelConfig(params.rootConfig, params.id)
) {
return { enabled: true };
}
Analyzed PR: #58873 at commit Last updated on: 2026-04-01T08:46:46Z |
This comment was marked as spam.
This comment was marked as spam.
🔒 Aisle Security AnalysisWe found 1 potential security issue(s) in this PR:
1. 🟡 Bundled channel plugins can bypass plugins.allow allowlist via channels..enabled=true
Description
Vulnerable logic: if (
params.origin === "bundled" &&
!base.enabled &&
(base.reason === "bundled (disabled by default)" || base.reason === "not in allowlist") &&
isBundledChannelEnabledByChannelConfig(params.rootConfig, params.id)
) {
return { enabled: true };
}This effectively turns RecommendationDo not allow Safer options:
if (
params.origin === "bundled" &&
!base.enabled &&
base.reason === "bundled (disabled by default)" &&
isBundledChannelEnabledByChannelConfig(params.rootConfig, params.id)
) {
return { enabled: true };
}
// do not override when base.reason === "not in allowlist"
Also consider emitting a warning when Analyzed PR: #58873 at commit Last updated on: 2026-04-01T08:56:32Z |
bfe67f9 to
1530a9d
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1530a9d43e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| return hits.some((hit) => { | ||
| const prefix = `channels.${sanitizeForLog(hit.channelId)}`; | ||
| return warning.includes(`${prefix}:`) || warning.includes(`${prefix}.`); |
There was a problem hiding this comment.
Suppress channel guidance only when the channel is truly blocked
isWarningBlockedByChannelPlugin suppresses all channels.<id> empty-allowlist guidance as soon as any blocker hit exists for that channel, even if another channel plugin for the same channel is still enabled. For example, a disabled alternate plugin (e.g. plugins.entries.alt-telegram.enabled=false) will add a blocker hit for telegram, and this check then hides first-time/setup warnings for channels.telegram.* despite the bundled Telegram plugin remaining loadable. That makes openclaw doctor omit actionable channel guidance in mixed-plugin setups.
Useful? React with 👍 / 👎.
Summary
channels.<id>.enabled=trueconfig is used under a restrictiveplugins.allowFixes #58848