@measey/mycoder-agent
Version:
Agent module for mycoder - an AI-powered software development assistant
91 lines • 4.36 kB
JavaScript
/**
* Tests for the status updates mechanism
*/
import { describe, expect, it, vi } from 'vitest';
import { AgentStatus } from '../../../tools/agent/AgentTracker.js';
import { SessionStatus } from '../../../tools/session/SessionTracker.js';
import { ShellStatus } from '../../../tools/shell/ShellTracker.js';
import { TokenTracker } from '../../tokens.js';
import { generateStatusUpdate } from '../statusUpdates.js';
describe('Status Updates', () => {
it('should generate a status update with correct token usage information', () => {
// Setup
const totalTokens = 50000;
const contextWindow = 100000;
const tokenTracker = new TokenTracker('test');
// Mock the context
const context = {
agentTracker: {
getAgents: vi.fn().mockReturnValue([]),
},
shellTracker: {
getShells: vi.fn().mockReturnValue([]),
},
browserTracker: {
getSessionsByStatus: vi.fn().mockReturnValue([]),
},
};
// Execute
const statusMessage = generateStatusUpdate(totalTokens, contextWindow, tokenTracker, context);
// Verify
expect(statusMessage.role).toBe('system');
expect(statusMessage.content).toContain('--- STATUS UPDATE ---');
expect(statusMessage.content).toContain('Token Usage: 50,000/100,000 (50%)');
expect(statusMessage.content).toContain('Active Sub-Agents: 0');
expect(statusMessage.content).toContain('Active Shell Processes: 0');
expect(statusMessage.content).toContain('Active Browser Sessions: 0');
expect(statusMessage.content).toContain('compactHistory');
// With 50% usage, it should now show the high usage warning instead of the low usage message
// expect(statusMessage.content).toContain('If token usage gets high (>50%)');
expect(statusMessage.content).toContain('Your token usage is high');
// With 50% usage, it should now show the high usage warning
expect(statusMessage.content).toContain('Your token usage is high');
});
it('should include active agents, shells, and sessions', () => {
// Setup
const totalTokens = 70000;
const contextWindow = 100000;
const tokenTracker = new TokenTracker('test');
// Mock the context with active agents, shells, and sessions
const context = {
agentTracker: {
getAgents: vi.fn().mockReturnValue([
{ agentId: 'agent1', goal: 'Task 1', status: AgentStatus.RUNNING },
{ agentId: 'agent2', goal: 'Task 2', status: AgentStatus.RUNNING },
]),
},
shellTracker: {
getShells: vi.fn().mockReturnValue([
{
shellId: 'shell1',
status: ShellStatus.RUNNING,
metadata: { command: 'npm test' },
},
]),
},
browserTracker: {
getSessionsByStatus: vi.fn().mockReturnValue([
{
sessionId: 'session1',
status: SessionStatus.RUNNING,
metadata: { url: 'https://example.com' },
},
]),
},
};
// Execute
const statusMessage = generateStatusUpdate(totalTokens, contextWindow, tokenTracker, context);
// Verify
expect(statusMessage.content).toContain('Token Usage: 70,000/100,000 (70%)');
expect(statusMessage.content).toContain('Your token usage is high (70%)');
expect(statusMessage.content).toContain('recommended to use');
expect(statusMessage.content).toContain('Active Sub-Agents: 2');
expect(statusMessage.content).toContain('- agent1: Task 1');
expect(statusMessage.content).toContain('- agent2: Task 2');
expect(statusMessage.content).toContain('Active Shell Processes: 1');
expect(statusMessage.content).toContain('- shell1: npm test');
expect(statusMessage.content).toContain('Active Browser Sessions: 1');
expect(statusMessage.content).toContain('- session1: https://example.com');
});
});
//# sourceMappingURL=statusUpdates.test.js.map