* feat: add LINE plugin (#1630) (thanks @plum-dawg) * feat: complete LINE plugin (#1630) (thanks @plum-dawg) * chore: drop line plugin node_modules (#1630) (thanks @plum-dawg) * test: mock /context report in commands test (#1630) (thanks @plum-dawg) * test: limit macOS CI workers to avoid OOM (#1630) (thanks @plum-dawg) * test: reduce macOS CI vitest workers (#1630) (thanks @plum-dawg) --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
/**
|
|
* Plugin Command Handler
|
|
*
|
|
* Handles commands registered by plugins, bypassing the LLM agent.
|
|
* This handler is called before built-in command handlers.
|
|
*/
|
|
|
|
import { matchPluginCommand, executePluginCommand } from "../../plugins/commands.js";
|
|
import type { CommandHandler, CommandHandlerResult } from "./commands-types.js";
|
|
|
|
/**
|
|
* Handle plugin-registered commands.
|
|
* Returns a result if a plugin command was matched and executed,
|
|
* or null to continue to the next handler.
|
|
*/
|
|
export const handlePluginCommand: CommandHandler = async (
|
|
params,
|
|
allowTextCommands,
|
|
): Promise<CommandHandlerResult | null> => {
|
|
const { command, cfg } = params;
|
|
|
|
if (!allowTextCommands) return null;
|
|
|
|
// Try to match a plugin command
|
|
const match = matchPluginCommand(command.commandBodyNormalized);
|
|
if (!match) return null;
|
|
|
|
// Execute the plugin command (always returns a result)
|
|
const result = await executePluginCommand({
|
|
command: match.command,
|
|
args: match.args,
|
|
senderId: command.senderId,
|
|
channel: command.channel,
|
|
isAuthorizedSender: command.isAuthorizedSender,
|
|
commandBody: command.commandBodyNormalized,
|
|
config: cfg,
|
|
});
|
|
|
|
return {
|
|
shouldContinue: false,
|
|
reply: result,
|
|
};
|
|
};
|