diff --git a/desktop/src/api/sessions.ts b/desktop/src/api/sessions.ts index d3edeaad..4faa99aa 100644 --- a/desktop/src/api/sessions.ts +++ b/desktop/src/api/sessions.ts @@ -30,8 +30,8 @@ export const sessionsApi = { return api.get(`/api/sessions/${sessionId}/messages`) }, - create(workDir: string) { - return api.post('/api/sessions', { workDir }) + create(workDir?: string) { + return api.post('/api/sessions', workDir ? { workDir } : {}) }, delete(sessionId: string) { diff --git a/desktop/src/stores/sessionStore.ts b/desktop/src/stores/sessionStore.ts index 863cb2b8..76b93ac4 100644 --- a/desktop/src/stores/sessionStore.ts +++ b/desktop/src/stores/sessionStore.ts @@ -48,7 +48,7 @@ export const useSessionStore = create((set, get) => ({ }, createSession: async (workDir?: string) => { - const { sessionId: id } = await sessionsApi.create(workDir ?? '.') + const { sessionId: id } = await sessionsApi.create(workDir || undefined) // Refresh session list await get().fetchSessions() set({ activeSessionId: id }) diff --git a/src/server/api/sessions.ts b/src/server/api/sessions.ts index 665b448b..c44c3d1c 100644 --- a/src/server/api/sessions.ts +++ b/src/server/api/sessions.ts @@ -154,8 +154,8 @@ async function createSession(req: Request): Promise { throw ApiError.badRequest('Invalid JSON body') } - if (!body.workDir || typeof body.workDir !== 'string') { - throw ApiError.badRequest('workDir (string) is required in request body') + if (body.workDir && typeof body.workDir !== 'string') { + throw ApiError.badRequest('workDir must be a string') } const result = await sessionService.createSession(body.workDir) diff --git a/src/server/services/sessionService.ts b/src/server/services/sessionService.ts index d308af57..b76f6db0 100644 --- a/src/server/services/sessionService.ts +++ b/src/server/services/sessionService.ts @@ -470,13 +470,12 @@ export class SessionService { /** * Create a new session file for the given working directory. */ - async createSession(workDir: string): Promise<{ sessionId: string }> { - if (!workDir) { - throw ApiError.badRequest('workDir is required') - } + async createSession(workDir?: string): Promise<{ sessionId: string }> { + // Default to user home directory when no workDir specified + const resolvedWorkDir = workDir || os.homedir() // Resolve to absolute path - const absWorkDir = path.resolve(workDir) + const absWorkDir = path.resolve(resolvedWorkDir) let stat try { stat = await fs.stat(absWorkDir) diff --git a/src/server/ws/handler.ts b/src/server/ws/handler.ts index 83262a66..46966cc7 100644 --- a/src/server/ws/handler.ts +++ b/src/server/ws/handler.ts @@ -8,6 +8,7 @@ import type { ServerWebSocket } from 'bun' import type { ClientMessage, ServerMessage } from './events.js' +import * as os from 'node:os' import { ConversationStartupError, conversationService, @@ -152,7 +153,7 @@ async function handleUserMessage( message: Extract ) { const { sessionId } = ws.data - let workDir = process.cwd() + let workDir = os.homedir() // Send thinking status sendMessage(ws, { type: 'status', state: 'thinking', verb: 'Thinking' })