fix(cli): suppress empty delivery plans

This commit is contained in:
Peter Steinberger
2026-05-10 11:27:53 +01:00
parent 291e658436
commit be63feacf7
2 changed files with 32 additions and 3 deletions

View File

@@ -610,6 +610,35 @@ describe("normalizeAgentCommandReplyPayloads", () => {
expect(deliverOutboundPayloadsMock).not.toHaveBeenCalled();
});
it("surfaces no-visible-payload deliveryStatus after payload normalization suppresses output", async () => {
const delivered = await deliverAgentCommandResult({
cfg: {} as OpenClawConfig,
deps: {} as CliDeps,
runtime: { log: vi.fn(), error: vi.fn() } as never,
opts: {
message: "go",
deliver: true,
replyChannel: "slack",
replyTo: "#general",
} as AgentCommandOpts,
outboundSession: undefined,
sessionEntry: undefined,
payloads: [{ text: "NO_REPLY" }],
result: createResult(),
});
expect(delivered.payloads).toEqual([]);
expect(delivered.deliverySucceeded).toBeUndefined();
expect(delivered.deliveryStatus).toMatchObject({
requested: true,
attempted: false,
status: "suppressed",
succeeded: true,
reason: "no_visible_payload",
});
expect(deliverOutboundPayloadsMock).not.toHaveBeenCalled();
});
it("preserves preflight deliveryStatus when best-effort delivery has no payloads", async () => {
const runtime = { log: vi.fn(), error: vi.fn() };

View File

@@ -503,17 +503,17 @@ export async function deliverAgentCommandResult(params: {
throw strictPreDeliveryError;
}
if (!payloads || payloads.length === 0) {
const deliveryPayloads = projectOutboundPayloadPlanForOutbound(outboundPayloadPlan);
if (deliveryPayloads.length === 0) {
deliveryStatus = deliver ? (deliveryStatus ?? noVisiblePayloadStatus()) : undefined;
emitJsonEnvelope(deliveryStatus);
return {
payloads: [],
payloads: normalizedPayloads,
meta: resultMeta,
...(deliveryStatus ? { deliveryStatus } : {}),
};
}
const deliveryPayloads = projectOutboundPayloadPlanForOutbound(outboundPayloadPlan);
let deliverySucceeded = false;
const logPayload = (payload: NormalizedOutboundPayload) => {
if (opts.json) {