/** * XG-IM WebSocket 连接管理模块 * * 功能: * - 建立 wss:///ws-notify/websocket?accessToken= 长连接 * - 接收 robotMention / groupMessage 并回调 * - 流式推送:BEGIN → 进度事件 →(可选 RUN_USAGE)→ FINISHED(无占位 ack;正文走 HTTP) * - 指数退避 + 抖动的自动重连机制 * - 主动发送 WebSocket ping 保活,超时自动重连 */ import type { Log } from "./auth.js"; import type { ImStreamRunUsageData } from "./run-usage.js"; import type { WsMessage, XgImConfig } from "./types.js"; export type OnMessageCallback = (msg: WsMessage) => void; /** IM 下发的目录同步映射信令(与聊天消息分流) */ export type OnSyncMappingCallback = (params: Record) => void | Promise; export declare const OPENCLAW_APPLY_SYNC_MAPPING_CMD = "openclawApplySyncMapping"; export interface StartWebSocketHooks { onSyncMapping?: OnSyncMappingCallback; /** 重连次数耗尽且未 stop 时回调(整机不再收 WS 入站) */ onReconnectExhausted?: (info: { maxAttempts: number; lastCloseCode?: number; lastCloseReason?: string; }) => void; } /** {@link ImStreamClient.start} 参数 */ export interface ImStreamStartOpts { groupId?: string; toUserId?: string | null; /** 触发本轮的用户入站消息 id(`robotMention.params.msgId`),用于 BEGIN 的 replyToMsgId。 */ replyToMsgId?: string; } /** {@link ImStreamClient.end} 参数 */ export interface ImStreamEndContext { groupId?: string; replyToMsgId?: string; } /** 进度类 `params.event`(不经占位 ack;助手正文走 HTTP) */ export type ImStreamProgressEventName = "TOOL_PHASE" | "PLAN_UPDATE" | "ITEM_UPDATE" | "RUN_EVENT" | "SUBAGENT_STAT" | "PLAN_STAT"; export interface ImStreamProgressOpts { groupId: string; replyToMsgId: string; event: ImStreamProgressEventName; /** 主展示一行 */ displayText: string; /** 可选:命令/路径等细节或输出摘要,默认最长 200 字 */ summary?: string; } export interface ImStreamSendEventOpts { groupId: string; replyToMsgId: string; event: string; data: Record; } /** * 基于 WebSocket 的流式消息客户端(无占位 ack)。 * * - start(): 发送 BEGIN * - streamProgress(): 发送 TOOL_PHASE / PLAN_UPDATE / RUN_EVENT 等 * - streamUsage(): 发送 RUN_USAGE(一轮可选;在 FINISHED 之前) * - sendEvent(): 发送自定义事件(如 SUBAGENT_STAT) * - end(): 发送 FINISHED */ export interface ImStreamClient { start: (opts: ImStreamStartOpts) => Promise; streamProgress: (opts: ImStreamProgressOpts) => Promise; streamUsage: (data: ImStreamRunUsageData) => Promise; sendEvent: (opts: ImStreamSendEventOpts) => Promise; end: (reason: string, ctx?: ImStreamEndContext) => Promise; } /** * 启动 WebSocket 连接并监听消息。 * * @returns 一个 `stop()` 函数,调用后永久断开连接,不再重连。 */ export declare function startWebSocket(config: XgImConfig, token: string, onMessage: OnMessageCallback, log: Log, hooks?: StartWebSocketHooks): { stop: () => void; streamClient: ImStreamClient; isReconnectExhausted: () => boolean; }; //# sourceMappingURL=connection.d.ts.map