import{M as e,d as s,r as a,G as t,b as l,K as n,X as i,s as u,aA as o,c as r,w as c,k as d,P as _,o as p,l as m,m as v,q as f,t as h,S as g,D as y,x as b,F as w,y as $,v as k,z as C,aB as x,j,N as I,n as A,av as q,e as M,a8 as D,a0 as z,_ as S}from"./index-gD80NK0s.js";import{w as V,A as B}from"./aiRequest.br0QglYY.js";function N(s){return e.get({url:"/assistant/messages",data:s})}const T=e=>e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),F=e=>e.replace(/\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/g,(e,s,a)=>{const t=(e=>T(e))(a);return`${s}`}),G=e=>{let s=T(e);return s=F(s),s=s.replace(/`([^`]+)`/g,"$1"),s=s.replace(/\*\*([^*]+)\*\*/g,"$1"),s=s.replace(/(^|[^\*])\*([^\*\n]+)\*(?!\*)/g,"$1$2"),s},K=e=>{const s=String(e||"").replace(/\r\n?/g,"\n").trim();if(!s)return"";const a=s.split("\n"),t=[],l=[],n=[],i=[],u=[];let o="",r=!1;const c=()=>{l.length&&(t.push(`
${l.map(e=>G(e)).join("
")}
`),l.length=0)},d=()=>{o&&(t.push(`${o}>`),o="")},_=()=>{i.length&&(t.push(`${i.map(e=>G(e)).join("
")}
`),i.length=0)},p=()=>{n.length&&(t.push(`${T(n.join("\n"))}
`),n.length=0)},m=e=>{const s=e.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(e=>e.trim());return s.filter((e,a)=>a/^\|.*\|$/.test(e)&&m(e).length>=2,f=()=>{if(u.length){if(u.length>=2&&(e=u[1],v(e)&&m(e).every(e=>/^:?-{3,}:?$/.test(e)))){const e=m(u[0]),s=u.slice(2).map(m).filter(e=>e.length>0),a=`${e.map(e=>`| ${G(e)} | `).join("")}
`,l=s.length?`${s.map(e=>`${e.map(e=>`| ${G(e)} | `).join("")}
`).join("")}`:"";t.push(``)}else t.push(`${u.map(e=>G(e)).join("
")}
`);var e;u.length=0}};for(const h of a){const e=h.trim();if(/^```/.test(e)){c(),d(),_(),f(),r&&p(),r=!r;continue}if(r){n.push(h);continue}if(!e){c(),d(),_(),f();continue}const s=e.match(/^(#{1,6})\s+(.*)$/);if(s){c(),d(),_(),f();const e=Math.min(6,s[1].length);t.push(`${G(s[2])}`);continue}const a=e.match(/^>\s?(.*)$/);if(a){c(),d(),f(),i.push(a[1]);continue}if(_(),/^(-{3,}|\*{3,}|_{3,})$/.test(e)){c(),d(),f(),t.push("
");continue}const m=e.match(/^[-*+]\s+(.*)$/);if(m){c(),f(),"ul"!==o&&(d(),o="ul",t.push("")),t.push(`- ${G(m[1])}
`);continue}const g=e.match(/^\d+\.\s+(.*)$/);g?(c(),f(),"ol"!==o&&(d(),o="ol",t.push("")),t.push(`- ${G(g[1])}
`)):v(e)?(c(),d(),_(),u.push(e)):(f(),d(),l.push(e))}return c(),d(),_(),f(),r&&p(),t.join("")},P="sbnews_assistant_client_id",R=S(s({__name:"ai_assistant",setup(s){const S=a(0),T=a(""),F=a(0),G=a(""),R=a(!1),U=a(!1),X=a(""),E=a([]),H=a([]),J=a(0);let L=null;const O=["今天有什么值得关注的赛事?","帮我总结最新世界杯资讯","旧澳六合最近有什么分析线索?","BTC 今天行情怎么样?"],Q=t(()=>G.value.trim().length>0&&!R.value),W=t(()=>{const e=Math.max(0,Number(J.value||0));return`${Math.floor(e/60)}m${e%60}s`});l(async()=>{n(),S.value=0,T.value=Y(),await Z()});const Y=()=>{const e=i(P);if(e)return String(e);const s=`c_${Date.now()}_${Math.random().toString(16).slice(2)}`;return u(P,s),s},Z=async()=>{try{H.value=await(s={client_id:T.value},e.get({url:"/assistant/sessions",data:s}))}catch(a){H.value=[]}var s},ee=()=>{F.value=0,E.value=[],U.value=!1,G.value=""},se=async()=>{U.value=!U.value,U.value&&await Z()},ae=async()=>{var s;const a=G.value.trim();if(!a||R.value)return;const t={id:Date.now(),session_id:F.value,role:"user",content:a},l={id:Date.now()+1,session_id:F.value,role:"assistant",content:"",pending:!0};E.value.push(t,l),G.value="",R.value=!0,ne(),oe();try{const t=await(n={message:a,client_id:T.value,session_id:F.value||void 0},e.post(V({url:"/assistant/chat",data:n}),{...B,retryCount:0}));F.value=(null==(s=t.session)?void 0:s.id)||F.value;const l=t.message||{role:"assistant",content:"我暂时没有生成成功,请稍后再试。",sources:t.sources||[]};E.value.splice(E.value.length-1,1,l),await Z()}catch(i){console.error("[ai_assistant] chat failed:",i);if(await te(a))return;E.value.splice(E.value.length-1,1,{id:Date.now()+2,session_id:F.value,role:"assistant",content:le(i),sources:[]})}finally{ie(),R.value=!1,oe()}var n},te=async e=>{var s;try{await Z();const a=H.value.find(s=>s.last_message===e);if(!(null==a?void 0:a.id))return!1;const t=await N({client_id:T.value,session_id:a.id}),l=t.messages||[],n=l.some(s=>"user"===s.role&&s.content===e),i=l.some(e=>"assistant"===e.role&&!e.pending);return!(!n||!i)&&(F.value=(null==(s=t.session)?void 0:s.id)||a.id,E.value=l,await Z(),oe(),!0)}catch(a){return console.error("[ai_assistant] recover latest reply failed:",a),!1}},le=e=>{const s=(e=>{var s;return"string"==typeof e?e:String((null==e?void 0:e.msg)||(null==e?void 0:e.errMsg)||(null==e?void 0:e.message)||(null==(s=null==e?void 0:e.data)?void 0:s.msg)||"")})(e);return/timeout|超时/i.test(s)?"AI助手响应时间较长,请稍后再试;当前请求已超时。":/abort|cancel/i.test(s)?"AI助手请求已取消,请重新发送问题。":/request:fail|network|网络/i.test(s)?s?`AI助手请求失败,请检查网络后重试。错误详情:${s}`:"AI助手请求失败,请检查网络后重试。":s||"AI助手请求失败,请稍后重试。"},ne=()=>{ie(),J.value=0;const e=Date.now();L=setInterval(()=>{J.value=Math.floor((Date.now()-e)/1e3)},1e3)},ie=()=>{L&&(clearInterval(L),L=null)},ue=()=>{I({title:"清空历史",content:"确定清空所有助手会话?",success:async s=>{var a;if(s.confirm)try{await(a={client_id:T.value},e.post({url:"/assistant/clear",data:a})),H.value=[],ee()}catch(t){j({title:"清空失败",icon:"none"})}}})},oe=()=>{A(()=>{X.value="msg-"+Math.max(E.value.length-1,0)})},re=()=>{D().length>1?z():q({url:"/pages/index/index"})};return o(()=>{ie()}),(e,s)=>{const a=_("u-icon"),t=d,l=f,n=g,i=_("u-parse"),u=x;return p(),r(t,{class:"assistant-page"},{default:c(()=>[m(t,{class:"assistant-nav",style:v({paddingTop:S.value+"px"})},{default:c(()=>[m(t,{class:"assistant-nav__btn",onClick:re},{default:c(()=>[m(a,{name:"arrow-left",size:"34",color:"#1f2937"})]),_:1}),m(l,{class:"assistant-nav__title"},{default:c(()=>[h("世博头条 AI 助手")]),_:1}),m(t,{class:"assistant-nav__actions"},{default:c(()=>[m(t,{class:"assistant-nav__btn",onClick:se},{default:c(()=>[m(a,{name:"clock",size:"32",color:"#1f2937"})]),_:1}),m(t,{class:"assistant-nav__btn",onClick:ee},{default:c(()=>[m(a,{name:"plus",size:"32",color:"#1f2937"})]),_:1})]),_:1})]),_:1},8,["style"]),U.value?(p(),r(t,{key:0,class:"history-panel"},{default:c(()=>[m(t,{class:"history-panel__header"},{default:c(()=>[m(l,null,{default:c(()=>[h("历史会话")]),_:1}),m(l,{class:"history-panel__clear",onClick:ue},{default:c(()=>[h("清空")]),_:1})]),_:1}),m(n,{"scroll-y":"",class:"history-panel__list"},{default:c(()=>[H.value.length?y("",!0):(p(),r(t,{key:0,class:"history-panel__empty"},{default:c(()=>[h("暂无历史会话")]),_:1})),(p(!0),b(w,null,$(H.value,e=>(p(),r(t,{key:e.id,class:"history-item",onClick:s=>(async e=>{var s;try{const a=await N({client_id:T.value,session_id:e.id});F.value=(null==(s=a.session)?void 0:s.id)||e.id,E.value=a.messages||[],U.value=!1,oe()}catch(a){j({title:"会话加载失败",icon:"none"})}})(e)},{default:c(()=>[m(l,{class:"history-item__title"},{default:c(()=>[h(k(e.title||"新的对话"),1)]),_:2},1024),m(l,{class:"history-item__desc"},{default:c(()=>[h(k(e.last_message||e.last_answer),1)]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:1})]),_:1})):y("",!0),m(n,{"scroll-y":"",class:"message-list","scroll-into-view":X.value,"scroll-with-animation":""},{default:c(()=>[m(t,{class:"welcome"},{default:c(()=>[m(t,{class:"welcome__badge"},{default:c(()=>[h("AI")]),_:1}),m(t,{class:"welcome__body"},{default:c(()=>[m(l,{class:"welcome__title"},{default:c(()=>[h("你好,我可以帮你查站内内容")]),_:1}),m(l,{class:"welcome__desc"},{default:c(()=>[h("可以问资讯、赛事、社区帖子、彩票分析和加密行情。")]),_:1})]),_:1})]),_:1}),m(t,{class:"quick-list"},{default:c(()=>[(p(),b(w,null,$(O,e=>m(t,{key:e,class:"quick-list__item",onClick:s=>{return a=e,G.value=a,void ae();var a}},{default:c(()=>[m(l,{class:"quick-list__text"},{default:c(()=>[h(k(e),1)]),_:2},1024)]),_:2},1032,["onClick"])),64))]),_:1}),(p(!0),b(w,null,$(E.value,(e,s)=>(p(),r(t,{id:"msg-"+s,key:e.id||s,class:C(["message-row","user"===e.role?"message-row--user":"message-row--assistant"])},{default:c(()=>["user"!==e.role?(p(),r(t,{key:0,class:"message-row__avatar"},{default:c(()=>[h("AI")]),_:1})):y("",!0),m(t,{class:"message-row__body"},{default:c(()=>[m(t,{class:"message-bubble"},{default:c(()=>[e.pending?(p(),r(t,{key:0,class:"message-bubble__pending"},{default:c(()=>[m(t,{class:"message-bubble__pulse"}),m(l,{class:"message-bubble__loading"},{default:c(()=>[h("正在整理站内资料...")]),_:1}),m(l,{class:"message-bubble__timer"},{default:c(()=>[h("分析用时 "+k(W.value),1)]),_:1})]),_:1})):"user"===e.role?(p(),r(l,{key:1,class:"message-bubble__text"},{default:c(()=>[h(k(e.content),1)]),_:2},1024)):(p(),r(t,{key:2,class:"message-bubble__markdown"},{default:c(()=>{return[m(i,{html:(s=e.content,K(s))},null,8,["html"])];var s}),_:2},1024)),e.sources&&e.sources.length?(p(),r(t,{key:3,class:"source-list"},{default:c(()=>[(p(!0),b(w,null,$(e.sources,e=>(p(),r(t,{key:e.type+e.source_id+e.title,class:"source-item",onClick:s=>(e=>{e.path&&("/pages/crypto/crypto"!==e.path&&"/pages/lottery_analysis/lottery_analysis"!==e.path?M({url:e.path}):q({url:e.path}))})(e)},{default:c(()=>[m(t,{class:"source-item__meta"},{default:c(()=>{return[h(k((s=e.type,{article:"资讯",post:"社区",match:"赛事",lottery:"彩票",crypto:"行情",web_news:"外网资讯"}[s]||"来源")),1)];var s}),_:2},1024),m(l,{class:"source-item__title"},{default:c(()=>[h(k(e.title),1)]),_:2},1024),m(l,{class:"source-item__summary"},{default:c(()=>[h(k(e.summary),1)]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:2},1024)):y("",!0)]),_:2},1024)]),_:2},1024)]),_:2},1032,["id","class"]))),128))]),_:1},8,["scroll-into-view"]),m(t,{class:"input-panel"},{default:c(()=>[m(t,{class:"input-bar"},{default:c(()=>[m(u,{modelValue:G.value,"onUpdate:modelValue":s[0]||(s[0]=e=>G.value=e),class:"input-bar__input",type:"text",maxlength:"500","cursor-spacing":18,disabled:R.value,placeholder:"问问世博头条里的内容","confirm-type":"send",onConfirm:ae},null,8,["modelValue","disabled"]),m(t,{class:C(["input-bar__send",{"input-bar__send--disabled":!Q.value}]),onClick:ae},{default:c(()=>[m(a,{name:"arrow-upward",size:"32",color:"#fff"})]),_:1},8,["class"])]),_:1})]),_:1})]),_:1})}}}),[["__scopeId","data-v-440ffd76"]]);export{R as default};