| import type { AgentState, VersionRecord } from './types'; | |
| export const isActiveVersion = ( | |
| version: VersionRecord, | |
| currentAgent: AgentState, | |
| versions: VersionRecord[], | |
| ): boolean => { | |
| if (!versions || versions.length === 0) { | |
| return false; | |
| } | |
| if (!currentAgent) { | |
| const versionIndex = versions.findIndex( | |
| (v) => | |
| v.name === version.name && | |
| v.instructions === version.instructions && | |
| v.artifacts === version.artifacts, | |
| ); | |
| return versionIndex === 0; | |
| } | |
| const matchesName = version.name === currentAgent.name; | |
| const matchesDescription = version.description === currentAgent.description; | |
| const matchesInstructions = version.instructions === currentAgent.instructions; | |
| const matchesArtifacts = version.artifacts === currentAgent.artifacts; | |
| const toolsMatch = () => { | |
| if (!version.tools && !currentAgent.tools) return true; | |
| if (!version.tools || !currentAgent.tools) return false; | |
| if (version.tools.length !== currentAgent.tools.length) return false; | |
| const sortedVersionTools = [...version.tools].sort(); | |
| const sortedCurrentTools = [...currentAgent.tools].sort(); | |
| return sortedVersionTools.every((tool, i) => tool === sortedCurrentTools[i]); | |
| }; | |
| const capabilitiesMatch = () => { | |
| if (!version.capabilities && !currentAgent.capabilities) return true; | |
| if (!version.capabilities || !currentAgent.capabilities) return false; | |
| if (version.capabilities.length !== currentAgent.capabilities.length) return false; | |
| const sortedVersionCapabilities = [...version.capabilities].sort(); | |
| const sortedCurrentCapabilities = [...currentAgent.capabilities].sort(); | |
| return sortedVersionCapabilities.every( | |
| (capability, i) => capability === sortedCurrentCapabilities[i], | |
| ); | |
| }; | |
| return ( | |
| matchesName && | |
| matchesDescription && | |
| matchesInstructions && | |
| matchesArtifacts && | |
| toolsMatch() && | |
| capabilitiesMatch() | |
| ); | |
| }; | |