diff --git a/server/cli.js b/server/cli.js index 7401a9e..818d91f 100755 --- a/server/cli.js +++ b/server/cli.js @@ -14,6 +14,7 @@ import fs from 'fs'; import path from 'path'; +import os from 'os'; import { fileURLToPath } from 'url'; import { dirname } from 'path'; @@ -115,7 +116,7 @@ function showStatus() { console.log(` CONTEXT_WINDOW: ${c.dim(process.env.CONTEXT_WINDOW || '160000 (default)')}`); // Claude projects folder - const claudeProjectsPath = path.join(process.env.HOME, '.claude', 'projects'); + const claudeProjectsPath = path.join(os.homedir(), '.claude', 'projects'); const projectsExists = fs.existsSync(claudeProjectsPath); console.log(`\n${c.info('[INFO]')} Claude Projects Folder:`); console.log(` ${c.dim(claudeProjectsPath)}`); diff --git a/server/index.js b/server/index.js index 240d456..197d0a4 100755 --- a/server/index.js +++ b/server/index.js @@ -84,7 +84,7 @@ const connectedClients = new Set(); // Setup file system watcher for Claude projects folder using chokidar async function setupProjectsWatcher() { const chokidar = (await import('chokidar')).default; - const claudeProjectsPath = path.join(process.env.HOME, '.claude', 'projects'); + const claudeProjectsPath = path.join(os.homedir(), '.claude', 'projects'); if (projectsWatcher) { projectsWatcher.close(); @@ -1015,7 +1015,7 @@ function handleShellConnection(ws) { name: 'xterm-256color', cols: termCols, rows: termRows, - cwd: process.env.HOME || (os.platform() === 'win32' ? process.env.USERPROFILE : '/'), + cwd: os.homedir(), env: { ...process.env, TERM: 'xterm-256color', diff --git a/server/projects.js b/server/projects.js index c983c56..a4efb10 100755 --- a/server/projects.js +++ b/server/projects.js @@ -204,7 +204,7 @@ function clearProjectDirectoryCache() { // Load project configuration file async function loadProjectConfig() { - const configPath = path.join(process.env.HOME, '.claude', 'project-config.json'); + const configPath = path.join(os.homedir(), '.claude', 'project-config.json'); try { const configData = await fs.readFile(configPath, 'utf8'); return JSON.parse(configData); @@ -216,7 +216,7 @@ async function loadProjectConfig() { // Save project configuration file async function saveProjectConfig(config) { - const claudeDir = path.join(process.env.HOME, '.claude'); + const claudeDir = path.join(os.homedir(), '.claude'); const configPath = path.join(claudeDir, 'project-config.json'); // Ensure the .claude directory exists @@ -276,7 +276,7 @@ async function extractProjectDirectory(projectName) { return originalPath; } - const projectDir = path.join(process.env.HOME, '.claude', 'projects', projectName); + const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName); const cwdCounts = new Map(); let latestTimestamp = 0; let latestCwd = null; @@ -380,7 +380,7 @@ async function extractProjectDirectory(projectName) { } async function getProjects() { - const claudeDir = path.join(process.env.HOME, '.claude', 'projects'); + const claudeDir = path.join(os.homedir(), '.claude', 'projects'); const config = await loadProjectConfig(); const projects = []; const existingProjects = new Set(); @@ -546,7 +546,7 @@ async function getProjects() { } async function getSessions(projectName, limit = 5, offset = 0) { - const projectDir = path.join(process.env.HOME, '.claude', 'projects', projectName); + const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName); try { const files = await fs.readdir(projectDir); @@ -828,7 +828,7 @@ async function parseJsonlSessions(filePath) { // Get messages for a specific session with pagination support async function getSessionMessages(projectName, sessionId, limit = null, offset = 0) { - const projectDir = path.join(process.env.HOME, '.claude', 'projects', projectName); + const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName); try { const files = await fs.readdir(projectDir); @@ -917,7 +917,7 @@ async function renameProject(projectName, newDisplayName) { // Delete a session from a project async function deleteSession(projectName, sessionId) { - const projectDir = path.join(process.env.HOME, '.claude', 'projects', projectName); + const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName); try { const files = await fs.readdir(projectDir); @@ -980,7 +980,7 @@ async function isProjectEmpty(projectName) { // Delete an empty project async function deleteProject(projectName) { - const projectDir = path.join(process.env.HOME, '.claude', 'projects', projectName); + const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName); try { // First check if the project is empty @@ -1020,7 +1020,7 @@ async function addProjectManually(projectPath, displayName = null) { // Check if project already exists in config const config = await loadProjectConfig(); - const projectDir = path.join(process.env.HOME, '.claude', 'projects', projectName); + const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName); if (config[projectName]) { throw new Error(`Project already configured for path: ${absolutePath}`);