diff --git a/src/config/sessions/conversation-registry.ts b/src/config/sessions/conversation-registry.ts index bf2694dd45b1..429e00a32b47 100644 --- a/src/config/sessions/conversation-registry.ts +++ b/src/config/sessions/conversation-registry.ts @@ -1,7 +1,9 @@ import { normalizeOptionalLowercaseString } from "@openclaw/normalization-core/string-coerce"; import { executeSqliteQuerySync } from "../../infra/kysely-sync.js"; import { openOpenClawAgentDatabase } from "../../state/openclaw-agent-db.js"; +import type { OpenClawConfig } from "../types.openclaw.js"; import type { ConversationIdentity, ConversationKind } from "./conversation-identity.js"; +import { resolveStorePath } from "./paths.js"; import { upsertConversationIdentity } from "./session-accessor.sqlite-conversation.js"; import { getSessionKysely, @@ -36,6 +38,19 @@ export type ConversationRegistryScope = { storePath?: string; }; +export function resolveConversationRegistryScope(params: { + agentId: string; + config: OpenClawConfig; +}): ConversationRegistryScope { + const configuredStore = params.config.session?.store; + return { + agentId: params.agentId, + ...(configuredStore + ? { storePath: resolveStorePath(configuredStore, { agentId: params.agentId }) } + : {}), + }; +} + function normalizeConversationRef(value: string): string { const normalized = value.trim().toLowerCase(); if (!CONVERSATION_REF_PATTERN.test(normalized)) { diff --git a/src/gateway/conversation-list.ts b/src/gateway/conversation-list.ts index db53e0e74d41..6f3def8298bb 100644 --- a/src/gateway/conversation-list.ts +++ b/src/gateway/conversation-list.ts @@ -10,10 +10,10 @@ import { import { listConversations, registerConversationAddresses, + resolveConversationRegistryScope, type ConversationRecord, type ConversationRegistryScope, } from "../config/sessions/conversation-registry.js"; -import { resolveStorePath } from "../config/sessions/paths.js"; import type { OpenClawConfig } from "../config/types.openclaw.js"; import { formatErrorMessage } from "../infra/errors.js"; import { resolveOutboundChannelPlugin } from "../infra/outbound/channel-resolution.js"; @@ -37,19 +37,6 @@ const defaultDeps: ConversationListDeps = { resolveOutboundSessionRoute, }; -function resolveConversationScope(params: { - agentId: string; - config: OpenClawConfig; -}): ConversationRegistryScope { - const configuredStore = params.config.session?.store; - return { - agentId: params.agentId, - ...(configuredStore - ? { storePath: resolveStorePath(configuredStore, { agentId: params.agentId }) } - : {}), - }; -} - function presentConversation(conversation: ConversationRecord): ConversationListItem { return { conversationRef: conversation.conversationRef, @@ -233,7 +220,7 @@ export async function runGatewayConversationList( }, deps: ConversationListDeps = defaultDeps, ): Promise { - const scope = resolveConversationScope(params); + const scope = resolveConversationRegistryScope(params); const query = params.query?.trim() || undefined; const discovery = params.channel ? await discoverChannelAddresses({ diff --git a/src/gateway/conversation-send.ts b/src/gateway/conversation-send.ts index 0c1114061049..6a0a280c62e8 100644 --- a/src/gateway/conversation-send.ts +++ b/src/gateway/conversation-send.ts @@ -5,9 +5,8 @@ import { } from "../config/sessions/conversation-delivery-store.js"; import { resolveConversation, - type ConversationRegistryScope, + resolveConversationRegistryScope, } from "../config/sessions/conversation-registry.js"; -import { resolveStorePath } from "../config/sessions/paths.js"; import type { OpenClawConfig } from "../config/types.openclaw.js"; import { ConversationDeliveryRejectedError, @@ -29,19 +28,6 @@ const defaultDeps: ConversationSendDeps = { resolveConversation, }; -function resolveConversationScope(params: { - agentId: string; - config: OpenClawConfig; -}): ConversationRegistryScope { - const configuredStore = params.config.session?.store; - return { - agentId: params.agentId, - ...(configuredStore - ? { storePath: resolveStorePath(configuredStore, { agentId: params.agentId }) } - : {}), - }; -} - function resultForCompletedOperation( operation: ConversationDeliveryRecord, ): ConversationSendResult | undefined { @@ -94,7 +80,7 @@ export async function runGatewayConversationSend( }, deps: ConversationSendDeps = defaultDeps, ): Promise { - const scope = resolveConversationScope(params); + const scope = resolveConversationRegistryScope(params); try { const prior = deps.getOperation(scope, params.operationId); let operation: ConversationDeliveryRecord | undefined; diff --git a/src/gateway/conversation-turn.ts b/src/gateway/conversation-turn.ts index 6b34870a0682..1f53581099d2 100644 --- a/src/gateway/conversation-turn.ts +++ b/src/gateway/conversation-turn.ts @@ -3,10 +3,10 @@ import type { ChannelId } from "../channels/plugins/types.public.js"; import { ConversationDeliveryInputError } from "../config/sessions/conversation-delivery-store.js"; import { resolveConversation, + resolveConversationRegistryScope, type ConversationRecord, type ConversationRegistryScope, } from "../config/sessions/conversation-registry.js"; -import { resolveStorePath } from "../config/sessions/paths.js"; import type { OpenClawConfig } from "../config/types.openclaw.js"; import { resolveOutboundChannelPlugin } from "../infra/outbound/channel-resolution.js"; import { @@ -53,19 +53,6 @@ const defaultDeps: ConversationTurnDeps = { resolveOutboundSessionRoute, }; -function resolveConversationScope(params: { - agentId: string; - config: OpenClawConfig; -}): ConversationRegistryScope { - const configuredStore = params.config.session?.store; - return { - agentId: params.agentId, - ...(configuredStore - ? { storePath: resolveStorePath(configuredStore, { agentId: params.agentId }) } - : {}), - }; -} - function resultForCompletedOperation(params: { operation: ReturnType["record"]; }): ConversationTurnResult | undefined { @@ -227,7 +214,7 @@ export async function runGatewayConversationTurn( }, deps: ConversationTurnDeps = defaultDeps, ): Promise { - const scope = resolveConversationScope(params); + const scope = resolveConversationRegistryScope(params); const prior = deps.getOperation(scope, params.turnId); let begun: ReturnType | undefined; try {