UNPKG

dynamic-interaction

Version:

Dynamic interaction 动态交互mcp,用于cursor、windsurf、trae 等 AI 智能编辑器 Agent 运行时交互使用

104 lines (103 loc) 3.32 kB
"use strict"; /** * WebSocket 传输层 * 提供WebSocket消息的发送和接收工具 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.transport = exports.WebSocketTransport = void 0; const ws_1 = require("ws"); const logger_1 = require("../../logger"); const errors_1 = require("../utils/errors"); class WebSocketTransport { static send(ws, message) { if (ws.readyState !== ws_1.WebSocket.OPEN) { logger_1.logger.warn('尝试向已关闭的WebSocket连接发送消息'); return false; } try { const messageString = typeof message === 'string' ? message : JSON.stringify(message); ws.send(messageString); return true; } catch (error) { logger_1.logger.error('发送WebSocket消息失败:', error); throw new errors_1.WebSocketError('消息发送失败', errors_1.ErrorCodes.CONNECTION_ERROR); } } static sendError(ws, message, code, sessionId) { const errorMessage = { type: 'error', data: { message, code, sessionId, timestamp: Date.now() } }; return this.send(ws, errorMessage); } static sendNotification(ws, notificationId, summary, projectDirectory) { const notification = { type: 'notification', data: { notificationId, summary, projectDirectory, mode: 'NOTIFICATION', createdAt: Date.now() } }; return this.send(ws, notification); } static sendSessionRequest(ws, sessionId, summary, projectDirectory, startTime, timeout) { const sessionRequest = { type: 'session_request', data: { sessionId, summary, projectDirectory, mode: 'INTERACTIVE', startTime, timeoutSeconds: timeout } }; return this.send(ws, sessionRequest); } static sendSystemInfo(ws, sessionId, workspaceDirectory, sessionStartTime, leaseTimeoutSeconds, mode) { const systemInfo = { type: 'system_info', data: { sessionId: sessionId || '无', workspaceDirectory: workspaceDirectory || '未知', sessionStartTime, leaseTimeoutSeconds: leaseTimeoutSeconds || 0, mode, serverVersion: process.env.npm_package_version || '1.0.0', timestamp: Date.now() } }; return this.send(ws, systemInfo); } static sendPong(ws) { const pong = { type: 'pong', data: { timestamp: Date.now() } }; return this.send(ws, pong); } static broadcast(connections, message) { let successCount = 0; for (const ws of connections) { if (this.send(ws, message)) { successCount++; } } return successCount; } } exports.WebSocketTransport = WebSocketTransport; exports.transport = WebSocketTransport;