hermium 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/public/assets/css/styles-YqYDZ89Q.css +1 -0
  2. package/dist/public/assets/js/{ChatInputBlock-DtDwhu-o.js → ChatInputBlock-BYpIR_ls.js} +1 -1
  3. package/dist/{server/public/assets/js/MarkdownMessage-HqtkizAq.js → public/assets/js/MarkdownMessage-DL1aUod4.js} +1 -1
  4. package/dist/{server/public/assets/js/chat._sessionId-CQhAWRie.js → public/assets/js/chat._sessionId-YaowVhVf.js} +1 -1
  5. package/dist/public/assets/js/{chat.index-Rey-yJNu.js → chat.index-B64jjuMw.js} +1 -1
  6. package/dist/public/assets/js/{index-DaPM5Pp6.js → index-DnOJbmz0.js} +1 -1
  7. package/dist/public/assets/js/{index-lcPGeFiu.js → index-DsMUdp1X.js} +3 -3
  8. package/dist/public/assets/js/{memory-hKlWOmsk.js → memory-B_Uy_WUi.js} +1 -1
  9. package/dist/public/assets/js/{settings-CgEeK7SY.js → settings-ZdgGJLcS.js} +1 -1
  10. package/dist/public/assets/js/{skills-Os0vuATW.js → skills-Bg3vZgl2.js} +1 -1
  11. package/dist/public/assets/js/{usage-Bkxk-UWX.js → usage-DXPIAwzR.js} +1 -1
  12. package/dist/server/_ssr/{ChatInputBlock-Dax0BiWA.mjs → ChatInputBlock-BONgzml9.mjs} +1 -1
  13. package/dist/server/_ssr/{MarkdownMessage-Cwh9eBP2.mjs → MarkdownMessage-y8GThg94.mjs} +1 -1
  14. package/dist/server/_ssr/{chat._sessionId-CI4x2myS.mjs → chat._sessionId-BSlHY8-3.mjs} +4 -4
  15. package/dist/server/_ssr/{chat.index-CkW4HXDE.mjs → chat.index-DaPRZ2yS.mjs} +1 -1
  16. package/dist/server/_ssr/{index-Cnfau46H.mjs → index-B6Q_iKG1.mjs} +2 -2
  17. package/dist/server/_ssr/{index-CZIkem83.mjs → index-D-zP2Zbh.mjs} +2 -2
  18. package/dist/server/_ssr/{memory-DNXYkaz6.mjs → memory-CeEgICRt.mjs} +3 -3
  19. package/dist/server/_ssr/{router-BHawbDFJ.mjs → router-BwJ9sLwD.mjs} +12 -11
  20. package/dist/server/_ssr/{skills-De5OAjih.mjs → skills-BgBDh_7P.mjs} +3 -3
  21. package/dist/server/_ssr/{usage-CDQOB3tW.mjs → usage-BRFRmZxm.mjs} +1 -1
  22. package/dist/server/{_tanstack-start-manifest_v-CZgpkRLi.mjs → _tanstack-start-manifest_v-C1EEhhb2.mjs} +1 -1
  23. package/dist/server/index.mjs +66 -66
  24. package/dist/server/public/assets/css/styles-YqYDZ89Q.css +1 -0
  25. package/dist/server/public/assets/js/{ChatInputBlock-DtDwhu-o.js → ChatInputBlock-BYpIR_ls.js} +1 -1
  26. package/dist/{public/assets/js/MarkdownMessage-HqtkizAq.js → server/public/assets/js/MarkdownMessage-DL1aUod4.js} +1 -1
  27. package/dist/{public/assets/js/chat._sessionId-CQhAWRie.js → server/public/assets/js/chat._sessionId-YaowVhVf.js} +1 -1
  28. package/dist/server/public/assets/js/{chat.index-Rey-yJNu.js → chat.index-B64jjuMw.js} +1 -1
  29. package/dist/server/public/assets/js/{index-DaPM5Pp6.js → index-DnOJbmz0.js} +1 -1
  30. package/dist/server/public/assets/js/{index-lcPGeFiu.js → index-DsMUdp1X.js} +3 -3
  31. package/dist/server/public/assets/js/{memory-hKlWOmsk.js → memory-B_Uy_WUi.js} +1 -1
  32. package/dist/server/public/assets/js/{settings-CgEeK7SY.js → settings-ZdgGJLcS.js} +1 -1
  33. package/dist/server/public/assets/js/{skills-Os0vuATW.js → skills-Bg3vZgl2.js} +1 -1
  34. package/dist/server/public/assets/js/{usage-Bkxk-UWX.js → usage-DXPIAwzR.js} +1 -1
  35. package/package.json +1 -1
  36. package/dist/public/assets/css/styles-B8p6jk5Z.css +0 -1
  37. package/dist/server/public/assets/css/styles-B8p6jk5Z.css +0 -1
