Skip to main content
Glama
systempromptio

SystemPrompt Coding Agent

Official
README.md11 kB
# Services Core business logic layer implementing agent orchestration, task management, and state persistence for the SystemPrompt Coding Agent MCP server. ## Overview The services layer provides the essential functionality for: - **Agent Management**: Orchestrating AI coding assistants (Claude Code, Gemini) - **Task Execution**: Managing coding task lifecycle and execution - **State Persistence**: Saving and restoring system state - **Event Management**: Real-time notifications and progress tracking - **Session Management**: Handling concurrent agent sessions ## Architecture ``` ┌─────────────────────────────────────────┐ │ Handler Layer │ └────────────────┬────────────────────────┘ │ ┌────────────────▼────────────────────────┐ │ Services Layer │ ├─────────────────────────────────────────┤ │ ┌─────────────┐ ┌─────────────┐ │ │ │Agent Manager│ │ Task Store │ │ │ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ ┌──────▼──────┐ ┌──────▼──────┐ │ │ │Claude Code │ │State Persist│ │ │ │ Service │ │ Service │ │ │ └──────┬──────┘ └─────────────┘ │ └─────────┼───────────────────────────────┘ │ ┌─────────▼───────────────────────────────┐ │ Host Bridge Daemon │ │ (Port 9876) │ └─────────────────────────────────────────┘ ``` ## Core Services ### 🤖 Agent Manager (`agent-manager/`) Central orchestrator for AI coding agents. #### Key Components: ##### `agent-manager.ts` Main orchestration service: ```typescript export class AgentManager { // Agent allocation async allocateAgent(taskId: string, tool: string): Promise<Agent> // Task execution async executeTask(task: Task): Promise<TaskResult> // Health monitoring checkAgentHealth(): AgentHealthStatus[] // Resource management releaseAgent(agentId: string): void } ``` ##### `agent-interface.ts` Abstract interface for agents: ```typescript export interface Agent { id: string; type: 'claude-code' | 'gemini' | 'shell'; status: AgentStatus; // Core operations execute(command: string): Promise<ExecutionResult>; cancel(): Promise<void>; getStatus(): AgentStatus; } ``` ##### `claude-session-manager.ts` Claude-specific session handling: - Session creation and lifecycle - Query execution management - Output stream handling - Error recovery ##### `session-store.ts` Session persistence: - Active session tracking - Session state management - Cleanup on disconnect ##### `task-logger.ts` Comprehensive task logging: - Execution history - Performance metrics - Error tracking - Debug information ### 🔧 Claude Code Service (`claude-code/`) Claude Code CLI integration implementation. #### Key Components: ##### `claude-code-service.ts` Main Claude integration: ```typescript export class ClaudeCodeService extends EventEmitter { // Session management async createSession(config: SessionConfig): Promise<Session> // Command execution async execute(sessionId: string, command: string): Promise<Result> // Output streaming onOutput(sessionId: string, callback: OutputCallback): void // Event emission emit(event: 'claude:event', data: ClaudeEvent): void } ``` ##### `host-proxy-client.ts` Communication with host daemon: ```typescript export class HostProxyClient { // Connect to daemon connect(host: string, port: number): Promise<void> // Execute commands execute(command: ClaudeCommand): Promise<CommandResult> // Handle streaming onData(callback: DataCallback): void } ``` ##### `event-parser.ts` Claude output parsing: ```typescript export class EventParser { // Parse Claude events parseEvent(data: string): ClaudeEvent | null // Extract tool usage extractToolUsage(event: ClaudeEvent): ToolUsage // Track progress getProgress(events: ClaudeEvent[]): Progress } ``` ##### `progress-tracker.ts` Task progress monitoring: - Step completion tracking - Time estimation - Performance metrics - Status updates ##### `query-executor.ts` Query execution management: - Query queuing - Timeout handling - Result parsing - Error recovery ### 📊 Task Store (`task-store.ts`) In-memory task management with persistence. #### Features: ```typescript export class TaskStore extends EventEmitter { // Task operations createTask(params: CreateTaskParams): Task updateTask(id: string, updates: TaskUpdate): Task getTask(id: string): Task | undefined getTasks(filter?: TaskFilter): Task[] // Event emission emit(event: 'task:created', task: Task): void emit(event: 'task:updated', task: Task): void emit(event: 'task:completed', task: Task): void // Persistence async save(): Promise<void> async load(): Promise<void> } ``` #### Task Lifecycle: 1. **Created**: Initial state 2. **Running**: Agent executing 3. **Completed**: Successfully finished 4. **Failed**: Error occurred 5. **Cancelled**: User cancelled ### 💾 State Persistence (`state-persistence.ts`) Persistent state management across restarts. #### Features: ```typescript export class StatePersistence { // Save state async saveState(state: SystemState): Promise<void> // Load state async loadState(): Promise<SystemState | null> // Auto-save enableAutoSave(interval: number): void // State migration migrateState(oldVersion: number, state: any): SystemState } ``` #### Persisted Data: - Active tasks - Agent sessions - System configuration - Performance metrics ### 📢 Task Store Events (`task-store-events.ts`) Event definitions and handlers: ```typescript export enum TaskEvent { CREATED = 'task:created', UPDATED = 'task:updated', STARTED = 'task:started', COMPLETED = 'task:completed', FAILED = 'task:failed', CANCELLED = 'task:cancelled' } export interface TaskEventData { task: Task; timestamp: number; changes?: Partial<Task>; } ``` ## Service Patterns ### Agent Allocation Pattern ```typescript // 1. Request agent const agent = await agentManager.allocateAgent({ type: 'claude-code', taskId: task.id }); // 2. Execute task const result = await agent.execute(task.instructions); // 3. Release agent agentManager.releaseAgent(agent.id); ``` ### Task Execution Pattern ```typescript // 1. Create task const task = taskStore.createTask({ tool: 'CLAUDECODE', instructions: 'Create a React component', branch: 'feature/new-component' }); // 2. Execute with agent await agentManager.executeTask(task); // 3. Monitor progress taskStore.on('task:updated', (data) => { console.log(`Progress: ${data.task.progress}%`); }); ``` ### Event Handling Pattern ```typescript // Listen for Claude events claudeService.on('claude:event', (event) => { switch (event.type) { case 'tool:start': console.log(`Tool ${event.toolName} started`); break; case 'tool:end': console.log(`Tool completed in ${event.duration}ms`); break; } }); ``` ## Error Handling ### Service-Level Errors ```typescript export class ServiceError extends Error { constructor( message: string, public code: string, public context?: any ) { super(message); } } ``` ### Recovery Strategies 1. **Retry with backoff**: For transient failures 2. **Agent restart**: For crashed processes 3. **Task reassignment**: For failed agents 4. **State rollback**: For corruption ## Configuration ### Environment Variables ```bash # Agent configuration MAX_CONCURRENT_AGENTS=5 AGENT_TIMEOUT=300000 # 5 minutes AGENT_RETRY_ATTEMPTS=3 # Task configuration TASK_TIMEOUT=600000 # 10 minutes TASK_MAX_OUTPUT=1048576 # 1MB # State persistence STATE_FILE_PATH=./state/tasks.json STATE_SAVE_INTERVAL=30000 # 30 seconds # Claude configuration CLAUDE_SESSION_TIMEOUT=1800000 # 30 minutes CLAUDE_MAX_RETRIES=3 ``` ### Service Options ```typescript interface ServiceConfig { agentManager: { maxConcurrent: number; timeout: number; retryAttempts: number; }; taskStore: { maxTasks: number; cleanupInterval: number; }; statePersistence: { filePath: string; saveInterval: number; compression: boolean; }; } ``` ## Monitoring ### Metrics Exposed - **Agent Metrics**: - Active agents count - Agent utilization - Success/failure rates - Average execution time - **Task Metrics**: - Tasks created/completed - Queue length - Processing time - Error rates - **System Metrics**: - Memory usage - CPU utilization - Event throughput - State size ### Health Checks ```typescript interface HealthStatus { healthy: boolean; services: { agentManager: ServiceHealth; taskStore: ServiceHealth; statePersistence: ServiceHealth; }; metrics: SystemMetrics; } ``` ## Testing ### Unit Testing ```typescript describe('AgentManager', () => { it('should allocate agent for task', async () => { const agent = await manager.allocateAgent('task-1', 'claude-code'); expect(agent).toBeDefined(); expect(agent.status).toBe('idle'); }); }); ``` ### Integration Testing - Test agent-task integration - Verify state persistence - Check event propagation - Validate error recovery ## Best Practices 1. **Resource Management** - Always release agents after use - Implement timeouts for all operations - Clean up failed tasks 2. **Error Handling** - Log all errors with context - Implement retry logic - Provide graceful degradation 3. **Performance** - Stream large outputs - Batch state saves - Use event debouncing 4. **Security** - Validate all inputs - Sanitize command execution - Limit resource usage ## Future Enhancements - **Multi-Agent Types**: Support for more AI assistants - **Distributed Execution**: Scale across multiple hosts - **Advanced Scheduling**: Priority queues and scheduling - **Plugin System**: Extensible agent capabilities - **Metrics Dashboard**: Real-time monitoring UI This service layer forms the core engine of the SystemPrompt Coding Agent, providing reliable, scalable, and maintainable agent orchestration.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systempromptio/systemprompt-code-orchestrator'

If you have feedback or need assistance with the MCP directory API, please join our Discord server