import { logVerbose } from "../../globals.js"; import { resolveSendPolicy } from "../../sessions/send-policy.js"; import { shouldHandleTextCommands } from "../commands-registry.js"; import { handleBashCommand } from "./commands-bash.js"; import { handleCompactCommand } from "./commands-compact.js"; import { handleConfigCommand, handleDebugCommand } from "./commands-config.js"; import { handleCommandsListCommand, handleContextCommand, handleHelpCommand, handleStatusCommand, handleWhoamiCommand, } from "./commands-info.js"; import { handleAbortTrigger, handleActivationCommand, handleRestartCommand, handleSendPolicyCommand, handleStopCommand, } from "./commands-session.js"; import type { CommandHandler, CommandHandlerResult, HandleCommandsParams, } from "./commands-types.js"; const HANDLERS: CommandHandler[] = [ handleBashCommand, handleActivationCommand, handleSendPolicyCommand, handleRestartCommand, handleHelpCommand, handleCommandsListCommand, handleStatusCommand, handleContextCommand, handleWhoamiCommand, handleConfigCommand, handleDebugCommand, handleStopCommand, handleCompactCommand, handleAbortTrigger, ]; export async function handleCommands(params: HandleCommandsParams): Promise { const resetRequested = params.command.commandBodyNormalized === "/reset" || params.command.commandBodyNormalized === "/new"; if (resetRequested && !params.command.isAuthorizedSender) { logVerbose( `Ignoring /reset from unauthorized sender: ${params.command.senderId || ""}`, ); return { shouldContinue: false }; } const allowTextCommands = shouldHandleTextCommands({ cfg: params.cfg, surface: params.command.surface, commandSource: params.ctx.CommandSource, }); for (const handler of HANDLERS) { const result = await handler(params, allowTextCommands); if (result) return result; } const sendPolicy = resolveSendPolicy({ cfg: params.cfg, entry: params.sessionEntry, sessionKey: params.sessionKey, channel: params.sessionEntry?.channel ?? params.command.channel, chatType: params.sessionEntry?.chatType, }); if (sendPolicy === "deny") { logVerbose(`Send blocked by policy for session ${params.sessionKey ?? "unknown"}`); return { shouldContinue: false }; } return { shouldContinue: true }; }