import { XiaoYiWebSocketManager } from "./websocket"; import { XiaoYiChannelConfig } from "./types"; /** * Timeout configuration */ export interface TimeoutConfig { enabled: boolean; duration: number; message: string; } /** * Runtime state for XiaoYi channel * Manages single WebSocket connection (single account mode) */ export declare class XiaoYiRuntime { private connection; private pluginRuntime; private config; private sessionToTaskIdMap; private instanceId; private sessionTimeoutMap; private sessionTimeoutSent; private timeoutConfig; private sessionAbortControllerMap; private sessionActiveRunMap; private sessionStartTimeMap; private static readonly SESSION_STALE_TIMEOUT_MS; private sessionTaskTimeoutMap; private sessionPushPendingMap; private taskTimeoutMs; constructor(); getInstanceId(): string; /** * Set OpenClaw PluginRuntime (from api.runtime in register()) */ setPluginRuntime(runtime: any): void; /** * Get OpenClaw PluginRuntime */ getPluginRuntime(): any; /** * Start connection (single account mode) */ start(config: XiaoYiChannelConfig): Promise; /** * Stop connection */ stop(): void; /** * Set timeout configuration */ setTimeoutConfig(config: Partial): void; /** * Get timeout configuration */ getTimeoutConfig(): TimeoutConfig; /** * Set timeout for a session * @param sessionId - Session ID * @param callback - Function to call when timeout occurs * @returns The interval ID (for cancellation) * * IMPORTANT: This now uses setInterval instead of setTimeout * - First trigger: after 60 seconds * - Subsequent triggers: every 60 seconds after that * - Cleared when: response received, session completed, or explicitly cleared */ setTimeoutForSession(sessionId: string, callback: () => void): NodeJS.Timeout | undefined; /** * Clear timeout interval for a session * @param sessionId - Session ID */ clearSessionTimeout(sessionId: string): void; /** * Check if timeout has been sent for a session * @param sessionId - Session ID */ isSessionTimeout(sessionId: string): boolean; /** * Mark session as completed (clear timeout and timeout flag) * @param sessionId - Session ID */ markSessionCompleted(sessionId: string): void; /** * Clear all timeout intervals */ clearAllTimeouts(): void; /** * Get WebSocket manager */ getConnection(): XiaoYiWebSocketManager | null; /** * Check if connected */ isConnected(): boolean; /** * Get configuration */ getConfig(): XiaoYiChannelConfig | null; /** * Set taskId for a session */ setTaskIdForSession(sessionId: string, taskId: string): void; /** * Get taskId for a session */ getTaskIdForSession(sessionId: string): string | undefined; /** * Clear taskId for a session */ clearTaskIdForSession(sessionId: string): void; /** * Create and register an AbortController for a session * @param sessionId - Session ID * @returns The AbortController and its signal, or null if session is busy */ createAbortControllerForSession(sessionId: string): { controller: AbortController; signal: AbortSignal; } | null; /** * Check if a session has an active agent run * If session is active but stale (超过 SESSION_STALE_TIMEOUT_MS), automatically clean up * @param sessionId - Session ID * @returns true if session is busy */ isSessionActive(sessionId: string): boolean; /** * Abort a session's agent run * @param sessionId - Session ID * @returns true if a controller was found and aborted, false otherwise */ abortSession(sessionId: string): boolean; /** * Check if a session has been aborted * @param sessionId - Session ID * @returns true if the session's abort signal was triggered */ isSessionAborted(sessionId: string): boolean; /** * Clear the AbortController for a session (call when agent completes successfully) * @param sessionId - Session ID */ clearAbortControllerForSession(sessionId: string): void; /** * Clear all AbortControllers */ clearAllAbortControllers(): void; /** * Generate a composite key for session+task combination * This ensures each task has its own push state, even within the same session */ private getPushStateKey; /** * Set task timeout time (from configuration) */ setTaskTimeout(timeoutMs: number): void; /** * Set a 1-hour task timeout timer for a session * @returns timeout ID */ setTaskTimeoutForSession(sessionId: string, taskId: string, callback: (sessionId: string, taskId: string) => void): NodeJS.Timeout; /** * Clear the task timeout timer for a session */ clearTaskTimeoutForSession(sessionId: string): void; /** * Check if session+task is waiting for push notification * @param sessionId - Session ID * @param taskId - Task ID (optional, for per-task tracking) */ isSessionWaitingForPush(sessionId: string, taskId?: string): boolean; /** * Mark session+task as waiting for push notification * @param sessionId - Session ID * @param taskId - Task ID (optional, for per-task tracking) */ markSessionWaitingForPush(sessionId: string, taskId?: string): void; /** * Clear the waiting push state for a session+task * @param sessionId - Session ID * @param taskId - Task ID (optional, for per-task tracking) */ clearSessionWaitingForPush(sessionId: string, taskId?: string): void; /** * Clear all task timeout related state for a session */ clearTaskTimeoutState(sessionId: string): void; } export declare function getXiaoYiRuntime(): XiaoYiRuntime; export declare function setXiaoYiRuntime(runtime: any): void;