From 5caa1dbc82c545e211d7547e073a03aaa347af53 Mon Sep 17 00:00:00 2001 From: Josh Lehman Date: Sun, 31 May 2026 18:54:46 -0700 Subject: [PATCH] clawdbot-d02: route plugin timestamp reads through accessor --- src/plugin-sdk/config-runtime.test.ts | 16 ++++++++++++++++ src/plugin-sdk/config-runtime.ts | 9 ++++++--- src/plugin-sdk/session-store-runtime.test.ts | 8 +++++++- src/plugin-sdk/session-store-runtime.ts | 4 ++-- src/plugins/runtime/runtime-channel.ts | 2 +- 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/plugin-sdk/config-runtime.test.ts b/src/plugin-sdk/config-runtime.test.ts index 512d0385b8fb..2e7940cb9821 100644 --- a/src/plugin-sdk/config-runtime.test.ts +++ b/src/plugin-sdk/config-runtime.test.ts @@ -3,11 +3,27 @@ */ import { describe, expect, it } from "vitest"; import { + listSessionEntries as listAccessorSessionEntries, + loadSessionEntry, + readSessionUpdatedAt as readAccessorSessionUpdatedAt, +} from "../config/sessions/session-accessor.js"; +import { + getSessionEntry, + listSessionEntries, + readSessionUpdatedAt, resolveLivePluginConfigObject, resolvePluginConfigObject, type OpenClawConfig, } from "./config-runtime.js"; +describe("config-runtime session read exports", () => { + it("routes read helpers through the session accessor seam", () => { + expect(getSessionEntry).toBe(loadSessionEntry); + expect(listSessionEntries).toBe(listAccessorSessionEntries); + expect(readSessionUpdatedAt).toBe(readAccessorSessionUpdatedAt); + }); +}); + describe("resolvePluginConfigObject", () => { it("returns the plugin config object for a configured plugin entry", () => { const config = { diff --git a/src/plugin-sdk/config-runtime.ts b/src/plugin-sdk/config-runtime.ts index 08d4d5f54011..d779e90d9746 100644 --- a/src/plugin-sdk/config-runtime.ts +++ b/src/plugin-sdk/config-runtime.ts @@ -4,6 +4,11 @@ * config-mutation, and runtime-config-snapshot. */ +import { + listSessionEntries, + loadSessionEntry as getSessionEntry, + readSessionUpdatedAt, +} from "../config/sessions/session-accessor.js"; import { loadSessionStore as loadSessionStoreImpl } from "../config/sessions/store-load.js"; /** @@ -12,6 +17,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, readSessionUpdatedAt }; export { resolveDefaultAgentId } from "../agents/agent-scope.js"; export { @@ -141,10 +147,7 @@ export type { } from "../config/types.js"; export { clearSessionStoreCacheForTest, - getSessionEntry, - listSessionEntries, patchSessionEntry, - readSessionUpdatedAt, recordSessionMetaFromInbound, saveSessionStore, updateLastRoute, diff --git a/src/plugin-sdk/session-store-runtime.test.ts b/src/plugin-sdk/session-store-runtime.test.ts index 57b564818bfb..9bc775f92c4a 100644 --- a/src/plugin-sdk/session-store-runtime.test.ts +++ b/src/plugin-sdk/session-store-runtime.test.ts @@ -2,12 +2,18 @@ import { describe, expect, it } from "vitest"; import { listSessionEntries as listAccessorSessionEntries, loadSessionEntry, + readSessionUpdatedAt as readAccessorSessionUpdatedAt, } from "../config/sessions/session-accessor.js"; -import { getSessionEntry, listSessionEntries } from "./session-store-runtime.js"; +import { + getSessionEntry, + listSessionEntries, + readSessionUpdatedAt, +} 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); + expect(readSessionUpdatedAt).toBe(readAccessorSessionUpdatedAt); }); }); diff --git a/src/plugin-sdk/session-store-runtime.ts b/src/plugin-sdk/session-store-runtime.ts index 3b072a46a2a2..3b331352a7b5 100644 --- a/src/plugin-sdk/session-store-runtime.ts +++ b/src/plugin-sdk/session-store-runtime.ts @@ -3,6 +3,7 @@ import { listSessionEntries, loadSessionEntry as getSessionEntry, + readSessionUpdatedAt, } from "../config/sessions/session-accessor.js"; import { loadSessionStore as loadSessionStoreImpl } from "../config/sessions/store-load.js"; @@ -12,7 +13,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 { getSessionEntry, listSessionEntries, readSessionUpdatedAt }; export { resolveSessionStoreEntry } from "../config/sessions/store-entry.js"; export { @@ -28,7 +29,6 @@ export { canonicalizeMainSessionAlias } from "../config/sessions/main-session.js export { clearSessionStoreCacheForTest, patchSessionEntry, - readSessionUpdatedAt, recordSessionMetaFromInbound, saveSessionStore, updateLastRoute, diff --git a/src/plugins/runtime/runtime-channel.ts b/src/plugins/runtime/runtime-channel.ts index 51241b9a3664..751f2b3c0976 100644 --- a/src/plugins/runtime/runtime-channel.ts +++ b/src/plugins/runtime/runtime-channel.ts @@ -64,11 +64,11 @@ import { } from "../../config/group-policy.js"; import { resolveMarkdownTableMode } from "../../config/markdown-tables.js"; import { - readSessionUpdatedAt, recordSessionMetaFromInbound, resolveStorePath, updateLastRoute, } from "../../config/sessions.js"; +import { readSessionUpdatedAt } from "../../config/sessions/session-accessor.js"; import { getChannelActivity, recordChannelActivity } from "../../infra/channel-activity.js"; import { fetchRemoteMedia,