(content: string)
| 85 | |
| 86 | // 发送消息 |
| 87 | const sendMessage = async (content: string) => { |
| 88 | console.log("📤 sendMessage called with:", content); |
| 89 | console.log("📊 isDemoMode:", isDemoMode); |
| 90 | console.log("📊 wsConnected:", wsConnected.value); |
| 91 | console.log("📊 ws instance:", getInstance()); |
| 92 | |
| 93 | if (!content.trim()) return; |
| 94 | |
| 95 | // 添加用户消息 |
| 96 | const userMessage: TextMessage = { |
| 97 | id: generateId("msg"), |
| 98 | type: "text", |
| 99 | role: "user", |
| 100 | content: { text: content }, |
| 101 | createdAt: Date.now(), |
| 102 | status: "pending", |
| 103 | }; |
| 104 | chatStore.messages.push(userMessage); |
| 105 | console.log("✅ User message added to messages array"); |
| 106 | |
| 107 | // 创建 AI 响应占位(使用 reactive 确保响应式) |
| 108 | const assistantMessage: TextMessage = reactive({ |
| 109 | id: generateId("msg"), |
| 110 | type: "text", |
| 111 | role: "assistant", |
| 112 | content: { text: "" }, |
| 113 | createdAt: Date.now(), |
| 114 | }) as TextMessage; |
| 115 | chatStore.messages.push(assistantMessage); |
| 116 | chatStore.setActiveMessage(assistantMessage.id); |
| 117 | console.log("✅ Assistant message placeholder added"); |
| 118 | |
| 119 | chatStore.isTyping = true; |
| 120 | agent.value.status = "thinking"; |
| 121 | userMessage.status = "sent"; |
| 122 | currentInput.value = ""; |
| 123 | |
| 124 | try { |
| 125 | if (isDemoMode) { |
| 126 | await new Promise((resolve) => setTimeout(resolve, config.demoDelay ?? 800)); |
| 127 | assistantMessage.content.text = pickDemoResponse(content); |
| 128 | assistantMessage.status = "sent"; |
| 129 | chatStore.isTyping = false; |
| 130 | agent.value.status = "idle"; |
| 131 | } else { |
| 132 | const ws = getInstance(); |
| 133 | console.log("🔍 Checking WebSocket availability:", { |
| 134 | "ws exists": !!ws, |
| 135 | isConnected: wsConnected.value, |
| 136 | "ws type": ws?.constructor?.name, |
| 137 | }); |
| 138 | |
| 139 | // 使用 WebSocket 进行流式对话 |
| 140 | if (ws && wsConnected.value) { |
| 141 | console.log("✅ Using WebSocket for chat"); |
| 142 | |
| 143 | // 监听 WebSocket 消息 |
| 144 | const unsubscribe = ws.onMessage((message: any) => { |
no test coverage detected