openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
275 lines (274 loc) • 11.4 kB
JavaScript
import { l as normalizeOptionalString } from "./string-coerce-CIXf7egm.js";
import { r as createLazyRuntimeModule } from "./lazy-runtime-CgCh8H_K.js";
import { c as resolveAgentConfig, u as resolveAgentDir } from "./agent-scope-config-DcbEhP0R.js";
import { t as resolveDefaultModelForAgent } from "./model-selection-config-BrdmmqKD.js";
import { o as resolveEffectiveAgentRuntime } from "./thinking-runtime-BiFbTVdI.js";
import { a as loadPreparedModelCatalog } from "./prepared-model-catalog-Bt4dYhnY.js";
import { i as formatFastModeCurrentStatus } from "./fast-mode-CCX0YiYh.js";
import { t as resolveFastModeState } from "./fast-mode-CTXu8q8K.js";
import { n as resolveStoredModelOverride } from "./stored-model-overrides-j_gQYbkA.js";
import { f as resolveCommandArgMenu, i as formatCommandArgMenuTitle, n as buildCommandTextFromArgs, r as findCommandByNativeName, u as parseCommandArgs } from "./commands-registry-zRoXYk7P.js";
import "./string-coerce-runtime-GQa0ehRA.js";
import { h as resolveStorePath, i as getSessionEntry } from "./session-store-runtime-Btld46Zi.js";
import { n as resolveThinkingDefaultWithRuntimeCatalog } from "./agent-runtime-B15RhSG0.js";
import "./command-auth-native-DJzZkbeX.js";
import { O as buildInlineKeyboard } from "./text-chunk-limit-C3EsGj6Q.js";
import { t as buildTelegramNativeCommandCallbackData } from "./native-command-callback-data-C1RSVJRf.js";
import { t as withTelegramApiErrorLogging } from "./api-logging-aN8dtVY1.js";
import { n as prepareTelegramCommandDispatch, t as dispatchTelegramBuiltinTurn } from "./bot-native-command-dispatch-DLZww-Zo.js";
//#region extensions/telegram/src/bot-native-command-builtins.ts
const loadTelegramLoginCommandExecutor = createLazyRuntimeModule(() => import("./bot-native-command-login-CPrpBERS.js"));
function buildTelegramCommandMenuModelContext(params) {
return {
provider: params.provider,
model: params.model,
...params.thinkingLevel ? { thinkingLevel: params.thinkingLevel } : {},
...params.fastMode !== void 0 ? { fastMode: params.fastMode } : {}
};
}
function resolveTelegramCommandMenuModelContext(params) {
if (!params.sessionKey.trim()) return {};
try {
const storePath = resolveStorePath(params.cfg.session?.store, { agentId: params.agentId });
const defaultModel = resolveDefaultModelForAgent({
cfg: params.cfg,
agentId: params.agentId
});
const entry = getSessionEntry({
storePath,
sessionKey: params.sessionKey
});
const thinkingLevel = normalizeOptionalString(entry?.thinkingLevel);
const fastMode = entry?.fastMode;
let context;
if (entry?.modelOverrideSource === "auto" && normalizeOptionalString(entry.modelOverride)) context = buildTelegramCommandMenuModelContext({
provider: defaultModel.provider,
model: defaultModel.model,
...thinkingLevel ? { thinkingLevel } : {},
...fastMode !== void 0 ? { fastMode } : {}
});
else {
const override = resolveStoredModelOverride({
sessionEntry: entry,
loadSessionEntry: (sessionKey) => getSessionEntry({
storePath,
sessionKey
}),
sessionKey: params.sessionKey,
defaultProvider: defaultModel.provider
});
if (override?.model) context = buildTelegramCommandMenuModelContext({
provider: override.provider || defaultModel.provider,
model: override.model,
...thinkingLevel ? { thinkingLevel } : {},
...fastMode !== void 0 ? { fastMode } : {}
});
else {
const provider = normalizeOptionalString(entry?.providerOverride) ?? normalizeOptionalString(entry?.modelProvider);
const model = normalizeOptionalString(entry?.modelOverride) ?? normalizeOptionalString(entry?.model);
context = {
...provider ? { provider } : {},
...model ? { model } : {},
...thinkingLevel ? { thinkingLevel } : {},
...fastMode !== void 0 ? { fastMode } : {}
};
}
}
return {
...context,
agentRuntime: resolveEffectiveAgentRuntime({
cfg: params.cfg,
provider: context.provider ?? defaultModel.provider,
modelId: context.model ?? defaultModel.model,
agentId: params.agentId,
sessionKey: params.sessionKey,
sessionEntry: entry
})
};
} catch {
return {};
}
}
function resolveTelegramFastCommandModelContext(params) {
const defaultModel = resolveDefaultModelForAgent({
cfg: params.cfg,
agentId: params.agentId
});
const fallback = () => ({
provider: defaultModel.provider,
model: defaultModel.model
});
if (!params.sessionKey.trim()) return fallback();
try {
const storePath = resolveStorePath(params.cfg.session?.store, { agentId: params.agentId });
const entry = getSessionEntry({
storePath,
sessionKey: params.sessionKey
});
if (entry?.modelOverrideSource === "auto" && normalizeOptionalString(entry.modelOverride)) return fallback();
const override = resolveStoredModelOverride({
sessionEntry: entry,
loadSessionEntry: (sessionKey) => getSessionEntry({
storePath,
sessionKey
}),
sessionKey: params.sessionKey,
defaultProvider: defaultModel.provider
});
return {
provider: override?.provider ?? defaultModel.provider,
model: override?.model ?? defaultModel.model
};
} catch {
return fallback();
}
}
function resolveTelegramFastCommandState(params) {
const defaultModel = resolveDefaultModelForAgent({
cfg: params.cfg,
agentId: params.agentId
});
const fallback = () => resolveFastModeState({
cfg: params.cfg,
provider: defaultModel.provider,
model: defaultModel.model,
agentId: params.agentId
});
if (!params.sessionKey.trim()) return fallback();
try {
const storePath = resolveStorePath(params.cfg.session?.store, { agentId: params.agentId });
const entry = getSessionEntry({
storePath,
sessionKey: params.sessionKey
});
const modelContext = resolveTelegramFastCommandModelContext(params);
return resolveFastModeState({
cfg: params.cfg,
provider: modelContext.provider ?? defaultModel.provider,
model: modelContext.model ?? defaultModel.model,
agentId: params.agentId,
sessionEntry: entry?.fastMode !== void 0 ? { fastMode: entry.fastMode } : void 0
});
} catch {
return fallback();
}
}
async function resolveTelegramThinkMenuCurrentLevel(params) {
const explicit = normalizeOptionalString(params.thinkingLevel);
if (explicit) return explicit;
const agentThinkingDefault = normalizeOptionalString(resolveAgentConfig(params.cfg, params.agentId)?.thinkingDefault);
if (agentThinkingDefault) return agentThinkingDefault;
const defaultModel = resolveDefaultModelForAgent({
cfg: params.cfg,
agentId: params.agentId
});
return await resolveThinkingDefaultWithRuntimeCatalog({
cfg: params.cfg,
provider: params.provider ?? defaultModel.provider,
model: params.model ?? defaultModel.model,
agentRuntime: params.agentRuntime,
loadModelCatalog: async () => params.catalog
});
}
function formatTelegramCommandArgMenuTitle(params) {
const title = formatCommandArgMenuTitle({
command: params.command,
menu: params.menu
});
if (params.command.key === "think" && params.currentThinkingLevel) return `Current thinking level: ${params.currentThinkingLevel}.\n${title}`;
if (params.command.key === "fast" && params.currentFastModeStatus) {
const options = params.menu.choices.map((choice) => choice.label.trim()).filter(Boolean).join(", ");
return options ? `${params.currentFastModeStatus}\nOptions: ${options}.` : params.currentFastModeStatus;
}
return title;
}
async function executeTelegramBuiltinCommand(params) {
const dispatch = await prepareTelegramCommandDispatch({
...params,
requireAuth: true
});
if (!dispatch) return false;
const commandDefinition = findCommandByNativeName(params.commandName, "telegram", { includeBundledChannelFallback: false });
const commandArgs = commandDefinition ? parseCommandArgs(commandDefinition, params.rawText) : params.rawText ? { raw: params.rawText } : void 0;
const prompt = commandDefinition ? buildCommandTextFromArgs(commandDefinition, commandArgs) : params.rawText ? `/${params.commandName} ${params.rawText}` : `/${params.commandName}`;
if (commandDefinition?.key === "login") {
const { executeTelegramLoginCommand } = await loadTelegramLoginCommandExecutor();
return await executeTelegramLoginCommand({
dispatch,
commandArgs
});
}
const menuNeedsModelContext = commandDefinition?.argsMenu && !(commandArgs?.raw && !commandArgs.values) && commandDefinition.args?.some((arg) => typeof arg.choices === "function" && commandArgs?.values?.[arg.name] == null);
const sessionKeyForMenu = commandDefinition && menuNeedsModelContext ? dispatch.targetSessionKey : "";
const fastCommandState = commandDefinition?.key === "fast" && menuNeedsModelContext ? resolveTelegramFastCommandState({
cfg: dispatch.runtimeCfg,
agentId: dispatch.route.agentId,
sessionKey: sessionKeyForMenu
}) : void 0;
const fastMenuModelContext = commandDefinition?.key === "fast" && menuNeedsModelContext ? resolveTelegramFastCommandModelContext({
cfg: dispatch.runtimeCfg,
agentId: dispatch.route.agentId,
sessionKey: sessionKeyForMenu
}) : void 0;
const menuModelContext = commandDefinition && menuNeedsModelContext ? fastMenuModelContext ?? resolveTelegramCommandMenuModelContext({
cfg: dispatch.runtimeCfg,
agentId: dispatch.route.agentId,
sessionKey: sessionKeyForMenu
}) : {};
const menuModelCatalog = commandDefinition?.key === "think" && menuNeedsModelContext ? await loadPreparedModelCatalog({
config: dispatch.runtimeCfg,
agentId: dispatch.route.agentId,
agentDir: resolveAgentDir(dispatch.runtimeCfg, dispatch.route.agentId),
readOnly: true
}) : void 0;
const menu = commandDefinition ? resolveCommandArgMenu({
command: commandDefinition,
args: commandArgs,
cfg: dispatch.runtimeCfg,
session: {
agentId: dispatch.route.agentId,
sessionKey: dispatch.targetSessionKey
},
...menuModelContext,
...menuModelCatalog?.length ? { catalog: menuModelCatalog } : {}
}) : null;
if (menu && commandDefinition) {
const title = formatTelegramCommandArgMenuTitle({
command: commandDefinition,
menu,
currentThinkingLevel: commandDefinition.key === "think" ? await resolveTelegramThinkMenuCurrentLevel({
cfg: dispatch.runtimeCfg,
agentId: dispatch.route.agentId,
...menuModelContext,
catalog: menuModelCatalog ?? []
}) : void 0,
currentFastModeStatus: commandDefinition.key === "fast" ? formatFastModeCurrentStatus({ ...fastCommandState ?? resolveTelegramFastCommandState({
cfg: dispatch.runtimeCfg,
agentId: dispatch.route.agentId,
sessionKey: sessionKeyForMenu
}) }) : void 0
});
const rows = [];
for (let index = 0; index < menu.choices.length; index += 2) rows.push(menu.choices.slice(index, index + 2).map((choice) => ({
text: choice.label,
callback_data: buildTelegramNativeCommandCallbackData(buildCommandTextFromArgs(commandDefinition, { values: { [menu.arg.name]: choice.value } }))
})));
const replyMarkup = buildInlineKeyboard(rows);
await withTelegramApiErrorLogging({
operation: "sendMessage",
runtime: dispatch.runtime,
fn: () => dispatch.bot.api.sendMessage(dispatch.chatId, title, {
...replyMarkup ? { reply_markup: replyMarkup } : {},
...dispatch.threadParams
})
});
return false;
}
return await dispatchTelegramBuiltinTurn({
dispatch,
prompt,
commandArgs
});
}
//#endregion
export { executeTelegramBuiltinCommand };