var We=Object.defineProperty;var K=(e,t)=>()=>(e&&(t=e(e=0)),t);var Re=(e,t)=>{for(var n in t)We(e,n,{get:t[n],enumerable:!0})};function ce(){return{modalOverlay:document.getElementById("modalOverlay"),modalTitle:document.getElementById("modalTitle"),modalMessage:document.getElementById("modalMessage"),modalFooter:document.getElementById("modalFooter"),modalClose:document.getElementById("modalClose"),modalCancel:document.getElementById("modalCancel"),modalConfirm:document.getElementById("modalConfirm")}}function Ie(e={}){return new Promise(t=>{let n=ce();if(!n.modalOverlay||!n.modalTitle||!n.modalMessage||!n.modalFooter||!n.modalConfirm||!n.modalCancel){console.error("\u6A21\u6001\u6846\u5143\u7D20\u672A\u627E\u5230"),t(!1);return}X=t;let{title:s="\u63D0\u793A",message:i="",type:o="alert",confirmText:r="\u786E\u5B9A",cancelText:a="\u53D6\u6D88"}=e;n.modalTitle.textContent=s,n.modalMessage.textContent=i,n.modalConfirm.textContent=r,n.modalCancel.textContent=a,o==="alert"?(n.modalFooter.classList.add("single-button"),n.modalCancel.style.display="none"):(n.modalFooter.classList.remove("single-button"),n.modalCancel.style.display="block"),n.modalOverlay.classList.add("show"),setTimeout(()=>n.modalConfirm.focus(),100)})}function U(e=!1){let t=ce();t.modalOverlay&&t.modalOverlay.classList.remove("show"),X&&(X(e),X=null)}function p(e,t="\u63D0\u793A"){return Ie({title:t,message:e,type:"alert"})}function Y(e,t="\u786E\u8BA4"){return Ie({title:t,message:e,type:"confirm"})}function Le(){let e=ce();if(!e.modalOverlay){console.warn("\u6A21\u6001\u6846\u5143\u7D20\u672A\u627E\u5230\uFF0C\u65E0\u6CD5\u521D\u59CB\u5316\u4E8B\u4EF6");return}e.modalClose&&e.modalClose.addEventListener("click",()=>U(!1)),e.modalCancel&&e.modalCancel.addEventListener("click",()=>U(!1)),e.modalConfirm&&e.modalConfirm.addEventListener("click",()=>U(!0)),e.modalOverlay.addEventListener("click",t=>{t.target===e.modalOverlay&&U(!1)}),document.addEventListener("keydown",t=>{t.key==="Escape"&&e.modalOverlay.classList.contains("show")&&U(!1)})}var X,W=K(()=>{X=null});function L(){return document.getElementById("currentSessionId")?.value||""}function I(){return{chatArea:document.getElementById("chatArea"),messageInput:document.getElementById("messageInput"),sendBtn:document.getElementById("sendBtn"),statusEl:document.getElementById("status"),modelSelect:document.getElementById("modelSelect"),sidebarToggle:document.getElementById("sidebarToggle")}}function N(e){e&&setTimeout(()=>{e.scrollTop=e.scrollHeight},100)}var T=K(()=>{});import R from"https://dpangzi.com/library/highlight.js/es/highlight.js";async function Fe(){if(!le)try{await de(P),le=!0}catch(e){console.warn(`\u65E0\u6CD5\u52A0\u8F7D\u56DE\u9000\u8BED\u8A00 ${P}:`,e),le=!0}}function Ve(e){return ze[e.toLowerCase()]||e}function Ge(e){let t=Array.from(e.classList),n=null;for(let s of t){if(s.startsWith("language-")){n=s.replace("language-","");break}if(s.startsWith("lang-")){n=s.replace("lang-","");break}}if(!n){let s=e.closest("pre");if(s){let i=Array.from(s.classList);for(let o of i){if(o.startsWith("language-")){n=o.replace("language-","");break}if(o.startsWith("lang-")){n=o.replace("lang-","");break}}}}return n?Ve(n):null}async function de(e){if(b.has(e))return;if(O.has(e))return O.get(e);let t=(async()=>{try{let n;try{n=await import(`https://dpangzi.com/library/highlight.js/es/languages/${e}.min.js`)}catch{n=await import(`https://dpangzi.com/library/highlight.js/es/languages/${e}.js`)}let s=n.default||n;if(typeof s=="function")R.registerLanguage(e,s);else{console.warn(`\u8BED\u8A00\u6A21\u5757 ${e} \u5BFC\u51FA\u683C\u5F0F\u4E0D\u6B63\u786E`);return}b.add(e),O.delete(e)}catch(n){console.warn(`\u65E0\u6CD5\u52A0\u8F7D\u8BED\u8A00\u6A21\u5757: ${e}`,n),O.delete(e)}})();return O.set(e,t),t}function Se(e){try{let t=xe.filter(n=>b.has(n));if(t.length>0){let n=R.highlightAuto(e.textContent,t);if(n&&n.language&&b.has(n.language)){e.innerHTML=n.value,e.classList.add("hljs");return}}b.has(P)?R.highlightElement(e,{language:P}):e.classList.add("hljs")}catch(t){e.classList.add("hljs"),console.warn("\u4EE3\u7801\u81EA\u52A8\u68C0\u6D4B\u5931\u8D25\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u6837\u5F0F:",t)}}async function x(e){if(!e)return;await Fe();let t=e.querySelectorAll("pre code"),n=[],s=new Map;t.forEach(i=>{let o=Ge(i);o&&(s.set(i,o),n.push(de(o)))});try{await Promise.allSettled(n)}catch(i){console.warn("\u90E8\u5206\u8BED\u8A00\u52A0\u8F7D\u5931\u8D25:",i)}xe.map(i=>!b.has(i)&&!O.has(i)?de(i).catch(()=>{}):Promise.resolve()),t.forEach(i=>{i.classList.contains("hljs")&&(i.classList.remove("hljs"),i.removeAttribute("data-highlighted"));try{let o=s.get(i);if(o)R.highlightElement(i,{language:o});else if(b.has(P))try{R.highlightElement(i,{language:P})}catch{Se(i)}else Se(i)}catch(o){console.warn("\u4EE3\u7801\u9AD8\u4EAE\u5931\u8D25:",o);try{i.classList.add("hljs")}catch{}}})}var b,O,ze,P,xe,le,z=K(()=>{b=new Set,O=new Map,ze={cs:"csharp",js:"javascript",ts:"typescript",py:"python",rb:"ruby",sh:"bash",yml:"yaml",md:"markdown",rs:"rust",kt:"kotlin",pl:"perl",ps1:"powershell",ps:"powershell",vb:"vbnet",fs:"fsharp",clj:"clojure",hs:"haskell",erl:"erlang",ex:"elixir",exs:"elixir",dockerfile:"dockerfile",makefile:"makefile",ini:"ini",patch:"diff"},P="plaintext",xe=["javascript","typescript","python","java","csharp","cpp","c","html","css","json","xml","sql","bash","shell","plaintext"],le=!1});var ue={};Re(ue,{createNewSession:()=>F,deleteSession:()=>q,getPendingSessionElement:()=>me,refreshSessionList:()=>$,renderSessionList:()=>Ne,switchSession:()=>B,toggleSidebar:()=>Q,updateSessionTitle:()=>Ke});function me(){return A}async function F(e,t,n,s){let i=document.querySelector(".session-item.pending");if(i){await p("\u5DF2\u6709\u5F85\u521B\u5EFA\u7684\u65B0\u4F1A\u8BDD\uFF0C\u8BF7\u5148\u53D1\u9001\u6D88\u606F\u5B8C\u6210\u521B\u5EFA","\u63D0\u793A"),document.querySelectorAll(".session-item").forEach(o=>o.classList.remove("active")),i.classList.add("active");return}try{try{await s("")}catch(c){console.warn("\u5207\u6362\u7A7A\u4F1A\u8BDD\u65F6\u51FA\u9519\uFF0C\u4F46\u7EE7\u7EED\u521B\u5EFA\u65B0\u4F1A\u8BDD:",c)}document.querySelectorAll(".session-item").forEach(c=>c.classList.remove("active"));let o="temp_"+Date.now(),r=document.createElement("div");r.className="session-item pending active",r.dataset.sessionId=o,r.dataset.isNewSession="true",r.innerHTML=`
<div class="session-info">
<div class="session-name">\u65B0\u5EFA\u4F1A\u8BDD...</div>
<div class="session-meta">
<span class="session-time">${new Date().toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}</span>
<span class="session-count">0 \u6761</span>
</div>
</div>
`,r.querySelector(".session-info").addEventListener("click",async()=>{if(r.dataset.isNewSession==="true"&&(L()||"")!=="")try{await s(""),document.querySelectorAll(".session-item").forEach(m=>m.classList.remove("active")),r.classList.add("active")}catch(m){console.warn("\u5207\u6362\u56DE\u65B0\u4F1A\u8BDD\u65F6\u51FA\u9519:",m)}}),e&&e.insertBefore(r,e.firstChild),A=r;let a=document.getElementById("currentSessionId");a&&(a.value=""),window.innerWidth<=600&&(t.classList.remove("show"),n&&n.classList.remove("show"))}catch(o){console.error("\u274C \u521B\u5EFA\u4F1A\u8BDD\u5F02\u5E38:",o),await p("\u521B\u5EFA\u65B0\u4F1A\u8BDD\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5")}}async function q(e,t,n){if(await Y("\u786E\u5B9A\u8981\u5220\u9664\u8FD9\u4E2A\u4F1A\u8BDD\u5417\uFF1F"))try{let i=await(await fetch(`/AiChat/DeleteSession?sessionId=${encodeURIComponent(e)}`,{method:"DELETE"})).json();if(i.success){let o=e===L();if(n&&typeof n=="function"&&(n.length===0?await n():await n()),o){let r=document.querySelector(".session-item");if(r&&r.dataset.sessionId){let a=r.dataset.sessionId;t&&typeof t=="function"&&await t(a)}else await F(document.getElementById("sessionList"),document.getElementById("sessionSidebar"),document.getElementById("sidebarOverlay"),t)}}else await p(i.msg||i.message||"\u5220\u9664\u5931\u8D25")}catch(s){console.error("\u5220\u9664\u4F1A\u8BDD\u5931\u8D25:",s),await p("\u5220\u9664\u5931\u8D25: "+(s.message||s))}}async function B(e,t,n,s,i,o,r){if(t||(t=document.getElementById("chatMain")),!n||typeof n!="function"){console.error("switchSession: updateDomReferences \u53C2\u6570\u65E0\u6548"),await p("\u5207\u6362\u4F1A\u8BDD\u5931\u8D25\uFF1A\u53C2\u6570\u9519\u8BEF");return}if(!s||typeof s!="function"){console.error("switchSession: bindChatEvents \u53C2\u6570\u65E0\u6548"),await p("\u5207\u6362\u4F1A\u8BDD\u5931\u8D25\uFF1A\u53C2\u6570\u9519\u8BEF");return}let a=L(),c=e||"";if(c===(a||"")){if(console.log("\u26A0\uFE0F \u5DF2\u7ECF\u5728\u5F53\u524D\u4F1A\u8BDD\u4E2D\uFF0C\u65E0\u9700\u5207\u6362"),window.innerWidth<=600){let l=document.getElementById("sessionSidebar"),d=document.getElementById("sidebarOverlay");l&&l.classList.remove("show"),d&&d.classList.remove("show")}return}console.log("\u{1F504} \u5207\u6362\u4F1A\u8BDD:",c||"(\u65B0\u4F1A\u8BDD)");try{let l=await fetch(`/AiChat/ChatMessages?sessionId=${encodeURIComponent(c)}`);if(!l.ok){let u=await l.text().catch(()=>"");if(console.error("\u5207\u6362\u4F1A\u8BDD\u8BF7\u6C42\u5931\u8D25:",l.status,u),c===""){console.warn("\u65B0\u4F1A\u8BDD\u8BF7\u6C42\u5931\u8D25\uFF0C\u4F46\u5141\u8BB8\u7EE7\u7EED\u521B\u5EFA\u4E34\u65F6\u4F1A\u8BDD");return}else{await p(`\u5207\u6362\u4F1A\u8BDD\u5931\u8D25: ${l.status} ${l.statusText}`);return}}let d=await l.text();if(t){t.innerHTML=d;let u=n&&typeof n=="function"?n():null;if(!u){console.error("\u65E0\u6CD5\u83B7\u53D6 DOM \u5F15\u7528"),await p("\u5207\u6362\u4F1A\u8BDD\u5931\u8D25\uFF1A\u65E0\u6CD5\u83B7\u53D6 DOM \u5143\u7D20");return}if(s&&typeof s=="function"&&s(u),u.statusEl&&i&&typeof i=="function"){let f=typeof o=="function"?o():o,y=()=>{r&&typeof r=="function"&&r(u)};i(f,u.statusEl,y)}else r&&typeof r=="function"&&r(u);u.chatArea&&(x(u.chatArea).catch(f=>{console.warn("\u4EE3\u7801\u9AD8\u4EAE\u5931\u8D25:",f)}),N(u.chatArea))}c===""?document.querySelectorAll(".session-item").forEach(u=>{u.classList.remove("active")}):document.querySelectorAll(".session-item").forEach(u=>{u.classList.toggle("active",u.dataset.sessionId===c)})}catch(l){console.error("\u5207\u6362\u4F1A\u8BDD\u5931\u8D25:",l),c===""?console.warn("\u65B0\u4F1A\u8BDD\u5207\u6362\u5931\u8D25\uFF0C\u4F46\u5141\u8BB8\u7EE7\u7EED\u521B\u5EFA\u4E34\u65F6\u4F1A\u8BDD:",l):await p(`\u5207\u6362\u4F1A\u8BDD\u5931\u8D25: ${l.message||l}`)}if(window.innerWidth<=600){let l=document.getElementById("sessionSidebar"),d=document.getElementById("sidebarOverlay");l&&l.classList.remove("show"),d&&d.classList.remove("show")}}async function $(e,t,n,s,i,o){try{let a=await(await fetch("/AiChat/Sessions")).json();a.success&&a.data&&Ne(a.data,e,t,n,s,i,o)}catch(r){console.error("\u5237\u65B0\u4F1A\u8BDD\u5217\u8868\u5931\u8D25:",r)}}function Me(e,t,n,s,i,o,r){let a=e.querySelector(".session-name"),c=e.querySelector(".session-time"),m=e.querySelector(".session-count");a&&(a.textContent=n,a.title=n,a.style.fontStyle="normal"),c&&s&&(c.textContent=new Date(s).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})),m&&i!==void 0&&(m.textContent=`${i} \u6761`),e.classList.remove("pending");let l=e.querySelector(".session-info");if(l){let d=l.cloneNode(!0);l.parentNode.replaceChild(d,l),d.addEventListener("click",async()=>{o&&typeof o=="function"&&await o(t)})}if(!e.querySelector(".btn-delete-session")){let d=document.createElement("button");d.className="btn-delete-session",d.textContent="\u{1F5D1}\uFE0F",d.title="\u5220\u9664\u4F1A\u8BDD",d.onclick=async u=>{u.stopPropagation(),await q(t,o,r)},e.appendChild(d)}}async function Ke(e,t,n,s){if(!e||!A||A.dataset.sessionId!==e)return!1;if(s)return console.log("\u2705 \u4F7F\u7528 SignalR \u63D0\u4F9B\u7684\u4F1A\u8BDD\u540D\u79F0\u66F4\u65B0:",e,s),Me(A,e,s,new Date,2,t,n),!0;try{let o=await(await fetch("/AiChat/Sessions")).json();if(o.success&&o.data){let r=o.data.find(a=>a.sessionId===e);if(r)return console.log("\u2705 \u627E\u5230\u5339\u914D\u7684\u4F1A\u8BDD\uFF0C\u66F4\u65B0\u6807\u9898:",e,r.sessionName),Me(A,e,r.sessionName||"\u672A\u547D\u540D\u4F1A\u8BDD",r.lastUpdateTime,r.messageCount,t,n),!0;console.log("\u26A0\uFE0F \u672A\u627E\u5230\u5339\u914D\u7684\u4F1A\u8BDD\uFF0CSessionId:",e)}}catch(i){console.error("\u66F4\u65B0\u4F1A\u8BDD\u6807\u9898\u5931\u8D25:",i)}return!1}function Ne(e,t,n,s,i,o,r){let a=document.getElementById("sessionList");if(!a)return;let c=A;if(a.innerHTML="",c){if(c.dataset.sessionId&&!c.dataset.sessionId.startsWith("temp_")){let m=c.dataset.sessionId,l=e.find(d=>d.sessionId===m);if(l){console.log("\u2705 \u627E\u5230\u5339\u914D\u7684\u4F1A\u8BDD\uFF0C\u66F4\u65B0\u6807\u9898:",m,l.sessionName);let d=c.querySelector(".session-name"),u=c.querySelector(".session-time"),f=c.querySelector(".session-count");if(d){let g=l.sessionName||"\u672A\u547D\u540D\u4F1A\u8BDD";d.textContent=g,d.title=g,d.style.fontStyle="normal"}if(u){let g=l.lastUpdateTime;g&&(u.textContent=new Date(g).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}))}if(f){let g=l.messageCount!==void 0?l.messageCount:0;f.textContent=`${g} \u6761`}c.classList.remove("pending");let y=c.querySelector(".session-info");if(y){let g=y.cloneNode(!0);y.parentNode.replaceChild(g,y),g.addEventListener("click",async()=>{t&&typeof t=="function"&&await t(m)});let j=c.querySelector(".btn-delete-session");if(j){let _=j.cloneNode(!0);j.parentNode.replaceChild(_,j),_.onclick=async oe=>{oe.stopPropagation(),await q(m,t,(se,ie,re,ae,De,Ue)=>{$(se,ie,re,ae,De,Ue)})}}}if(!c.querySelector(".btn-delete-session")){let g=document.createElement("button");g.className="btn-delete-session",g.textContent="\u{1F5D1}\uFE0F",g.title="\u5220\u9664\u4F1A\u8BDD",g.onclick=async j=>{j.stopPropagation(),await q(m,t,(_,oe,se,ie,re,ae)=>{$(_,oe,se,ie,re,ae)})},c.appendChild(g)}e=e.filter(g=>g.sessionId!==m)}else console.log("\u26A0\uFE0F \u672A\u627E\u5230\u5339\u914D\u7684\u4F1A\u8BDD\uFF0CSessionId:",m,"\u670D\u52A1\u5668\u8FD4\u56DE\u7684\u4F1A\u8BDD\u5217\u8868:",e.map(d=>d.sessionId))}a.appendChild(c)}e.forEach(m=>{let l=document.createElement("div");l.className=`session-item ${m.sessionId===L()?"active":""}`,l.dataset.sessionId=m.sessionId,l.innerHTML=`
<div class="session-info">
<div class="session-name" title="${m.sessionName}">${m.sessionName}</div>
<div class="session-meta">
<span class="session-time">${new Date(m.lastUpdateTime).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}</span>
<span class="session-count">${m.messageCount} \u6761</span>
</div>
</div>
<button class="btn-delete-session" title="\u5220\u9664\u4F1A\u8BDD">\u{1F5D1}\uFE0F</button>
`,l.querySelector(".session-info").onclick=async()=>{t&&typeof t=="function"&&await t(m.sessionId)},l.querySelector(".btn-delete-session").onclick=async d=>{d.stopPropagation(),await q(m.sessionId,t,()=>{$(t,n,s,i,o,r)})},a.appendChild(l)})}function Q(e=!1){let t=document.getElementById("sessionSidebar"),n=document.getElementById("sidebarOverlay"),s=window.innerWidth<=600;if(e){s?(t&&t.classList.remove("show"),n&&n.classList.remove("show")):t&&t.classList.add("collapsed");return}s?(t&&t.classList.toggle("show"),n&&n.classList.toggle("show")):t&&(t.classList.toggle("collapsed"),t.classList.toggle("show"))}var A,Z=K(()=>{T();W();z();T();A=null});function Ee(){function e(){let t=window.innerHeight*.01;document.documentElement.style.setProperty("--vh",`${t}px`)}if(e(),window.addEventListener("resize",e),window.addEventListener("orientationchange",()=>{setTimeout(e,100)}),/iPhone|iPad|iPod/.test(navigator.userAgent)){let t=0;window.addEventListener("scroll",()=>{let n=window.pageYOffset||document.documentElement.scrollTop;n!==t&&(e(),t=n)},{passive:!0})}}function Ce(){window.innerWidth>600||(document.addEventListener("focusin",e=>{(e.target.tagName==="TEXTAREA"||e.target.tagName==="INPUT")&&setTimeout(()=>{e.target.scrollIntoView({behavior:"smooth",block:"center"})},300)}),document.addEventListener("focusout",e=>{(e.target.tagName==="TEXTAREA"||e.target.tagName==="INPUT")&&setTimeout(()=>{let t=document.getElementById("chatArea");t&&t.scrollTop},100)}))}W();T();z();var Be={hubUrl:"/robotChat"};import{marked as _e}from"https://dpangzi.com/library/marked/marked.esm.js";function J(e){try{return DOMPurify.sanitize(_e.parse(e))}catch{return DOMPurify.sanitize(e)}}z();T();function k(e,t,n){if(!e)return null;let s=document.createElement("div");s.className=`message ${t}`;let i=document.createElement("div");i.className="message-content markdown-body",i.innerHTML=J(n||"");let o=document.createElement("div");o.className="message-actions";let r=document.createElement("button");r.className="btn-copy-markdown",r.title="\u590D\u5236\u539F\u59CB\u5185\u5BB9",r.innerHTML='<svg viewBox="0 0 24 24" width="14" height="14" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>';let a=document.createElement("div");a.className="raw-markdown",a.style.display="none",a.textContent=n||"";let c=document.createElement("button");c.className="btn-delete-message",c.title="\u5220\u9664\u6D88\u606F",c.innerHTML='<svg viewBox="0 0 24 24" width="14" height="14" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path></svg>',o.appendChild(r),o.appendChild(a),o.appendChild(c),i.appendChild(o);let m=document.createElement("div");m.className="timestamp",m.textContent=new Date().toLocaleString(),i.appendChild(m);let l=document.createElement("div");return l.className="avatar",l.textContent=t==="user"?"\u{1F464}":t==="assistant"?"\u{1F916}":"\u26A0",s.appendChild(i),s.appendChild(l),e.appendChild(s),x(i).catch(d=>{console.warn("\u4EE3\u7801\u9AD8\u4EAE\u5931\u8D25:",d)}),N(e),i}z();T();var E=null,Te=!1,V=!1,w=null,H="",C=null;function D(){return E}function S(){return Te}function be(){return V}function fe(e){V=e}function ge(e){w=e}function ke(e){H=e}function Ae(){return C}function pe(e){C=e}function h(e,t,n){Te=e,t&&(t.textContent=e?"\u5DF2\u8FDE\u63A5":"\u672A\u8FDE\u63A5",t.className=`status ${e?"connected":"disconnected"}`),n&&n()}async function ee(e,t,n,s,i){E=new signalR.HubConnectionBuilder().withUrl(Be.hubUrl).withAutomaticReconnect([0,0,1e3,3e3,5e3,1e4]).build(),E.on("NewSessionCreated",o=>{console.log("\u2705 \u65B0\u4F1A\u8BDD\u5DF2\u521B\u5EFA\uFF0CSessionId:",o);let r=document.getElementById("currentSessionId");r&&(r.value=o)}),E.on("SessionNameGenerated",async o=>{let r,a;typeof o=="object"&&o!==null?(r=o.sessionId,a=o.sessionName):r=o,console.log("\u2705 \u4F1A\u8BDD\u540D\u79F0\u5DF2\u751F\u6210\uFF0CSessionId:",r,"SessionName:",a);let{updateSessionTitle:c}=await Promise.resolve().then(()=>(Z(),ue));!await c(r,null,s,a)&&s&&s()}),E.on("StreamDelta",o=>{if(w){let a=e?e.scrollHeight-e.scrollTop-e.clientHeight<100:!0;H+=o;let c=w.querySelector(".message-actions"),m=w.querySelector(".timestamp"),l=C;w.innerHTML=J(H);let d=document.createElement("div");if(d.className="message-actions",l&&d.appendChild(l),c){let f=c.querySelector(".btn-copy-markdown");if(f)d.appendChild(f.cloneNode(!0));else{let y=document.createElement("button");y.className="btn-copy-markdown",y.title="\u590D\u5236\u539F\u59CB\u5185\u5BB9",y.innerHTML='<svg viewBox="0 0 24 24" width="14" height="14" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>',d.appendChild(y)}}else{let f=document.createElement("button");f.className="btn-copy-markdown",f.title="\u590D\u5236\u539F\u59CB\u5185\u5BB9",f.innerHTML='<svg viewBox="0 0 24 24" width="14" height="14" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>',d.appendChild(f)}let u=document.createElement("div");if(u.className="raw-markdown",u.style.display="none",u.textContent=H,d.appendChild(u),c){let f=c.querySelector(".btn-delete-message");f&&d.appendChild(f.cloneNode(!0))}if(w.appendChild(d),m)w.appendChild(m);else{let f=document.createElement("div");f.className="timestamp",f.textContent=new Date().toLocaleString(),w.appendChild(f)}x(w).catch(f=>{console.warn("\u4EE3\u7801\u9AD8\u4EAE\u5931\u8D25:",f)}),a&&N(e)}}),E.on("StreamCompleted",()=>{V=!1,C&&(C.remove(),C=null),w&&x(w).catch(o=>{console.warn("\u4EE3\u7801\u9AD8\u4EAE\u5931\u8D25:",o)}),w=null,H="",n&&n(),s&&s()}),E.on("StreamCancelled",()=>{V=!1,C&&(C.remove(),C=null),w=null,H="",n&&n(),k(e,"assistant","\u5DF2\u53D6\u6D88\u751F\u6210")}),E.on("SystemError",o=>{V=!1,C&&(C.remove(),C=null),w=null,H="",k(e,"error",o&&o.content||"\u53D1\u751F\u9519\u8BEF"),n&&n()}),E.onreconnecting(()=>h(!1,t,n)),E.onreconnected(()=>h(!0,t,n)),E.onclose(()=>{h(!1,t,n),setTimeout(()=>ee(e,t,n,s,i),5e3)});try{await E.start(),h(!0,t,n),console.log("\u{1F4E1} SignalR \u8FDE\u63A5\u5DF2\u5EFA\u7ACB")}catch(o){console.error("\u274C \u8FDE\u63A5\u5931\u8D25:",o),h(!1,t,n),setTimeout(()=>ee(e,t,n,s,i),5e3)}}T();async function he(e,t,n,s){let i=e.value.trim(),o=D(),r=o&&o.state===signalR.HubConnectionState.Connected;if(!i||!r)return;let a=1;t&&(a=parseInt(t.value)||1),k(n,"user",i),e.value="",fe(!0),s();let c=k(n,"assistant","");ge(c),ke("");let m=L(),l=document.createElement("div");l.className="loading-dots",l.innerHTML="<span></span><span></span><span></span>",c.appendChild(l);let d=c.querySelector(".message-actions");d||(d=document.createElement("div"),d.className="message-actions",c.appendChild(d));let u=document.createElement("button");u.className="cancel-btn",u.title="\u53D6\u6D88\u751F\u6210",u.innerHTML='<svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="currentColor" stroke-linecap="round" stroke-linejoin="round"><rect x="6" y="6" width="12" height="12" rx="2" ry="2"></rect></svg>',u.onclick=async()=>{try{(await fetch(`/AiChat/CancelMessage?sessionId=${m}&connectionId=${o.connectionId}`,{method:"POST"})).ok||console.error("\u274C \u53D6\u6D88\u8BF7\u6C42\u5931\u8D25")}catch(f){console.error("\u274C \u53D6\u6D88\u8BF7\u6C42\u5931\u8D25:",f)}},d.insertBefore(u,d.firstChild),c.appendChild(d),pe(u);try{await o.invoke("SendStreamMessageToChatGpt",i,a,m||""),l.remove()}catch(f){console.error("\u274C \u53D1\u9001\u5931\u8D25:",f),fe(!1),ge(null),s(),l.remove();let y=Ae();y&&(y.remove(),pe(null)),k(n,"error",`\u9519\u8BEF: ${f.message}`)}}async function qe(e,t,n){if(!e)return;let s=e.value;console.log("\u{1F4DD} \u6A21\u578B\u5DF2\u5207\u6362\u81F3:",e.options[e.selectedIndex].text);let i=t();if(i)try{let o=new FormData;o.append("sessionId",i),o.append("modelType",s);let a=await(await fetch("/AiChat/UpdateSessionModelType",{method:"PUT",body:o})).json();a.success?console.log("\u2705 \u5DF2\u66F4\u65B0\u4F1A\u8BDD\u6A21\u578B\u7C7B\u578B:",i,s):(console.error("\u274C \u66F4\u65B0\u4F1A\u8BDD\u6A21\u578B\u7C7B\u578B\u5931\u8D25:",a.message),await n("\u274C \u66F4\u65B0\u4F1A\u8BDD\u6A21\u578B\u7C7B\u578B\u5931\u8D25"))}catch(o){console.error("\u274C \u66F4\u65B0\u4F1A\u8BDD\u6A21\u578B\u7C7B\u578B\u5931\u8D25:",o)}}W();Z();W();function He(){document.addEventListener("click",async e=>{let t=e.target.closest(".btn-copy-markdown");if(t){e.stopPropagation();let s=t.nextElementSibling;if(s&&s.classList.contains("raw-markdown")){let i=s.textContent;navigator.clipboard.writeText(i).then(()=>{let o=t.innerHTML;t.innerHTML="\u2705",setTimeout(()=>t.innerHTML=o,2e3)}).catch(async o=>{console.error("\u590D\u5236\u5931\u8D25:",o),await p("\u590D\u5236\u5931\u8D25")})}}let n=e.target.closest(".btn-delete-message");if(n){e.stopPropagation();let s=n.closest(".message");if(!s||!await Y("\u786E\u5B9A\u8981\u5220\u9664\u8FD9\u6761\u6D88\u606F\u5417\uFF1F"))return;let o=s.dataset.messageId;if(!o){await p("\u65E0\u6CD5\u5220\u9664\u672A\u540C\u6B65\u7684\u6D88\u606F\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u540E\u91CD\u8BD5\u3002");return}try{let a=await(await fetch(`/AiChat/DeleteMessage?messageId=${o}`,{method:"DELETE"})).json();a.success?s.remove():await p(a.msg||"\u5220\u9664\u5931\u8D25")}catch(r){console.error("\u5220\u9664\u6D88\u606F\u5931\u8D25:",r),await p("\u5220\u9664\u5931\u8D25: "+r.message)}}})}Ee();Ce();Le();He();var G,ye,we,te,ve,Oe,Pe=document.getElementById("sessionList"),je=document.getElementById("btnNewSession"),$e=document.getElementById("sessionSidebar"),ne=document.getElementById("sidebarOverlay");function Xe(){let e=I();G=e.chatArea,ye=e.messageInput,we=e.sendBtn,te=e.statusEl,ve=e.modelSelect,Oe=e.sidebarToggle,M(e),te&&h(S(),te,()=>v(e)),x(G).catch(t=>{console.warn("\u4EE3\u7801\u9AD8\u4EAE\u5931\u8D25:",t)}),N(G)}function v(e){let t=D(),n=t&&t.state===signalR.HubConnectionState.Connected,s=be(),i=e?.messageInput||ye,o=e?.sendBtn||we,r=e?.modelSelect||ve;if(!i||!o)return;let a=n&&!s;i.disabled=!a,o.disabled=!a||i.value.trim()==="",r&&(r.disabled=s)}function M(e){let t=e?.messageInput||ye,n=e?.sendBtn||we,s=e?.modelSelect||ve,i=e?.sidebarToggle||Oe,o=e?.chatArea||G;t&&(t.onkeydown=async r=>{(r.ctrlKey&&r.key==="Enter"||r.altKey&&r.key==="s")&&(r.preventDefault(),await he(t,s,o,()=>v(e)))},t.oninput=()=>v(e)),n&&(n.onclick=async()=>{await he(t,s,o,()=>v(e))}),s&&(s.onchange=async()=>{await qe(s,L,p)}),i&&(i.onclick=()=>Q()),v(e)}async function Ye(){Xe();let e=()=>{$(s=>B(s,document.getElementById("chatMain"),I,M,h,S(),v),I,M,h,S,v)};await ee(G,te,()=>{let s=I();v(s)},e,L);let n=D();n&&(n.off("NewSessionCreated"),n.on("NewSessionCreated",s=>{console.log("\u2705 \u65B0\u4F1A\u8BDD\u5DF2\u521B\u5EFA\uFF0CSessionId:",s);let i=document.getElementById("currentSessionId");i&&(i.value=s);let o=me();if(o){o.dataset.isNewSession="false",o.dataset.sessionId=s,o.classList.remove("pending"),o.classList.add("active");let r=o.querySelector(".session-name");r&&(r.textContent="\u751F\u6210\u6807\u9898\u4E2D...",r.style.fontStyle="italic");let a=o.querySelector(".session-info");if(a){let c=a.cloneNode(!0);a.parentNode.replaceChild(c,a),c.addEventListener("click",async()=>{await B(s,document.getElementById("chatMain"),I,M,h,S(),v)})}}}),n.off("SessionNameGenerated"),n.on("SessionNameGenerated",async s=>{let i,o;typeof s=="object"&&s!==null?(i=s.sessionId,o=s.sessionName):i=s,console.log("\u2705 \u4F1A\u8BDD\u540D\u79F0\u5DF2\u751F\u6210\uFF0CSessionId:",i,"SessionName:",o);let{updateSessionTitle:r}=await Promise.resolve().then(()=>(Z(),ue));await r(i,m=>B(m,document.getElementById("chatMain"),I,M,h,S(),v),e,o)||e()})),document.querySelectorAll(".session-item").forEach(s=>{let i=s.dataset.sessionId;if(s.dataset.isNewSession==="true"&&!i)s.querySelector(".session-info").onclick=()=>F(Pe,$e,ne,o=>B(o,document.getElementById("chatMain"),I,M,h,S(),v));else{s.querySelector(".session-info").onclick=()=>B(i,document.getElementById("chatMain"),I,M,h,S(),v);let o=s.querySelector(".btn-delete-session");o&&(o.onclick=r=>{r.stopPropagation(),q(i,a=>B(a,document.getElementById("chatMain"),I,M,h,S(),v),e)})}})}ne&&(ne.onclick=()=>Q(!0));je&&(je.onclick=()=>F(Pe,$e,ne,e=>B(e,document.getElementById("chatMain"),I,M,h,S(),v)));window.addEventListener("load",Ye);window.addEventListener("beforeunload",async()=>{let e=D();e&&await e.stop()});
//# sourceMappingURL=main.min.js.map
评论加载中...