paths.ts
1 import { app } from 'electron' 2 import path from 'node:path' 3 import fs from 'node:fs' 4 5 export interface RuntimePaths { 6 swarmclawHome: string 7 dataDir: string 8 workspaceDir: string 9 browserProfilesDir: string 10 standaloneEntry: string 11 standaloneDir: string 12 publicDir: string 13 staticDir: string 14 } 15 16 function ensureDir(dir: string): void { 17 fs.mkdirSync(dir, { recursive: true }) 18 } 19 20 function isDev(): boolean { 21 return !app.isPackaged 22 } 23 24 export function resolveRuntimePaths(): RuntimePaths { 25 const swarmclawHome = path.join(app.getPath('userData'), 'home') 26 const dataDir = path.join(swarmclawHome, 'data') 27 const workspaceDir = path.join(swarmclawHome, 'workspace') 28 const browserProfilesDir = path.join(swarmclawHome, 'browser-profiles') 29 30 ensureDir(swarmclawHome) 31 ensureDir(dataDir) 32 ensureDir(workspaceDir) 33 ensureDir(browserProfilesDir) 34 35 const appRoot = isDev() 36 ? path.resolve(__dirname, '..') 37 : process.resourcesPath 38 39 const standaloneDir = path.join(appRoot, '.next', 'standalone') 40 const standaloneEntry = path.join(standaloneDir, 'server.js') 41 const publicDir = path.join(standaloneDir, 'public') 42 const staticDir = path.join(standaloneDir, '.next', 'static') 43 44 return { 45 swarmclawHome, 46 dataDir, 47 workspaceDir, 48 browserProfilesDir, 49 standaloneEntry, 50 standaloneDir, 51 publicDir, 52 staticDir, 53 } 54 }