@@ -1,3 +1,3 @@
1
- import{G as y,D as n,L as w,C as e,h as g,S as z,x as k,b as j,B as u,n as C,j as I,q as M,p as E}from"./index-lcPGeFiu.js";import{M as A}from"./MarkdownMessage-HqtkizAq.js";async function D(){return y("/api/hermes/memory")}async function L(s,o){await y("/api/hermes/memory",{method:"POST",body:JSON.stringify({section:s,content:o})})}const P={memory:{title:"My Notes",icon:e.jsx(E,{className:"size-4"}),empty:"No notes yet. Write down things you want the AI to remember.",placeholder:"Write anything you want the AI to remember about this conversation, context, or preferences..."},user:{title:"User Profile",icon:e.jsx(M,{className:"size-4"}),empty:"No user profile. Add details about yourself.",placeholder:"Describe yourself — your role, expertise, preferences, communication style..."},soul:{title:"Soul",icon:e.jsx(j,{className:"size-4"}),empty:"No soul defined. Set the AI's personality and behavior.",placeholder:"Define the AI's personality, tone, expertise, and how it should behave..."}};function R(s){if(!s)return"";try{return new Date(s).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return""}}function p({section:s,data:o,onSave:f}){const[l,i]=n.useState(!1),[c,m]=n.useState(""),[d,r]=n.useState(!1),a=P[s],t=o[s],x=o[`${s}_mtime`],N=!t.trim(),v=()=>{m(t),i(!0)},b=()=>{i(!1),m("")},S=async()=>{r(!0);try{await f(s,c),i(!1)}catch(h){console.error("Failed to save memory:",h)}finally{r(!1)}};return e.jsxs("div",{className:"flex flex-col border rounded-lg overflow-hidden h-full min-h-0",children:[e.jsxs("div",{className:"flex items-center justify-between px-3 py-2.5 bg-muted/50 border-b shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-muted-foreground",children:a.icon}),e.jsx("span",{className:"text-sm font-medium",children:a.title}),x?e.jsx("span",{className:"text-[10px] text-muted-foreground/60 ml-1",children:R(x)}):null]}),l?e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(u,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:b,disabled:d,children:"Cancel"}),e.jsx(u,{size:"sm",className:"h-7 px-3 text-xs",onClick:S,disabled:d,children:d?e.jsx(g,{className:"size-3 animate-spin"}):"Save"})]}):e.jsxs(u,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:v,children:[e.jsx(I,{className:"size-3 mr-1"}),"Edit"]})]}),l?e.jsx("textarea",{value:c,onChange:h=>m(h.target.value),placeholder:a.placeholder,spellCheck:!1,className:"flex-1 min-h-0 w-full resize-none border-0 bg-transparent px-3 py-3 text-sm leading-relaxed outline-none focus-visible:ring-0 font-mono"}):e.jsx("div",{className:"flex-1 overflow-y-auto p-3 min-h-0",children:N?e.jsx("p",{className:"text-sm text-muted-foreground italic",children:a.empty}):e.jsx(A,{content:t.replace(/§/g,`
1
+ import{G as y,D as n,L as w,C as e,h as g,S as z,x as k,b as j,B as u,n as C,j as I,q as M,p as E}from"./index-DsMUdp1X.js";import{M as A}from"./MarkdownMessage-DL1aUod4.js";async function D(){return y("/api/hermes/memory")}async function L(s,o){await y("/api/hermes/memory",{method:"POST",body:JSON.stringify({section:s,content:o})})}const P={memory:{title:"My Notes",icon:e.jsx(E,{className:"size-4"}),empty:"No notes yet. Write down things you want the AI to remember.",placeholder:"Write anything you want the AI to remember about this conversation, context, or preferences..."},user:{title:"User Profile",icon:e.jsx(M,{className:"size-4"}),empty:"No user profile. Add details about yourself.",placeholder:"Describe yourself — your role, expertise, preferences, communication style..."},soul:{title:"Soul",icon:e.jsx(j,{className:"size-4"}),empty:"No soul defined. Set the AI's personality and behavior.",placeholder:"Define the AI's personality, tone, expertise, and how it should behave..."}};function R(s){if(!s)return"";try{return new Date(s).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return""}}function p({section:s,data:o,onSave:f}){const[l,i]=n.useState(!1),[c,m]=n.useState(""),[d,r]=n.useState(!1),a=P[s],t=o[s],x=o[`${s}_mtime`],N=!t.trim(),v=()=>{m(t),i(!0)},b=()=>{i(!1),m("")},S=async()=>{r(!0);try{await f(s,c),i(!1)}catch(h){console.error("Failed to save memory:",h)}finally{r(!1)}};return e.jsxs("div",{className:"flex flex-col border rounded-lg overflow-hidden h-full min-h-0",children:[e.jsxs("div",{className:"flex items-center justify-between px-3 py-2.5 bg-muted/50 border-b shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-muted-foreground",children:a.icon}),e.jsx("span",{className:"text-sm font-medium",children:a.title}),x?e.jsx("span",{className:"text-[10px] text-muted-foreground/60 ml-1",children:R(x)}):null]}),l?e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(u,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:b,disabled:d,children:"Cancel"}),e.jsx(u,{size:"sm",className:"h-7 px-3 text-xs",onClick:S,disabled:d,children:d?e.jsx(g,{className:"size-3 animate-spin"}):"Save"})]}):e.jsxs(u,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:v,children:[e.jsx(I,{className:"size-3 mr-1"}),"Edit"]})]}),l?e.jsx("textarea",{value:c,onChange:h=>m(h.target.value),placeholder:a.placeholder,spellCheck:!1,className:"flex-1 min-h-0 w-full resize-none border-0 bg-transparent px-3 py-3 text-sm leading-relaxed outline-none focus-visible:ring-0 font-mono"}):e.jsx("div",{className:"flex-1 overflow-y-auto p-3 min-h-0",children:N?e.jsx("p",{className:"text-sm text-muted-foreground italic",children:a.empty}):e.jsx(A,{content:t.replace(/§/g,`
2
2
 
3
3
  `)})})]})}function T(){const[s,o]=n.useState(null),[f,l]=n.useState(!0),[i,c]=n.useState(!1),{state:m}=w(),d=m==="collapsed",r=n.useCallback(async()=>{try{const t=await D();o(t)}catch(t){console.error("Failed to load memory:",t)}},[]);n.useEffect(()=>{l(!0),r().finally(()=>l(!1))},[r]);const a=async(t,x)=>{await L(t,x),await r()};return f?e.jsx("div",{className:"flex flex-1 items-center justify-center",children:e.jsxs("span",{className:"inline-flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(g,{className:"size-4 animate-spin"}),"Loading memory…"]})}):s?e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("header",{className:"flex items-center justify-between border-b px-4 py-3 shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[d&&e.jsx(z,{className:k("mr-1 -ml-1 text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0")}),e.jsx(j,{className:"size-5 text-muted-foreground"}),e.jsx("h2",{className:"text-sm font-medium",children:"Memory"})]}),e.jsxs(u,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:()=>{c(!0),r().finally(()=>c(!1))},disabled:i,children:[i?e.jsx(g,{className:"size-3 animate-spin"}):e.jsx(C,{className:"size-3"}),"Refresh"]})]}),e.jsx("div",{className:"flex-1 min-h-0 p-4 overflow-hidden",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 h-full min-h-0",children:[e.jsx(p,{section:"memory",data:s,onSave:a}),e.jsx(p,{section:"user",data:s,onSave:a}),e.jsx(p,{section:"soul",data:s,onSave:a})]})})]}):e.jsx("div",{className:"flex flex-1 items-center justify-center",children:e.jsx("p",{className:"text-sm text-muted-foreground",children:"Failed to load memory."})})}export{T as component};
@@ -1 +1 @@
1
- import{C as e}from"./index-lcPGeFiu.js";function t(){return e.jsxs("div",{className:"p-6",children:[e.jsx("h1",{className:"text-2xl font-semibold",children:"Settings"}),e.jsx("p",{className:"mt-2 text-muted-foreground",children:"Configure profiles, models, and preferences."})]})}export{t as component};
1
+ import{C as e}from"./index-DsMUdp1X.js";function t(){return e.jsxs("div",{className:"p-6",children:[e.jsx("h1",{className:"text-2xl font-semibold",children:"Settings"}),e.jsx("p",{className:"mt-2 text-muted-foreground",children:"Configure profiles, models, and preferences."})]})}export{t as component};
@@ -1 +1 @@
1
- import{C as e,v as ee,w as se,x as m,L as te,R as ae,D as r,z as w,A as R,S as M,B as y,I as P,h as S,n as B,g as le,r as T,o as re,t as ie,e as E,d as q,l as ne,H as oe}from"./index-lcPGeFiu.js";import{M as H}from"./MarkdownMessage-HqtkizAq.js";function ce({className:d,size:x="default",...n}){return e.jsx(ee,{"data-slot":"switch","data-size":x,className:m("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50",d),...n,children:e.jsx(se,{"data-slot":"switch-thumb",className:"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"})})}function K({source:d}){const x=d==="builtin"?"bg-muted-foreground":d==="hub"?"bg-blue-400":"bg-emerald-400";return e.jsx("span",{className:m("size-2 rounded-full shrink-0",x)})}function me(){const{state:d}=te(),x=d==="collapsed",n=ae.useLoaderData(),[g,z]=r.useState(!1),[o,O]=r.useState(""),[c,V]=r.useState("all"),[C,W]=r.useState(new Set),[j,G]=r.useState(!0),[l,v]=r.useState(null),[J,u]=r.useState(""),[L,N]=r.useState([]),[F,h]=r.useState(!1),[I,b]=r.useState(null),[Q,f]=r.useState(""),[,$]=r.useState(!1);r.useEffect(()=>{if(!l){u(""),N([]),b(null),f("");return}h(!0);const s=`${l.category}/${l.skill}/SKILL.md`;Promise.all([w(s),R(l.category,l.skill)]).then(([t,a])=>{u(t),N(a.filter(i=>!i.isDir))}).catch(t=>{u(`Failed to load skill: ${t.message}`)}).finally(()=>h(!1))},[l]);const A=r.useMemo(()=>{if(!n)return[];let s=n.categories;if(c!=="all"&&(s=s.map(t=>({...t,skills:t.skills.filter(a=>(a.source||"local")===c)})).filter(t=>t.skills.length>0)),o.trim()){const t=o.toLowerCase();s=s.map(a=>({...a,skills:a.skills.filter(i=>i.name.toLowerCase().includes(t)||i.description.toLowerCase().includes(t))})).filter(a=>a.skills.length>0||a.name.toLowerCase().includes(t))}return s},[n,c,o]),D=r.useMemo(()=>{if(!n)return[];let s=n.archived;if(c!=="all"&&(s=s.filter(t=>(t.source||"local")===c)),o.trim()){const t=o.toLowerCase();s=s.filter(a=>a.name.toLowerCase().includes(t)||a.description.toLowerCase().includes(t))}return s},[n,c,o]),U=s=>{W(t=>{const a=new Set(t);return a.has(s)?a.delete(s):a.add(s),a})},X=async(s,t,a)=>{try{await oe(t,a),setData(i=>i&&{...i,categories:i.categories.map(p=>p.name===s?{...p,skills:p.skills.map(k=>k.name===t?{...k,enabled:a}:k)}:p)})}catch(i){console.error("Toggle failed:",i)}},Y=async s=>{if(l){$(!0),b(s);try{const t=`${l.category}/${l.skill}/`,a=await w(`${t}${s}`);f(a)}catch(t){f(`Failed to load file: ${t.message}`)}finally{$(!1)}}},Z=()=>{b(null),f("")},_=[{label:"All",value:"all"},{label:"Builtin",value:"builtin"},{label:"Hub",value:"hub"},{label:"Local",value:"local"}];return l?e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("header",{className:"flex items-center justify-between border-b px-4 py-3 shrink-0 relative",children:[e.jsxs("div",{className:"flex items-center gap-2 z-10",children:[x&&e.jsx(M,{className:m("mr-1 -ml-1 text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0")}),e.jsxs(y,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:()=>v(null),children:[e.jsx(P,{className:"size-3.5 mr-1"}),"Back"]})]}),e.jsxs("div",{className:"absolute left-1/2 -translate-x-1/2 flex items-center gap-2 max-w-[50%]",children:[e.jsx("span",{className:"text-muted-foreground text-sm truncate",children:l.category}),e.jsx("span",{className:"text-muted-foreground shrink-0",children:"/"}),e.jsx("span",{className:"text-sm font-medium truncate",children:l.skill})]}),e.jsx("div",{className:"z-10",children:e.jsxs(y,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:()=>{h(!0);const s=`${l.category}/${l.skill}/SKILL.md`;Promise.all([w(s),R(l.category,l.skill)]).then(([t,a])=>{u(t),N(a.filter(i=>!i.isDir))}).finally(()=>h(!1))},disabled:F,children:[F?e.jsx(S,{className:"size-3 animate-spin"}):e.jsx(B,{className:"size-3"}),"Refresh"]})})]}),e.jsx("div",{className:"flex-1 overflow-y-auto p-4",children:e.jsx("div",{className:"max-w-3xl mx-auto flex flex-col gap-4",children:I?e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:Z,className:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline w-fit",children:[e.jsx(P,{className:"size-3"}),"Back to ",l.skill]}),e.jsx("div",{className:"text-sm text-muted-foreground mb-1",children:I}),e.jsx(H,{content:Q})]}):e.jsxs(e.Fragment,{children:[e.jsx(H,{content:J}),L.length>0&&e.jsxs("div",{className:"border-t pt-4 mt-2",children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider mb-2",children:"Attached Files"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:L.map(s=>e.jsxs("button",{onClick:()=>Y(s.path),className:"inline-flex items-center gap-1.5 rounded-md border bg-muted/50 px-2.5 py-1.5 text-xs text-foreground hover:bg-muted transition-colors",children:[e.jsx(le,{className:"size-3.5 text-muted-foreground shrink-0"}),e.jsx("span",{className:"truncate max-w-[180px]",children:s.path})]},s.path))})]})]})})})]}):e.jsxs("div",{className:"flex h-full",children:[e.jsxs("div",{className:"w-80 border-r flex flex-col h-full shrink-0",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b px-3 py-3 shrink-0",children:[x&&e.jsx(M,{className:m("mr-1 -ml-1 text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0")}),e.jsx(T,{className:"size-5 text-muted-foreground"}),e.jsx("h2",{className:"text-sm font-medium",children:"Skills"}),e.jsx(y,{variant:"ghost",size:"sm",className:"ml-auto h-7 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:()=>{z(!0),load().finally(()=>z(!1))},disabled:g,children:g?e.jsx(S,{className:"size-3 animate-spin"}):e.jsx(B,{className:"size-3"})})]}),e.jsxs("div",{className:"px-3 py-2 border-b flex flex-col gap-2 shrink-0",children:[e.jsxs("div",{className:"relative",children:[e.jsx(re,{className:"absolute left-2 top-1/2 -translate-y-1/2 size-3.5 text-muted-foreground"}),e.jsx(ie,{value:o,onChange:s=>O(s.target.value),placeholder:"Search skills...",className:"h-8 pl-7 text-xs"})]}),e.jsx("div",{className:"flex items-center gap-1",children:_.map(s=>e.jsx("button",{onClick:()=>V(s.value),className:m("px-2 py-0.5 text-[11px] rounded-sm transition-colors",c===s.value?"bg-primary text-primary-foreground font-medium":"text-muted-foreground hover:text-foreground hover:bg-muted"),children:s.label},s.value))})]}),e.jsx("div",{className:"flex-1 overflow-y-auto p-2",children:g?e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx(S,{className:"size-4 animate-spin text-muted-foreground"})}):!n||A.length===0?e.jsx("p",{className:"text-xs text-muted-foreground text-center py-8",children:o?"No skills match your search.":"No skills found."}):e.jsxs("div",{className:"flex flex-col gap-1",children:[A.map(s=>e.jsxs("div",{className:"flex flex-col",children:[e.jsxs("button",{onClick:()=>U(s.name),className:"flex items-center gap-1.5 px-2 py-1.5 text-xs font-semibold text-muted-foreground uppercase tracking-wider rounded-md hover:bg-muted/50 transition-colors",children:[C.has(s.name)?e.jsx(E,{className:"size-3 shrink-0"}):e.jsx(q,{className:"size-3 shrink-0"}),e.jsx("span",{className:"truncate",children:s.name}),e.jsx("span",{className:"ml-auto text-[10px] bg-muted px-1.5 py-0.5 rounded-full",children:s.skills.length})]}),!C.has(s.name)&&e.jsx("div",{className:"flex flex-col",children:s.skills.map(t=>e.jsxs("div",{className:"group flex items-center gap-2 px-2 py-1.5 pl-7 rounded-md hover:bg-muted/50 cursor-pointer transition-colors",onClick:()=>v({category:s.name,skill:t.name}),children:[e.jsx(K,{source:t.source}),e.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"text-xs font-medium truncate",children:t.name}),t.modified&&e.jsx("span",{className:"text-[10px] text-amber-500",title:"Modified",children:"✎"}),t.pinned&&e.jsx(ne,{className:"size-3 text-amber-500 shrink-0"})]}),t.description&&e.jsx("span",{className:"text-[10px] text-muted-foreground truncate",children:t.description})]}),e.jsx(ce,{checked:t.enabled!==!1,onCheckedChange:a=>X(s.name,t.name,a),className:"scale-75 shrink-0",onClick:a=>a.stopPropagation()})]},t.name))})]},s.name)),(D.length>0||(n?.archived.length??0)>0)&&e.jsxs("div",{className:"flex flex-col mt-2 pt-2 border-t",children:[e.jsxs("button",{onClick:()=>G(!j),className:"flex items-center gap-1.5 px-2 py-1.5 text-xs font-semibold text-muted-foreground uppercase tracking-wider rounded-md hover:bg-muted/50 transition-colors",children:[j?e.jsx(E,{className:"size-3 shrink-0"}):e.jsx(q,{className:"size-3 shrink-0"}),e.jsx("span",{children:"Archived"}),e.jsx("span",{className:"ml-auto text-[10px] bg-muted px-1.5 py-0.5 rounded-full",children:n?.archived.length??0})]}),!j&&D.map(s=>e.jsxs("div",{className:"flex items-center gap-2 px-2 py-1.5 pl-7 rounded-md hover:bg-muted/50 cursor-pointer transition-colors opacity-60",onClick:()=>v({category:".archive",skill:s.name}),children:[e.jsx(K,{source:s.source}),e.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[e.jsx("span",{className:"text-xs font-medium truncate",children:s.name}),s.description&&e.jsx("span",{className:"text-[10px] text-muted-foreground truncate",children:s.description})]})]},s.name))]})]})})]}),e.jsx("div",{className:"flex-1 flex flex-col items-center justify-center",children:e.jsxs("div",{className:"flex flex-col items-center gap-3 text-muted-foreground",children:[e.jsx(T,{className:"size-12 opacity-20"}),e.jsx("p",{className:"text-sm",children:"Select a skill to view its details"})]})})]})}export{me as component};
1
+ import{C as e,v as ee,w as se,x as m,L as te,R as ae,D as r,z as w,A as R,S as M,B as y,I as P,h as S,n as B,g as le,r as T,o as re,t as ie,e as E,d as q,l as ne,H as oe}from"./index-DsMUdp1X.js";import{M as H}from"./MarkdownMessage-DL1aUod4.js";function ce({className:d,size:x="default",...n}){return e.jsx(ee,{"data-slot":"switch","data-size":x,className:m("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50",d),...n,children:e.jsx(se,{"data-slot":"switch-thumb",className:"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"})})}function K({source:d}){const x=d==="builtin"?"bg-muted-foreground":d==="hub"?"bg-blue-400":"bg-emerald-400";return e.jsx("span",{className:m("size-2 rounded-full shrink-0",x)})}function me(){const{state:d}=te(),x=d==="collapsed",n=ae.useLoaderData(),[g,z]=r.useState(!1),[o,O]=r.useState(""),[c,V]=r.useState("all"),[C,W]=r.useState(new Set),[j,G]=r.useState(!0),[l,v]=r.useState(null),[J,u]=r.useState(""),[L,N]=r.useState([]),[F,h]=r.useState(!1),[I,b]=r.useState(null),[Q,f]=r.useState(""),[,$]=r.useState(!1);r.useEffect(()=>{if(!l){u(""),N([]),b(null),f("");return}h(!0);const s=`${l.category}/${l.skill}/SKILL.md`;Promise.all([w(s),R(l.category,l.skill)]).then(([t,a])=>{u(t),N(a.filter(i=>!i.isDir))}).catch(t=>{u(`Failed to load skill: ${t.message}`)}).finally(()=>h(!1))},[l]);const A=r.useMemo(()=>{if(!n)return[];let s=n.categories;if(c!=="all"&&(s=s.map(t=>({...t,skills:t.skills.filter(a=>(a.source||"local")===c)})).filter(t=>t.skills.length>0)),o.trim()){const t=o.toLowerCase();s=s.map(a=>({...a,skills:a.skills.filter(i=>i.name.toLowerCase().includes(t)||i.description.toLowerCase().includes(t))})).filter(a=>a.skills.length>0||a.name.toLowerCase().includes(t))}return s},[n,c,o]),D=r.useMemo(()=>{if(!n)return[];let s=n.archived;if(c!=="all"&&(s=s.filter(t=>(t.source||"local")===c)),o.trim()){const t=o.toLowerCase();s=s.filter(a=>a.name.toLowerCase().includes(t)||a.description.toLowerCase().includes(t))}return s},[n,c,o]),U=s=>{W(t=>{const a=new Set(t);return a.has(s)?a.delete(s):a.add(s),a})},X=async(s,t,a)=>{try{await oe(t,a),setData(i=>i&&{...i,categories:i.categories.map(p=>p.name===s?{...p,skills:p.skills.map(k=>k.name===t?{...k,enabled:a}:k)}:p)})}catch(i){console.error("Toggle failed:",i)}},Y=async s=>{if(l){$(!0),b(s);try{const t=`${l.category}/${l.skill}/`,a=await w(`${t}${s}`);f(a)}catch(t){f(`Failed to load file: ${t.message}`)}finally{$(!1)}}},Z=()=>{b(null),f("")},_=[{label:"All",value:"all"},{label:"Builtin",value:"builtin"},{label:"Hub",value:"hub"},{label:"Local",value:"local"}];return l?e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("header",{className:"flex items-center justify-between border-b px-4 py-3 shrink-0 relative",children:[e.jsxs("div",{className:"flex items-center gap-2 z-10",children:[x&&e.jsx(M,{className:m("mr-1 -ml-1 text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0")}),e.jsxs(y,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:()=>v(null),children:[e.jsx(P,{className:"size-3.5 mr-1"}),"Back"]})]}),e.jsxs("div",{className:"absolute left-1/2 -translate-x-1/2 flex items-center gap-2 max-w-[50%]",children:[e.jsx("span",{className:"text-muted-foreground text-sm truncate",children:l.category}),e.jsx("span",{className:"text-muted-foreground shrink-0",children:"/"}),e.jsx("span",{className:"text-sm font-medium truncate",children:l.skill})]}),e.jsx("div",{className:"z-10",children:e.jsxs(y,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:()=>{h(!0);const s=`${l.category}/${l.skill}/SKILL.md`;Promise.all([w(s),R(l.category,l.skill)]).then(([t,a])=>{u(t),N(a.filter(i=>!i.isDir))}).finally(()=>h(!1))},disabled:F,children:[F?e.jsx(S,{className:"size-3 animate-spin"}):e.jsx(B,{className:"size-3"}),"Refresh"]})})]}),e.jsx("div",{className:"flex-1 overflow-y-auto p-4",children:e.jsx("div",{className:"max-w-3xl mx-auto flex flex-col gap-4",children:I?e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:Z,className:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline w-fit",children:[e.jsx(P,{className:"size-3"}),"Back to ",l.skill]}),e.jsx("div",{className:"text-sm text-muted-foreground mb-1",children:I}),e.jsx(H,{content:Q})]}):e.jsxs(e.Fragment,{children:[e.jsx(H,{content:J}),L.length>0&&e.jsxs("div",{className:"border-t pt-4 mt-2",children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider mb-2",children:"Attached Files"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:L.map(s=>e.jsxs("button",{onClick:()=>Y(s.path),className:"inline-flex items-center gap-1.5 rounded-md border bg-muted/50 px-2.5 py-1.5 text-xs text-foreground hover:bg-muted transition-colors",children:[e.jsx(le,{className:"size-3.5 text-muted-foreground shrink-0"}),e.jsx("span",{className:"truncate max-w-[180px]",children:s.path})]},s.path))})]})]})})})]}):e.jsxs("div",{className:"flex h-full",children:[e.jsxs("div",{className:"w-80 border-r flex flex-col h-full shrink-0",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b px-3 py-3 shrink-0",children:[x&&e.jsx(M,{className:m("mr-1 -ml-1 text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0")}),e.jsx(T,{className:"size-5 text-muted-foreground"}),e.jsx("h2",{className:"text-sm font-medium",children:"Skills"}),e.jsx(y,{variant:"ghost",size:"sm",className:"ml-auto h-7 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:()=>{z(!0),load().finally(()=>z(!1))},disabled:g,children:g?e.jsx(S,{className:"size-3 animate-spin"}):e.jsx(B,{className:"size-3"})})]}),e.jsxs("div",{className:"px-3 py-2 border-b flex flex-col gap-2 shrink-0",children:[e.jsxs("div",{className:"relative",children:[e.jsx(re,{className:"absolute left-2 top-1/2 -translate-y-1/2 size-3.5 text-muted-foreground"}),e.jsx(ie,{value:o,onChange:s=>O(s.target.value),placeholder:"Search skills...",className:"h-8 pl-7 text-xs"})]}),e.jsx("div",{className:"flex items-center gap-1",children:_.map(s=>e.jsx("button",{onClick:()=>V(s.value),className:m("px-2 py-0.5 text-[11px] rounded-sm transition-colors",c===s.value?"bg-primary text-primary-foreground font-medium":"text-muted-foreground hover:text-foreground hover:bg-muted"),children:s.label},s.value))})]}),e.jsx("div",{className:"flex-1 overflow-y-auto p-2",children:g?e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx(S,{className:"size-4 animate-spin text-muted-foreground"})}):!n||A.length===0?e.jsx("p",{className:"text-xs text-muted-foreground text-center py-8",children:o?"No skills match your search.":"No skills found."}):e.jsxs("div",{className:"flex flex-col gap-1",children:[A.map(s=>e.jsxs("div",{className:"flex flex-col",children:[e.jsxs("button",{onClick:()=>U(s.name),className:"flex items-center gap-1.5 px-2 py-1.5 text-xs font-semibold text-muted-foreground uppercase tracking-wider rounded-md hover:bg-muted/50 transition-colors",children:[C.has(s.name)?e.jsx(E,{className:"size-3 shrink-0"}):e.jsx(q,{className:"size-3 shrink-0"}),e.jsx("span",{className:"truncate",children:s.name}),e.jsx("span",{className:"ml-auto text-[10px] bg-muted px-1.5 py-0.5 rounded-full",children:s.skills.length})]}),!C.has(s.name)&&e.jsx("div",{className:"flex flex-col",children:s.skills.map(t=>e.jsxs("div",{className:"group flex items-center gap-2 px-2 py-1.5 pl-7 rounded-md hover:bg-muted/50 cursor-pointer transition-colors",onClick:()=>v({category:s.name,skill:t.name}),children:[e.jsx(K,{source:t.source}),e.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"text-xs font-medium truncate",children:t.name}),t.modified&&e.jsx("span",{className:"text-[10px] text-amber-500",title:"Modified",children:"✎"}),t.pinned&&e.jsx(ne,{className:"size-3 text-amber-500 shrink-0"})]}),t.description&&e.jsx("span",{className:"text-[10px] text-muted-foreground truncate",children:t.description})]}),e.jsx(ce,{checked:t.enabled!==!1,onCheckedChange:a=>X(s.name,t.name,a),className:"scale-75 shrink-0",onClick:a=>a.stopPropagation()})]},t.name))})]},s.name)),(D.length>0||(n?.archived.length??0)>0)&&e.jsxs("div",{className:"flex flex-col mt-2 pt-2 border-t",children:[e.jsxs("button",{onClick:()=>G(!j),className:"flex items-center gap-1.5 px-2 py-1.5 text-xs font-semibold text-muted-foreground uppercase tracking-wider rounded-md hover:bg-muted/50 transition-colors",children:[j?e.jsx(E,{className:"size-3 shrink-0"}):e.jsx(q,{className:"size-3 shrink-0"}),e.jsx("span",{children:"Archived"}),e.jsx("span",{className:"ml-auto text-[10px] bg-muted px-1.5 py-0.5 rounded-full",children:n?.archived.length??0})]}),!j&&D.map(s=>e.jsxs("div",{className:"flex items-center gap-2 px-2 py-1.5 pl-7 rounded-md hover:bg-muted/50 cursor-pointer transition-colors opacity-60",onClick:()=>v({category:".archive",skill:s.name}),children:[e.jsx(K,{source:s.source}),e.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[e.jsx("span",{className:"text-xs font-medium truncate",children:s.name}),s.description&&e.jsx("span",{className:"text-[10px] text-muted-foreground truncate",children:s.description})]})]},s.name))]})]})})]}),e.jsx("div",{className:"flex-1 flex flex-col items-center justify-center",children:e.jsxs("div",{className:"flex flex-col items-center gap-3 text-muted-foreground",children:[e.jsx(T,{className:"size-12 opacity-20"}),e.jsx("p",{className:"text-sm",children:"Select a skill to view its details"})]})})]})}export{me as component};
@@ -1 +1 @@
1
- import{G as f,C as e,D as o}from"./index-lcPGeFiu.js";async function g(t=30){const a=new URLSearchParams({days:String(t)});return f(`/api/hermes/usage/stats?${a}`)}const x=["#4fd1c5","#63b3ed","#f6ad55","#b794f4","#68d391","#fc8181","#f687b3","#90cdf4","#fbd38d","#9ae6b4"];function m(t){return(t||"").trim()||"unknown"}function j(t){const a=m(t);let n=0;for(let s=0;s<a.length;s++)n=(n<<5)-n+a.charCodeAt(s),n|=0;return x[Math.abs(n)%x.length]}function l(t){return t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(1)+"K":String(t)}function u(t){return t===0?"$0.00":t<.01?"<$0.01":"$"+t.toFixed(2)}function c(t,a){return a<=0?0:t/a*100}function h(t,a){const n=t+a;return n===0?"--":(a/n*100).toFixed(1)+"%"}function b(t=30){const[a,n]=o.useState(null),[s,r]=o.useState(!1);return o.useEffect(()=>{r(!0),g(t).then(n).catch(console.error).finally(()=>r(!1))},[t]),{stats:a,loading:s}}function d({label:t,value:a,sub:n}){return e.jsxs("div",{className:"rounded-lg border bg-card p-4",children:[e.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:t}),e.jsx("div",{className:"text-xl font-semibold",children:a}),n&&e.jsx("div",{className:"text-[11px] text-muted-foreground mt-1",children:n})]})}function N({stats:t}){const a=t.total_input_tokens+t.total_output_tokens,n=t.total_cache_read_tokens,s=a+n>0?(n/(t.total_input_tokens+n)*100).toFixed(1)+"%":"--",r=t.daily_usage.filter(p=>p.sessions>0).length,i=r>0?(t.total_sessions/r).toFixed(1):"0.0";return e.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 mb-5",children:[e.jsx(d,{label:"Total Tokens",value:l(a),sub:`${l(t.total_input_tokens)} input / ${l(t.total_output_tokens)} output`}),e.jsx(d,{label:"Total Sessions",value:String(t.total_sessions),sub:`${i} avg/day`}),e.jsx(d,{label:"Estimated Cost",value:u(t.total_cost??0)}),e.jsx(d,{label:"Cache Hit Rate",value:s,sub:n>0?`${l(n)} tokens`:void 0})]})}function k({stats:t}){const a=o.useMemo(()=>(t.daily_usage??[]).map(s=>{const r=s.input_tokens+s.output_tokens+s.cache_read_tokens;return{...s,visualTokens:r,inputPercent:c(s.input_tokens,r),outputPercent:c(s.output_tokens,r),cachePercent:c(s.cache_read_tokens,r)}}),[t]),n=o.useMemo(()=>Math.max(...a.map(s=>s.visualTokens),1),[a]);return a.length===0?null:e.jsxs("div",{className:"rounded-lg border bg-card p-4 mb-5",children:[e.jsx("h3",{className:"text-sm font-semibold text-secondary-foreground mb-3",children:"Daily Trend"}),e.jsx("div",{className:"flex gap-0.5 mb-2",children:a.map(s=>e.jsxs("div",{className:"flex-1 min-w-0 flex flex-col items-center relative group",children:[e.jsx("div",{className:"w-full h-36 bg-muted/40 rounded-t-sm flex items-end overflow-hidden",children:e.jsxs("div",{className:"w-full flex flex-col-reverse justify-start transition-all",style:{height:`${s.visualTokens/n*100}%`},children:[s.output_tokens>0&&e.jsx("div",{className:"w-full bg-emerald-500/80",style:{height:`${s.outputPercent}%`}}),s.input_tokens>0&&e.jsx("div",{className:"w-full bg-indigo-500/80",style:{height:`${s.inputPercent}%`}}),s.cache_read_tokens>0&&e.jsx("div",{className:"w-full bg-amber-400/80",style:{height:`${s.cachePercent}%`}})]})}),e.jsxs("div",{className:"hidden group-hover:block absolute bottom-[calc(100%+8px)] left-1/2 -translate-x-1/2 bg-popover text-popover-foreground text-[11px] whitespace-nowrap z-10 rounded-md border px-2 py-1.5 shadow-md",children:[e.jsx("div",{className:"font-semibold mb-0.5",children:s.date}),e.jsxs("div",{children:["Input: ",l(s.input_tokens)]}),e.jsxs("div",{children:["Output: ",l(s.output_tokens)]}),e.jsxs("div",{children:["Cache read: ",l(s.cache_read_tokens)]}),e.jsxs("div",{children:["Cache write: ",l(s.cache_write_tokens)]}),e.jsxs("div",{children:["Hit rate: ",h(s.input_tokens,s.cache_read_tokens)]}),e.jsxs("div",{children:["Sessions: ",s.sessions]}),e.jsxs("div",{children:["Cost: ",u(s.cost??0)]})]})]},s.date))}),e.jsxs("div",{className:"flex justify-between text-[10px] text-muted-foreground mb-3",children:[e.jsx("span",{children:a[0]?.date.slice(5)}),e.jsx("span",{children:a[a.length-1]?.date.slice(5)})]}),e.jsxs("div",{className:"flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground mb-4",children:[e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm bg-indigo-500/80"})," Input"]}),e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm bg-emerald-500/80"})," Output"]}),e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm bg-amber-400/80"})," Cache read"]})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-[11px] border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"text-muted-foreground text-left",children:[e.jsx("th",{className:"pb-1.5 pr-2 font-medium",children:"Date"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Input"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Output"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Cache read"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Cache write"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Hit rate"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Sessions"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Cost"})]})}),e.jsx("tbody",{children:[...a].reverse().map(s=>e.jsxs("tr",{className:"border-t",children:[e.jsx("td",{className:"py-1.5 pr-2",children:s.date}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:l(s.input_tokens)}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:l(s.output_tokens)}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:l(s.cache_read_tokens)}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:l(s.cache_write_tokens)}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:h(s.input_tokens,s.cache_read_tokens)}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:s.sessions}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:u(s.cost??0)})]},s.date))})]})})]})}function v({stats:t}){const a=o.useMemo(()=>(t.model_usage??[]).map(s=>{const r=s.input_tokens+s.output_tokens,i=r+s.cache_read_tokens;return{model:m(s.model),inputTokens:s.input_tokens,outputTokens:s.output_tokens,cacheTokens:s.cache_read_tokens,cacheWriteTokens:s.cache_write_tokens,totalTokens:r,visualTokens:i,sessions:s.sessions,color:j(s.model),inputPercent:c(s.input_tokens,i),outputPercent:c(s.output_tokens,i),cachePercent:c(s.cache_read_tokens,i)}}).sort((s,r)=>r.visualTokens-s.visualTokens),[t]),n=o.useMemo(()=>Math.max(...a.map(s=>s.visualTokens),1),[a]);return a.length===0?null:e.jsxs("div",{className:"rounded-lg border bg-card p-4 mb-5",children:[e.jsx("h3",{className:"text-sm font-semibold text-secondary-foreground mb-3",children:"Model Breakdown"}),e.jsxs("div",{className:"flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground mb-3",children:[e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm bg-indigo-500/80"})," Input"]}),e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm bg-emerald-500/80"})," Output"]}),e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm bg-amber-400/80"})," Cache read"]})]}),e.jsx("div",{className:"flex flex-col gap-2",children:a.map(s=>e.jsxs("div",{className:"flex items-center gap-2.5",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm shrink-0",style:{background:s.color}}),e.jsx("span",{className:"text-xs font-mono text-secondary-foreground w-32 shrink-0 truncate",title:s.model,children:s.model}),e.jsx("div",{className:"flex-1 h-4 bg-muted/40 rounded-sm overflow-hidden",children:e.jsxs("div",{className:"h-full flex min-w-[2px] transition-all",style:{width:`${s.visualTokens/n*100}%`},children:[s.inputTokens>0&&e.jsx("div",{className:"h-full bg-indigo-500/80",style:{width:`${s.inputPercent}%`}}),s.outputTokens>0&&e.jsx("div",{className:"h-full bg-emerald-500/80",style:{width:`${s.outputPercent}%`}}),s.cacheTokens>0&&e.jsx("div",{className:"h-full bg-amber-400/80",style:{width:`${s.cachePercent}%`}})]})}),e.jsxs("span",{className:"text-xs text-muted-foreground w-20 text-right shrink-0",children:[l(s.totalTokens),s.cacheTokens>0&&e.jsxs("span",{className:"text-[10px] text-amber-500 ml-1",children:["+",l(s.cacheTokens)]})]})]},s.model))})]})}function y(){const{stats:t,loading:a}=b(30);return e.jsx("div",{className:"flex-1 overflow-y-auto p-4 md:p-6",children:e.jsxs("div",{className:"mx-auto max-w-5xl",children:[e.jsxs("header",{className:"mb-5",children:[e.jsx("h1",{className:"text-lg font-semibold",children:"Usage"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Token consumption and cost estimates over the last 30 days."})]}),a&&e.jsx("div",{className:"text-sm text-muted-foreground py-8",children:"Loading usage stats…"}),!a&&!t&&e.jsx("div",{className:"text-sm text-muted-foreground py-8",children:"Failed to load usage data."}),!a&&t&&t.total_sessions===0&&e.jsx("div",{className:"text-sm text-muted-foreground py-8",children:"No usage data yet."}),!a&&t&&t.total_sessions>0&&e.jsxs(e.Fragment,{children:[e.jsx(N,{stats:t}),e.jsx(v,{stats:t}),e.jsx(k,{stats:t})]})]})})}export{y as component};
1
+ import{G as f,C as e,D as o}from"./index-DsMUdp1X.js";async function g(t=30){const a=new URLSearchParams({days:String(t)});return f(`/api/hermes/usage/stats?${a}`)}const x=["#4fd1c5","#63b3ed","#f6ad55","#b794f4","#68d391","#fc8181","#f687b3","#90cdf4","#fbd38d","#9ae6b4"];function m(t){return(t||"").trim()||"unknown"}function j(t){const a=m(t);let n=0;for(let s=0;s<a.length;s++)n=(n<<5)-n+a.charCodeAt(s),n|=0;return x[Math.abs(n)%x.length]}function l(t){return t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(1)+"K":String(t)}function u(t){return t===0?"$0.00":t<.01?"<$0.01":"$"+t.toFixed(2)}function c(t,a){return a<=0?0:t/a*100}function h(t,a){const n=t+a;return n===0?"--":(a/n*100).toFixed(1)+"%"}function b(t=30){const[a,n]=o.useState(null),[s,r]=o.useState(!1);return o.useEffect(()=>{r(!0),g(t).then(n).catch(console.error).finally(()=>r(!1))},[t]),{stats:a,loading:s}}function d({label:t,value:a,sub:n}){return e.jsxs("div",{className:"rounded-lg border bg-card p-4",children:[e.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:t}),e.jsx("div",{className:"text-xl font-semibold",children:a}),n&&e.jsx("div",{className:"text-[11px] text-muted-foreground mt-1",children:n})]})}function N({stats:t}){const a=t.total_input_tokens+t.total_output_tokens,n=t.total_cache_read_tokens,s=a+n>0?(n/(t.total_input_tokens+n)*100).toFixed(1)+"%":"--",r=t.daily_usage.filter(p=>p.sessions>0).length,i=r>0?(t.total_sessions/r).toFixed(1):"0.0";return e.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 mb-5",children:[e.jsx(d,{label:"Total Tokens",value:l(a),sub:`${l(t.total_input_tokens)} input / ${l(t.total_output_tokens)} output`}),e.jsx(d,{label:"Total Sessions",value:String(t.total_sessions),sub:`${i} avg/day`}),e.jsx(d,{label:"Estimated Cost",value:u(t.total_cost??0)}),e.jsx(d,{label:"Cache Hit Rate",value:s,sub:n>0?`${l(n)} tokens`:void 0})]})}function k({stats:t}){const a=o.useMemo(()=>(t.daily_usage??[]).map(s=>{const r=s.input_tokens+s.output_tokens+s.cache_read_tokens;return{...s,visualTokens:r,inputPercent:c(s.input_tokens,r),outputPercent:c(s.output_tokens,r),cachePercent:c(s.cache_read_tokens,r)}}),[t]),n=o.useMemo(()=>Math.max(...a.map(s=>s.visualTokens),1),[a]);return a.length===0?null:e.jsxs("div",{className:"rounded-lg border bg-card p-4 mb-5",children:[e.jsx("h3",{className:"text-sm font-semibold text-secondary-foreground mb-3",children:"Daily Trend"}),e.jsx("div",{className:"flex gap-0.5 mb-2",children:a.map(s=>e.jsxs("div",{className:"flex-1 min-w-0 flex flex-col items-center relative group",children:[e.jsx("div",{className:"w-full h-36 bg-muted/40 rounded-t-sm flex items-end overflow-hidden",children:e.jsxs("div",{className:"w-full flex flex-col-reverse justify-start transition-all",style:{height:`${s.visualTokens/n*100}%`},children:[s.output_tokens>0&&e.jsx("div",{className:"w-full bg-emerald-500/80",style:{height:`${s.outputPercent}%`}}),s.input_tokens>0&&e.jsx("div",{className:"w-full bg-indigo-500/80",style:{height:`${s.inputPercent}%`}}),s.cache_read_tokens>0&&e.jsx("div",{className:"w-full bg-amber-400/80",style:{height:`${s.cachePercent}%`}})]})}),e.jsxs("div",{className:"hidden group-hover:block absolute bottom-[calc(100%+8px)] left-1/2 -translate-x-1/2 bg-popover text-popover-foreground text-[11px] whitespace-nowrap z-10 rounded-md border px-2 py-1.5 shadow-md",children:[e.jsx("div",{className:"font-semibold mb-0.5",children:s.date}),e.jsxs("div",{children:["Input: ",l(s.input_tokens)]}),e.jsxs("div",{children:["Output: ",l(s.output_tokens)]}),e.jsxs("div",{children:["Cache read: ",l(s.cache_read_tokens)]}),e.jsxs("div",{children:["Cache write: ",l(s.cache_write_tokens)]}),e.jsxs("div",{children:["Hit rate: ",h(s.input_tokens,s.cache_read_tokens)]}),e.jsxs("div",{children:["Sessions: ",s.sessions]}),e.jsxs("div",{children:["Cost: ",u(s.cost??0)]})]})]},s.date))}),e.jsxs("div",{className:"flex justify-between text-[10px] text-muted-foreground mb-3",children:[e.jsx("span",{children:a[0]?.date.slice(5)}),e.jsx("span",{children:a[a.length-1]?.date.slice(5)})]}),e.jsxs("div",{className:"flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground mb-4",children:[e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm bg-indigo-500/80"})," Input"]}),e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm bg-emerald-500/80"})," Output"]}),e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm bg-amber-400/80"})," Cache read"]})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-[11px] border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"text-muted-foreground text-left",children:[e.jsx("th",{className:"pb-1.5 pr-2 font-medium",children:"Date"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Input"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Output"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Cache read"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Cache write"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Hit rate"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Sessions"}),e.jsx("th",{className:"pb-1.5 pr-2 font-medium text-right",children:"Cost"})]})}),e.jsx("tbody",{children:[...a].reverse().map(s=>e.jsxs("tr",{className:"border-t",children:[e.jsx("td",{className:"py-1.5 pr-2",children:s.date}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:l(s.input_tokens)}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:l(s.output_tokens)}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:l(s.cache_read_tokens)}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:l(s.cache_write_tokens)}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:h(s.input_tokens,s.cache_read_tokens)}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:s.sessions}),e.jsx("td",{className:"py-1.5 pr-2 text-right",children:u(s.cost??0)})]},s.date))})]})})]})}function v({stats:t}){const a=o.useMemo(()=>(t.model_usage??[]).map(s=>{const r=s.input_tokens+s.output_tokens,i=r+s.cache_read_tokens;return{model:m(s.model),inputTokens:s.input_tokens,outputTokens:s.output_tokens,cacheTokens:s.cache_read_tokens,cacheWriteTokens:s.cache_write_tokens,totalTokens:r,visualTokens:i,sessions:s.sessions,color:j(s.model),inputPercent:c(s.input_tokens,i),outputPercent:c(s.output_tokens,i),cachePercent:c(s.cache_read_tokens,i)}}).sort((s,r)=>r.visualTokens-s.visualTokens),[t]),n=o.useMemo(()=>Math.max(...a.map(s=>s.visualTokens),1),[a]);return a.length===0?null:e.jsxs("div",{className:"rounded-lg border bg-card p-4 mb-5",children:[e.jsx("h3",{className:"text-sm font-semibold text-secondary-foreground mb-3",children:"Model Breakdown"}),e.jsxs("div",{className:"flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground mb-3",children:[e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm bg-indigo-500/80"})," Input"]}),e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm bg-emerald-500/80"})," Output"]}),e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm bg-amber-400/80"})," Cache read"]})]}),e.jsx("div",{className:"flex flex-col gap-2",children:a.map(s=>e.jsxs("div",{className:"flex items-center gap-2.5",children:[e.jsx("span",{className:"w-2 h-2 rounded-sm shrink-0",style:{background:s.color}}),e.jsx("span",{className:"text-xs font-mono text-secondary-foreground w-32 shrink-0 truncate",title:s.model,children:s.model}),e.jsx("div",{className:"flex-1 h-4 bg-muted/40 rounded-sm overflow-hidden",children:e.jsxs("div",{className:"h-full flex min-w-[2px] transition-all",style:{width:`${s.visualTokens/n*100}%`},children:[s.inputTokens>0&&e.jsx("div",{className:"h-full bg-indigo-500/80",style:{width:`${s.inputPercent}%`}}),s.outputTokens>0&&e.jsx("div",{className:"h-full bg-emerald-500/80",style:{width:`${s.outputPercent}%`}}),s.cacheTokens>0&&e.jsx("div",{className:"h-full bg-amber-400/80",style:{width:`${s.cachePercent}%`}})]})}),e.jsxs("span",{className:"text-xs text-muted-foreground w-20 text-right shrink-0",children:[l(s.totalTokens),s.cacheTokens>0&&e.jsxs("span",{className:"text-[10px] text-amber-500 ml-1",children:["+",l(s.cacheTokens)]})]})]},s.model))})]})}function y(){const{stats:t,loading:a}=b(30);return e.jsx("div",{className:"flex-1 overflow-y-auto p-4 md:p-6",children:e.jsxs("div",{className:"mx-auto max-w-5xl",children:[e.jsxs("header",{className:"mb-5",children:[e.jsx("h1",{className:"text-lg font-semibold",children:"Usage"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Token consumption and cost estimates over the last 30 days."})]}),a&&e.jsx("div",{className:"text-sm text-muted-foreground py-8",children:"Loading usage stats…"}),!a&&!t&&e.jsx("div",{className:"text-sm text-muted-foreground py-8",children:"Failed to load usage data."}),!a&&t&&t.total_sessions===0&&e.jsx("div",{className:"text-sm text-muted-foreground py-8",children:"No usage data yet."}),!a&&t&&t.total_sessions>0&&e.jsxs(e.Fragment,{children:[e.jsx(N,{stats:t}),e.jsx(v,{stats:t}),e.jsx(k,{stats:t})]})]})})}export{y as component};
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useChatStore, B as Button, c as cn } from "./router-BHawbDFJ.mjs";
2
+ import { u as useChatStore, B as Button, c as cn } from "./router-BwJ9sLwD.mjs";
3
3
  import { k as IconFile, C as IconX, o as IconPaperclip, q as IconPhotoScan, t as IconPlayerStop, a as IconArrowUp } from "../_libs/tabler__icons-react.mjs";
4
4
  function Textarea({ className, ...props }) {
5
5
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -1,5 +1,5 @@
1
1
  import { j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import "./index-CZIkem83.mjs";
2
+ import "./index-D-zP2Zbh.mjs";
3
3
  import { M as Markdown } from "../_libs/react-markdown.mjs";
4
4
  import { r as rehypeHighlight } from "../_libs/rehype-highlight.mjs";
5
5
  import { r as remarkGfm } from "../_libs/remark-gfm.mjs";
@@ -1,8 +1,8 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { a as Route, u as useChatStore, g as useSidebar, S as SidebarTrigger, c as cn } from "./router-BHawbDFJ.mjs";
3
- import { M as MarkdownMessage } from "./MarkdownMessage-Cwh9eBP2.mjs";
4
- import { C as ChatInputBlock } from "./ChatInputBlock-Dax0BiWA.mjs";
5
- import "./index-CZIkem83.mjs";
2
+ import { a as Route, u as useChatStore, g as useSidebar, S as SidebarTrigger, c as cn } from "./router-BwJ9sLwD.mjs";
3
+ import { M as MarkdownMessage } from "./MarkdownMessage-y8GThg94.mjs";
4
+ import { C as ChatInputBlock } from "./ChatInputBlock-BONgzml9.mjs";
5
+ import "./index-D-zP2Zbh.mjs";
6
6
  import { k as IconFile, f as IconChevronRight, m as IconLoader2, d as IconCheck, i as IconCopy } from "../_libs/tabler__icons-react.mjs";
7
7
  import "../_libs/tanstack__react-router.mjs";
8
8
  import "../_libs/tanstack__router-core.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
2
  import { d as useNavigate } from "../_libs/tanstack__react-router.mjs";
3
- import { u as useChatStore, b as createSession } from "./router-BHawbDFJ.mjs";
3
+ import { u as useChatStore, b as createSession } from "./router-BwJ9sLwD.mjs";
4
4
  import "../_libs/tanstack__router-core.mjs";
5
5
  import "../_libs/tanstack__history.mjs";
6
6
  import "node:stream/web";
@@ -1,7 +1,7 @@
1
1
  import { j as jsxRuntimeExports } from "../_libs/react.mjs";
2
2
  import { d as useNavigate } from "../_libs/tanstack__react-router.mjs";
3
- import { C as ChatInputBlock } from "./ChatInputBlock-Dax0BiWA.mjs";
4
- import "./router-BHawbDFJ.mjs";
3
+ import { C as ChatInputBlock } from "./ChatInputBlock-BONgzml9.mjs";
4
+ import "./router-BwJ9sLwD.mjs";
5
5
  import "../_libs/tanstack__router-core.mjs";
6
6
  import "../_libs/tanstack__history.mjs";
7
7
  import "node:stream/web";
@@ -3096,7 +3096,7 @@ const defaultSerovalPlugins = [
3096
3096
  p
3097
3097
  ];
3098
3098
  async function getStartManifest(matchedRoutes) {
3099
- const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-CZgpkRLi.mjs");
3099
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-C1EEhhb2.mjs");
3100
3100
  const startManifest = tsrStartManifest();
3101
3101
  const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
3102
3102
  rootRoute.assets = rootRoute.assets || [];
@@ -4575,7 +4575,7 @@ var getBaseManifest = getProdBaseManifest;
4575
4575
  var createEarlyHintsForRequest = createEarlyHintsCollector;
4576
4576
  async function loadEntries() {
4577
4577
  const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
4578
- import("./router-BHawbDFJ.mjs").then((n2) => n2.e),
4578
+ import("./router-BwJ9sLwD.mjs").then((n2) => n2.e),
4579
4579
  Promise.resolve().then(() => start),
4580
4580
  import("../__23tanstack-start-plugin-adapters-Cwee5PKy.mjs")
4581
4581
  ]);
@@ -1,7 +1,7 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { g as useSidebar, S as SidebarTrigger, c as cn, B as Button, r as request } from "./router-BHawbDFJ.mjs";
3
- import { M as MarkdownMessage } from "./MarkdownMessage-Cwh9eBP2.mjs";
4
- import "./index-CZIkem83.mjs";
2
+ import { g as useSidebar, S as SidebarTrigger, c as cn, B as Button, r as request } from "./router-BwJ9sLwD.mjs";
3
+ import { M as MarkdownMessage } from "./MarkdownMessage-y8GThg94.mjs";
4
+ import "./index-D-zP2Zbh.mjs";
5
5
  import { m as IconLoader2, b as IconBrain, u as IconRefresh, p as IconPencil, A as IconUser, x as IconSparkles } from "../_libs/tabler__icons-react.mjs";
6
6
  import "../_libs/tanstack__react-router.mjs";
7
7
  import "../_libs/tanstack__router-core.mjs";
@@ -1602,7 +1602,7 @@ function DashboardSidebar() {
1602
1602
  ] }),
1603
1603
  /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarTrigger, {})
1604
1604
  ] }),
1605
- /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative flex flex-col flex-1 min-h-0 gap-1 px-0.5 py-1", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1 h-full justify-between", children: [
1605
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative flex flex-col flex-1 min-h-0 gap-1 px-0.5 py-1", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1 flex-1 min-h-0 justify-between", children: [
1606
1606
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1 flex-1 min-h-0", children: [
1607
1607
  /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarMenu, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
1608
1608
  SidebarMenuButton,
@@ -1676,8 +1676,9 @@ function DashboardSidebar() {
1676
1676
  }
1677
1677
  ) }) }),
1678
1678
  /* @__PURE__ */ jsxRuntimeExports.jsx(DashboardNavigation, { routes: dashboardRoutes }),
1679
- !isCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsxs(SidebarGroup, { className: "px-0 flex flex-col min-h-0", children: [
1680
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "group/search flex items-center justify-between px-0.5 pb-0.5 shrink-0", children: isSearchOpen ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex w-full items-center gap-1 min-w-0", children: [
1679
+ !isCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "shrink-0 mx-2 my-1 h-px bg-sidebar-border/60" }),
1680
+ !isCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsxs(SidebarGroup, { className: "px-0 flex flex-col min-h-0 flex-1", children: [
1681
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "group/search flex items-center justify-between px-2 pb-1 shrink-0", children: isSearchOpen ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex w-full items-center gap-1 min-w-0", children: [
1681
1682
  /* @__PURE__ */ jsxRuntimeExports.jsx(IconSearch, { className: "size-3.5 shrink-0 text-muted-foreground" }),
1682
1683
  /* @__PURE__ */ jsxRuntimeExports.jsx(
1683
1684
  "input",
@@ -1703,7 +1704,7 @@ function DashboardSidebar() {
1703
1704
  }
1704
1705
  )
1705
1706
  ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
1706
- /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarGroupLabel, { className: "!text-[11px] !font-normal text-muted-foreground/60", children: "Chats" }),
1707
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarGroupLabel, { className: "!text-[11px] !font-normal text-sidebar-foreground/80", children: "Chats" }),
1707
1708
  /* @__PURE__ */ jsxRuntimeExports.jsx(
1708
1709
  "button",
1709
1710
  {
@@ -1887,7 +1888,7 @@ function LayoutInner({ children }) {
1887
1888
  function DashboardLayout({ children }) {
1888
1889
  return /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(LayoutInner, { children }) });
1889
1890
  }
1890
- const appCss = "/assets/css/styles-B8p6jk5Z.css";
1891
+ const appCss = "/assets/css/styles-YqYDZ89Q.css";
1891
1892
  const themeScript = `
1892
1893
  (function() {
1893
1894
  try {
@@ -1928,7 +1929,7 @@ function RootDocument({ children }) {
1928
1929
  ] })
1929
1930
  ] });
1930
1931
  }
1931
- const $$splitComponentImporter$6 = () => import("./usage-CDQOB3tW.mjs");
1932
+ const $$splitComponentImporter$6 = () => import("./usage-BRFRmZxm.mjs");
1932
1933
  const Route$6 = createFileRoute("/usage")({
1933
1934
  component: lazyRouteComponent($$splitComponentImporter$6, "component")
1934
1935
  });
@@ -1949,7 +1950,7 @@ async function toggleSkill(name, enabled) {
1949
1950
  body: JSON.stringify({ name, enabled })
1950
1951
  });
1951
1952
  }
