diff --git a/src/plugin-sdk/session-store-runtime.test.ts b/src/plugin-sdk/session-store-runtime.test.ts new file mode 100644 index 000000000000..57b564818bfb --- /dev/null +++ b/src/plugin-sdk/session-store-runtime.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, it } from "vitest"; +import { + listSessionEntries as listAccessorSessionEntries, + loadSessionEntry, +} from "../config/sessions/session-accessor.js"; +import { getSessionEntry, listSessionEntries } from "./session-store-runtime.js"; + +describe("session-store-runtime", () => { + it("routes read helpers through the session accessor seam", () => { + expect(getSessionEntry).toBe(loadSessionEntry); + expect(listSessionEntries).toBe(listAccessorSessionEntries); + }); +}); diff --git a/src/plugin-sdk/session-store-runtime.ts b/src/plugin-sdk/session-store-runtime.ts index c2761409401c..3b072a46a2a2 100644 --- a/src/plugin-sdk/session-store-runtime.ts +++ b/src/plugin-sdk/session-store-runtime.ts @@ -1,5 +1,9 @@ // Narrow session-store helpers for channel hot paths. +import { + listSessionEntries, + loadSessionEntry as getSessionEntry, +} from "../config/sessions/session-accessor.js"; import { loadSessionStore as loadSessionStoreImpl } from "../config/sessions/store-load.js"; /** @@ -8,6 +12,7 @@ import { loadSessionStore as loadSessionStoreImpl } from "../config/sessions/sto * legacy mutable whole-store shape and will remain a compatibility escape hatch. */ export const loadSessionStore = loadSessionStoreImpl; +export { getSessionEntry, listSessionEntries }; export { resolveSessionStoreEntry } from "../config/sessions/store-entry.js"; export { @@ -22,8 +27,6 @@ export { resolveGroupSessionKey } from "../config/sessions/group.js"; export { canonicalizeMainSessionAlias } from "../config/sessions/main-session.js"; export { clearSessionStoreCacheForTest, - getSessionEntry, - listSessionEntries, patchSessionEntry, readSessionUpdatedAt, recordSessionMetaFromInbound, diff --git a/src/plugins/runtime/index.test.ts b/src/plugins/runtime/index.test.ts index 6cbfd5599f18..4587ea232681 100644 --- a/src/plugins/runtime/index.test.ts +++ b/src/plugins/runtime/index.test.ts @@ -6,6 +6,7 @@ import { setRuntimeConfigSnapshot, type OpenClawConfig, } from "../../config/config.js"; +import { listSessionEntries, loadSessionEntry } from "../../config/sessions/session-accessor.js"; import { onAgentEvent } from "../../infra/agent-events.js"; import { requestHeartbeat, @@ -321,6 +322,8 @@ describe("plugin runtime command execution", () => { "updateSessionStoreEntry", "resolveSessionFilePath", ]); + expect(runtime.agent.session.getSessionEntry).toBe(loadSessionEntry); + expect(runtime.agent.session.listSessionEntries).toBe(listSessionEntries); }, }, { diff --git a/src/plugins/runtime/runtime-agent.ts b/src/plugins/runtime/runtime-agent.ts index 6fbe68235306..35783d5871cd 100644 --- a/src/plugins/runtime/runtime-agent.ts +++ b/src/plugins/runtime/runtime-agent.ts @@ -12,8 +12,10 @@ import { normalizeThinkLevel, resolveThinkingProfile } from "../../auto-reply/th import { getRuntimeConfig } from "../../config/config.js"; import { resolveSessionFilePath, resolveStorePath } from "../../config/sessions/paths.js"; import { - getSessionEntry, listSessionEntries, + loadSessionEntry as getSessionEntry, +} from "../../config/sessions/session-accessor.js"; +import { loadSessionStore, patchSessionEntry, saveSessionStore, diff --git a/src/plugins/runtime/types-core.ts b/src/plugins/runtime/types-core.ts index aa0404ce4b8e..369a96496993 100644 --- a/src/plugins/runtime/types-core.ts +++ b/src/plugins/runtime/types-core.ts @@ -205,8 +205,8 @@ export type PluginRuntimeCore = { ensureAgentWorkspace: typeof import("../../agents/workspace.js").ensureAgentWorkspace; session: { resolveStorePath: typeof import("../../config/sessions/paths.js").resolveStorePath; - getSessionEntry: typeof import("../../config/sessions/store.js").getSessionEntry; - listSessionEntries: typeof import("../../config/sessions/store.js").listSessionEntries; + getSessionEntry: typeof import("../../config/sessions/session-accessor.js").loadSessionEntry; + listSessionEntries: typeof import("../../config/sessions/session-accessor.js").listSessionEntries; patchSessionEntry: typeof import("../../config/sessions/store.js").patchSessionEntry; upsertSessionEntry: typeof import("../../config/sessions/store.js").upsertSessionEntry; /**