Fixes #1327 - 'clawdbot message --channel telegram' fails with 'Unknown channel: telegram' because plugins weren't loaded. The Commander code path (non-route-first) calls ensureConfigReady() in preAction but doesn't load the plugin registry. Channel plugins like telegram are registered during plugin loading, so getChannelPlugin() returns undefined without it. This adds ensurePluginRegistryLoaded() call for commands that need channel plugin access: message, channels, directory.
36 lines
1.4 KiB
TypeScript
36 lines
1.4 KiB
TypeScript
import type { Command } from "commander";
|
|
import { defaultRuntime } from "../../runtime.js";
|
|
import { emitCliBanner } from "../banner.js";
|
|
import { getCommandPath, hasHelpOrVersion } from "../argv.js";
|
|
import { ensureConfigReady } from "./config-guard.js";
|
|
import { ensurePluginRegistryLoaded } from "../plugin-registry.js";
|
|
|
|
function setProcessTitleForCommand(actionCommand: Command) {
|
|
let current: Command = actionCommand;
|
|
while (current.parent && current.parent.parent) {
|
|
current = current.parent;
|
|
}
|
|
const name = current.name();
|
|
if (!name || name === "clawdbot") return;
|
|
process.title = `clawdbot-${name}`;
|
|
}
|
|
|
|
// Commands that need channel plugins loaded
|
|
const PLUGIN_REQUIRED_COMMANDS = new Set(["message", "channels", "directory"]);
|
|
|
|
export function registerPreActionHooks(program: Command, programVersion: string) {
|
|
program.hook("preAction", async (_thisCommand, actionCommand) => {
|
|
setProcessTitleForCommand(actionCommand);
|
|
emitCliBanner(programVersion);
|
|
const argv = process.argv;
|
|
if (hasHelpOrVersion(argv)) return;
|
|
const commandPath = getCommandPath(argv, 2);
|
|
if (commandPath[0] === "doctor") return;
|
|
await ensureConfigReady({ runtime: defaultRuntime, commandPath });
|
|
// Load plugins for commands that need channel access
|
|
if (PLUGIN_REQUIRED_COMMANDS.has(commandPath[0])) {
|
|
ensurePluginRegistryLoaded();
|
|
}
|
|
});
|
|
}
|