mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-28 01:10:40 +00:00
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
95 lines
2.7 KiB
TypeScript
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);
|
|
});
|
|
});
|