41 lines
1.3 KiB
TypeScript
41 lines
1.3 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 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-') && isKnownTempRoot(normalizedPath);
|
|
}
|