diff --git a/packages/cli/src/modules/agents/system-agents/__tests__/system-agent-execution.service.test.ts b/packages/cli/src/modules/agents/system-agents/__tests__/system-agent-execution.service.test.ts index 2dec618cf97..c4f77521c94 100644 --- a/packages/cli/src/modules/agents/system-agents/__tests__/system-agent-execution.service.test.ts +++ b/packages/cli/src/modules/agents/system-agents/__tests__/system-agent-execution.service.test.ts @@ -1029,6 +1029,37 @@ describe('SystemAgentExecutionService', () => { }); }); + it('refuses to return an existing session of the user from another project', async () => { + const { service, threadRepository, txRunner } = setup(); + threadRepository.findOneBy.mockResolvedValue({ ...thread, projectId: 'project-2' } as never); + + await expect( + service.createThread({ + agentId: AGENT_ID, + user, + projectId: 'project-1', + threadId: 'thread-1', + }), + ).rejects.toThrow(NotFoundError); + expect(txRunner.run).not.toHaveBeenCalled(); + }); + + it('returns an existing session of the user in the same project', async () => { + const { service, threadRepository, txRunner } = setup(); + const existing = { ...thread, projectId: 'project-1' }; + threadRepository.findOneBy.mockResolvedValue(existing as never); + + expect( + await service.createThread({ + agentId: AGENT_ID, + user, + projectId: 'project-1', + threadId: 'thread-1', + }), + ).toBe(existing); + expect(txRunner.run).not.toHaveBeenCalled(); + }); + it('refuses to create a session with the id of a thread of another user', async () => { const { service, threadRepository, txRunner } = setup(); threadRepository.findOneBy.mockResolvedValue({ ...thread, ownerId: 'user-2' } as never); diff --git a/packages/cli/src/modules/agents/system-agents/system-agent-execution.service.ts b/packages/cli/src/modules/agents/system-agents/system-agent-execution.service.ts index 59c2a06193e..b3847d6c24c 100644 --- a/packages/cli/src/modules/agents/system-agents/system-agent-execution.service.ts +++ b/packages/cli/src/modules/agents/system-agents/system-agent-execution.service.ts @@ -148,7 +148,9 @@ export class SystemAgentExecutionService { if ( existing.agentId !== params.agentId || existing.accessScope !== 'user' || - existing.ownerId !== params.user.id + existing.ownerId !== params.user.id || + // The access check above ran for `params.projectId`, not for the project of this thread. + existing.projectId !== params.projectId ) { throw new NotFoundError('Session not found'); }