src / workingDirectoryInfo.ts
import path from "path";
export type WorkingDirectoryInfo = {
workingDirectoryRaw: string;
workingDirectoryTrimmed: string;
isAbsolute: boolean;
resolvedPath: string;
chatId: string;
chatIdValid13Digits: boolean;
parentDirName: string;
looksLikeLMStudioWorkingDir: boolean;
lmHomeFromWorkingDir: string | null;
};
export function getWorkingDirectoryInfo(workingDirectoryRaw: string): WorkingDirectoryInfo {
const workingDirectoryTrimmed = String(workingDirectoryRaw ?? "").trim();
const isAbsolute = path.isAbsolute(workingDirectoryTrimmed);
const resolvedPath = isAbsolute
? workingDirectoryTrimmed
: path.resolve(process.cwd(), workingDirectoryTrimmed);
const chatId = path.basename(workingDirectoryTrimmed);
const chatIdValid13Digits = /^[0-9]{13}$/.test(chatId);
const parentDirName = path.basename(path.dirname(workingDirectoryTrimmed));
const looksLikeLMStudioWorkingDir = parentDirName === "working-directories" && chatIdValid13Digits;
const lmHomeFromWorkingDir = looksLikeLMStudioWorkingDir
? path.dirname(path.dirname(workingDirectoryTrimmed))
: null;
return {
workingDirectoryRaw: String(workingDirectoryRaw ?? ""),
workingDirectoryTrimmed,
isAbsolute,
resolvedPath,
chatId,
chatIdValid13Digits,
parentDirName,
looksLikeLMStudioWorkingDir,
lmHomeFromWorkingDir,
};
}