


















@@ -8,7 +8,7 @@ import { isAcpRuntimeSpawnAvailable } from "../../../acp/runtime/availability.js
88import { buildHierarchyReinforcementMessage } from "../../../auto-reply/handoff-summarizer.js";
99import { filterHeartbeatTranscriptArtifacts } from "../../../auto-reply/heartbeat-filter.js";
1010import { stripInboundMetadata } from "../../../auto-reply/reply/strip-inbound-meta.js";
11-import { getRuntimeConfig } from "../../../config/config.js";
11+import { getRuntimeConfig, type OpenClawConfig } from "../../../config/config.js";
1212import { resolveStorePath } from "../../../config/sessions/paths.js";
1313import {
1414loadSessionStore,
@@ -372,7 +372,6 @@ import { resolveAttemptTranscriptPolicy } from "./attempt.transcript-policy.js";
372372import { waitForCompactionRetryWithAggregateTimeout } from "./compaction-retry-aggregate-timeout.js";
373373import {
374374resolveRunTimeoutDuringCompaction,
375-resolveRunTimeoutWithCompactionGraceMs,
376375selectCompactionTimeoutSnapshot,
377376shouldFlagCompactionTimeout,
378377} from "./compaction-timeout.js";
@@ -787,10 +786,27 @@ async function cancelQueuedSteeringMessage(
787786788787export const testing = {
789788 cancelQueuedSteeringMessage,
789+ resolveEmbeddedAttemptSessionWriteLockOptions,
790790 resolveAttemptStreamAuthProfileId,
791791 steerAndWaitForTranscriptCommit,
792792};
793793794+function resolveEmbeddedAttemptSessionWriteLockOptions(params: {
795+config?: OpenClawConfig;
796+compactionTimeoutMs: number;
797+env?: NodeJS.ProcessEnv;
798+}): { timeoutMs: number; staleMs: number; maxHoldMs: number } {
799+// Bound embedded-attempt lock holds to the compaction window, not the full run timeout.
800+// With defaults this permits roughly 900s compaction time plus the shared 120s
801+// timeout grace before the watchdog releases a stuck live-process lock.
802+return resolveSessionWriteLockOptions(params.config, {
803+env: params.env,
804+maxHoldMsFallback: resolveSessionLockMaxHoldFromTimeout({
805+timeoutMs: params.compactionTimeoutMs,
806+}),
807+});
808+}
809+794810function resolveAttemptStreamAuthProfileId(
795811params: Pick<EmbeddedRunAttemptParams, "authProfileId" | "runtimePlan">,
796812): string | undefined {
@@ -2069,13 +2085,10 @@ export async function runEmbeddedAttempt(
20692085let systemPromptText = systemPromptOverride();
20702086prepStages.mark("system-prompt");
207120872072-const sessionWriteLockOptions = resolveSessionWriteLockOptions(params.config, {
2073-maxHoldMsFallback: resolveSessionLockMaxHoldFromTimeout({
2074-timeoutMs: resolveRunTimeoutWithCompactionGraceMs({
2075-runTimeoutMs: params.timeoutMs,
2076-compactionTimeoutMs: resolveCompactionTimeoutMs(params.config),
2077-}),
2078-}),
2088+const compactionTimeoutMs = resolveCompactionTimeoutMs(params.config);
2089+const sessionWriteLockOptions = resolveEmbeddedAttemptSessionWriteLockOptions({
2090+config: params.config,
2091+ compactionTimeoutMs,
20792092});
20802093const sessionLockController = await createEmbeddedAttemptSessionLockController({
20812094 acquireSessionWriteLock,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。