import { IVersionRepository, IApiClient } from '../repositories/interfaces'; import { AgentVersion, VersionResponse, CreateVersionRequest, UpdateVersionDetailsRequest, VersionComparison, } from '../types'; export class ApiVersionRepository implements IVersionRepository { constructor(private apiClient: IApiClient) {} private toAgentVersion(response: VersionResponse): AgentVersion { return { versionId: { value: response.version_id }, agentId: { value: response.agent_id }, versionNumber: { value: response.version_number }, versionName: response.version_name, systemPrompt: response.system_prompt, configuredMcps: (response.configured_mcps || []).map(mcp => ({ name: mcp.name, type: mcp.type || 'sse', config: mcp.config || {}, enabledTools: mcp.enabledTools || mcp.enabled_tools || [] })), customMcps: (response.custom_mcps || []).map(mcp => ({ name: mcp.name, type: mcp.type || 'sse', config: mcp.config || {}, enabledTools: mcp.enabledTools || mcp.enabled_tools || [] })), toolConfiguration: { tools: response.agentpress_tools || {} }, agentpress_tools: response.agentpress_tools || {}, isActive: response.is_active, createdAt: new Date(response.created_at), updatedAt: new Date(response.updated_at), createdBy: { value: response.created_by }, changeDescription: response.change_description }; } async getAllVersions(agentId: string): Promise { const versions = await this.apiClient.get( `/agents/${agentId}/versions` ); return versions.map(v => this.toAgentVersion(v)); } async getVersion(agentId: string, versionId: string): Promise { const version = await this.apiClient.get( `/agents/${agentId}/versions/${versionId}` ); return this.toAgentVersion(version); } async createVersion( agentId: string, request: CreateVersionRequest ): Promise { const version = await this.apiClient.post( `/agents/${agentId}/versions`, request ); return this.toAgentVersion(version); } async activateVersion(agentId: string, versionId: string): Promise { await this.apiClient.put(`/agents/${agentId}/versions/${versionId}/activate`); } async compareVersions( agentId: string, version1Id: string, version2Id: string ): Promise { const response = await this.apiClient.get<{ version1: VersionResponse; version2: VersionResponse; differences: any[]; }>(`/agents/${agentId}/versions/compare/${version1Id}/${version2Id}`); return { version1: this.toAgentVersion(response.version1), version2: this.toAgentVersion(response.version2), differences: response.differences }; } async rollbackToVersion( agentId: string, versionId: string ): Promise { const version = await this.apiClient.post( `/agents/${agentId}/versions/${versionId}/rollback` ); return this.toAgentVersion(version); } async updateVersionDetails( agentId: string, versionId: string, request: UpdateVersionDetailsRequest ): Promise { const version = await this.apiClient.put( `/agents/${agentId}/versions/${versionId}/details`, request ); return this.toAgentVersion(version); } }