llmxray 0.3.5 → 0.4.1

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 (54) hide show
  1. package/README.md +265 -244
  2. package/dist/assets/{AITrainingPage-CyTi1NB2.js → AITrainingPage-VU-Nu5i0.js} +1 -1
  3. package/dist/assets/BenchmarkPage-CQUTAU0c.js +31 -0
  4. package/dist/assets/{ComparisonPage-CiIKqA9v.js → ComparisonPage-DSO_-JZF.js} +4 -4
  5. package/dist/assets/CostDashboardPage-BLzCE-bT.js +1 -0
  6. package/dist/assets/DashboardPage-lqAFJvOo.js +116 -0
  7. package/dist/assets/{EmbeddingsPage-BczPU9IA.js → EmbeddingsPage-DDBfFe8z.js} +1 -1
  8. package/dist/assets/GoogleCallbackPage-H8X6YDz9.js +1 -0
  9. package/dist/assets/{JsonTreeNode-vpbOunXf.js → JsonTreeNode-DQ_R5Euc.js} +1 -1
  10. package/dist/assets/{ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-BQp6k-8Y.js → ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-CV939MUZ.js} +1 -1
  11. package/dist/assets/{RAGPage-DU70ttWt.js → RAGPage-DbZxWHmi.js} +1 -1
  12. package/dist/assets/SessionPage-DvtFE4GS.js +15 -0
  13. package/dist/assets/SettingsPage-fmgr8zF9.js +1 -0
  14. package/dist/assets/{StatusBadge.vue_vue_type_script_setup_true_lang-CgEd6dPQ.js → StatusBadge.vue_vue_type_script_setup_true_lang-BbHpA7hy.js} +1 -1
  15. package/dist/assets/{StorageGauge.vue_vue_type_style_index_0_lang-CX8sufFI.js → StorageGauge.vue_vue_type_style_index_0_lang-Dd3BsCg6.js} +1 -1
  16. package/dist/assets/{SystemPage-BiD-Nvc1.js → SystemPage-Bd3SBsWI.js} +3 -3
  17. package/dist/assets/{TabBar.vue_vue_type_script_setup_true_lang-Dsu2LWVY.js → TabBar.vue_vue_type_script_setup_true_lang-DlSEPHs6.js} +1 -1
  18. package/dist/assets/{TokenStreamDisplay.vue_vue_type_script_setup_true_lang-BDwyOr-9.js → TokenStreamDisplay.vue_vue_type_script_setup_true_lang-P-I0kJTd.js} +1 -1
  19. package/dist/assets/{ToolWorkshopPage-Dhz1Sqv0.js → ToolWorkshopPage-D9doB8PF.js} +5 -5
  20. package/dist/assets/agent-store-CuCtjbhV.js +1 -0
  21. package/dist/assets/canvas-ai-db-DBUT-nyD.js +2 -0
  22. package/dist/assets/{download-DuwLDzsW.js → download-C3s6K1NW.js} +1 -1
  23. package/dist/assets/{generate-service-C4gzEmXZ.js → generate-service-DrRYe_-5.js} +1 -1
  24. package/dist/assets/{google-auth-store-BE1EiKPv.js → google-auth-store-B0WvuFWG.js} +1 -1
  25. package/dist/assets/index-Bawj8X2v.css +1 -0
  26. package/dist/assets/index-CUNpOQX9.js +3 -0
  27. package/dist/assets/index-DYHBy1xj.js +8 -0
  28. package/dist/assets/{index-DoAHVxX6.js → index-DoMyvAkM.js} +1 -1
  29. package/dist/assets/info-D-oZIv7P.js +1 -0
  30. package/dist/assets/{metrics-store-CrcTLok0.js → metrics-store-DRErjO4D.js} +1 -1
  31. package/dist/assets/papaparse.min-DJzuA_ek.js +10 -0
  32. package/dist/assets/{pencil-B_bOf0D7.js → pencil-MO2uWQbW.js} +1 -1
  33. package/dist/assets/{rag-store-DbfHnbDe.js → rag-store-CBWvD3Va.js} +3 -3
  34. package/dist/assets/{share-2-CUvRPpM2.js → share-2-CnM5sBDm.js} +1 -1
  35. package/dist/assets/storage-store-cx_2Hb_J.js +1 -0
  36. package/dist/assets/{stream-handler-DIbclxpH.js → stream-handler-CXdBM2li.js} +1 -1
  37. package/dist/assets/{tool-workshop-store-DoTb4QN9.js → tool-workshop-store-Cb4eb3e4.js} +1 -1
  38. package/dist/assets/{toolcall-store-CcnV5sSF.js → toolcall-store-xQEQUq5f.js} +1 -1
  39. package/dist/assets/{trash-2-Bm4yN75F.js → trash-2-Cj-NOsVZ.js} +1 -1
  40. package/dist/index.html +2 -2
  41. package/package.json +2 -1
  42. package/dist/assets/BenchmarkPage-BIja0Qas.js +0 -31
  43. package/dist/assets/DashboardPage-DU_EOLw8.js +0 -116
  44. package/dist/assets/GoogleCallbackPage-DfIvX7pT.js +0 -1
  45. package/dist/assets/SessionPage-BE5NuuJh.js +0 -15
  46. package/dist/assets/SettingsPage-Bi1yGVMe.js +0 -1
  47. package/dist/assets/_commonjsHelpers-DsqdWQfm.js +0 -1
  48. package/dist/assets/agent-store-P3WGf428.js +0 -1
  49. package/dist/assets/canvas-ai-db-BolM-_G7.js +0 -2
  50. package/dist/assets/index-CG_7ZNQn.js +0 -6
  51. package/dist/assets/index-Zf_dr6sG.js +0 -3
  52. package/dist/assets/index-ny-QVb28.css +0 -1
  53. package/dist/assets/papaparse.min-3s4OkBbM.js +0 -10
  54. package/dist/assets/storage-store-BpKORJyE.js +0 -1
