Deduplicate more

This commit is contained in:
quotentiroler
2026-02-09 18:56:58 -08:00
parent c4d9b6eadb
commit 53910f3643
14 changed files with 38 additions and 138 deletions

View File

@@ -34,7 +34,11 @@ type FallbackAttempt = {
code?: string;
};
function isAbortError(err: unknown): boolean {
/**
* Strict abort check for model fallback. Only treats explicit AbortError names as user aborts.
* Message-based checks (e.g., "aborted") can mask timeouts and skip fallback.
*/
function isStrictAbortError(err: unknown): boolean {
if (!err || typeof err !== "object") {
return false;
}
@@ -42,13 +46,11 @@ function isAbortError(err: unknown): boolean {
return false;
}
const name = "name" in err ? String(err.name) : "";
// Only treat explicit AbortError names as user aborts.
// Message-based checks (e.g., "aborted") can mask timeouts and skip fallback.
return name === "AbortError";
}
function shouldRethrowAbort(err: unknown): boolean {
return isAbortError(err) && !isTimeoutError(err);
return isStrictAbortError(err) && !isTimeoutError(err);
}
function resolveImageFallbackCandidates(params: {

View File

@@ -1,12 +1 @@
export function isAbortError(err: unknown): boolean {
if (!err || typeof err !== "object") {
return false;
}
const name = "name" in err ? String(err.name) : "";
if (name === "AbortError") {
return true;
}
const message =
"message" in err && typeof err.message === "string" ? err.message.toLowerCase() : "";
return message.includes("aborted");
}
export { isAbortError } from "../../infra/unhandled-rejections.js";

View File

@@ -1,7 +1,7 @@
import fs from "node:fs/promises";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { resolveOpenClawPackageRoot } from "../infra/openclaw-root.js";
import { pathExists } from "../utils.js";
const FALLBACK_TEMPLATE_DIR = path.resolve(
path.dirname(fileURLToPath(import.meta.url)),
@@ -11,15 +11,6 @@ const FALLBACK_TEMPLATE_DIR = path.resolve(
let cachedTemplateDir: string | undefined;
let resolvingTemplateDir: Promise<string> | undefined;
async function pathExists(candidate: string): Promise<boolean> {
try {
await fs.access(candidate);
return true;
} catch {
return false;
}
}
export async function resolveWorkspaceTemplateDir(opts?: {
cwd?: string;
argv1?: string;