hermes-web-ui 0.5.27 → 0.5.28

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.
Files changed (36) hide show
  1. package/dist/client/assets/js/{ChannelsView-D_Hpf1W2.js → ChannelsView-CuofDTcs.js} +1 -1
  2. package/dist/client/assets/js/{ChatView-DOr-OoTw.js → ChatView-Cpj8e0uj.js} +1 -1
  3. package/dist/client/assets/js/{FileRenameModal-DCzKrCtb.js → FileRenameModal-DS3tMLmA.js} +1 -1
  4. package/dist/client/assets/js/{FilesView-UJ8COV83.js → FilesView-DitPDLfP.js} +1 -1
  5. package/dist/client/assets/js/{GatewaysView-DoaDCbK0.js → GatewaysView-DEwU6CSA.js} +1 -1
  6. package/dist/client/assets/js/{GroupChatView-DnI3I50w.js → GroupChatView-B1KWnK4w.js} +1 -1
  7. package/dist/client/assets/js/{HistoryMessageList-Dppp5myU.js → HistoryMessageList-DVoUuNfX.js} +1 -1
  8. package/dist/client/assets/js/{HistoryView-Bx31cTqX.js → HistoryView-By-yzPZa.js} +1 -1
  9. package/dist/client/assets/js/{JobsView-Dwo25w0R.js → JobsView-CCwgRxCj.js} +1 -1
  10. package/dist/client/assets/js/{KanbanView-B0OXZzdS.js → KanbanView-CHz90gv2.js} +1 -1
  11. package/dist/client/assets/js/{LoginView-BP1Dbycl.js → LoginView-nCg7jCjW.js} +1 -1
  12. package/dist/client/assets/js/{LogsView-Bjv7V7F0.js → LogsView-BXG5oQpY.js} +1 -1
  13. package/dist/client/assets/js/{MarkdownRenderer-CvzCPLnZ.js → MarkdownRenderer-BCFoS7DH.js} +1 -1
  14. package/dist/client/assets/js/{MemoryView-BZqGsRGv.js → MemoryView-DoVkLerx.js} +1 -1
  15. package/dist/client/assets/js/{MessageItem-BzZuEzVW.js → MessageItem-BhSU5oee.js} +1 -1
  16. package/dist/client/assets/js/{ModelsView-Bu2mJnSO.js → ModelsView-BeDBR3tp.js} +1 -1
  17. package/dist/client/assets/js/{PluginsView-Do42kP51.js → PluginsView-D3w2eLIX.js} +1 -1
  18. package/dist/client/assets/js/{ProfilesView-rgzlgeY7.js → ProfilesView-DgEhQ263.js} +1 -1
  19. package/dist/client/assets/js/{SessionListItem-Y4rY8ixs.js → SessionListItem-BKe7QBCc.js} +1 -1
  20. package/dist/client/assets/js/{SettingRow-5JNu2zcB.js → SettingRow-Cj9O4m9X.js} +1 -1
  21. package/dist/client/assets/js/{SettingsView-BsJJZ2sv.js → SettingsView-VtbkRWEM.js} +1 -1
  22. package/dist/client/assets/js/{SkillsUsageView-DmKMulrJ.js → SkillsUsageView-BGvo9h2N.js} +1 -1
  23. package/dist/client/assets/js/{SkillsView-DrUkFlBB.js → SkillsView-DwsnhtnV.js} +1 -1
  24. package/dist/client/assets/js/{TerminalView-HQvnFA42.js → TerminalView-BAlxAV-W.js} +1 -1
  25. package/dist/client/assets/js/{UsageView-DUlZFcoj.js → UsageView-ByfmOWKv.js} +1 -1
  26. package/dist/client/assets/js/{_plugin-vue_export-helper-ZIsfSgrY.js → _plugin-vue_export-helper-CrLlP_D3.js} +2 -2
  27. package/dist/client/assets/js/app-CYaCGxZ_.js +1 -0
  28. package/dist/client/assets/js/{auth-CrqiXkJC.js → auth-hbDI2OUF.js} +1 -1
  29. package/dist/client/assets/js/{index-JI6E-cKo.js → index-Bzb-xLYu.js} +1 -1
  30. package/dist/client/assets/js/{models-BR4rntqB.js → models-CDvVG-uE.js} +1 -1
  31. package/dist/client/assets/js/{session-browser-prefs-DPQy70mA.js → session-browser-prefs-HIgWQY8T.js} +1 -1
  32. package/dist/client/assets/js/{skills-BZYoszrI.js → skills-BCJOb_4y.js} +1 -1
  33. package/dist/client/index.html +3 -3
  34. package/dist/server/index.js +2 -2
  35. package/package.json +2 -2
  36. package/dist/client/assets/js/app-BP-u-rQP.js +0 -1
