import { UseGuards } from '@nestjs/common'; import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator'; import { FeatureFlagGuard, RequireFeatureFlag, } from 'src/engine/guards/feature-flag.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { AgentChatService } from 'src/engine/metadata-modules/agent/agent-chat.service'; import { AgentChatMessageDTO } from './dtos/agent-chat-message.dto'; import { AgentChatThreadDTO } from './dtos/agent-chat-thread.dto'; import { CreateAgentChatThreadInput } from './dtos/create-agent-chat-thread.input'; @UseGuards(WorkspaceAuthGuard, FeatureFlagGuard) @Resolver() export class AgentChatResolver { constructor(private readonly agentChatService: AgentChatService) {} @Query(() => [AgentChatThreadDTO]) @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async agentChatThreads( @Args('agentId') agentId: string, @AuthUserWorkspaceId() userWorkspaceId: string, ) { return this.agentChatService.getThreadsForAgent(agentId, userWorkspaceId); } @Query(() => AgentChatThreadDTO) @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async agentChatThread( @Args('id') id: string, @AuthUserWorkspaceId() userWorkspaceId: string, ) { return this.agentChatService.getThreadById(id, userWorkspaceId); } @Query(() => [AgentChatMessageDTO]) @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async agentChatMessages( @Args('threadId') threadId: string, @AuthUserWorkspaceId() userWorkspaceId: string, ) { return this.agentChatService.getMessagesForThread( threadId, userWorkspaceId, ); } @Mutation(() => AgentChatThreadDTO) @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async createAgentChatThread( @Args('input') input: CreateAgentChatThreadInput, @AuthUserWorkspaceId() userWorkspaceId: string, ) { return this.agentChatService.createThread(input.agentId, userWorkspaceId); } }