





























@@ -4,9 +4,18 @@ import os from "node:os";
44import path from "node:path";
55import { resetPluginStateStoreForTests } from "openclaw/plugin-sdk/plugin-state-test-runtime";
66import { beforeEach, describe, expect, it, vi } from "vitest";
7-import { createMSTeamsConversationStoreMemory } from "./conversation-store-memory.js";
7+import {
8+findPreferredDmConversationByUserId,
9+mergeStoredConversationReference,
10+normalizeStoredConversationId,
11+toConversationStoreEntries,
12+} from "./conversation-store-helpers.js";
813import { createMSTeamsConversationStoreState } from "./conversation-store-state.js";
9-import type { MSTeamsConversationStore } from "./conversation-store.js";
14+import type {
15+MSTeamsConversationStore,
16+MSTeamsConversationStoreEntry,
17+StoredConversationReference,
18+} from "./conversation-store.js";
1019import { setMSTeamsRuntime } from "./runtime.js";
1120import { msteamsRuntimeStub } from "./test-support/runtime.js";
1221@@ -15,6 +24,39 @@ type StoreFactory = {
1524createStore: () => Promise<MSTeamsConversationStore>;
1625};
172627+function createMemoryConversationStore(
28+initial: MSTeamsConversationStoreEntry[] = [],
29+): MSTeamsConversationStore {
30+const map = new Map<string, StoredConversationReference>();
31+for (const { conversationId, reference } of initial) {
32+map.set(normalizeStoredConversationId(conversationId), reference);
33+}
34+35+const findPreferredDmByUserId = async (
36+id: string,
37+): Promise<MSTeamsConversationStoreEntry | null> =>
38+findPreferredDmConversationByUserId(toConversationStoreEntries(map.entries()), id);
39+40+return {
41+upsert: async (conversationId, reference) => {
42+const normalizedId = normalizeStoredConversationId(conversationId);
43+map.set(
44+normalizedId,
45+mergeStoredConversationReference(
46+map.get(normalizedId),
47+reference,
48+new Date().toISOString(),
49+),
50+);
51+},
52+get: async (conversationId) => map.get(normalizeStoredConversationId(conversationId)) ?? null,
53+list: async () => toConversationStoreEntries(map.entries()),
54+remove: async (conversationId) => map.delete(normalizeStoredConversationId(conversationId)),
55+ findPreferredDmByUserId,
56+findByUserId: findPreferredDmByUserId,
57+};
58+}
59+1860const storeFactories: StoreFactory[] = [
1961{
2062name: "state",
@@ -28,7 +70,7 @@ const storeFactories: StoreFactory[] = [
2870},
2971{
3072name: "memory",
31-createStore: async () => createMSTeamsConversationStoreMemory(),
73+createStore: async () => createMemoryConversationStore(),
3274},
3375];
3476此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。