@@ -1 +1 @@
1
- import{n as x}from"./rolldown-runtime-BKwlnUi0.js";import{Nt as h,R as Je,Rt as k,St as Oe,U as I,Vt as u,X as Ye,Z as V,_t as i,c as el,ct as P,et as T,gt as ll,ht as tl,it as a,nt as z,ot as S,rt as m,st as Q,t as U,tt as t,y as Ee,yt as D,zt as C}from"./ui-vendor-CsTMg6zH.js";import{n as q,r as N}from"./vue-vendor-D8zSB7VM.js";import{n as R,t as H}from"./_plugin-vue_export-helper-ZIsfSgrY.js";import{n as sl,t as A}from"./MarkdownRenderer-CvzCPLnZ.js";import{a as il,l as al,n as E,o as K,r as nl,s as ol}from"./skills-BZYoszrI.js";var W,j,X,Z,G,J,O,Y,ee,le,te,se,ie,ae,ne,oe,re,ue,de,ce,ve,We,ke=x((()=>{I(),U(),K(),q(),W={class:"skill-list"},j={key:0,class:"skill-empty"},X=["onClick"],Z={class:"category-name"},G={class:"category-count"},J={key:0,class:"category-skills"},O=["onClick"],Y={class:"skill-info"},ee={class:"skill-name"},le=["title"],te=["title"],se={key:0,class:"skill-desc"},ie={key:1,class:"skill-category archive-section"},ae={class:"category-name"},ne={class:"category-count"},oe={key:0,class:"category-skills"},re=["onClick"],ue={class:"skill-info"},de={class:"skill-name"},ce=["title"],ve={key:0,class:"skill-desc"},We=P({__name:"SkillList",props:{categories:{},archived:{},selectedSkill:{},searchQuery:{},sourceFilter:{}},emits:["select"],setup(c,{emit:w}){const{t:d}=N(),L=Ee(),n=c,f=w,v=h(new Set),y=h(!0),_=h(new Set),g=T(()=>{let o=n.archived;if(n.sourceFilter&&n.sourceFilter!=="modified"&&(o=o.filter(s=>(s.source||"local")===n.sourceFilter)),n.searchQuery){const s=n.searchQuery.toLowerCase();o=o.filter(l=>l.name.toLowerCase().includes(s)||l.description.toLowerCase().includes(s))}return o}),p=T(()=>{let o=n.categories;if(n.sourceFilter&&(o=o.map(s=>({...s,skills:s.skills.filter(l=>n.sourceFilter==="modified"?l.modified:(l.source||"local")===n.sourceFilter)})).filter(s=>s.skills.length>0)),n.searchQuery){const s=n.searchQuery.toLowerCase();o=o.map(l=>({...l,skills:l.skills.filter(e=>e.name.toLowerCase().includes(s)||e.description.toLowerCase().includes(s))})).filter(l=>l.skills.length>0||l.name.toLowerCase().includes(s))}return o});function b(o){v.value.has(o)?v.value.delete(o):v.value.add(o)}function F(o,s){f("select",o,s)}function B(o,s){return`${o}/${s.name}`}async function M(o,s,l){if(!_.value.has(s)){_.value.add(s);try{await al(s,l);const e=n.categories.find(r=>r.name===o)?.skills.find(r=>r.name===s);e&&(e.enabled=l)}catch(e){L.error(d("skills.toggleFailed")+`: ${e.message}`)}finally{_.value.delete(s)}}}return(o,s)=>(i(),a("div",W,[p.value.length===0?(i(),a("div",j,u(c.searchQuery?k(d)("skills.noMatch"):k(d)("skills.noSkills")),1)):m("",!0),(i(!0),a(V,null,D(p.value,l=>(i(),a("div",{key:l.name,class:"skill-category"},[t("button",{class:"category-header",onClick:e=>b(l.name)},[(i(),a("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",class:C(["category-arrow",{collapsed:v.value.has(l.name)}])},[...s[2]||(s[2]=[t("polyline",{points:"6 9 12 15 18 9"},null,-1)])],2)),t("span",Z,u(l.name),1),t("span",G,u(l.skills.length),1)],8,X),v.value.has(l.name)?m("",!0):(i(),a("div",J,[(i(!0),a(V,null,D(l.skills,e=>(i(),a("button",{key:B(l.name,e),class:C(["skill-item",[{active:c.selectedSkill===B(l.name,e)},`source-${e.source||"local"}`]]),onClick:r=>F(l.name,e.name)},[t("div",Y,[t("span",ee,[t("span",{class:C(["source-dot",`dot-${e.source||"local"}`]),title:k(d)(`skills.source.${e.source||"local"}`)},null,10,le),S(" "+u(e.name)+" ",1),e.modified?(i(),a("span",{key:0,class:"modified-badge",title:k(d)("skills.modified")},"✎",8,te)):m("",!0)]),e.description?(i(),a("span",se,u(e.description),1)):m("",!0)]),Q(k(el),{size:"small",value:e.enabled!==!1,loading:_.value.has(e.name),"onUpdate:value":r=>M(l.name,e.name,r),onClick:s[0]||(s[0]=Ye(()=>{},["stop"]))},null,8,["value","loading","onUpdate:value"])],10,O))),128))]))]))),128)),g.value.length>0||c.archived.length>0?(i(),a("div",ie,[t("button",{class:"category-header archive-header",onClick:s[1]||(s[1]=l=>y.value=!y.value)},[(i(),a("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",class:C(["category-arrow",{collapsed:y.value}])},[...s[3]||(s[3]=[t("polyline",{points:"6 9 12 15 18 9"},null,-1)])],2)),t("span",ae,u(k(d)("skills.archived")),1),t("span",ne,u(c.archived.length),1)]),y.value?m("",!0):(i(),a("div",oe,[(i(!0),a(V,null,D(g.value,l=>(i(),a("button",{key:B(".archive",l),class:C(["skill-item skill-archived",{active:c.selectedSkill===B(".archive",l)}]),onClick:e=>F(".archive",l.name)},[t("div",ue,[t("span",de,[t("span",{class:C(["source-dot",`dot-${l.source||"local"}`]),title:k(d)(`skills.source.${l.source||"local"}`)},null,10,ce),S(" "+u(l.name),1)]),l.description?(i(),a("span",ve,u(l.description),1)):m("",!0)])],10,re))),128))]))])):m("",!0)]))}})})),rl=x((()=>{})),je,ul=x((()=>{ke(),ke(),rl(),R(),je=H(We,[["__scopeId","data-v-e16dc912"]])})),he,_e,ge,pe,fe,me,ye,we,$e,Ce,be,Se,xe,Le,Fe,Be,Me,Ve,Xe,De=x((()=>{I(),sl(),K(),q(),U(),he={class:"skill-detail"},_e={class:"detail-title"},ge={class:"detail-category"},pe={class:"detail-name"},fe={class:"usage-stats"},me=["disabled","title"],ye=["fill"],we={key:0,class:"usage-stat",title:"Views"},$e={key:1,class:"usage-stat",title:"Uses"},Ce={key:2,class:"usage-stat",title:"Patches"},be={key:0,class:"detail-loading"},Se={key:0,class:"detail-breadcrumb"},xe={class:"breadcrumb-path"},Le={class:"detail-content"},Fe={key:1,class:"detail-files"},Be={class:"files-header"},Me={class:"files-list"},Ve=["onClick"],Xe=P({__name:"SkillDetail",props:{category:{},skill:{},skillName:{},patchCount:{},useCount:{},viewCount:{},pinned:{type:Boolean}},emits:["pinToggled"],setup(c,{emit:w}){const{t:d}=N(),L=Ee(),n=c,f=w,v=h(""),y=h([]),_=h(!1),g=h(""),p=h(null),b=h(!1);async function F(){_.value=!0,p.value=null,g.value="",y.value=[],v.value="";try{const l=`${n.category}/${n.skill}/SKILL.md`,[e,r]=await Promise.all([E(l),nl(n.category,n.skill)]);v.value=e,y.value=r.filter($=>!$.isDir&&$.path!=="SKILL.md")}catch(l){v.value=d("skills.loadFailed")+`: ${l.message}`}finally{_.value=!1}}async function B(l){b.value=!0,p.value=l;try{const e=`${n.category}/${n.skill}/`;let r=l;if(l.startsWith("/")){const $=l.split("/.hermes/skills/")[1];$&&(r=$.split("/").slice(2).join("/"))}g.value=await E(`${e}${r}`)}catch(e){g.value=d("skills.fileLoadFailed")+`: ${e.message}`}finally{b.value=!1}}function M(){p.value=null,g.value=""}const o=h(!1);async function s(){if(!o.value){o.value=!0;try{const l=!n.pinned;await ol(n.skillName,l),f("pinToggled",n.skillName,l)}catch(l){L.error(d("skills.pinFailed")+`: ${l.message}`)}finally{o.value=!1}}}return Oe(()=>`${n.category}/${n.skill}`,F,{immediate:!0}),(l,e)=>(i(),a("div",he,[t("div",_e,[t("span",ge,u(c.category),1),e[4]||(e[4]=t("span",{class:"detail-separator"},"/",-1)),t("span",pe,u(c.skill),1),t("div",fe,[t("button",{class:C(["pin-toggle",{active:c.pinned}]),disabled:o.value,title:c.pinned?k(d)("skills.unpin"):k(d)("skills.pin"),onClick:s},[(i(),a("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:c.pinned?"currentColor":"none",stroke:"currentColor","stroke-width":"2"},[...e[0]||(e[0]=[t("path",{d:"M16 12V4h1V2H7v2h1v8l-2 2v2h5.2v6h1.6v-6H18v-2l-2-2z"},null,-1)])],8,ye))],10,me),c.viewCount!=null?(i(),a("span",we,[e[1]||(e[1]=t("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[t("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),t("circle",{cx:"12",cy:"12",r:"3"})],-1)),S(" "+u(c.viewCount),1)])):m("",!0),c.useCount!=null?(i(),a("span",$e,[e[2]||(e[2]=t("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[t("polyline",{points:"13 2 3 14 12 14 11 22 21 10 12 10 13 2"})],-1)),S(" "+u(c.useCount),1)])):m("",!0),c.patchCount!=null?(i(),a("span",Ce,[e[3]||(e[3]=t("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[t("path",{d:"M12 20h9"}),t("path",{d:"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"})],-1)),S(" "+u(c.patchCount),1)])):m("",!0)])]),_.value&&!v.value?(i(),a("div",be,u(k(d)("common.loading")),1)):(i(),a(V,{key:1},[p.value?(i(),a("div",Se,[t("button",{class:"back-btn",onClick:M},[e[5]||(e[5]=t("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[t("polyline",{points:"15 18 9 12 15 6"})],-1)),S(" "+u(k(d)("skills.backTo"))+" "+u(c.skill),1)]),t("span",xe,u(p.value),1)])):m("",!0),t("div",Le,[p.value?(i(),z(A,{key:0,content:g.value},null,8,["content"])):(i(),z(A,{key:1,content:v.value},null,8,["content"]))]),!p.value&&y.value.length>0?(i(),a("div",Fe,[t("div",Be,u(k(d)("skills.attachedFiles")),1),t("div",Me,[(i(!0),a(V,null,D(y.value,r=>(i(),a("button",{key:r.path,class:"file-item",onClick:$=>B(r.path)},[e[6]||(e[6]=t("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[t("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),t("polyline",{points:"14 2 14 8 20 8"})],-1)),t("span",null,u(r.path),1)],8,Ve))),128))])])):m("",!0)],64))]))}})})),dl=x((()=>{})),Ze,cl=x((()=>{De(),De(),dl(),R(),Ze=H(Xe,[["__scopeId","data-v-eb0d518d"]])})),Te,ze,Qe,Ie,Pe,Ue,qe,Ne,Re,He,Ke,Ge,Ae=x((()=>{I(),U(),q(),ul(),cl(),K(),Te={class:"skills-view"},ze={class:"page-header"},Qe={style:{display:"flex","align-items":"center",gap:"8px"}},Ie={class:"header-title"},Pe={class:"source-legend"},Ue={class:"skills-content"},qe={key:0,class:"skills-loading"},Ne={key:1,class:"skills-layout"},Re={key:0,class:"skills-sidebar"},He={class:"skills-main"},Ke={key:1,class:"empty-detail"},Ge=P({__name:"SkillsView",setup(c){const{t:w}=N(),d=h([]),L=h([]),n=h(!1),f=h(""),v=h(""),y=h(""),_=h(!0),g=h(null);let p=null;const b=T(()=>!f.value||!v.value?null:f.value===".archive"?L.value.find(l=>l.name===v.value)??null:d.value.find(l=>l.name===f.value)?.skills.find(l=>l.name===v.value)??null);function F(l){_.value=!l.matches}tl(()=>{p=window.matchMedia("(max-width: 768px)"),F(p),p.addEventListener("change",F),B()}),ll(()=>{p?.removeEventListener("change",F)});async function B(){n.value=!0;try{const l=await il();d.value=l.categories,L.value=l.archived}catch(l){console.error("Failed to load skills:",l)}finally{n.value=!1}}function M(l){g.value=g.value===l?null:l}function o(l,e){f.value=l,v.value=e,window.innerWidth<=768&&(_.value=!1)}function s(l,e){if(f.value===".archive"){const r=L.value.find($=>$.name===l);r&&(r.pinned=e)}else{const r=d.value.find($=>$.name===f.value)?.skills.find($=>$.name===l);r&&(r.pinned=e)}}return(l,e)=>(i(),a("div",Te,[t("header",ze,[t("div",Qe,[t("h2",Ie,u(k(w)("skills.title")),1),_.value?m("",!0):(i(),a("button",{key:0,class:"sidebar-toggle",onClick:e[0]||(e[0]=r=>_.value=!0)},[...e[7]||(e[7]=[t("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[t("line",{x1:"3",y1:"12",x2:"21",y2:"12"}),t("line",{x1:"3",y1:"6",x2:"21",y2:"6"}),t("line",{x1:"3",y1:"18",x2:"21",y2:"18"})],-1)])]))]),t("div",Pe,[t("button",{class:C(["legend-item",{active:g.value==="builtin"}]),onClick:e[1]||(e[1]=r=>M("builtin"))},[e[8]||(e[8]=t("span",{class:"legend-dot dot-builtin"},null,-1)),S(u(k(w)("skills.source.builtin")),1)],2),t("button",{class:C(["legend-item",{active:g.value==="hub"}]),onClick:e[2]||(e[2]=r=>M("hub"))},[e[9]||(e[9]=t("span",{class:"legend-dot dot-hub"},null,-1)),S(u(k(w)("skills.source.hub")),1)],2),t("button",{class:C(["legend-item",{active:g.value==="local"}]),onClick:e[3]||(e[3]=r=>M("local"))},[e[10]||(e[10]=t("span",{class:"legend-dot dot-local"},null,-1)),S(u(k(w)("skills.source.local")),1)],2),t("button",{class:C(["legend-item",{active:g.value==="modified"}]),onClick:e[4]||(e[4]=r=>M("modified"))},[e[11]||(e[11]=t("span",{class:"modified-icon"},"✎",-1)),S(u(k(w)("skills.modified")),1)],2)]),Q(k(Je),{value:y.value,"onUpdate:value":e[5]||(e[5]=r=>y.value=r),placeholder:k(w)("skills.searchPlaceholder"),size:"small",clearable:"",style:{width:"160px"}},null,8,["value","placeholder"])]),t("div",Ue,[n.value&&d.value.length===0?(i(),a("div",qe,u(k(w)("common.loading")),1)):(i(),a("div",Ne,[t("div",{class:C(["mobile-backdrop",{active:_.value}]),onClick:e[6]||(e[6]=r=>_.value=!1)},null,2),_.value?(i(),a("div",Re,[Q(je,{categories:d.value,archived:L.value,"selected-skill":f.value&&v.value?`${f.value}/${v.value}`:null,"search-query":y.value,"source-filter":g.value,onSelect:o},null,8,["categories","archived","selected-skill","search-query","source-filter"])])):m("",!0),t("div",He,[f.value&&v.value?(i(),z(Ze,{key:0,category:f.value,skill:v.value,"skill-name":b.value?.name||v.value,"patch-count":b.value?.patchCount,"use-count":b.value?.useCount,"view-count":b.value?.viewCount,pinned:b.value?.pinned,onPinToggled:s},null,8,["category","skill","skill-name","patch-count","use-count","view-count","pinned"])):(i(),a("div",Ke,[e[12]||(e[12]=t("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1",opacity:"0.2"},[t("polygon",{points:"12 2 2 7 12 12 22 7 12 2"}),t("polyline",{points:"2 17 12 22 22 17"}),t("polyline",{points:"2 12 12 17 22 12"})],-1)),t("span",null,u(k(w)("skills.noMatch")),1)]))])]))])]))}})})),vl=x((()=>{})),kl,hl=x((()=>{Ae(),Ae(),vl(),R(),kl=H(Ge,[["__scopeId","data-v-86838938"]])}));hl();export{kl as default};
1
+ import{n as x}from"./rolldown-runtime-BKwlnUi0.js";import{Nt as h,R as Je,Rt as k,St as Oe,U as I,Vt as u,X as Ye,Z as V,_t as i,c as el,ct as P,et as T,gt as ll,ht as tl,it as a,nt as z,ot as S,rt as m,st as Q,t as U,tt as t,y as Ee,yt as D,zt as C}from"./ui-vendor-CsTMg6zH.js";import{n as q,r as N}from"./vue-vendor-D8zSB7VM.js";import{n as R,t as H}from"./_plugin-vue_export-helper-CrLlP_D3.js";import{n as sl,t as A}from"./MarkdownRenderer-BCFoS7DH.js";import{a as il,l as al,n as E,o as K,r as nl,s as ol}from"./skills-BCJOb_4y.js";var W,j,X,Z,G,J,O,Y,ee,le,te,se,ie,ae,ne,oe,re,ue,de,ce,ve,We,ke=x((()=>{I(),U(),K(),q(),W={class:"skill-list"},j={key:0,class:"skill-empty"},X=["onClick"],Z={class:"category-name"},G={class:"category-count"},J={key:0,class:"category-skills"},O=["onClick"],Y={class:"skill-info"},ee={class:"skill-name"},le=["title"],te=["title"],se={key:0,class:"skill-desc"},ie={key:1,class:"skill-category archive-section"},ae={class:"category-name"},ne={class:"category-count"},oe={key:0,class:"category-skills"},re=["onClick"],ue={class:"skill-info"},de={class:"skill-name"},ce=["title"],ve={key:0,class:"skill-desc"},We=P({__name:"SkillList",props:{categories:{},archived:{},selectedSkill:{},searchQuery:{},sourceFilter:{}},emits:["select"],setup(c,{emit:w}){const{t:d}=N(),L=Ee(),n=c,f=w,v=h(new Set),y=h(!0),_=h(new Set),g=T(()=>{let o=n.archived;if(n.sourceFilter&&n.sourceFilter!=="modified"&&(o=o.filter(s=>(s.source||"local")===n.sourceFilter)),n.searchQuery){const s=n.searchQuery.toLowerCase();o=o.filter(l=>l.name.toLowerCase().includes(s)||l.description.toLowerCase().includes(s))}return o}),p=T(()=>{let o=n.categories;if(n.sourceFilter&&(o=o.map(s=>({...s,skills:s.skills.filter(l=>n.sourceFilter==="modified"?l.modified:(l.source||"local")===n.sourceFilter)})).filter(s=>s.skills.length>0)),n.searchQuery){const s=n.searchQuery.toLowerCase();o=o.map(l=>({...l,skills:l.skills.filter(e=>e.name.toLowerCase().includes(s)||e.description.toLowerCase().includes(s))})).filter(l=>l.skills.length>0||l.name.toLowerCase().includes(s))}return o});function b(o){v.value.has(o)?v.value.delete(o):v.value.add(o)}function F(o,s){f("select",o,s)}function B(o,s){return`${o}/${s.name}`}async function M(o,s,l){if(!_.value.has(s)){_.value.add(s);try{await al(s,l);const e=n.categories.find(r=>r.name===o)?.skills.find(r=>r.name===s);e&&(e.enabled=l)}catch(e){L.error(d("skills.toggleFailed")+`: ${e.message}`)}finally{_.value.delete(s)}}}return(o,s)=>(i(),a("div",W,[p.value.length===0?(i(),a("div",j,u(c.searchQuery?k(d)("skills.noMatch"):k(d)("skills.noSkills")),1)):m("",!0),(i(!0),a(V,null,D(p.value,l=>(i(),a("div",{key:l.name,class:"skill-category"},[t("button",{class:"category-header",onClick:e=>b(l.name)},[(i(),a("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",class:C(["category-arrow",{collapsed:v.value.has(l.name)}])},[...s[2]||(s[2]=[t("polyline",{points:"6 9 12 15 18 9"},null,-1)])],2)),t("span",Z,u(l.name),1),t("span",G,u(l.skills.length),1)],8,X),v.value.has(l.name)?m("",!0):(i(),a("div",J,[(i(!0),a(V,null,D(l.skills,e=>(i(),a("button",{key:B(l.name,e),class:C(["skill-item",[{active:c.selectedSkill===B(l.name,e)},`source-${e.source||"local"}`]]),onClick:r=>F(l.name,e.name)},[t("div",Y,[t("span",ee,[t("span",{class:C(["source-dot",`dot-${e.source||"local"}`]),title:k(d)(`skills.source.${e.source||"local"}`)},null,10,le),S(" "+u(e.name)+" ",1),e.modified?(i(),a("span",{key:0,class:"modified-badge",title:k(d)("skills.modified")},"✎",8,te)):m("",!0)]),e.description?(i(),a("span",se,u(e.description),1)):m("",!0)]),Q(k(el),{size:"small",value:e.enabled!==!1,loading:_.value.has(e.name),"onUpdate:value":r=>M(l.name,e.name,r),onClick:s[0]||(s[0]=Ye(()=>{},["stop"]))},null,8,["value","loading","onUpdate:value"])],10,O))),128))]))]))),128)),g.value.length>0||c.archived.length>0?(i(),a("div",ie,[t("button",{class:"category-header archive-header",onClick:s[1]||(s[1]=l=>y.value=!y.value)},[(i(),a("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",class:C(["category-arrow",{collapsed:y.value}])},[...s[3]||(s[3]=[t("polyline",{points:"6 9 12 15 18 9"},null,-1)])],2)),t("span",ae,u(k(d)("skills.archived")),1),t("span",ne,u(c.archived.length),1)]),y.value?m("",!0):(i(),a("div",oe,[(i(!0),a(V,null,D(g.value,l=>(i(),a("button",{key:B(".archive",l),class:C(["skill-item skill-archived",{active:c.selectedSkill===B(".archive",l)}]),onClick:e=>F(".archive",l.name)},[t("div",ue,[t("span",de,[t("span",{class:C(["source-dot",`dot-${l.source||"local"}`]),title:k(d)(`skills.source.${l.source||"local"}`)},null,10,ce),S(" "+u(l.name),1)]),l.description?(i(),a("span",ve,u(l.description),1)):m("",!0)])],10,re))),128))]))])):m("",!0)]))}})})),rl=x((()=>{})),je,ul=x((()=>{ke(),ke(),rl(),R(),je=H(We,[["__scopeId","data-v-e16dc912"]])})),he,_e,ge,pe,fe,me,ye,we,$e,Ce,be,Se,xe,Le,Fe,Be,Me,Ve,Xe,De=x((()=>{I(),sl(),K(),q(),U(),he={class:"skill-detail"},_e={class:"detail-title"},ge={class:"detail-category"},pe={class:"detail-name"},fe={class:"usage-stats"},me=["disabled","title"],ye=["fill"],we={key:0,class:"usage-stat",title:"Views"},$e={key:1,class:"usage-stat",title:"Uses"},Ce={key:2,class:"usage-stat",title:"Patches"},be={key:0,class:"detail-loading"},Se={key:0,class:"detail-breadcrumb"},xe={class:"breadcrumb-path"},Le={class:"detail-content"},Fe={key:1,class:"detail-files"},Be={class:"files-header"},Me={class:"files-list"},Ve=["onClick"],Xe=P({__name:"SkillDetail",props:{category:{},skill:{},skillName:{},patchCount:{},useCount:{},viewCount:{},pinned:{type:Boolean}},emits:["pinToggled"],setup(c,{emit:w}){const{t:d}=N(),L=Ee(),n=c,f=w,v=h(""),y=h([]),_=h(!1),g=h(""),p=h(null),b=h(!1);async function F(){_.value=!0,p.value=null,g.value="",y.value=[],v.value="";try{const l=`${n.category}/${n.skill}/SKILL.md`,[e,r]=await Promise.all([E(l),nl(n.category,n.skill)]);v.value=e,y.value=r.filter($=>!$.isDir&&$.path!=="SKILL.md")}catch(l){v.value=d("skills.loadFailed")+`: ${l.message}`}finally{_.value=!1}}async function B(l){b.value=!0,p.value=l;try{const e=`${n.category}/${n.skill}/`;let r=l;if(l.startsWith("/")){const $=l.split("/.hermes/skills/")[1];$&&(r=$.split("/").slice(2).join("/"))}g.value=await E(`${e}${r}`)}catch(e){g.value=d("skills.fileLoadFailed")+`: ${e.message}`}finally{b.value=!1}}function M(){p.value=null,g.value=""}const o=h(!1);async function s(){if(!o.value){o.value=!0;try{const l=!n.pinned;await ol(n.skillName,l),f("pinToggled",n.skillName,l)}catch(l){L.error(d("skills.pinFailed")+`: ${l.message}`)}finally{o.value=!1}}}return Oe(()=>`${n.category}/${n.skill}`,F,{immediate:!0}),(l,e)=>(i(),a("div",he,[t("div",_e,[t("span",ge,u(c.category),1),e[4]||(e[4]=t("span",{class:"detail-separator"},"/",-1)),t("span",pe,u(c.skill),1),t("div",fe,[t("button",{class:C(["pin-toggle",{active:c.pinned}]),disabled:o.value,title:c.pinned?k(d)("skills.unpin"):k(d)("skills.pin"),onClick:s},[(i(),a("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:c.pinned?"currentColor":"none",stroke:"currentColor","stroke-width":"2"},[...e[0]||(e[0]=[t("path",{d:"M16 12V4h1V2H7v2h1v8l-2 2v2h5.2v6h1.6v-6H18v-2l-2-2z"},null,-1)])],8,ye))],10,me),c.viewCount!=null?(i(),a("span",we,[e[1]||(e[1]=t("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[t("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),t("circle",{cx:"12",cy:"12",r:"3"})],-1)),S(" "+u(c.viewCount),1)])):m("",!0),c.useCount!=null?(i(),a("span",$e,[e[2]||(e[2]=t("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[t("polyline",{points:"13 2 3 14 12 14 11 22 21 10 12 10 13 2"})],-1)),S(" "+u(c.useCount),1)])):m("",!0),c.patchCount!=null?(i(),a("span",Ce,[e[3]||(e[3]=t("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[t("path",{d:"M12 20h9"}),t("path",{d:"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"})],-1)),S(" "+u(c.patchCount),1)])):m("",!0)])]),_.value&&!v.value?(i(),a("div",be,u(k(d)("common.loading")),1)):(i(),a(V,{key:1},[p.value?(i(),a("div",Se,[t("button",{class:"back-btn",onClick:M},[e[5]||(e[5]=t("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[t("polyline",{points:"15 18 9 12 15 6"})],-1)),S(" "+u(k(d)("skills.backTo"))+" "+u(c.skill),1)]),t("span",xe,u(p.value),1)])):m("",!0),t("div",Le,[p.value?(i(),z(A,{key:0,content:g.value},null,8,["content"])):(i(),z(A,{key:1,content:v.value},null,8,["content"]))]),!p.value&&y.value.length>0?(i(),a("div",Fe,[t("div",Be,u(k(d)("skills.attachedFiles")),1),t("div",Me,[(i(!0),a(V,null,D(y.value,r=>(i(),a("button",{key:r.path,class:"file-item",onClick:$=>B(r.path)},[e[6]||(e[6]=t("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[t("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),t("polyline",{points:"14 2 14 8 20 8"})],-1)),t("span",null,u(r.path),1)],8,Ve))),128))])])):m("",!0)],64))]))}})})),dl=x((()=>{})),Ze,cl=x((()=>{De(),De(),dl(),R(),Ze=H(Xe,[["__scopeId","data-v-eb0d518d"]])})),Te,ze,Qe,Ie,Pe,Ue,qe,Ne,Re,He,Ke,Ge,Ae=x((()=>{I(),U(),q(),ul(),cl(),K(),Te={class:"skills-view"},ze={class:"page-header"},Qe={style:{display:"flex","align-items":"center",gap:"8px"}},Ie={class:"header-title"},Pe={class:"source-legend"},Ue={class:"skills-content"},qe={key:0,class:"skills-loading"},Ne={key:1,class:"skills-layout"},Re={key:0,class:"skills-sidebar"},He={class:"skills-main"},Ke={key:1,class:"empty-detail"},Ge=P({__name:"SkillsView",setup(c){const{t:w}=N(),d=h([]),L=h([]),n=h(!1),f=h(""),v=h(""),y=h(""),_=h(!0),g=h(null);let p=null;const b=T(()=>!f.value||!v.value?null:f.value===".archive"?L.value.find(l=>l.name===v.value)??null:d.value.find(l=>l.name===f.value)?.skills.find(l=>l.name===v.value)??null);function F(l){_.value=!l.matches}tl(()=>{p=window.matchMedia("(max-width: 768px)"),F(p),p.addEventListener("change",F),B()}),ll(()=>{p?.removeEventListener("change",F)});async function B(){n.value=!0;try{const l=await il();d.value=l.categories,L.value=l.archived}catch(l){console.error("Failed to load skills:",l)}finally{n.value=!1}}function M(l){g.value=g.value===l?null:l}function o(l,e){f.value=l,v.value=e,window.innerWidth<=768&&(_.value=!1)}function s(l,e){if(f.value===".archive"){const r=L.value.find($=>$.name===l);r&&(r.pinned=e)}else{const r=d.value.find($=>$.name===f.value)?.skills.find($=>$.name===l);r&&(r.pinned=e)}}return(l,e)=>(i(),a("div",Te,[t("header",ze,[t("div",Qe,[t("h2",Ie,u(k(w)("skills.title")),1),_.value?m("",!0):(i(),a("button",{key:0,class:"sidebar-toggle",onClick:e[0]||(e[0]=r=>_.value=!0)},[...e[7]||(e[7]=[t("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[t("line",{x1:"3",y1:"12",x2:"21",y2:"12"}),t("line",{x1:"3",y1:"6",x2:"21",y2:"6"}),t("line",{x1:"3",y1:"18",x2:"21",y2:"18"})],-1)])]))]),t("div",Pe,[t("button",{class:C(["legend-item",{active:g.value==="builtin"}]),onClick:e[1]||(e[1]=r=>M("builtin"))},[e[8]||(e[8]=t("span",{class:"legend-dot dot-builtin"},null,-1)),S(u(k(w)("skills.source.builtin")),1)],2),t("button",{class:C(["legend-item",{active:g.value==="hub"}]),onClick:e[2]||(e[2]=r=>M("hub"))},[e[9]||(e[9]=t("span",{class:"legend-dot dot-hub"},null,-1)),S(u(k(w)("skills.source.hub")),1)],2),t("button",{class:C(["legend-item",{active:g.value==="local"}]),onClick:e[3]||(e[3]=r=>M("local"))},[e[10]||(e[10]=t("span",{class:"legend-dot dot-local"},null,-1)),S(u(k(w)("skills.source.local")),1)],2),t("button",{class:C(["legend-item",{active:g.value==="modified"}]),onClick:e[4]||(e[4]=r=>M("modified"))},[e[11]||(e[11]=t("span",{class:"modified-icon"},"✎",-1)),S(u(k(w)("skills.modified")),1)],2)]),Q(k(Je),{value:y.value,"onUpdate:value":e[5]||(e[5]=r=>y.value=r),placeholder:k(w)("skills.searchPlaceholder"),size:"small",clearable:"",style:{width:"160px"}},null,8,["value","placeholder"])]),t("div",Ue,[n.value&&d.value.length===0?(i(),a("div",qe,u(k(w)("common.loading")),1)):(i(),a("div",Ne,[t("div",{class:C(["mobile-backdrop",{active:_.value}]),onClick:e[6]||(e[6]=r=>_.value=!1)},null,2),_.value?(i(),a("div",Re,[Q(je,{categories:d.value,archived:L.value,"selected-skill":f.value&&v.value?`${f.value}/${v.value}`:null,"search-query":y.value,"source-filter":g.value,onSelect:o},null,8,["categories","archived","selected-skill","search-query","source-filter"])])):m("",!0),t("div",He,[f.value&&v.value?(i(),z(Ze,{key:0,category:f.value,skill:v.value,"skill-name":b.value?.name||v.value,"patch-count":b.value?.patchCount,"use-count":b.value?.useCount,"view-count":b.value?.viewCount,pinned:b.value?.pinned,onPinToggled:s},null,8,["category","skill","skill-name","patch-count","use-count","view-count","pinned"])):(i(),a("div",Ke,[e[12]||(e[12]=t("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1",opacity:"0.2"},[t("polygon",{points:"12 2 2 7 12 12 22 7 12 2"}),t("polyline",{points:"2 17 12 22 22 17"}),t("polyline",{points:"2 12 12 17 22 12"})],-1)),t("span",null,u(k(w)("skills.noMatch")),1)]))])]))])]))}})})),vl=x((()=>{})),kl,hl=x((()=>{Ae(),Ae(),vl(),R(),kl=H(Ge,[["__scopeId","data-v-86838938"]])}));hl();export{kl as default};
@@ -1,3 +1,3 @@
1
- import{n as S}from"./rolldown-runtime-BKwlnUi0.js";import{Bt as xe,E as Te,F as G,Nt as w,Rt as n,U as Me,Vt as f,X as Se,Z as Ae,_t as d,ct as Re,d as We,et as L,gt as Ye,ht as Ee,it as b,k as Ge,nt as Le,ot as z,rt as p,st as B,t as ze,tt as r,wt as h,y as Oe,yt as $e,zt as O}from"./ui-vendor-CsTMg6zH.js";import{n as Ne,r as Ve}from"./vue-vendor-D8zSB7VM.js";import{a as De,c as Ie,n as Ue,o as Pe,t as Fe}from"./_plugin-vue_export-helper-ZIsfSgrY.js";import{a as He,i as Xe,n as je,o as qe,r as Je,s as Ke,t as Qe}from"./xterm-CN_HBdCu.js";var P,F,H,X,j,q,J,K,Q,Z,ee,te,ae,re,ie,ne,le,oe,ce,$,N,fe,se=S((()=>{Me(),Ke(),Xe(),Je(),Qe(),Ie(),ze(),Ne(),P={class:"terminal-panel"},F={class:"session-list-header"},H={key:0,class:"session-list-title"},X={class:"session-list-actions"},j={key:0,class:"session-items"},q={key:0,class:"session-empty"},J=["onClick"],K={class:"session-item-content"},Q={class:"session-item-title"},Z={class:"session-item-meta"},ee={class:"session-item-shell"},te={key:0,class:"session-item-status"},ae={key:1,class:"session-item-time"},re={class:"terminal-main"},ie={class:"terminal-header"},ne={class:"header-left"},le={key:0,class:"header-session-title"},oe={class:"header-actions"},ce={class:"terminal-container"},$="hermes_terminal_theme",N=18,fe=Re({__name:"TerminalView",setup(rt){const{t:g}=Ve(),de=Oe(),C={default:{label:"Default",theme:{background:"#1a1a2e",foreground:"#e0e0e0",cursor:"#4cc9f0",cursorAccent:"#1a1a2e",selectionBackground:"rgba(76, 201, 240, 0.3)",black:"#000000",red:"#e06c75",green:"#98c379",yellow:"#e5c07b",blue:"#61afef",magenta:"#c678dd",cyan:"#56b6c2",white:"#abb2bf",brightBlack:"#5c6370",brightRed:"#e06c75",brightGreen:"#98c379",brightYellow:"#e5c07b",brightBlue:"#61afef",brightMagenta:"#c678dd",brightCyan:"#56b6c2",brightWhite:"#ffffff"}},"solarized-dark":{label:"Solarized Dark",theme:{background:"#002b36",foreground:"#839496",cursor:"#93a1a1",cursorAccent:"#002b36",selectionBackground:"rgba(147, 161, 161, 0.3)",black:"#073642",red:"#dc322f",green:"#859900",yellow:"#b58900",blue:"#268bd2",magenta:"#d33682",cyan:"#2aa198",white:"#eee8d5",brightBlack:"#002b36",brightRed:"#cb4b16",brightGreen:"#586e75",brightYellow:"#657b83",brightBlue:"#839496",brightMagenta:"#6c71c4",brightCyan:"#93a1a1",brightWhite:"#fdf6e3"}},"solarized-light":{label:"Solarized Light",theme:{background:"#fdf6e3",foreground:"#657b83",cursor:"#586e75",cursorAccent:"#fdf6e3",selectionBackground:"rgba(88, 110, 117, 0.3)",black:"#073642",red:"#dc322f",green:"#859900",yellow:"#b58900",blue:"#268bd2",magenta:"#d33682",cyan:"#2aa198",white:"#eee8d5",brightBlack:"#002b36",brightRed:"#cb4b16",brightGreen:"#586e75",brightYellow:"#657b83",brightBlue:"#839496",brightMagenta:"#6c71c4",brightCyan:"#93a1a1",brightWhite:"#fdf6e3"}},monokai:{label:"Monokai",theme:{background:"#272822",foreground:"#f8f8f2",cursor:"#f8f8f0",cursorAccent:"#272822",selectionBackground:"rgba(248, 248, 242, 0.2)",black:"#272822",red:"#f92672",green:"#a6e22e",yellow:"#f4bf75",blue:"#66d9ef",magenta:"#ae81ff",cyan:"#a1efe4",white:"#f8f8f2",brightBlack:"#75715e",brightRed:"#fd971f",brightGreen:"#a6e22e",brightYellow:"#e6db74",brightBlue:"#66d9ef",brightMagenta:"#ae81ff",brightCyan:"#a1efe4",brightWhite:"#f9f8f5"}},dracula:{label:"Dracula",theme:{background:"#282a36",foreground:"#f8f8f2",cursor:"#f8f8f2",cursorAccent:"#282a36",selectionBackground:"rgba(248, 248, 242, 0.2)",black:"#21222c",red:"#ff5555",green:"#50fa7b",yellow:"#f1fa8c",blue:"#bd93f9",magenta:"#ff79c6",cyan:"#8be9fd",white:"#f8f8f2",brightBlack:"#6272a4",brightRed:"#ff6e6e",brightGreen:"#69ff94",brightYellow:"#ffffa5",brightBlue:"#d6acff",brightMagenta:"#ff92df",brightCyan:"#a4ffff",brightWhite:"#ffffff"}},nord:{label:"Nord",theme:{background:"#2e3440",foreground:"#d8dee9",cursor:"#d8dee9",cursorAccent:"#2e3440",selectionBackground:"rgba(216, 222, 233, 0.2)",black:"#3b4252",red:"#bf616a",green:"#a3be8c",yellow:"#ebcb8b",blue:"#81a1c1",magenta:"#b48ead",cyan:"#88c0d0",white:"#e5e9f0",brightBlack:"#4c566a",brightRed:"#bf616a",brightGreen:"#a3be8c",brightYellow:"#ebcb8b",brightBlue:"#81a1c1",brightMagenta:"#b48ead",brightCyan:"#8fbcbb",brightWhite:"#eceff4"}},"one-dark":{label:"One Dark",theme:{background:"#282c34",foreground:"#abb2bf",cursor:"#528bff",cursorAccent:"#282c34",selectionBackground:"rgba(82, 139, 255, 0.25)",black:"#282c34",red:"#e06c75",green:"#98c379",yellow:"#e5c07b",blue:"#61afef",magenta:"#c678dd",cyan:"#56b6c2",white:"#abb2bf",brightBlack:"#5c6370",brightRed:"#e06c75",brightGreen:"#98c379",brightYellow:"#e5c07b",brightBlue:"#61afef",brightMagenta:"#c678dd",brightCyan:"#56b6c2",brightWhite:"#ffffff"}},"github-dark":{label:"GitHub Dark",theme:{background:"#0d1117",foreground:"#c9d1d9",cursor:"#58a6ff",cursorAccent:"#0d1117",selectionBackground:"rgba(88, 166, 255, 0.25)",black:"#484f58",red:"#ff7b72",green:"#7ee787",yellow:"#ffa657",blue:"#79c0ff",magenta:"#d2a8ff",cyan:"#a5d6ff",white:"#c9d1d9",brightBlack:"#6e7681",brightRed:"#ffa198",brightGreen:"#56d364",brightYellow:"#e3b341",brightBlue:"#58a6ff",brightMagenta:"#bc8cff",brightCyan:"#79c0ff",brightWhite:"#f0f6fc"}},"tokyo-night":{label:"Tokyo Night",theme:{background:"#1a1b26",foreground:"#a9b1d6",cursor:"#c0caf5",cursorAccent:"#1a1b26",selectionBackground:"rgba(192, 202, 245, 0.2)",black:"#15161e",red:"#f7768e",green:"#9ece6a",yellow:"#e0af68",blue:"#7aa2f7",magenta:"#bb9af7",cyan:"#7dcfff",white:"#a9b1d6",brightBlack:"#414868",brightRed:"#f7768e",brightGreen:"#9ece6a",brightYellow:"#e0af68",brightBlue:"#7aa2f7",brightMagenta:"#bb9af7",brightCyan:"#7dcfff",brightWhite:"#c0caf5"}},"github-light":{label:"GitHub Light",theme:{background:"#ffffff",foreground:"#24292f",cursor:"#0969da",cursorAccent:"#ffffff",selectionBackground:"rgba(9, 105, 218, 0.2)",black:"#24292f",red:"#cf222e",green:"#116329",yellow:"#4d2d00",blue:"#0969da",magenta:"#8250df",cyan:"#1b7c83",white:"#57606a",brightBlack:"#57606a",brightRed:"#a40e26",brightGreen:"#1a7f37",brightYellow:"#633c01",brightBlue:"#218bff",brightMagenta:"#a475f4",brightCyan:"#3192aa",brightWhite:"#8c959f"}},"catppuccin-latte":{label:"Catppuccin Latte",theme:{background:"#eff1f5",foreground:"#4c4f69",cursor:"#dc8a78",cursorAccent:"#eff1f5",selectionBackground:"rgba(220, 138, 120, 0.2)",black:"#5c5f77",red:"#d20f39",green:"#40a02b",yellow:"#df8e1d",blue:"#1e66f5",magenta:"#ea76cb",cyan:"#179299",white:"#4c4f69",brightBlack:"#6c6f85",brightRed:"#d20f39",brightGreen:"#40a02b",brightYellow:"#df8e1d",brightBlue:"#1e66f5",brightMagenta:"#ea76cb",brightCyan:"#179299",brightWhite:"#bcc0cc"}},"alabaster-light":{label:"Alabaster",theme:{background:"#f7f7f7",foreground:"#434343",cursor:"#528bff",cursorAccent:"#f7f7f7",selectionBackground:"rgba(82, 139, 255, 0.2)",black:"#000000",red:"#aa3731",green:"#448c27",yellow:"#cb9000",blue:"#325cc0",magenta:"#7a3e9d",cyan:"#0083b2",white:"#434343",brightBlack:"#777777",brightRed:"#f05050",brightGreen:"#60cb00",brightYellow:"#ffbc5d",brightBlue:"#0070ea",brightMagenta:"#ca64e2",brightCyan:"#00aacb",brightWhite:"#999999"}},"xterm-light":{label:"XTerm Light",theme:{background:"#fafafa",foreground:"#383a42",cursor:"#526fff",cursorAccent:"#fafafa",selectionBackground:"rgba(82, 111, 255, 0.2)",black:"#383a42",red:"#e45649",green:"#50a14f",yellow:"#c18401",blue:"#4078f2",magenta:"#a626a4",cyan:"#0184bc",white:"#a0a1a7",brightBlack:"#4f525e",brightRed:"#e06c75",brightGreen:"#98c379",brightYellow:"#e5c07b",brightBlue:"#61afef",brightMagenta:"#c678dd",brightCyan:"#56b6c2",brightWhite:"#ffffff"}},"one-light":{label:"One Light",theme:{background:"#fafafa",foreground:"#383a42",cursor:"#526eff",cursorAccent:"#fafafa",selectionBackground:"rgba(82, 110, 255, 0.2)",black:"#383a42",red:"#e45649",green:"#50a14f",yellow:"#c18401",blue:"#4078f2",magenta:"#a626a4",cyan:"#0184bc",white:"#a0a1a7",brightBlack:"#4f525e",brightRed:"#e06c75",brightGreen:"#98c379",brightYellow:"#e5c07b",brightBlue:"#61afef",brightMagenta:"#c678dd",brightCyan:"#56b6c2",brightWhite:"#ffffff"}},"gruvbox-light":{label:"Gruvbox Light",theme:{background:"#fbf1c7",foreground:"#3c3836",cursor:"#9d0006",cursorAccent:"#fbf1c7",selectionBackground:"rgba(157, 0, 6, 0.15)",black:"#fbf1c7",red:"#cc241d",green:"#98971a",yellow:"#d79921",blue:"#458588",magenta:"#b16286",cyan:"#689d6a",white:"#504945",brightBlack:"#928374",brightRed:"#9d0006",brightGreen:"#79740e",brightYellow:"#b57614",brightBlue:"#076678",brightMagenta:"#8f3f71",brightCyan:"#427b58",brightWhite:"#3c3836"}}},m=w(null),o=w(!0),l=w([]),c=w(null),x=w(localStorage.getItem($)||"default");let i=null;const u=new Map;let s=null,_=null,A=null,y=null,k=null,v=0;const V=L(()=>l.value.find(e=>e.id===c.value)||null),be=L(()=>Object.entries(C).map(([e,t])=>({label:t.label,value:e}))),ue=L(()=>C[x.value]?.theme.background??"#1a1a2e");function he(){const e=De(),t=Pe(),a=t?t.startsWith("https")?"wss:":"ws:":location.protocol==="https:"?"wss:":"ws:";return t?`${a}//${new URL(t).host}/api/hermes/terminal${e?`?token=${encodeURIComponent(e)}`:""}`:`${a}//${location.host}/api/hermes/terminal${e?`?token=${encodeURIComponent(e)}`:""}`}function D(){const e=he();i=new WebSocket(e),i.onopen=()=>{},i.onmessage=t=>{const a=typeof t.data=="string"?t.data:"";if(a.charCodeAt(0)===123)try{ge(JSON.parse(a))}catch{}else s?.write(a)},i.onopen=()=>{},i.onclose=()=>{setTimeout(D,3e3)},i.onerror=()=>{}}function T(e){!i||i.readyState!==WebSocket.OPEN||i.send(typeof e=="string"?e:JSON.stringify(e))}function ge(e){switch(e.type){case"created":l.value.push({id:e.id,shell:e.shell,pid:e.pid,title:`${e.shell} #${l.value.length+1}`,createdAt:Date.now(),exited:!1}),W(e.id);break;case"switched":break;case"exited":{const t=l.value.find(a=>a.id===e.id);t&&(t.exited=!0,c.value===e.id&&s?.write(`\r
1
+ import{n as S}from"./rolldown-runtime-BKwlnUi0.js";import{Bt as xe,E as Te,F as G,Nt as w,Rt as n,U as Me,Vt as f,X as Se,Z as Ae,_t as d,ct as Re,d as We,et as L,gt as Ye,ht as Ee,it as b,k as Ge,nt as Le,ot as z,rt as p,st as B,t as ze,tt as r,wt as h,y as Oe,yt as $e,zt as O}from"./ui-vendor-CsTMg6zH.js";import{n as Ne,r as Ve}from"./vue-vendor-D8zSB7VM.js";import{a as De,c as Ie,n as Ue,o as Pe,t as Fe}from"./_plugin-vue_export-helper-CrLlP_D3.js";import{a as He,i as Xe,n as je,o as qe,r as Je,s as Ke,t as Qe}from"./xterm-CN_HBdCu.js";var P,F,H,X,j,q,J,K,Q,Z,ee,te,ae,re,ie,ne,le,oe,ce,$,N,fe,se=S((()=>{Me(),Ke(),Xe(),Je(),Qe(),Ie(),ze(),Ne(),P={class:"terminal-panel"},F={class:"session-list-header"},H={key:0,class:"session-list-title"},X={class:"session-list-actions"},j={key:0,class:"session-items"},q={key:0,class:"session-empty"},J=["onClick"],K={class:"session-item-content"},Q={class:"session-item-title"},Z={class:"session-item-meta"},ee={class:"session-item-shell"},te={key:0,class:"session-item-status"},ae={key:1,class:"session-item-time"},re={class:"terminal-main"},ie={class:"terminal-header"},ne={class:"header-left"},le={key:0,class:"header-session-title"},oe={class:"header-actions"},ce={class:"terminal-container"},$="hermes_terminal_theme",N=18,fe=Re({__name:"TerminalView",setup(rt){const{t:g}=Ve(),de=Oe(),C={default:{label:"Default",theme:{background:"#1a1a2e",foreground:"#e0e0e0",cursor:"#4cc9f0",cursorAccent:"#1a1a2e",selectionBackground:"rgba(76, 201, 240, 0.3)",black:"#000000",red:"#e06c75",green:"#98c379",yellow:"#e5c07b",blue:"#61afef",magenta:"#c678dd",cyan:"#56b6c2",white:"#abb2bf",brightBlack:"#5c6370",brightRed:"#e06c75",brightGreen:"#98c379",brightYellow:"#e5c07b",brightBlue:"#61afef",brightMagenta:"#c678dd",brightCyan:"#56b6c2",brightWhite:"#ffffff"}},"solarized-dark":{label:"Solarized Dark",theme:{background:"#002b36",foreground:"#839496",cursor:"#93a1a1",cursorAccent:"#002b36",selectionBackground:"rgba(147, 161, 161, 0.3)",black:"#073642",red:"#dc322f",green:"#859900",yellow:"#b58900",blue:"#268bd2",magenta:"#d33682",cyan:"#2aa198",white:"#eee8d5",brightBlack:"#002b36",brightRed:"#cb4b16",brightGreen:"#586e75",brightYellow:"#657b83",brightBlue:"#839496",brightMagenta:"#6c71c4",brightCyan:"#93a1a1",brightWhite:"#fdf6e3"}},"solarized-light":{label:"Solarized Light",theme:{background:"#fdf6e3",foreground:"#657b83",cursor:"#586e75",cursorAccent:"#fdf6e3",selectionBackground:"rgba(88, 110, 117, 0.3)",black:"#073642",red:"#dc322f",green:"#859900",yellow:"#b58900",blue:"#268bd2",magenta:"#d33682",cyan:"#2aa198",white:"#eee8d5",brightBlack:"#002b36",brightRed:"#cb4b16",brightGreen:"#586e75",brightYellow:"#657b83",brightBlue:"#839496",brightMagenta:"#6c71c4",brightCyan:"#93a1a1",brightWhite:"#fdf6e3"}},monokai:{label:"Monokai",theme:{background:"#272822",foreground:"#f8f8f2",cursor:"#f8f8f0",cursorAccent:"#272822",selectionBackground:"rgba(248, 248, 242, 0.2)",black:"#272822",red:"#f92672",green:"#a6e22e",yellow:"#f4bf75",blue:"#66d9ef",magenta:"#ae81ff",cyan:"#a1efe4",white:"#f8f8f2",brightBlack:"#75715e",brightRed:"#fd971f",brightGreen:"#a6e22e",brightYellow:"#e6db74",brightBlue:"#66d9ef",brightMagenta:"#ae81ff",brightCyan:"#a1efe4",brightWhite:"#f9f8f5"}},dracula:{label:"Dracula",theme:{background:"#282a36",foreground:"#f8f8f2",cursor:"#f8f8f2",cursorAccent:"#282a36",selectionBackground:"rgba(248, 248, 242, 0.2)",black:"#21222c",red:"#ff5555",green:"#50fa7b",yellow:"#f1fa8c",blue:"#bd93f9",magenta:"#ff79c6",cyan:"#8be9fd",white:"#f8f8f2",brightBlack:"#6272a4",brightRed:"#ff6e6e",brightGreen:"#69ff94",brightYellow:"#ffffa5",brightBlue:"#d6acff",brightMagenta:"#ff92df",brightCyan:"#a4ffff",brightWhite:"#ffffff"}},nord:{label:"Nord",theme:{background:"#2e3440",foreground:"#d8dee9",cursor:"#d8dee9",cursorAccent:"#2e3440",selectionBackground:"rgba(216, 222, 233, 0.2)",black:"#3b4252",red:"#bf616a",green:"#a3be8c",yellow:"#ebcb8b",blue:"#81a1c1",magenta:"#b48ead",cyan:"#88c0d0",white:"#e5e9f0",brightBlack:"#4c566a",brightRed:"#bf616a",brightGreen:"#a3be8c",brightYellow:"#ebcb8b",brightBlue:"#81a1c1",brightMagenta:"#b48ead",brightCyan:"#8fbcbb",brightWhite:"#eceff4"}},"one-dark":{label:"One Dark",theme:{background:"#282c34",foreground:"#abb2bf",cursor:"#528bff",cursorAccent:"#282c34",selectionBackground:"rgba(82, 139, 255, 0.25)",black:"#282c34",red:"#e06c75",green:"#98c379",yellow:"#e5c07b",blue:"#61afef",magenta:"#c678dd",cyan:"#56b6c2",white:"#abb2bf",brightBlack:"#5c6370",brightRed:"#e06c75",brightGreen:"#98c379",brightYellow:"#e5c07b",brightBlue:"#61afef",brightMagenta:"#c678dd",brightCyan:"#56b6c2",brightWhite:"#ffffff"}},"github-dark":{label:"GitHub Dark",theme:{background:"#0d1117",foreground:"#c9d1d9",cursor:"#58a6ff",cursorAccent:"#0d1117",selectionBackground:"rgba(88, 166, 255, 0.25)",black:"#484f58",red:"#ff7b72",green:"#7ee787",yellow:"#ffa657",blue:"#79c0ff",magenta:"#d2a8ff",cyan:"#a5d6ff",white:"#c9d1d9",brightBlack:"#6e7681",brightRed:"#ffa198",brightGreen:"#56d364",brightYellow:"#e3b341",brightBlue:"#58a6ff",brightMagenta:"#bc8cff",brightCyan:"#79c0ff",brightWhite:"#f0f6fc"}},"tokyo-night":{label:"Tokyo Night",theme:{background:"#1a1b26",foreground:"#a9b1d6",cursor:"#c0caf5",cursorAccent:"#1a1b26",selectionBackground:"rgba(192, 202, 245, 0.2)",black:"#15161e",red:"#f7768e",green:"#9ece6a",yellow:"#e0af68",blue:"#7aa2f7",magenta:"#bb9af7",cyan:"#7dcfff",white:"#a9b1d6",brightBlack:"#414868",brightRed:"#f7768e",brightGreen:"#9ece6a",brightYellow:"#e0af68",brightBlue:"#7aa2f7",brightMagenta:"#bb9af7",brightCyan:"#7dcfff",brightWhite:"#c0caf5"}},"github-light":{label:"GitHub Light",theme:{background:"#ffffff",foreground:"#24292f",cursor:"#0969da",cursorAccent:"#ffffff",selectionBackground:"rgba(9, 105, 218, 0.2)",black:"#24292f",red:"#cf222e",green:"#116329",yellow:"#4d2d00",blue:"#0969da",magenta:"#8250df",cyan:"#1b7c83",white:"#57606a",brightBlack:"#57606a",brightRed:"#a40e26",brightGreen:"#1a7f37",brightYellow:"#633c01",brightBlue:"#218bff",brightMagenta:"#a475f4",brightCyan:"#3192aa",brightWhite:"#8c959f"}},"catppuccin-latte":{label:"Catppuccin Latte",theme:{background:"#eff1f5",foreground:"#4c4f69",cursor:"#dc8a78",cursorAccent:"#eff1f5",selectionBackground:"rgba(220, 138, 120, 0.2)",black:"#5c5f77",red:"#d20f39",green:"#40a02b",yellow:"#df8e1d",blue:"#1e66f5",magenta:"#ea76cb",cyan:"#179299",white:"#4c4f69",brightBlack:"#6c6f85",brightRed:"#d20f39",brightGreen:"#40a02b",brightYellow:"#df8e1d",brightBlue:"#1e66f5",brightMagenta:"#ea76cb",brightCyan:"#179299",brightWhite:"#bcc0cc"}},"alabaster-light":{label:"Alabaster",theme:{background:"#f7f7f7",foreground:"#434343",cursor:"#528bff",cursorAccent:"#f7f7f7",selectionBackground:"rgba(82, 139, 255, 0.2)",black:"#000000",red:"#aa3731",green:"#448c27",yellow:"#cb9000",blue:"#325cc0",magenta:"#7a3e9d",cyan:"#0083b2",white:"#434343",brightBlack:"#777777",brightRed:"#f05050",brightGreen:"#60cb00",brightYellow:"#ffbc5d",brightBlue:"#0070ea",brightMagenta:"#ca64e2",brightCyan:"#00aacb",brightWhite:"#999999"}},"xterm-light":{label:"XTerm Light",theme:{background:"#fafafa",foreground:"#383a42",cursor:"#526fff",cursorAccent:"#fafafa",selectionBackground:"rgba(82, 111, 255, 0.2)",black:"#383a42",red:"#e45649",green:"#50a14f",yellow:"#c18401",blue:"#4078f2",magenta:"#a626a4",cyan:"#0184bc",white:"#a0a1a7",brightBlack:"#4f525e",brightRed:"#e06c75",brightGreen:"#98c379",brightYellow:"#e5c07b",brightBlue:"#61afef",brightMagenta:"#c678dd",brightCyan:"#56b6c2",brightWhite:"#ffffff"}},"one-light":{label:"One Light",theme:{background:"#fafafa",foreground:"#383a42",cursor:"#526eff",cursorAccent:"#fafafa",selectionBackground:"rgba(82, 110, 255, 0.2)",black:"#383a42",red:"#e45649",green:"#50a14f",yellow:"#c18401",blue:"#4078f2",magenta:"#a626a4",cyan:"#0184bc",white:"#a0a1a7",brightBlack:"#4f525e",brightRed:"#e06c75",brightGreen:"#98c379",brightYellow:"#e5c07b",brightBlue:"#61afef",brightMagenta:"#c678dd",brightCyan:"#56b6c2",brightWhite:"#ffffff"}},"gruvbox-light":{label:"Gruvbox Light",theme:{background:"#fbf1c7",foreground:"#3c3836",cursor:"#9d0006",cursorAccent:"#fbf1c7",selectionBackground:"rgba(157, 0, 6, 0.15)",black:"#fbf1c7",red:"#cc241d",green:"#98971a",yellow:"#d79921",blue:"#458588",magenta:"#b16286",cyan:"#689d6a",white:"#504945",brightBlack:"#928374",brightRed:"#9d0006",brightGreen:"#79740e",brightYellow:"#b57614",brightBlue:"#076678",brightMagenta:"#8f3f71",brightCyan:"#427b58",brightWhite:"#3c3836"}}},m=w(null),o=w(!0),l=w([]),c=w(null),x=w(localStorage.getItem($)||"default");let i=null;const u=new Map;let s=null,_=null,A=null,y=null,k=null,v=0;const V=L(()=>l.value.find(e=>e.id===c.value)||null),be=L(()=>Object.entries(C).map(([e,t])=>({label:t.label,value:e}))),ue=L(()=>C[x.value]?.theme.background??"#1a1a2e");function he(){const e=De(),t=Pe(),a=t?t.startsWith("https")?"wss:":"ws:":location.protocol==="https:"?"wss:":"ws:";return t?`${a}//${new URL(t).host}/api/hermes/terminal${e?`?token=${encodeURIComponent(e)}`:""}`:`${a}//${location.host}/api/hermes/terminal${e?`?token=${encodeURIComponent(e)}`:""}`}function D(){const e=he();i=new WebSocket(e),i.onopen=()=>{},i.onmessage=t=>{const a=typeof t.data=="string"?t.data:"";if(a.charCodeAt(0)===123)try{ge(JSON.parse(a))}catch{}else s?.write(a)},i.onopen=()=>{},i.onclose=()=>{setTimeout(D,3e3)},i.onerror=()=>{}}function T(e){!i||i.readyState!==WebSocket.OPEN||i.send(typeof e=="string"?e:JSON.stringify(e))}function ge(e){switch(e.type){case"created":l.value.push({id:e.id,shell:e.shell,pid:e.pid,title:`${e.shell} #${l.value.length+1}`,createdAt:Date.now(),exited:!1}),W(e.id);break;case"switched":break;case"exited":{const t=l.value.find(a=>a.id===e.id);t&&(t.exited=!0,c.value===e.id&&s?.write(`\r
2
2
  \x1B[90m[${g("terminal.processExited",{code:e.exitCode})}]\x1B[0m\r
3
3
  `));break}case"error":de.error(e.message);break}}function R(){T({type:"create"})}function me(e){let t=u.get(e);if(!t){const a=new qe({cursorBlink:!0,fontSize:14,fontFamily:'Menlo, Monaco, "Courier New", monospace',theme:{...C[x.value].theme}}),M=new He;a.loadAddon(M),a.loadAddon(new je),a.onData(Ce=>{i?.readyState===WebSocket.OPEN&&i.send(Ce)}),t={term:a,fitAddon:M,opened:!1},u.set(e,t)}return t}function W(e){if(c.value===e)return;c.value=e;const t=me(e);s=t.term,_=t.fitAddon,ve(),T({type:"switch",sessionId:e}),y?.matches&&(o.value=!1)}function ke(e){T({type:"close",sessionId:e}),l.value=l.value.filter(a=>a.id!==e);const t=u.get(e);t&&(t.term.dispose(),u.delete(e)),c.value===e&&(c.value=l.value.length>0?l.value[0].id:null,s=null,_=null,c.value?W(c.value):(I(),R()))}function ve(){if(!m.value)return;const e=m.value;for(;e.firstChild;)e.removeChild(e.firstChild);const t=u.get(c.value);if(t){if(!t.opened)t.term.open(e),t.opened=!0;else{const a=t.term.element;a&&e.appendChild(a)}A?.disconnect(),A=new ResizeObserver(()=>{Y(),_e()}),A.observe(m.value),setTimeout(()=>Y(),50),setTimeout(()=>Y(),200)}}function I(){if(!m.value)return;const e=m.value;for(;e.firstChild;)e.removeChild(e.firstChild)}function Y(){if(_)try{_.fit()}catch{}}function _e(){if(!(!s||!i||i.readyState!==WebSocket.OPEN))try{T({type:"resize",cols:s.cols,rows:s.rows})}catch{}}function ye(e){if(e.touches.length!==1){k=null,v=0;return}k=e.touches[0].clientY,v=0}function we(e){if(!s||e.touches.length!==1||k===null)return;const t=e.touches[0].clientY;v+=k-t,k=t;const a=Math.trunc(v/N);a!==0&&(s.scrollLines(a),v-=a*N,e.preventDefault())}function U(){k=null,v=0}function pe(e){x.value=e,localStorage.setItem($,e);const t=C[e]?.theme;if(t)for(const a of u.values())a.term.options.theme={...t}}function Be(e){return new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}function E(e){e.matches&&o.value&&(o.value=!1)}return Ee(()=>{y=window.matchMedia("(max-width: 768px)"),E(y),y.addEventListener("change",E),D()}),Ye(()=>{y?.removeEventListener("change",E),I();for(const e of u.values())e.term.dispose();u.clear(),s=null,_=null,i?.close(),i=null}),(e,t)=>(d(),b("div",P,[r("div",{class:O(["session-backdrop",{active:o.value}]),onClick:t[0]||(t[0]=a=>o.value=!1)},null,2),r("aside",{class:O(["session-list",{collapsed:!o.value}])},[r("div",F,[o.value?(d(),b("span",H,f(n(g)("terminal.sessions")),1)):p("",!0),r("div",X,[B(n(Te),{trigger:"hover"},{trigger:h(()=>[B(n(G),{quaternary:"",size:"tiny",onClick:R,circle:""},{icon:h(()=>[...t[3]||(t[3]=[r("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[r("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r("line",{x1:"5",y1:"12",x2:"19",y2:"12"})],-1)])]),_:1})]),default:h(()=>[z(" "+f(n(g)("terminal.newTab")),1)]),_:1})])]),o.value?(d(),b("div",j,[l.value.length===0?(d(),b("div",q,f(n(g)("common.loading")),1)):p("",!0),(d(!0),b(Ae,null,$e(l.value,a=>(d(),b("button",{key:a.id,class:O(["session-item",{active:a.id===c.value,exited:a.exited}]),onClick:M=>W(a.id)},[r("div",K,[r("span",Q,f(a.title),1),r("span",Z,[r("span",ee,f(a.shell),1),a.exited?(d(),b("span",te,f(n(g)("terminal.sessionExited")),1)):(d(),b("span",ae,f(Be(a.createdAt)),1))])]),l.value.length>1?(d(),Le(n(We),{key:0,onPositiveClick:M=>ke(a.id)},{trigger:h(()=>[r("button",{class:"session-item-delete",onClick:t[1]||(t[1]=Se(()=>{},["stop"]))},[...t[4]||(t[4]=[r("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[r("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])])]),default:h(()=>[z(" "+f(n(g)("terminal.closeSession")),1)]),_:1},8,["onPositiveClick"])):p("",!0)],10,J))),128))])):p("",!0)],2),r("div",re,[r("header",ie,[r("div",ne,[B(n(G),{quaternary:"",size:"small",onClick:t[2]||(t[2]=a=>o.value=!o.value),circle:""},{icon:h(()=>[...t[5]||(t[5]=[r("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[r("rect",{x:"3",y:"3",width:"7",height:"7"}),r("rect",{x:"14",y:"3",width:"7",height:"7"}),r("rect",{x:"3",y:"14",width:"7",height:"7"}),r("rect",{x:"14",y:"14",width:"7",height:"7"})],-1)])]),_:1}),V.value?(d(),b("span",le,f(V.value.title),1)):p("",!0)]),r("div",oe,[B(n(Ge),{value:x.value,options:be.value,size:"small","consistent-menu-width":!1,class:"theme-select","onUpdate:value":pe},null,8,["value","options"]),B(n(G),{size:"small",onClick:R},{icon:h(()=>[...t[6]||(t[6]=[r("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[r("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r("line",{x1:"5",y1:"12",x2:"19",y2:"12"})],-1)])]),default:h(()=>[z(" "+f(n(g)("terminal.newTab")),1)]),_:1})])]),r("div",ce,[r("div",{ref_key:"terminalRef",ref:m,class:"terminal-xterm",style:xe({backgroundColor:ue.value}),onTouchstart:ye,onTouchmove:we,onTouchend:U,onTouchcancel:U},null,36)])])]))}})})),Ze=S((()=>{})),et=S((()=>{})),tt,at=S((()=>{se(),se(),Ze(),et(),Ue(),tt=Fe(fe,[["__scopeId","data-v-55f3d690"]])}));at();export{tt as default};
@@ -1 +1 @@
1
- import{n as y}from"./rolldown-runtime-BKwlnUi0.js";import{Bt as f,F as O,Nt as H,Rt as s,U as S,Vt as t,Z as x,_t as v,ct as R,et as k,ht as st,it as p,ot as T,rt as $,st as w,t as at,tt as e,wt as q,yt as M}from"./ui-vendor-CsTMg6zH.js";import{d as ot,n as P,r as D,u as nt}from"./vue-vendor-D8zSB7VM.js";import{n as F,t as B}from"./_plugin-vue_export-helper-ZIsfSgrY.js";import{v as lt,y as it}from"./index-JI6E-cKo.js";function Ee(r){return(r||"").trim()||"unknown"}function b(r,a){return a<=0?0:r/a*100}function z(r){const a=Ee(r);let n=0;for(let d=0;d<a.length;d+=1)n=(n<<5)-n+a.charCodeAt(d),n|=0;return I[Math.abs(n)%I.length]}var I,C,V=y((()=>{it(),ot(),S(),I=["#4fd1c5","#63b3ed","#f6ad55","#b794f4","#68d391","#fc8181","#f687b3","#90cdf4","#fbd38d","#9ae6b4"],C=nt("usage",()=>{const r=H(null),a=H(!1);let n=0;async function d(l=30){const h=++n;a.value=!0;try{const m=await lt(l);h===n&&(r.value=m)}catch(m){h===n&&console.error("Failed to load usage stats:",m)}finally{h===n&&(a.value=!1)}}const g=k(()=>!!r.value&&r.value.total_sessions>0),_=k(()=>r.value?.total_input_tokens??0),c=k(()=>r.value?.total_output_tokens??0),i=k(()=>_.value+c.value),o=k(()=>r.value?.total_sessions??0),u=k(()=>r.value?.total_cache_read_tokens??0),et=k(()=>{const l=_.value+u.value;return l===0?null:u.value/l*100}),tt=k(()=>r.value?.total_cost??0),L=k(()=>r.value?r.value.model_usage.map(l=>{const h=Ee(l.model),m=l.input_tokens+l.output_tokens,U=m+l.cache_read_tokens;return{model:h,inputTokens:l.input_tokens,outputTokens:l.output_tokens,cacheTokens:l.cache_read_tokens,cacheWriteTokens:l.cache_write_tokens,totalTokens:m,visualTokens:U,sessions:l.sessions,color:z(h),inputPercent:b(l.input_tokens,U),outputPercent:b(l.output_tokens,U),cachePercent:b(l.cache_read_tokens,U)}}).sort((l,h)=>h.visualTokens-l.visualTokens):[]);return{stats:r,isLoading:a,hasData:g,loadSessions:d,totalInputTokens:_,totalOutputTokens:c,totalTokens:i,totalSessions:o,totalCacheTokens:u,cacheHitRate:et,estimatedCost:tt,modelUsage:L,modelLegend:k(()=>{const l=new Set;return L.value.filter(h=>l.has(h.model)?!1:(l.add(h.model),!0)).map(h=>({model:h.model,color:h.color}))}),dailyUsage:k(()=>(r.value?.daily_usage??[]).map(l=>{const h=l.input_tokens+l.output_tokens+l.cache_read_tokens;return{...l,visualTokens:h,inputPercent:b(l.input_tokens,h),outputPercent:b(l.output_tokens,h),cachePercent:b(l.cache_read_tokens,h)}})),avgSessionsPerDay:k(()=>{if(!r.value||r.value.daily_usage.length===0)return 0;const l=r.value.daily_usage.filter(m=>m.sessions>0).length,h=Math.max(1,l);return o.value/h}),getModelColor:z}})})),N,W,K,A,E,Z,j,G,J,Q,X,Y,ee,te,se,ae,Ze,oe=y((()=>{S(),P(),V(),N={class:"stat-cards"},W={class:"stat-card"},K={class:"stat-label"},A={class:"stat-value"},E={class:"stat-sub"},Z={class:"stat-card"},j={class:"stat-label"},G={class:"stat-value"},J={class:"stat-sub"},Q={class:"stat-card"},X={class:"stat-label"},Y={class:"stat-value"},ee={class:"stat-card"},te={class:"stat-label"},se={class:"stat-value"},ae={key:0,class:"stat-sub"},Ze=R({__name:"StatCards",setup(r){const{t:a}=D(),n=C();function d(_){return _>=1e6?(_/1e6).toFixed(1)+"M":_>=1e3?(_/1e3).toFixed(1)+"K":String(_)}function g(_){return _===0?"$0.00":_<.01?"<$0.01":"$"+_.toFixed(2)}return(_,c)=>(v(),p("div",N,[e("div",W,[e("div",K,t(s(a)("usage.totalTokens")),1),e("div",A,t(d(s(n).totalTokens)),1),e("div",E,t(d(s(n).totalInputTokens))+" "+t(s(a)("usage.inputTokens"))+" / "+t(d(s(n).totalOutputTokens))+" "+t(s(a)("usage.outputTokens")),1)]),e("div",Z,[e("div",j,t(s(a)("usage.totalSessions")),1),e("div",G,t(s(n).totalSessions),1),e("div",J,t(s(a)("usage.avgPerDay",{n:s(n).avgSessionsPerDay.toFixed(1)})),1)]),e("div",Q,[e("div",X,t(s(a)("usage.estimatedCost")),1),e("div",Y,t(g(s(n).estimatedCost)),1)]),e("div",ee,[e("div",te,t(s(a)("usage.cacheHitRate")),1),e("div",se,t(s(n).cacheHitRate!==null?s(n).cacheHitRate.toFixed(1)+"%":"--"),1),s(n).cacheHitRate!==null?(v(),p("div",ae,t(d(s(n).totalCacheTokens))+" "+t(s(a)("usage.tokens")),1)):$("",!0)])]))}})})),ut=y((()=>{})),je,rt=y((()=>{oe(),oe(),ut(),F(),je=B(Ze,[["__scopeId","data-v-3a594781"]])})),ne,le,ie,ue,re,de,_e,ce,ve,pe,he,Ge,ge=y((()=>{S(),P(),V(),ne={class:"model-breakdown"},le={class:"section-title"},ie={class:"model-legend","aria-label":"Token type legend"},ue={class:"legend-item"},re={class:"legend-item"},de={class:"legend-item"},_e={class:"model-list"},ce=["title"],ve={class:"model-bar-wrap"},pe=["title"],he={key:0},Ge=R({__name:"ModelBreakdown",setup(r){const{t:a}=D(),n=C(),d=k(()=>Math.max(...n.modelUsage.map(c=>c.visualTokens),1));function g(c){return c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":String(c)}function _(c){const i=c.inputTokens+c.cacheTokens;return i===0?"--":(c.cacheTokens/i*100).toFixed(1)+"%"}return(c,i)=>(v(),p("div",ne,[e("h3",le,t(s(a)("usage.modelBreakdown")),1),e("div",ie,[e("div",ue,[i[0]||(i[0]=e("span",{class:"legend-swatch input"},null,-1)),T(t(s(a)("usage.inputTokens")),1)]),e("div",re,[i[1]||(i[1]=e("span",{class:"legend-swatch output"},null,-1)),T(t(s(a)("usage.outputTokens")),1)]),e("div",de,[i[2]||(i[2]=e("span",{class:"legend-swatch cache"},null,-1)),T(t(s(a)("usage.cacheRead")),1)])]),e("div",_e,[(v(!0),p(x,null,M(s(n).modelUsage,o=>(v(),p("div",{key:o.model,class:"model-row"},[e("span",{class:"model-swatch",style:f({background:o.color})},null,4),e("span",{class:"model-name",title:o.model},t(o.model),9,ce),e("div",ve,[e("div",{class:"model-bar",style:f({width:o.visualTokens/d.value*100+"%"})},[o.inputTokens>0?(v(),p("div",{key:0,class:"model-bar-segment input",style:f({width:o.inputPercent+"%"})},null,4)):$("",!0),o.outputTokens>0?(v(),p("div",{key:1,class:"model-bar-segment output",style:f({width:o.outputPercent+"%"})},null,4)):$("",!0),o.cacheTokens>0?(v(),p("div",{key:2,class:"model-bar-segment cache",style:f({width:o.cachePercent+"%"})},null,4)):$("",!0)],4)]),e("span",{class:"model-tokens",title:`${s(a)("usage.inputTokens")}: ${g(o.inputTokens)} · ${s(a)("usage.outputTokens")}: ${g(o.outputTokens)} · ${s(a)("usage.cacheRead")}: ${g(o.cacheTokens)} · ${s(a)("usage.cacheHitRate")}: ${_(o)}`},[T(t(g(o.totalTokens))+" ",1),o.cacheTokens>0?(v(),p("small",he,"+"+t(g(o.cacheTokens)),1)):$("",!0)],8,pe)]))),128))])]))}})})),dt=y((()=>{})),Je,_t=y((()=>{ge(),ge(),dt(),F(),Je=B(Ge,[["__scopeId","data-v-692258ec"]])})),ke,ye,fe,Te,me,$e,be,we,xe,Se,Ce,Ue,Me,Re,Pe,De,Fe,Be,Ve,Qe,He=y((()=>{S(),P(),V(),ke={class:"daily-trend"},ye={class:"section-title"},fe={class:"bar-chart"},Te={class:"bar-track"},me={class:"bar-tooltip"},$e={class:"tooltip-date"},be={class:"tooltip-row"},we={class:"tooltip-row"},xe={class:"tooltip-row"},Se={class:"tooltip-row"},Ce={class:"tooltip-row"},Ue={class:"tooltip-row"},Me={class:"tooltip-row"},Re={class:"bar-dates"},Pe={class:"chart-legend","aria-label":"Token type legend"},De={class:"legend-item"},Fe={class:"legend-item"},Be={class:"legend-item"},Ve={class:"trend-table"},Qe=R({__name:"DailyTrend",setup(r){const{t:a}=D(),n=C();function d(i){return i>=1e6?(i/1e6).toFixed(1)+"M":i>=1e3?(i/1e3).toFixed(1)+"K":String(i)}function g(i){return i===0?"$0.00":i<.01?"<$0.01":"$"+i.toFixed(2)}function _(i){const o=i.input_tokens+i.cache_read_tokens;return o===0?"--":(i.cache_read_tokens/o*100).toFixed(1)+"%"}const c=k(()=>Math.max(...n.dailyUsage.map(i=>i.visualTokens),1));return(i,o)=>(v(),p("div",ke,[e("h3",ye,t(s(a)("usage.dailyTrend")),1),e("div",fe,[(v(!0),p(x,null,M(s(n).dailyUsage,u=>(v(),p("div",{key:u.date,class:"bar-col"},[e("div",Te,[e("div",{class:"bar-stack",style:f({height:u.visualTokens/c.value*100+"%"})},[u.output_tokens>0?(v(),p("div",{key:0,class:"bar-segment output",style:f({height:u.outputPercent+"%"})},null,4)):$("",!0),u.input_tokens>0?(v(),p("div",{key:1,class:"bar-segment input",style:f({height:u.inputPercent+"%"})},null,4)):$("",!0),u.cache_read_tokens>0?(v(),p("div",{key:2,class:"bar-segment cache",style:f({height:u.cachePercent+"%"})},null,4)):$("",!0)],4)]),e("div",me,[e("div",$e,t(u.date),1),e("div",be,t(s(a)("usage.inputTokens"))+": "+t(d(u.input_tokens)),1),e("div",we,t(s(a)("usage.outputTokens"))+": "+t(d(u.output_tokens)),1),e("div",xe,t(s(a)("usage.cacheRead"))+": "+t(d(u.cache_read_tokens)),1),e("div",Se,t(s(a)("usage.cacheWrite"))+": "+t(d(u.cache_write_tokens)),1),e("div",Ce,t(s(a)("usage.cacheHitRate"))+": "+t(_(u)),1),e("div",Ue,t(s(a)("usage.sessions"))+": "+t(u.sessions),1),e("div",Me,t(s(a)("usage.cost"))+": "+t(g(u.cost)),1)])]))),128))]),e("div",Re,[e("span",null,t(s(n).dailyUsage[0]?.date.slice(5)),1),e("span",null,t(s(n).dailyUsage[s(n).dailyUsage.length-1]?.date.slice(5)),1)]),e("div",Pe,[e("div",De,[o[0]||(o[0]=e("span",{class:"legend-swatch input"},null,-1)),T(t(s(a)("usage.inputTokens")),1)]),e("div",Fe,[o[1]||(o[1]=e("span",{class:"legend-swatch output"},null,-1)),T(t(s(a)("usage.outputTokens")),1)]),e("div",Be,[o[2]||(o[2]=e("span",{class:"legend-swatch cache"},null,-1)),T(t(s(a)("usage.cacheRead")),1)])]),e("div",Ve,[e("table",null,[e("thead",null,[e("tr",null,[e("th",null,t(s(a)("usage.date")),1),e("th",null,t(s(a)("usage.inputTokens")),1),e("th",null,t(s(a)("usage.outputTokens")),1),e("th",null,t(s(a)("usage.cacheRead")),1),e("th",null,t(s(a)("usage.cacheWrite")),1),e("th",null,t(s(a)("usage.cacheHitRate")),1),e("th",null,t(s(a)("usage.sessions")),1),e("th",null,t(s(a)("usage.cost")),1)])]),e("tbody",null,[(v(!0),p(x,null,M([...s(n).dailyUsage].reverse(),u=>(v(),p("tr",{key:u.date},[e("td",null,t(u.date),1),e("td",null,t(d(u.input_tokens)),1),e("td",null,t(d(u.output_tokens)),1),e("td",null,t(d(u.cache_read_tokens)),1),e("td",null,t(d(u.cache_write_tokens)),1),e("td",null,t(_(u)),1),e("td",null,t(u.sessions),1),e("td",null,t(g(u.cost)),1)]))),128))])])])]))}})})),ct=y((()=>{})),Xe,vt=y((()=>{He(),He(),ct(),F(),Xe=B(Qe,[["__scopeId","data-v-9eb202e8"]])})),Ie,Le,Oe,qe,ze,Ne,We,Ke,Ye,Ae=y((()=>{S(),at(),P(),V(),rt(),_t(),vt(),Ie={class:"usage-view"},Le={class:"page-header"},Oe={class:"header-title"},qe={class:"usage-toolbar"},ze={class:"period-selector",role:"group","aria-label":"Usage statistics period"},Ne={class:"usage-content"},We={key:0,class:"usage-loading"},Ke={key:2,class:"usage-empty"},Ye=R({__name:"UsageView",setup(r){const{t:a}=D(),n=C(),d=[{label:"7d",days:7},{label:"30d",days:30},{label:"90d",days:90},{label:"365d",days:365}],g=H(30);function _(c=g.value){g.value=c,n.loadSessions(c)}return st(()=>{_(30)}),(c,i)=>(v(),p("div",Ie,[e("header",Le,[e("h2",Oe,t(s(a)("usage.title")),1),e("div",qe,[e("div",ze,[(v(),p(x,null,M(d,o=>w(s(O),{key:o.days,class:"period-option",size:"small",type:g.value===o.days?"primary":"default",secondary:g.value===o.days,quaternary:g.value!==o.days,"aria-pressed":g.value===o.days,onClick:u=>_(o.days)},{default:q(()=>[T(t(o.label),1)]),_:2},1032,["type","secondary","quaternary","aria-pressed","onClick"])),64))]),w(s(O),{class:"refresh-button",size:"small",quaternary:"",loading:s(n).isLoading,onClick:i[0]||(i[0]=o=>_())},{default:q(()=>[T(t(s(a)("usage.refresh")),1)]),_:1},8,["loading"])])]),e("div",Ne,[s(n).isLoading&&!s(n).hasData?(v(),p("div",We,t(s(a)("common.loading")),1)):s(n).hasData?(v(),p(x,{key:1},[w(je),w(Je),w(Xe)],64)):(v(),p("div",Ke,t(s(a)("usage.noData")),1))])]))}})})),pt=y((()=>{})),ht,gt=y((()=>{Ae(),Ae(),pt(),F(),ht=B(Ye,[["__scopeId","data-v-954f84e2"]])}));gt();export{ht as default};
1
+ import{n as y}from"./rolldown-runtime-BKwlnUi0.js";import{Bt as f,F as O,Nt as H,Rt as s,U as S,Vt as t,Z as x,_t as v,ct as R,et as k,ht as st,it as p,ot as T,rt as $,st as w,t as at,tt as e,wt as q,yt as M}from"./ui-vendor-CsTMg6zH.js";import{d as ot,n as P,r as D,u as nt}from"./vue-vendor-D8zSB7VM.js";import{n as F,t as B}from"./_plugin-vue_export-helper-CrLlP_D3.js";import{v as lt,y as it}from"./index-Bzb-xLYu.js";function Ee(r){return(r||"").trim()||"unknown"}function b(r,a){return a<=0?0:r/a*100}function z(r){const a=Ee(r);let n=0;for(let d=0;d<a.length;d+=1)n=(n<<5)-n+a.charCodeAt(d),n|=0;return I[Math.abs(n)%I.length]}var I,C,V=y((()=>{it(),ot(),S(),I=["#4fd1c5","#63b3ed","#f6ad55","#b794f4","#68d391","#fc8181","#f687b3","#90cdf4","#fbd38d","#9ae6b4"],C=nt("usage",()=>{const r=H(null),a=H(!1);let n=0;async function d(l=30){const h=++n;a.value=!0;try{const m=await lt(l);h===n&&(r.value=m)}catch(m){h===n&&console.error("Failed to load usage stats:",m)}finally{h===n&&(a.value=!1)}}const g=k(()=>!!r.value&&r.value.total_sessions>0),_=k(()=>r.value?.total_input_tokens??0),c=k(()=>r.value?.total_output_tokens??0),i=k(()=>_.value+c.value),o=k(()=>r.value?.total_sessions??0),u=k(()=>r.value?.total_cache_read_tokens??0),et=k(()=>{const l=_.value+u.value;return l===0?null:u.value/l*100}),tt=k(()=>r.value?.total_cost??0),L=k(()=>r.value?r.value.model_usage.map(l=>{const h=Ee(l.model),m=l.input_tokens+l.output_tokens,U=m+l.cache_read_tokens;return{model:h,inputTokens:l.input_tokens,outputTokens:l.output_tokens,cacheTokens:l.cache_read_tokens,cacheWriteTokens:l.cache_write_tokens,totalTokens:m,visualTokens:U,sessions:l.sessions,color:z(h),inputPercent:b(l.input_tokens,U),outputPercent:b(l.output_tokens,U),cachePercent:b(l.cache_read_tokens,U)}}).sort((l,h)=>h.visualTokens-l.visualTokens):[]);return{stats:r,isLoading:a,hasData:g,loadSessions:d,totalInputTokens:_,totalOutputTokens:c,totalTokens:i,totalSessions:o,totalCacheTokens:u,cacheHitRate:et,estimatedCost:tt,modelUsage:L,modelLegend:k(()=>{const l=new Set;return L.value.filter(h=>l.has(h.model)?!1:(l.add(h.model),!0)).map(h=>({model:h.model,color:h.color}))}),dailyUsage:k(()=>(r.value?.daily_usage??[]).map(l=>{const h=l.input_tokens+l.output_tokens+l.cache_read_tokens;return{...l,visualTokens:h,inputPercent:b(l.input_tokens,h),outputPercent:b(l.output_tokens,h),cachePercent:b(l.cache_read_tokens,h)}})),avgSessionsPerDay:k(()=>{if(!r.value||r.value.daily_usage.length===0)return 0;const l=r.value.daily_usage.filter(m=>m.sessions>0).length,h=Math.max(1,l);return o.value/h}),getModelColor:z}})})),N,W,K,A,E,Z,j,G,J,Q,X,Y,ee,te,se,ae,Ze,oe=y((()=>{S(),P(),V(),N={class:"stat-cards"},W={class:"stat-card"},K={class:"stat-label"},A={class:"stat-value"},E={class:"stat-sub"},Z={class:"stat-card"},j={class:"stat-label"},G={class:"stat-value"},J={class:"stat-sub"},Q={class:"stat-card"},X={class:"stat-label"},Y={class:"stat-value"},ee={class:"stat-card"},te={class:"stat-label"},se={class:"stat-value"},ae={key:0,class:"stat-sub"},Ze=R({__name:"StatCards",setup(r){const{t:a}=D(),n=C();function d(_){return _>=1e6?(_/1e6).toFixed(1)+"M":_>=1e3?(_/1e3).toFixed(1)+"K":String(_)}function g(_){return _===0?"$0.00":_<.01?"<$0.01":"$"+_.toFixed(2)}return(_,c)=>(v(),p("div",N,[e("div",W,[e("div",K,t(s(a)("usage.totalTokens")),1),e("div",A,t(d(s(n).totalTokens)),1),e("div",E,t(d(s(n).totalInputTokens))+" "+t(s(a)("usage.inputTokens"))+" / "+t(d(s(n).totalOutputTokens))+" "+t(s(a)("usage.outputTokens")),1)]),e("div",Z,[e("div",j,t(s(a)("usage.totalSessions")),1),e("div",G,t(s(n).totalSessions),1),e("div",J,t(s(a)("usage.avgPerDay",{n:s(n).avgSessionsPerDay.toFixed(1)})),1)]),e("div",Q,[e("div",X,t(s(a)("usage.estimatedCost")),1),e("div",Y,t(g(s(n).estimatedCost)),1)]),e("div",ee,[e("div",te,t(s(a)("usage.cacheHitRate")),1),e("div",se,t(s(n).cacheHitRate!==null?s(n).cacheHitRate.toFixed(1)+"%":"--"),1),s(n).cacheHitRate!==null?(v(),p("div",ae,t(d(s(n).totalCacheTokens))+" "+t(s(a)("usage.tokens")),1)):$("",!0)])]))}})})),ut=y((()=>{})),je,rt=y((()=>{oe(),oe(),ut(),F(),je=B(Ze,[["__scopeId","data-v-3a594781"]])})),ne,le,ie,ue,re,de,_e,ce,ve,pe,he,Ge,ge=y((()=>{S(),P(),V(),ne={class:"model-breakdown"},le={class:"section-title"},ie={class:"model-legend","aria-label":"Token type legend"},ue={class:"legend-item"},re={class:"legend-item"},de={class:"legend-item"},_e={class:"model-list"},ce=["title"],ve={class:"model-bar-wrap"},pe=["title"],he={key:0},Ge=R({__name:"ModelBreakdown",setup(r){const{t:a}=D(),n=C(),d=k(()=>Math.max(...n.modelUsage.map(c=>c.visualTokens),1));function g(c){return c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":String(c)}function _(c){const i=c.inputTokens+c.cacheTokens;return i===0?"--":(c.cacheTokens/i*100).toFixed(1)+"%"}return(c,i)=>(v(),p("div",ne,[e("h3",le,t(s(a)("usage.modelBreakdown")),1),e("div",ie,[e("div",ue,[i[0]||(i[0]=e("span",{class:"legend-swatch input"},null,-1)),T(t(s(a)("usage.inputTokens")),1)]),e("div",re,[i[1]||(i[1]=e("span",{class:"legend-swatch output"},null,-1)),T(t(s(a)("usage.outputTokens")),1)]),e("div",de,[i[2]||(i[2]=e("span",{class:"legend-swatch cache"},null,-1)),T(t(s(a)("usage.cacheRead")),1)])]),e("div",_e,[(v(!0),p(x,null,M(s(n).modelUsage,o=>(v(),p("div",{key:o.model,class:"model-row"},[e("span",{class:"model-swatch",style:f({background:o.color})},null,4),e("span",{class:"model-name",title:o.model},t(o.model),9,ce),e("div",ve,[e("div",{class:"model-bar",style:f({width:o.visualTokens/d.value*100+"%"})},[o.inputTokens>0?(v(),p("div",{key:0,class:"model-bar-segment input",style:f({width:o.inputPercent+"%"})},null,4)):$("",!0),o.outputTokens>0?(v(),p("div",{key:1,class:"model-bar-segment output",style:f({width:o.outputPercent+"%"})},null,4)):$("",!0),o.cacheTokens>0?(v(),p("div",{key:2,class:"model-bar-segment cache",style:f({width:o.cachePercent+"%"})},null,4)):$("",!0)],4)]),e("span",{class:"model-tokens",title:`${s(a)("usage.inputTokens")}: ${g(o.inputTokens)} · ${s(a)("usage.outputTokens")}: ${g(o.outputTokens)} · ${s(a)("usage.cacheRead")}: ${g(o.cacheTokens)} · ${s(a)("usage.cacheHitRate")}: ${_(o)}`},[T(t(g(o.totalTokens))+" ",1),o.cacheTokens>0?(v(),p("small",he,"+"+t(g(o.cacheTokens)),1)):$("",!0)],8,pe)]))),128))])]))}})})),dt=y((()=>{})),Je,_t=y((()=>{ge(),ge(),dt(),F(),Je=B(Ge,[["__scopeId","data-v-692258ec"]])})),ke,ye,fe,Te,me,$e,be,we,xe,Se,Ce,Ue,Me,Re,Pe,De,Fe,Be,Ve,Qe,He=y((()=>{S(),P(),V(),ke={class:"daily-trend"},ye={class:"section-title"},fe={class:"bar-chart"},Te={class:"bar-track"},me={class:"bar-tooltip"},$e={class:"tooltip-date"},be={class:"tooltip-row"},we={class:"tooltip-row"},xe={class:"tooltip-row"},Se={class:"tooltip-row"},Ce={class:"tooltip-row"},Ue={class:"tooltip-row"},Me={class:"tooltip-row"},Re={class:"bar-dates"},Pe={class:"chart-legend","aria-label":"Token type legend"},De={class:"legend-item"},Fe={class:"legend-item"},Be={class:"legend-item"},Ve={class:"trend-table"},Qe=R({__name:"DailyTrend",setup(r){const{t:a}=D(),n=C();function d(i){return i>=1e6?(i/1e6).toFixed(1)+"M":i>=1e3?(i/1e3).toFixed(1)+"K":String(i)}function g(i){return i===0?"$0.00":i<.01?"<$0.01":"$"+i.toFixed(2)}function _(i){const o=i.input_tokens+i.cache_read_tokens;return o===0?"--":(i.cache_read_tokens/o*100).toFixed(1)+"%"}const c=k(()=>Math.max(...n.dailyUsage.map(i=>i.visualTokens),1));return(i,o)=>(v(),p("div",ke,[e("h3",ye,t(s(a)("usage.dailyTrend")),1),e("div",fe,[(v(!0),p(x,null,M(s(n).dailyUsage,u=>(v(),p("div",{key:u.date,class:"bar-col"},[e("div",Te,[e("div",{class:"bar-stack",style:f({height:u.visualTokens/c.value*100+"%"})},[u.output_tokens>0?(v(),p("div",{key:0,class:"bar-segment output",style:f({height:u.outputPercent+"%"})},null,4)):$("",!0),u.input_tokens>0?(v(),p("div",{key:1,class:"bar-segment input",style:f({height:u.inputPercent+"%"})},null,4)):$("",!0),u.cache_read_tokens>0?(v(),p("div",{key:2,class:"bar-segment cache",style:f({height:u.cachePercent+"%"})},null,4)):$("",!0)],4)]),e("div",me,[e("div",$e,t(u.date),1),e("div",be,t(s(a)("usage.inputTokens"))+": "+t(d(u.input_tokens)),1),e("div",we,t(s(a)("usage.outputTokens"))+": "+t(d(u.output_tokens)),1),e("div",xe,t(s(a)("usage.cacheRead"))+": "+t(d(u.cache_read_tokens)),1),e("div",Se,t(s(a)("usage.cacheWrite"))+": "+t(d(u.cache_write_tokens)),1),e("div",Ce,t(s(a)("usage.cacheHitRate"))+": "+t(_(u)),1),e("div",Ue,t(s(a)("usage.sessions"))+": "+t(u.sessions),1),e("div",Me,t(s(a)("usage.cost"))+": "+t(g(u.cost)),1)])]))),128))]),e("div",Re,[e("span",null,t(s(n).dailyUsage[0]?.date.slice(5)),1),e("span",null,t(s(n).dailyUsage[s(n).dailyUsage.length-1]?.date.slice(5)),1)]),e("div",Pe,[e("div",De,[o[0]||(o[0]=e("span",{class:"legend-swatch input"},null,-1)),T(t(s(a)("usage.inputTokens")),1)]),e("div",Fe,[o[1]||(o[1]=e("span",{class:"legend-swatch output"},null,-1)),T(t(s(a)("usage.outputTokens")),1)]),e("div",Be,[o[2]||(o[2]=e("span",{class:"legend-swatch cache"},null,-1)),T(t(s(a)("usage.cacheRead")),1)])]),e("div",Ve,[e("table",null,[e("thead",null,[e("tr",null,[e("th",null,t(s(a)("usage.date")),1),e("th",null,t(s(a)("usage.inputTokens")),1),e("th",null,t(s(a)("usage.outputTokens")),1),e("th",null,t(s(a)("usage.cacheRead")),1),e("th",null,t(s(a)("usage.cacheWrite")),1),e("th",null,t(s(a)("usage.cacheHitRate")),1),e("th",null,t(s(a)("usage.sessions")),1),e("th",null,t(s(a)("usage.cost")),1)])]),e("tbody",null,[(v(!0),p(x,null,M([...s(n).dailyUsage].reverse(),u=>(v(),p("tr",{key:u.date},[e("td",null,t(u.date),1),e("td",null,t(d(u.input_tokens)),1),e("td",null,t(d(u.output_tokens)),1),e("td",null,t(d(u.cache_read_tokens)),1),e("td",null,t(d(u.cache_write_tokens)),1),e("td",null,t(_(u)),1),e("td",null,t(u.sessions),1),e("td",null,t(g(u.cost)),1)]))),128))])])])]))}})})),ct=y((()=>{})),Xe,vt=y((()=>{He(),He(),ct(),F(),Xe=B(Qe,[["__scopeId","data-v-9eb202e8"]])})),Ie,Le,Oe,qe,ze,Ne,We,Ke,Ye,Ae=y((()=>{S(),at(),P(),V(),rt(),_t(),vt(),Ie={class:"usage-view"},Le={class:"page-header"},Oe={class:"header-title"},qe={class:"usage-toolbar"},ze={class:"period-selector",role:"group","aria-label":"Usage statistics period"},Ne={class:"usage-content"},We={key:0,class:"usage-loading"},Ke={key:2,class:"usage-empty"},Ye=R({__name:"UsageView",setup(r){const{t:a}=D(),n=C(),d=[{label:"7d",days:7},{label:"30d",days:30},{label:"90d",days:90},{label:"365d",days:365}],g=H(30);function _(c=g.value){g.value=c,n.loadSessions(c)}return st(()=>{_(30)}),(c,i)=>(v(),p("div",Ie,[e("header",Le,[e("h2",Oe,t(s(a)("usage.title")),1),e("div",qe,[e("div",ze,[(v(),p(x,null,M(d,o=>w(s(O),{key:o.days,class:"period-option",size:"small",type:g.value===o.days?"primary":"default",secondary:g.value===o.days,quaternary:g.value!==o.days,"aria-pressed":g.value===o.days,onClick:u=>_(o.days)},{default:q(()=>[T(t(o.label),1)]),_:2},1032,["type","secondary","quaternary","aria-pressed","onClick"])),64))]),w(s(O),{class:"refresh-button",size:"small",quaternary:"",loading:s(n).isLoading,onClick:i[0]||(i[0]=o=>_())},{default:q(()=>[T(t(s(a)("usage.refresh")),1)]),_:1},8,["loading"])])]),e("div",Ne,[s(n).isLoading&&!s(n).hasData?(v(),p("div",We,t(s(a)("common.loading")),1)):s(n).hasData?(v(),p(x,{key:1},[w(je),w(Je),w(Xe)],64)):(v(),p("div",Ke,t(s(a)("usage.noData")),1))])]))}})})),pt=y((()=>{})),ht,gt=y((()=>{Ae(),Ae(),pt(),F(),ht=B(Ye,[["__scopeId","data-v-954f84e2"]])}));gt();export{ht as default};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/js/LoginView-BP1Dbycl.js","assets/js/rolldown-runtime-BKwlnUi0.js","assets/js/index-JI6E-cKo.js","assets/js/ui-vendor-CsTMg6zH.js","assets/js/mermaid-Dc9pVNd5.js","assets/js/vendor-D9rSt2qK.js","assets/js/vue-vendor-D8zSB7VM.js","assets/js/app-BP-u-rQP.js","assets/css/index-6cXv6v9U.css","assets/js/auth-CrqiXkJC.js","assets/css/LoginView-DYIlc1ie.css","assets/js/ChatView-DOr-OoTw.js","assets/js/xterm-CN_HBdCu.js","assets/css/xterm-sLQPUA_C.css","assets/js/FileRenameModal-DCzKrCtb.js","assets/js/monaco-editor-EDqig1FP.js","assets/css/monaco-editor-DPqmyJk4.css","assets/js/MarkdownRenderer-CvzCPLnZ.js","assets/js/clipboard-BqPv71We.js","assets/css/MarkdownRenderer-xEKocnSy.css","assets/css/FileRenameModal-DFdhYWBH.css","assets/js/MessageItem-BzZuEzVW.js","assets/js/ttsHelpers-CaQY_kjb.js","assets/css/MessageItem-BnRyVVNn.css","assets/js/SessionListItem-Y4rY8ixs.js","assets/js/session-browser-prefs-DPQy70mA.js","assets/css/ChatView-DDg7Dr61.css","assets/js/HistoryView-Bx31cTqX.js","assets/js/HistoryMessageList-Dppp5myU.js","assets/css/HistoryMessageList-CkV0N4WP.css","assets/css/HistoryView-Bw4Yod8s.css","assets/js/JobsView-Dwo25w0R.js","assets/css/JobsView-B2GytzDa.css","assets/js/KanbanView-B0OXZzdS.js","assets/css/KanbanView-BrxcwOQh.css","assets/js/ModelsView-Bu2mJnSO.js","assets/js/models-BR4rntqB.js","assets/css/ModelsView-DV-L7jfo.css","assets/js/ProfilesView-rgzlgeY7.js","assets/css/ProfilesView-D2g-vrOb.css","assets/js/LogsView-Bjv7V7F0.js","assets/css/LogsView-CMxhihg_.css","assets/js/UsageView-DUlZFcoj.js","assets/css/UsageView-D3ijA42X.css","assets/js/SkillsUsageView-DmKMulrJ.js","assets/js/skills-BZYoszrI.js","assets/css/SkillsUsageView-N2cr8g-C.css","assets/js/SkillsView-DrUkFlBB.js","assets/css/SkillsView-B4bgajEn.css","assets/js/PluginsView-Do42kP51.js","assets/css/PluginsView-ty7Rxdjp.css","assets/js/MemoryView-BZqGsRGv.js","assets/css/MemoryView-np0XB_9k.css","assets/js/SettingsView-BsJJZ2sv.js","assets/js/SettingRow-5JNu2zcB.js","assets/css/SettingRow-BU_KTQ5j.css","assets/css/SettingsView-C2hn43L-.css","assets/js/GatewaysView-DoaDCbK0.js","assets/css/GatewaysView-prCThey1.css","assets/js/ChannelsView-D_Hpf1W2.js","assets/css/ChannelsView-CcfHqims.css","assets/js/TerminalView-HQvnFA42.js","assets/css/TerminalView-Dxc_JcEi.css","assets/js/GroupChatView-DnI3I50w.js","assets/css/GroupChatView-BJrMPpkU.css","assets/js/FilesView-UJ8COV83.js","assets/css/FilesView-CsjGjxfu.css"])))=>i.map(i=>d[i]);
2
- import{i as $,n as d,r as V}from"./rolldown-runtime-BKwlnUi0.js";import{Nt as p,U}from"./ui-vendor-CsTMg6zH.js";import{a as C,d as x,i as N,o as B,u as j}from"./vue-vendor-D8zSB7VM.js";import{Ut as o,Wt as K}from"./mermaid-Dc9pVNd5.js";async function z(){return(await u("/api/hermes/profiles")).profiles}async function F(e){return(await u(`/api/hermes/profiles/${encodeURIComponent(e)}`)).profile}async function W(e,a){try{const t=await u("/api/hermes/profiles",{method:"POST",body:JSON.stringify({name:e,clone:a})});return{success:!!t.success,strippedCredentials:t.strippedCredentials,disabledPlatforms:t.disabledPlatforms,strippedConfigCredentials:t.strippedConfigCredentials,error:t.error}}catch(t){return{success:!1,error:t.message||"Unknown error"}}}async function J(e){try{return await u(`/api/hermes/profiles/${encodeURIComponent(e)}`,{method:"DELETE"}),!0}catch{return!1}}async function H(e,a){try{return await u(`/api/hermes/profiles/${encodeURIComponent(e)}/rename`,{method:"POST",body:JSON.stringify({new_name:a})}),!0}catch{return!1}}async function M(e){try{return await u("/api/hermes/profiles/active",{method:"PUT",body:JSON.stringify({name:e})}),!0}catch{return!1}}async function q(e){try{const a=I(),t=v(),n={};t&&(n.Authorization=`Bearer ${t}`);const l=await fetch(`${a}/api/hermes/profiles/${encodeURIComponent(e)}/export`,{method:"POST",headers:n});if(!l.ok)throw new Error;const c=await l.blob(),s=URL.createObjectURL(c),f=document.createElement("a");return f.href=s,f.download=`hermes-profile-${e}.tar.gz`,f.click(),URL.revokeObjectURL(s),!0}catch{return!1}}async function G(e){try{const a=I(),t=v(),n={};t&&(n.Authorization=`Bearer ${t}`);const l=new FormData;return l.append("file",e),(await fetch(`${a}/api/hermes/profiles/import`,{method:"POST",headers:n,body:l})).ok}catch{return!1}}var X=d((()=>{R()})),Y=V({useProfilesStore:()=>g}),_,g,Q=d((()=>{x(),U(),X(),_="hermes_active_profile_name",g=j("profiles",()=>{const e=p([]),a=p(localStorage.getItem(_)),t=p(null),n=p({}),l=p(!1),c=p(!1);async function s(){l.value=!0;try{e.value=await z(),t.value=e.value.find(r=>r.active)??null,t.value&&(a.value=t.value.name,localStorage.setItem(_,t.value.name))}catch(r){console.error("Failed to fetch profiles:",r)}finally{l.value=!1}}async function f(r){if(n.value[r])return n.value[r];try{const i=await F(r);return n.value[r]=i,i}catch{return null}}async function y(r,i){const m=await W(r,i);return m.success&&await s(),m}async function O(r){const i=await J(r);return i&&(delete n.value[r],await s()),i}function T(){}async function L(r,i){const m=await H(r,i);return m&&(delete n.value[r],await s()),m}async function b(r){c.value=!0;try{const i=await M(r);if(i){const m=a.value;a.value=r,localStorage.setItem(_,r);try{await s();const h=e.value.find(S=>S.active);if(h&&h.name!==r)return console.warn(`[switchProfile] Backend verification failed: expected active profile "${r}", but backend reports "${h.name}". Rolling back frontend state.`),a.value=m,m?localStorage.setItem(_,m):localStorage.removeItem(_),!1}catch(h){console.warn("Failed to refresh profiles list after switch, assuming switch succeeded:",h)}}return i}finally{c.value=!1}}async function k(r){return q(r)}async function D(r){const i=await G(r);return i&&await s(),i}return{profiles:e,activeProfile:t,activeProfileName:a,detailMap:n,loading:l,switching:c,fetchProfiles:s,fetchProfileDetail:f,createProfile:y,deleteProfile:O,renameProfile:L,switchProfile:b,exportProfile:k,importProfile:D,clearAllSessionCaches:T}})}));function w(){return localStorage.getItem("hermes_server_url")||A}function v(){return localStorage.getItem("hermes_api_key")||""}function ie(e){localStorage.setItem("hermes_api_key",e)}function Z(){localStorage.removeItem("hermes_api_key")}function E(){return!!v()}function ee(){try{const{useProfilesStore:e}=(Q(),$(Y));return e().activeProfileName}catch{return localStorage.getItem("hermes_active_profile_name")}}async function u(e,a={}){const t=`${w()}${e}`,n={"Content-Type":"application/json",...a.headers},l=v();l&&(n.Authorization=`Bearer ${l}`);const c=ee();c&&c!=="default"&&(n["X-Hermes-Profile"]=c);const s=await fetch(t,{...a,headers:n}),f=!e.startsWith("/api/hermes/v1/")&&!e.startsWith("/api/hermes/jobs")&&!e.startsWith("/api/hermes/skills");if(s.status===401&&f)throw Z(),P.currentRoute.value.name!=="login"&&P.replace({name:"login"}),new Error("Unauthorized");if(!s.ok){const y=await s.text().catch(()=>"");throw new Error(`API Error ${s.status}: ${y||s.statusText}`)}return s.json()}function I(){return w()}var A,R=d((()=>{te(),A=""})),P,te=d((()=>{B(),R(),K(),P=N({history:C(),routes:[{path:"/",name:"login",component:()=>o(()=>import("./LoginView-BP1Dbycl.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),meta:{public:!0}},{path:"/hermes/chat",name:"hermes.chat",component:()=>o(()=>import("./ChatView-DOr-OoTw.js"),__vite__mapDeps([11,1,2,3,4,5,6,7,8,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]))},{path:"/hermes/history",name:"hermes.history",component:()=>o(()=>import("./HistoryView-Bx31cTqX.js"),__vite__mapDeps([27,1,2,3,4,5,6,7,8,28,21,17,18,19,22,23,29,24,25,30]))},{path:"/hermes/jobs",name:"hermes.jobs",component:()=>o(()=>import("./JobsView-Dwo25w0R.js"),__vite__mapDeps([31,1,2,3,4,5,6,7,8,17,18,19,32]))},{path:"/hermes/kanban",name:"hermes.kanban",component:()=>o(()=>import("./KanbanView-B0OXZzdS.js"),__vite__mapDeps([33,1,3,4,6,5,28,2,7,8,21,17,18,19,22,23,29,34]))},{path:"/hermes/models",name:"hermes.models",component:()=>o(()=>import("./ModelsView-Bu2mJnSO.js"),__vite__mapDeps([35,1,2,3,4,5,6,7,8,36,18,37]))},{path:"/hermes/profiles",name:"hermes.profiles",component:()=>o(()=>import("./ProfilesView-rgzlgeY7.js"),__vite__mapDeps([38,1,3,4,6,5,39]))},{path:"/hermes/logs",name:"hermes.logs",component:()=>o(()=>import("./LogsView-Bjv7V7F0.js"),__vite__mapDeps([40,1,3,4,6,5,41]))},{path:"/hermes/usage",name:"hermes.usage",component:()=>o(()=>import("./UsageView-DUlZFcoj.js"),__vite__mapDeps([42,1,2,3,4,5,6,7,8,43]))},{path:"/hermes/skills-usage",name:"hermes.skillsUsage",component:()=>o(()=>import("./SkillsUsageView-DmKMulrJ.js"),__vite__mapDeps([44,1,3,4,6,5,45,46]))},{path:"/hermes/skills",name:"hermes.skills",component:()=>o(()=>import("./SkillsView-DrUkFlBB.js"),__vite__mapDeps([47,1,3,4,6,5,17,18,19,45,48]))},{path:"/hermes/plugins",name:"hermes.plugins",component:()=>o(()=>import("./PluginsView-Do42kP51.js"),__vite__mapDeps([49,1,3,4,6,5,50]))},{path:"/hermes/memory",name:"hermes.memory",component:()=>o(()=>import("./MemoryView-BZqGsRGv.js"),__vite__mapDeps([51,1,3,4,6,5,17,18,19,45,52]))},{path:"/hermes/settings",name:"hermes.settings",component:()=>o(()=>import("./SettingsView-BsJJZ2sv.js"),__vite__mapDeps([53,1,2,3,4,5,6,7,8,9,22,54,55,36,25,56]))},{path:"/hermes/gateways",name:"hermes.gateways",component:()=>o(()=>import("./GatewaysView-DoaDCbK0.js"),__vite__mapDeps([57,1,3,4,6,5,58]))},{path:"/hermes/channels",name:"hermes.channels",component:()=>o(()=>import("./ChannelsView-D_Hpf1W2.js"),__vite__mapDeps([59,1,2,3,4,5,6,7,8,54,55,60]))},{path:"/hermes/terminal",name:"hermes.terminal",component:()=>o(()=>import("./TerminalView-HQvnFA42.js"),__vite__mapDeps([61,1,3,4,12,13,6,5,62]))},{path:"/hermes/group-chat",name:"hermes.groupChat",component:()=>o(()=>import("./GroupChatView-DnI3I50w.js"),__vite__mapDeps([63,1,2,3,4,5,6,7,8,17,18,19,64]))},{path:"/hermes/files",name:"hermes.files",component:()=>o(()=>import("./FilesView-UJ8COV83.js"),__vite__mapDeps([65,1,3,4,14,15,16,6,5,17,18,19,20,66]))}]}),P.beforeEach((e,a,t)=>{if(e.meta.public){if(e.name==="login"&&E()){t({path:"/hermes/chat"});return}t();return}if(!E()){t({name:"login"});return}t()})})),re,le=d((()=>{re=(e,a)=>{const t=e.__vccOpts||e;for(const[n,l]of a)t[n]=l;return t}}));export{v as a,R as c,Q as d,Y as f,P as i,u as l,le as n,I as o,g as p,te as r,E as s,re as t,ie as u};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/js/LoginView-nCg7jCjW.js","assets/js/rolldown-runtime-BKwlnUi0.js","assets/js/index-Bzb-xLYu.js","assets/js/ui-vendor-CsTMg6zH.js","assets/js/mermaid-Dc9pVNd5.js","assets/js/vendor-D9rSt2qK.js","assets/js/vue-vendor-D8zSB7VM.js","assets/js/app-CYaCGxZ_.js","assets/css/index-6cXv6v9U.css","assets/js/auth-hbDI2OUF.js","assets/css/LoginView-DYIlc1ie.css","assets/js/ChatView-Cpj8e0uj.js","assets/js/xterm-CN_HBdCu.js","assets/css/xterm-sLQPUA_C.css","assets/js/FileRenameModal-DS3tMLmA.js","assets/js/monaco-editor-EDqig1FP.js","assets/css/monaco-editor-DPqmyJk4.css","assets/js/MarkdownRenderer-BCFoS7DH.js","assets/js/clipboard-BqPv71We.js","assets/css/MarkdownRenderer-xEKocnSy.css","assets/css/FileRenameModal-DFdhYWBH.css","assets/js/MessageItem-BhSU5oee.js","assets/js/ttsHelpers-CaQY_kjb.js","assets/css/MessageItem-BnRyVVNn.css","assets/js/SessionListItem-BKe7QBCc.js","assets/js/session-browser-prefs-HIgWQY8T.js","assets/css/ChatView-DDg7Dr61.css","assets/js/HistoryView-By-yzPZa.js","assets/js/HistoryMessageList-DVoUuNfX.js","assets/css/HistoryMessageList-CkV0N4WP.css","assets/css/HistoryView-Bw4Yod8s.css","assets/js/JobsView-CCwgRxCj.js","assets/css/JobsView-B2GytzDa.css","assets/js/KanbanView-CHz90gv2.js","assets/css/KanbanView-BrxcwOQh.css","assets/js/ModelsView-BeDBR3tp.js","assets/js/models-CDvVG-uE.js","assets/css/ModelsView-DV-L7jfo.css","assets/js/ProfilesView-DgEhQ263.js","assets/css/ProfilesView-D2g-vrOb.css","assets/js/LogsView-BXG5oQpY.js","assets/css/LogsView-CMxhihg_.css","assets/js/UsageView-ByfmOWKv.js","assets/css/UsageView-D3ijA42X.css","assets/js/SkillsUsageView-BGvo9h2N.js","assets/js/skills-BCJOb_4y.js","assets/css/SkillsUsageView-N2cr8g-C.css","assets/js/SkillsView-DwsnhtnV.js","assets/css/SkillsView-B4bgajEn.css","assets/js/PluginsView-D3w2eLIX.js","assets/css/PluginsView-ty7Rxdjp.css","assets/js/MemoryView-DoVkLerx.js","assets/css/MemoryView-np0XB_9k.css","assets/js/SettingsView-VtbkRWEM.js","assets/js/SettingRow-Cj9O4m9X.js","assets/css/SettingRow-BU_KTQ5j.css","assets/css/SettingsView-C2hn43L-.css","assets/js/GatewaysView-DEwU6CSA.js","assets/css/GatewaysView-prCThey1.css","assets/js/ChannelsView-CuofDTcs.js","assets/css/ChannelsView-CcfHqims.css","assets/js/TerminalView-BAlxAV-W.js","assets/css/TerminalView-Dxc_JcEi.css","assets/js/GroupChatView-B1KWnK4w.js","assets/css/GroupChatView-BJrMPpkU.css","assets/js/FilesView-DitPDLfP.js","assets/css/FilesView-CsjGjxfu.css"])))=>i.map(i=>d[i]);
2
+ import{i as $,n as d,r as V}from"./rolldown-runtime-BKwlnUi0.js";import{Nt as p,U}from"./ui-vendor-CsTMg6zH.js";import{a as C,d as x,i as N,o as B,u as j}from"./vue-vendor-D8zSB7VM.js";import{Ut as o,Wt as K}from"./mermaid-Dc9pVNd5.js";async function z(){return(await u("/api/hermes/profiles")).profiles}async function F(e){return(await u(`/api/hermes/profiles/${encodeURIComponent(e)}`)).profile}async function W(e,a){try{const t=await u("/api/hermes/profiles",{method:"POST",body:JSON.stringify({name:e,clone:a})});return{success:!!t.success,strippedCredentials:t.strippedCredentials,disabledPlatforms:t.disabledPlatforms,strippedConfigCredentials:t.strippedConfigCredentials,error:t.error}}catch(t){return{success:!1,error:t.message||"Unknown error"}}}async function J(e){try{return await u(`/api/hermes/profiles/${encodeURIComponent(e)}`,{method:"DELETE"}),!0}catch{return!1}}async function H(e,a){try{return await u(`/api/hermes/profiles/${encodeURIComponent(e)}/rename`,{method:"POST",body:JSON.stringify({new_name:a})}),!0}catch{return!1}}async function M(e){try{return await u("/api/hermes/profiles/active",{method:"PUT",body:JSON.stringify({name:e})}),!0}catch{return!1}}async function q(e){try{const a=I(),t=v(),n={};t&&(n.Authorization=`Bearer ${t}`);const l=await fetch(`${a}/api/hermes/profiles/${encodeURIComponent(e)}/export`,{method:"POST",headers:n});if(!l.ok)throw new Error;const c=await l.blob(),s=URL.createObjectURL(c),f=document.createElement("a");return f.href=s,f.download=`hermes-profile-${e}.tar.gz`,f.click(),URL.revokeObjectURL(s),!0}catch{return!1}}async function G(e){try{const a=I(),t=v(),n={};t&&(n.Authorization=`Bearer ${t}`);const l=new FormData;return l.append("file",e),(await fetch(`${a}/api/hermes/profiles/import`,{method:"POST",headers:n,body:l})).ok}catch{return!1}}var X=d((()=>{R()})),Y=V({useProfilesStore:()=>g}),_,g,Q=d((()=>{x(),U(),X(),_="hermes_active_profile_name",g=j("profiles",()=>{const e=p([]),a=p(localStorage.getItem(_)),t=p(null),n=p({}),l=p(!1),c=p(!1);async function s(){l.value=!0;try{e.value=await z(),t.value=e.value.find(r=>r.active)??null,t.value&&(a.value=t.value.name,localStorage.setItem(_,t.value.name))}catch(r){console.error("Failed to fetch profiles:",r)}finally{l.value=!1}}async function f(r){if(n.value[r])return n.value[r];try{const i=await F(r);return n.value[r]=i,i}catch{return null}}async function y(r,i){const m=await W(r,i);return m.success&&await s(),m}async function O(r){const i=await J(r);return i&&(delete n.value[r],await s()),i}function T(){}async function L(r,i){const m=await H(r,i);return m&&(delete n.value[r],await s()),m}async function b(r){c.value=!0;try{const i=await M(r);if(i){const m=a.value;a.value=r,localStorage.setItem(_,r);try{await s();const h=e.value.find(S=>S.active);if(h&&h.name!==r)return console.warn(`[switchProfile] Backend verification failed: expected active profile "${r}", but backend reports "${h.name}". Rolling back frontend state.`),a.value=m,m?localStorage.setItem(_,m):localStorage.removeItem(_),!1}catch(h){console.warn("Failed to refresh profiles list after switch, assuming switch succeeded:",h)}}return i}finally{c.value=!1}}async function k(r){return q(r)}async function D(r){const i=await G(r);return i&&await s(),i}return{profiles:e,activeProfile:t,activeProfileName:a,detailMap:n,loading:l,switching:c,fetchProfiles:s,fetchProfileDetail:f,createProfile:y,deleteProfile:O,renameProfile:L,switchProfile:b,exportProfile:k,importProfile:D,clearAllSessionCaches:T}})}));function w(){return localStorage.getItem("hermes_server_url")||A}function v(){return localStorage.getItem("hermes_api_key")||""}function ie(e){localStorage.setItem("hermes_api_key",e)}function Z(){localStorage.removeItem("hermes_api_key")}function E(){return!!v()}function ee(){try{const{useProfilesStore:e}=(Q(),$(Y));return e().activeProfileName}catch{return localStorage.getItem("hermes_active_profile_name")}}async function u(e,a={}){const t=`${w()}${e}`,n={"Content-Type":"application/json",...a.headers},l=v();l&&(n.Authorization=`Bearer ${l}`);const c=ee();c&&c!=="default"&&(n["X-Hermes-Profile"]=c);const s=await fetch(t,{...a,headers:n}),f=!e.startsWith("/api/hermes/v1/")&&!e.startsWith("/api/hermes/jobs")&&!e.startsWith("/api/hermes/skills");if(s.status===401&&f)throw Z(),P.currentRoute.value.name!=="login"&&P.replace({name:"login"}),new Error("Unauthorized");if(!s.ok){const y=await s.text().catch(()=>"");throw new Error(`API Error ${s.status}: ${y||s.statusText}`)}return s.json()}function I(){return w()}var A,R=d((()=>{te(),A=""})),P,te=d((()=>{B(),R(),K(),P=N({history:C(),routes:[{path:"/",name:"login",component:()=>o(()=>import("./LoginView-nCg7jCjW.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),meta:{public:!0}},{path:"/hermes/chat",name:"hermes.chat",component:()=>o(()=>import("./ChatView-Cpj8e0uj.js"),__vite__mapDeps([11,1,2,3,4,5,6,7,8,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]))},{path:"/hermes/history",name:"hermes.history",component:()=>o(()=>import("./HistoryView-By-yzPZa.js"),__vite__mapDeps([27,1,2,3,4,5,6,7,8,28,21,17,18,19,22,23,29,24,25,30]))},{path:"/hermes/jobs",name:"hermes.jobs",component:()=>o(()=>import("./JobsView-CCwgRxCj.js"),__vite__mapDeps([31,1,2,3,4,5,6,7,8,17,18,19,32]))},{path:"/hermes/kanban",name:"hermes.kanban",component:()=>o(()=>import("./KanbanView-CHz90gv2.js"),__vite__mapDeps([33,1,3,4,6,5,28,2,7,8,21,17,18,19,22,23,29,34]))},{path:"/hermes/models",name:"hermes.models",component:()=>o(()=>import("./ModelsView-BeDBR3tp.js"),__vite__mapDeps([35,1,2,3,4,5,6,7,8,36,18,37]))},{path:"/hermes/profiles",name:"hermes.profiles",component:()=>o(()=>import("./ProfilesView-DgEhQ263.js"),__vite__mapDeps([38,1,3,4,6,5,39]))},{path:"/hermes/logs",name:"hermes.logs",component:()=>o(()=>import("./LogsView-BXG5oQpY.js"),__vite__mapDeps([40,1,3,4,6,5,41]))},{path:"/hermes/usage",name:"hermes.usage",component:()=>o(()=>import("./UsageView-ByfmOWKv.js"),__vite__mapDeps([42,1,2,3,4,5,6,7,8,43]))},{path:"/hermes/skills-usage",name:"hermes.skillsUsage",component:()=>o(()=>import("./SkillsUsageView-BGvo9h2N.js"),__vite__mapDeps([44,1,3,4,6,5,45,46]))},{path:"/hermes/skills",name:"hermes.skills",component:()=>o(()=>import("./SkillsView-DwsnhtnV.js"),__vite__mapDeps([47,1,3,4,6,5,17,18,19,45,48]))},{path:"/hermes/plugins",name:"hermes.plugins",component:()=>o(()=>import("./PluginsView-D3w2eLIX.js"),__vite__mapDeps([49,1,3,4,6,5,50]))},{path:"/hermes/memory",name:"hermes.memory",component:()=>o(()=>import("./MemoryView-DoVkLerx.js"),__vite__mapDeps([51,1,3,4,6,5,17,18,19,45,52]))},{path:"/hermes/settings",name:"hermes.settings",component:()=>o(()=>import("./SettingsView-VtbkRWEM.js"),__vite__mapDeps([53,1,2,3,4,5,6,7,8,9,22,54,55,36,25,56]))},{path:"/hermes/gateways",name:"hermes.gateways",component:()=>o(()=>import("./GatewaysView-DEwU6CSA.js"),__vite__mapDeps([57,1,3,4,6,5,58]))},{path:"/hermes/channels",name:"hermes.channels",component:()=>o(()=>import("./ChannelsView-CuofDTcs.js"),__vite__mapDeps([59,1,2,3,4,5,6,7,8,54,55,60]))},{path:"/hermes/terminal",name:"hermes.terminal",component:()=>o(()=>import("./TerminalView-BAlxAV-W.js"),__vite__mapDeps([61,1,3,4,12,13,6,5,62]))},{path:"/hermes/group-chat",name:"hermes.groupChat",component:()=>o(()=>import("./GroupChatView-B1KWnK4w.js"),__vite__mapDeps([63,1,2,3,4,5,6,7,8,17,18,19,64]))},{path:"/hermes/files",name:"hermes.files",component:()=>o(()=>import("./FilesView-DitPDLfP.js"),__vite__mapDeps([65,1,3,4,14,15,16,6,5,17,18,19,20,66]))}]}),P.beforeEach((e,a,t)=>{if(e.meta.public){if(e.name==="login"&&E()){t({path:"/hermes/chat"});return}t();return}if(!E()){t({name:"login"});return}t()})})),re,le=d((()=>{re=(e,a)=>{const t=e.__vccOpts||e;for(const[n,l]of a)t[n]=l;return t}}));export{v as a,R as c,Q as d,Y as f,P as i,u as l,le as n,I as o,g as p,te as r,E as s,re as t,ie as u};
@@ -0,0 +1 @@
1
+ import{n as j}from"./rolldown-runtime-BKwlnUi0.js";import{Nt as l,U as re}from"./ui-vendor-CsTMg6zH.js";import{d as ue,u as ce}from"./vue-vendor-D8zSB7VM.js";import{c as q,l as c,s as F}from"./_plugin-vue_export-helper-CrLlP_D3.js";async function de(){return c("/health")}async function ve(){return c("/api/hermes/update",{method:"POST"})}async function fe(){return c("/api/hermes/available-models")}async function Me(o){return c("/api/hermes/provider-models",{method:"POST",body:JSON.stringify(o)})}async function me(o){await c("/api/hermes/config/model",{method:"PUT",body:JSON.stringify(o)})}async function pe(o){await c("/api/hermes/model-alias",{method:"PUT",body:JSON.stringify(o)})}async function Se(o){await c("/api/hermes/config/providers",{method:"POST",body:JSON.stringify(o)})}async function Oe(o){await c(`/api/hermes/config/providers/${encodeURIComponent(o)}`,{method:"DELETE"})}async function Ae(o,m){await c(`/api/hermes/config/providers/${encodeURIComponent(o)}`,{method:"PUT",body:JSON.stringify(m)})}async function ye(o){return c("/api/hermes/model-visibility",{method:"PUT",body:JSON.stringify(o)})}var he=j((()=>{q()})),T,U,B,be,Ce=j((()=>{ue(),re(),he(),q(),T="0.5.28",U="hermes_sidebar_collapsed",B=3e4,be=ce("app",()=>{const o=l(!1),m=l(localStorage.getItem(U)==="1"),P=l(!1),E=l(T),V=l(""),M=l(!1),S=l(!1),O=l(!1),p=l([]),v=l(""),f=l(""),r=l({}),y=l({}),b=l({}),g=l(),D=l(""),K=l(!0),W=l(!0),$=l(4096);let h=null,_=0;async function Y(){O.value=!0;try{const e=await ve();return e.success&&(M.value=!1,await w()),e.success}catch(e){return console.error("Failed to update Hermes Web UI:",e),!1}finally{O.value=!1}}async function w(){try{const e=await de();P.value=e.status==="ok",e.webui_version&&(E.value=e.webui_version),S.value=!!e.webui_version&&e.webui_version!==T,e.webui_latest&&(V.value=e.webui_latest),M.value=!!e.webui_update_available,e.node_version&&(D.value=e.node_version)}catch{P.value=!1,S.value=!1}}function N(e){p.value=e.groups,y.value=e.model_aliases||{},b.value=e.model_visibility||{};const a=e.default||"",t=e.default_provider||"",i=e.groups.find(u=>u.provider===t&&u.models.includes(a)),s=e.groups.find(u=>u.models.includes(a)),n=e.groups.find(u=>u.models.length>0),d=t?e.groups.find(u=>u.provider===t):void 0,C=t?e.allProviders.find(u=>u.provider===t):void 0,x=d?.available_models?.length?d.available_models:C?.available_models?.length?C.available_models:C?.models||[],H=t?b.value[t]:void 0,se=!!(a&&H?.mode==="include"&&!H.models.includes(a)&&(x.length===0||x.includes(a))),ne=!!(a&&t&&d&&!d.models.includes(a)&&!se);if(i||s){const u=i||s;v.value=a,f.value=u.provider,r.value={}}else ne?(v.value=a,f.value=t,r.value={[t]:[a]}):n?(v.value=n.models[0],f.value=n.provider,r.value={}):(v.value="",f.value="",r.value={})}async function A(e=!1){if(F()){if(!e&&h)return h;if(!(!e&&_>0&&Date.now()-_<B))return _=Date.now(),h=(async()=>{try{N(await fe())}catch{}finally{h=null}})(),h}}async function z(e=15e3){if(!F())return;const a=h||(_===0?A():null);a&&await Promise.race([a,new Promise(t=>setTimeout(t,e))])}async function R(){return A(!0)}function L(e,a){if(a)return y.value[a]?.[e]||"";for(const t of Object.values(y.value))if(t[e])return t[e];return""}function Q(e,a){return L(e,a)||e}async function X(e,a,t){const i=t.trim();await pe({provider:a,model:e,alias:i});const s={...y.value},n={...s[a]||{}};i?(n[e]=i,s[a]=n):(delete n[e],Object.keys(n).length>0?s[a]=n:delete s[a]),y.value=s}async function k(e,a){try{const t=p.value.find(s=>s.models.includes(e)),i=a||t?.provider||"";await me({default:e,provider:i}),v.value=e,f.value=i||"",i&&!p.value.find(s=>s.provider===i)?.models.includes(e)&&(r.value[i]||(r.value[i]=[]),r.value[i].includes(e)||(r.value[i]=[...r.value[i],e]))}catch(t){console.error("Failed to switch model:",t)}}async function Z(e,a){const t=r.value[a]||[];if(!t.includes(e))return;const i={...r.value},s=t.filter(n=>n!==e);if(s.length>0?i[a]=s:delete i[a],r.value=i,v.value===e&&f.value===a){const n=p.value.find(d=>d.provider===a&&d.models.length>0)||p.value.find(d=>d.models.length>0);n?await k(n.models[0],n.provider):(v.value="",f.value="")}}function G(e){return b.value[e]||{mode:"all",models:[]}}function I(e,a){const t=G(e);return t.mode!=="include"||t.models.includes(a)}async function ee(e,a){b.value=(await ye({provider:e,mode:a.mode,models:a.models})).model_visibility||{},await R()}function ae(e=3e4){J(),w(),g.value=setInterval(w,e)}function J(){g.value&&(clearInterval(g.value),g.value=void 0)}function te(){const e=new URL(window.location.href);e.searchParams.set("__hwui_reload",Date.now().toString()),window.location.replace(e.toString())}function ie(){o.value=!o.value}function le(){o.value=!1}function oe(){m.value=!m.value;try{localStorage.setItem(U,m.value?"1":"0")}catch{}}return{sidebarOpen:o,sidebarCollapsed:m,toggleSidebar:ie,closeSidebar:le,toggleSidebarCollapsed:oe,connected:P,serverVersion:E,latestVersion:V,nodeVersion:D,updateAvailable:M,clientOutdated:S,updating:O,doUpdate:Y,reloadClient:te,modelGroups:p,customModels:r,modelAliases:y,modelVisibility:b,selectedModel:v,selectedProvider:f,streamEnabled:K,sessionPersistence:W,maxTokens:$,checkConnection:w,loadModels:A,waitForModelsForRun:z,reloadModels:R,applyAvailableModelsResponse:N,switchModel:k,removeCustomModel:Z,getModelAlias:L,displayModelName:Q,setModelAlias:X,getProviderVisibility:G,isModelVisible:I,setModelVisibility:ee,startHealthPolling:ae,stopHealthPolling:J}})}));export{Me as a,me as c,fe as i,Ae as l,be as n,he as o,Se as r,Oe as s,Ce as t};
@@ -1 +1 @@
1
- import{n as i}from"./rolldown-runtime-BKwlnUi0.js";import{c as r,l as n}from"./_plugin-vue_export-helper-ZIsfSgrY.js";async function h(){const t=await fetch("/api/auth/status");if(!t.ok)throw new Error("Failed to fetch auth status");return t.json()}async function p(t,a){const s=await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:t,password:a})});if(!s.ok){const e=await s.json().catch(()=>({})),o=new Error(e.error||"Login failed");throw o.status=s.status,o}return(await s.json()).token}async function d(t,a){return n("/api/auth/setup",{method:"POST",body:JSON.stringify({username:t,password:a})})}async function f(t,a){return n("/api/auth/change-password",{method:"POST",body:JSON.stringify({currentPassword:t,newPassword:a})})}async function y(t,a){return n("/api/auth/change-username",{method:"POST",body:JSON.stringify({currentPassword:t,newUsername:a})})}async function l(){return n("/api/auth/password",{method:"DELETE"})}async function m(){return(await n("/api/auth/locked-ips")).locks}async function w(t){return n(`/api/auth/locked-ips?ip=${encodeURIComponent(t)}`,{method:"DELETE"})}async function g(){return(await n("/api/auth/locked-ips",{method:"DELETE"})).count}var E=i((()=>{r()}));export{E as a,d as c,m as i,g as l,y as n,p as o,h as r,l as s,f as t,w as u};
1
+ import{n as i}from"./rolldown-runtime-BKwlnUi0.js";import{c as r,l as n}from"./_plugin-vue_export-helper-CrLlP_D3.js";async function h(){const t=await fetch("/api/auth/status");if(!t.ok)throw new Error("Failed to fetch auth status");return t.json()}async function p(t,a){const s=await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:t,password:a})});if(!s.ok){const e=await s.json().catch(()=>({})),o=new Error(e.error||"Login failed");throw o.status=s.status,o}return(await s.json()).token}async function d(t,a){return n("/api/auth/setup",{method:"POST",body:JSON.stringify({username:t,password:a})})}async function f(t,a){return n("/api/auth/change-password",{method:"POST",body:JSON.stringify({currentPassword:t,newPassword:a})})}async function y(t,a){return n("/api/auth/change-username",{method:"POST",body:JSON.stringify({currentPassword:t,newUsername:a})})}async function l(){return n("/api/auth/password",{method:"DELETE"})}async function m(){return(await n("/api/auth/locked-ips")).locks}async function w(t){return n(`/api/auth/locked-ips?ip=${encodeURIComponent(t)}`,{method:"DELETE"})}async function g(){return(await n("/api/auth/locked-ips",{method:"DELETE"})).count}var E=i((()=>{r()}));export{E as a,d as c,m as i,g as l,y as n,p as o,h as r,l as s,f as t,w as u};