52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
const TMP_SEGMENT = 'tmp';
|
|
const POSIX_TMP_ROOT = `/${TMP_SEGMENT}/`;
|
|
const PRIVATE_TMP_ROOT = `/private/${TMP_SEGMENT}/`;
|
|
|
|
function normalizePathForEphemeralCheck(projectPath: string): string {
|
|
return projectPath.trim().replace(/\\/g, '/').toLowerCase();
|
|
}
|
|
|
|
function getBasename(normalizedPath: string): string {
|
|
const segments = normalizedPath.split('/').filter(Boolean);
|
|
return segments[segments.length - 1] ?? '';
|
|
}
|
|
|
|
function hasPathSegmentWithPrefix(normalizedPath: string, prefix: string): boolean {
|
|
return normalizedPath
|
|
.split('/')
|
|
.filter(Boolean)
|
|
.some((segment) => segment.startsWith(prefix));
|
|
}
|
|
|
|
function isKnownTempRoot(normalizedPath: string): boolean {
|
|
return (
|
|
normalizedPath.startsWith('/private/var/folders/') ||
|
|
normalizedPath.startsWith('/var/folders/') ||
|
|
normalizedPath.startsWith(PRIVATE_TMP_ROOT) ||
|
|
normalizedPath.startsWith(POSIX_TMP_ROOT) ||
|
|
normalizedPath.includes('/appdata/local/temp/') ||
|
|
normalizedPath.includes('/appdata/locallow/temp/')
|
|
);
|
|
}
|
|
|
|
export function isEphemeralProjectPath(projectPath: string | null | undefined): boolean {
|
|
const normalizedPath = normalizePathForEphemeralCheck(projectPath ?? '');
|
|
if (!normalizedPath) {
|
|
return false;
|
|
}
|
|
|
|
if (
|
|
normalizedPath.includes('rendered_mcp_') ||
|
|
normalizedPath.includes('rendered_mcp_config') ||
|
|
normalizedPath.includes('/portable-mcp-live')
|
|
) {
|
|
return true;
|
|
}
|
|
|
|
const basename = getBasename(normalizedPath);
|
|
return (
|
|
(basename.startsWith('codex-agent-teams-appstyle-') ||
|
|
hasPathSegmentWithPrefix(normalizedPath, 'provider-launch-stress-live-')) &&
|
|
isKnownTempRoot(normalizedPath)
|
|
);
|
|
}
|