refactor: streamline outbound payload handling

This commit is contained in:
Peter Steinberger
2026-01-07 02:30:42 +00:00
parent 3fedd0d1d5
commit 4bf5f37a44
8 changed files with 254 additions and 150 deletions

View File

@@ -44,10 +44,13 @@ import {
emitAgentEvent,
registerAgentRunContext,
} from "../infra/agent-events.js";
import { deliverOutboundPayloads } from "../infra/outbound/deliver.js";
import {
deliverOutboundPayloads,
formatOutboundPayloadLog,
type NormalizedOutboundPayload,
normalizeOutboundPayloads,
} from "../infra/outbound/deliver.js";
normalizeOutboundPayloadsForJson,
} from "../infra/outbound/payloads.js";
import { resolveOutboundTarget } from "../infra/outbound/targets.js";
import { defaultRuntime, type RuntimeEnv } from "../runtime.js";
import { resolveSendPolicy } from "../sessions/send-policy.js";
@@ -541,12 +544,8 @@ export async function agentCommand(
}
}
const normalizedPayloads = normalizeOutboundPayloadsForJson(payloads);
if (opts.json) {
const normalizedPayloads = payloads.map((p) => ({
text: p.text ?? "",
mediaUrl: p.mediaUrl ?? null,
mediaUrls: p.mediaUrls ?? (p.mediaUrl ? [p.mediaUrl] : undefined),
}));
runtime.log(
JSON.stringify(
{ payloads: normalizedPayloads, meta: result.meta },
@@ -565,12 +564,10 @@ export async function agentCommand(
}
const deliveryPayloads = normalizeOutboundPayloads(payloads);
const logPayload = (payload: { text: string; mediaUrls: string[] }) => {
const logPayload = (payload: NormalizedOutboundPayload) => {
if (opts.json) return;
const lines: string[] = [];
if (payload.text) lines.push(payload.text.trimEnd());
for (const url of payload.mediaUrls) lines.push(`MEDIA:${url}`);
runtime.log(lines.join("\n"));
const output = formatOutboundPayloadLog(payload);
if (output) runtime.log(output);
};
if (!deliver) {
for (const payload of deliveryPayloads) {
@@ -607,10 +604,5 @@ export async function agentCommand(
}
}
const normalizedPayloads = payloads.map((p) => ({
text: p.text ?? "",
mediaUrl: p.mediaUrl ?? null,
mediaUrls: p.mediaUrls ?? (p.mediaUrl ? [p.mediaUrl] : undefined),
}));
return { payloads: normalizedPayloads, meta: result.meta };
}

View File

@@ -243,7 +243,7 @@ describe("sendCommand", () => {
runtime,
);
expect(runtime.log).toHaveBeenCalledWith(
expect.stringContaining('"provider": "web"'),
expect.stringContaining('"provider": "whatsapp"'),
);
});
});

View File

@@ -114,13 +114,13 @@ export async function sendCommand(
if (opts.json) {
runtime.log(
JSON.stringify(
{
provider: "web",
buildOutboundDeliveryJson({
provider,
via: "gateway",
to: opts.to,
messageId: result.messageId,
result,
mediaUrl: opts.media ?? null,
},
}),
null,
2,
),