diff --git a/src/main/apiServer/routes/agents/handlers/messages.ts b/src/main/apiServer/routes/agents/handlers/messages.ts index 0f731fe089..4364868dac 100644 --- a/src/main/apiServer/routes/agents/handlers/messages.ts +++ b/src/main/apiServer/routes/agents/handlers/messages.ts @@ -12,7 +12,7 @@ const verifyAgentAndSession = async (agentId: string, sessionId: string) => { throw { status: 404, code: 'agent_not_found', message: 'Agent not found' } } - const session = await sessionService.getSession(sessionId) + const session = await sessionService.getSession(agentId, sessionId) if (!session) { throw { status: 404, code: 'session_not_found', message: 'Session not found' } } diff --git a/src/main/apiServer/routes/agents/handlers/sessions.ts b/src/main/apiServer/routes/agents/handlers/sessions.ts index d9f45833c1..f164d6cd52 100644 --- a/src/main/apiServer/routes/agents/handlers/sessions.ts +++ b/src/main/apiServer/routes/agents/handlers/sessions.ts @@ -64,7 +64,7 @@ export const getSession = async (req: Request, res: Response): Promise const { agentId, sessionId } = req.params logger.info(`Getting session: ${sessionId} for agent: ${agentId}`) - const session = await sessionService.getSession(sessionId) + const session = await sessionService.getSession(agentId, sessionId) if (!session) { logger.warn(`Session not found: ${sessionId}`) @@ -119,7 +119,7 @@ export const updateSession = async (req: Request, res: Response): Promise { + ): Promise<{ messages: AgentSessionMessageEntity[] }> { this.ensureInitialized() - // Get total count - const totalResult = await this.database - .select({ count: count() }) - .from(sessionMessagesTable) - .where(eq(sessionMessagesTable.session_id, sessionId)) - - const total = totalResult[0].count - // Get messages with pagination const baseQuery = this.database .select() @@ -175,7 +167,7 @@ export class SessionMessageService extends BaseService { const messages = result.map((row) => this.deserializeSessionMessage(row)) as AgentSessionMessageEntity[] - return { messages, total } + return { messages } } async saveUserMessage( diff --git a/src/main/services/agents/services/SessionService.ts b/src/main/services/agents/services/SessionService.ts index 1141a26014..63a64c1efb 100644 --- a/src/main/services/agents/services/SessionService.ts +++ b/src/main/services/agents/services/SessionService.ts @@ -78,7 +78,25 @@ export class SessionService extends BaseService { return this.deserializeJsonFields(result[0]) as AgentSessionEntity } - async getSession(id: string): Promise { + async getSession(agentId: string, id: string): Promise { + this.ensureInitialized() + + const result = await this.database + .select() + .from(sessionsTable) + .where(and(eq(sessionsTable.id, id), eq(sessionsTable.agent_id, agentId))) + .limit(1) + + if (!result[0]) { + return null + } + + const session = this.deserializeJsonFields(result[0]) as GetAgentSessionResponse + + return session + } + + async getSessionById(id: string): Promise { this.ensureInitialized() const result = await this.database.select().from(sessionsTable).where(eq(sessionsTable.id, id)).limit(1) @@ -92,14 +110,6 @@ export class SessionService extends BaseService { return session } - async getSessionWithAgent(id: string): Promise { - this.ensureInitialized() - - // TODO: Implement join query with agents table when needed - // For now, just return the session - return await this.getSession(id) - } - async listSessions( agentId?: string, options: ListOptions = {} @@ -139,11 +149,11 @@ export class SessionService extends BaseService { return { sessions, total } } - async updateSession(id: string, updates: UpdateSessionRequest): Promise { + async updateSession(agentId: string, id: string, updates: UpdateSessionRequest): Promise { this.ensureInitialized() // Check if session exists - const existing = await this.getSession(id) + const existing = await this.getSession(agentId, id) if (!existing) { return null } @@ -173,24 +183,26 @@ export class SessionService extends BaseService { await this.database.update(sessionsTable).set(updateData).where(eq(sessionsTable.id, id)) - return await this.getSession(id) + return await this.getSession(agentId, id) } - async deleteSession(id: string): Promise { + async deleteSession(agentId: string, id: string): Promise { this.ensureInitialized() - const result = await this.database.delete(sessionsTable).where(eq(sessionsTable.id, id)) + const result = await this.database + .delete(sessionsTable) + .where(and(eq(sessionsTable.id, id), eq(sessionsTable.agent_id, agentId))) return result.rowsAffected > 0 } - async sessionExists(id: string): Promise { + async sessionExists(agentId: string, id: string): Promise { this.ensureInitialized() const result = await this.database .select({ id: sessionsTable.id }) .from(sessionsTable) - .where(eq(sessionsTable.id, id)) + .where(and(eq(sessionsTable.id, id), eq(sessionsTable.agent_id, agentId))) .limit(1) return result.length > 0 diff --git a/src/renderer/src/types/agent.ts b/src/renderer/src/types/agent.ts index cad935d0e8..ecce2941cf 100644 --- a/src/renderer/src/types/agent.ts +++ b/src/renderer/src/types/agent.ts @@ -2,7 +2,7 @@ * Database entity types for Agent, Session, and SessionMessage * Shared between main and renderer processes */ -import { ModelMessage, modelMessageSchema, TextStreamPart, UIMessageChunk } from 'ai' +import { ModelMessage, modelMessageSchema, TextStreamPart } from 'ai' import { z } from 'zod' // ------------------ Core enums and helper types ------------------ @@ -119,14 +119,6 @@ export type AgentSessionMessageEntity = z.infer