From 2f8c5a2e0b20903513bc362a1bd287517f8d0504 Mon Sep 17 00:00:00 2001 From: elliotsecops Date: Tue, 27 Jan 2026 18:23:12 -0400 Subject: [PATCH] feat(cli): improve error message for disabled bundled channels Instead of a generic "Unsupported channel" error, the CLI now detects if a plugin exists on disk but is disabled. It prompts the user to run "clawdbot plugins enable " to fix it. --- src/cli/channel-auth.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/cli/channel-auth.ts b/src/cli/channel-auth.ts index f7c9d85ea..ebb17694d 100644 --- a/src/cli/channel-auth.ts +++ b/src/cli/channel-auth.ts @@ -1,3 +1,6 @@ +import fs from "node:fs"; +import path from "node:path"; +import process from "node:process"; import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js"; import { getChannelPlugin, normalizeChannelId } from "../channels/plugins/index.js"; import { DEFAULT_CHAT_CHANNEL } from "../channels/registry.js"; @@ -11,6 +14,18 @@ type ChannelAuthOptions = { verbose?: boolean; }; +const checkDisabledPlugin = (channelInput: string) => { + try { + const extPath = path.join(process.cwd(), "extensions", channelInput); + if (fs.existsSync(extPath) && fs.statSync(extPath).isDirectory()) { + return `Channel '${channelInput}' plugin found but likely disabled. Run 'clawdbot plugins enable ${channelInput}' to use it.`; + } + } catch { + // ignore + } + return `Unsupported channel: ${channelInput}`; +}; + export async function runChannelLogin( opts: ChannelAuthOptions, runtime: RuntimeEnv = defaultRuntime, @@ -18,7 +33,7 @@ export async function runChannelLogin( const channelInput = opts.channel ?? DEFAULT_CHAT_CHANNEL; const channelId = normalizeChannelId(channelInput); if (!channelId) { - throw new Error(`Unsupported channel: ${channelInput}`); + throw new Error(checkDisabledPlugin(channelInput)); } const plugin = getChannelPlugin(channelId); if (!plugin?.auth?.login) { @@ -44,7 +59,7 @@ export async function runChannelLogout( const channelInput = opts.channel ?? DEFAULT_CHAT_CHANNEL; const channelId = normalizeChannelId(channelInput); if (!channelId) { - throw new Error(`Unsupported channel: ${channelInput}`); + throw new Error(checkDisabledPlugin(channelInput)); } const plugin = getChannelPlugin(channelId); if (!plugin?.gateway?.logoutAccount) {