1952
- const $$splitComponentImporter$5 = () => import("./skills-De5OAjih.mjs");
1953
+ const $$splitComponentImporter$5 = () => import("./skills-BgBDh_7P.mjs");
1953
1954
  const Route$5 = createFileRoute("/skills")({
1954
1955
  loader: async () => {
1955
1956
  const data = await fetchSkills();
@@ -1961,19 +1962,19 @@ const $$splitComponentImporter$4 = () => import("./settings-DoXurzvn.mjs");
1961
1962
  const Route$4 = createFileRoute("/settings")({
1962
1963
  component: lazyRouteComponent($$splitComponentImporter$4, "component")
1963
1964
  });
1964
- const $$splitComponentImporter$3 = () => import("./memory-DNXYkaz6.mjs");
1965
+ const $$splitComponentImporter$3 = () => import("./memory-CeEgICRt.mjs");
1965
1966
  const Route$3 = createFileRoute("/memory")({
1966
1967
  component: lazyRouteComponent($$splitComponentImporter$3, "component")
1967
1968
  });
1968
- const $$splitComponentImporter$2 = () => import("./index-Cnfau46H.mjs");
1969
+ const $$splitComponentImporter$2 = () => import("./index-B6Q_iKG1.mjs");
1969
1970
  const Route$2 = createFileRoute("/")({
1970
1971
  component: lazyRouteComponent($$splitComponentImporter$2, "component")
1971
1972
  });
1972
- const $$splitComponentImporter$1 = () => import("./chat.index-CkW4HXDE.mjs");
1973
+ const $$splitComponentImporter$1 = () => import("./chat.index-DaPRZ2yS.mjs");
1973
1974
  const Route$1 = createFileRoute("/chat/")({
1974
1975
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
1975
1976
  });
1976
- const $$splitComponentImporter = () => import("./chat._sessionId-CI4x2myS.mjs");
1977
+ const $$splitComponentImporter = () => import("./chat._sessionId-BSlHY8-3.mjs");
1977
1978
  const Route = createFileRoute("/chat/$sessionId")({
1978
1979
  component: lazyRouteComponent($$splitComponentImporter, "component")
1979
1980
  });
@@ -1,7 +1,7 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { g as useSidebar, R as Route$5, f as fetchSkillContent, d as fetchSkillFiles, S as SidebarTrigger, c as cn, B as Button, t as toggleSkill } from "./router-BHawbDFJ.mjs";
3
- import { M as MarkdownMessage } from "./MarkdownMessage-Cwh9eBP2.mjs";
4
- import "./index-CZIkem83.mjs";
2
+ import { g as useSidebar, R as Route$5, f as fetchSkillContent, d as fetchSkillFiles, S as SidebarTrigger, c as cn, B as Button, t as toggleSkill } from "./router-BwJ9sLwD.mjs";
3
+ import { M as MarkdownMessage } from "./MarkdownMessage-y8GThg94.mjs";
4
+ import "./index-D-zP2Zbh.mjs";
5
5
  import { I as IconArrowLeft, m as IconLoader2, u as IconRefresh, k as IconFile, B as IconWand, v as IconSearch, f as IconChevronRight, e as IconChevronDown, r as IconPin } from "../_libs/tabler__icons-react.mjs";
6
6
  import { I as Input$1, S as SwitchRoot, n as SwitchThumb } from "../_libs/base-ui__react.mjs";
7
7
  import "../_libs/tanstack__react-router.mjs";
@@ -1,5 +1,5 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports } from "../_libs/react.mjs";
2
- import { r as request } from "./router-BHawbDFJ.mjs";
2
+ import { r as request } from "./router-BwJ9sLwD.mjs";
3
3
  import "../_libs/tanstack__react-router.mjs";
4
4
  import "../_libs/tanstack__router-core.mjs";
5
5
  import "../_libs/tanstack__history.mjs";
@@ -1,4 +1,4 @@
1
- const tsrStartManifest = () => ({ routes: { __root__: { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/__root.tsx", children: ["/", "/memory", "/settings", "/skills", "/usage", "/chat/$sessionId", "/chat/"], assets: [{ tag: "link", attrs: { rel: "stylesheet", href: "/assets/css/index-Dfs9RUU9.css", type: "text/css" } }], preloads: ["/assets/js/index-lcPGeFiu.js"] }, "/": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/index.tsx", children: void 0, assets: [], preloads: ["/assets/js/index-DaPM5Pp6.js", "/assets/js/ChatInputBlock-DtDwhu-o.js"] }, "/memory": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/memory.tsx", children: void 0, assets: [], preloads: ["/assets/js/memory-hKlWOmsk.js", "/assets/js/MarkdownMessage-HqtkizAq.js"] }, "/settings": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/settings.tsx", children: void 0, assets: [], preloads: ["/assets/js/settings-CgEeK7SY.js"] }, "/skills": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/skills.tsx", children: void 0, assets: [], preloads: ["/assets/js/skills-Os0vuATW.js", "/assets/js/MarkdownMessage-HqtkizAq.js"] }, "/usage": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/usage.tsx", children: void 0, assets: [], preloads: ["/assets/js/usage-Bkxk-UWX.js"] }, "/chat/$sessionId": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/chat.$sessionId.tsx", children: void 0, assets: [], preloads: ["/assets/js/chat._sessionId-CQhAWRie.js", "/assets/js/MarkdownMessage-HqtkizAq.js", "/assets/js/ChatInputBlock-DtDwhu-o.js"] }, "/chat/": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/chat.index.tsx", children: void 0, assets: [], preloads: ["/assets/js/chat.index-Rey-yJNu.js"] } }, clientEntry: "/assets/js/index-lcPGeFiu.js" });
1
+ const tsrStartManifest = () => ({ routes: { __root__: { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/__root.tsx", children: ["/", "/memory", "/settings", "/skills", "/usage", "/chat/$sessionId", "/chat/"], assets: [{ tag: "link", attrs: { rel: "stylesheet", href: "/assets/css/index-Dfs9RUU9.css", type: "text/css" } }], preloads: ["/assets/js/index-DsMUdp1X.js"] }, "/": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/index.tsx", children: void 0, assets: [], preloads: ["/assets/js/index-DnOJbmz0.js", "/assets/js/ChatInputBlock-BYpIR_ls.js"] }, "/memory": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/memory.tsx", children: void 0, assets: [], preloads: ["/assets/js/memory-B_Uy_WUi.js", "/assets/js/MarkdownMessage-DL1aUod4.js"] }, "/settings": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/settings.tsx", children: void 0, assets: [], preloads: ["/assets/js/settings-ZdgGJLcS.js"] }, "/skills": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/skills.tsx", children: void 0, assets: [], preloads: ["/assets/js/skills-Bg3vZgl2.js", "/assets/js/MarkdownMessage-DL1aUod4.js"] }, "/usage": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/usage.tsx", children: void 0, assets: [], preloads: ["/assets/js/usage-DXPIAwzR.js"] }, "/chat/$sessionId": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/chat.$sessionId.tsx", children: void 0, assets: [], preloads: ["/assets/js/chat._sessionId-YaowVhVf.js", "/assets/js/MarkdownMessage-DL1aUod4.js", "/assets/js/ChatInputBlock-BYpIR_ls.js"] }, "/chat/": { filePath: "/home/abbskhnv/Desktop/hermium-new/packages/web/src/routes/chat.index.tsx", children: void 0, assets: [], preloads: ["/assets/js/chat.index-B64jjuMw.js"] } }, clientEntry: "/assets/js/index-DsMUdp1X.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };
@@ -26,7 +26,7 @@ function lazyService(loader) {
26
26
  };
