import type { AiTaskParams, AiTaskInfo, AiTaskApprovalResponse, AiTaskStreamEvent, PermissionRequestEntry, PermissionResponseEntry } from '@loopsy/protocol'; type EventCallback = (event: AiTaskStreamEvent) => void; export interface AiTaskManagerConfig { maxConcurrent?: number; daemonPort: number; apiKey: string; } export declare class AiTaskManager { private tasks; private recentTasks; private pendingPermissions; private permissionResponses; private maxConcurrent; private daemonPort; private apiKey; constructor(config: AiTaskManagerConfig); /** Auto-detect the first available agent CLI */ private detectAgent; /** Build CLI args for Claude */ private buildClaudeArgs; /** Build CLI args for Gemini CLI */ private buildGeminiArgs; /** Build CLI args for Codex CLI */ private buildCodexArgs; /** Build a sanitized env for the given agent */ private buildEnv; dispatch(params: AiTaskParams, fromNodeId: string): Promise; /** * Register a permission request from the hook script. * Called by POST /ai-tasks/:taskId/permission-request */ registerPermissionRequest(taskId: string, request: Omit): boolean; /** * Resolve a pending permission request (approve or deny). * Called by POST /ai-tasks/:taskId/approve */ resolvePermission(taskId: string, requestId: string, approved: boolean, message?: string): boolean; /** * Get the permission response for a given requestId (polled by hook script). * Returns null if not yet resolved. */ getPermissionResponse(taskId: string, requestId: string): PermissionResponseEntry | null; /** * Legacy approve method — now delegates to resolvePermission. */ approve(taskId: string, response: AiTaskApprovalResponse & { message?: string; }): boolean; cancel(taskId: string): boolean; getTask(taskId: string): AiTaskInfo | undefined; getAllTasks(): AiTaskInfo[]; getEventBuffer(taskId: string): AiTaskStreamEvent[]; subscribe(taskId: string, callback: EventCallback): (() => void) | null; cancelAll(): void; deleteTask(taskId: string): boolean; /** * Get the absolute path to the permission hook script. * Used by external callers (e.g. hook installer). */ getHookScriptPath(): string; get activeCount(): number; private handleClaudeEvent; private handleGeminiEvent; private handleCodexEvent; private emit; } export {}; //# sourceMappingURL=ai-task-manager.d.ts.map