| 1 |
- import{a8 as e,a9 as s,aa as a,ab as t,ac as o,q as i,P as n}from"./element-plus.DUy1TWHM.js";import r from"./ChatNavbar.NrnO9_xo.js";import l from"./ChatMessages.A2K5UJ-q.js";import c from"./ChatInput.Bt-H69-l.js";import u from"./Sidebar.DZlcdhoo.js";import{A as p,n as m,_ as d}from"./index.B1CvNv-2.js";import{M as v,aD as j,aI as h,aL as f,u as g,I as y,bJ as b,au as w,aU as S}from"./@vue.DbmRtknU.js";import"./lodash-es.DaM9m3L-.js";import"./async-validator.j0i5Y79Y.js";import"./@popperjs.DxtSUbXb.js";import"./@ctrl.BEgk5vdO.js";import"./dayjs.DCWbrgJ0.js";import"./memoize-one.BAtLgO95.js";import"./normalize-wheel-es.TzhA1irr.js";import"./@floating-ui.8vigAAFV.js";import"./pinia.BlfmsheH.js";import"./@vueuse.Dnsd2JKX.js";import"./vue-i18n.DXLOBfKS.js";import"./@intlify.DPMNdUn_.js";import"./nprogress.BTjJXJ-u.js";import"./codemirror.CYSLATvI.js";import"./diff-match-patch.DkK4wJpa.js";import"./vue-web-terminal.D-rog7dz.js";import"./vue.MGxsMDTR.js";/* empty css */import"./axios.Da-QW0H8.js";import"./qs.BQjOrGHM.js";import"./side-channel.4q28KFJj.js";import"./es-errors.DTEWvbA_.js";import"./object-inspect.DvQZIv3_.js";import"./side-channel-list.Do0-XmF5.js";import"./side-channel-map.DNHQ53lO.js";import"./get-intrinsic.Bbe5x-9b.js";import"./es-object-atoms.CyiuHMUS.js";import"./math-intrinsics.pM-JTNwN.js";import"./gopd.BudZp56J.js";import"./es-define-property.F0aoeP8o.js";import"./has-symbols.BcO-SUVM.js";import"./get-proto.Cb_fpw-j.js";import"./dunder-proto.WEH3rgQR.js";import"./call-bind-apply-helpers.DJjIjCF_.js";import"./function-bind.DrnB-baK.js";import"./hasown.BXcyoiLU.js";import"./call-bound.22gFUC2Q.js";import"./side-channel-weakmap.DpSeWE6i.js";import"./vue-router.yxIMtaxH.js";import"./pinia-plugin-persistedstate.COWkwNh5.js";import"./WelcomeScreen.Bq_Q-b_5.js";import"./MessageItem.C_C1uDr4.js";import"./markdown-it.DFKoXly8.js";import"./mdurl.Dwcmq5MZ.js";import"./uc.micro.CRGj88R_.js";import"./entities.zpoy7YfM.js";import"./linkify-it.xinbW_ni.js";import"./punycode.js.BkBFhtvi.js";import"./markdown-it-highlightjs.CgG0E7fP.js";import"./highlight.js.BFeCtowP.js";import"./dompurify.DyZDmeC5.js";const _={class:"app-container"},k=d(v({name:"Chat",inheritAttrs:!1,__name:"index",setup(d){const v=S([]),k=S(!1),C=S(!1),E=S("disconnected"),T=S(""),x=S(null),D=S(!1),I=S(),W=S();let z=null;const B=()=>{if((null==z?void 0:z.readyState)!==WebSocket.OPEN){E.value="connecting",T.value="";try{const e=new URL("/api/v1/ai/chat/ws",void 0),s=p.getAccessToken();s&&e.searchParams.append("token",s),z=new WebSocket(e.toString()),z.onopen=()=>{C.value=!0,E.value="connected",i.success("连接成功")},z.onmessage=e=>P(e.data),z.onclose=()=>{C.value=!1,E.value="disconnected",q()},z.onerror=()=>{C.value=!1,E.value="disconnected",i.error("连接失败,请检查服务器状态"),q()}}catch{E.value="disconnected",T.value="无法创建连接"}}},M=()=>{z&&(z.close(1e3,"用户主动断开"),z=null),C.value=!1,E.value="disconnected",q()},N=()=>{C.value?(M(),i.info("已断开连接")):B()},P=e=>{var s;const a=v.value[v.value.length-1],t=e||"";"assistant"===(null==a?void 0:a.type)&&a.loading?a.content+=t:A("assistant",t),null==(s=I.value)||s.scrollToBottom()},A=(e,s,a)=>{v.value.push({id:J(),type:e,content:s,timestamp:Date.now(),collapsed:s.length>200,files:a})},q=()=>{v.value.forEach(e=>{"assistant"===e.type&&e.loading&&(e.loading=!1,e.collapsed=e.content.length>200)})},J=()=>Date.now().toString(36)+Math.random().toString(36).slice(2),L=async(e,s)=>{var a;if((e||s)&&C.value&&!k.value){if(q(),!x.value){if(!(await O(e)))return}A("user",e,s),v.value.push({id:J(),type:"assistant",content:"",timestamp:Date.now(),loading:!0}),k.value=!0,null==(a=I.value)||a.scrollToBottom();try{if((null==z?void 0:z.readyState)!==WebSocket.OPEN)throw new Error("WebSocket 连接未建立");z.send(JSON.stringify({message:e,session_id:x.value,files:null==s?void 0:s.map(e=>({name:e.name,type:e.type,size:e.size}))}))}catch{v.value.pop(),T.value="发送消息失败,请检查连接状态",i.error("发送失败")}finally{k.value=!1}}},O=async e=>{var s,a,t,o;try{const i=e.slice(0,20)+(e.length>20?"...":""),n=await m.createSession({title:i});if(0===(null==(s=n.data)?void 0:s.code)||(null==(a=n.data)?void 0:a.success))return x.value=(null==(t=n.data.data)?void 0:t.id)??null,null==(o=W.value)||o.loadSessions(),!0;throw new Error("创建会话失败")}catch{return i.error("创建会话失败,请重试"),!1}},R=async e=>{var s;x.value=e.id,v.value=[];try{const a=await m.getSessionDetail(e.id);if(0!==(null==(s=a.data)?void 0:s.code))return void i.error("获取会话详情失败");const t=a.data.data||{};(t.runs||[]).forEach(e=>{(e.messages||[]).forEach(e=>{"user"!==e.role&&"assistant"!==e.role||A(e.role,e.content)})}),i.success(`已切换到会话:${e.title}`)}catch{i.error("获取会话详情失败")}},U=()=>{x.value=null,v.value=[],i.success("已开启新对话")},F=async()=>{try{await n.confirm("确定要清空当前对话吗?此操作不可恢复。","确认清空",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}),v.value=[],i.success("对话已清空")}catch{i.info("已取消清空对话")}},G=()=>{D.value=!D.value};return j(B),h(M),(i,n)=>{const p=e,m=a,d=t,j=o,h=s;return f(),g("div",_,[y(h,{class:"main-chat"},{default:b(()=>[y(p,{class:w(["sidebar-container",{collapsed:D.value}])},{default:b(()=>[y(u,{ref_key:"sidebarRef",ref:W,"current-session-id":x.value,"is-collapsed":D.value,onSelectSession:R,onNewSession:U},null,8,["current-session-id","is-collapsed"])]),_:1},8,["class"]),y(h,{class:"chat-container"},{default:b(()=>[y(m,{class:"chat-header"},{default:b(()=>[y(r,{"connection-status":E.value,"is-connected":C.value,"message-count":v.value.length,"is-sidebar-collapsed":D.value,onClearChat:F,onToggleConnection:N,onToggleSidebar:G},null,8,["connection-status","is-connected","message-count","is-sidebar-collapsed"])]),_:1}),y(d,{class:"chat-main"},{default:b(()=>[y(l,{ref_key:"chatMessagesRef",ref:I,messages:v.value,error:T.value,onPromptClick:L,onErrorClose:n[0]||(n[0]=e=>T.value="")},null,8,["messages","error"])]),_:1}),y(j,{class:"chat-footer"},{default:b(()=>[y(c,{disabled:!C.value,sending:k.value,"is-connected":C.value,onSend:L},null,8,["disabled","sending","is-connected"])]),_:1})]),_:1})]),_:1})])}}}),[["__scopeId","data-v-7aa4ad15"]]);export{k as default};
|