27
27
  }
28
28
  const services = {
29
- ["ssr"]: lazyService(() => import("./_ssr/index-CZIkem83.mjs"))
29
+ ["ssr"]: lazyService(() => import("./_ssr/index-D-zP2Zbh.mjs"))
30
30
  };
31
31
  globalThis.__nitro_vite_envs__ = services;
32
32
  const errorHandler$1 = (error, event) => {
@@ -120,154 +120,154 @@ const assets = {
120
120
  "/favicon.ico": {
121
121
  "type": "image/vnd.microsoft.icon",
122
122
  "etag": '"f1e-ESBTjHetHyiokkO0tT/irBbMO8Y"',
123
- "mtime": "2026-05-17T08:18:30.558Z",
123
+ "mtime": "2026-05-17T08:23:51.216Z",
124
124
  "size": 3870,
125
125
  "path": "../public/favicon.ico"
126
126
  },
127
- "/manifest.json": {
128
- "type": "application/json",
129
- "etag": '"1f2-Oqn/x1R1hBTtEjA8nFhpBeFJJNg"',
130
- "mtime": "2026-05-17T08:18:30.558Z",
131
- "size": 498,
132
- "path": "../public/manifest.json"
133
- },
134
127
  "/robots.txt": {
135
128
  "type": "text/plain; charset=utf-8",
136
129
  "etag": '"43-BEzmj4PuhUNHX+oW9uOnPSihxtU"',
137
- "mtime": "2026-05-17T08:18:30.558Z",
130
+ "mtime": "2026-05-17T08:23:51.216Z",
138
131
  "size": 67,
139
132
  "path": "../public/robots.txt"
140
133
  },
141
134
  "/assets/css/index-Dfs9RUU9.css": {
142
135
  "type": "text/css; charset=utf-8",
143
136
  "etag": '"429-auB1gSdvHWOpUkgakyObE/IliVA"',
144
- "mtime": "2026-05-17T08:18:30.028Z",
137
+ "mtime": "2026-05-17T08:23:50.052Z",
145
138
  "size": 1065,
146
139
  "path": "../public/assets/css/index-Dfs9RUU9.css"
147
140
  },
148
- "/assets/css/styles-B8p6jk5Z.css": {
149
- "type": "text/css; charset=utf-8",
150
- "etag": '"1a414-AEgDOOmvAte00dxPjn+Fb3xg2cQ"',
151
- "mtime": "2026-05-17T08:18:30.028Z",
152
- "size": 107540,
153
- "path": "../public/assets/css/styles-B8p6jk5Z.css"
154
- },
155
- "/assets/js/ChatInputBlock-DtDwhu-o.js": {
141
+ "/assets/js/ChatInputBlock-BYpIR_ls.js": {
156
142
  "type": "text/javascript; charset=utf-8",
157
- "etag": '"135c-RASPhkqUvwggEKjP3QrylvkfN/A"',
158
- "mtime": "2026-05-17T08:18:30.028Z",
143
+ "etag": '"135c-/d4FNNN4KpdRrE8qeiTBxqDL5vM"',
144
+ "mtime": "2026-05-17T08:23:50.052Z",
159
145
  "size": 4956,
160
- "path": "../public/assets/js/ChatInputBlock-DtDwhu-o.js"
146
+ "path": "../public/assets/js/ChatInputBlock-BYpIR_ls.js"
161
147
  },
162
- "/assets/js/MarkdownMessage-HqtkizAq.js": {
148
+ "/assets/js/MarkdownMessage-DL1aUod4.js": {
163
149
  "type": "text/javascript; charset=utf-8",
164
- "etag": '"a1e-3DyzZy40zCTQF94M/PJu0X0Hsp8"',
165
- "mtime": "2026-05-17T08:18:30.028Z",
150
+ "etag": '"a1e-X8yyfM56sqVXjNBolVSGYtFzHTQ"',
151
+ "mtime": "2026-05-17T08:23:50.052Z",
166
152
  "size": 2590,
167
- "path": "../public/assets/js/MarkdownMessage-HqtkizAq.js"
153
+ "path": "../public/assets/js/MarkdownMessage-DL1aUod4.js"
154
+ },
155
+ "/manifest.json": {
156
+ "type": "application/json",
157
+ "etag": '"1f2-Oqn/x1R1hBTtEjA8nFhpBeFJJNg"',
158
+ "mtime": "2026-05-17T08:23:51.216Z",
159
+ "size": 498,
160
+ "path": "../public/manifest.json"
161
+ },
162
+ "/assets/css/styles-YqYDZ89Q.css": {
163
+ "type": "text/css; charset=utf-8",
164
+ "etag": '"1a553-PeitUnrwQBPxGUsGIFG1nQmHggw"',
165
+ "mtime": "2026-05-17T08:23:50.051Z",
166
+ "size": 107859,
167
+ "path": "../public/assets/css/styles-YqYDZ89Q.css"
168
168
  },
169
- "/assets/js/chat._sessionId-CQhAWRie.js": {
169
+ "/assets/js/chat._sessionId-YaowVhVf.js": {
170
170
  "type": "text/javascript; charset=utf-8",
171
- "etag": '"272b-McHXUDBuhUfUn7M1SvHgkLN8L50"',
172
- "mtime": "2026-05-17T08:18:30.028Z",
171
+ "etag": '"272b-T27l9FmASYCN7GiXu26qMuiYRwc"',
172
+ "mtime": "2026-05-17T08:23:50.052Z",
173
173
  "size": 10027,
174
- "path": "../public/assets/js/chat._sessionId-CQhAWRie.js"
174
+ "path": "../public/assets/js/chat._sessionId-YaowVhVf.js"
175
175
  },
176
- "/assets/js/chat.index-Rey-yJNu.js": {
176
+ "/assets/js/chat.index-B64jjuMw.js": {
177
177
  "type": "text/javascript; charset=utf-8",
178
- "etag": '"279-Iofhk2FD689icp8RcM3zzkZqY8w"',
179
- "mtime": "2026-05-17T08:18:30.028Z",
178
+ "etag": '"279-wlHD7WKxZKCj0iZGBxmHZ/X41YM"',
179
+ "mtime": "2026-05-17T08:23:50.052Z",
180
180
  "size": 633,
181
- "path": "../public/assets/js/chat.index-Rey-yJNu.js"
181
+ "path": "../public/assets/js/chat.index-B64jjuMw.js"
182
182
  },
183
- "/assets/js/index-DaPM5Pp6.js": {
183
+ "/assets/js/index-DnOJbmz0.js": {
184
184
  "type": "text/javascript; charset=utf-8",
185
- "etag": '"25b-IDAV/fIuX02J7i3SFpF/2uyhwnk"',
186
- "mtime": "2026-05-17T08:18:30.028Z",
185
+ "etag": '"25b-GLjiq0e6Eac1ry9f1HgKab2J0ww"',
186
+ "mtime": "2026-05-17T08:23:50.052Z",
187
187
  "size": 603,
188
- "path": "../public/assets/js/index-DaPM5Pp6.js"
188
+ "path": "../public/assets/js/index-DnOJbmz0.js"
189
189
  },
190
- "/assets/js/memory-hKlWOmsk.js": {
190
+ "/assets/js/memory-B_Uy_WUi.js": {
191
191
  "type": "text/javascript; charset=utf-8",
192
- "etag": '"1260-P9RJ2fARNmET9irs4fPhbGpXRLM"',
193
- "mtime": "2026-05-17T08:18:30.028Z",
192
+ "etag": '"1260-aojfBDWxFncFnGl6o9qk6Eeckb0"',
193
+ "mtime": "2026-05-17T08:23:50.052Z",
194
194
  "size": 4704,
195
- "path": "../public/assets/js/memory-hKlWOmsk.js"
195
+ "path": "../public/assets/js/memory-B_Uy_WUi.js"
196
196
  },
197
- "/assets/js/settings-CgEeK7SY.js": {
197
+ "/assets/js/settings-ZdgGJLcS.js": {
198
198
  "type": "text/javascript; charset=utf-8",
199
- "etag": '"130-WbBYVWT+6xaJdn8LeXySHPJfavQ"',
200
- "mtime": "2026-05-17T08:18:30.028Z",
199
+ "etag": '"130-/qsPY4du8jPH+7tT1Wh+qKrV+QA"',
200
+ "mtime": "2026-05-17T08:23:50.052Z",
201
201
  "size": 304,
202
- "path": "../public/assets/js/settings-CgEeK7SY.js"
202
+ "path": "../public/assets/js/settings-ZdgGJLcS.js"
203
203
  },
204
- "/assets/js/skills-Os0vuATW.js": {
204
+ "/assets/js/skills-Bg3vZgl2.js": {
205
205
  "type": "text/javascript; charset=utf-8",
206
- "etag": '"29cb-ligPZ9hadWJFwQWS+zV2h8J27tc"',
207
- "mtime": "2026-05-17T08:18:30.028Z",
206
+ "etag": '"29cb-VMMqJmvt5FQIMfnDzjRnWkPjnos"',
207
+ "mtime": "2026-05-17T08:23:50.052Z",
208
208
  "size": 10699,
209
- "path": "../public/assets/js/skills-Os0vuATW.js"
209
+ "path": "../public/assets/js/skills-Bg3vZgl2.js"
210
210
  },
211
211
  "/assets/js/theme-CPkdkpaj.js": {
212
212
  "type": "text/javascript; charset=utf-8",
213
213
  "etag": '"245-JWXBP1zFNJpiVT0wBqxD0nTaUio"',
214
- "mtime": "2026-05-17T08:18:30.028Z",
214
+ "mtime": "2026-05-17T08:23:50.052Z",
215
215
  "size": 581,
216
216
  "path": "../public/assets/js/theme-CPkdkpaj.js"
217
217
  },
218
- "/assets/js/usage-Bkxk-UWX.js": {
218
+ "/assets/js/usage-DXPIAwzR.js": {
219
219
  "type": "text/javascript; charset=utf-8",
220
- "etag": '"2503-IB3o2fl6NKesErj2M0l4hapSqeY"',
221
- "mtime": "2026-05-17T08:18:30.028Z",
220
+ "etag": '"2503-pwaGtTRliNQtzQyRfC/cUvpwQTM"',
221
+ "mtime": "2026-05-17T08:23:50.052Z",
222
222
  "size": 9475,
223
- "path": "../public/assets/js/usage-Bkxk-UWX.js"
223
+ "path": "../public/assets/js/usage-DXPIAwzR.js"
224
224
  },
225
225
  "/assets/woff2/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2": {
226
226
  "type": "font/woff2",
227
227
  "etag": '"1cfc-yYSDXNlt/tTRaj6rJo8ZMqvY7pQ"',
228
- "mtime": "2026-05-17T08:18:30.028Z",
228
+ "mtime": "2026-05-17T08:23:50.052Z",
229
229
  "size": 7420,
230
230
  "path": "../public/assets/woff2/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2"
231
231
  },
232
232
  "/assets/woff2/geist-cyrillic-wght-normal-BEAKL7Jp.woff2": {
233
233
  "type": "font/woff2",
234
234
  "etag": '"3aec-5kpQSZEtAzzU5kdiuro3Zr2YR54"',
235
- "mtime": "2026-05-17T08:18:30.028Z",
235
+ "mtime": "2026-05-17T08:23:50.051Z",
236
236
  "size": 15084,
237
237
  "path": "../public/assets/woff2/geist-cyrillic-wght-normal-BEAKL7Jp.woff2"
238
238
  },
239
239
  "/assets/woff2/geist-latin-ext-wght-normal-DC-KSUi6.woff2": {
240
240
  "type": "font/woff2",
241
241
  "etag": '"4080-mZu3Z7sOWqglha+kefNbUA9Pp+Q"',
242
- "mtime": "2026-05-17T08:18:30.028Z",
242
+ "mtime": "2026-05-17T08:23:50.052Z",
243
243
  "size": 16512,
244
244
  "path": "../public/assets/woff2/geist-latin-ext-wght-normal-DC-KSUi6.woff2"
245
245
  },
246
246
  "/assets/woff2/geist-latin-wght-normal-BgDaEnEv.woff2": {
247
247
  "type": "font/woff2",
248
248
  "etag": '"72d8-9J+D7/6th5UzRxIgoFX9awJv47A"',
249
- "mtime": "2026-05-17T08:18:30.028Z",
249
+ "mtime": "2026-05-17T08:23:50.052Z",
250
250
  "size": 29400,
251
251
  "path": "../public/assets/woff2/geist-latin-wght-normal-BgDaEnEv.woff2"
252
252
  },
253
253
  "/assets/woff2/geist-vietnamese-wght-normal-6IgcOCM7.woff2": {
254
254
  "type": "font/woff2",
255
255
  "etag": '"1f44-6MZ7/PEEOeDVF0eHI650KpwKQV8"',
256
- "mtime": "2026-05-17T08:18:30.028Z",
256
+ "mtime": "2026-05-17T08:23:50.052Z",
257
257
  "size": 8004,
258
258
  "path": "../public/assets/woff2/geist-vietnamese-wght-normal-6IgcOCM7.woff2"
259
259
  },
260
- "/assets/js/index-lcPGeFiu.js": {
260
+ "/assets/js/index-DsMUdp1X.js": {
261
261
  "type": "text/javascript; charset=utf-8",
262
- "etag": '"dcd74-pFmE6YyPXAvCoiT7p5tQeG7yt4g"',
263
- "mtime": "2026-05-17T08:18:30.029Z",
264
- "size": 904564,
265
- "path": "../public/assets/js/index-lcPGeFiu.js"
262
+ "etag": '"dcdcd-5tva2IYMtxJUZ1pisMt/sCsjzjo"',
263
+ "mtime": "2026-05-17T08:23:50.052Z",
264
+ "size": 904653,
265
+ "path": "../public/assets/js/index-DsMUdp1X.js"
266
266
  },
267
267
  "/logo.png": {
268
268
  "type": "image/png",
269
269
  "etag": '"142435-x+cWIod8BP5RPjbiISayulI5r7I"',
270
- "mtime": "2026-05-17T08:18:30.558Z",
270
+ "mtime": "2026-05-17T08:23:51.217Z",
271
271
  "size": 1319989,
272
272
  "path": "../public/logo.png"
273
273
  }