

























@@ -4,6 +4,7 @@ import { resolveAgentWorkspaceDir } from "../agents/agent-scope.js";
44import type { OpenClawConfig } from "../config/config.js";
55import { resolveStateDir } from "../config/paths.js";
66import { createSubsystemLogger } from "../logging/subsystem.js";
7+import { resolveExpiresAtMsFromDurationMs } from "../shared/number-coercion.js";
78import { normalizeOptionalString } from "../shared/string-coerce.js";
89import { resolveCommitmentTimezone, resolveCommitmentsConfig } from "./config.js";
910import {
@@ -168,11 +169,20 @@ function isTerminalExtractionError(error: unknown): boolean {
168169);
169170}
170171171-function openTerminalFailureCooldown(agentId: string, error: unknown): void {
172-terminalFailureCooldownUntilByAgent.set(
173-agentId,
174-Date.now() + TERMINAL_EXTRACTION_FAILURE_COOLDOWN_MS,
175-);
172+function openTerminalFailureCooldown(
173+agentId: string,
174+error: unknown,
175+nowMs: number,
176+fallbackNowMs: number,
177+): void {
178+const cooldownUntil =
179+resolveExpiresAtMsFromDurationMs(TERMINAL_EXTRACTION_FAILURE_COOLDOWN_MS, { nowMs }) ??
180+resolveExpiresAtMsFromDurationMs(TERMINAL_EXTRACTION_FAILURE_COOLDOWN_MS, {
181+nowMs: fallbackNowMs,
182+});
183+if (cooldownUntil !== undefined) {
184+terminalFailureCooldownUntilByAgent.set(agentId, cooldownUntil);
185+}
176186queue = queue.filter((item) => item.agentId !== agentId);
177187log.warn("commitment extraction disabled temporarily after terminal model/auth failure", {
178188 agentId,
@@ -281,7 +291,12 @@ export async function drainCommitmentExtractionQueue(): Promise<number> {
281291result = await extractor({ cfg: firstCfg, items });
282292} catch (error) {
283293if (isTerminalExtractionError(error)) {
284-openTerminalFailureCooldown(items[0]?.agentId ?? "", error);
294+openTerminalFailureCooldown(
295+items[0]?.agentId ?? "",
296+error,
297+Date.now(),
298+items[0]?.nowMs ?? Date.now(),
299+);
285300}
286301throw error;
287302}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。