diff --git a/src/infra/outbound/message-action-runner.ts b/src/infra/outbound/message-action-runner.ts index 4d3dbc4bfd4..f9abe97fedc 100644 --- a/src/infra/outbound/message-action-runner.ts +++ b/src/infra/outbound/message-action-runner.ts @@ -49,6 +49,7 @@ import { import { executePollAction, executeSendAction } from "./outbound-send-service.js"; import { ensureOutboundSessionEntry, resolveOutboundSessionRoute } from "./outbound-session.js"; import { resolveChannelTarget, type ResolvedMessagingTarget } from "./target-resolver.js"; +import { extractToolPayload } from "./tool-payload.js"; export type MessageActionRunnerGateway = { url?: string; @@ -156,30 +157,6 @@ export function getToolResult( return "toolResult" in result ? result.toolResult : undefined; } -function extractToolPayload(result: AgentToolResult): unknown { - if (result.details !== undefined) { - return result.details; - } - const textBlock = Array.isArray(result.content) - ? result.content.find( - (block) => - block && - typeof block === "object" && - (block as { type?: unknown }).type === "text" && - typeof (block as { text?: unknown }).text === "string", - ) - : undefined; - const text = (textBlock as { text?: string } | undefined)?.text; - if (text) { - try { - return JSON.parse(text); - } catch { - return text; - } - } - return result.content ?? result; -} - function applyCrossContextMessageDecoration({ params, message, diff --git a/src/infra/outbound/outbound-send-service.ts b/src/infra/outbound/outbound-send-service.ts index cd6b9975e81..e2e96986a44 100644 --- a/src/infra/outbound/outbound-send-service.ts +++ b/src/infra/outbound/outbound-send-service.ts @@ -8,6 +8,7 @@ import { dispatchChannelMessageAction } from "../../channels/plugins/message-act import { appendAssistantMessageToSessionTranscript } from "../../config/sessions.js"; import { throwIfAborted } from "./abort.js"; import { sendMessage, sendPoll } from "./message.js"; +import { extractToolPayload } from "./tool-payload.js"; export type OutboundGatewayContext = { url?: string; @@ -37,30 +38,6 @@ export type OutboundSendContext = { silent?: boolean; }; -function extractToolPayload(result: AgentToolResult): unknown { - if (result.details !== undefined) { - return result.details; - } - const textBlock = Array.isArray(result.content) - ? result.content.find( - (block) => - block && - typeof block === "object" && - (block as { type?: unknown }).type === "text" && - typeof (block as { text?: unknown }).text === "string", - ) - : undefined; - const text = (textBlock as { text?: string } | undefined)?.text; - if (text) { - try { - return JSON.parse(text); - } catch { - return text; - } - } - return result.content ?? result; -} - export async function executeSendAction(params: { ctx: OutboundSendContext; to: string; diff --git a/src/infra/outbound/tool-payload.ts b/src/infra/outbound/tool-payload.ts new file mode 100644 index 00000000000..33a8d1fd6a4 --- /dev/null +++ b/src/infra/outbound/tool-payload.ts @@ -0,0 +1,25 @@ +import type { AgentToolResult } from "@mariozechner/pi-agent-core"; + +export function extractToolPayload(result: AgentToolResult): unknown { + if (result.details !== undefined) { + return result.details; + } + const textBlock = Array.isArray(result.content) + ? result.content.find( + (block) => + block && + typeof block === "object" && + (block as { type?: unknown }).type === "text" && + typeof (block as { text?: unknown }).text === "string", + ) + : undefined; + const text = (textBlock as { text?: string } | undefined)?.text; + if (text) { + try { + return JSON.parse(text); + } catch { + return text; + } + } + return result.content ?? result; +}