import{c as $,I as P,a4 as F,r as p,f as k}from"./index-CMOUF6MJ.js";import{a as y}from"./client-DqZAWx8A.js";var H={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M516 673c0 4.4 3.4 8 7.5 8h185c4.1 0 7.5-3.6 7.5-8v-48c0-4.4-3.4-8-7.5-8h-185c-4.1 0-7.5 3.6-7.5 8v48zm-194.9 6.1l192-161c3.8-3.2 3.8-9.1 0-12.3l-192-160.9A7.95 7.95 0 00308 351v62.7c0 2.4 1 4.6 2.9 6.1L420.7 512l-109.8 92.2a8.1 8.1 0 00-2.9 6.1V673c0 6.8 7.9 10.5 13.1 6.1zM880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"code",theme:"outlined"};function I(n){for(var t=1;t{const n=p([]),t=p(null),a=p(!1),i=p(!1),o=p(null),v=p([]),_=k(()=>n.value.find(e=>e.id===t.value)),z=k(()=>{var e;return((e=_.value)==null?void 0:e.messages)??[]});async function N(){try{const e=await y.getConversations();n.value=e}catch(e){console.error("Failed to load conversations:",e)}}function A(e){t.value=e,v.value=[]}function b(){const e={id:h(),title:"新对话",messages:[],created_at:new Date().toISOString(),updated_at:new Date().toISOString()};n.value.unshift(e),t.value=e.id,v.value=[]}async function w(e,r){t.value||b();const s=t.value,c={id:h(),role:"user",content:e,timestamp:new Date().toISOString()};S(s,c);const u={id:h(),role:"assistant",content:"",timestamp:new Date().toISOString(),status:"pending"};S(s,u),a.value=!0;try{const d={message:e,conversation_id:s,sources:r},f=await y.chat(d);g(s,u.id,{content:f.message,matched_skill:f.matched_skill,routing_method:f.routing_method,confidence:f.confidence,task_id:f.task_id,status:f.status});const m=n.value.find(l=>l.id===s);m&&m.messages.length<=2&&(m.title=e.length>20?`${e.substring(0,20)}...`:e)}catch(d){g(s,u.id,{content:`请求失败: ${d instanceof Error?d.message:"未知错误"}`,status:"completed"})}finally{a.value=!1}}function E(e,r){if(t.value||b(),!o.value||o.value.readyState!==WebSocket.OPEN){w(e,r);return}const s=t.value,c={id:h(),role:"user",content:e,timestamp:new Date().toISOString()};S(s,c);const u={id:h(),role:"assistant",content:"",timestamp:new Date().toISOString(),status:"pending"};S(s,u),a.value=!0,v.value=[];const d={type:"chat",message:e,sources:r,conversation_id:s};o.value.send(JSON.stringify(d))}function C(){if(o.value&&o.value.readyState===WebSocket.OPEN)return;const e=y.createWebSocket();e.onopen=()=>{i.value=!0,console.log("WebSocket connected")},e.onmessage=r=>{try{const s=JSON.parse(r.data);console.log("[Chat WS] Received:",s.type,s),x(s)}catch(s){console.error("Failed to parse WebSocket message:",s)}},e.onclose=()=>{i.value=!1,console.log("WebSocket disconnected"),setTimeout(()=>{(!o.value||o.value.readyState===WebSocket.CLOSED)&&C()},3e3)},e.onerror=r=>{console.error("WebSocket error:",r),i.value=!1},o.value=e}function V(){o.value&&(o.value.close(),o.value=null,i.value=!1)}function x(e){var d,f,m;const r=t.value;if(!r)return;const s=n.value.find(l=>l.id===r);if(!s)return;const c=[...s.messages].reverse().find(l=>l.role==="assistant"),u=e.data??e;switch(e.type){case"routing":c&&g(r,c.id,{matched_skill:e.skill,confidence:e.confidence,routing_method:e.method}),v.value.push(`路由至: ${e.skill} (置信度: ${(e.confidence*100).toFixed(1)}%)`);break;case"step":{const l=u,O=l.event_type==="final_answer"?"生成最终回答":l.event_type==="tool_call"?`调用工具: ${((d=l.data)==null?void 0:d.tool_name)||((f=l.data)==null?void 0:f.name)||"#"}`:l.event_type==="thinking"?"思考中...":`步骤 ${l.step||""}: ${l.event_type||""}`;if(v.value.push(O),l.event_type==="final_answer"&&c){const M=((m=l.data)==null?void 0:m.output)||"";M&&g(r,c.id,{content:(c.content||"")+M})}break}case"result":{const l=u.message||u.content||"";if(c){const O=l||c.content||"";g(r,c.id,{content:O,status:"completed"})}a.value=!1,v.value=[];break}case"error":c&&g(r,c.id,{content:`错误: ${u.message||"未知错误"}`,status:"completed"}),a.value=!1,v.value=[];break}}function S(e,r){const s=n.value.find(c=>c.id===e);s&&(s.messages.push(r),s.updated_at=new Date().toISOString())}function g(e,r,s){const c=n.value.find(d=>d.id===e);if(!c)return;const u=c.messages.find(d=>d.id===r);u&&Object.assign(u,s)}return{conversations:n,currentConversationId:t,isLoading:a,isWsConnected:i,streamingSteps:v,currentConversation:_,currentMessages:z,loadConversations:N,selectConversation:A,createConversation:b,sendMessage:w,sendWsMessage:E,connectWebSocket:C,disconnectWebSocket:V}});export{D as C,j as M,T as u};