






















@@ -41,7 +41,7 @@ export const CROSS_OS_AGENT_TURN_TIMEOUT_SECONDS = parsePositiveIntegerEnv(
4141"OPENCLAW_CROSS_OS_AGENT_TURN_TIMEOUT_SECONDS",
4242600,
4343);
44-const CROSS_OS_AGENT_TURN_OPTIONAL = parseBooleanEnv("OPENCLAW_CROSS_OS_AGENT_TURN_OPTIONAL", true);
44+const CROSS_OS_AGENT_TURN_OPTIONAL = resolveCrossOsAgentTurnOptional();
45454646const providerConfig = {
4747openai: {
@@ -180,8 +180,8 @@ function parsePositiveIntegerEnv(name, fallback) {
180180return value;
181181}
182182183-function parseBooleanEnv(name, fallback) {
184-const raw = process.env[name]?.trim();
183+function parseBooleanEnv(name, fallback, env = process.env) {
184+const raw = env[name]?.trim();
185185if (!raw) {
186186return fallback;
187187}
@@ -194,6 +194,10 @@ function parseBooleanEnv(name, fallback) {
194194throw new Error(`${name} must be a boolean. Got: ${JSON.stringify(raw)}`);
195195}
196196197+export function resolveCrossOsAgentTurnOptional(env = process.env) {
198+return parseBooleanEnv("OPENCLAW_CROSS_OS_AGENT_TURN_OPTIONAL", false, env);
199+}
200+197201export function looksLikeReleaseVersionRef(ref) {
198202const trimmed = normalizeRequestedRef(ref);
199203return /^v?[0-9]{4}\.[0-9]+\.[0-9]+(?:-(?:[1-9][0-9]*)|[-.](?:alpha|beta|rc)[-.]?[0-9]+)?$/iu.test(
@@ -2274,7 +2278,10 @@ async function runInstalledAgentTurn(params) {
22742278return result;
22752279} catch (error) {
22762280lastError = error;
2277-const skipped = maybeBuildOptionalAgentTurnSkipResult(error, params.logPath);
2281+const skipped = maybeBuildOptionalAgentTurnSkipResult(error, params.logPath, {
2282+ attempt,
2283+maxAttempts: 2,
2284+});
22782285if (skipped) {
22792286return skipped;
22802287}
@@ -3090,7 +3097,10 @@ async function runAgentTurn(params) {
30903097return result;
30913098} catch (error) {
30923099lastError = error;
3093-const skipped = maybeBuildOptionalAgentTurnSkipResult(error, params.logPath);
3100+const skipped = maybeBuildOptionalAgentTurnSkipResult(error, params.logPath, {
3101+ attempt,
3102+maxAttempts: 2,
3103+});
30943104if (skipped) {
30953105return skipped;
30963106}
@@ -3108,8 +3118,15 @@ async function runAgentTurn(params) {
31083118throw lastError;
31093119}
311031203111-function maybeBuildOptionalAgentTurnSkipResult(error, logPath) {
3112-if (!CROSS_OS_AGENT_TURN_OPTIONAL || !shouldSkipOptionalCrossOsAgentTurnError(error, logPath)) {
3121+export function maybeBuildOptionalAgentTurnSkipResult(error, logPath, options = {}) {
3122+const attempt = options.attempt ?? 1;
3123+const maxAttempts = options.maxAttempts ?? 2;
3124+const optional = options.optional ?? CROSS_OS_AGENT_TURN_OPTIONAL;
3125+if (
3126+attempt < maxAttempts ||
3127+!optional ||
3128+!shouldSkipOptionalCrossOsAgentTurnError(error, logPath)
3129+) {
31133130return null;
31143131}
31153132const message = error instanceof Error ? error.message : String(error);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。