From ef1346e50339935ed985d12235020f19d5c829bf Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Wed, 18 Mar 2026 12:01:15 -0700 Subject: [PATCH] Plugin SDK: route reply payload through public subpath --- src/agents/pi-embedded-runner/run/payloads.ts | 2 +- src/agents/pi-embedded-subscribe.handlers.messages.ts | 2 +- src/auto-reply/heartbeat-reply-payload.ts | 2 +- src/auto-reply/reply/agent-runner-execution.ts | 2 +- src/auto-reply/reply/agent-runner-helpers.ts | 6 +++--- src/auto-reply/reply/agent-runner-payloads.ts | 2 +- src/auto-reply/reply/block-reply-coalescer.ts | 2 +- src/auto-reply/reply/block-reply-pipeline.ts | 2 +- src/auto-reply/reply/dispatch-acp-delivery.ts | 2 +- src/auto-reply/reply/dispatch-from-config.ts | 2 +- src/auto-reply/reply/followup-runner.ts | 8 ++++---- src/auto-reply/reply/reply-delivery.ts | 2 +- src/auto-reply/reply/reply-media-paths.ts | 2 +- src/auto-reply/reply/streaming-directives.ts | 2 +- src/channels/plugins/outbound/direct-text-media.ts | 2 +- src/commands/agent-via-gateway.ts | 2 +- src/cron/heartbeat-policy.ts | 2 +- src/cron/isolated-agent/helpers.ts | 2 +- src/cron/isolated-agent/run.ts | 2 +- src/gateway/server-methods/send.ts | 2 +- src/gateway/ws-log.ts | 2 +- src/infra/heartbeat-runner.ts | 8 ++++---- src/infra/outbound/deliver.ts | 8 ++++---- src/infra/outbound/message.ts | 2 +- src/infra/outbound/payloads.ts | 2 +- src/line/auto-reply-delivery.ts | 2 +- src/tts/tts.ts | 2 +- 27 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/agents/pi-embedded-runner/run/payloads.ts b/src/agents/pi-embedded-runner/run/payloads.ts index 6b0cf33e980..a79fc592bf9 100644 --- a/src/agents/pi-embedded-runner/run/payloads.ts +++ b/src/agents/pi-embedded-runner/run/payloads.ts @@ -1,10 +1,10 @@ import type { AssistantMessage } from "@mariozechner/pi-ai"; +import { hasOutboundReplyContent } from "openclaw/plugin-sdk/reply-payload"; import { parseReplyDirectives } from "../../../auto-reply/reply/reply-directives.js"; import type { ReasoningLevel, VerboseLevel } from "../../../auto-reply/thinking.js"; import { isSilentReplyText, SILENT_REPLY_TOKEN } from "../../../auto-reply/tokens.js"; import { formatToolAggregate } from "../../../auto-reply/tool-meta.js"; import type { OpenClawConfig } from "../../../config/config.js"; -import { hasOutboundReplyContent } from "../../../plugin-sdk/reply-payload.js"; import { BILLING_ERROR_USER_MESSAGE, formatAssistantErrorText, diff --git a/src/agents/pi-embedded-subscribe.handlers.messages.ts b/src/agents/pi-embedded-subscribe.handlers.messages.ts index d790eb912ca..c3b4e92ba61 100644 --- a/src/agents/pi-embedded-subscribe.handlers.messages.ts +++ b/src/agents/pi-embedded-subscribe.handlers.messages.ts @@ -1,9 +1,9 @@ import type { AgentEvent, AgentMessage } from "@mariozechner/pi-agent-core"; +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import { parseReplyDirectives } from "../auto-reply/reply/reply-directives.js"; import { SILENT_REPLY_TOKEN } from "../auto-reply/tokens.js"; import { emitAgentEvent } from "../infra/agent-events.js"; import { createInlineCodeState } from "../markdown/code-spans.js"; -import { resolveSendableOutboundReplyParts } from "../plugin-sdk/reply-payload.js"; import { isMessagingToolDuplicateNormalized, normalizeTextForComparison, diff --git a/src/auto-reply/heartbeat-reply-payload.ts b/src/auto-reply/heartbeat-reply-payload.ts index 3a235bc4273..87f92c6b7c1 100644 --- a/src/auto-reply/heartbeat-reply-payload.ts +++ b/src/auto-reply/heartbeat-reply-payload.ts @@ -1,4 +1,4 @@ -import { hasOutboundReplyContent } from "../plugin-sdk/reply-payload.js"; +import { hasOutboundReplyContent } from "openclaw/plugin-sdk/reply-payload"; import type { ReplyPayload } from "./types.js"; export function resolveHeartbeatReplyPayload( diff --git a/src/auto-reply/reply/agent-runner-execution.ts b/src/auto-reply/reply/agent-runner-execution.ts index 7b22a5bdba1..c25342e4a28 100644 --- a/src/auto-reply/reply/agent-runner-execution.ts +++ b/src/auto-reply/reply/agent-runner-execution.ts @@ -1,5 +1,6 @@ import crypto from "node:crypto"; import fs from "node:fs"; +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import { resolveBootstrapWarningSignaturesSeen } from "../../agents/bootstrap-budget.js"; import { runCliAgent } from "../../agents/cli-runner.js"; import { getCliSessionId } from "../../agents/cli-session.js"; @@ -23,7 +24,6 @@ import { } from "../../config/sessions.js"; import { logVerbose } from "../../globals.js"; import { emitAgentEvent, registerAgentRunContext } from "../../infra/agent-events.js"; -import { resolveSendableOutboundReplyParts } from "../../plugin-sdk/reply-payload.js"; import { defaultRuntime } from "../../runtime.js"; import { isMarkdownCapableMessageChannel, diff --git a/src/auto-reply/reply/agent-runner-helpers.ts b/src/auto-reply/reply/agent-runner-helpers.ts index b62e4683308..168984c35b9 100644 --- a/src/auto-reply/reply/agent-runner-helpers.ts +++ b/src/auto-reply/reply/agent-runner-helpers.ts @@ -1,9 +1,9 @@ -import { loadSessionStore } from "../../config/sessions.js"; -import { isAudioFileName } from "../../media/mime.js"; import { hasOutboundReplyContent, resolveSendableOutboundReplyParts, -} from "../../plugin-sdk/reply-payload.js"; +} from "openclaw/plugin-sdk/reply-payload"; +import { loadSessionStore } from "../../config/sessions.js"; +import { isAudioFileName } from "../../media/mime.js"; import { normalizeVerboseLevel, type VerboseLevel } from "../thinking.js"; import type { ReplyPayload } from "../types.js"; import { scheduleFollowupDrain } from "./queue.js"; diff --git a/src/auto-reply/reply/agent-runner-payloads.ts b/src/auto-reply/reply/agent-runner-payloads.ts index 5f052b8f4f9..5f4eeab2694 100644 --- a/src/auto-reply/reply/agent-runner-payloads.ts +++ b/src/auto-reply/reply/agent-runner-payloads.ts @@ -1,6 +1,6 @@ +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import type { ReplyToMode } from "../../config/types.js"; import { logVerbose } from "../../globals.js"; -import { resolveSendableOutboundReplyParts } from "../../plugin-sdk/reply-payload.js"; import { stripHeartbeatToken } from "../heartbeat.js"; import type { OriginatingChannelType } from "../templating.js"; import { SILENT_REPLY_TOKEN } from "../tokens.js"; diff --git a/src/auto-reply/reply/block-reply-coalescer.ts b/src/auto-reply/reply/block-reply-coalescer.ts index ea1022a469c..c7a6f85c26b 100644 --- a/src/auto-reply/reply/block-reply-coalescer.ts +++ b/src/auto-reply/reply/block-reply-coalescer.ts @@ -1,4 +1,4 @@ -import { resolveSendableOutboundReplyParts } from "../../plugin-sdk/reply-payload.js"; +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import type { ReplyPayload } from "../types.js"; import type { BlockStreamingCoalescing } from "./block-streaming.js"; diff --git a/src/auto-reply/reply/block-reply-pipeline.ts b/src/auto-reply/reply/block-reply-pipeline.ts index 53a9e46c313..aee14715136 100644 --- a/src/auto-reply/reply/block-reply-pipeline.ts +++ b/src/auto-reply/reply/block-reply-pipeline.ts @@ -1,5 +1,5 @@ +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import { logVerbose } from "../../globals.js"; -import { resolveSendableOutboundReplyParts } from "../../plugin-sdk/reply-payload.js"; import type { ReplyPayload } from "../types.js"; import { createBlockReplyCoalescer } from "./block-reply-coalescer.js"; import type { BlockStreamingCoalescing } from "./block-streaming.js"; diff --git a/src/auto-reply/reply/dispatch-acp-delivery.ts b/src/auto-reply/reply/dispatch-acp-delivery.ts index a9d50521be2..57be876132b 100644 --- a/src/auto-reply/reply/dispatch-acp-delivery.ts +++ b/src/auto-reply/reply/dispatch-acp-delivery.ts @@ -1,8 +1,8 @@ +import { hasOutboundReplyContent } from "openclaw/plugin-sdk/reply-payload"; import type { OpenClawConfig } from "../../config/config.js"; import type { TtsAutoMode } from "../../config/types.tts.js"; import { logVerbose } from "../../globals.js"; import { runMessageAction } from "../../infra/outbound/message-action-runner.js"; -import { hasOutboundReplyContent } from "../../plugin-sdk/reply-payload.js"; import { maybeApplyTtsToPayload } from "../../tts/tts.js"; import type { FinalizedMsgContext } from "../templating.js"; import type { ReplyPayload } from "../types.js"; diff --git a/src/auto-reply/reply/dispatch-from-config.ts b/src/auto-reply/reply/dispatch-from-config.ts index 3893d1d8138..9df6ef2bc63 100644 --- a/src/auto-reply/reply/dispatch-from-config.ts +++ b/src/auto-reply/reply/dispatch-from-config.ts @@ -1,3 +1,4 @@ +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import { resolveSessionAgentId } from "../../agents/agent-scope.js"; import { resolveConversationBindingRecord, @@ -29,7 +30,6 @@ import { logMessageQueued, logSessionStateChange, } from "../../logging/diagnostic.js"; -import { resolveSendableOutboundReplyParts } from "../../plugin-sdk/reply-payload.js"; import { buildPluginBindingDeclinedText, buildPluginBindingErrorText, diff --git a/src/auto-reply/reply/followup-runner.ts b/src/auto-reply/reply/followup-runner.ts index 3e21490b990..330c0a41ff2 100644 --- a/src/auto-reply/reply/followup-runner.ts +++ b/src/auto-reply/reply/followup-runner.ts @@ -1,4 +1,8 @@ import crypto from "node:crypto"; +import { + hasOutboundReplyContent, + resolveSendableOutboundReplyParts, +} from "openclaw/plugin-sdk/reply-payload"; import { resolveRunModelFallbacksOverride } from "../../agents/agent-scope.js"; import { resolveBootstrapWarningSignaturesSeen } from "../../agents/bootstrap-budget.js"; import { lookupContextTokens } from "../../agents/context.js"; @@ -9,10 +13,6 @@ import type { SessionEntry } from "../../config/sessions.js"; import type { TypingMode } from "../../config/types.js"; import { logVerbose } from "../../globals.js"; import { registerAgentRunContext } from "../../infra/agent-events.js"; -import { - hasOutboundReplyContent, - resolveSendableOutboundReplyParts, -} from "../../plugin-sdk/reply-payload.js"; import { defaultRuntime } from "../../runtime.js"; import { isInternalMessageChannel } from "../../utils/message-channel.js"; import { stripHeartbeatToken } from "../heartbeat.js"; diff --git a/src/auto-reply/reply/reply-delivery.ts b/src/auto-reply/reply/reply-delivery.ts index 0a410319959..ee19d2d0934 100644 --- a/src/auto-reply/reply/reply-delivery.ts +++ b/src/auto-reply/reply/reply-delivery.ts @@ -1,5 +1,5 @@ +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import { logVerbose } from "../../globals.js"; -import { resolveSendableOutboundReplyParts } from "../../plugin-sdk/reply-payload.js"; import { SILENT_REPLY_TOKEN } from "../tokens.js"; import type { BlockReplyContext, ReplyPayload } from "../types.js"; import type { BlockReplyPipeline } from "./block-reply-pipeline.js"; diff --git a/src/auto-reply/reply/reply-media-paths.ts b/src/auto-reply/reply/reply-media-paths.ts index 45447e7b82d..915b7607092 100644 --- a/src/auto-reply/reply/reply-media-paths.ts +++ b/src/auto-reply/reply/reply-media-paths.ts @@ -1,8 +1,8 @@ +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import { resolvePathFromInput } from "../../agents/path-policy.js"; import { assertMediaNotDataUrl, resolveSandboxedMediaSource } from "../../agents/sandbox-paths.js"; import { ensureSandboxWorkspaceForSession } from "../../agents/sandbox.js"; import type { OpenClawConfig } from "../../config/config.js"; -import { resolveSendableOutboundReplyParts } from "../../plugin-sdk/reply-payload.js"; import type { ReplyPayload } from "../types.js"; const HTTP_URL_RE = /^https?:\/\//i; diff --git a/src/auto-reply/reply/streaming-directives.ts b/src/auto-reply/reply/streaming-directives.ts index e4f52ed85a2..ab4e6bedae1 100644 --- a/src/auto-reply/reply/streaming-directives.ts +++ b/src/auto-reply/reply/streaming-directives.ts @@ -1,5 +1,5 @@ +import { hasOutboundReplyContent } from "openclaw/plugin-sdk/reply-payload"; import { splitMediaFromOutput } from "../../media/parse.js"; -import { hasOutboundReplyContent } from "../../plugin-sdk/reply-payload.js"; import { parseInlineDirectives } from "../../utils/directive-tags.js"; import { isSilentReplyPrefixText, isSilentReplyText, SILENT_REPLY_TOKEN } from "../tokens.js"; import type { ReplyDirectiveParseResult } from "./reply-directives.js"; diff --git a/src/channels/plugins/outbound/direct-text-media.ts b/src/channels/plugins/outbound/direct-text-media.ts index 0209027342d..c0b4caafeba 100644 --- a/src/channels/plugins/outbound/direct-text-media.ts +++ b/src/channels/plugins/outbound/direct-text-media.ts @@ -1,7 +1,7 @@ +import { resolveOutboundMediaUrls } from "openclaw/plugin-sdk/reply-payload"; import { chunkText } from "../../../auto-reply/chunk.js"; import type { OpenClawConfig } from "../../../config/config.js"; import type { OutboundSendDeps } from "../../../infra/outbound/deliver.js"; -import { resolveOutboundMediaUrls } from "../../../plugin-sdk/reply-payload.js"; import { resolveChannelMediaMaxBytes } from "../media-limits.js"; import type { ChannelOutboundAdapter } from "../types.js"; diff --git a/src/commands/agent-via-gateway.ts b/src/commands/agent-via-gateway.ts index c37166218d1..79e05cc6047 100644 --- a/src/commands/agent-via-gateway.ts +++ b/src/commands/agent-via-gateway.ts @@ -1,10 +1,10 @@ +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import { listAgentIds } from "../agents/agent-scope.js"; import { formatCliCommand } from "../cli/command-format.js"; import type { CliDeps } from "../cli/deps.js"; import { withProgress } from "../cli/progress.js"; import { loadConfig } from "../config/config.js"; import { callGateway, randomIdempotencyKey } from "../gateway/call.js"; -import { resolveSendableOutboundReplyParts } from "../plugin-sdk/reply-payload.js"; import { normalizeAgentId } from "../routing/session-key.js"; import type { RuntimeEnv } from "../runtime.js"; import { diff --git a/src/cron/heartbeat-policy.ts b/src/cron/heartbeat-policy.ts index d356bcdbda5..f95f9dd8422 100644 --- a/src/cron/heartbeat-policy.ts +++ b/src/cron/heartbeat-policy.ts @@ -1,5 +1,5 @@ +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import { stripHeartbeatToken } from "../auto-reply/heartbeat.js"; -import { resolveSendableOutboundReplyParts } from "../plugin-sdk/reply-payload.js"; export type HeartbeatDeliveryPayload = { text?: string; diff --git a/src/cron/isolated-agent/helpers.ts b/src/cron/isolated-agent/helpers.ts index 66a07a58844..2e647423036 100644 --- a/src/cron/isolated-agent/helpers.ts +++ b/src/cron/isolated-agent/helpers.ts @@ -1,6 +1,6 @@ +import { hasOutboundReplyContent } from "openclaw/plugin-sdk/reply-payload"; import { DEFAULT_HEARTBEAT_ACK_MAX_CHARS } from "../../auto-reply/heartbeat.js"; import type { ReplyPayload } from "../../auto-reply/types.js"; -import { hasOutboundReplyContent } from "../../plugin-sdk/reply-payload.js"; import { truncateUtf16Safe } from "../../utils.js"; import { shouldSkipHeartbeatOnlyDelivery } from "../heartbeat-policy.js"; diff --git a/src/cron/isolated-agent/run.ts b/src/cron/isolated-agent/run.ts index 2ca8cf2b824..1c0b42398e5 100644 --- a/src/cron/isolated-agent/run.ts +++ b/src/cron/isolated-agent/run.ts @@ -1,3 +1,4 @@ +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import { resolveAgentConfig, resolveAgentDir, @@ -48,7 +49,6 @@ import { import type { AgentDefaultsConfig } from "../../config/types.js"; import { registerAgentRunContext } from "../../infra/agent-events.js"; import { logWarn } from "../../logger.js"; -import { resolveSendableOutboundReplyParts } from "../../plugin-sdk/reply-payload.js"; import { normalizeAgentId } from "../../routing/session-key.js"; import { buildSafeExternalPrompt, diff --git a/src/gateway/server-methods/send.ts b/src/gateway/server-methods/send.ts index b980d9e890d..a118002dc45 100644 --- a/src/gateway/server-methods/send.ts +++ b/src/gateway/server-methods/send.ts @@ -1,3 +1,4 @@ +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import { resolveSessionAgentId } from "../../agents/agent-scope.js"; import { normalizeChannelId } from "../../channels/plugins/index.js"; import { createOutboundSendDeps } from "../../cli/deps.js"; @@ -13,7 +14,6 @@ import { normalizeReplyPayloadsForDelivery } from "../../infra/outbound/payloads import { buildOutboundSessionContext } from "../../infra/outbound/session-context.js"; import { maybeResolveIdLikeTarget } from "../../infra/outbound/target-resolver.js"; import { resolveOutboundTarget } from "../../infra/outbound/targets.js"; -import { resolveSendableOutboundReplyParts } from "../../plugin-sdk/reply-payload.js"; import { normalizePollInput } from "../../polls.js"; import { ErrorCodes, diff --git a/src/gateway/ws-log.ts b/src/gateway/ws-log.ts index 52e07806dd1..356d9a4c4dc 100644 --- a/src/gateway/ws-log.ts +++ b/src/gateway/ws-log.ts @@ -1,9 +1,9 @@ import chalk from "chalk"; +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import { isVerbose } from "../globals.js"; import { shouldLogSubsystemToConsole } from "../logging/console.js"; import { getDefaultRedactPatterns, redactSensitiveText } from "../logging/redact.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; -import { resolveSendableOutboundReplyParts } from "../plugin-sdk/reply-payload.js"; import { parseAgentSessionKey } from "../routing/session-key.js"; import { DEFAULT_WS_SLOW_MS, getGatewayWsLogStyle } from "./ws-logging.js"; diff --git a/src/infra/heartbeat-runner.ts b/src/infra/heartbeat-runner.ts index cf5b45f8993..5e6ddcf07cf 100644 --- a/src/infra/heartbeat-runner.ts +++ b/src/infra/heartbeat-runner.ts @@ -1,5 +1,9 @@ import fs from "node:fs/promises"; import path from "node:path"; +import { + hasOutboundReplyContent, + resolveSendableOutboundReplyParts, +} from "openclaw/plugin-sdk/reply-payload"; import { resolveAgentConfig, resolveAgentWorkspaceDir, @@ -35,10 +39,6 @@ import { import type { AgentDefaultsConfig } from "../config/types.agent-defaults.js"; import { resolveCronSession } from "../cron/isolated-agent/session.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; -import { - hasOutboundReplyContent, - resolveSendableOutboundReplyParts, -} from "../plugin-sdk/reply-payload.js"; import { getQueueSize } from "../process/command-queue.js"; import { CommandLane } from "../process/lanes.js"; import { diff --git a/src/infra/outbound/deliver.ts b/src/infra/outbound/deliver.ts index 84e1808e4f0..e1be816c910 100644 --- a/src/infra/outbound/deliver.ts +++ b/src/infra/outbound/deliver.ts @@ -1,3 +1,7 @@ +import { + resolveSendableOutboundReplyParts, + sendMediaWithLeadingCaption, +} from "openclaw/plugin-sdk/reply-payload"; import { chunkByParagraph, chunkMarkdownTextWithMode, @@ -26,10 +30,6 @@ import { import { hasReplyPayloadContent } from "../../interactive/payload.js"; import { createSubsystemLogger } from "../../logging/subsystem.js"; import { getAgentScopedMediaLocalRoots } from "../../media/local-roots.js"; -import { - resolveSendableOutboundReplyParts, - sendMediaWithLeadingCaption, -} from "../../plugin-sdk/reply-payload.js"; import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js"; import { throwIfAborted } from "./abort.js"; import { resolveOutboundChannelPlugin } from "./channel-resolution.js"; diff --git a/src/infra/outbound/message.ts b/src/infra/outbound/message.ts index a006612175b..852b9eef9fd 100644 --- a/src/infra/outbound/message.ts +++ b/src/infra/outbound/message.ts @@ -1,7 +1,7 @@ +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import type { OpenClawConfig } from "../../config/config.js"; import { loadConfig } from "../../config/config.js"; import { callGatewayLeastPrivilege, randomIdempotencyKey } from "../../gateway/call.js"; -import { resolveSendableOutboundReplyParts } from "../../plugin-sdk/reply-payload.js"; import type { PollInput } from "../../polls.js"; import { normalizePollInput } from "../../polls.js"; import { diff --git a/src/infra/outbound/payloads.ts b/src/infra/outbound/payloads.ts index 2d90bb85a09..39da3d2fdcb 100644 --- a/src/infra/outbound/payloads.ts +++ b/src/infra/outbound/payloads.ts @@ -1,3 +1,4 @@ +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import { parseReplyDirectives } from "../../auto-reply/reply/reply-directives.js"; import { formatBtwTextForExternalDelivery, @@ -11,7 +12,6 @@ import { hasReplyPayloadContent, type InteractiveReply, } from "../../interactive/payload.js"; -import { resolveSendableOutboundReplyParts } from "../../plugin-sdk/reply-payload.js"; export type NormalizedOutboundPayload = { text: string; diff --git a/src/line/auto-reply-delivery.ts b/src/line/auto-reply-delivery.ts index 91b2633f47c..1e641707ce5 100644 --- a/src/line/auto-reply-delivery.ts +++ b/src/line/auto-reply-delivery.ts @@ -1,6 +1,6 @@ import type { messagingApi } from "@line/bot-sdk"; +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import type { ReplyPayload } from "../auto-reply/types.js"; -import { resolveSendableOutboundReplyParts } from "../plugin-sdk/reply-payload.js"; import type { FlexContainer } from "./flex-templates.js"; import type { ProcessedLineMessage } from "./markdown-to-line.js"; import type { SendLineReplyChunksParams } from "./reply-chunks.js"; diff --git a/src/tts/tts.ts b/src/tts/tts.ts index 019cffdb2e4..0a5aa81126e 100644 --- a/src/tts/tts.ts +++ b/src/tts/tts.ts @@ -9,6 +9,7 @@ import { unlinkSync, } from "node:fs"; import path from "node:path"; +import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload"; import type { ReplyPayload } from "../auto-reply/types.js"; import { normalizeChannelId } from "../channels/plugins/index.js"; import type { ChannelId } from "../channels/plugins/types.js"; @@ -24,7 +25,6 @@ import type { import { logVerbose } from "../globals.js"; import { resolvePreferredOpenClawTmpDir } from "../infra/tmp-openclaw-dir.js"; import { stripMarkdown } from "../line/markdown-to-line.js"; -import { resolveSendableOutboundReplyParts } from "../plugin-sdk/reply-payload.js"; import { CONFIG_DIR, resolveUserPath } from "../utils.js"; import { getSpeechProvider,