mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-05 15:00:21 +00:00
Agents/logging: reduce orphaned-user warning noise for background runs
This commit is contained in:
@@ -96,6 +96,12 @@ export function shouldInjectHeartbeatPrompt(params: {
|
||||
return params.isDefaultAgent && shouldInjectHeartbeatPromptForTrigger(params.trigger);
|
||||
}
|
||||
|
||||
export function shouldWarnOnOrphanedUserRepair(
|
||||
trigger: EmbeddedRunAttemptParams["trigger"],
|
||||
): boolean {
|
||||
return trigger === "user" || trigger === "manual";
|
||||
}
|
||||
|
||||
export function resolveAttemptFsWorkspaceOnly(params: {
|
||||
config?: OpenClawConfig;
|
||||
sessionAgentId: string;
|
||||
|
||||
@@ -19,6 +19,7 @@ import {
|
||||
resolveEmbeddedAgentStreamFn,
|
||||
resolvePromptBuildHookResult,
|
||||
resolvePromptModeForSession,
|
||||
shouldWarnOnOrphanedUserRepair,
|
||||
wrapStreamFnRepairMalformedToolCallArguments,
|
||||
wrapStreamFnSanitizeMalformedToolCalls,
|
||||
wrapStreamFnTrimToolCallNames,
|
||||
@@ -224,6 +225,20 @@ describe("resolvePromptModeForSession", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("shouldWarnOnOrphanedUserRepair", () => {
|
||||
it("warns for user and manual runs", () => {
|
||||
expect(shouldWarnOnOrphanedUserRepair("user")).toBe(true);
|
||||
expect(shouldWarnOnOrphanedUserRepair("manual")).toBe(true);
|
||||
});
|
||||
|
||||
it("does not warn for background triggers", () => {
|
||||
expect(shouldWarnOnOrphanedUserRepair("heartbeat")).toBe(false);
|
||||
expect(shouldWarnOnOrphanedUserRepair("cron")).toBe(false);
|
||||
expect(shouldWarnOnOrphanedUserRepair("memory")).toBe(false);
|
||||
expect(shouldWarnOnOrphanedUserRepair("overflow")).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("resolveEmbeddedAgentStreamFn", () => {
|
||||
it("injects authStorage api keys into provider-owned stream functions", async () => {
|
||||
const providerStreamFn = vi.fn(async (_model, _context, options) => options);
|
||||
|
||||
@@ -143,6 +143,7 @@ import {
|
||||
resolveAttemptFsWorkspaceOnly,
|
||||
resolvePromptBuildHookResult,
|
||||
resolvePromptModeForSession,
|
||||
shouldWarnOnOrphanedUserRepair,
|
||||
shouldInjectHeartbeatPrompt,
|
||||
} from "./attempt.prompt-helpers.js";
|
||||
import {
|
||||
@@ -192,6 +193,7 @@ export {
|
||||
resolveAttemptFsWorkspaceOnly,
|
||||
resolvePromptBuildHookResult,
|
||||
resolvePromptModeForSession,
|
||||
shouldWarnOnOrphanedUserRepair,
|
||||
shouldInjectHeartbeatPrompt,
|
||||
} from "./attempt.prompt-helpers.js";
|
||||
export {
|
||||
@@ -1542,10 +1544,14 @@ export async function runEmbeddedAttempt(
|
||||
}
|
||||
const sessionContext = sessionManager.buildSessionContext();
|
||||
activeSession.agent.replaceMessages(sessionContext.messages);
|
||||
log.warn(
|
||||
const orphanRepairMessage =
|
||||
`Removed orphaned user message to prevent consecutive user turns. ` +
|
||||
`runId=${params.runId} sessionId=${params.sessionId}`,
|
||||
);
|
||||
`runId=${params.runId} sessionId=${params.sessionId} trigger=${params.trigger}`;
|
||||
if (shouldWarnOnOrphanedUserRepair(params.trigger)) {
|
||||
log.warn(orphanRepairMessage);
|
||||
} else {
|
||||
log.debug(orphanRepairMessage);
|
||||
}
|
||||
}
|
||||
const transcriptLeafId =
|
||||
(sessionManager.getLeafEntry() as { id?: string } | null | undefined)?.id ?? null;
|
||||
|
||||
Reference in New Issue
Block a user