diff --git a/src/features/hook-message-injector/index.ts b/src/features/hook-message-injector/index.ts index 2c8a91e6..e8b4ede4 100644 --- a/src/features/hook-message-injector/index.ts +++ b/src/features/hook-message-injector/index.ts @@ -4,6 +4,7 @@ export { findFirstMessageWithAgent, findNearestMessageWithFieldsFromSDK, findFirstMessageWithAgentFromSDK, + resolveMessageContext, } from "./injector" export type { StoredMessage } from "./injector" export type { MessageMeta, OriginalMessageContext, TextPart, ToolPermission } from "./types" diff --git a/src/tools/background-task/create-background-task.ts b/src/tools/background-task/create-background-task.ts index 22adff8c..9da0d5c5 100644 --- a/src/tools/background-task/create-background-task.ts +++ b/src/tools/background-task/create-background-task.ts @@ -2,18 +2,12 @@ import { tool, type PluginInput, type ToolDefinition } from "@opencode-ai/plugin import type { BackgroundManager } from "../../features/background-agent" import type { BackgroundTaskArgs } from "./types" import { BACKGROUND_TASK_DESCRIPTION } from "./constants" -import { - findFirstMessageWithAgent, - findFirstMessageWithAgentFromSDK, - findNearestMessageWithFields, - findNearestMessageWithFieldsFromSDK, -} from "../../features/hook-message-injector" +import { resolveMessageContext } from "../../features/hook-message-injector" import { getSessionAgent } from "../../features/claude-code-session-state" import { storeToolMetadata } from "../../features/tool-metadata-store" import { log } from "../../shared/logger" import { delay } from "./delay" import { getMessageDir } from "./message-dir" -import { isSqliteBackend } from "../../shared/opencode-storage-detection" type ToolContextWithMetadata = { sessionID: string @@ -44,16 +38,11 @@ export function createBackgroundTask( try { const messageDir = getMessageDir(ctx.sessionID) - - const [prevMessage, firstMessageAgent] = isSqliteBackend() - ? await Promise.all([ - findNearestMessageWithFieldsFromSDK(client, ctx.sessionID), - findFirstMessageWithAgentFromSDK(client, ctx.sessionID), - ]) - : [ - messageDir ? findNearestMessageWithFields(messageDir) : null, - messageDir ? findFirstMessageWithAgent(messageDir) : null, - ] + const { prevMessage, firstMessageAgent } = await resolveMessageContext( + ctx.sessionID, + client, + messageDir + ) const sessionAgent = getSessionAgent(ctx.sessionID) const parentAgent = ctx.agent ?? sessionAgent ?? firstMessageAgent ?? prevMessage?.agent diff --git a/src/tools/call-omo-agent/background-agent-executor.ts b/src/tools/call-omo-agent/background-agent-executor.ts index 9041831f..c09f78df 100644 --- a/src/tools/call-omo-agent/background-agent-executor.ts +++ b/src/tools/call-omo-agent/background-agent-executor.ts @@ -1,18 +1,12 @@ import type { BackgroundManager } from "../../features/background-agent" import type { PluginInput } from "@opencode-ai/plugin" -import { - findFirstMessageWithAgent, - findFirstMessageWithAgentFromSDK, - findNearestMessageWithFields, - findNearestMessageWithFieldsFromSDK, -} from "../../features/hook-message-injector" +import { resolveMessageContext } from "../../features/hook-message-injector" import { getSessionAgent } from "../../features/claude-code-session-state" import { log } from "../../shared" import type { CallOmoAgentArgs } from "./types" import type { ToolContextWithMetadata } from "./tool-context-with-metadata" import { getMessageDir } from "./message-storage-directory" import { getSessionTools } from "../../shared/session-tools-store" -import { isSqliteBackend } from "../../shared/opencode-storage-detection" export async function executeBackgroundAgent( args: CallOmoAgentArgs, @@ -22,16 +16,11 @@ export async function executeBackgroundAgent( ): Promise { try { const messageDir = getMessageDir(toolContext.sessionID) - - const [prevMessage, firstMessageAgent] = isSqliteBackend() - ? await Promise.all([ - findNearestMessageWithFieldsFromSDK(client, toolContext.sessionID), - findFirstMessageWithAgentFromSDK(client, toolContext.sessionID), - ]) - : [ - messageDir ? findNearestMessageWithFields(messageDir) : null, - messageDir ? findFirstMessageWithAgent(messageDir) : null, - ] + const { prevMessage, firstMessageAgent } = await resolveMessageContext( + toolContext.sessionID, + client, + messageDir + ) const sessionAgent = getSessionAgent(toolContext.sessionID) const parentAgent = diff --git a/src/tools/call-omo-agent/background-executor.ts b/src/tools/call-omo-agent/background-executor.ts index e302bab7..c9eb9ef4 100644 --- a/src/tools/call-omo-agent/background-executor.ts +++ b/src/tools/call-omo-agent/background-executor.ts @@ -3,16 +3,10 @@ import type { BackgroundManager } from "../../features/background-agent" import type { PluginInput } from "@opencode-ai/plugin" import { log } from "../../shared" import { consumeNewMessages } from "../../shared/session-cursor" -import { - findFirstMessageWithAgent, - findFirstMessageWithAgentFromSDK, - findNearestMessageWithFields, - findNearestMessageWithFieldsFromSDK, -} from "../../features/hook-message-injector" +import { resolveMessageContext } from "../../features/hook-message-injector" import { getSessionAgent } from "../../features/claude-code-session-state" import { getMessageDir } from "./message-dir" import { getSessionTools } from "../../shared/session-tools-store" -import { isSqliteBackend } from "../../shared/opencode-storage-detection" export async function executeBackground( args: CallOmoAgentArgs, @@ -28,16 +22,11 @@ export async function executeBackground( ): Promise { try { const messageDir = getMessageDir(toolContext.sessionID) - - const [prevMessage, firstMessageAgent] = isSqliteBackend() - ? await Promise.all([ - findNearestMessageWithFieldsFromSDK(client, toolContext.sessionID), - findFirstMessageWithAgentFromSDK(client, toolContext.sessionID), - ]) - : [ - messageDir ? findNearestMessageWithFields(messageDir) : null, - messageDir ? findFirstMessageWithAgent(messageDir) : null, - ] + const { prevMessage, firstMessageAgent } = await resolveMessageContext( + toolContext.sessionID, + client, + messageDir + ) const sessionAgent = getSessionAgent(toolContext.sessionID) const parentAgent = toolContext.agent ?? sessionAgent ?? firstMessageAgent ?? prevMessage?.agent diff --git a/src/tools/delegate-task/parent-context-resolver.ts b/src/tools/delegate-task/parent-context-resolver.ts index 4a1eda9c..2d831cda 100644 --- a/src/tools/delegate-task/parent-context-resolver.ts +++ b/src/tools/delegate-task/parent-context-resolver.ts @@ -1,32 +1,21 @@ import type { ToolContextWithMetadata } from "./types" import type { OpencodeClient } from "./types" import type { ParentContext } from "./executor-types" -import { - findFirstMessageWithAgent, - findFirstMessageWithAgentFromSDK, - findNearestMessageWithFields, - findNearestMessageWithFieldsFromSDK, -} from "../../features/hook-message-injector" +import { resolveMessageContext } from "../../features/hook-message-injector" import { getSessionAgent } from "../../features/claude-code-session-state" import { log } from "../../shared/logger" import { getMessageDir } from "../../shared/opencode-message-dir" -import { isSqliteBackend } from "../../shared/opencode-storage-detection" export async function resolveParentContext( ctx: ToolContextWithMetadata, client: OpencodeClient ): Promise { const messageDir = getMessageDir(ctx.sessionID) - - const [prevMessage, firstMessageAgent] = isSqliteBackend() - ? await Promise.all([ - findNearestMessageWithFieldsFromSDK(client, ctx.sessionID), - findFirstMessageWithAgentFromSDK(client, ctx.sessionID), - ]) - : [ - messageDir ? findNearestMessageWithFields(messageDir) : null, - messageDir ? findFirstMessageWithAgent(messageDir) : null, - ] + const { prevMessage, firstMessageAgent } = await resolveMessageContext( + ctx.sessionID, + client, + messageDir + ) const sessionAgent = getSessionAgent(ctx.sessionID) const parentAgent = ctx.agent ?? sessionAgent ?? firstMessageAgent ?? prevMessage?.agent