Fix: Support path and filePath parameters in message send action

The message tool accepts path and filePath parameters in its schema,
but these were never converted to mediaUrl, causing local files to
be ignored when sending messages.

Changes:
- src/agents/tools/message-tool.ts: Convert path/filePath to media with file:// URL
- src/infra/outbound/message-action-runner.ts: Allow hydrateSendAttachmentParams for "send" action

Fixes issue where local audio files (and other media) couldn't be sent
via the message tool with the path parameter.

Users can now use:
  message({ path: "/tmp/file.ogg" })
  message({ filePath: "/tmp/file.ogg" })
This commit is contained in:
Matt mini
2026-01-22 12:12:49 +01:00
parent 058f00ba0b
commit 57e81d3c24
2 changed files with 11 additions and 1 deletions

View File

@@ -340,6 +340,16 @@ export function createMessageTool(options?: MessageToolOptions): AnyAgentTool {
const action = readStringParam(params, "action", {
required: true,
}) as ChannelMessageActionName;
// Handle path and filePath parameters: convert to media with file:// URL
if (action === "send" && !params.media) {
const filePath =
(params.path as string | undefined) || (params.filePath as string | undefined);
if (filePath) {
params.media = filePath.startsWith("file://") ? filePath : `file://${filePath}`;
}
}
const accountId = readStringParam(params, "accountId") ?? agentAccountId;
const gateway = {

View File

@@ -343,7 +343,7 @@ async function hydrateSendAttachmentParams(params: {
action: ChannelMessageActionName;
dryRun?: boolean;
}): Promise<void> {
if (params.action !== "sendAttachment") return;
if (params.action !== "sendAttachment" && params.action !== "send") return;
const mediaHint = readStringParam(params.args, "media", { trim: false });
const fileHint =