Files
openclaw/src/agents/pi-embedded-runner/run/payloads.test.ts
Harold Hunt de49a8b72c Telegram: exec approvals for OpenCode/Codex (#37233)
Merged via squash.

Prepared head SHA: f243379094
Co-authored-by: huntharo <5617868+huntharo@users.noreply.github.com>
Co-authored-by: huntharo <5617868+huntharo@users.noreply.github.com>
Reviewed-by: @huntharo
2026-03-09 23:04:35 -04:00

95 lines
2.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { buildPayloads, expectSingleToolErrorPayload } from "./payloads.test-helpers.js";
describe("buildEmbeddedRunPayloads tool-error warnings", () => {
it("suppresses exec tool errors when verbose mode is off", () => {
const payloads = buildPayloads({
lastToolError: { toolName: "exec", error: "command failed" },
verboseLevel: "off",
});
expect(payloads).toHaveLength(0);
});
it("shows exec tool errors when verbose mode is on", () => {
const payloads = buildPayloads({
lastToolError: { toolName: "exec", error: "command failed" },
verboseLevel: "on",
});
expectSingleToolErrorPayload(payloads, {
title: "Exec",
detail: "command failed",
});
});
it("keeps non-exec mutating tool failures visible", () => {
const payloads = buildPayloads({
lastToolError: { toolName: "write", error: "permission denied" },
verboseLevel: "off",
});
expectSingleToolErrorPayload(payloads, {
title: "Write",
absentDetail: "permission denied",
});
});
it.each([
{
name: "includes details for mutating tool failures when verbose is on",
verboseLevel: "on" as const,
detail: "permission denied",
absentDetail: undefined,
},
{
name: "includes details for mutating tool failures when verbose is full",
verboseLevel: "full" as const,
detail: "permission denied",
absentDetail: undefined,
},
])("$name", ({ verboseLevel, detail, absentDetail }) => {
const payloads = buildPayloads({
lastToolError: { toolName: "write", error: "permission denied" },
verboseLevel,
});
expectSingleToolErrorPayload(payloads, {
title: "Write",
detail,
absentDetail,
});
});
it("suppresses sessions_send errors to avoid leaking transient relay failures", () => {
const payloads = buildPayloads({
lastToolError: { toolName: "sessions_send", error: "delivery timeout" },
verboseLevel: "on",
});
expect(payloads).toHaveLength(0);
});
it("suppresses sessions_send errors even when marked mutating", () => {
const payloads = buildPayloads({
lastToolError: {
toolName: "sessions_send",
error: "delivery timeout",
mutatingAction: true,
},
verboseLevel: "on",
});
expect(payloads).toHaveLength(0);
});
it("suppresses assistant text when a deterministic exec approval prompt was already delivered", () => {
const payloads = buildPayloads({
assistantTexts: ["Approval is needed. Please run /approve abc allow-once"],
didSendDeterministicApprovalPrompt: true,
});
expect(payloads).toHaveLength(0);
});
});