agent-ecosystem/src/shared/utils/ephemeralProjectPath.ts

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);
}