Cron: honor trigger for custom session timeouts

This commit is contained in:
spaceman1412
2026-03-31 16:06:42 +07:00
committed by Peter Steinberger
parent 102462b7a6
commit 3b6825ab93
4 changed files with 24 additions and 1 deletions

View File

@@ -1311,6 +1311,7 @@ export async function runEmbeddedPiAgent(
lastAssistant: attempt.lastAssistant,
lastToolError: attempt.lastToolError,
config: params.config,
isCronTrigger: params.trigger === "cron",
sessionKey: params.sessionKey ?? params.sessionId,
provider: activeErrorContext.provider,
model: activeErrorContext.model,

View File

@@ -9,6 +9,7 @@ export function buildPayloads(overrides: Partial<BuildPayloadParams> = {}) {
assistantTexts: [],
toolMetas: [],
lastAssistant: undefined,
isCronTrigger: false,
sessionKey: "session:telegram",
inlineToolResultsAllowed: false,
verboseLevel: "off",

View File

@@ -33,6 +33,24 @@ describe("buildEmbeddedRunPayloads tool-error warnings", () => {
});
});
it("surfaces timed-out exec tool errors for cron-triggered custom session keys", () => {
const payloads = buildPayloads({
lastToolError: {
toolName: "exec",
timedOut: true,
error: "Command timed out after 1800 seconds.",
},
sessionKey: "agent:main:project-alpha",
isCronTrigger: true,
verboseLevel: "off",
});
expectSingleToolErrorPayload(payloads, {
title: "Exec",
detail: "Command timed out after 1800 seconds.",
});
});
it("keeps non-timeout exec tool errors suppressed for cron sessions when verbose mode is off", () => {
expectNoPayloads({
lastToolError: { toolName: "exec", error: "Command not found" },

View File

@@ -60,6 +60,7 @@ function resolveToolErrorWarningPolicy(params: {
hasUserFacingReply: boolean;
suppressToolErrors: boolean;
suppressToolErrorWarnings?: boolean;
isCronTrigger?: boolean;
sessionKey: string;
verboseLevel?: VerboseLevel;
}): ToolErrorWarningPolicy {
@@ -67,7 +68,7 @@ function resolveToolErrorWarningPolicy(params: {
const isCronTimedOutExecToolError =
(normalizedToolName === "exec" || normalizedToolName === "bash") &&
params.lastToolError.timedOut === true &&
isCronSessionKey(params.sessionKey);
(params.isCronTrigger === true || isCronSessionKey(params.sessionKey));
const includeDetails =
isVerboseToolDetailEnabled(params.verboseLevel) || isCronTimedOutExecToolError;
if (params.suppressToolErrorWarnings) {
@@ -102,6 +103,7 @@ export function buildEmbeddedRunPayloads(params: {
lastAssistant: AssistantMessage | undefined;
lastToolError?: LastToolError;
config?: OpenClawConfig;
isCronTrigger?: boolean;
sessionKey: string;
provider?: string;
model?: string;
@@ -297,6 +299,7 @@ export function buildEmbeddedRunPayloads(params: {
hasUserFacingReply: hasUserFacingAssistantReply,
suppressToolErrors: Boolean(params.config?.messages?.suppressToolErrors),
suppressToolErrorWarnings: params.suppressToolErrorWarnings,
isCronTrigger: params.isCronTrigger,
sessionKey: params.sessionKey,
verboseLevel: params.verboseLevel,
});