hermes-web-ui 0.3.5 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{Add-B30B6hm7.js → Add-CKf6ViXR.js} +1 -1
- package/dist/client/assets/{Button-DwGfyqPw.js → Button-CrrCCorI.js} +1 -1
- package/dist/client/assets/ChannelsView-CoREbYTy.css +1 -0
- package/dist/client/assets/{ChannelsView-CBp2DN0o.js → ChannelsView-D4I7hhZO.js} +1 -1
- package/dist/client/assets/{ChatView-DFe0-MBb.js → ChatView-DxyBUK57.js} +2 -2
- package/dist/client/assets/ChatView-Vfi_jEpI.css +1 -0
- package/dist/client/assets/{Close-Cx3QWBlf.js → Close-C9xwy-pW.js} +1 -1
- package/dist/client/assets/{FormItem-IDqRbieL.js → FormItem-BgJdrTW0.js} +1 -1
- package/dist/client/assets/{GatewaysView-BhcgCbRT.js → GatewaysView-Cib2JydO.js} +1 -1
- package/dist/client/assets/GatewaysView-DtUN_4uh.css +1 -0
- package/dist/client/assets/Input-ChENEW-Z.js +234 -0
- package/dist/client/assets/{InputNumber-Cv9gxxh7.js → InputNumber-Xd6HWSdp.js} +3 -3
- package/dist/client/assets/JobsView-C9-go5-X.css +1 -0
- package/dist/client/assets/{JobsView-BC5mylk0.js → JobsView-SnToCbDd.js} +2 -2
- package/dist/client/assets/{LoginView-D3boEGsw.js → LoginView-BZdmMnsf.js} +1 -1
- package/dist/client/assets/LoginView-DHPxG3eC.css +1 -0
- package/dist/client/assets/{LogsView-c6KTVy2B.js → LogsView-DblvOJIg.js} +1 -1
- package/dist/client/assets/LogsView-VfBZmaM1.css +1 -0
- package/dist/client/assets/{MarkdownRenderer-BXguAKSD.js → MarkdownRenderer-DJLVk7ei.js} +1 -1
- package/dist/client/assets/MarkdownRenderer-Dc9VWGMm.css +1 -0
- package/dist/client/assets/MemoryView-BZxpGTCE.css +1 -0
- package/dist/client/assets/{MemoryView-DbnZK85J.js → MemoryView-exXvRwCc.js} +1 -1
- package/dist/client/assets/{Modal-DT_Uaxiw.js → Modal-B2zvXTrk.js} +1 -1
- package/dist/client/assets/{ModelsView-j8N9aa4s.js → ModelsView-DGs47Cj4.js} +1 -1
- package/dist/client/assets/ModelsView-jbgZP3YF.css +1 -0
- package/dist/client/assets/{Popconfirm-DZmjYOls.js → Popconfirm-BoZc0kKk.js} +1 -1
- package/dist/client/assets/{Popover-D3ojycbe.js → Popover-Cu52vG3D.js} +1 -1
- package/dist/client/assets/ProfilesView-1BtKDO_6.css +1 -0
- package/dist/client/assets/{ProfilesView-BMreMf7c.js → ProfilesView-D0FY7Jwe.js} +1 -1
- package/dist/client/assets/{Select-C81CZLeG.js → Select-BHc7u-Yf.js} +1 -1
- package/dist/client/assets/SettingRow-Cr1VcUPz.css +1 -0
- package/dist/client/assets/{SettingRow-CVQtnZk0.js → SettingRow-i-UXlco7.js} +1 -1
- package/dist/client/assets/{SettingsView-DhcMUR45.js → SettingsView-BW6ctYG5.js} +1 -1
- package/dist/client/assets/SettingsView-Dhr2wzAB.css +1 -0
- package/dist/client/assets/SkillsView-5K2WjAWZ.css +1 -0
- package/dist/client/assets/{SkillsView-D1av-rLk.js → SkillsView-B5QBaAzi.js} +1 -1
- package/dist/client/assets/{Spin-BhfQbLIz.js → Spin-DsNCRPk9.js} +1 -1
- package/dist/client/assets/{Suffix-BXl6NL7N.js → Suffix-3xK0KZGt.js} +1 -1
- package/dist/client/assets/{Switch-C0uGgDpw.js → Switch-Bf63XXgA.js} +1 -1
- package/dist/client/assets/{Tag-DvesGg6w.js → Tag-Dmbj68Ki.js} +1 -1
- package/dist/client/assets/TerminalView-BOiVMGJZ.css +1 -0
- package/dist/client/assets/{TerminalView-17YCUOqm.js → TerminalView-DrJHZ0qI.js} +1 -1
- package/dist/client/assets/{Tooltip-qYbjBcWW.js → Tooltip-CRbZNhG0.js} +1 -1
- package/dist/client/assets/{UsageView-D25PQIYU.js → UsageView-DQ43JasX.js} +1 -1
- package/dist/client/assets/UsageView-wje1C97e.css +1 -0
- package/dist/client/assets/{Warning-DAmP6UnC.js → Warning-kBbRMAif.js} +1 -1
- package/dist/client/assets/{_plugin-vue_export-helper-UAuz8oHE.js → _plugin-vue_export-helper-CnosYBkx.js} +1 -1
- package/dist/client/assets/app-BT9yU6N6.js +1 -0
- package/dist/client/assets/app-CjNVVG5x.js +1 -0
- package/dist/client/assets/{browser-CLSxHAWY.js → browser-Djp4tkp3.js} +1 -1
- package/dist/client/assets/{chat-BLmoNi4J.js → chat-DlC9S9DK.js} +2 -2
- package/dist/client/assets/composables-DCA4Yga5.js +1 -0
- package/dist/client/assets/{fade-in.cssr-CDLVanQc.js → fade-in.cssr-CIVyTG6A.js} +1 -1
- package/dist/client/assets/index-BEcRccNA.css +1 -0
- package/dist/client/assets/index-D12ukDT7.js +284 -0
- package/dist/client/assets/{jobs-B7ZtNcWS.js → jobs-CcVaCGMJ.js} +1 -1
- package/dist/client/assets/{light-J6RXkH_f.js → light-BF6E9z0k.js} +1 -1
- package/dist/client/assets/{light-B5t3raDD.js → light-BJ96fCLC.js} +1 -1
- package/dist/client/assets/{light-C0tle1ml.js → light-BPqyaxve.js} +1 -1
- package/dist/client/assets/{light-DmNKMghu.js → light-CSp9-LhE.js} +1 -1
- package/dist/client/assets/{light-drc_JZYD.js → light-D9G2GshF.js} +1 -1
- package/dist/client/assets/{light-DskCB02V.js → light-KCEDTUGE.js} +1 -1
- package/dist/client/assets/{pinia-BCdMNHqH.js → pinia-iHE5_ZXa.js} +1 -1
- package/dist/client/assets/{profiles-0gLtDD3L.js → profiles-CJCR84uQ.js} +1 -1
- package/dist/client/assets/{router-xXGgrS8z.js → router-C-NNJUuf.js} +2 -2
- package/dist/client/assets/{sessions-CT0dx-Es.js → sessions-C4bnNvzS.js} +1 -1
- package/dist/client/assets/{skills-6XXzYR4m.js → skills-B4slZfeZ.js} +1 -1
- package/dist/client/assets/{use-message-DX_6iCeB.js → use-message-BIpqgDet.js} +1 -1
- package/dist/client/assets/{useTheme-DYGtqD4X.js → useTheme-B78N9tyz.js} +1 -1
- package/dist/client/index.html +29 -29
- package/dist/server/routes/hermes/filesystem.js +3 -1
- package/package.json +1 -1
- package/dist/client/assets/ChannelsView-DS2AEk-a.css +0 -1
- package/dist/client/assets/ChatView-C-DDndDr.css +0 -1
- package/dist/client/assets/GatewaysView-B6iuJPRt.css +0 -1
- package/dist/client/assets/Input-DZ1ybW2S.js +0 -234
- package/dist/client/assets/JobsView-CVx2Yv-y.css +0 -1
- package/dist/client/assets/LoginView-CA9w3oDH.css +0 -1
- package/dist/client/assets/LogsView-BG7Bro4j.css +0 -1
- package/dist/client/assets/MarkdownRenderer-Ct6cRT2D.css +0 -1
- package/dist/client/assets/MemoryView-DEyIgPS8.css +0 -1
- package/dist/client/assets/ModelsView-D1p_2trx.css +0 -1
- package/dist/client/assets/ProfilesView-Djk2r_Yi.css +0 -1
- package/dist/client/assets/SettingRow-CwidKv2Q.css +0 -1
- package/dist/client/assets/SettingsView-DsKujD7e.css +0 -1
- package/dist/client/assets/SkillsView-D5bivF7Z.css +0 -1
- package/dist/client/assets/TerminalView-bGVoBQc1.css +0 -1
- package/dist/client/assets/UsageView-CnADqqzf.css +0 -1
- package/dist/client/assets/app-CBE2Q2m7.js +0 -1
- package/dist/client/assets/app-DPPUfw54.js +0 -1
- package/dist/client/assets/composables-Co9VYRg8.js +0 -1
- package/dist/client/assets/index-BsT9PCg4.css +0 -1
- package/dist/client/assets/index-D5e-xsve.js +0 -284
- package/dist/client/assets/light-BuwZuC3T.js +0 -1
- /package/dist/client/assets/{_common-DgvLN1LQ.js → _common-Yp55QE79.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{B as e,C as t,F as n,I as r,K as i,N as a,U as o,V as s,X as c,Z as l,ct as u,d,dt as f,j as p,lt as m,st as ee,v as te,y as ne}from"./router-
|
|
1
|
+
import{B as e,C as t,F as n,I as r,K as i,N as a,U as o,V as s,X as c,Z as l,ct as u,d,dt as f,j as p,lt as m,st as ee,v as te,y as ne}from"./router-C-NNJUuf.js";function re(e){let t=`.`,n=`__`,r=`--`,i;if(e){let i=e.blockPrefix;i&&(t=i),i=e.elementPrefix,i&&(n=i),i=e.modifierPrefix,i&&(r=i)}let a={install(e){i=e.c;let t=e.context;t.bem={},t.bem.b=null,t.bem.els=null}};function o(e){let n,r;return{before(e){n=e.bem.b,r=e.bem.els,e.bem.els=null},after(e){e.bem.b=n,e.bem.els=r},$({context:n,props:r}){return e=typeof e==`string`?e:e({context:n,props:r}),n.bem.b=e,`${r?.bPrefix||t}${n.bem.b}`}}}function s(e){let r;return{before(e){r=e.bem.els},after(e){e.bem.els=r},$({context:r,props:i}){return e=typeof e==`string`?e:e({context:r,props:i}),r.bem.els=e.split(`,`).map(e=>e.trim()),r.bem.els.map(e=>`${i?.bPrefix||t}${r.bem.b}${n}${e}`).join(`, `)}}}function c(e){return{$({context:i,props:a}){e=typeof e==`string`?e:e({context:i,props:a});let o=e.split(`,`).map(e=>e.trim());function s(e){return o.map(o=>`&${a?.bPrefix||t}${i.bem.b}${e===void 0?``:`${n}${e}`}${r}${o}`).join(`, `)}let c=i.bem.els;return c===null?s():s(c[0])}}}function l(e){return{$({context:i,props:a}){e=typeof e==`string`?e:e({context:i,props:a});let o=i.bem.els;return`&:not(${a?.bPrefix||t}${i.bem.b}${o!==null&&o.length>0?`${n}${o[0]}`:``}${r}${e})`}}}return Object.assign(a,{cB:((...e)=>i(o(e[0]),e[1],e[2])),cE:((...e)=>i(s(e[0]),e[1],e[2])),cM:((...e)=>i(c(e[0]),e[1],e[2])),cNotM:((...e)=>i(l(e[0]),e[1],e[2]))}),a}function ie(e){let t=0;for(let n=0;n<e.length;++n)e[n]===`&`&&++t;return t}var ae=/\s*,(?![^(]*\))\s*/g,oe=/\s+/g;function se(e,t){let n=[];return t.split(ae).forEach(t=>{let r=ie(t);if(!r){e.forEach(e=>{n.push((e&&e+` `)+t)});return}else if(r===1){e.forEach(e=>{n.push(t.replace(`&`,e))});return}let i=[t];for(;r--;){let t=[];i.forEach(n=>{e.forEach(e=>{t.push(n.replace(`&`,e))})}),i=t}i.forEach(e=>n.push(e))}),n}function ce(e,t){let n=[];return t.split(ae).forEach(t=>{e.forEach(e=>{n.push((e&&e+` `)+t)})}),n}function le(e){let t=[``];return e.forEach(e=>{e&&=e.trim(),e&&(t=e.includes(`&`)?se(t,e):ce(t,e))}),t.join(`, `).replace(oe,` `)}function ue(e){if(!e)return;let t=e.parentElement;t&&t.removeChild(e)}function h(e,t){return(t??document.head).querySelector(`style[cssr-id="${e}"]`)}function de(e){let t=document.createElement(`style`);return t.setAttribute(`cssr-id`,e),t}function fe(e){return e?/^\s*@(s|m)/.test(e):!1}var pe=/[A-Z]/g;function me(e){return e.replace(pe,e=>`-`+e.toLowerCase())}function he(e,t=` `){return typeof e==`object`&&e?` {
|
|
2
2
|
`+Object.entries(e).map(e=>t+` ${me(e[0])}: ${e[1]};`).join(`
|
|
3
3
|
`)+`
|
|
4
4
|
`+t+`}`:`: ${e};`}function ge(e,t,n){return typeof e==`function`?e({context:t.context,props:n}):e}function _e(e,t,n,r){if(!t)return``;let i=ge(t,n,r);if(!i)return``;if(typeof i==`string`)return`${e} {\n${i}\n}`;let a=Object.keys(i);if(a.length===0)return n.config.keepEmptyBlock?e+` {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/app-
|
|
2
|
-
import{C as e,ct as t,i as n,n as r,o as i,r as a}from"./router-xXGgrS8z.js";import{n as o}from"./pinia-BCdMNHqH.js";import{n as s,nt as c,s as l}from"./browser-CLSxHAWY.js";import{i as u}from"./Popover-D3ojycbe.js";import{t as d}from"./app-CBE2Q2m7.js";import{t as f}from"./profiles-0gLtDD3L.js";import{n as p,r as m,t as h}from"./sessions-CT0dx-Es.js";var g={padding:`4px 0`,optionIconSizeSmall:`14px`,optionIconSizeMedium:`16px`,optionIconSizeLarge:`16px`,optionIconSizeHuge:`18px`,optionSuffixWidthSmall:`14px`,optionSuffixWidthMedium:`14px`,optionSuffixWidthLarge:`16px`,optionSuffixWidthHuge:`16px`,optionIconSuffixWidthSmall:`32px`,optionIconSuffixWidthMedium:`32px`,optionIconSuffixWidthLarge:`36px`,optionIconSuffixWidthHuge:`36px`,optionPrefixWidthSmall:`14px`,optionPrefixWidthMedium:`14px`,optionPrefixWidthLarge:`16px`,optionPrefixWidthHuge:`16px`,optionIconPrefixWidthSmall:`36px`,optionIconPrefixWidthMedium:`36px`,optionIconPrefixWidthLarge:`40px`,optionIconPrefixWidthHuge:`40px`};function _(e){let{primaryColor:t,textColor2:n,dividerColor:r,hoverColor:i,popoverColor:a,invertedColor:o,borderRadius:s,fontSizeSmall:l,fontSizeMedium:u,fontSizeLarge:d,fontSizeHuge:f,heightSmall:p,heightMedium:m,heightLarge:h,heightHuge:_,textColor3:v,opacityDisabled:y}=e;return Object.assign(Object.assign({},g),{optionHeightSmall:p,optionHeightMedium:m,optionHeightLarge:h,optionHeightHuge:_,borderRadius:s,fontSizeSmall:l,fontSizeMedium:u,fontSizeLarge:d,fontSizeHuge:f,optionTextColor:n,optionTextColorHover:n,optionTextColorActive:t,optionTextColorChildActive:t,color:a,dividerColor:r,suffixColor:n,prefixColor:n,optionColorHover:i,optionColorActive:c(t,{alpha:.1}),groupHeaderTextColor:v,optionTextColorInverted:`#BBB`,optionTextColorHoverInverted:`#FFF`,optionTextColorActiveInverted:`#FFF`,optionTextColorChildActiveInverted:`#FFF`,colorInverted:o,dividerColorInverted:`#BBB`,suffixColorInverted:`#BBB`,prefixColorInverted:`#BBB`,optionColorHoverInverted:t,optionColorActiveInverted:t,groupHeaderTextColorInverted:`#AAA`,optionOpacityDisabled:y})}var v=l({name:`Dropdown`,common:s,peers:{Popover:u},self:_});function y(e){let{textColorBase:t,opacity1:n,opacity2:r,opacity3:i,opacity4:a,opacity5:o}=e;return{color:t,opacity1Depth:n,opacity2Depth:r,opacity3Depth:i,opacity4Depth:a,opacity5Depth:o}}var b={name:`Icon`,common:s,self:y};async function x(e){return i(`/api/hermes/v1/runs`,{method:`POST`,body:JSON.stringify(e)})}function S(e,t,r,i){let o=n(),s=a(),c=`${o}/api/hermes/v1/runs/${e}/events${s?`?token=${encodeURIComponent(s)}`:``}`,l=!1,u=new EventSource(c);return u.onmessage=e=>{if(!l)try{let n=JSON.parse(e.data);t(n),(n.event===`run.completed`||n.event===`run.failed`)&&(l=!0,u.close(),r())}catch{t({event:`message`,delta:e.data})}},u.onerror=()=>{l||(l=!0,u.close(),i(Error(`SSE connection error`)))},{abort:()=>{l||(l=!0,u.close())}}}function C(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}async function w(e){if(e.length===0)return[];let t=new FormData;for(let n of e)n.file&&t.append(`file`,n.file,n.name);let n=localStorage.getItem(`hermes_api_key`)||``,r=await fetch(`/upload`,{method:`POST`,body:t,headers:n?{Authorization:`Bearer ${n}`}:{}});if(!r.ok)throw Error(`Upload failed: ${r.status}`);return(await r.json()).files}function T(e){let t=new Map,n=new Map;for(let r of e)if(r.role===`assistant`&&r.tool_calls)for(let e of r.tool_calls)e.id&&(e.function?.name&&t.set(e.id,e.function.name),e.function?.arguments&&n.set(e.id,e.function.arguments));let r=[];for(let i of e){if(i.role===`assistant`&&i.tool_calls?.length&&!i.content?.trim()){for(let e of i.tool_calls)r.push({id:String(i.id)+`_`+e.id,role:`tool`,content:``,timestamp:Math.round(i.timestamp*1e3),toolName:e.function?.name||`tool`,toolArgs:e.function?.arguments||void 0,toolStatus:`done`});continue}if(i.role===`tool`){let e=i.tool_call_id||``,a=i.tool_name||t.get(e)||`tool`,o=n.get(e)||void 0,s=``;if(i.content)try{let e=JSON.parse(i.content);s=e.url||e.title||e.preview||e.summary||``}catch{s=i.content.slice(0,80)}let c=r.findIndex(t=>t.role===`tool`&&t.toolName===a&&!t.toolResult&&t.id.includes(`_`+e));c!==-1&&r.splice(c,1),r.push({id:String(i.id),role:`tool`,content:``,timestamp:Math.round(i.timestamp*1e3),toolName:a,toolArgs:o,toolPreview:typeof s==`string`&&s.slice(0,100)||void 0,toolResult:i.content||void 0,toolStatus:`done`});continue}r.push({id:String(i.id),role:i.role,content:i.content||``,timestamp:Math.round(i.timestamp*1e3)})}return r}function E(e){return{id:e.id,title:e.title||``,source:e.source||void 0,messages:[],createdAt:Math.round(e.started_at*1e3),updatedAt:Math.round((e.ended_at||e.started_at)*1e3),model:e.model,provider:e.billing_provider||``,messageCount:e.message_count,inputTokens:e.input_tokens,outputTokens:e.output_tokens}}var D=`hermes_active_session_`,O=`hermes_sessions_cache_v1_`,k=900*1e3,A=2e3,j=3;function M(){try{return f().activeProfileName||`default`}catch{return`default`}}function N(){return D+M()}function P(){return O+M()}function F(e){return`hermes_session_msgs_v1_${M()}_${e}_`}function I(e){return`hermes_in_flight_v1_${M()}_${e}`}function L(e){try{let t=localStorage.getItem(e);return t?JSON.parse(t):null}catch{return null}}function R(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch{}}function z(e){try{localStorage.removeItem(e)}catch{}}function B(e){return e.map(e=>e.attachments?.length?{...e,attachments:e.attachments.map(e=>({id:e.id,name:e.name,type:e.type,size:e.size,url:e.url}))}:e)}var V=o(`chat`,()=>{let n=t([]),i=t(null),a=t(new Map),o=e(()=>i.value!=null&&a.value.has(i.value)),s=t(!1),c=t(!1),l=t(new Set),u=e(()=>o.value||i.value!=null&&l.value.has(i.value)),f=new Map,g=new Map,_=t(null),v=e(()=>_.value?.messages||[]);function y(){R(P(),n.value.map(e=>({...e,messages:[]})))}function b(){let e=i.value;if(!e)return;let t=n.value.find(t=>t.id===e);t&&R(F(e),B(t.messages))}function D(e,t){R(I(e),{runId:t,startedAt:Date.now()})}function O(e){z(I(e))}function M(e){let t=L(I(e));return t?Date.now()-t.startedAt>k?(z(I(e)),null):t:null}function V(e){let t=f.get(e);t&&(clearInterval(t),f.delete(e)),g.delete(e),l.value=new Set([...l.value].filter(t=>t!==e))}function H(e){if(f.has(e))return;l.value=new Set([...l.value,e]);let t=setInterval(async()=>{if(a.value.has(e)){V(e);return}if(!M(e)){V(e);return}try{let t=await p(e);if(!t)return;let r=T(t.messages||[]),a=n.value.find(t=>t.id===e);if(!a)return;let o=a.messages,s=[...o].reverse().find(e=>e.role===`assistant`),c=[...r].reverse().find(e=>e.role===`assistant`),l=s?.content?.length??0,u=c?.content?.length??0,d=o.filter(e=>e.role===`user`).length,f=r.filter(e=>e.role===`user`).length,m=f>=d;if((f>d||f===d&&u>=l)&&(a.messages=r,a.inputTokens=t.input_tokens,a.outputTokens=t.output_tokens,t.title&&!a.title&&(a.title=t.title),e===i.value&&b()),!m)g.delete(e);else{let n=r[r.length-1],o=`${r.length}|${n?.content?.slice(-40)||``}|${n?.toolStatus||``}`,s=g.get(e);s&&s.sig===o?(s.stableTicks+=1,s.stableTicks>=j&&(a.messages=r,a.inputTokens=t.input_tokens,a.outputTokens=t.output_tokens,t.title&&(a.title=t.title),e===i.value&&b(),O(e),V(e))):g.set(e,{sig:o,stableTicks:0})}}catch{}},A);f.set(e,t)}async function U(){s.value=!0;try{let e=L(P());if(e?.length){n.value=e;let t=localStorage.getItem(N());if(t){let n=e.find(e=>e.id===t)||null;if(n){let e=L(F(t));e&&(n.messages=e),_.value=n,i.value=t}}}let t=(await m()).map(E),r=new Set(t.map(e=>e.id)),a=new Map(n.value.map(e=>[e.id,e.messages]));for(let e of t){let t=a.get(e.id);t&&t.length&&(e.messages=t)}n.value=[...n.value.filter(e=>!r.has(e.id)),...t],y();let o=i.value,s=o&&n.value.some(e=>e.id===o)?o:n.value[0]?.id;s&&await K(s)}catch(e){console.error(`Failed to load sessions:`,e)}finally{s.value=!1}}async function W(){let e=i.value;if(!e)return!1;try{let t=await p(e);if(!t)return!1;let r=n.value.find(t=>t.id===e);return r?(r.messages=T(t.messages||[]),r.inputTokens=t.input_tokens,r.outputTokens=t.output_tokens,t.title&&(r.title=t.title),b(),!0):!1}catch(e){return console.error(`Failed to refresh active session:`,e),!1}}function G(){let e={id:C(),title:``,source:`api_server`,messages:[],createdAt:Date.now(),updatedAt:Date.now()};return n.value.unshift(e),y(),e}async function K(e){if(i.value=e,localStorage.setItem(N(),e),_.value=n.value.find(t=>t.id===e)||null,_.value){if(!(_.value.messages.length>0)){let t=L(F(e));t?.length&&(_.value.messages=t)}_.value.messages.length===0&&(c.value=!0);try{let t=await p(e);if(t&&t.messages){let e=T(t.messages),n=_.value.messages,r=[...n].reverse().find(e=>e.role===`assistant`),i=[...e].reverse().find(e=>e.role===`assistant`),a=r?.content?.length??0,o=i?.content?.length??0,s=n.filter(e=>e.role===`user`).length,c=e.filter(e=>e.role===`user`).length;if((c>s||c===s&&o>=a)&&(_.value.messages=e),_.value.inputTokens=t.input_tokens,_.value.outputTokens=t.output_tokens,t.title)_.value.title=t.title;else if(!_.value.title){let e=_.value.messages.find(e=>e.role===`user`);if(e){let t=e.content.slice(0,40);_.value.title=t+(e.content.length>40?`...`:``)}}b()}}catch(e){console.error(`Failed to load session messages:`,e)}finally{c.value=!1}M(e)&&!a.value.has(e)&&H(e)}}function q(){if(o.value)return;let e=G();e.model=d().selectedModel||void 0,K(e.id)}async function J(e,t){if(_.value&&(_.value.model=e,_.value.provider=t||``,t)){let{useAppStore:n}=await r(async()=>{let{useAppStore:e}=await import(`./app-DPPUfw54.js`);return{useAppStore:e}},__vite__mapDeps([0,1,2,3]));await n().switchModel(e,t)}}async function Y(e){await h(e),n.value=n.value.filter(t=>t.id!==e),z(F(e)),y(),i.value===e&&(n.value.length>0?await K(n.value[0].id):K(G().id))}function X(e){return n.value.find(t=>t.id===e)?.messages||[]}function Z(e,t){let r=n.value.find(t=>t.id===e);r&&r.messages.push(t)}function Q(e,t,r){let i=n.value.find(t=>t.id===e);if(!i)return;let a=i.messages.findIndex(e=>e.id===t);a!==-1&&(i.messages[a]={...i.messages[a],...r})}function $(e){let t=n.value.find(t=>t.id===e);if(t){if(!t.title){let e=t.messages.find(e=>e.role===`user`);if(e){let n=e.attachments?.length?e.attachments.map(e=>e.name).join(`, `):e.content;t.title=n.slice(0,40)+(n.length>40?`...`:``)}}t.updatedAt=Date.now()}}async function ee(e,t){if(!e.trim()&&!(t&&t.length>0)||o.value)return;_.value||K(G().id);let n=i.value;Z(n,{id:C(),role:`user`,content:e.trim(),timestamp:Date.now(),attachments:t&&t.length>0?t:void 0}),$(n),n===i.value&&(b(),y());try{let r=X(n).filter(e=>(e.role===`user`||e.role===`assistant`)&&e.content.trim()).map(e=>({role:e.role,content:e.content})),o=e.trim();if(t&&t.length>0){let e=(await w(t)).map(e=>`[File: ${e.name}](${e.path})`);o=o?o+`
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/app-CjNVVG5x.js","assets/app-BT9yU6N6.js","assets/router-C-NNJUuf.js","assets/pinia-iHE5_ZXa.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{C as e,ct as t,i as n,n as r,o as i,r as a}from"./router-C-NNJUuf.js";import{n as o}from"./pinia-iHE5_ZXa.js";import{n as s,nt as c,s as l}from"./browser-Djp4tkp3.js";import{i as u}from"./Popover-Cu52vG3D.js";import{t as d}from"./app-BT9yU6N6.js";import{t as f}from"./profiles-CJCR84uQ.js";import{n as p,r as m,t as h}from"./sessions-C4bnNvzS.js";var g={padding:`4px 0`,optionIconSizeSmall:`14px`,optionIconSizeMedium:`16px`,optionIconSizeLarge:`16px`,optionIconSizeHuge:`18px`,optionSuffixWidthSmall:`14px`,optionSuffixWidthMedium:`14px`,optionSuffixWidthLarge:`16px`,optionSuffixWidthHuge:`16px`,optionIconSuffixWidthSmall:`32px`,optionIconSuffixWidthMedium:`32px`,optionIconSuffixWidthLarge:`36px`,optionIconSuffixWidthHuge:`36px`,optionPrefixWidthSmall:`14px`,optionPrefixWidthMedium:`14px`,optionPrefixWidthLarge:`16px`,optionPrefixWidthHuge:`16px`,optionIconPrefixWidthSmall:`36px`,optionIconPrefixWidthMedium:`36px`,optionIconPrefixWidthLarge:`40px`,optionIconPrefixWidthHuge:`40px`};function _(e){let{primaryColor:t,textColor2:n,dividerColor:r,hoverColor:i,popoverColor:a,invertedColor:o,borderRadius:s,fontSizeSmall:l,fontSizeMedium:u,fontSizeLarge:d,fontSizeHuge:f,heightSmall:p,heightMedium:m,heightLarge:h,heightHuge:_,textColor3:v,opacityDisabled:y}=e;return Object.assign(Object.assign({},g),{optionHeightSmall:p,optionHeightMedium:m,optionHeightLarge:h,optionHeightHuge:_,borderRadius:s,fontSizeSmall:l,fontSizeMedium:u,fontSizeLarge:d,fontSizeHuge:f,optionTextColor:n,optionTextColorHover:n,optionTextColorActive:t,optionTextColorChildActive:t,color:a,dividerColor:r,suffixColor:n,prefixColor:n,optionColorHover:i,optionColorActive:c(t,{alpha:.1}),groupHeaderTextColor:v,optionTextColorInverted:`#BBB`,optionTextColorHoverInverted:`#FFF`,optionTextColorActiveInverted:`#FFF`,optionTextColorChildActiveInverted:`#FFF`,colorInverted:o,dividerColorInverted:`#BBB`,suffixColorInverted:`#BBB`,prefixColorInverted:`#BBB`,optionColorHoverInverted:t,optionColorActiveInverted:t,groupHeaderTextColorInverted:`#AAA`,optionOpacityDisabled:y})}var v=l({name:`Dropdown`,common:s,peers:{Popover:u},self:_});function y(e){let{textColorBase:t,opacity1:n,opacity2:r,opacity3:i,opacity4:a,opacity5:o}=e;return{color:t,opacity1Depth:n,opacity2Depth:r,opacity3Depth:i,opacity4Depth:a,opacity5Depth:o}}var b={name:`Icon`,common:s,self:y};async function x(e){return i(`/api/hermes/v1/runs`,{method:`POST`,body:JSON.stringify(e)})}function S(e,t,r,i){let o=n(),s=a(),c=`${o}/api/hermes/v1/runs/${e}/events${s?`?token=${encodeURIComponent(s)}`:``}`,l=!1,u=new EventSource(c);return u.onmessage=e=>{if(!l)try{let n=JSON.parse(e.data);t(n),(n.event===`run.completed`||n.event===`run.failed`)&&(l=!0,u.close(),r())}catch{t({event:`message`,delta:e.data})}},u.onerror=()=>{l||(l=!0,u.close(),i(Error(`SSE connection error`)))},{abort:()=>{l||(l=!0,u.close())}}}function C(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}async function w(e){if(e.length===0)return[];let t=new FormData;for(let n of e)n.file&&t.append(`file`,n.file,n.name);let n=localStorage.getItem(`hermes_api_key`)||``,r=await fetch(`/upload`,{method:`POST`,body:t,headers:n?{Authorization:`Bearer ${n}`}:{}});if(!r.ok)throw Error(`Upload failed: ${r.status}`);return(await r.json()).files}function T(e){let t=new Map,n=new Map;for(let r of e)if(r.role===`assistant`&&r.tool_calls)for(let e of r.tool_calls)e.id&&(e.function?.name&&t.set(e.id,e.function.name),e.function?.arguments&&n.set(e.id,e.function.arguments));let r=[];for(let i of e){if(i.role===`assistant`&&i.tool_calls?.length&&!i.content?.trim()){for(let e of i.tool_calls)r.push({id:String(i.id)+`_`+e.id,role:`tool`,content:``,timestamp:Math.round(i.timestamp*1e3),toolName:e.function?.name||`tool`,toolArgs:e.function?.arguments||void 0,toolStatus:`done`});continue}if(i.role===`tool`){let e=i.tool_call_id||``,a=i.tool_name||t.get(e)||`tool`,o=n.get(e)||void 0,s=``;if(i.content)try{let e=JSON.parse(i.content);s=e.url||e.title||e.preview||e.summary||``}catch{s=i.content.slice(0,80)}let c=r.findIndex(t=>t.role===`tool`&&t.toolName===a&&!t.toolResult&&t.id.includes(`_`+e));c!==-1&&r.splice(c,1),r.push({id:String(i.id),role:`tool`,content:``,timestamp:Math.round(i.timestamp*1e3),toolName:a,toolArgs:o,toolPreview:typeof s==`string`&&s.slice(0,100)||void 0,toolResult:i.content||void 0,toolStatus:`done`});continue}r.push({id:String(i.id),role:i.role,content:i.content||``,timestamp:Math.round(i.timestamp*1e3)})}return r}function E(e){return{id:e.id,title:e.title||``,source:e.source||void 0,messages:[],createdAt:Math.round(e.started_at*1e3),updatedAt:Math.round((e.ended_at||e.started_at)*1e3),model:e.model,provider:e.billing_provider||``,messageCount:e.message_count,inputTokens:e.input_tokens,outputTokens:e.output_tokens}}var D=`hermes_active_session_`,O=`hermes_sessions_cache_v1_`,k=900*1e3,A=2e3,j=3;function M(){try{return f().activeProfileName||`default`}catch{return`default`}}function N(){return D+M()}function P(){return O+M()}function F(e){return`hermes_session_msgs_v1_${M()}_${e}_`}function I(e){return`hermes_in_flight_v1_${M()}_${e}`}function L(e){try{let t=localStorage.getItem(e);return t?JSON.parse(t):null}catch{return null}}function R(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch{}}function z(e){try{localStorage.removeItem(e)}catch{}}function B(e){return e.map(e=>e.attachments?.length?{...e,attachments:e.attachments.map(e=>({id:e.id,name:e.name,type:e.type,size:e.size,url:e.url}))}:e)}var V=o(`chat`,()=>{let n=t([]),i=t(null),a=t(new Map),o=e(()=>i.value!=null&&a.value.has(i.value)),s=t(!1),c=t(!1),l=t(new Set),u=e(()=>o.value||i.value!=null&&l.value.has(i.value)),f=new Map,g=new Map,_=t(null),v=e(()=>_.value?.messages||[]);function y(){R(P(),n.value.map(e=>({...e,messages:[]})))}function b(){let e=i.value;if(!e)return;let t=n.value.find(t=>t.id===e);t&&R(F(e),B(t.messages))}function D(e,t){R(I(e),{runId:t,startedAt:Date.now()})}function O(e){z(I(e))}function M(e){let t=L(I(e));return t?Date.now()-t.startedAt>k?(z(I(e)),null):t:null}function V(e){let t=f.get(e);t&&(clearInterval(t),f.delete(e)),g.delete(e),l.value=new Set([...l.value].filter(t=>t!==e))}function H(e){if(f.has(e))return;l.value=new Set([...l.value,e]);let t=setInterval(async()=>{if(a.value.has(e)){V(e);return}if(!M(e)){V(e);return}try{let t=await p(e);if(!t)return;let r=T(t.messages||[]),a=n.value.find(t=>t.id===e);if(!a)return;let o=a.messages,s=[...o].reverse().find(e=>e.role===`assistant`),c=[...r].reverse().find(e=>e.role===`assistant`),l=s?.content?.length??0,u=c?.content?.length??0,d=o.filter(e=>e.role===`user`).length,f=r.filter(e=>e.role===`user`).length,m=f>=d;if((f>d||f===d&&u>=l)&&(a.messages=r,a.inputTokens=t.input_tokens,a.outputTokens=t.output_tokens,t.title&&!a.title&&(a.title=t.title),e===i.value&&b()),!m)g.delete(e);else{let n=r[r.length-1],o=`${r.length}|${n?.content?.slice(-40)||``}|${n?.toolStatus||``}`,s=g.get(e);s&&s.sig===o?(s.stableTicks+=1,s.stableTicks>=j&&(a.messages=r,a.inputTokens=t.input_tokens,a.outputTokens=t.output_tokens,t.title&&(a.title=t.title),e===i.value&&b(),O(e),V(e))):g.set(e,{sig:o,stableTicks:0})}}catch{}},A);f.set(e,t)}async function U(){s.value=!0;try{let e=L(P());if(e?.length){n.value=e;let t=localStorage.getItem(N());if(t){let n=e.find(e=>e.id===t)||null;if(n){let e=L(F(t));e&&(n.messages=e),_.value=n,i.value=t}}}let t=(await m()).map(E),r=new Set(t.map(e=>e.id)),a=new Map(n.value.map(e=>[e.id,e.messages]));for(let e of t){let t=a.get(e.id);t&&t.length&&(e.messages=t)}n.value=[...n.value.filter(e=>!r.has(e.id)),...t],y();let o=i.value,s=o&&n.value.some(e=>e.id===o)?o:n.value[0]?.id;s&&await K(s)}catch(e){console.error(`Failed to load sessions:`,e)}finally{s.value=!1}}async function W(){let e=i.value;if(!e)return!1;try{let t=await p(e);if(!t)return!1;let r=n.value.find(t=>t.id===e);return r?(r.messages=T(t.messages||[]),r.inputTokens=t.input_tokens,r.outputTokens=t.output_tokens,t.title&&(r.title=t.title),b(),!0):!1}catch(e){return console.error(`Failed to refresh active session:`,e),!1}}function G(){let e={id:C(),title:``,source:`api_server`,messages:[],createdAt:Date.now(),updatedAt:Date.now()};return n.value.unshift(e),y(),e}async function K(e){if(i.value=e,localStorage.setItem(N(),e),_.value=n.value.find(t=>t.id===e)||null,_.value){if(!(_.value.messages.length>0)){let t=L(F(e));t?.length&&(_.value.messages=t)}_.value.messages.length===0&&(c.value=!0);try{let t=await p(e);if(t&&t.messages){let e=T(t.messages),n=_.value.messages,r=[...n].reverse().find(e=>e.role===`assistant`),i=[...e].reverse().find(e=>e.role===`assistant`),a=r?.content?.length??0,o=i?.content?.length??0,s=n.filter(e=>e.role===`user`).length,c=e.filter(e=>e.role===`user`).length;if((c>s||c===s&&o>=a)&&(_.value.messages=e),_.value.inputTokens=t.input_tokens,_.value.outputTokens=t.output_tokens,t.title)_.value.title=t.title;else if(!_.value.title){let e=_.value.messages.find(e=>e.role===`user`);if(e){let t=e.content.slice(0,40);_.value.title=t+(e.content.length>40?`...`:``)}}b()}}catch(e){console.error(`Failed to load session messages:`,e)}finally{c.value=!1}M(e)&&!a.value.has(e)&&H(e)}}function q(){if(o.value)return;let e=G();e.model=d().selectedModel||void 0,K(e.id)}async function J(e,t){if(_.value&&(_.value.model=e,_.value.provider=t||``,t)){let{useAppStore:n}=await r(async()=>{let{useAppStore:e}=await import(`./app-CjNVVG5x.js`);return{useAppStore:e}},__vite__mapDeps([0,1,2,3]));await n().switchModel(e,t)}}async function Y(e){await h(e),n.value=n.value.filter(t=>t.id!==e),z(F(e)),y(),i.value===e&&(n.value.length>0?await K(n.value[0].id):K(G().id))}function X(e){return n.value.find(t=>t.id===e)?.messages||[]}function Z(e,t){let r=n.value.find(t=>t.id===e);r&&r.messages.push(t)}function Q(e,t,r){let i=n.value.find(t=>t.id===e);if(!i)return;let a=i.messages.findIndex(e=>e.id===t);a!==-1&&(i.messages[a]={...i.messages[a],...r})}function $(e){let t=n.value.find(t=>t.id===e);if(t){if(!t.title){let e=t.messages.find(e=>e.role===`user`);if(e){let n=e.attachments?.length?e.attachments.map(e=>e.name).join(`, `):e.content;t.title=n.slice(0,40)+(n.length>40?`...`:``)}}t.updatedAt=Date.now()}}async function ee(e,t){if(!e.trim()&&!(t&&t.length>0)||o.value)return;_.value||K(G().id);let n=i.value;Z(n,{id:C(),role:`user`,content:e.trim(),timestamp:Date.now(),attachments:t&&t.length>0?t:void 0}),$(n),n===i.value&&(b(),y());try{let r=X(n).filter(e=>(e.role===`user`||e.role===`assistant`)&&e.content.trim()).map(e=>({role:e.role,content:e.content})),o=e.trim();if(t&&t.length>0){let e=(await w(t)).map(e=>`[File: ${e.name}](${e.path})`);o=o?o+`
|
|
3
3
|
|
|
4
4
|
`+e.join(`
|
|
5
5
|
`):e.join(`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{F as e}from"./router-C-NNJUuf.js";import{Y as t}from"./browser-Djp4tkp3.js";import{s as n}from"./Modal-B2zvXTrk.js";function r(){let r=e(n,null);return r===null&&t(`use-dialog`,`No outer <n-dialog-provider /> founded.`),r}export{r as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{F as e,N as t,dt as n,j as r}from"./router-
|
|
1
|
+
import{F as e,N as t,dt as n,j as r}from"./router-C-NNJUuf.js";import{F as i,M as a,N as o,P as s,V as c,ct as l,l as u,st as d,u as f}from"./browser-Djp4tkp3.js";function p(e){return typeof e==`string`?e.endsWith(`px`)?Number(e.slice(0,e.length-2)):Number(e):e}function m(e){if(e!=null)return typeof e==`number`?`${e}px`:e.endsWith(`px`)?e:`${e}px`}function h(e,t){let n=e.trim().split(/\s+/g),r={top:n[0]};switch(n.length){case 1:r.right=n[0],r.bottom=n[0],r.left=n[0];break;case 2:r.right=n[1],r.left=n[1],r.bottom=n[0];break;case 3:r.right=n[1],r.bottom=n[2],r.left=n[1];break;case 4:r.right=n[1],r.bottom=n[2],r.left=n[3];break;default:throw Error(`[seemly/getMargin]:`+e+` is not a valid value.`)}return t===void 0?r:r[t]}var g=`[object Symbol]`;function _(e){return typeof e==`symbol`||o(e)&&s(e)==g}function v(e,t){for(var n=-1,r=e==null?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}var y=1/0,b=i?i.prototype:void 0,x=b?b.toString:void 0;function S(e){if(typeof e==`string`)return e;if(a(e))return v(e,S)+``;if(_(e))return x?x.call(e):``;var t=e+``;return t==`0`&&1/e==-y?`-0`:t}function C(e){return e==null?``:S(e)}function w(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),n=n>i?i:n,n<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(i);++r<i;)a[r]=e[r+t];return a}function T(e,t,n){var r=e.length;return n=n===void 0?r:n,!t&&n>=r?e:w(e,t,n)}var E=RegExp(`[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]`);function D(e){return E.test(e)}function O(e){return e.split(``)}var k=`\\ud800-\\udfff`,A=`\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff`,j=`\\ufe0e\\ufe0f`,M=`[`+k+`]`,N=`[`+A+`]`,P=`\\ud83c[\\udffb-\\udfff]`,F=`(?:`+N+`|`+P+`)`,I=`[^`+k+`]`,L=`(?:\\ud83c[\\udde6-\\uddff]){2}`,R=`[\\ud800-\\udbff][\\udc00-\\udfff]`,z=`\\u200d`,B=F+`?`,V=`[`+j+`]?`,H=`(?:`+z+`(?:`+[I,L,R].join(`|`)+`)`+V+B+`)*`,U=V+B+H,W=`(?:`+[I+N+`?`,N,L,R,M].join(`|`)+`)`,G=RegExp(P+`(?=`+P+`)|`+W+U,`g`);function K(e){return e.match(G)||[]}function q(e){return D(e)?K(e):O(e)}function J(e){return function(t){t=C(t);var n=D(t)?q(t):void 0,r=n?n[0]:t.charAt(0),i=n?T(n,1).join(``):t.slice(1);return r[e]()+i}}var Y=J(`toUpperCase`),X=l(`base-icon`,`
|
|
2
2
|
height: 1em;
|
|
3
3
|
width: 1em;
|
|
4
4
|
line-height: 1em;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[data-v-96c86be9]:root{--bg-primary:#fafafa;--bg-secondary:#f0f0f0;--bg-sidebar:#f5f5f5;--bg-card:#fff;--bg-card-hover:#fafafa;--bg-input:#fff;--border-color:#e0e0e0;--border-light:#ebebeb;--accent-primary:#333;--accent-hover:#1a1a1a;--accent-muted:#888;--text-primary:#1a1a1a;--text-secondary:#666;--text-muted:#999;--success:#2e7d32;--error:#c62828;--warning:#f57f17;--msg-user-bg:#f5f5f5;--msg-assistant-bg:#f5f5f5;--msg-system-border:#bdbdbd;--code-bg:#f4f4f4;--text-on-accent:#fff;--text-on-overlay:#fff;--accent-info:#4a90d9;--accent-primary-rgb:51, 51, 51;--accent-hover-rgb:26, 26, 26;--text-primary-rgb:26, 26, 26;--text-muted-rgb:153, 153, 153;--success-rgb:46, 125, 50;--error-rgb:198, 40, 40;--warning-rgb:245, 127, 23;--accent-info-rgb:74, 144, 217}.dark[data-v-96c86be9]{--bg-primary:#1a1a1a;--bg-secondary:#252525;--bg-sidebar:#202020;--bg-card:#333;--bg-card-hover:#333;--bg-input:#2a2a2a;--border-color:#3a3a3a;--border-light:#333;--accent-primary:#e0e0e0;--accent-hover:#f5f5f5;--accent-muted:#888;--text-primary:#f0f0f0;--text-secondary:silver;--text-muted:#888;--success:#66bb6a;--error:#ef5350;--warning:#ffb74d;--msg-user-bg:#252525;--msg-assistant-bg:#252525;--msg-system-border:#555;--code-bg:#1e1e1e;--text-on-accent:#1a1a1a;--text-on-overlay:#fff;--accent-info:#6ba3d6;--accent-primary-rgb:240, 240, 240;--accent-hover-rgb:245, 245, 245;--text-primary-rgb:240, 240, 240;--text-muted-rgb:136, 136, 136;--success-rgb:102, 187, 106;--error-rgb:239, 83, 80;--warning-rgb:255, 183, 77;--accent-info-rgb:107, 163, 214}.model-selector[data-v-96c86be9]{margin-bottom:8px;padding:0 12px}.model-label[data-v-96c86be9]{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;font-size:11px;font-weight:600}.model-trigger[data-v-96c86be9]{background:var(--bg-input);border:1px solid var(--border-color);width:100%;color:var(--text-primary);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:6px 8px;font-size:13px;transition:border-color .15s;display:flex}.model-trigger[data-v-96c86be9]:hover{border-color:var(--accent-muted)}.model-name[data-v-96c86be9]{text-overflow:ellipsis;white-space:nowrap;text-align:left;flex:1;overflow:hidden}.model-arrow[data-v-96c86be9]{color:var(--text-muted);flex-shrink:0}.model-search[data-v-96c86be9]{margin-bottom:12px}.model-list[data-v-96c86be9]{scrollbar-width:thin;max-height:50vh;overflow-y:auto}.model-group[data-v-96c86be9]{margin-bottom:4px}.model-group-header[data-v-96c86be9]{color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;align-items:center;gap:6px;padding:8px;font-size:12px;font-weight:600;transition:background-color .15s;display:flex}.model-group-header[data-v-96c86be9]:hover{background-color:var(--bg-secondary)}.model-group-arrow[data-v-96c86be9]{flex-shrink:0;transition:transform .15s}.model-group-arrow.collapsed[data-v-96c86be9]{transform:rotate(-90deg)}.model-group-label[data-v-96c86be9]{flex:1}.model-group-count[data-v-96c86be9]{color:var(--text-muted);font-size:11px;font-weight:400}.model-group-items[data-v-96c86be9]{padding-left:8px}.model-item[data-v-96c86be9]{color:var(--text-secondary);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:7px 10px;font-size:13px;transition:all .15s;display:flex}.model-item[data-v-96c86be9]:hover{background-color:rgba(var(--accent-primary-rgb), .06);color:var(--text-primary)}.model-item.active[data-v-96c86be9]{color:var(--accent-primary);font-weight:500}.model-item-name[data-v-96c86be9]{text-overflow:ellipsis;white-space:nowrap;flex:1;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:12px;overflow:hidden}.model-check[data-v-96c86be9]{color:var(--accent-primary);flex-shrink:0}.model-empty[data-v-96c86be9]{text-align:center;color:var(--text-muted);padding:24px 0;font-size:13px}[data-v-64eabb47]:root{--bg-primary:#fafafa;--bg-secondary:#f0f0f0;--bg-sidebar:#f5f5f5;--bg-card:#fff;--bg-card-hover:#fafafa;--bg-input:#fff;--border-color:#e0e0e0;--border-light:#ebebeb;--accent-primary:#333;--accent-hover:#1a1a1a;--accent-muted:#888;--text-primary:#1a1a1a;--text-secondary:#666;--text-muted:#999;--success:#2e7d32;--error:#c62828;--warning:#f57f17;--msg-user-bg:#f5f5f5;--msg-assistant-bg:#f5f5f5;--msg-system-border:#bdbdbd;--code-bg:#f4f4f4;--text-on-accent:#fff;--text-on-overlay:#fff;--accent-info:#4a90d9;--accent-primary-rgb:51, 51, 51;--accent-hover-rgb:26, 26, 26;--text-primary-rgb:26, 26, 26;--text-muted-rgb:153, 153, 153;--success-rgb:46, 125, 50;--error-rgb:198, 40, 40;--warning-rgb:245, 127, 23;--accent-info-rgb:74, 144, 217}.dark[data-v-64eabb47]{--bg-primary:#1a1a1a;--bg-secondary:#252525;--bg-sidebar:#202020;--bg-card:#333;--bg-card-hover:#333;--bg-input:#2a2a2a;--border-color:#3a3a3a;--border-light:#333;--accent-primary:#e0e0e0;--accent-hover:#f5f5f5;--accent-muted:#888;--text-primary:#f0f0f0;--text-secondary:silver;--text-muted:#888;--success:#66bb6a;--error:#ef5350;--warning:#ffb74d;--msg-user-bg:#252525;--msg-assistant-bg:#252525;--msg-system-border:#555;--code-bg:#1e1e1e;--text-on-accent:#1a1a1a;--text-on-overlay:#fff;--accent-info:#6ba3d6;--accent-primary-rgb:240, 240, 240;--accent-hover-rgb:245, 245, 245;--text-primary-rgb:240, 240, 240;--text-muted-rgb:136, 136, 136;--success-rgb:102, 187, 106;--error-rgb:239, 83, 80;--warning-rgb:255, 183, 77;--accent-info-rgb:107, 163, 214}.profile-selector[data-v-64eabb47]{margin-bottom:8px;padding:0 12px}.selector-label[data-v-64eabb47]{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;font-size:11px;font-weight:600}.theme-switch[data-v-c304cee6]{cursor:pointer;width:28px;height:28px;color:var(--text-muted);background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;transition:color .15s,background-color .15s;display:flex}.theme-switch[data-v-c304cee6]:hover{color:var(--text-primary);background:rgba(var(--accent-primary-rgb), .06)}[data-v-cccc99e7]:root{--bg-primary:#fafafa;--bg-secondary:#f0f0f0;--bg-sidebar:#f5f5f5;--bg-card:#fff;--bg-card-hover:#fafafa;--bg-input:#fff;--border-color:#e0e0e0;--border-light:#ebebeb;--accent-primary:#333;--accent-hover:#1a1a1a;--accent-muted:#888;--text-primary:#1a1a1a;--text-secondary:#666;--text-muted:#999;--success:#2e7d32;--error:#c62828;--warning:#f57f17;--msg-user-bg:#f5f5f5;--msg-assistant-bg:#f5f5f5;--msg-system-border:#bdbdbd;--code-bg:#f4f4f4;--text-on-accent:#fff;--text-on-overlay:#fff;--accent-info:#4a90d9;--accent-primary-rgb:51, 51, 51;--accent-hover-rgb:26, 26, 26;--text-primary-rgb:26, 26, 26;--text-muted-rgb:153, 153, 153;--success-rgb:46, 125, 50;--error-rgb:198, 40, 40;--warning-rgb:245, 127, 23;--accent-info-rgb:74, 144, 217}.dark[data-v-cccc99e7]{--bg-primary:#1a1a1a;--bg-secondary:#252525;--bg-sidebar:#202020;--bg-card:#333;--bg-card-hover:#333;--bg-input:#2a2a2a;--border-color:#3a3a3a;--border-light:#333;--accent-primary:#e0e0e0;--accent-hover:#f5f5f5;--accent-muted:#888;--text-primary:#f0f0f0;--text-secondary:silver;--text-muted:#888;--success:#66bb6a;--error:#ef5350;--warning:#ffb74d;--msg-user-bg:#252525;--msg-assistant-bg:#252525;--msg-system-border:#555;--code-bg:#1e1e1e;--text-on-accent:#1a1a1a;--text-on-overlay:#fff;--accent-info:#6ba3d6;--accent-primary-rgb:240, 240, 240;--accent-hover-rgb:245, 245, 245;--text-primary-rgb:240, 240, 240;--text-muted-rgb:136, 136, 136;--success-rgb:102, 187, 106;--error-rgb:239, 83, 80;--warning-rgb:255, 183, 77;--accent-info-rgb:107, 163, 214}.sidebar[data-v-cccc99e7]{width:240px;height:calc(100 * var(--vh));background-color:var(--bg-sidebar);border-right:1px solid var(--border-color);flex-direction:column;flex-shrink:0;padding:0 12px 20px;transition:width .25s;display:flex}.logo-img[data-v-cccc99e7]{border-radius:0;flex-shrink:0;width:28px;height:28px}.sidebar-logo[data-v-cccc99e7]{color:var(--text-primary);cursor:pointer;background-color:var(--bg-card);align-items:center;gap:10px;margin:0 -12px;padding:20px 12px;display:flex;box-shadow:0 2px 8px #00000014}.dark .sidebar-logo[data-v-cccc99e7]{background-color:#393939}.sidebar-logo[data-v-cccc99e7]{position:relative;overflow:hidden}.sidebar-logo .logo-text[data-v-cccc99e7]{letter-spacing:.5px;font-size:18px;font-weight:600}.sidebar-logo .logo-dance[data-v-cccc99e7]{object-fit:contain;pointer-events:none;border-radius:10px;flex-shrink:0;width:auto;height:100px;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.sidebar-nav[data-v-cccc99e7]{scrollbar-width:none;flex-direction:column;flex:1;gap:6px;min-height:0;padding-top:12px;display:flex;overflow-y:auto}.sidebar-nav[data-v-cccc99e7]::-webkit-scrollbar{display:none}.nav-group[data-v-cccc99e7]{flex-direction:column;gap:2px;display:flex}.nav-group.nav-group-bottom[data-v-cccc99e7]{border-top:1px solid var(--border-color);margin-top:auto;padding-top:8px}.nav-group-label[data-v-cccc99e7]{color:var(--text-muted);text-transform:uppercase;letter-spacing:.8px;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:space-between;align-items:center;padding:8px 12px 4px;font-size:10px;font-weight:600;transition:color .15s;display:flex}.nav-group-label[data-v-cccc99e7]:hover{color:var(--text-secondary)}.nav-group:first-child .nav-group-label[data-v-cccc99e7]{padding-top:0}.nav-group-arrow[data-v-cccc99e7]{flex-shrink:0;transition:transform .15s}.nav-group-arrow.collapsed[data-v-cccc99e7]{transform:rotate(-90deg)}.nav-item[data-v-cccc99e7]{color:var(--text-secondary);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;gap:10px;width:100%;padding:12px;font-size:14px;transition:all .15s;display:flex}.nav-item[data-v-cccc99e7]:hover{background-color:rgba(var(--accent-primary-rgb), .06);color:var(--text-primary)}.nav-item.active[data-v-cccc99e7]{background-color:rgba(var(--accent-primary-rgb), .12);color:var(--accent-primary)}.sidebar-footer[data-v-cccc99e7]{border-top:1px solid var(--border-color);padding-top:16px}.status-row[data-v-cccc99e7]{justify-content:space-between;align-items:center;padding:8px 12px;display:flex}.status-indicator[data-v-cccc99e7]{align-items:center;gap:8px;font-size:12px;display:flex}.status-indicator .status-dot[data-v-cccc99e7]{border-radius:50%;flex-shrink:0;width:8px;height:8px}.status-indicator.connected .status-dot[data-v-cccc99e7]{background-color:var(--success);box-shadow:0 0 6px rgba(var(--success-rgb), .5)}.status-indicator.disconnected .status-dot[data-v-cccc99e7]{background-color:var(--error)}.status-indicator .status-text[data-v-cccc99e7]{color:var(--text-secondary)}.version-info[data-v-cccc99e7]{color:var(--text-muted);flex-direction:row;justify-content:space-between;align-items:center;gap:8px;padding:2px 12px 8px;font-size:11px;display:flex}.github-link[data-v-cccc99e7]{color:var(--text-muted);align-items:center;transition:color .2s;display:flex}.github-link[data-v-cccc99e7]:hover{color:var(--text-primary)}.update-btn[data-v-cccc99e7]{border-radius:4px;margin:4px 0 0}@media (width<=768px){.logo-dance[data-v-cccc99e7]{display:none}.status-row[data-v-cccc99e7]{flex-direction:column;align-items:flex-start;gap:8px}.sidebar[data-v-cccc99e7]{z-index:1000;transition:transform .25s;position:fixed;top:0;left:0;transform:translate(-100%)}.sidebar.open[data-v-cccc99e7]{transform:translate(0)}.sidebar .input-sm[data-v-cccc99e7]{width:90px}}[data-v-2fd2e439]:root{--bg-primary:#fafafa;--bg-secondary:#f0f0f0;--bg-sidebar:#f5f5f5;--bg-card:#fff;--bg-card-hover:#fafafa;--bg-input:#fff;--border-color:#e0e0e0;--border-light:#ebebeb;--accent-primary:#333;--accent-hover:#1a1a1a;--accent-muted:#888;--text-primary:#1a1a1a;--text-secondary:#666;--text-muted:#999;--success:#2e7d32;--error:#c62828;--warning:#f57f17;--msg-user-bg:#f5f5f5;--msg-assistant-bg:#f5f5f5;--msg-system-border:#bdbdbd;--code-bg:#f4f4f4;--text-on-accent:#fff;--text-on-overlay:#fff;--accent-info:#4a90d9;--accent-primary-rgb:51, 51, 51;--accent-hover-rgb:26, 26, 26;--text-primary-rgb:26, 26, 26;--text-muted-rgb:153, 153, 153;--success-rgb:46, 125, 50;--error-rgb:198, 40, 40;--warning-rgb:245, 127, 23;--accent-info-rgb:74, 144, 217}.dark[data-v-2fd2e439]{--bg-primary:#1a1a1a;--bg-secondary:#252525;--bg-sidebar:#202020;--bg-card:#333;--bg-card-hover:#333;--bg-input:#2a2a2a;--border-color:#3a3a3a;--border-light:#333;--accent-primary:#e0e0e0;--accent-hover:#f5f5f5;--accent-muted:#888;--text-primary:#f0f0f0;--text-secondary:silver;--text-muted:#888;--success:#66bb6a;--error:#ef5350;--warning:#ffb74d;--msg-user-bg:#252525;--msg-assistant-bg:#252525;--msg-system-border:#555;--code-bg:#1e1e1e;--text-on-accent:#1a1a1a;--text-on-overlay:#fff;--accent-info:#6ba3d6;--accent-primary-rgb:240, 240, 240;--accent-hover-rgb:245, 245, 245;--text-primary-rgb:240, 240, 240;--text-muted-rgb:136, 136, 136;--success-rgb:102, 187, 106;--error-rgb:239, 83, 80;--warning-rgb:255, 183, 77;--accent-info-rgb:107, 163, 214}.app-layout[data-v-2fd2e439]{height:calc(100 * var(--vh));width:100vw;display:flex;overflow:hidden}.app-layout.no-sidebar[data-v-2fd2e439]{display:block}.app-main[data-v-2fd2e439]{background-color:var(--bg-primary);flex:1;overflow-y:auto}.no-sidebar .app-main[data-v-2fd2e439]{height:calc(100 * var(--vh))}:root{--bg-primary:#fafafa;--bg-secondary:#f0f0f0;--bg-sidebar:#f5f5f5;--bg-card:#fff;--bg-card-hover:#fafafa;--bg-input:#fff;--border-color:#e0e0e0;--border-light:#ebebeb;--accent-primary:#333;--accent-hover:#1a1a1a;--accent-muted:#888;--text-primary:#1a1a1a;--text-secondary:#666;--text-muted:#999;--success:#2e7d32;--error:#c62828;--warning:#f57f17;--msg-user-bg:#f5f5f5;--msg-assistant-bg:#f5f5f5;--msg-system-border:#bdbdbd;--code-bg:#f4f4f4;--text-on-accent:#fff;--text-on-overlay:#fff;--accent-info:#4a90d9;--accent-primary-rgb:51, 51, 51;--accent-hover-rgb:26, 26, 26;--text-primary-rgb:26, 26, 26;--text-muted-rgb:153, 153, 153;--success-rgb:46, 125, 50;--error-rgb:198, 40, 40;--warning-rgb:245, 127, 23;--accent-info-rgb:74, 144, 217}.dark{--bg-primary:#1a1a1a;--bg-secondary:#252525;--bg-sidebar:#202020;--bg-card:#333;--bg-card-hover:#333;--bg-input:#2a2a2a;--border-color:#3a3a3a;--border-light:#333;--accent-primary:#e0e0e0;--accent-hover:#f5f5f5;--accent-muted:#888;--text-primary:#f0f0f0;--text-secondary:silver;--text-muted:#888;--success:#66bb6a;--error:#ef5350;--warning:#ffb74d;--msg-user-bg:#252525;--msg-assistant-bg:#252525;--msg-system-border:#555;--code-bg:#1e1e1e;--text-on-accent:#1a1a1a;--text-on-overlay:#fff;--accent-info:#6ba3d6;--accent-primary-rgb:240, 240, 240;--accent-hover-rgb:245, 245, 245;--text-primary-rgb:240, 240, 240;--text-muted-rgb:136, 136, 136;--success-rgb:102, 187, 106;--error-rgb:239, 83, 80;--warning-rgb:255, 183, 77;--accent-info-rgb:107, 163, 214}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--vh:1vh}@supports (height:100dvh){:root{--vh:1dvh}}html.theme-transitioning,html.theme-transitioning *,html.theme-transitioning :before,html.theme-transitioning :after{transition:background-color .3s,color .3s,border-color .3s,box-shadow .3s,fill .3s,stroke .3s!important}html,body,#app{width:100%;height:100%;overflow:hidden}body{background-color:var(--bg-primary);color:var(--text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.6}code,pre,.mono{font-family:JetBrains Mono,Fira Code,Consolas,monospace}a{color:var(--accent-primary);text-decoration:none}a:hover{color:var(--accent-hover)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}::selection{background:rgba(var(--accent-primary-rgb), .3)}.page-header{border-bottom:1px solid var(--border-color);flex-shrink:0;justify-content:space-between;align-items:center;padding:21px 20px;display:flex}.header-title{color:var(--text-primary);font-size:16px;font-weight:600}.input-sm{width:90px}.input-md{width:200px}.input-lg{width:300px}.mobile-backdrop{z-index:999;background:#0006;display:none;position:fixed;inset:0}.hamburger-btn{z-index:1001;background:var(--bg-card);cursor:pointer;border:none;border-radius:6px;justify-content:center;align-items:center;width:36px;height:36px;display:none;position:fixed;top:16px;left:12px;box-shadow:0 1px 4px #0000001a}@media (width<=768px){.mobile-backdrop{display:block}.hamburger-btn{display:flex}.page-header{padding:16px 12px 16px 52px}.input-sm,.input-md,.input-lg{width:100%}}
|