Heartbeat: allow suppressing tool warnings (#18497)

* Heartbeat: allow suppressing tool warnings

* Changelog: note heartbeat tool-warning suppression
This commit is contained in:
Shadow
2026-02-16 13:29:24 -06:00
committed by GitHub
parent 3238bd78d9
commit 72e228e14b
14 changed files with 36 additions and 2 deletions

View File

@@ -922,6 +922,7 @@ export async function runEmbeddedPiAgent(
verboseLevel: params.verboseLevel,
reasoningLevel: params.reasoningLevel,
toolResultFormat: resolvedToolResultFormat,
suppressToolErrorWarnings: params.suppressToolErrorWarnings,
inlineToolResultsAllowed: false,
});

View File

@@ -74,6 +74,8 @@ export type RunEmbeddedPiAgentParams = {
verboseLevel?: VerboseLevel;
reasoningLevel?: ReasoningLevel;
toolResultFormat?: ToolResultFormat;
/** If true, suppress tool error warning payloads for this run (including mutating tools). */
suppressToolErrorWarnings?: boolean;
execOverrides?: Pick<ExecToolDefaults, "host" | "security" | "ask" | "node">;
bashElevated?: ExecElevatedDefaults;
timeoutMs: number;

View File

@@ -252,6 +252,15 @@ describe("buildEmbeddedRunPayloads", () => {
expect(payloads[0]?.text).toContain("connection timeout");
});
it("suppresses mutating tool errors when suppressToolErrorWarnings is enabled", () => {
const payloads = buildPayloads({
lastToolError: { toolName: "exec", error: "command not found" },
suppressToolErrorWarnings: true,
});
expect(payloads).toHaveLength(0);
});
it("shows recoverable tool errors for mutating tools", () => {
const payloads = buildPayloads({
lastToolError: { toolName: "message", meta: "reply", error: "text required" },

View File

@@ -48,7 +48,11 @@ function shouldShowToolErrorWarning(params: {
lastToolError: LastToolError;
hasUserFacingReply: boolean;
suppressToolErrors: boolean;
suppressToolErrorWarnings?: boolean;
}): boolean {
if (params.suppressToolErrorWarnings) {
return false;
}
const isMutatingToolError =
params.lastToolError.mutatingAction ?? isLikelyMutatingToolName(params.lastToolError.toolName);
if (isMutatingToolError) {
@@ -71,6 +75,7 @@ export function buildEmbeddedRunPayloads(params: {
verboseLevel?: VerboseLevel;
reasoningLevel?: ReasoningLevel;
toolResultFormat?: ToolResultFormat;
suppressToolErrorWarnings?: boolean;
inlineToolResultsAllowed: boolean;
}): Array<{
text?: string;
@@ -247,6 +252,7 @@ export function buildEmbeddedRunPayloads(params: {
lastToolError: params.lastToolError,
hasUserFacingReply: hasUserFacingAssistantReply,
suppressToolErrors: Boolean(params.config?.messages?.suppressToolErrors),
suppressToolErrorWarnings: params.suppressToolErrorWarnings,
});
// Always surface mutating tool failures so we do not silently confirm actions that did not happen.