@@ -1,3 +1,3 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CG_7ZNQn.js","assets/index-ny-QVb28.css"])))=>i.map(i=>d[i]);
2
- import{c as J,b as G,e as l,f as t,t as e,u as n,i as m,F as g,k as $,l as L,a as S,j as r,A as Q,B as K,R as W,p as O,h as y,g as B,q as P,r as k,o as F,_ as z}from"./index-CG_7ZNQn.js";import{d as X,a as Y}from"./download-WPaeALA4.js";import{u as Z}from"./metrics-store-CrcTLok0.js";import{b as c}from"./format-BqVZ9rwM.js";import{u as tt}from"./storage-store-BpKORJyE.js";import{_ as et}from"./StorageGauge.vue_vue_type_style_index_0_lang-CX8sufFI.js";import{D as st}from"./download-DuwLDzsW.js";const at=J("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);async function ot(){try{const p=await fetch("/__system-info");return p.ok?await p.json():null}catch{return null}}const rt={class:"rounded-lg border border-border-default bg-surface p-3 space-y-2.5"},lt={class:"flex items-center justify-between"},nt={class:"flex items-center gap-2"},dt={class:"text-sm"},it={class:"text-xs font-medium text-text-primary"},ct={class:"flex items-center gap-2"},ut={class:"text-[10px] font-medium text-text-secondary"},mt=["title"],pt={key:0,class:"h-1.5 rounded-full bg-surface-overlay overflow-hidden"},xt={class:"flex h-full"},yt=["title"],ht={key:1,class:"h-1.5 rounded-full bg-surface-overlay"},_t={class:"flex items-center justify-between text-[10px] text-text-muted"},ft={key:2,class:"space-y-1"},vt={class:"flex-1 text-text-muted"},gt={class:"text-text-muted"},bt={class:"text-text-secondary w-14 text-end"},$t={key:3,class:"text-[10px] text-text-muted italic"},wt=G({__name:"StorageBreakdownCard",props:{database:{}},emits:["clear"],setup(p,{emit:C}){const _=p,u=C,b=["#8b5cf6","#06b6d4","#f59e0b","#10b981","#f43f5e"],R=S(()=>_.database.stores.filter(x=>x.bytes>0).map((x,f)=>({name:x.name,bytes:x.bytes,color:b[f%b.length]})));return(x,f)=>(r(),l("div",rt,[t("div",lt,[t("div",nt,[t("span",dt,e(p.database.icon),1),t("span",it,e(p.database.label),1)]),t("div",ct,[t("span",ut,e(n(c)(p.database.totalBytes)),1),p.database.totalBytes>0?(r(),l("button",{key:0,class:"rounded px-1.5 py-0.5 text-[9px] text-text-muted hover:text-error hover:bg-error/10 transition-colors",title:x.$t("system.browserStorage.clearAll"),onClick:f[0]||(f[0]=i=>u("clear",p.database.id))},e(x.$t("common.actions.clear")),9,mt)):m("",!0)])]),p.database.totalBytes>0?(r(),l("div",pt,[t("div",xt,[(r(!0),l(g,null,$(R.value,i=>(r(),l("div",{key:i.name,class:"h-full transition-all duration-500 first:rounded-s-full last:rounded-e-full",style:L({width:`${i.bytes/p.database.totalBytes*100}%`,backgroundColor:i.color}),title:`${i.name}: ${n(c)(i.bytes)}`},null,12,yt))),128))])])):(r(),l("div",ht)),t("div",_t,[t("span",null,e(p.database.recordCount.toLocaleString())+" records",1),t("span",null,e(p.database.type==="indexeddb"?"IndexedDB":"External"),1)]),p.database.stores.some(i=>i.count>0)?(r(),l("div",ft,[(r(!0),l(g,null,$(p.database.stores.filter(i=>i.count>0),(i,d)=>(r(),l("div",{key:i.name,class:"flex items-center gap-2 text-[10px]"},[t("span",{class:"h-2 w-2 shrink-0 rounded-full",style:L({backgroundColor:b[d%b.length]})},null,4),t("span",vt,e(i.name),1),t("span",gt,e(i.count),1),t("span",bt,e(n(c)(i.bytes)),1)]))),128))])):(r(),l("p",$t,e(x.$t("system.browserStorage.empty")),1))]))}}),kt={class:"max-w-4xl space-y-6"},St={class:"flex items-center justify-between"},Mt={class:"text-lg font-semibold text-text-primary"},Bt={class:"text-xs text-text-muted mt-0.5"},zt={class:"flex items-center gap-2"},Ct={class:"relative"},Dt={key:1,class:"absolute end-0 top-full z-20 mt-1 w-64 rounded-lg border border-border-default bg-surface-raised shadow-lg py-1"},Lt={key:0,class:"flex flex-col items-center justify-center py-16 gap-4"},Rt={class:"text-sm text-text-secondary"},Tt={class:"text-[10px] text-text-muted"},It={key:1,class:"rounded-lg border border-border-default bg-surface-raised p-4 text-xs text-text-muted"},At={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Vt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Et={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ot={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Pt={class:"text-text-muted"},Ft={class:"text-text-primary"},Gt={class:"text-text-muted"},jt={class:"text-text-primary"},qt={class:"text-text-muted"},Ut={class:"text-text-primary"},Ht={class:"text-text-muted"},Nt={class:"text-text-primary"},Jt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Qt={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Kt={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Wt={class:"text-text-muted"},Xt={class:"text-text-primary"},Yt={class:"text-text-muted"},Zt={class:"text-text-primary"},te={class:"text-text-muted"},ee={class:"text-text-primary"},se={class:"text-text-muted"},ae={class:"text-text-primary"},oe={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},re={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},le={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ne={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},de={class:"text-text-muted"},ie={class:"text-text-primary"},ce={class:"text-text-muted"},ue={class:"text-text-primary"},me={class:"text-text-muted"},pe={class:"text-text-primary"},xe={class:"text-text-muted"},ye={class:"text-text-primary"},he={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},_e={class:"text-sm font-medium text-text-primary flex items-center gap-2"},fe={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},ve={class:"text-text-muted"},ge={class:"text-text-primary"},be={class:"text-text-muted"},$e={class:"text-text-primary"},we={class:"text-text-muted"},ke={class:"text-text-primary"},Se={class:"h-2 rounded-full bg-surface-overlay overflow-hidden"},Me={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Be={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ze={class:"text-text-muted"},Ce={class:"text-text-primary"},De={class:"text-text-muted"},Le={class:"text-text-primary"},Re={class:"text-text-muted"},Te={class:"text-text-primary"},Ie={key:1,class:"col-span-2 border-b border-border-default/50 my-1"},Ae={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Ve={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ee={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Oe={class:"text-text-muted"},Pe={class:"text-text-primary"},Fe={class:"text-text-muted"},Ge={class:"text-text-primary"},je={class:"text-text-muted"},qe={class:"text-text-primary"},Ue={class:"text-text-muted"},He={class:"text-text-primary"},Ne={class:"h-2 rounded-full bg-surface-overlay overflow-hidden"},Je={key:0,class:"border-b border-border-default/50"},Qe={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},Ke={class:"flex items-center justify-between"},We={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Xe={class:"flex items-center gap-2"},Ye={key:2,class:"text-[10px] text-text-muted"},Ze={key:1,class:"grid grid-cols-1 md:grid-cols-2 gap-3"},ts={key:2,class:"text-[9px] text-text-muted"},es={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},ss={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},as={class:"text-sm font-medium text-text-primary flex items-center gap-2"},os={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},rs={class:"text-text-muted"},ls={class:"flex items-center gap-1.5"},ns={class:"text-text-muted"},ds={class:"text-text-primary"},is={class:"text-text-muted"},cs={class:"text-text-primary"},us={class:"text-text-muted"},ms={class:"text-text-primary"},ps={class:"text-text-muted"},xs={class:"text-text-primary"},ys={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},hs={class:"text-sm font-medium text-text-primary flex items-center gap-2"},_s={class:"text-[10px] text-text-muted font-normal"},fs={key:0,class:"text-xs text-text-muted py-2"},vs={key:1,class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},gs={class:"text-text-muted"},bs={class:"text-text-primary font-medium"},$s={class:"text-text-muted"},ws={class:"text-accent font-medium"},ks={class:"text-text-muted"},Ss={class:"text-text-primary font-medium"},Ms={class:"text-text-muted"},Bs={class:"text-text-primary font-medium"},zs={key:2,class:"flex flex-wrap gap-1.5 pt-1"},Cs={class:"text-[10px] text-text-muted me-1"},Ds={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Ls={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Rs={key:0,class:"text-xs text-text-muted py-2"},Ts={key:1,class:"space-y-2"},Is={class:"flex gap-4 text-xs text-text-secondary"},As={key:0},Vs={class:"text-accent font-medium"},Es={key:1},Os={class:"text-text-primary font-medium"},Ps={class:"text-text-primary font-medium"},Fs={class:"flex-1 min-w-0"},Gs={class:"text-sm font-medium text-text-primary truncate"},js={class:"text-xs text-text-muted"},qs={class:"text-end text-xs space-y-0.5 shrink-0"},Us={key:0},Hs={class:"text-text-muted"},Ns={class:"ms-1.5 text-accent font-medium"},Js={key:1},Qs={class:"text-text-muted"},Ks={class:"ms-1.5 text-text-primary font-medium"},Ws={class:"text-text-muted"},Xs={class:"ms-1.5 text-text-secondary"},Ys=["title"],Zs={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},ta={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ea={key:0,class:"text-xs text-text-muted py-2"},sa={key:1,class:"overflow-x-auto"},aa={class:"w-full text-xs"},oa={class:"border-b border-border-default text-text-muted"},ra={class:"text-start py-1.5 pe-4 font-medium"},la={class:"text-start py-1.5 pe-4 font-medium"},na={class:"text-start py-1.5 pe-4 font-medium"},da={class:"text-start py-1.5 pe-4 font-medium"},ia={class:"text-end py-1.5 font-medium"},ca={class:"py-1.5 pe-4 text-text-primary font-medium"},ua={class:"py-1.5 pe-4 text-text-secondary"},ma={class:"py-1.5 pe-4 text-text-secondary"},pa={class:"py-1.5 pe-4 text-text-secondary"},xa={class:"py-1.5 text-end text-text-secondary"},$a=G({__name:"SystemPage",setup(p){const C=Z(),_=Q(),u=tt(),b=k(null);async function R(s){if(b.value===s){const o={rag:()=>z(()=>import("./vector-db-ChAzHl5A.js"),[]).then(a=>a.vectorDB.clear()),conversations:()=>z(()=>import("./index-CG_7ZNQn.js").then(a=>a.aq),__vite__mapDeps([0,1])).then(a=>a.conversationDB.clear()),benchmarks:()=>z(()=>import("./benchmark-db-D8D5Wf9h.js"),[]).then(a=>a.benchmarkDB.clear()),"message-memory":()=>z(()=>import("./message-memory-db-C3Ifhs2B.js"),[]).then(a=>a.messageMemoryDB.clear()),"canvas-ai":()=>z(()=>import("./canvas-ai-db-BolM-_G7.js"),[]).then(a=>a.canvasAiDB.clear())};try{await o[s]?.(),await u.refresh()}catch(a){console.error(`Failed to clear database ${s}:`,a)}b.value=null}else b.value=s,setTimeout(()=>{b.value===s&&(b.value=null)},3e3)}const x=k(null),f=k(!1),i=k([]),d=k(null),D=k(!0),E=S(()=>_.models.reduce((s,o)=>s+o.size,0)),T=S(()=>i.value.reduce((s,o)=>s+o.size_vram,0)),I=S(()=>i.value.reduce((s,o)=>s+(o.size-o.size_vram),0)),h=S(()=>C.aggregate),j=S(()=>{if(!d.value)return"";const s=d.value.cpu.maxClockMhz;return s>=1e3?`${(s/1e3).toFixed(2)} GHz`:`${s} MHz`}),M=S(()=>{if(!d.value)return 0;const{totalBytes:s,freeBytes:o}=d.value.memory;return s>0?Math.round((s-o)/s*100):0}),w=k(!1);function q(){const s=d.value,a={hardware:s?{os:s.os,cpu:s.cpu,memory:s.memory,gpu:s.gpu,storage:s.storage}:null,ollama:{connected:f.value,version:x.value,installedModels:_.models.map(v=>({name:v.name,size:v.size,family:v.details.family,parameterSize:v.details.parameter_size,quantization:v.details.quantization_level})),runningModels:i.value},inference:h.value,storage:{origin:u.origin,databases:u.databases}};X(a,`system-report-${new Date().toISOString().slice(0,10)}.json`),w.value=!1}function U(){const s=d.value,o=["# System Report — LLMxRay","",`**Date:** ${new Date().toLocaleString()}`,""];if(s){o.push("## Operating System"),o.push(`- **OS:** ${s.os.name}`),o.push(`- **Version:** ${s.os.version}`),o.push(`- **Architecture:** ${s.os.arch}`),o.push(""),o.push("## Processor"),o.push(`- **CPU:** ${s.cpu.name}`),o.push(`- **Cores:** ${s.cpu.cores} physical, ${s.cpu.logicalProcessors} logical`),o.push(`- **Max Clock:** ${s.cpu.maxClockMhz>=1e3?(s.cpu.maxClockMhz/1e3).toFixed(2)+" GHz":s.cpu.maxClockMhz+" MHz"}`),o.push(""),o.push("## Memory"),o.push(`- **Total:** ${c(s.memory.totalBytes)}`),o.push(`- **Available:** ${c(s.memory.freeBytes)}`),o.push(`- **Used:** ${c(s.memory.totalBytes-s.memory.freeBytes)} (${M.value}%)`),o.push(""),o.push("## Graphics");for(const a of s.gpu)o.push(`- **GPU:** ${a.name}`),o.push(` - Adapter RAM: ${a.adapterRamBytes>0?c(a.adapterRamBytes):"Shared / Not reported"}`),a.driverVersion&&o.push(` - Driver: ${a.driverVersion}`);o.push(""),o.push("## Storage");for(const a of s.storage)o.push(`- **${a.drive}:** ${c(a.totalBytes)} total, ${c(a.freeBytes)} free`);o.push("")}if(o.push("## Ollama Runtime"),o.push(`- **Status:** ${f.value?"Connected":"Disconnected"}`),x.value&&o.push(`- **Version:** ${x.value}`),o.push(`- **Installed Models:** ${_.models.length}`),_.models.length>0)for(const a of _.models)o.push(` - ${a.name} (${a.details.parameter_size??"?"}, ${a.details.quantization_level??"?"})`);if(o.push(`- **Total Model Storage:** ${c(E.value)}`),o.push(`- **Active Models:** ${i.value.length}`),i.value.length>0)for(const a of i.value)o.push(` - ${a.name} (ctx: ${a.context_length??"?"})`);o.push(""),h.value.totalSessions>0&&(o.push("## Inference (This Session)"),o.push(`- **Sessions:** ${h.value.totalSessions}`),o.push(`- **Avg Speed:** ${h.value.avgTps.toFixed(1)} tok/s`),o.push(`- **Tokens Generated:** ${h.value.totalTokensGenerated.toLocaleString()}`),o.push(`- **Avg TTFT:** ${h.value.avgTtftMs.toFixed(0)} ms`),o.push("")),o.push("---"),o.push("*Generated by LLMxRay — Local LLM Observatory*"),Y(o.join(`
3
- `),`system-report-${new Date().toISOString().slice(0,10)}.md`),w.value=!1}let A=null;async function H(){try{x.value=await F.version(),f.value=!0}catch{f.value=!1,x.value=null}try{i.value=await F.ps()}catch{i.value=[]}}async function V(){await Promise.all([H(),ot().then(s=>{s&&(d.value=s)}),u.refreshIfStale(3e4)])}function N(s){const o=new Date(s).getTime()-Date.now();if(o<=0)return"expiring...";const a=Math.floor(o/6e4);return a<1?"< 1 min":a<60?`${a} min`:`${Math.floor(a/60)}h ${a%60}m`}return K(async()=>{D.value=!0,await V(),D.value=!1,_.models.length===0&&await _.fetchModels(),C.recalculateAggregate(),A=setInterval(V,5e3)}),W(()=>{A&&clearInterval(A)}),(s,o)=>(r(),l("div",kt,[t("div",St,[t("div",null,[t("h2",Mt,e(s.$t("system.title")),1),t("p",Bt,e(s.$t("system.subtitle")),1)]),t("div",zt,[t("div",Ct,[t("button",{class:"flex items-center gap-1 rounded-lg bg-surface-overlay px-3 py-1.5 text-xs text-text-secondary hover:bg-border-default transition-colors",onClick:o[0]||(o[0]=a=>w.value=!w.value)},[O(n(st),{class:"h-3.5 w-3.5"}),y(" "+e(s.$t("system.export.title")),1)]),w.value?(r(),l("div",{key:0,class:"fixed inset-0 z-10",onClick:o[1]||(o[1]=a=>w.value=!1)})):m("",!0),w.value?(r(),l("div",Dt,[t("button",{class:"w-full px-3 py-2 text-start text-xs text-text-secondary hover:bg-surface-overlay",onClick:U},e(s.$t("system.export.downloadMarkdown")),1),t("button",{class:"w-full px-3 py-2 text-start text-xs text-text-secondary hover:bg-surface-overlay",onClick:q},e(s.$t("system.export.downloadJson")),1)])):m("",!0)]),t("button",{class:"rounded-lg bg-surface-overlay px-3 py-1.5 text-xs text-text-secondary hover:bg-border-default transition-colors",onClick:V},e(s.$t("system.refresh")),1)])]),D.value&&!d.value?(r(),l("div",Lt,[O(n(at),{class:"h-10 w-10 animate-spin text-accent"}),t("p",Rt,e(s.$t("system.detecting")),1),t("p",Tt,e(s.$t("system.detectingDetail")),1)])):m("",!0),!D.value&&!d.value?(r(),l("div",It,e(s.$t("system.unavailable")),1)):m("",!0),d.value?(r(),l(g,{key:2},[t("div",At,[t("div",Vt,[t("h3",Et,[o[3]||(o[3]=t("span",{class:"text-base"},"🖥",-1)),y(" "+e(s.$t("system.os.title")),1)]),t("div",Ot,[t("span",Pt,e(s.$t("system.os.os")),1),t("span",Ft,e(d.value.os.name),1),t("span",Gt,e(s.$t("system.os.version")),1),t("span",jt,e(d.value.os.version),1),t("span",qt,e(s.$t("system.os.build")),1),t("span",Ut,e(d.value.os.build||"—"),1),t("span",Ht,e(s.$t("system.os.architecture")),1),t("span",Nt,e(d.value.os.arch),1)])]),t("div",Jt,[t("h3",Qt,[o[4]||(o[4]=t("span",{class:"text-base"},"💻",-1)),y(" "+e(s.$t("system.device.title")),1)]),t("div",Kt,[t("span",Wt,e(s.$t("system.device.name")),1),t("span",Xt,e(d.value.device.name),1),t("span",Yt,e(s.$t("system.device.manufacturer")),1),t("span",Zt,e(d.value.device.manufacturer||"—"),1),t("span",te,e(s.$t("system.device.model")),1),t("span",ee,e(d.value.device.model||"—"),1),d.value.device.family?(r(),l(g,{key:0},[t("span",se,e(s.$t("system.device.family")),1),t("span",ae,e(d.value.device.family),1)],64)):m("",!0)])])]),t("div",oe,[t("div",re,[t("h3",le,[o[5]||(o[5]=t("span",{class:"text-base"},"⚙",-1)),y(" "+e(s.$t("system.cpu.title")),1)]),t("div",ne,[t("span",de,e(s.$t("system.cpu.cpu")),1),t("span",ie,e(d.value.cpu.name),1),t("span",ce,e(s.$t("system.cpu.physicalCores")),1),t("span",ue,e(d.value.cpu.cores),1),t("span",me,e(s.$t("system.cpu.logicalProcessors")),1),t("span",pe,e(d.value.cpu.logicalProcessors),1),t("span",xe,e(s.$t("system.cpu.maxClock")),1),t("span",ye,e(j.value),1)])]),t("div",he,[t("h3",_e,[o[6]||(o[6]=t("span",{class:"text-base"},"🧠",-1)),y(" "+e(s.$t("system.memory.title")),1)]),t("div",fe,[t("span",ve,e(s.$t("system.memory.totalRam")),1),t("span",ge,e(n(c)(d.value.memory.totalBytes)),1),t("span",be,e(s.$t("system.memory.available")),1),t("span",$e,e(n(c)(d.value.memory.freeBytes)),1),t("span",we,e(s.$t("system.memory.inUse")),1),t("span",ke,e(n(c)(d.value.memory.totalBytes-d.value.memory.freeBytes))+" ("+e(M.value)+"%)",1)]),t("div",Se,[t("div",{class:B(["h-full rounded-full transition-all duration-500",M.value>85?"bg-error":M.value>60?"bg-warning":"bg-success"]),style:L({width:`${M.value}%`})},null,6)])])]),t("div",Me,[t("h3",Be,[o[7]||(o[7]=t("span",{class:"text-base"},"🎮",-1)),y(" "+e(s.$t("system.gpu.title")),1)]),(r(!0),l(g,null,$(d.value.gpu,(a,v)=>(r(),l("div",{key:v,class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},[t("span",ze,e(s.$t("system.gpu.gpu"))+" "+e(d.value.gpu.length>1?v+1:""),1),t("span",Ce,e(a.name),1),t("span",De,e(s.$t("system.gpu.adapterRam")),1),t("span",Le,e(a.adapterRamBytes>0?n(c)(a.adapterRamBytes):s.$t("system.gpu.sharedNotReported")),1),a.driverVersion?(r(),l(g,{key:0},[t("span",Re,e(s.$t("system.gpu.driver")),1),t("span",Te,e(a.driverVersion),1)],64)):m("",!0),v<d.value.gpu.length-1?(r(),l("div",Ie)):m("",!0)]))),128))]),t("div",Ae,[t("h3",Ve,[o[8]||(o[8]=t("span",{class:"text-base"},"💾",-1)),y(" "+e(s.$t("system.storage.title")),1)]),(r(!0),l(g,null,$(d.value.storage,(a,v)=>(r(),l("div",{key:v,class:"space-y-2"},[t("div",Ee,[t("span",Oe,e(s.$t("system.storage.drive")),1),t("span",Pe,e(a.drive),1),t("span",Fe,e(s.$t("system.storage.total")),1),t("span",Ge,e(n(c)(a.totalBytes)),1),t("span",je,e(s.$t("system.storage.free")),1),t("span",qe,e(n(c)(a.freeBytes)),1),t("span",Ue,e(s.$t("system.storage.used")),1),t("span",He,e(n(c)(a.totalBytes-a.freeBytes))+" ("+e(a.totalBytes>0?Math.round((a.totalBytes-a.freeBytes)/a.totalBytes*100):0)+"%) ",1)]),t("div",Ne,[t("div",{class:B(["h-full rounded-full transition-all duration-500",a.totalBytes>0&&(a.totalBytes-a.freeBytes)/a.totalBytes>.85?"bg-error":(a.totalBytes-a.freeBytes)/a.totalBytes>.6?"bg-warning":"bg-success"]),style:L({width:`${a.totalBytes>0?(a.totalBytes-a.freeBytes)/a.totalBytes*100:0}%`})},null,6)]),v<d.value.storage.length-1?(r(),l("div",Je)):m("",!0)]))),128))])],64)):m("",!0),t("div",Qe,[t("div",Ke,[t("h3",We,[o[9]||(o[9]=t("span",{class:"text-base"},"📀",-1)),y(" "+e(s.$t("system.browserStorage.title")),1)]),t("div",Xe,[n(u).origin?(r(),l("span",{key:0,class:B(["rounded-full px-2 py-0.5 text-[9px]",n(u).origin.persisted?"bg-success/10 text-success":"bg-warning/10 text-warning"])},e(n(u).origin.persisted?s.$t("system.browserStorage.persistent"):s.$t("system.browserStorage.bestEffort")),3)):m("",!0),n(u).loading?(r(),l("span",Ye,e(s.$t("system.browserStorage.scanning")),1)):(r(),l("button",{key:1,class:"text-[10px] text-text-muted hover:text-text-primary transition-colors",onClick:o[2]||(o[2]=a=>n(u).refresh())},e(s.$t("system.refresh")),1))])]),n(u).origin?(r(),P(et,{key:0,used:n(u).origin.usage,total:n(u).origin.quota,label:s.$t("system.browserStorage.indexedDbQuota")},null,8,["used","total","label"])):m("",!0),n(u).databases.length>0?(r(),l("div",Ze,[(r(!0),l(g,null,$(n(u).databases,a=>(r(),P(wt,{key:a.id,database:a,onClear:R},null,8,["database"]))),128))])):m("",!0),n(u).databases.length>0?(r(),l("p",ts,e(s.$t("system.browserStorage.totalRecords",{count:n(u).totalRecordCount.toLocaleString(),databases:n(u).databases.length})),1)):m("",!0)]),t("div",es,[t("div",ss,[t("h3",as,[o[10]||(o[10]=t("span",{class:"text-base"},"⚡",-1)),y(" "+e(s.$t("system.ollama.title")),1)]),t("div",os,[t("span",rs,e(s.$t("system.ollama.status")),1),t("span",ls,[t("span",{class:B(["inline-block h-2 w-2 rounded-full",f.value?"bg-success":"bg-error"])},null,2),t("span",{class:B(f.value?"text-success":"text-error")},e(f.value?s.$t("common.status.connected"):s.$t("common.status.disconnected")),3)]),t("span",ns,e(s.$t("system.ollama.version")),1),t("span",ds,e(x.value??"—"),1),t("span",is,e(s.$t("system.ollama.installedModels")),1),t("span",cs,e(n(_).models.length),1),t("span",us,e(s.$t("system.ollama.totalModelStorage")),1),t("span",ms,e(n(c)(E.value)),1),t("span",ps,e(s.$t("system.ollama.modelsLoaded")),1),t("span",xs,e(i.value.length),1)])]),t("div",ys,[t("h3",hs,[o[11]||(o[11]=t("span",{class:"text-base"},"📊",-1)),y(" "+e(s.$t("system.inference.title"))+" ",1),t("span",_s,"("+e(s.$t("system.inference.thisSession"))+")",1)]),h.value.totalSessions===0?(r(),l("div",fs,e(s.$t("system.inference.noSessions")),1)):(r(),l("div",vs,[t("span",gs,e(s.$t("system.inference.sessions")),1),t("span",bs,e(h.value.totalSessions),1),t("span",$s,e(s.$t("system.inference.avgSpeed")),1),t("span",ws,e(h.value.avgTps.toFixed(1))+" tok/s",1),t("span",ks,e(s.$t("system.inference.tokensGenerated")),1),t("span",Ss,e(h.value.totalTokensGenerated.toLocaleString()),1),t("span",Ms,e(s.$t("system.inference.avgTtft")),1),t("span",Bs,e(h.value.avgTtftMs.toFixed(0))+" ms",1)])),h.value.modelsUsed.length>0?(r(),l("div",zs,[t("span",Cs,e(s.$t("system.inference.modelsUsed"))+":",1),(r(!0),l(g,null,$(h.value.modelsUsed,a=>(r(),l("span",{key:a,class:"rounded-full bg-surface-overlay px-2 py-0.5 text-[10px] text-text-secondary"},e(a),1))),128))])):m("",!0)])]),t("div",Ds,[t("h3",Ls,[o[12]||(o[12]=t("span",{class:"text-base"},"⚡",-1)),y(" "+e(s.$t("system.activeModels.title")),1)]),i.value.length===0?(r(),l("div",Rs,e(s.$t("system.activeModels.noModels")),1)):(r(),l("div",Ts,[t("div",Is,[T.value>0?(r(),l("span",As,[y(e(s.$t("system.activeModels.vram"))+": ",1),t("span",Vs,e(n(c)(T.value)),1)])):m("",!0),I.value>0?(r(),l("span",Es,[y(e(s.$t("system.activeModels.ram"))+": ",1),t("span",Os,e(n(c)(I.value)),1)])):m("",!0),t("span",null,[y(e(s.$t("system.activeModels.total"))+": ",1),t("span",Ps,e(n(c)(T.value+I.value)),1)])]),(r(!0),l(g,null,$(i.value,a=>(r(),l("div",{key:a.digest,class:"flex items-center gap-4 rounded-lg bg-surface px-4 py-3 border border-border-default"},[t("div",Fs,[t("p",Gs,e(a.name),1),t("p",js,e(a.details.parameter_size)+" · "+e(a.details.quantization_level)+" · "+e(a.details.family),1)]),t("div",qs,[a.size_vram>0?(r(),l("p",Us,[t("span",Hs,e(s.$t("system.activeModels.vram")),1),t("span",Ns,e(n(c)(a.size_vram)),1)])):m("",!0),a.size-a.size_vram>0?(r(),l("p",Js,[t("span",Qs,e(s.$t("system.activeModels.ram")),1),t("span",Ks,e(n(c)(a.size-a.size_vram)),1)])):m("",!0),t("p",null,[t("span",Ws,e(s.$t("system.activeModels.ctx")),1),t("span",Xs,e(a.context_length.toLocaleString()),1)])]),t("div",{class:"text-xs text-text-muted shrink-0 w-16 text-end",title:a.expires_at},e(N(a.expires_at)),9,Ys)]))),128))]))]),t("div",Zs,[t("h3",ta,[o[13]||(o[13]=t("span",{class:"text-base"},"📦",-1)),y(" "+e(s.$t("system.installedModels.title")),1)]),n(_).models.length===0?(r(),l("div",ea,e(s.$t("system.installedModels.noModels")),1)):(r(),l("div",sa,[t("table",aa,[t("thead",null,[t("tr",oa,[t("th",ra,e(s.$t("system.installedModels.model")),1),t("th",la,e(s.$t("system.installedModels.family")),1),t("th",na,e(s.$t("system.installedModels.parameters")),1),t("th",da,e(s.$t("system.installedModels.quantization")),1),t("th",ia,e(s.$t("system.installedModels.size")),1)])]),t("tbody",null,[(r(!0),l(g,null,$(n(_).models,a=>(r(),l("tr",{key:a.name,class:"border-b border-border-default/50"},[t("td",ca,e(a.name),1),t("td",ua,e(a.details.family),1),t("td",ma,e(a.details.parameter_size),1),t("td",pa,e(a.details.quantization_level),1),t("td",xa,e(n(c)(a.size)),1)]))),128))])])]))])]))}});export{$a as default};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DYHBy1xj.js","assets/index-Bawj8X2v.css","assets/canvas-ai-db-DBUT-nyD.js"])))=>i.map(i=>d[i]);
2
+ import{c as J,b as G,e as l,f as t,t as e,u as n,i as m,F as g,k as $,l as L,a as S,j as r,A as Q,B as W,W as K,p as O,h as y,g as B,q as P,r as k,o as F,_ as z}from"./index-DYHBy1xj.js";import{d as X,a as Y}from"./download-WPaeALA4.js";import{u as Z}from"./metrics-store-DRErjO4D.js";import{b as c}from"./format-BqVZ9rwM.js";import{u as tt}from"./storage-store-cx_2Hb_J.js";import{_ as et}from"./StorageGauge.vue_vue_type_style_index_0_lang-Dd3BsCg6.js";import{D as st}from"./download-C3s6K1NW.js";const at=J("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);async function ot(){try{const p=await fetch("/__system-info");return p.ok?await p.json():null}catch{return null}}const rt={class:"rounded-lg border border-border-default bg-surface p-3 space-y-2.5"},lt={class:"flex items-center justify-between"},nt={class:"flex items-center gap-2"},dt={class:"text-sm"},it={class:"text-xs font-medium text-text-primary"},ct={class:"flex items-center gap-2"},ut={class:"text-[10px] font-medium text-text-secondary"},mt=["title"],pt={key:0,class:"h-1.5 rounded-full bg-surface-overlay overflow-hidden"},xt={class:"flex h-full"},yt=["title"],ht={key:1,class:"h-1.5 rounded-full bg-surface-overlay"},_t={class:"flex items-center justify-between text-[10px] text-text-muted"},ft={key:2,class:"space-y-1"},vt={class:"flex-1 text-text-muted"},gt={class:"text-text-muted"},bt={class:"text-text-secondary w-14 text-end"},$t={key:3,class:"text-[10px] text-text-muted italic"},wt=G({__name:"StorageBreakdownCard",props:{database:{}},emits:["clear"],setup(p,{emit:C}){const _=p,u=C,b=["#8b5cf6","#06b6d4","#f59e0b","#10b981","#f43f5e"],T=S(()=>_.database.stores.filter(x=>x.bytes>0).map((x,f)=>({name:x.name,bytes:x.bytes,color:b[f%b.length]})));return(x,f)=>(r(),l("div",rt,[t("div",lt,[t("div",nt,[t("span",dt,e(p.database.icon),1),t("span",it,e(p.database.label),1)]),t("div",ct,[t("span",ut,e(n(c)(p.database.totalBytes)),1),p.database.totalBytes>0?(r(),l("button",{key:0,class:"rounded px-1.5 py-0.5 text-[9px] text-text-muted hover:text-error hover:bg-error/10 transition-colors",title:x.$t("system.browserStorage.clearAll"),onClick:f[0]||(f[0]=i=>u("clear",p.database.id))},e(x.$t("common.actions.clear")),9,mt)):m("",!0)])]),p.database.totalBytes>0?(r(),l("div",pt,[t("div",xt,[(r(!0),l(g,null,$(T.value,i=>(r(),l("div",{key:i.name,class:"h-full transition-all duration-500 first:rounded-s-full last:rounded-e-full",style:L({width:`${i.bytes/p.database.totalBytes*100}%`,backgroundColor:i.color}),title:`${i.name}: ${n(c)(i.bytes)}`},null,12,yt))),128))])])):(r(),l("div",ht)),t("div",_t,[t("span",null,e(p.database.recordCount.toLocaleString())+" records",1),t("span",null,e(p.database.type==="indexeddb"?"IndexedDB":"External"),1)]),p.database.stores.some(i=>i.count>0)?(r(),l("div",ft,[(r(!0),l(g,null,$(p.database.stores.filter(i=>i.count>0),(i,d)=>(r(),l("div",{key:i.name,class:"flex items-center gap-2 text-[10px]"},[t("span",{class:"h-2 w-2 shrink-0 rounded-full",style:L({backgroundColor:b[d%b.length]})},null,4),t("span",vt,e(i.name),1),t("span",gt,e(i.count),1),t("span",bt,e(n(c)(i.bytes)),1)]))),128))])):(r(),l("p",$t,e(x.$t("system.browserStorage.empty")),1))]))}}),kt={class:"max-w-4xl space-y-6"},St={class:"flex items-center justify-between"},Mt={class:"text-lg font-semibold text-text-primary"},Bt={class:"text-xs text-text-muted mt-0.5"},zt={class:"flex items-center gap-2"},Ct={class:"relative"},Dt={key:1,class:"absolute end-0 top-full z-20 mt-1 w-64 rounded-lg border border-border-default bg-surface-raised shadow-lg py-1"},Lt={key:0,class:"flex flex-col items-center justify-center py-16 gap-4"},Tt={class:"text-sm text-text-secondary"},Rt={class:"text-[10px] text-text-muted"},It={key:1,class:"rounded-lg border border-border-default bg-surface-raised p-4 text-xs text-text-muted"},At={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Vt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Et={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ot={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Pt={class:"text-text-muted"},Ft={class:"text-text-primary"},Gt={class:"text-text-muted"},jt={class:"text-text-primary"},Ut={class:"text-text-muted"},qt={class:"text-text-primary"},Ht={class:"text-text-muted"},Nt={class:"text-text-primary"},Jt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Qt={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Wt={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Kt={class:"text-text-muted"},Xt={class:"text-text-primary"},Yt={class:"text-text-muted"},Zt={class:"text-text-primary"},te={class:"text-text-muted"},ee={class:"text-text-primary"},se={class:"text-text-muted"},ae={class:"text-text-primary"},oe={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},re={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},le={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ne={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},de={class:"text-text-muted"},ie={class:"text-text-primary"},ce={class:"text-text-muted"},ue={class:"text-text-primary"},me={class:"text-text-muted"},pe={class:"text-text-primary"},xe={class:"text-text-muted"},ye={class:"text-text-primary"},he={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},_e={class:"text-sm font-medium text-text-primary flex items-center gap-2"},fe={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},ve={class:"text-text-muted"},ge={class:"text-text-primary"},be={class:"text-text-muted"},$e={class:"text-text-primary"},we={class:"text-text-muted"},ke={class:"text-text-primary"},Se={class:"h-2 rounded-full bg-surface-overlay overflow-hidden"},Me={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Be={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ze={class:"text-text-muted"},Ce={class:"text-text-primary"},De={class:"text-text-muted"},Le={class:"text-text-primary"},Te={class:"text-text-muted"},Re={class:"text-text-primary"},Ie={key:1,class:"col-span-2 border-b border-border-default/50 my-1"},Ae={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Ve={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ee={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Oe={class:"text-text-muted"},Pe={class:"text-text-primary"},Fe={class:"text-text-muted"},Ge={class:"text-text-primary"},je={class:"text-text-muted"},Ue={class:"text-text-primary"},qe={class:"text-text-muted"},He={class:"text-text-primary"},Ne={class:"h-2 rounded-full bg-surface-overlay overflow-hidden"},Je={key:0,class:"border-b border-border-default/50"},Qe={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},We={class:"flex items-center justify-between"},Ke={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Xe={class:"flex items-center gap-2"},Ye={key:2,class:"text-[10px] text-text-muted"},Ze={key:1,class:"grid grid-cols-1 md:grid-cols-2 gap-3"},ts={key:2,class:"text-[9px] text-text-muted"},es={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},ss={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},as={class:"text-sm font-medium text-text-primary flex items-center gap-2"},os={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},rs={class:"text-text-muted"},ls={class:"flex items-center gap-1.5"},ns={class:"text-text-muted"},ds={class:"text-text-primary"},is={class:"text-text-muted"},cs={class:"text-text-primary"},us={class:"text-text-muted"},ms={class:"text-text-primary"},ps={class:"text-text-muted"},xs={class:"text-text-primary"},ys={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},hs={class:"text-sm font-medium text-text-primary flex items-center gap-2"},_s={class:"text-[10px] text-text-muted font-normal"},fs={key:0,class:"text-xs text-text-muted py-2"},vs={key:1,class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},gs={class:"text-text-muted"},bs={class:"text-text-primary font-medium"},$s={class:"text-text-muted"},ws={class:"text-accent font-medium"},ks={class:"text-text-muted"},Ss={class:"text-text-primary font-medium"},Ms={class:"text-text-muted"},Bs={class:"text-text-primary font-medium"},zs={key:2,class:"flex flex-wrap gap-1.5 pt-1"},Cs={class:"text-[10px] text-text-muted me-1"},Ds={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Ls={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ts={key:0,class:"text-xs text-text-muted py-2"},Rs={key:1,class:"space-y-2"},Is={class:"flex gap-4 text-xs text-text-secondary"},As={key:0},Vs={class:"text-accent font-medium"},Es={key:1},Os={class:"text-text-primary font-medium"},Ps={class:"text-text-primary font-medium"},Fs={class:"flex-1 min-w-0"},Gs={class:"text-sm font-medium text-text-primary truncate"},js={class:"text-xs text-text-muted"},Us={class:"text-end text-xs space-y-0.5 shrink-0"},qs={key:0},Hs={class:"text-text-muted"},Ns={class:"ms-1.5 text-accent font-medium"},Js={key:1},Qs={class:"text-text-muted"},Ws={class:"ms-1.5 text-text-primary font-medium"},Ks={class:"text-text-muted"},Xs={class:"ms-1.5 text-text-secondary"},Ys=["title"],Zs={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},ta={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ea={key:0,class:"text-xs text-text-muted py-2"},sa={key:1,class:"overflow-x-auto"},aa={class:"w-full text-xs"},oa={class:"border-b border-border-default text-text-muted"},ra={class:"text-start py-1.5 pe-4 font-medium"},la={class:"text-start py-1.5 pe-4 font-medium"},na={class:"text-start py-1.5 pe-4 font-medium"},da={class:"text-start py-1.5 pe-4 font-medium"},ia={class:"text-end py-1.5 font-medium"},ca={class:"py-1.5 pe-4 text-text-primary font-medium"},ua={class:"py-1.5 pe-4 text-text-secondary"},ma={class:"py-1.5 pe-4 text-text-secondary"},pa={class:"py-1.5 pe-4 text-text-secondary"},xa={class:"py-1.5 text-end text-text-secondary"},$a=G({__name:"SystemPage",setup(p){const C=Z(),_=Q(),u=tt(),b=k(null);async function T(s){if(b.value===s){const o={rag:()=>z(()=>import("./vector-db-ChAzHl5A.js"),[]).then(a=>a.vectorDB.clear()),conversations:()=>z(()=>import("./index-DYHBy1xj.js").then(a=>a.az),__vite__mapDeps([0,1])).then(a=>a.conversationDB.clear()),benchmarks:()=>z(()=>import("./benchmark-db-D8D5Wf9h.js"),[]).then(a=>a.benchmarkDB.clear()),"message-memory":()=>z(()=>import("./message-memory-db-C3Ifhs2B.js"),[]).then(a=>a.messageMemoryDB.clear()),"canvas-ai":()=>z(()=>import("./canvas-ai-db-DBUT-nyD.js"),__vite__mapDeps([2,0,1])).then(a=>a.canvasAiDB.clear())};try{await o[s]?.(),await u.refresh()}catch(a){console.error(`Failed to clear database ${s}:`,a)}b.value=null}else b.value=s,setTimeout(()=>{b.value===s&&(b.value=null)},3e3)}const x=k(null),f=k(!1),i=k([]),d=k(null),D=k(!0),E=S(()=>_.models.reduce((s,o)=>s+o.size,0)),R=S(()=>i.value.reduce((s,o)=>s+o.size_vram,0)),I=S(()=>i.value.reduce((s,o)=>s+(o.size-o.size_vram),0)),h=S(()=>C.aggregate),j=S(()=>{if(!d.value)return"";const s=d.value.cpu.maxClockMhz;return s>=1e3?`${(s/1e3).toFixed(2)} GHz`:`${s} MHz`}),M=S(()=>{if(!d.value)return 0;const{totalBytes:s,freeBytes:o}=d.value.memory;return s>0?Math.round((s-o)/s*100):0}),w=k(!1);function U(){const s=d.value,a={hardware:s?{os:s.os,cpu:s.cpu,memory:s.memory,gpu:s.gpu,storage:s.storage}:null,ollama:{connected:f.value,version:x.value,installedModels:_.models.map(v=>({name:v.name,size:v.size,family:v.details.family,parameterSize:v.details.parameter_size,quantization:v.details.quantization_level})),runningModels:i.value},inference:h.value,storage:{origin:u.origin,databases:u.databases}};X(a,`system-report-${new Date().toISOString().slice(0,10)}.json`),w.value=!1}function q(){const s=d.value,o=["# System Report — LLMxRay","",`**Date:** ${new Date().toLocaleString()}`,""];if(s){o.push("## Operating System"),o.push(`- **OS:** ${s.os.name}`),o.push(`- **Version:** ${s.os.version}`),o.push(`- **Architecture:** ${s.os.arch}`),o.push(""),o.push("## Processor"),o.push(`- **CPU:** ${s.cpu.name}`),o.push(`- **Cores:** ${s.cpu.cores} physical, ${s.cpu.logicalProcessors} logical`),o.push(`- **Max Clock:** ${s.cpu.maxClockMhz>=1e3?(s.cpu.maxClockMhz/1e3).toFixed(2)+" GHz":s.cpu.maxClockMhz+" MHz"}`),o.push(""),o.push("## Memory"),o.push(`- **Total:** ${c(s.memory.totalBytes)}`),o.push(`- **Available:** ${c(s.memory.freeBytes)}`),o.push(`- **Used:** ${c(s.memory.totalBytes-s.memory.freeBytes)} (${M.value}%)`),o.push(""),o.push("## Graphics");for(const a of s.gpu)o.push(`- **GPU:** ${a.name}`),o.push(` - Adapter RAM: ${a.adapterRamBytes>0?c(a.adapterRamBytes):"Shared / Not reported"}`),a.driverVersion&&o.push(` - Driver: ${a.driverVersion}`);o.push(""),o.push("## Storage");for(const a of s.storage)o.push(`- **${a.drive}:** ${c(a.totalBytes)} total, ${c(a.freeBytes)} free`);o.push("")}if(o.push("## Ollama Runtime"),o.push(`- **Status:** ${f.value?"Connected":"Disconnected"}`),x.value&&o.push(`- **Version:** ${x.value}`),o.push(`- **Installed Models:** ${_.models.length}`),_.models.length>0)for(const a of _.models)o.push(` - ${a.name} (${a.details.parameter_size??"?"}, ${a.details.quantization_level??"?"})`);if(o.push(`- **Total Model Storage:** ${c(E.value)}`),o.push(`- **Active Models:** ${i.value.length}`),i.value.length>0)for(const a of i.value)o.push(` - ${a.name} (ctx: ${a.context_length??"?"})`);o.push(""),h.value.totalSessions>0&&(o.push("## Inference (This Session)"),o.push(`- **Sessions:** ${h.value.totalSessions}`),o.push(`- **Avg Speed:** ${h.value.avgTps.toFixed(1)} tok/s`),o.push(`- **Tokens Generated:** ${h.value.totalTokensGenerated.toLocaleString()}`),o.push(`- **Avg TTFT:** ${h.value.avgTtftMs.toFixed(0)} ms`),o.push("")),o.push("---"),o.push("*Generated by LLMxRay — Local LLM Observatory*"),Y(o.join(`
3
+ `),`system-report-${new Date().toISOString().slice(0,10)}.md`),w.value=!1}let A=null;async function H(){try{x.value=await F.version(),f.value=!0}catch{f.value=!1,x.value=null}try{i.value=await F.ps()}catch{i.value=[]}}async function V(){await Promise.all([H(),ot().then(s=>{s&&(d.value=s)}),u.refreshIfStale(3e4)])}function N(s){const o=new Date(s).getTime()-Date.now();if(o<=0)return"expiring...";const a=Math.floor(o/6e4);return a<1?"< 1 min":a<60?`${a} min`:`${Math.floor(a/60)}h ${a%60}m`}return W(async()=>{D.value=!0,await V(),D.value=!1,_.models.length===0&&await _.fetchModels(),C.recalculateAggregate(),A=setInterval(V,5e3)}),K(()=>{A&&clearInterval(A)}),(s,o)=>(r(),l("div",kt,[t("div",St,[t("div",null,[t("h2",Mt,e(s.$t("system.title")),1),t("p",Bt,e(s.$t("system.subtitle")),1)]),t("div",zt,[t("div",Ct,[t("button",{class:"flex items-center gap-1 rounded-lg bg-surface-overlay px-3 py-1.5 text-xs text-text-secondary hover:bg-border-default transition-colors",onClick:o[0]||(o[0]=a=>w.value=!w.value)},[O(n(st),{class:"h-3.5 w-3.5"}),y(" "+e(s.$t("system.export.title")),1)]),w.value?(r(),l("div",{key:0,class:"fixed inset-0 z-10",onClick:o[1]||(o[1]=a=>w.value=!1)})):m("",!0),w.value?(r(),l("div",Dt,[t("button",{class:"w-full px-3 py-2 text-start text-xs text-text-secondary hover:bg-surface-overlay",onClick:q},e(s.$t("system.export.downloadMarkdown")),1),t("button",{class:"w-full px-3 py-2 text-start text-xs text-text-secondary hover:bg-surface-overlay",onClick:U},e(s.$t("system.export.downloadJson")),1)])):m("",!0)]),t("button",{class:"rounded-lg bg-surface-overlay px-3 py-1.5 text-xs text-text-secondary hover:bg-border-default transition-colors",onClick:V},e(s.$t("system.refresh")),1)])]),D.value&&!d.value?(r(),l("div",Lt,[O(n(at),{class:"h-10 w-10 animate-spin text-accent"}),t("p",Tt,e(s.$t("system.detecting")),1),t("p",Rt,e(s.$t("system.detectingDetail")),1)])):m("",!0),!D.value&&!d.value?(r(),l("div",It,e(s.$t("system.unavailable")),1)):m("",!0),d.value?(r(),l(g,{key:2},[t("div",At,[t("div",Vt,[t("h3",Et,[o[3]||(o[3]=t("span",{class:"text-base"},"🖥",-1)),y(" "+e(s.$t("system.os.title")),1)]),t("div",Ot,[t("span",Pt,e(s.$t("system.os.os")),1),t("span",Ft,e(d.value.os.name),1),t("span",Gt,e(s.$t("system.os.version")),1),t("span",jt,e(d.value.os.version),1),t("span",Ut,e(s.$t("system.os.build")),1),t("span",qt,e(d.value.os.build||"—"),1),t("span",Ht,e(s.$t("system.os.architecture")),1),t("span",Nt,e(d.value.os.arch),1)])]),t("div",Jt,[t("h3",Qt,[o[4]||(o[4]=t("span",{class:"text-base"},"💻",-1)),y(" "+e(s.$t("system.device.title")),1)]),t("div",Wt,[t("span",Kt,e(s.$t("system.device.name")),1),t("span",Xt,e(d.value.device.name),1),t("span",Yt,e(s.$t("system.device.manufacturer")),1),t("span",Zt,e(d.value.device.manufacturer||"—"),1),t("span",te,e(s.$t("system.device.model")),1),t("span",ee,e(d.value.device.model||"—"),1),d.value.device.family?(r(),l(g,{key:0},[t("span",se,e(s.$t("system.device.family")),1),t("span",ae,e(d.value.device.family),1)],64)):m("",!0)])])]),t("div",oe,[t("div",re,[t("h3",le,[o[5]||(o[5]=t("span",{class:"text-base"},"⚙",-1)),y(" "+e(s.$t("system.cpu.title")),1)]),t("div",ne,[t("span",de,e(s.$t("system.cpu.cpu")),1),t("span",ie,e(d.value.cpu.name),1),t("span",ce,e(s.$t("system.cpu.physicalCores")),1),t("span",ue,e(d.value.cpu.cores),1),t("span",me,e(s.$t("system.cpu.logicalProcessors")),1),t("span",pe,e(d.value.cpu.logicalProcessors),1),t("span",xe,e(s.$t("system.cpu.maxClock")),1),t("span",ye,e(j.value),1)])]),t("div",he,[t("h3",_e,[o[6]||(o[6]=t("span",{class:"text-base"},"🧠",-1)),y(" "+e(s.$t("system.memory.title")),1)]),t("div",fe,[t("span",ve,e(s.$t("system.memory.totalRam")),1),t("span",ge,e(n(c)(d.value.memory.totalBytes)),1),t("span",be,e(s.$t("system.memory.available")),1),t("span",$e,e(n(c)(d.value.memory.freeBytes)),1),t("span",we,e(s.$t("system.memory.inUse")),1),t("span",ke,e(n(c)(d.value.memory.totalBytes-d.value.memory.freeBytes))+" ("+e(M.value)+"%)",1)]),t("div",Se,[t("div",{class:B(["h-full rounded-full transition-all duration-500",M.value>85?"bg-error":M.value>60?"bg-warning":"bg-success"]),style:L({width:`${M.value}%`})},null,6)])])]),t("div",Me,[t("h3",Be,[o[7]||(o[7]=t("span",{class:"text-base"},"🎮",-1)),y(" "+e(s.$t("system.gpu.title")),1)]),(r(!0),l(g,null,$(d.value.gpu,(a,v)=>(r(),l("div",{key:v,class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},[t("span",ze,e(s.$t("system.gpu.gpu"))+" "+e(d.value.gpu.length>1?v+1:""),1),t("span",Ce,e(a.name),1),t("span",De,e(s.$t("system.gpu.adapterRam")),1),t("span",Le,e(a.adapterRamBytes>0?n(c)(a.adapterRamBytes):s.$t("system.gpu.sharedNotReported")),1),a.driverVersion?(r(),l(g,{key:0},[t("span",Te,e(s.$t("system.gpu.driver")),1),t("span",Re,e(a.driverVersion),1)],64)):m("",!0),v<d.value.gpu.length-1?(r(),l("div",Ie)):m("",!0)]))),128))]),t("div",Ae,[t("h3",Ve,[o[8]||(o[8]=t("span",{class:"text-base"},"💾",-1)),y(" "+e(s.$t("system.storage.title")),1)]),(r(!0),l(g,null,$(d.value.storage,(a,v)=>(r(),l("div",{key:v,class:"space-y-2"},[t("div",Ee,[t("span",Oe,e(s.$t("system.storage.drive")),1),t("span",Pe,e(a.drive),1),t("span",Fe,e(s.$t("system.storage.total")),1),t("span",Ge,e(n(c)(a.totalBytes)),1),t("span",je,e(s.$t("system.storage.free")),1),t("span",Ue,e(n(c)(a.freeBytes)),1),t("span",qe,e(s.$t("system.storage.used")),1),t("span",He,e(n(c)(a.totalBytes-a.freeBytes))+" ("+e(a.totalBytes>0?Math.round((a.totalBytes-a.freeBytes)/a.totalBytes*100):0)+"%) ",1)]),t("div",Ne,[t("div",{class:B(["h-full rounded-full transition-all duration-500",a.totalBytes>0&&(a.totalBytes-a.freeBytes)/a.totalBytes>.85?"bg-error":(a.totalBytes-a.freeBytes)/a.totalBytes>.6?"bg-warning":"bg-success"]),style:L({width:`${a.totalBytes>0?(a.totalBytes-a.freeBytes)/a.totalBytes*100:0}%`})},null,6)]),v<d.value.storage.length-1?(r(),l("div",Je)):m("",!0)]))),128))])],64)):m("",!0),t("div",Qe,[t("div",We,[t("h3",Ke,[o[9]||(o[9]=t("span",{class:"text-base"},"📀",-1)),y(" "+e(s.$t("system.browserStorage.title")),1)]),t("div",Xe,[n(u).origin?(r(),l("span",{key:0,class:B(["rounded-full px-2 py-0.5 text-[9px]",n(u).origin.persisted?"bg-success/10 text-success":"bg-warning/10 text-warning"])},e(n(u).origin.persisted?s.$t("system.browserStorage.persistent"):s.$t("system.browserStorage.bestEffort")),3)):m("",!0),n(u).loading?(r(),l("span",Ye,e(s.$t("system.browserStorage.scanning")),1)):(r(),l("button",{key:1,class:"text-[10px] text-text-muted hover:text-text-primary transition-colors",onClick:o[2]||(o[2]=a=>n(u).refresh())},e(s.$t("system.refresh")),1))])]),n(u).origin?(r(),P(et,{key:0,used:n(u).origin.usage,total:n(u).origin.quota,label:s.$t("system.browserStorage.indexedDbQuota")},null,8,["used","total","label"])):m("",!0),n(u).databases.length>0?(r(),l("div",Ze,[(r(!0),l(g,null,$(n(u).databases,a=>(r(),P(wt,{key:a.id,database:a,onClear:T},null,8,["database"]))),128))])):m("",!0),n(u).databases.length>0?(r(),l("p",ts,e(s.$t("system.browserStorage.totalRecords",{count:n(u).totalRecordCount.toLocaleString(),databases:n(u).databases.length})),1)):m("",!0)]),t("div",es,[t("div",ss,[t("h3",as,[o[10]||(o[10]=t("span",{class:"text-base"},"⚡",-1)),y(" "+e(s.$t("system.ollama.title")),1)]),t("div",os,[t("span",rs,e(s.$t("system.ollama.status")),1),t("span",ls,[t("span",{class:B(["inline-block h-2 w-2 rounded-full",f.value?"bg-success":"bg-error"])},null,2),t("span",{class:B(f.value?"text-success":"text-error")},e(f.value?s.$t("common.status.connected"):s.$t("common.status.disconnected")),3)]),t("span",ns,e(s.$t("system.ollama.version")),1),t("span",ds,e(x.value??"—"),1),t("span",is,e(s.$t("system.ollama.installedModels")),1),t("span",cs,e(n(_).models.length),1),t("span",us,e(s.$t("system.ollama.totalModelStorage")),1),t("span",ms,e(n(c)(E.value)),1),t("span",ps,e(s.$t("system.ollama.modelsLoaded")),1),t("span",xs,e(i.value.length),1)])]),t("div",ys,[t("h3",hs,[o[11]||(o[11]=t("span",{class:"text-base"},"📊",-1)),y(" "+e(s.$t("system.inference.title"))+" ",1),t("span",_s,"("+e(s.$t("system.inference.thisSession"))+")",1)]),h.value.totalSessions===0?(r(),l("div",fs,e(s.$t("system.inference.noSessions")),1)):(r(),l("div",vs,[t("span",gs,e(s.$t("system.inference.sessions")),1),t("span",bs,e(h.value.totalSessions),1),t("span",$s,e(s.$t("system.inference.avgSpeed")),1),t("span",ws,e(h.value.avgTps.toFixed(1))+" tok/s",1),t("span",ks,e(s.$t("system.inference.tokensGenerated")),1),t("span",Ss,e(h.value.totalTokensGenerated.toLocaleString()),1),t("span",Ms,e(s.$t("system.inference.avgTtft")),1),t("span",Bs,e(h.value.avgTtftMs.toFixed(0))+" ms",1)])),h.value.modelsUsed.length>0?(r(),l("div",zs,[t("span",Cs,e(s.$t("system.inference.modelsUsed"))+":",1),(r(!0),l(g,null,$(h.value.modelsUsed,a=>(r(),l("span",{key:a,class:"rounded-full bg-surface-overlay px-2 py-0.5 text-[10px] text-text-secondary"},e(a),1))),128))])):m("",!0)])]),t("div",Ds,[t("h3",Ls,[o[12]||(o[12]=t("span",{class:"text-base"},"⚡",-1)),y(" "+e(s.$t("system.activeModels.title")),1)]),i.value.length===0?(r(),l("div",Ts,e(s.$t("system.activeModels.noModels")),1)):(r(),l("div",Rs,[t("div",Is,[R.value>0?(r(),l("span",As,[y(e(s.$t("system.activeModels.vram"))+": ",1),t("span",Vs,e(n(c)(R.value)),1)])):m("",!0),I.value>0?(r(),l("span",Es,[y(e(s.$t("system.activeModels.ram"))+": ",1),t("span",Os,e(n(c)(I.value)),1)])):m("",!0),t("span",null,[y(e(s.$t("system.activeModels.total"))+": ",1),t("span",Ps,e(n(c)(R.value+I.value)),1)])]),(r(!0),l(g,null,$(i.value,a=>(r(),l("div",{key:a.digest,class:"flex items-center gap-4 rounded-lg bg-surface px-4 py-3 border border-border-default"},[t("div",Fs,[t("p",Gs,e(a.name),1),t("p",js,e(a.details.parameter_size)+" · "+e(a.details.quantization_level)+" · "+e(a.details.family),1)]),t("div",Us,[a.size_vram>0?(r(),l("p",qs,[t("span",Hs,e(s.$t("system.activeModels.vram")),1),t("span",Ns,e(n(c)(a.size_vram)),1)])):m("",!0),a.size-a.size_vram>0?(r(),l("p",Js,[t("span",Qs,e(s.$t("system.activeModels.ram")),1),t("span",Ws,e(n(c)(a.size-a.size_vram)),1)])):m("",!0),t("p",null,[t("span",Ks,e(s.$t("system.activeModels.ctx")),1),t("span",Xs,e(a.context_length.toLocaleString()),1)])]),t("div",{class:"text-xs text-text-muted shrink-0 w-16 text-end",title:a.expires_at},e(N(a.expires_at)),9,Ys)]))),128))]))]),t("div",Zs,[t("h3",ta,[o[13]||(o[13]=t("span",{class:"text-base"},"📦",-1)),y(" "+e(s.$t("system.installedModels.title")),1)]),n(_).models.length===0?(r(),l("div",ea,e(s.$t("system.installedModels.noModels")),1)):(r(),l("div",sa,[t("table",aa,[t("thead",null,[t("tr",oa,[t("th",ra,e(s.$t("system.installedModels.model")),1),t("th",la,e(s.$t("system.installedModels.family")),1),t("th",na,e(s.$t("system.installedModels.parameters")),1),t("th",da,e(s.$t("system.installedModels.quantization")),1),t("th",ia,e(s.$t("system.installedModels.size")),1)])]),t("tbody",null,[(r(!0),l(g,null,$(n(_).models,a=>(r(),l("tr",{key:a.name,class:"border-b border-border-default/50"},[t("td",ca,e(a.name),1),t("td",ua,e(a.details.family),1),t("td",ma,e(a.details.parameter_size),1),t("td",pa,e(a.details.quantization_level),1),t("td",xa,e(n(c)(a.size)),1)]))),128))])])]))])]))}});export{$a as default};
@@ -1 +1 @@
1
- import{b as n,e as t,F as c,k as i,g as d,t as l,j as r}from"./index-CG_7ZNQn.js";const b={class:"flex gap-1 border-b border-border-default"},m=["onClick"],_=n({__name:"TabBar",props:{tabs:{},activeTab:{}},emits:["update:activeTab"],setup(a,{emit:o}){const s=o;return(p,u)=>(r(),t("div",b,[(r(!0),t(c,null,i(a.tabs,e=>(r(),t("button",{key:e.key,class:d(["px-4 py-2 text-sm font-medium transition-colors border-b-2",a.activeTab===e.key?"border-accent text-accent":"border-transparent text-text-secondary hover:text-text-primary hover:border-border-default"]),onClick:x=>s("update:activeTab",e.key)},l(e.label),11,m))),128))]))}});export{_};
1
+ import{b as n,e as t,F as c,k as i,g as d,t as l,j as r}from"./index-DYHBy1xj.js";const b={class:"flex gap-1 border-b border-border-default"},m=["onClick"],_=n({__name:"TabBar",props:{tabs:{},activeTab:{}},emits:["update:activeTab"],setup(a,{emit:o}){const s=o;return(p,u)=>(r(),t("div",b,[(r(!0),t(c,null,i(a.tabs,e=>(r(),t("button",{key:e.key,class:d(["px-4 py-2 text-sm font-medium transition-colors border-b-2",a.activeTab===e.key?"border-accent text-accent":"border-transparent text-text-secondary hover:text-text-primary hover:border-border-default"]),onClick:x=>s("update:activeTab",e.key)},l(e.label),11,m))),128))]))}});export{_};
@@ -1 +1 @@
1
- import{c as x,a as B,l as M}from"./StatusBadge.vue_vue_type_script_setup_true_lang-CgEd6dPQ.js";import{b as y,e as r,l as _,t as u,a as k,j as a,f as t,F as b,k as C,u as f,w as R,p as F,i as g,h as v,r as T,q as H,y as N}from"./index-CG_7ZNQn.js";const S=["title"],V=y({__name:"TokenChip",props:{token:{},color:{},isLatest:{type:Boolean},heatmapMode:{}},emits:["hover","click"],setup(o){const l=o,m=k(()=>({borderBottomColor:l.color,borderBottomWidth:"3px",borderBottomStyle:"solid"}));return(e,s)=>(a(),r("span",{class:"inline cursor-pointer rounded-sm px-px text-text-primary transition-all hover:bg-surface-overlay",style:_([m.value,o.isLatest?{animation:"glow-in 1.5s ease-in-out infinite",borderRadius:"2px"}:{}]),title:`Token #${o.token.index} | Confidence: ${(o.token.confidence*100).toFixed(0)}% | Latency: ${o.token.interTokenLatencyMs}ms`,onMouseenter:s[0]||(s[0]=i=>e.$emit("hover",o.token)),onClick:s[1]||(s[1]=i=>e.$emit("click",o.token))},u(o.token.text),45,S))}}),I={class:"flex items-center gap-2 text-xs text-text-secondary"},D={class:"flex h-3 overflow-hidden rounded-sm"},W=y({__name:"ConfidenceHeatmap",setup(o){const l=[0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1];return(m,e)=>(a(),r("div",I,[e[0]||(e[0]=t("span",null,"Low",-1)),t("div",D,[(a(),r(b,null,C(l,s=>t("div",{key:s,class:"w-4 h-full",style:_({backgroundColor:f(x)(s)})},null,4)),64))]),e[1]||(e[1]=t("span",null,"High",-1)),e[2]||(e[2]=t("span",{class:"ms-2 text-text-muted"},"(confidence from token latency)",-1))]))}}),j={class:"flex flex-col gap-3"},q={key:0,class:"text-text-muted italic"},z={key:0,class:"rounded-lg border border-border-default bg-surface-raised p-3 text-xs space-y-1"},E={class:"flex gap-4"},A={class:"text-text-muted"},G={class:"text-text-muted"},J={class:"text-text-primary"},K={class:"text-text-muted"},O={class:"text-text-primary"},P={class:"text-text-muted"},Q={class:"text-text-primary font-mono"},Y=y({__name:"TokenStreamDisplay",props:{sessionId:{},heatmapMode:{}},setup(o){const l=o,m=k(()=>l.sessionId),{tokens:e,confidenceRange:s}=B(m),i=T(null),d=T(null),h=k(()=>l.heatmapMode??"confidence");function $(c){switch(h.value){case"confidence":return x(c.confidence);case"latency":{const n=s.value.median;return M(c.interTokenLatencyMs,n>0?n*100:50)}case"position":{const n=e.value.length>1?c.index/(e.value.length-1):.5;return x(1-n)}default:return x(c.confidence)}}return R(()=>e.value.length,async()=>{await N(),i.value&&(i.value.scrollTop=i.value.scrollHeight)}),(c,n)=>(a(),r("div",j,[F(W),t("div",{ref_key:"containerRef",ref:i,class:"min-h-[200px] max-h-[500px] overflow-auto rounded-lg border border-border-default bg-surface p-4 font-mono text-sm leading-relaxed"},[f(e).length===0?(a(),r("span",q," Waiting for tokens... ")):g("",!0),(a(!0),r(b,null,C(f(e),(p,w)=>(a(),H(V,{key:p.id,token:p,color:$(p),"is-latest":w===f(e).length-1,"heatmap-mode":h.value,onHover:n[0]||(n[0]=L=>d.value=L)},null,8,["token","color","is-latest","heatmap-mode"]))),128))],512),d.value?(a(),r("div",z,[t("div",E,[t("span",A,"Token #"+u(d.value.index),1),t("span",G,[n[1]||(n[1]=v(" Confidence: ",-1)),t("span",J,u((d.value.confidence*100).toFixed(0))+"%",1)]),t("span",K,[n[2]||(n[2]=v(" Latency: ",-1)),t("span",O,u(d.value.interTokenLatencyMs)+"ms",1)]),t("span",P,[n[3]||(n[3]=v(" Text: ",-1)),t("span",Q,'"'+u(d.value.text)+'"',1)])])])):g("",!0)]))}});export{Y as _};
1
+ import{c as x,a as B,l as M}from"./StatusBadge.vue_vue_type_script_setup_true_lang-BbHpA7hy.js";import{b as y,e as r,l as _,t as u,a as k,j as a,f as t,F as b,k as C,u as f,w as R,p as F,i as g,h as v,r as T,q as H,y as N}from"./index-DYHBy1xj.js";const S=["title"],V=y({__name:"TokenChip",props:{token:{},color:{},isLatest:{type:Boolean},heatmapMode:{}},emits:["hover","click"],setup(o){const l=o,m=k(()=>({borderBottomColor:l.color,borderBottomWidth:"3px",borderBottomStyle:"solid"}));return(e,s)=>(a(),r("span",{class:"inline cursor-pointer rounded-sm px-px text-text-primary transition-all hover:bg-surface-overlay",style:_([m.value,o.isLatest?{animation:"glow-in 1.5s ease-in-out infinite",borderRadius:"2px"}:{}]),title:`Token #${o.token.index} | Confidence: ${(o.token.confidence*100).toFixed(0)}% | Latency: ${o.token.interTokenLatencyMs}ms`,onMouseenter:s[0]||(s[0]=i=>e.$emit("hover",o.token)),onClick:s[1]||(s[1]=i=>e.$emit("click",o.token))},u(o.token.text),45,S))}}),I={class:"flex items-center gap-2 text-xs text-text-secondary"},D={class:"flex h-3 overflow-hidden rounded-sm"},W=y({__name:"ConfidenceHeatmap",setup(o){const l=[0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1];return(m,e)=>(a(),r("div",I,[e[0]||(e[0]=t("span",null,"Low",-1)),t("div",D,[(a(),r(b,null,C(l,s=>t("div",{key:s,class:"w-4 h-full",style:_({backgroundColor:f(x)(s)})},null,4)),64))]),e[1]||(e[1]=t("span",null,"High",-1)),e[2]||(e[2]=t("span",{class:"ms-2 text-text-muted"},"(confidence from token latency)",-1))]))}}),j={class:"flex flex-col gap-3"},q={key:0,class:"text-text-muted italic"},z={key:0,class:"rounded-lg border border-border-default bg-surface-raised p-3 text-xs space-y-1"},E={class:"flex gap-4"},A={class:"text-text-muted"},G={class:"text-text-muted"},J={class:"text-text-primary"},K={class:"text-text-muted"},O={class:"text-text-primary"},P={class:"text-text-muted"},Q={class:"text-text-primary font-mono"},Y=y({__name:"TokenStreamDisplay",props:{sessionId:{},heatmapMode:{}},setup(o){const l=o,m=k(()=>l.sessionId),{tokens:e,confidenceRange:s}=B(m),i=T(null),d=T(null),h=k(()=>l.heatmapMode??"confidence");function $(c){switch(h.value){case"confidence":return x(c.confidence);case"latency":{const n=s.value.median;return M(c.interTokenLatencyMs,n>0?n*100:50)}case"position":{const n=e.value.length>1?c.index/(e.value.length-1):.5;return x(1-n)}default:return x(c.confidence)}}return R(()=>e.value.length,async()=>{await N(),i.value&&(i.value.scrollTop=i.value.scrollHeight)}),(c,n)=>(a(),r("div",j,[F(W),t("div",{ref_key:"containerRef",ref:i,class:"min-h-[200px] max-h-[500px] overflow-auto rounded-lg border border-border-default bg-surface p-4 font-mono text-sm leading-relaxed"},[f(e).length===0?(a(),r("span",q," Waiting for tokens... ")):g("",!0),(a(!0),r(b,null,C(f(e),(p,w)=>(a(),H(V,{key:p.id,token:p,color:$(p),"is-latest":w===f(e).length-1,"heatmap-mode":h.value,onHover:n[0]||(n[0]=L=>d.value=L)},null,8,["token","color","is-latest","heatmap-mode"]))),128))],512),d.value?(a(),r("div",z,[t("div",E,[t("span",A,"Token #"+u(d.value.index),1),t("span",G,[n[1]||(n[1]=v(" Confidence: ",-1)),t("span",J,u((d.value.confidence*100).toFixed(0))+"%",1)]),t("span",K,[n[2]||(n[2]=v(" Latency: ",-1)),t("span",O,u(d.value.interTokenLatencyMs)+"ms",1)]),t("span",P,[n[3]||(n[3]=v(" Text: ",-1)),t("span",Q,'"'+u(d.value.text)+'"',1)])])])):g("",!0)]))}});export{Y as _};