























@@ -235,23 +235,48 @@ type DispatchTelegramMessageParams = {
235235type TelegramReasoningLevel = "off" | "on" | "stream";
236236237237type TelegramTranscriptMirrorPayload = { text?: string; mediaUrls?: string[] };
238+type TelegramSessionStore = ReturnType<typeof loadSessionStore>;
239+type FreshTelegramSessionStoreLoader = ((agentId: string) => {
240+storePath: string;
241+store: TelegramSessionStore;
242+}) & {
243+clear: () => void;
244+};
245+246+function createFreshTelegramSessionStoreLoader(params: {
247+cfg: OpenClawConfig;
248+telegramDeps: TelegramBotDeps;
249+}): FreshTelegramSessionStoreLoader {
250+const storesByPath = new Map<string, TelegramSessionStore>();
251+const load = ((agentId: string) => {
252+const storePath = params.telegramDeps.resolveStorePath(params.cfg.session?.store, { agentId });
253+const cachedStore = storesByPath.get(storePath);
254+if (cachedStore) {
255+return { storePath, store: cachedStore };
256+}
257+const store = (params.telegramDeps.loadSessionStore ?? loadSessionStore)(storePath, {
258+skipCache: true,
259+});
260+storesByPath.set(storePath, store);
261+return { storePath, store };
262+}) as FreshTelegramSessionStoreLoader;
263+load.clear = () => storesByPath.clear();
264+return load;
265+}
238266239267function resolveTelegramReasoningLevel(params: {
240268cfg: OpenClawConfig;
241269sessionKey?: string;
242270agentId: string;
243-telegramDeps: TelegramBotDeps;
271+loadFreshSessionStore: FreshTelegramSessionStoreLoader;
244272}): TelegramReasoningLevel {
245-const { cfg, sessionKey, agentId, telegramDeps } = params;
273+const { cfg, sessionKey, agentId } = params;
246274const configDefault = resolveTelegramConfigReasoningDefault(cfg, agentId);
247275if (!sessionKey) {
248276return configDefault;
249277}
250278try {
251-const storePath = telegramDeps.resolveStorePath(cfg.session?.store, { agentId });
252-const store = (telegramDeps.loadSessionStore ?? loadSessionStore)(storePath, {
253-skipCache: true,
254-});
279+const { store } = params.loadFreshSessionStore(agentId);
255280const entry = resolveSessionStoreEntry({ store, sessionKey }).existing;
256281const level = entry?.reasoningLevel;
257282if (level === "on" || level === "stream" || level === "off") {
@@ -285,19 +310,14 @@ async function mirrorTelegramAssistantReplyToTranscript(params: {
285310cfg: OpenClawConfig;
286311route: TelegramMessageContext["route"];
287312sessionKey: string;
288-telegramDeps: TelegramBotDeps;
313+loadFreshSessionStore: FreshTelegramSessionStoreLoader;
289314payload: TelegramTranscriptMirrorPayload;
290315}) {
291316const text = resolveTelegramMirroredTranscriptText(params.payload);
292317if (!text) {
293318return;
294319}
295-const storePath = params.telegramDeps.resolveStorePath(params.cfg.session?.store, {
296-agentId: params.route.agentId,
297-});
298-const store = (params.telegramDeps.loadSessionStore ?? loadSessionStore)(storePath, {
299-skipCache: true,
300-});
320+const { storePath, store } = params.loadFreshSessionStore(params.route.agentId);
301321const sessionEntry = resolveSessionStoreEntry({
302322 store,
303323sessionKey: params.sessionKey,
@@ -384,6 +404,7 @@ export const dispatchTelegramMessage = async ({
384404const dispatchStartedAt = Date.now();
385405const telegramDeps =
386406injectedTelegramDeps ?? (await import("./bot-deps.js")).defaultTelegramBotDeps;
407+const loadFreshSessionStore = createFreshTelegramSessionStoreLoader({ cfg, telegramDeps });
387408const {
388409 ctxPayload,
389410 msg,
@@ -499,7 +520,7 @@ export const dispatchTelegramMessage = async ({
499520 cfg,
500521sessionKey: ctxPayload.SessionKey,
501522agentId: route.agentId,
502-telegramDeps,
523+loadFreshSessionStore,
503524});
504525const forceBlockStreamingForReasoning = resolvedReasoningLevel === "on";
505526const streamReasoningDraft = resolvedReasoningLevel === "stream";
@@ -960,12 +981,7 @@ export const dispatchTelegramMessage = async ({
960981return undefined;
961982}
962983try {
963-const storePath = telegramDeps.resolveStorePath(cfg.session?.store, {
964-agentId: route.agentId,
965-});
966-const store = (telegramDeps.loadSessionStore ?? loadSessionStore)(storePath, {
967-skipCache: true,
968-});
984+const { storePath, store } = loadFreshSessionStore(route.agentId);
969985const sessionEntry = resolveSessionStoreEntry({
970986 store,
971987 sessionKey,
@@ -1020,7 +1036,7 @@ export const dispatchTelegramMessage = async ({
10201036 cfg,
10211037 route,
10221038 sessionKey,
1023-telegramDeps,
1039+loadFreshSessionStore,
10241040 payload,
10251041});
10261042}
@@ -1285,12 +1301,7 @@ export const dispatchTelegramMessage = async ({
1285130112861302if (isDmTopic) {
12871303try {
1288-const storePath = telegramDeps.resolveStorePath(cfg.session?.store, {
1289-agentId: route.agentId,
1290-});
1291-const store = (telegramDeps.loadSessionStore ?? loadSessionStore)(storePath, {
1292-skipCache: true,
1293-});
1304+const { store } = loadFreshSessionStore(route.agentId);
12941305const sessionKey = ctxPayload.SessionKey;
12951306if (sessionKey) {
12961307const entry = resolveSessionStoreEntry({ store, sessionKey }).existing;
@@ -1302,6 +1313,7 @@ export const dispatchTelegramMessage = async ({
13021313logVerbose(`auto-topic-label: session store error: ${formatErrorMessage(err)}`);
13031314}
13041315}
1316+loadFreshSessionStore.clear();
1305131713061318if (statusReactionController && !isRoomEvent) {
13071319void statusReactionController.setThinking();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。