diff --git a/server/socket_handlers.py b/server/socket_handlers.py index e667ff4..12d54fb 100644 --- a/server/socket_handlers.py +++ b/server/socket_handlers.py @@ -234,12 +234,30 @@ def handle_get_terminal_output(data): @socketio.on('send_message') def handle_message(data): - """处理用户消息""" + """ + 【已废弃】WebSocket 聊天入口,已由 REST API (/api/tasks) 替代 + + 保留此处理器用于向后兼容,但建议前端使用 REST API 轮询模式。 + 新的架构优势: + - 支持分布式部署(任务存储可扩展为 Redis) + - 更好的错误恢复(页面刷新后可恢复任务状态) + - 减少 WebSocket 连接压力 + """ username, terminal, workspace = get_terminal_for_sid(request.sid) if not terminal: emit('error', {'message': 'System not initialized'}) return - + + # 返回废弃提示 + emit('error', { + 'message': 'WebSocket 聊天已废弃,请使用 REST API (/api/tasks)', + 'code': 'DEPRECATED', + 'migration_guide': '前端已切换到轮询模式,请刷新页面' + }) + return + + # 以下代码保留用于紧急回退 + # ======================================== message = (data.get('message') or '').strip() images = data.get('images') or [] videos = data.get('videos') or [] @@ -255,11 +273,11 @@ def handle_message(data): if images and videos: emit('error', {'message': '图片和视频请分开发送'}) return - + print(f"[WebSocket] 收到消息: {message}") debug_log(f"\n{'='*80}\n新任务开始: {message}\n{'='*80}") record_user_activity(username) - + requested_conversation_id = data.get('conversation_id') try: conversation_id, created_new = ensure_conversation_loaded(terminal, requested_conversation_id) @@ -287,14 +305,14 @@ def handle_message(data): 'conversation_id': conversation_id, 'title': title }, room=request.sid) - + client_sid = request.sid def send_to_client(event_type, data): """发送消息到客户端""" socketio.emit(event_type, data, room=client_sid) - # 模型活动事件:用于刷新“在线”心跳(回复/工具调用都算活动) + # 模型活动事件:用于刷新"在线"心跳(回复/工具调用都算活动) activity_events = { 'ai_message_start', 'thinking_start', 'thinking_chunk', 'thinking_end', 'text_start', 'text_chunk', 'text_end', diff --git a/static/src/composables/useLegacySocket.ts b/static/src/composables/useLegacySocket.ts index 018497d..6aba52d 100644 --- a/static/src/composables/useLegacySocket.ts +++ b/static/src/composables/useLegacySocket.ts @@ -1,4 +1,21 @@ // @ts-nocheck +/** + * WebSocket 连接管理(遗留代码) + * + * 注意:聊天流式事件(ai_message_start, thinking_*, text_*, tool_*)已废弃 + * 现在使用 REST API 轮询模式(/api/tasks)处理聊天消息 + * + * 保留的功能: + * - 系统事件:connect, disconnect, error + * - 配额事件:quota_update, quota_notice, quota_exceeded + * - 对话事件:conversation_changed, conversation_resolved, conversation_loaded + * - 子智能体事件:sub_agent_waiting + * - Token统计:token_update + * + * 待清理: + * - 流式文本处理相关代码(streamingState, pendingToolEvents等) + * - 聊天事件处理器中的复杂逻辑 + */ import { io as createSocketClient } from 'socket.io-client'; import { renderLatexInRealtime } from './useMarkdownRenderer'; @@ -901,50 +918,13 @@ export async function initializeLegacySocket(ctx: any) { }); - // AI消息开始 + // AI消息开始(已废弃,改用 REST API 轮询) ctx.socket.on('ai_message_start', () => { - // 轮询模式下跳过 WebSocket 事件 - if (ctx.usePollingMode && !ctx.waitingForSubAgent) { - socketLog('AI消息开始 (轮询模式,跳过)'); - return; - } - console.log('[DEBUG] 收到 ai_message_start 事件:', { - currentConversationId: ctx.currentConversationId, - messagesCount: ctx.messages.length, - taskInProgress: ctx.taskInProgress, - streamingMessage: ctx.streamingMessage, - waitingForSubAgent: ctx.waitingForSubAgent - }); - - // 清除等待子智能体的标志(轮询模式下保留,避免中断后续 socket 流) - if (ctx.waitingForSubAgent && !ctx.usePollingMode) { - console.log('[DEBUG] 清除 waitingForSubAgent 标志'); + // 只处理子智能体模式 + if (ctx.waitingForSubAgent) { ctx.waitingForSubAgent = false; ctx.taskInProgress = false; - ctx.stopRequested = false; } - - socketLog('AI消息开始'); - logStreamingDebug('socket:ai_message_start'); - finalizeStreamingText({ force: true }); - flushPendingToolEvents(); - resetStreamingBuffer(); - ctx.monitorResetSpeech(); - ctx.cleanupStaleToolActions(); - ctx.taskInProgress = true; - ctx.chatStartAssistantMessage(); - streamingState.activeMessageIndex = - typeof ctx.currentMessageIndex === 'number' ? ctx.currentMessageIndex : null; - streamingState.activeTextAction = null; - ctx.stopRequested = false; - ctx.streamingMessage = true; // 确保设置为流式状态 - ctx.scrollToBottom(); - console.log('[DEBUG] ai_message_start 处理完成,当前状态:', { - messagesCount: ctx.messages.length, - currentMessageIndex: ctx.currentMessageIndex, - taskInProgress: ctx.taskInProgress, - streamingMessage: ctx.streamingMessage - }); }); // 思考流开始