/**
 * Agent 客户端核心模块
 * 负责与调度中心通信，管理消息循环
 */
import type { MemoryStats } from "./memory-store.js";
import { StatusReporter } from "./status-reporter.js";
import type { AgentConfig, DirectMessage, DmHistoryResponse, FetchUnreadMessagesOptions, FinishTaskRollbackArgs, GroupHistoryResponse, GroupRoomsResponse, HireBatchResult, HireColleagueArgs, HireColleaguesBatchArgs, HiredColleagueResult, MessageHandler, OnlineListResponse, ProfileInfo, RegisterResult, RecordTaskChangeArgs, SendDmResult, SendMessageResult, StartTaskRollbackArgs, TaskInstanceCommentArgs, UnreadMessagesResult } from "./types.js";
export type ProfileHandler = (profile: ProfileInfo) => void;
export declare class AgentClient {
    private wsClient;
    private httpClient;
    private agentConfig;
    private serverConfig;
    private agentId;
    private displayName;
    private projectName;
    private isRunning;
    private messageHandler;
    private profileHandler;
    private pollTimer;
    private statusReporter;
    /**
     * Profile 缓存
     * 用于处理 PROFILE_INFO 消息在 profileHandler 设置之前到达的情况
     */
    private cachedProfile;
    constructor();
    initialize(): Promise<void>;
    private setupWebSocketListeners;
    /**
     * 注册 Agent 上线
     */
    register(): Promise<RegisterResult>;
    private hasPresetAgentId;
    /**
     * 使用预设 AgentID 注册（绑定已有实例）
     */
    private registerWithExistingAgentId;
    /**
     * 作为新 Agent 注册
     */
    private registerAsNewAgent;
    /**
     * 注销 Agent 下线
     */
    unregister(): Promise<void>;
    /**
     * 获取当前 Agent 可见的同事列表（包含离线 Agent）。
     */
    discoverColleagues(): Promise<OnlineListResponse>;
    /**
     * 获取当前 Agent 在关系图中可发现的群组列表。
     */
    discoverGroupRooms(): Promise<GroupRoomsResponse>;
    /**
     * 招聘同事并创建新的 Agent 实例。
     * 主流程：校验当前实例已注册 -> 透传创建角色参数到服务端 MCP tool -> 返回新实例信息。
     */
    hireColleague(args: HireColleagueArgs): Promise<HiredColleagueResult>;
    /**
     * 批量发起招聘审批请求。
     * 主流程：校验当前实例已注册 -> 透传批量招聘参数到服务端 MCP tool -> 返回整批审批与创建结果。
     */
    hireColleaguesBatch(args: HireColleaguesBatchArgs): Promise<HireBatchResult>;
    /**
     * 调用需要当前 Agent 实例身份的 server MCP tool。
     * 主流程：确认已注册 -> 自动附加 agentId -> 复用带 runtime token 的 HTTP 通道。
     */
    callAgentScopedTool<T = unknown>(toolName: string, args: Record<string, unknown>): Promise<T>;
    /**
     * 上报当前 MCP 本地合并后的记忆统计。
     * 主流程：自动附加 agentId -> 交给 server 广播给 Dashboard，避免前端只看到 server 实例级统计。
     */
    reportMemoryStats(memoryStats: MemoryStats): Promise<void>;
    /**
     * 发送群消息
     * @param content 消息内容
     * @param projectName 目标项目名，不传则使用 Agent 所属项目（由服务端决定）
     * @param roomId 目标群房间 ID，小组群场景下优先使用以避免误发到项目公共群
     */
    sendGroupMessage(content: string, projectName?: string, roomId?: string): Promise<SendMessageResult>;
    /**
     * 发送私信
     */
    sendDirectMessage(targetId: string, content: string, waitReply?: boolean, replyToCallId?: string, timeoutMs?: number): Promise<SendDmResult>;
    /**
     * 发送私信并等待回复（阻塞式）
     */
    sendCallAndWaitReply(targetId: string, content: string, timeoutMs?: number): Promise<DirectMessage>;
    /**
     * 回复调用式消息
     */
    replyToCall(callId: string, targetId: string, content: string): Promise<SendDmResult>;
    /**
     * 获取私信历史消息
     */
    getDmHistory(targetUserId?: string, limit?: number, since?: string): Promise<DmHistoryResponse>;
    /**
     * 获取群消息历史记录
     */
    getGroupHistory(limit?: number, roomId?: string, since?: string): Promise<GroupHistoryResponse>;
    /**
     * 拉取当前 Agent 尚未消费的未读消息。
     * 主流程：校验注册状态 -> 获取未读私信 -> 获取未读群消息 -> 合并返回。
     * @param since 可选的起始时间（ISO 8601），早于该时间的消息将被过滤
     */
    fetchUnreadMessages(options?: FetchUnreadMessagesOptions): Promise<UnreadMessagesResult>;
    /**
     * 拉取服务端私信并对 poll_message 长轮询临时失败做恢复。
     * 主流程：正常调用 HTTP MCP tool -> 仅当服务端阻塞 poll_message 返回 503 或客户端硬超时时转为空结果，让本地轮询退避后继续等待。
     */
    private fetchDirectMessagesWithRecovery;
    /**
     * 判断是否为 poll_message 长轮询的可恢复失败。
     * 主流程：只匹配明确的 MCP tool HTTP 503 或客户端超时，避免吞掉业务工具错误或认证错误。
     */
    private isRecoverableLongPollError;
    /**
     * 规范化服务端群消息响应。
     * 主流程：只接受数组中的完整群消息对象，忽略 401/空响应/异常元素，避免补拉消息时崩溃。
     */
    private normalizeGroupMessages;
    /**
     * 收集当前项目下 Agent 可访问的群房间 ID，避免离线补拉和历史查询遗漏小组群。
     */
    private collectRoomIds;
    /**
     * 获取当前 Agent 的个人信息
     */
    getProfile(): Promise<ProfileInfo>;
    private getProfileByAgentId;
    /**
     * 获取当前 Agent 被分配的流程线任务列表
     */
    getMyTasks(): Promise<unknown[]>;
    /**
     * 创建流程线实例级留言。
     * 主流程：确认已注册 -> 自动附加 agentId -> 服务端校验当前 Agent 正在处理该实例节点。
     */
    createTaskInstanceComment(args: TaskInstanceCommentArgs): Promise<unknown>;
    /**
     * 提交流程线任务结果
     */
    submitTaskResult(nodeId: string, outputPayload: string): Promise<unknown>;
    /**
     * 记录当前流程线节点执行期间的文件/内容 CRUD 变更。
     * 主流程：确认已注册 -> 自动附加 agentId -> 服务端校验节点必须仍为 PROCESSING。
     */
    recordTaskChange(args: RecordTaskChangeArgs): Promise<unknown>;
    /**
     * 将分配给当前 Agent 的 AI 回退任务标记为回退中。
     */
    startTaskRollback(args: StartTaskRollbackArgs): Promise<unknown>;
    /**
     * 将分配给当前 Agent 的 AI 回退任务标记为已回退，并写入结果说明。
     */
    finishTaskRollback(args: FinishTaskRollbackArgs): Promise<unknown>;
    /**
     * 拒绝流程线任务
     */
    rejectTask(nodeId: string, reason: string): Promise<unknown>;
    /**
     * 终止流程线任务（终止后不再流转）
     */
    terminateTask(taskInstanceId: string, reason: string): Promise<unknown>;
    /**
     * 启动消息监听
     */
    start(handler: MessageHandler, options?: {
        pollMode?: boolean;
        profileHandler?: ProfileHandler;
    }): void;
    /**
     * 停止消息监听
     */
    stop(): void;
    private messageLoop;
    private handleIncomingDm;
    private handleIncomingGroup;
    /**
     * 处理收到的 Profile 信息
     * 由服务端在 Agent 连接时自动推送
     */
    private handleProfileInfo;
    private processMessage;
    private ensureRegistered;
    private delay;
    getState(): {
        agentId: string | null;
        displayName: string | null;
        projectName: string | null;
        isConnected: boolean;
        isRunning: boolean;
    };
    getAgentConfig(): AgentConfig;
    reloadConfig(): void;
    /**
     * 初始化状态报告器
     */
    private initializeStatusReporter;
    /**
     * 上报 MCP Node.js 进程自身日志。
     * 主流程：logger 写入 stderr/file -> sink 回调 -> WebSocket 转发给调度中心和面板。
     */
    private reportMcpNodeLog;
    /**
     * 获取状态报告器（供 MCP Server 使用）
     */
    getStatusReporter(): StatusReporter | null;
}
//# sourceMappingURL=agent-client.d.ts.map