UNPKG

mycoder-agent

Version:

Agent module for mycoder - an AI-powered software development assistant

105 lines 3.43 kB
import { v4 as uuidv4 } from 'uuid'; export var AgentStatus; (function (AgentStatus) { AgentStatus["RUNNING"] = "running"; AgentStatus["COMPLETED"] = "completed"; AgentStatus["ERROR"] = "error"; AgentStatus["TERMINATED"] = "terminated"; })(AgentStatus || (AgentStatus = {})); export class AgentTracker { ownerAgentId; agents = new Map(); agentStates = new Map(); constructor(ownerAgentId) { this.ownerAgentId = ownerAgentId; } // Register a new agent registerAgent(goal) { const id = uuidv4(); // Create agent tracking entry const agent = { id, status: AgentStatus.RUNNING, startTime: new Date(), goal, }; this.agents.set(id, agent); return id; } // Register agent state registerAgentState(id, state) { this.agentStates.set(id, state); } // Update agent status updateAgentStatus(id, status, metadata) { const agent = this.agents.get(id); if (!agent) { return false; } agent.status = status; if (status === AgentStatus.COMPLETED || status === AgentStatus.ERROR || status === AgentStatus.TERMINATED) { agent.endTime = new Date(); } if (metadata) { if (metadata.result !== undefined) agent.result = metadata.result; if (metadata.error !== undefined) agent.error = metadata.error; } return true; } // Get a specific agent state getAgentState(id) { return this.agentStates.get(id); } // Get a specific agent tracking info getAgent(id) { return this.agents.get(id); } // Get all agents with optional filtering getAgents(status) { if (!status) { return Array.from(this.agents.values()); } return Array.from(this.agents.values()).filter((agent) => agent.status === status); } /** * Get list of active agents with their descriptions */ getActiveAgents() { return this.getAgents(AgentStatus.RUNNING).map(agent => ({ id: agent.id, description: agent.goal, status: agent.status })); } // Cleanup and terminate agents async cleanup() { const runningAgents = this.getAgents(AgentStatus.RUNNING); await Promise.all(runningAgents.map((agent) => this.terminateAgent(agent.id))); } // Terminate a specific agent async terminateAgent(id) { try { const agentState = this.agentStates.get(id); if (agentState && !agentState.aborted) { // Set the agent as aborted and completed agentState.aborted = true; agentState.completed = true; // Clean up resources owned by this sub-agent await agentState.context.agentTracker.cleanup(); await agentState.context.shellTracker.cleanup(); await agentState.context.browserTracker.cleanup(); } this.updateAgentStatus(id, AgentStatus.TERMINATED); } catch (error) { this.updateAgentStatus(id, AgentStatus.ERROR, { error: error instanceof Error ? error.message : String(error), }); } } } //# sourceMappingURL=AgentTracker.js.map