Something went wrong. Try again.
fork of prime agent with changes i want but are not upstreamable probqbly (and some fixes)
Something went wrong. Try again.
2.7 kB · 90 lines
TypeScript
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091import { accessSync, constants } from "node:fs";import * as os from "node:os";import { isAbsolute, posix, resolve as resolvePath, win32 } from "node:path";
const UNICODE_SPACES = /[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g;const NARROW_NO_BREAK_SPACE = "\u202F";function normalizeUnicodeSpaces(str: string): string { return str.replace(UNICODE_SPACES, " ");}
function tryMacOSScreenshotPath(filePath: string): string { return filePath.replace(/ (AM|PM)\./gi, `${NARROW_NO_BREAK_SPACE}$1.`);}
function tryNFDVariant(filePath: string): string { // macOS stores filenames in NFD (decomposed) form, try converting user input to NFD return filePath.normalize("NFD");}
function tryCurlyQuoteVariant(filePath: string): string { // macOS uses U+2019 (right single quotation mark) in screenshot names like "Capture d'écran" // Users typically type U+0027 (straight apostrophe) return filePath.replace(/'/g, "\u2019");}
function fileExists(filePath: string): boolean { try { accessSync(filePath, constants.F_OK); return true; } catch { return false; }}
function normalizeAtPrefix(filePath: string): string { return filePath.startsWith("@") ? filePath.slice(1) : filePath;}
export function expandPath(filePath: string, platform: NodeJS.Platform = process.platform): string { const normalized = normalizeUnicodeSpaces(normalizeAtPrefix(filePath)); if (normalized === "~") { return os.homedir(); } if (normalized.startsWith("~/") || (platform === "win32" && normalized.startsWith("~\\"))) { return (platform === "win32" ? win32 : posix).join(os.homedir(), normalized.slice(2)); } return normalized;}
/** * Resolve a path relative to the given cwd. * Handles ~ expansion and absolute paths. */export function resolveToCwd(filePath: string, cwd: string): string { const expanded = expandPath(filePath); if (isAbsolute(expanded)) { return expanded; } return resolvePath(cwd, expanded);}
export function resolveReadPath(filePath: string, cwd: string): string { const resolved = resolveToCwd(filePath, cwd);
if (fileExists(resolved)) { return resolved; }
const amPmVariant = tryMacOSScreenshotPath(resolved); if (amPmVariant !== resolved && fileExists(amPmVariant)) { return amPmVariant; }
const nfdVariant = tryNFDVariant(resolved); if (nfdVariant !== resolved && fileExists(nfdVariant)) { return nfdVariant; }
const curlyVariant = tryCurlyQuoteVariant(resolved); if (curlyVariant !== resolved && fileExists(curlyVariant)) { return curlyVariant; }
const nfdCurlyVariant = tryCurlyQuoteVariant(nfdVariant); if (nfdCurlyVariant !== resolved && fileExists(nfdCurlyVariant)) { return nfdCurlyVariant; }
return resolved;}