llmxray 0.3.0 → 0.3.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 (39) hide show
  1. package/dist/assets/{AITrainingPage-6EIRz3kX.js → AITrainingPage-BmiTLvwB.js} +1 -1
  2. package/dist/assets/{BenchmarkPage-B7ahJqyh.js → BenchmarkPage-CwCXzzrb.js} +2 -2
  3. package/dist/assets/{ComparisonPage-Cg4Ut59Z.js → ComparisonPage-nfG681cT.js} +1 -1
  4. package/dist/assets/{DashboardPage-BrCHJN4q.js → DashboardPage-CKQaBKDw.js} +6 -6
  5. package/dist/assets/{EmbeddingsPage-CpsFUo1d.js → EmbeddingsPage-DJdyD65Q.js} +1 -1
  6. package/dist/assets/EmbeddingsPage-DtEKy4qg.css +1 -0
  7. package/dist/assets/{GoogleCallbackPage-CN8CaZK-.js → GoogleCallbackPage-2hfuqKEi.js} +1 -1
  8. package/dist/assets/{JsonTreeNode-BvAGKM9G.js → JsonTreeNode-DckR4Nv8.js} +1 -1
  9. package/dist/assets/{ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-Cu2p2PDw.js → ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-DUHfiPBt.js} +1 -1
  10. package/dist/assets/{RAGPage-BKtz_PYd.js → RAGPage-jMq_Sg9F.js} +1 -1
  11. package/dist/assets/{SessionPage-BR4SPR1L.js → SessionPage-C6jIbcq2.js} +3 -3
  12. package/dist/assets/SettingsPage-CpDVuxxG.js +1 -0
  13. package/dist/assets/{StatusBadge.vue_vue_type_script_setup_true_lang-Do1APUFY.js → StatusBadge.vue_vue_type_script_setup_true_lang-D24kGmB6.js} +1 -1
  14. package/dist/assets/{StorageGauge.vue_vue_type_style_index_0_lang-DJFKaJRi.js → StorageGauge.vue_vue_type_style_index_0_lang-CLdARZMv.js} +1 -1
  15. package/dist/assets/SystemPage-BbfTFebq.js +2 -0
  16. package/dist/assets/{TabBar.vue_vue_type_script_setup_true_lang-DEYUQ8oI.js → TabBar.vue_vue_type_script_setup_true_lang-BV7bRKLd.js} +1 -1
  17. package/dist/assets/{TokenStreamDisplay.vue_vue_type_script_setup_true_lang-DTGfuxgU.js → TokenStreamDisplay.vue_vue_type_script_setup_true_lang-Cilrzwrg.js} +1 -1
  18. package/dist/assets/{ToolWorkshopPage-WPcjRasF.js → ToolWorkshopPage-BEFjvNVE.js} +2 -2
  19. package/dist/assets/{agent-store-DHWdued4.js → agent-store-tglPObkH.js} +1 -1
  20. package/dist/assets/generate-service-UqpNGQas.js +3 -0
  21. package/dist/assets/{google-auth-store-DZ-3XsJA.js → google-auth-store-pjk41Wop.js} +1 -1
  22. package/dist/assets/index-CCnJ2vPZ.css +1 -0
  23. package/dist/assets/{index-B19rmHaK.js → index-Cq76cPsM.js} +1 -1
  24. package/dist/assets/index-DVvWJgFn.js +6 -0
  25. package/dist/assets/{metrics-store-eda0zEsH.js → metrics-store-oAZX_4PZ.js} +1 -1
  26. package/dist/assets/{rag-store-lxO_mW3a.js → rag-store-D6KNr_hW.js} +1 -1
  27. package/dist/assets/{storage-store-B9VvK961.js → storage-store-D4WuNdQB.js} +1 -1
  28. package/dist/assets/{stream-handler-D3rNjxe3.js → stream-handler-_fccIkW6.js} +1 -1
  29. package/dist/assets/{tool-workshop-store-XDULj1FM.js → tool-workshop-store-Dz7QH2FM.js} +1 -1
  30. package/dist/assets/{toolcall-store-CFB1O-_8.js → toolcall-store-BFoy2Mdx.js} +1 -1
  31. package/dist/assets/{trash-2-BLyRKRSt.js → trash-2-CbznmmWI.js} +1 -1
  32. package/dist/index.html +2 -2
  33. package/package.json +1 -1
  34. package/dist/assets/EmbeddingsPage-Bo3g8-qN.css +0 -1
  35. package/dist/assets/SettingsPage-BMhdIE_y.js +0 -1
  36. package/dist/assets/SystemPage-BoP1hvPb.js +0 -2
  37. package/dist/assets/generate-service-Cek8un6v.js +0 -3
  38. package/dist/assets/index-CgqXFXWk.js +0 -6
  39. package/dist/assets/index-DL68effo.css +0 -1
@@ -0,0 +1 @@
1
+ import{c as Z,b as I,z as J,an as X,B as W,e as r,f as e,t as s,C as G,D as L,g as N,h as B,O as P,l as U,G as Y,u as p,F as $,k as z,ao as ee,r as b,o as q,a as S,j as l,A as te,p as T,i as h,Q as se,q as A,ap as ae}from"./index-DVvWJgFn.js";import{_ as oe}from"./TabBar.vue_vue_type_script_setup_true_lang-BV7bRKLd.js";import{b as ne}from"./format-BqVZ9rwM.js";import{_ as le}from"./ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-DUHfiPBt.js";import{T as re}from"./trash-2-CbznmmWI.js";import{u as ie}from"./google-auth-store-pjk41Wop.js";import{_ as de}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./google-auth-CfEcVMA7.js";const ce=Z("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]),ue={class:"space-y-6"},pe={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},me={class:"text-sm font-medium text-text-primary"},ge={class:"flex gap-3"},xe={class:"flex items-center gap-2 text-sm"},ve={class:"text-text-secondary"},be={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},fe={class:"text-sm font-medium text-text-primary"},he={class:"space-y-6"},ye={class:"flex items-center gap-1.5 mb-3"},_e={class:"text-xs text-text-muted"},$e={class:"group relative"},ke={class:"pointer-events-none absolute left-full top-1/2 z-10 ms-2 w-72 -translate-y-1/2 rounded-lg border border-border-default bg-surface-raised p-3 text-xs text-text-secondary opacity-0 shadow-lg transition-opacity group-hover:pointer-events-auto group-hover:opacity-100"},Be={class:"font-medium text-text-primary mb-1"},we={class:"mb-2"},Ce={class:"space-y-1 text-[11px]"},Me={class:"ms-auto text-xs text-text-primary font-medium"},ze={class:"rounded-full bg-surface-overlay px-2 py-0.5 text-[10px] text-text-secondary"},Ge={class:"relative mt-0.5 h-3"},Le={class:"absolute inset-0 flex"},Se={class:"flex-[15] text-center text-[9px] text-text-muted border-e border-border-default/30"},Ae={class:"flex-[20] text-center text-[9px] text-text-muted border-e border-border-default/30"},Te={class:"flex-[25] text-center text-[9px] text-text-muted border-e border-border-default/30"},Ie={class:"flex-[40] text-center text-[9px] text-text-muted"},Ve={class:"relative h-1.5 mt-1"},De={class:"flex items-center gap-1.5 mb-2"},Ee={class:"text-xs text-text-muted"},Ue={class:"group relative"},qe={class:"pointer-events-none absolute left-full top-1/2 z-10 ms-2 w-72 -translate-y-1/2 rounded-lg border border-border-default bg-surface-raised p-3 text-xs text-text-secondary opacity-0 shadow-lg transition-opacity group-hover:pointer-events-auto group-hover:opacity-100"},Ne={class:"font-medium text-text-primary mb-1"},Pe={class:"mb-2"},je={class:"mt-2 text-[10px] text-text-muted"},Oe={class:"flex items-center gap-3"},Re={class:"text-[10px] text-text-muted"},Qe={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},Fe={class:"text-sm font-medium text-text-primary"},Je={class:"space-y-2"},We=["value"],He=["value"],Ke=I({__name:"SettingsGeneralTab",setup(k){const{t:a}=J(),v=X(),m=b("http://localhost:11434"),f=b(.7),g=b(4096),d=b("disconnected");function y(){const n=localStorage.getItem("llmxray-settings");if(n)try{const i=JSON.parse(n);typeof i.ollamaUrl=="string"&&(m.value=i.ollamaUrl,q.setBaseUrl(i.ollamaUrl+"/api")),typeof i.defaultTemperature=="number"&&(f.value=i.defaultTemperature),typeof i.defaultContextLength=="number"&&(g.value=i.defaultContextLength)}catch{}}function w(){localStorage.setItem("llmxray-settings",JSON.stringify({ollamaUrl:m.value,defaultTemperature:f.value,defaultContextLength:g.value}))}async function C(){d.value="testing";try{const n=await fetch(`${m.value}/api/tags`);d.value=n.ok?"connected":"disconnected"}catch{d.value="disconnected"}}function _(){w(),q.setBaseUrl(m.value+"/api")}const V=S(()=>{const n=f.value;return n===0?a("settings.general.temperatureDeterministic"):n<=.3?a("settings.general.temperatureFocused"):n<=.7?a("settings.general.temperatureBalanced"):n<=1.2?a("settings.general.temperatureCreative"):a("settings.general.temperatureVeryRandom")}),D=S(()=>f.value/2*100);return W(()=>{y(),C()}),(n,i)=>(l(),r("div",ue,[e("div",pe,[e("h3",me,s(n.$t("settings.general.ollamaConnection")),1),e("div",ge,[G(e("input",{"onUpdate:modelValue":i[0]||(i[0]=x=>m.value=x),class:"flex-1 rounded-lg border border-border-default bg-surface px-3 py-2 text-sm text-text-primary focus:border-accent focus:outline-none",placeholder:"http://localhost:11434"},null,512),[[L,m.value]]),e("button",{class:"rounded-lg bg-surface-overlay px-4 py-2 text-sm text-text-primary hover:bg-border-default transition-colors",onClick:C},s(n.$t("settings.general.testConnection")),1),e("button",{class:"rounded-lg bg-accent px-4 py-2 text-sm text-surface hover:bg-accent-hover transition-colors",onClick:_},s(n.$t("settings.general.save")),1)]),e("div",xe,[e("span",{class:N(["inline-block h-2 w-2 rounded-full",{"bg-success":d.value==="connected","bg-error":d.value==="disconnected","bg-warning animate-pulse":d.value==="testing"}])},null,2),e("span",ve,s(d.value==="connected"?n.$t("settings.general.connectionConnected"):d.value==="testing"?n.$t("settings.general.connectionTesting"):n.$t("settings.general.connectionDisconnected")),1)])]),e("div",be,[e("h3",fe,s(n.$t("settings.general.defaultParameters")),1),e("div",he,[e("div",null,[e("div",ye,[e("label",_e,s(n.$t("settings.general.temperature")),1),e("div",$e,[i[7]||(i[7]=e("span",{class:"inline-flex h-4 w-4 items-center justify-center rounded-full border border-border-default text-[10px] text-text-muted cursor-help"},"?",-1)),e("div",ke,[e("p",Be,s(n.$t("settings.general.temperatureTooltipTitle")),1),e("p",we,s(n.$t("settings.general.temperatureTooltipDesc")),1),e("ul",Ce,[e("li",null,[i[4]||(i[4]=e("strong",null,"0",-1)),B(" — "+s(n.$t("settings.general.temperatureTooltipZero")),1)]),e("li",null,[i[5]||(i[5]=e("strong",null,"0.7",-1)),B(" — "+s(n.$t("settings.general.temperatureTooltipDefault")),1)]),e("li",null,[i[6]||(i[6]=e("strong",null,"1.0+",-1)),B(" — "+s(n.$t("settings.general.temperatureTooltipHigh")),1)])])])]),e("span",Me,s(f.value),1),e("span",ze,s(V.value),1)]),G(e("input",{"onUpdate:modelValue":i[1]||(i[1]=x=>f.value=x),type:"range",min:"0",max:"2",step:"0.1",class:"w-full",onChange:w},null,544),[[L,f.value,void 0,{number:!0}]]),i[9]||(i[9]=P('<div class="relative mt-1 h-4"><span class="absolute start-0 text-[10px] text-text-muted">0</span><span class="absolute text-[10px] text-text-muted" style="inset-inline-start:15%;">0.3</span><span class="absolute text-[10px] text-accent font-medium" style="inset-inline-start:35%;">0.7</span><span class="absolute text-[10px] text-text-muted" style="inset-inline-start:50%;">1.0</span><span class="absolute text-[10px] text-text-muted" style="inset-inline-start:75%;">1.5</span><span class="absolute end-0 text-[10px] text-text-muted">2.0</span></div>',1)),e("div",Ge,[e("div",Le,[e("div",Se,s(n.$t("settings.general.temperatureFocused")),1),e("div",Ae,s(n.$t("settings.general.temperatureBalanced")),1),e("div",Te,s(n.$t("settings.general.temperatureCreative")),1),e("div",Ie,s(n.$t("settings.general.temperatureWild")),1)])]),e("div",Ve,[i[8]||(i[8]=e("div",{class:"absolute h-1.5 rounded-full bg-border-default/30 w-full"},null,-1)),e("div",{class:"absolute h-1.5 rounded-full bg-accent/60 transition-all duration-150",style:U({width:`${D.value}%`})},null,4)])]),e("div",null,[e("div",De,[e("label",Ee,s(n.$t("settings.general.contextLength")),1),e("div",Ue,[i[10]||(i[10]=e("span",{class:"inline-flex h-4 w-4 items-center justify-center rounded-full border border-border-default text-[10px] text-text-muted cursor-help"},"?",-1)),e("div",qe,[e("p",Ne,s(n.$t("settings.general.contextLengthTooltipTitle")),1),e("p",Pe,s(n.$t("settings.general.contextLengthTooltipDesc")),1),e("div",je,s(n.$t("settings.general.contextLengthTooltipNote")),1)])])]),e("div",Oe,[G(e("select",{"onUpdate:modelValue":i[2]||(i[2]=x=>g.value=x),class:"rounded-lg border border-border-default bg-surface px-3 py-2 text-sm text-text-primary focus:border-accent focus:outline-none",onChange:w},[...i[11]||(i[11]=[e("option",{value:2048},"2,048",-1),e("option",{value:4096},"4,096",-1),e("option",{value:8192},"8,192",-1),e("option",{value:16384},"16,384",-1),e("option",{value:32768},"32,768",-1),e("option",{value:65536},"65,536",-1),e("option",{value:131072},"131,072",-1)])],544),[[Y,g.value,void 0,{number:!0}]]),e("span",Re,s(n.$t("settings.general.approximateWords",{count:Math.round(g.value*.75).toLocaleString()})),1)])])])]),e("div",Qe,[e("h3",Fe,s(n.$t("settings.general.language")),1),e("div",Je,[e("select",{value:p(v).locale,class:"w-full rounded-lg border border-border-default bg-surface px-3 py-2 text-sm text-text-primary",onChange:i[3]||(i[3]=x=>p(v).setLocale(x.target.value))},[(l(!0),r($,null,z(p(ee),x=>(l(),r("option",{key:x.code,value:x.code},s(x.flag)+" "+s(x.label),9,He))),128))],40,We)])])]))}}),F=[{key:"chat",label:"Chat",entries:[{name:"llama3.2",description:"Meta Llama 3.2 -- fast general-purpose chat",variants:[{tag:"1b",params:"1B",size:"1.3 GB"},{tag:"3b",params:"3B",size:"2.0 GB"}]},{name:"llama3.1",description:"Meta Llama 3.1 -- strong reasoning and instruction following",variants:[{tag:"8b",params:"8B",size:"4.7 GB"}]},{name:"gemma3",description:"Google Gemma 3 -- efficient and multilingual",variants:[{tag:"1b",params:"1B",size:"815 MB"},{tag:"4b",params:"4B",size:"3.0 GB"},{tag:"12b",params:"12B",size:"8.1 GB"}]},{name:"gemma2",description:"Google Gemma 2 -- balanced performance",variants:[{tag:"2b",params:"2B",size:"1.6 GB"},{tag:"9b",params:"9B",size:"5.5 GB"}]},{name:"mistral",description:"Mistral 7B -- strong European model",variants:[{tag:"7b",params:"7B",size:"4.1 GB"}]},{name:"phi4",description:"Microsoft Phi-4 -- small but capable",variants:[{tag:"14b",params:"14B",size:"9.1 GB"}]},{name:"qwen2.5",description:"Alibaba Qwen 2.5 -- multilingual powerhouse",variants:[{tag:"0.5b",params:"0.5B",size:"397 MB"},{tag:"1.5b",params:"1.5B",size:"986 MB"},{tag:"3b",params:"3B",size:"1.9 GB"},{tag:"7b",params:"7B",size:"4.7 GB"}]},{name:"tinyllama",description:"TinyLlama -- ultra-lightweight for constrained systems",variants:[{tag:"1.1b",params:"1.1B",size:"637 MB"}]}]},{key:"code",label:"Code",entries:[{name:"qwen2.5-coder",description:"Qwen 2.5 Coder -- strong code generation and completion",variants:[{tag:"1.5b",params:"1.5B",size:"986 MB"},{tag:"3b",params:"3B",size:"1.9 GB"},{tag:"7b",params:"7B",size:"4.7 GB"}]},{name:"codellama",description:"Meta Code Llama -- code-specialized Llama",variants:[{tag:"7b",params:"7B",size:"3.8 GB"},{tag:"13b",params:"13B",size:"7.4 GB"}]},{name:"deepseek-coder-v2",description:"DeepSeek Coder V2 -- strong coding with MoE architecture",variants:[{tag:"16b",params:"16B",size:"8.9 GB"}]},{name:"starcoder2",description:"BigCode StarCoder 2 -- trained on The Stack v2",variants:[{tag:"3b",params:"3B",size:"1.7 GB"},{tag:"7b",params:"7B",size:"4.0 GB"}]},{name:"codegemma",description:"Google CodeGemma -- code completion and generation",variants:[{tag:"2b",params:"2B",size:"1.6 GB"},{tag:"7b",params:"7B",size:"5.0 GB"}]}]},{key:"embedding",label:"Embedding",entries:[{name:"nomic-embed-text",description:"Nomic -- 137M params, fast and good quality",variants:[{tag:"latest",params:"137M",size:"274 MB"}]},{name:"mxbai-embed-large",description:"mixedbread.ai -- 335M params, high quality",variants:[{tag:"latest",params:"335M",size:"670 MB"}]},{name:"all-minilm",description:"MiniLM -- 23M params, very lightweight",variants:[{tag:"latest",params:"23M",size:"46 MB"}]},{name:"snowflake-arctic-embed",description:"Snowflake -- 110M params, balanced",variants:[{tag:"latest",params:"110M",size:"229 MB"}]},{name:"bge-m3",description:"BAAI BGE-M3 -- multilingual, multi-granularity",variants:[{tag:"latest",params:"567M",size:"1.2 GB"}]}]},{key:"vision",label:"Vision",entries:[{name:"llava",description:"LLaVA -- multimodal vision-language model",variants:[{tag:"7b",params:"7B",size:"4.7 GB"},{tag:"13b",params:"13B",size:"8.0 GB"}]},{name:"llama3.2-vision",description:"Meta Llama 3.2 Vision -- image understanding",variants:[{tag:"11b",params:"11B",size:"7.9 GB"}]},{name:"minicpm-v",description:"MiniCPM-V -- lightweight vision model",variants:[{tag:"latest",params:"8B",size:"5.5 GB"}]},{name:"moondream",description:"Moondream -- tiny vision model, runs anywhere",variants:[{tag:"latest",params:"1.9B",size:"1.7 GB"}]}]},{key:"thinking",label:"Thinking",entries:[{name:"deepseek-r1",description:"DeepSeek R1 -- chain-of-thought reasoning",variants:[{tag:"1.5b",params:"1.5B",size:"1.1 GB"},{tag:"7b",params:"7B",size:"4.7 GB"},{tag:"8b",params:"8B",size:"4.9 GB"},{tag:"14b",params:"14B",size:"9.0 GB"}]},{name:"qwq",description:"Alibaba QwQ -- strong reasoning with thinking traces",variants:[{tag:"32b",params:"32B",size:"20 GB"}]},{name:"phi4-reasoning",description:"Microsoft Phi-4 Reasoning -- compact thinking model",variants:[{tag:"14b",params:"14B",size:"9.1 GB"}]},{name:"command-r",description:"Cohere Command R -- reasoning with RAG strengths",variants:[{tag:"35b",params:"35B",size:"20 GB"}]}]}],Ze={class:"space-y-6"},Xe={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},Ye={class:"flex items-center justify-between"},et={class:"text-sm font-medium text-text-primary"},tt={class:"ms-1 text-text-muted"},st={key:0,class:"text-xs text-error"},at={key:1,class:"py-4 text-center text-sm text-text-muted"},ot={key:2,class:"space-y-1"},nt={class:"flex-1 min-w-0"},lt={class:"flex items-center gap-2"},rt={class:"font-medium text-text-primary truncate"},it={class:"flex gap-3 text-[10px] text-text-muted mt-0.5"},dt={key:0},ct={key:1},ut={key:2},pt={class:"shrink-0 text-[10px] text-text-muted"},mt=["onClick"],gt=["title","onClick"],xt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},vt={class:"text-sm font-medium text-text-primary"},bt={class:"flex flex-wrap gap-1.5"},ft=["onClick"],ht=["placeholder"],yt={key:0,class:"text-xs text-error"},_t={key:1,class:"py-4 text-center text-sm text-text-muted"},$t={key:2,class:"space-y-2"},kt={class:"flex items-start gap-3"},Bt={class:"flex-1 min-w-0"},wt={class:"flex items-center gap-2"},Ct={class:"text-xs font-medium text-text-primary"},Mt={key:0,class:"rounded-full bg-success/10 px-1.5 py-0.5 text-[9px] text-success"},zt={class:"text-[10px] text-text-muted mt-0.5"},Gt={class:"flex items-center gap-2 shrink-0"},Lt=["value","onChange"],St=["value"],At={key:1,class:"text-[10px] text-text-muted"},Tt=["disabled","onClick"],It={key:0,class:"mt-2 space-y-1"},Vt={class:"h-1.5 rounded-full bg-surface-overlay overflow-hidden"},Dt={class:"text-[9px] text-text-muted"},Et={class:"border-t border-border-default pt-4"},Ut={class:"mb-2 text-xs text-text-muted"},qt={class:"flex gap-2"},Nt=["disabled"],Pt={key:0,class:"mt-2 space-y-1"},jt={class:"flex items-center justify-between text-[10px] text-text-muted"},Ot={class:"font-mono"},Rt={class:"h-1.5 rounded-full bg-surface-overlay overflow-hidden"},Qt={class:"text-[9px] text-text-muted"},Ft=I({__name:"SettingsModelsTab",setup(k){const a=te(),v=b(null),m=b(null);async function f(o){if(v.value===o){try{m.value=null,await a.deleteModel(o)}catch(c){m.value=c instanceof Error?c.message:"Delete failed"}v.value=null}else v.value=o,setTimeout(()=>{v.value===o&&(v.value=null)},3e3)}const g=b("all"),d=b(""),y=S(()=>[{key:"all",label:"All"},...F.map(o=>({key:o.key,label:o.label}))]),w=S(()=>{let o=[];for(const t of F)if(!(g.value!=="all"&&t.key!==g.value))for(const u of t.entries)o.push({...u,category:t.key});const c=d.value.toLowerCase().trim();return c&&(o=o.filter(t=>t.name.toLowerCase().includes(c)||t.description.toLowerCase().includes(c))),o}),C=b(new Map);function _(o){const c=C.value.get(o.name);return o.variants.find(t=>t.tag===c)??o.variants[0]}function V(o,c){const t=new Map(C.value);t.set(o,c),C.value=t}function D(o,c){const t=c==="latest"?o:`${o}:${c}`;return a.modelNames.some(u=>u===t||u===`${t}:latest`||u===o)}const n=b(new Map),i=b(null),x=b("");async function j(o){const c=new Map(n.value);c.set(o,{status:"Starting...",percent:0}),n.value=c,i.value=null;try{await q.pullModel(o,(u,M,R)=>{const Q=new Map(n.value),K=M&&R?Math.round(M/R*100):0;Q.set(o,{status:u,percent:K}),n.value=Q}),await a.fetchModels();const t=new Map(n.value);t.delete(o),n.value=t}catch(t){i.value=`Failed to pull ${o}: ${t instanceof Error?t.message:"Unknown error"}`;const u=new Map(n.value);u.delete(o),n.value=u}}function H(o){const c=_(o),t=c.tag==="latest"?o.name:`${o.name}:${c.tag}`;j(t)}function O(){const o=x.value.trim();o&&(j(o),x.value="")}function E(o){return n.value.has(o)}return W(()=>{a.models.length===0&&a.fetchModels()}),(o,c)=>(l(),r("div",Ze,[e("div",Xe,[e("div",Ye,[e("h3",et,[B(s(o.$t("settings.models.installedModels"))+" ",1),e("span",tt,"("+s(p(a).models.length)+")",1)]),e("button",{class:"rounded-lg px-3 py-1.5 text-xs text-text-secondary hover:bg-surface-overlay hover:text-text-primary transition-colors",onClick:c[0]||(c[0]=t=>p(a).fetchModels())},[T(p(ce),{class:"h-3.5 w-3.5"}),B(" "+s(o.$t("settings.models.refresh")),1)])]),m.value?(l(),r("p",st,s(m.value),1)):h("",!0),p(a).models.length===0?(l(),r("div",at,s(o.$t("settings.models.noModelsInstalled")),1)):(l(),r("div",ot,[(l(!0),r($,null,z(p(a).models,t=>(l(),r("div",{key:t.name,class:"flex items-center gap-3 rounded-lg bg-surface px-3 py-2.5 text-xs"},[e("div",nt,[e("div",lt,[e("span",rt,s(t.name),1),T(le,{"model-name":t.name},null,8,["model-name"])]),e("div",it,[t.details?.family?(l(),r("span",dt,s(t.details.family),1)):h("",!0),t.details?.parameter_size?(l(),r("span",ct,s(t.details.parameter_size),1)):h("",!0),t.details?.quantization_level?(l(),r("span",ut,s(t.details.quantization_level),1)):h("",!0)])]),e("span",pt,s(p(ne)(t.size)),1),v.value===t.name?(l(),r("button",{key:0,class:"shrink-0 rounded-lg border border-error/30 px-2.5 py-1 text-[10px] text-error hover:bg-error/10 transition-colors",onClick:u=>f(t.name)},s(o.$t("settings.models.confirmDeletePrompt")),9,mt)):(l(),r("button",{key:1,class:"shrink-0 rounded p-1 text-text-muted hover:text-error transition-colors",title:o.$t("settings.models.delete"),onClick:u=>f(t.name)},[T(p(re),{class:"h-3.5 w-3.5"})],8,gt))]))),128))]))]),e("div",xt,[e("h3",vt,s(o.$t("settings.models.downloadModels")),1),e("div",bt,[(l(!0),r($,null,z(y.value,t=>(l(),r("button",{key:t.key,class:N(["rounded-lg px-3 py-1.5 text-xs transition-colors",g.value===t.key?"bg-accent/10 text-accent":"bg-surface text-text-secondary hover:bg-surface-overlay hover:text-text-primary"]),onClick:u=>g.value=t.key},s(t.label),11,ft))),128))]),G(e("input",{"onUpdate:modelValue":c[1]||(c[1]=t=>d.value=t),type:"text",placeholder:o.$t("settings.models.searchModels"),class:"w-full rounded-lg border border-border-default bg-surface px-3 py-2 text-sm text-text-primary placeholder-text-muted outline-none focus:border-accent"},null,8,ht),[[L,d.value]]),i.value?(l(),r("p",yt,s(i.value),1)):h("",!0),w.value.length===0?(l(),r("div",_t,s(o.$t("settings.models.noModelsMatch")),1)):(l(),r("div",$t,[(l(!0),r($,null,z(w.value,t=>(l(),r("div",{key:t.name,class:"rounded-lg border border-border-default bg-surface p-3"},[e("div",kt,[e("div",Bt,[e("div",wt,[e("span",Ct,s(t.name),1),D(t.name,_(t).tag)?(l(),r("span",Mt,s(o.$t("settings.models.installed")),1)):h("",!0)]),e("p",zt,s(t.description),1)]),e("div",Gt,[t.variants.length>1?(l(),r("select",{key:0,value:_(t).tag,class:"rounded border border-border-default bg-surface px-2 py-1 text-[10px] text-text-primary outline-none focus:border-accent",onChange:u=>V(t.name,u.target.value)},[(l(!0),r($,null,z(t.variants,u=>(l(),r("option",{key:u.tag,value:u.tag},s(u.params)+" ("+s(u.size)+") ",9,St))),128))],40,Lt)):(l(),r("span",At,s(t.variants[0].params)+" ("+s(t.variants[0].size)+") ",1)),e("button",{disabled:E(`${t.name}:${_(t).tag}`)||E(t.name),class:"rounded-lg bg-accent px-3 py-1 text-[10px] text-white hover:bg-accent-hover disabled:opacity-40 transition-colors",onClick:u=>H(t)},s(o.$t("settings.models.pull")),9,Tt)])]),n.value.has(`${t.name}:${_(t).tag}`)||n.value.has(t.name)?(l(),r("div",It,[e("div",Vt,[e("div",{class:"h-full rounded-full bg-accent transition-all duration-300",style:U({width:`${(n.value.get(`${t.name}:${_(t).tag}`)??n.value.get(t.name))?.percent??0}%`})},null,4)]),e("p",Dt,s((n.value.get(`${t.name}:${_(t).tag}`)??n.value.get(t.name))?.status),1)])):h("",!0)]))),128))])),e("div",Et,[e("p",Ut,s(o.$t("settings.models.pullByName")),1),e("div",qt,[G(e("input",{"onUpdate:modelValue":c[2]||(c[2]=t=>x.value=t),type:"text",placeholder:"e.g. llama3.2:3b",class:"flex-1 rounded-lg border border-border-default bg-surface px-3 py-2 text-sm text-text-primary placeholder-text-muted outline-none focus:border-accent font-mono",onKeydown:se(O,["enter"])},null,544),[[L,x.value]]),e("button",{disabled:!x.value.trim()||E(x.value.trim()),class:"rounded-lg bg-accent px-4 py-2 text-sm text-white hover:bg-accent-hover disabled:opacity-40 transition-colors",onClick:O},s(o.$t("settings.models.pull")),9,Nt)]),(l(!0),r($,null,z(n.value,([t,u])=>(l(),r($,{key:t},[w.value.some(M=>`${M.name}:${_(M).tag}`===t||M.name===t)?h("",!0):(l(),r("div",Pt,[e("div",jt,[e("span",Ot,s(t),1),e("span",null,s(u.percent)+"%",1)]),e("div",Rt,[e("div",{class:"h-full rounded-full bg-accent transition-all duration-300",style:U({width:`${u.percent}%`})},null,4)]),e("p",Qt,s(u.status),1)]))],64))),128))])])]))}}),Jt={class:"space-y-6"},Wt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},Ht={class:"text-sm font-medium text-text-primary"},Kt={class:"text-[10px] text-text-muted"},Zt={class:"block text-xs text-text-secondary mb-1"},Xt={class:"flex gap-3"},Yt={class:"flex items-center gap-2 text-sm"},es={class:"text-text-secondary"},ts={class:"text-text-primary font-medium"},ss={key:0,class:"text-xs text-error"},as={class:"flex gap-3"},os=["disabled"],ns={class:"border-t border-border-default pt-3"},ls={key:0,class:"mt-3 space-y-2 text-xs text-text-secondary"},rs=I({__name:"SettingsIntegrationsTab",setup(k){const a=ie(),v=b(a.clientId),m=b(!1);function f(){a.updateClientId(v.value)}return(g,d)=>(l(),r("div",Jt,[e("div",Wt,[e("h3",Ht,s(g.$t("settings.integrations.googleIntegration")),1),e("p",Kt,s(g.$t("settings.integrations.googleIntegrationDesc")),1),e("div",null,[e("label",Zt,s(g.$t("settings.integrations.oauthClientId")),1),e("div",Xt,[G(e("input",{"onUpdate:modelValue":d[0]||(d[0]=y=>v.value=y),class:"flex-1 rounded-lg border border-border-default bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-muted focus:border-accent focus:outline-none font-mono",placeholder:"123456789-abcdef.apps.googleusercontent.com"},null,512),[[L,v.value]]),e("button",{class:"rounded-lg bg-surface-overlay px-4 py-2 text-sm text-text-primary hover:bg-border-default transition-colors",onClick:f},s(g.$t("common.actions.save")),1)])]),e("div",Yt,[e("span",{class:N(["inline-block h-2 w-2 rounded-full",{"bg-success":p(a).connected,"bg-error":!p(a).connected&&!p(a).isAuthenticating,"bg-warning animate-pulse":p(a).isAuthenticating}])},null,2),e("span",es,[p(a).isAuthenticating?(l(),r($,{key:0},[B(s(g.$t("settings.integrations.authenticating")),1)],64)):p(a).connected?(l(),r($,{key:1},[B(s(g.$t("settings.integrations.connectedAs"))+" ",1),e("span",ts,s(p(a).userEmail??"unknown"),1)],64)):(l(),r($,{key:2},[B(s(g.$t("settings.integrations.notConnected")),1)],64))])]),p(a).error?(l(),r("p",ss,s(p(a).error),1)):h("",!0),e("div",as,[p(a).connected?h("",!0):(l(),r("button",{key:0,class:"rounded-lg bg-accent px-4 py-2 text-sm text-surface hover:bg-accent-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed",disabled:!p(a).clientId||p(a).isAuthenticating,onClick:d[1]||(d[1]=y=>p(a).connect())},s(g.$t("settings.integrations.connectGoogleAccount")),9,os)),p(a).connected?(l(),r("button",{key:1,class:"rounded-lg border border-error/30 px-4 py-2 text-sm text-error hover:bg-error/10 transition-colors",onClick:d[2]||(d[2]=y=>p(a).disconnect())},s(g.$t("settings.integrations.disconnect")),1)):h("",!0)]),e("div",ns,[e("button",{class:"text-xs text-accent hover:text-accent-hover transition-colors",onClick:d[3]||(d[3]=y=>m.value=!m.value)},s(m.value?g.$t("settings.integrations.hideSetup"):g.$t("settings.integrations.showSetup")),1),m.value?(l(),r("div",ls,[...d[4]||(d[4]=[P('<p class="font-medium text-text-primary">One-time setup (5 minutes):</p><ol class="list-decimal list-inside space-y-2 ms-1"><li>Go to <a href="https://console.cloud.google.com/" target="_blank" rel="noopener" class="text-accent hover:underline">Google Cloud Console</a> and create a new project</li><li>Enable the <a href="https://console.cloud.google.com/apis/library/calendar-json.googleapis.com" target="_blank" rel="noopener" class="text-accent hover:underline">Google Calendar API</a></li><li>Enable the <a href="https://console.cloud.google.com/apis/library/gmail.googleapis.com" target="_blank" rel="noopener" class="text-accent hover:underline">Gmail API</a></li><li>Go to <a href="https://console.cloud.google.com/apis/credentials/consent" target="_blank" rel="noopener" class="text-accent hover:underline">OAuth consent screen</a>, set up as <strong>External</strong>, add your email as a <strong>test user</strong></li><li>Go to <a href="https://console.cloud.google.com/apis/credentials" target="_blank" rel="noopener" class="text-accent hover:underline">Credentials</a>, click <strong>+ Create Credentials</strong> → <strong>OAuth 2.0 Client ID</strong></li><li>Set application type to <strong>Web application</strong></li><li>Add <strong>Authorized JavaScript origins</strong>: <code class="bg-surface rounded px-1.5 py-0.5 text-[11px] font-mono text-text-primary">http://localhost:5173</code></li><li>Add <strong>Authorized redirect URIs</strong>: <code class="bg-surface rounded px-1.5 py-0.5 text-[11px] font-mono text-text-primary">http://localhost:5173/auth/google/callback</code></li><li>Copy the <strong>Client ID</strong> and paste it above, then click Save</li><li>Click <strong>Connect Google Account</strong> above</li></ol><div class="mt-3 rounded-lg bg-surface-overlay p-3 text-[11px]"><p class="font-medium text-text-primary mb-1">Note: &quot;App not verified&quot; warning</p><p>Google will show a warning because your app is in testing mode. Click <strong>Advanced</strong> → <strong>Go to [your project name] (unsafe)</strong> to proceed.</p></div>',3)])])):h("",!0)])])]))}}),is={},ds={class:"space-y-6"},cs={class:"rounded-lg border border-border-default bg-surface-raised p-5 space-y-4"},us={class:"flex items-center gap-3"},ps={class:"text-xs text-text-muted"},ms={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},gs={class:"text-text-muted"},xs={class:"text-text-muted"},vs={class:"text-text-muted"},bs={class:"rounded-lg border border-border-default bg-surface-raised p-5 space-y-3"},fs={class:"text-sm font-medium text-text-primary"};function hs(k,a){return l(),r("div",ds,[e("div",cs,[e("div",us,[a[1]||(a[1]=e("span",{class:"text-2xl font-bold text-accent"},"xR",-1)),e("div",null,[a[0]||(a[0]=e("h3",{class:"text-sm font-semibold text-text-primary"},"LLMxRay",-1)),e("p",ps,s(k.$t("settings.about.localLlmObservatory")),1)])]),e("div",ms,[e("span",gs,s(k.$t("settings.about.version")),1),a[2]||(a[2]=e("span",{class:"text-text-primary"},"1.0.0",-1)),e("span",xs,s(k.$t("settings.about.license")),1),a[3]||(a[3]=e("span",{class:"text-text-primary"},"Apache 2.0",-1)),e("span",vs,s(k.$t("settings.about.repository")),1),a[4]||(a[4]=e("a",{href:"https://github.com/LogneBudo/llmxray",target:"_blank",rel:"noopener",class:"text-accent hover:underline"}," github.com/LogneBudo/llmxray ",-1))])]),e("div",bs,[e("h3",fs,s(k.$t("settings.about.techStack")),1),a[5]||(a[5]=P('<div class="grid grid-cols-2 gap-2 text-xs"><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">Vue 3.5</p><p class="text-[10px] text-text-muted">Composition API + TypeScript</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">Vite 7</p><p class="text-[10px] text-text-muted">Build tooling + dev server</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">Tailwind CSS 4</p><p class="text-[10px] text-text-muted">Utility-first styling</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">Pinia 3</p><p class="text-[10px] text-text-muted">State management</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">Ollama</p><p class="text-[10px] text-text-muted">Local LLM runtime</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">IndexedDB</p><p class="text-[10px] text-text-muted">Browser-native persistence</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">D3.js + Chart.js</p><p class="text-[10px] text-text-muted">Data visualization</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">pdfjs + mammoth</p><p class="text-[10px] text-text-muted">Document parsing</p></div></div>',1))])])}const ys=de(is,[["render",hs]]),_s={class:"max-w-4xl space-y-6"},Ls=I({__name:"SettingsPage",setup(k){const{t:a}=J(),v=ae(),m=b(v.query.tab??"general"),f=S(()=>[{key:"general",label:a("settings.tabs.general")},{key:"models",label:a("settings.tabs.models")},{key:"integrations",label:a("settings.tabs.integrations")},{key:"about",label:a("settings.tabs.about")}]);return(g,d)=>(l(),r("div",_s,[T(oe,{tabs:f.value,"active-tab":m.value,"onUpdate:activeTab":d[0]||(d[0]=y=>m.value=y)},null,8,["tabs","active-tab"]),m.value==="general"?(l(),A(Ke,{key:0})):m.value==="models"?(l(),A(Ft,{key:1})):m.value==="integrations"?(l(),A(rs,{key:2})):m.value==="about"?(l(),A(ys,{key:3})):h("",!0)]))}});export{Ls as default};
@@ -1 +1 @@
1
- import{d as v,r as y,a as f,b,e as l,f as u,t as c,i as g,g as h,j as d,h as M}from"./index-CgqXFXWk.js";import{a as k}from"./agent-store-DHWdued4.js";const V=v("prompt",()=>{const e=y(new Map);function n(a){return e.value.get(a)??null}function t(a){return e.value.get(a)?.sections??[]}function s(a,o){e.value.set(a,o)}return{anatomyBySession:e,getAnatomy:n,getSections:t,setAnatomy:s}});function x(e){const n=Math.max(0,Math.min(1,e));if(n>=.7){const t=(n-.7)/.3;return`rgb(${Math.round(74*(1-t))}, 222, 128)`}else if(n>=.4){const t=(n-.4)/.3,s=Math.round(163+59*t);return`rgb(${Math.round(251-177*t)}, ${s}, ${Math.round(36+92*t)})`}else{const t=n/.4;return`rgb(248, ${Math.round(113*t)}, ${Math.round(113*t)})`}}function j(e,n){if(n<=0)return x(.5);const t=e/n,s=Math.max(0,Math.min(1,1-(t-.5)/2));return x(s)}const z={system:"#818cf8",user:"#a855f7",context:"#a78bfa",tools:"#fb923c",memory:"#4ade80",examples:"#fbbf24",instructions:"#f472b6",unknown:"#94a3b8"},D={start:"#4ade80",llm_call:"#a855f7",tool_call:"#fb923c",decision:"#a78bfa",output:"#4ade80",error:"#f87171"};function E(e){const n=k(),t=f(()=>n.getTokens(e.value)),s=f(()=>{const r=t.value;if(r.length===0)return{min:0,max:1,median:.5};const i=r.map(m=>m.confidence).sort((m,p)=>m-p);return{min:i[0],max:i[i.length-1],median:i[Math.floor(i.length/2)]}});function a(r){return x(r)}function o(r){return r>=.7?"high":r>=.4?"medium":"low"}return{tokens:t,confidenceRange:s,getColor:a,getConfidenceLabel:o}}const C={class:"rounded-lg border border-border-default bg-surface-raised p-4"},w={class:"text-xs font-medium text-text-muted uppercase tracking-wide"},_={class:"mt-1 flex items-baseline gap-1"},$={class:"text-2xl font-bold text-text-primary"},S={key:0,class:"text-sm text-text-secondary"},F=b({__name:"MetricCard",props:{label:{},value:{},unit:{},trend:{}},setup(e){return(n,t)=>(d(),l("div",C,[u("div",w,c(e.label),1),u("div",_,[u("span",$,c(e.value),1),e.unit?(d(),l("span",S,c(e.unit),1)):g("",!0)]),e.trend!==void 0?(d(),l("div",{key:0,class:h(["mt-1 text-xs",e.trend>=0?"text-success":"text-error"])},c(e.trend>=0?"↑":"↓")+" "+c(Math.abs(e.trend).toFixed(1))+"% ",3)):g("",!0)]))}}),T=["title"],B={key:0,class:"relative mr-1.5 flex h-2 w-2"},L=b({__name:"StatusBadge",props:{status:{},detail:{}},setup(e){const n=e,t=f(()=>["streaming","executing","running"].includes(n.status)),s=f(()=>({idle:"bg-surface-overlay text-text-muted",streaming:"bg-accent/20 text-accent",completed:"bg-success/20 text-success",error:"bg-error/20 text-error",cancelled:"bg-warning/20 text-warning",pending:"bg-surface-overlay text-text-muted",executing:"bg-accent/20 text-accent",failed:"bg-error/20 text-error",running:"bg-accent/20 text-accent",partial:"bg-warning/20 text-warning"})[n.status]??"bg-surface-overlay text-text-muted");return(a,o)=>(d(),l("span",{class:h(["relative inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",s.value]),title:e.detail},[t.value?(d(),l("span",B,[...o[0]||(o[0]=[u("span",{class:"absolute inline-flex h-full w-full rounded-full bg-current opacity-75",style:{animation:"ripple 1.5s ease-out infinite"}},null,-1),u("span",{class:"relative inline-flex h-2 w-2 rounded-full bg-current"},null,-1)])])):g("",!0),M(" "+c(e.status),1)],10,T))}});export{L as _,E as a,F as b,x as c,j as l,D as n,z as s,V as u};
1
+ import{d as v,r as y,a as f,b,e as l,f as u,t as c,i as g,g as h,j as d,h as M}from"./index-DVvWJgFn.js";import{a as k}from"./agent-store-tglPObkH.js";const V=v("prompt",()=>{const e=y(new Map);function n(a){return e.value.get(a)??null}function t(a){return e.value.get(a)?.sections??[]}function s(a,o){e.value.set(a,o)}return{anatomyBySession:e,getAnatomy:n,getSections:t,setAnatomy:s}});function x(e){const n=Math.max(0,Math.min(1,e));if(n>=.7){const t=(n-.7)/.3;return`rgb(${Math.round(74*(1-t))}, 222, 128)`}else if(n>=.4){const t=(n-.4)/.3,s=Math.round(163+59*t);return`rgb(${Math.round(251-177*t)}, ${s}, ${Math.round(36+92*t)})`}else{const t=n/.4;return`rgb(248, ${Math.round(113*t)}, ${Math.round(113*t)})`}}function j(e,n){if(n<=0)return x(.5);const t=e/n,s=Math.max(0,Math.min(1,1-(t-.5)/2));return x(s)}const z={system:"#818cf8",user:"#a855f7",context:"#a78bfa",tools:"#fb923c",memory:"#4ade80",examples:"#fbbf24",instructions:"#f472b6",unknown:"#94a3b8"},D={start:"#4ade80",llm_call:"#a855f7",tool_call:"#fb923c",decision:"#a78bfa",output:"#4ade80",error:"#f87171"};function E(e){const n=k(),t=f(()=>n.getTokens(e.value)),s=f(()=>{const r=t.value;if(r.length===0)return{min:0,max:1,median:.5};const i=r.map(m=>m.confidence).sort((m,p)=>m-p);return{min:i[0],max:i[i.length-1],median:i[Math.floor(i.length/2)]}});function a(r){return x(r)}function o(r){return r>=.7?"high":r>=.4?"medium":"low"}return{tokens:t,confidenceRange:s,getColor:a,getConfidenceLabel:o}}const C={class:"rounded-lg border border-border-default bg-surface-raised p-4"},w={class:"text-xs font-medium text-text-muted uppercase tracking-wide"},_={class:"mt-1 flex items-baseline gap-1"},$={class:"text-2xl font-bold text-text-primary"},S={key:0,class:"text-sm text-text-secondary"},F=b({__name:"MetricCard",props:{label:{},value:{},unit:{},trend:{}},setup(e){return(n,t)=>(d(),l("div",C,[u("div",w,c(e.label),1),u("div",_,[u("span",$,c(e.value),1),e.unit?(d(),l("span",S,c(e.unit),1)):g("",!0)]),e.trend!==void 0?(d(),l("div",{key:0,class:h(["mt-1 text-xs",e.trend>=0?"text-success":"text-error"])},c(e.trend>=0?"↑":"↓")+" "+c(Math.abs(e.trend).toFixed(1))+"% ",3)):g("",!0)]))}}),T=["title"],B={key:0,class:"relative me-1.5 flex h-2 w-2"},L=b({__name:"StatusBadge",props:{status:{},detail:{}},setup(e){const n=e,t=f(()=>["streaming","executing","running"].includes(n.status)),s=f(()=>({idle:"bg-surface-overlay text-text-muted",streaming:"bg-accent/20 text-accent",completed:"bg-success/20 text-success",error:"bg-error/20 text-error",cancelled:"bg-warning/20 text-warning",pending:"bg-surface-overlay text-text-muted",executing:"bg-accent/20 text-accent",failed:"bg-error/20 text-error",running:"bg-accent/20 text-accent",partial:"bg-warning/20 text-warning"})[n.status]??"bg-surface-overlay text-text-muted");return(a,o)=>(d(),l("span",{class:h(["relative inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",s.value]),title:e.detail},[t.value?(d(),l("span",B,[...o[0]||(o[0]=[u("span",{class:"absolute inline-flex h-full w-full rounded-full bg-current opacity-75",style:{animation:"ripple 1.5s ease-out infinite"}},null,-1),u("span",{class:"relative inline-flex h-2 w-2 rounded-full bg-current"},null,-1)])])):g("",!0),M(" "+c(e.status),1)],10,T))}});export{L as _,E as a,F as b,x as c,j as l,D as n,z as s,V as u};
@@ -1 +1 @@
1
- import{b as u}from"./format-BqVZ9rwM.js";import{b as x,e as s,f as n,t,h as v,u as i,i as m,F as b,k,l as f,g as h,a as d,j as l}from"./index-CgqXFXWk.js";const w={class:"space-y-1.5"},B={key:0,class:"flex items-center justify-between text-xs"},p={class:"text-text-secondary"},C={class:"text-text-muted"},S={class:"ml-1"},$={key:0,class:"flex h-full"},j=["title"],M={key:1,class:"flex items-center justify-between text-[10px] text-text-muted"},F=x({__name:"StorageGauge",props:{used:{},total:{},label:{},animating:{type:Boolean,default:!1},segments:{},compact:{type:Boolean,default:!1}},setup(e){const a=e,o=d(()=>a.total<=0?0:Math.min(Math.round(a.used/a.total*100),100)),y=d(()=>o.value>85?"bg-error":o.value>60?"bg-warning":"bg-success"),g=d(()=>!a.segments||a.total<=0?[]:a.segments.map(c=>({...c,width:Math.max(c.bytes/a.total*100,.5)})));return(c,N)=>(l(),s("div",w,[e.compact?m("",!0):(l(),s("div",B,[n("span",p,t(e.label??"Storage"),1),n("span",C,[v(t(i(u)(e.used))+" / "+t(i(u)(e.total))+" ",1),n("span",S,"("+t(o.value)+"%)",1)])])),n("div",{class:h(["h-2 rounded-full bg-surface-overlay overflow-hidden",{"animate-storage-pulse":e.animating}])},[e.segments&&e.segments.length>0?(l(),s("div",$,[(l(!0),s(b,null,k(g.value,r=>(l(),s("div",{key:r.name,class:"h-full transition-all duration-500 first:rounded-l-full last:rounded-r-full",style:f({width:`${r.width}%`,backgroundColor:r.color}),title:`${r.name}: ${i(u)(r.bytes)}`},null,12,j))),128))])):(l(),s("div",{key:1,class:h(["h-full rounded-full transition-all duration-500",y.value]),style:f({width:`${o.value}%`})},null,6))],2),e.compact?(l(),s("div",M,[n("span",null,t(e.label),1),n("span",null,t(i(u)(e.used))+" / "+t(i(u)(e.total))+" ("+t(o.value)+"%)",1)])):m("",!0)]))}});export{F as _};
1
+ import{b as u}from"./format-BqVZ9rwM.js";import{b as x,e as s,f as n,t,h as v,u as i,i as m,F as b,k,l as f,g as h,a as d,j as l}from"./index-DVvWJgFn.js";const w={class:"space-y-1.5"},B={key:0,class:"flex items-center justify-between text-xs"},p={class:"text-text-secondary"},C={class:"text-text-muted"},S={class:"ms-1"},$={key:0,class:"flex h-full"},j=["title"],M={key:1,class:"flex items-center justify-between text-[10px] text-text-muted"},F=x({__name:"StorageGauge",props:{used:{},total:{},label:{},animating:{type:Boolean,default:!1},segments:{},compact:{type:Boolean,default:!1}},setup(e){const a=e,o=d(()=>a.total<=0?0:Math.min(Math.round(a.used/a.total*100),100)),y=d(()=>o.value>85?"bg-error":o.value>60?"bg-warning":"bg-success"),g=d(()=>!a.segments||a.total<=0?[]:a.segments.map(c=>({...c,width:Math.max(c.bytes/a.total*100,.5)})));return(c,N)=>(l(),s("div",w,[e.compact?m("",!0):(l(),s("div",B,[n("span",p,t(e.label??"Storage"),1),n("span",C,[v(t(i(u)(e.used))+" / "+t(i(u)(e.total))+" ",1),n("span",S,"("+t(o.value)+"%)",1)])])),n("div",{class:h(["h-2 rounded-full bg-surface-overlay overflow-hidden",{"animate-storage-pulse":e.animating}])},[e.segments&&e.segments.length>0?(l(),s("div",$,[(l(!0),s(b,null,k(g.value,r=>(l(),s("div",{key:r.name,class:"h-full transition-all duration-500 first:rounded-s-full last:rounded-e-full",style:f({width:`${r.width}%`,backgroundColor:r.color}),title:`${r.name}: ${i(u)(r.bytes)}`},null,12,j))),128))])):(l(),s("div",{key:1,class:h(["h-full rounded-full transition-all duration-500",y.value]),style:f({width:`${o.value}%`})},null,6))],2),e.compact?(l(),s("div",M,[n("span",null,t(e.label),1),n("span",null,t(i(u)(e.used))+" / "+t(i(u)(e.total))+" ("+t(o.value)+"%)",1)])):m("",!0)]))}});export{F as _};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DVvWJgFn.js","assets/index-CCnJ2vPZ.css"])))=>i.map(i=>d[i]);
2
+ import{c as U,b as A,e as r,f as t,t as e,u as l,i as u,F as _,k as g,l as D,a as $,j as o,A as N,B as G,P as H,p as Q,h as p,g as k,q as V,r as B,o as P,_ as M}from"./index-DVvWJgFn.js";import{u as J}from"./metrics-store-oAZX_4PZ.js";import{b as m}from"./format-BqVZ9rwM.js";import{u as K}from"./storage-store-D4WuNdQB.js";import{_ as W}from"./StorageGauge.vue_vue_type_style_index_0_lang-CLdARZMv.js";const X=U("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);async function Y(){try{const x=await fetch("/__system-info");return x.ok?await x.json():null}catch{return null}}const Z={class:"rounded-lg border border-border-default bg-surface p-3 space-y-2.5"},tt={class:"flex items-center justify-between"},et={class:"flex items-center gap-2"},st={class:"text-sm"},at={class:"text-xs font-medium text-text-primary"},ot={class:"flex items-center gap-2"},rt={class:"text-[10px] font-medium text-text-secondary"},nt=["title"],lt={key:0,class:"h-1.5 rounded-full bg-surface-overlay overflow-hidden"},dt={class:"flex h-full"},it=["title"],ct={key:1,class:"h-1.5 rounded-full bg-surface-overlay"},ut={class:"flex items-center justify-between text-[10px] text-text-muted"},mt={key:2,class:"space-y-1"},xt={class:"flex-1 text-text-muted"},pt={class:"text-text-muted"},yt={class:"text-text-secondary w-14 text-end"},_t={key:3,class:"text-[10px] text-text-muted italic"},ht=A({__name:"StorageBreakdownCard",props:{database:{}},emits:["clear"],setup(x,{emit:S}){const v=x,c=S,h=["#8b5cf6","#06b6d4","#f59e0b","#10b981","#f43f5e"],E=$(()=>v.database.stores.filter(y=>y.bytes>0).map((y,f)=>({name:y.name,bytes:y.bytes,color:h[f%h.length]})));return(y,f)=>(o(),r("div",Z,[t("div",tt,[t("div",et,[t("span",st,e(x.database.icon),1),t("span",at,e(x.database.label),1)]),t("div",ot,[t("span",rt,e(l(m)(x.database.totalBytes)),1),x.database.totalBytes>0?(o(),r("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:y.$t("system.browserStorage.clearAll"),onClick:f[0]||(f[0]=i=>c("clear",x.database.id))},e(y.$t("common.actions.clear")),9,nt)):u("",!0)])]),x.database.totalBytes>0?(o(),r("div",lt,[t("div",dt,[(o(!0),r(_,null,g(E.value,i=>(o(),r("div",{key:i.name,class:"h-full transition-all duration-500 first:rounded-s-full last:rounded-e-full",style:D({width:`${i.bytes/x.database.totalBytes*100}%`,backgroundColor:i.color}),title:`${i.name}: ${l(m)(i.bytes)}`},null,12,it))),128))])])):(o(),r("div",ct)),t("div",ut,[t("span",null,e(x.database.recordCount.toLocaleString())+" records",1),t("span",null,e(x.database.type==="indexeddb"?"IndexedDB":"External"),1)]),x.database.stores.some(i=>i.count>0)?(o(),r("div",mt,[(o(!0),r(_,null,g(x.database.stores.filter(i=>i.count>0),(i,d)=>(o(),r("div",{key:i.name,class:"flex items-center gap-2 text-[10px]"},[t("span",{class:"h-2 w-2 shrink-0 rounded-full",style:D({backgroundColor:h[d%h.length]})},null,4),t("span",xt,e(i.name),1),t("span",pt,e(i.count),1),t("span",yt,e(l(m)(i.bytes)),1)]))),128))])):(o(),r("p",_t,e(y.$t("system.browserStorage.empty")),1))]))}}),ft={class:"max-w-4xl space-y-6"},vt={class:"flex items-center justify-between"},gt={class:"text-lg font-semibold text-text-primary"},bt={class:"text-xs text-text-muted mt-0.5"},$t={key:0,class:"flex flex-col items-center justify-center py-16 gap-4"},wt={class:"text-sm text-text-secondary"},Bt={class:"text-[10px] text-text-muted"},kt={key:1,class:"rounded-lg border border-border-default bg-surface-raised p-4 text-xs text-text-muted"},Mt={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},St={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},zt={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ct={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Dt={class:"text-text-muted"},Et={class:"text-text-primary"},It={class:"text-text-muted"},Lt={class:"text-text-primary"},Rt={class:"text-text-muted"},Tt={class:"text-text-primary"},Vt={class:"text-text-muted"},Pt={class:"text-text-primary"},At={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Ot={class:"text-sm font-medium text-text-primary flex items-center gap-2"},jt={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Ft={class:"text-text-muted"},qt={class:"text-text-primary"},Ut={class:"text-text-muted"},Nt={class:"text-text-primary"},Gt={class:"text-text-muted"},Ht={class:"text-text-primary"},Qt={class:"text-text-muted"},Jt={class:"text-text-primary"},Kt={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Wt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Xt={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Yt={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Zt={class:"text-text-muted"},te={class:"text-text-primary"},ee={class:"text-text-muted"},se={class:"text-text-primary"},ae={class:"text-text-muted"},oe={class:"text-text-primary"},re={class:"text-text-muted"},ne={class:"text-text-primary"},le={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},de={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ie={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},ce={class:"text-text-muted"},ue={class:"text-text-primary"},me={class:"text-text-muted"},xe={class:"text-text-primary"},pe={class:"text-text-muted"},ye={class:"text-text-primary"},_e={class:"h-2 rounded-full bg-surface-overlay overflow-hidden"},he={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},fe={class:"text-sm font-medium text-text-primary flex items-center gap-2"},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"},Be={class:"text-text-primary"},ke={key:1,class:"col-span-2 border-b border-border-default/50 my-1"},Me={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Se={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ze={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Ce={class:"text-text-muted"},De={class:"text-text-primary"},Ee={class:"text-text-muted"},Ie={class:"text-text-primary"},Le={class:"text-text-muted"},Re={class:"text-text-primary"},Te={class:"text-text-muted"},Ve={class:"text-text-primary"},Pe={class:"h-2 rounded-full bg-surface-overlay overflow-hidden"},Ae={key:0,class:"border-b border-border-default/50"},Oe={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},je={class:"flex items-center justify-between"},Fe={class:"text-sm font-medium text-text-primary flex items-center gap-2"},qe={class:"flex items-center gap-2"},Ue={key:2,class:"text-[10px] text-text-muted"},Ne={key:1,class:"grid grid-cols-1 md:grid-cols-2 gap-3"},Ge={key:2,class:"text-[9px] text-text-muted"},He={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Qe={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Je={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ke={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},We={class:"text-text-muted"},Xe={class:"flex items-center gap-1.5"},Ye={class:"text-text-muted"},Ze={class:"text-text-primary"},ts={class:"text-text-muted"},es={class:"text-text-primary"},ss={class:"text-text-muted"},as={class:"text-text-primary"},os={class:"text-text-muted"},rs={class:"text-text-primary"},ns={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"},ds={class:"text-[10px] text-text-muted font-normal"},is={key:0,class:"text-xs text-text-muted py-2"},cs={key:1,class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},us={class:"text-text-muted"},ms={class:"text-text-primary font-medium"},xs={class:"text-text-muted"},ps={class:"text-accent font-medium"},ys={class:"text-text-muted"},_s={class:"text-text-primary font-medium"},hs={class:"text-text-muted"},fs={class:"text-text-primary font-medium"},vs={key:2,class:"flex flex-wrap gap-1.5 pt-1"},gs={class:"text-[10px] text-text-muted me-1"},bs={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},$s={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ws={key:0,class:"text-xs text-text-muted py-2"},Bs={key:1,class:"space-y-2"},ks={class:"flex gap-4 text-xs text-text-secondary"},Ms={key:0},Ss={class:"text-accent font-medium"},zs={key:1},Cs={class:"text-text-primary font-medium"},Ds={class:"text-text-primary font-medium"},Es={class:"flex-1 min-w-0"},Is={class:"text-sm font-medium text-text-primary truncate"},Ls={class:"text-xs text-text-muted"},Rs={class:"text-end text-xs space-y-0.5 shrink-0"},Ts={key:0},Vs={class:"text-text-muted"},Ps={class:"ms-1.5 text-accent font-medium"},As={key:1},Os={class:"text-text-muted"},js={class:"ms-1.5 text-text-primary font-medium"},Fs={class:"text-text-muted"},qs={class:"ms-1.5 text-text-secondary"},Us=["title"],Ns={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Gs={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Hs={key:0,class:"text-xs text-text-muted py-2"},Qs={key:1,class:"overflow-x-auto"},Js={class:"w-full text-xs"},Ks={class:"border-b border-border-default text-text-muted"},Ws={class:"text-start py-1.5 pe-4 font-medium"},Xs={class:"text-start py-1.5 pe-4 font-medium"},Ys={class:"text-start py-1.5 pe-4 font-medium"},Zs={class:"text-start py-1.5 pe-4 font-medium"},ta={class:"text-end py-1.5 font-medium"},ea={class:"py-1.5 pe-4 text-text-primary font-medium"},sa={class:"py-1.5 pe-4 text-text-secondary"},aa={class:"py-1.5 pe-4 text-text-secondary"},oa={class:"py-1.5 pe-4 text-text-secondary"},ra={class:"py-1.5 text-end text-text-secondary"},ua=A({__name:"SystemPage",setup(x){const S=J(),v=N(),c=K(),h=B(null);async function E(s){if(h.value===s){const n={rag:()=>M(()=>import("./vector-db-ChAzHl5A.js"),[]).then(a=>a.vectorDB.clear()),conversations:()=>M(()=>import("./index-DVvWJgFn.js").then(a=>a.aq),__vite__mapDeps([0,1])).then(a=>a.conversationDB.clear()),benchmarks:()=>M(()=>import("./benchmark-db-D8D5Wf9h.js"),[]).then(a=>a.benchmarkDB.clear()),"message-memory":()=>M(()=>import("./message-memory-db-C3Ifhs2B.js"),[]).then(a=>a.messageMemoryDB.clear()),"canvas-ai":()=>M(()=>import("./canvas-ai-db-BolM-_G7.js"),[]).then(a=>a.canvasAiDB.clear())};try{await n[s]?.(),await c.refresh()}catch(a){console.error(`Failed to clear database ${s}:`,a)}h.value=null}else h.value=s,setTimeout(()=>{h.value===s&&(h.value=null)},3e3)}const y=B(null),f=B(!1),i=B([]),d=B(null),z=B(!0),O=$(()=>v.models.reduce((s,n)=>s+n.size,0)),I=$(()=>i.value.reduce((s,n)=>s+n.size_vram,0)),L=$(()=>i.value.reduce((s,n)=>s+(n.size-n.size_vram),0)),b=$(()=>S.aggregate),j=$(()=>{if(!d.value)return"";const s=d.value.cpu.maxClockMhz;return s>=1e3?`${(s/1e3).toFixed(2)} GHz`:`${s} MHz`}),C=$(()=>{if(!d.value)return 0;const{totalBytes:s,freeBytes:n}=d.value.memory;return s>0?Math.round((s-n)/s*100):0});let R=null;async function F(){try{y.value=await P.version(),f.value=!0}catch{f.value=!1,y.value=null}try{i.value=await P.ps()}catch{i.value=[]}}async function T(){await Promise.all([F(),Y().then(s=>{s&&(d.value=s)}),c.refreshIfStale(3e4)])}function q(s){const n=new Date(s).getTime()-Date.now();if(n<=0)return"expiring...";const a=Math.floor(n/6e4);return a<1?"< 1 min":a<60?`${a} min`:`${Math.floor(a/60)}h ${a%60}m`}return G(async()=>{z.value=!0,await T(),z.value=!1,v.models.length===0&&await v.fetchModels(),S.recalculateAggregate(),R=setInterval(T,5e3)}),H(()=>{R&&clearInterval(R)}),(s,n)=>(o(),r("div",ft,[t("div",vt,[t("div",null,[t("h2",gt,e(s.$t("system.title")),1),t("p",bt,e(s.$t("system.subtitle")),1)]),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:T},e(s.$t("system.refresh")),1)]),z.value&&!d.value?(o(),r("div",$t,[Q(l(X),{class:"h-10 w-10 animate-spin text-accent"}),t("p",wt,e(s.$t("system.detecting")),1),t("p",Bt,e(s.$t("system.detectingDetail")),1)])):u("",!0),!z.value&&!d.value?(o(),r("div",kt,e(s.$t("system.unavailable")),1)):u("",!0),d.value?(o(),r(_,{key:2},[t("div",Mt,[t("div",St,[t("h3",zt,[n[1]||(n[1]=t("span",{class:"text-base"},"🖥",-1)),p(" "+e(s.$t("system.os.title")),1)]),t("div",Ct,[t("span",Dt,e(s.$t("system.os.os")),1),t("span",Et,e(d.value.os.name),1),t("span",It,e(s.$t("system.os.version")),1),t("span",Lt,e(d.value.os.version),1),t("span",Rt,e(s.$t("system.os.build")),1),t("span",Tt,e(d.value.os.build||"—"),1),t("span",Vt,e(s.$t("system.os.architecture")),1),t("span",Pt,e(d.value.os.arch),1)])]),t("div",At,[t("h3",Ot,[n[2]||(n[2]=t("span",{class:"text-base"},"💻",-1)),p(" "+e(s.$t("system.device.title")),1)]),t("div",jt,[t("span",Ft,e(s.$t("system.device.name")),1),t("span",qt,e(d.value.device.name),1),t("span",Ut,e(s.$t("system.device.manufacturer")),1),t("span",Nt,e(d.value.device.manufacturer||"—"),1),t("span",Gt,e(s.$t("system.device.model")),1),t("span",Ht,e(d.value.device.model||"—"),1),d.value.device.family?(o(),r(_,{key:0},[t("span",Qt,e(s.$t("system.device.family")),1),t("span",Jt,e(d.value.device.family),1)],64)):u("",!0)])])]),t("div",Kt,[t("div",Wt,[t("h3",Xt,[n[3]||(n[3]=t("span",{class:"text-base"},"⚙",-1)),p(" "+e(s.$t("system.cpu.title")),1)]),t("div",Yt,[t("span",Zt,e(s.$t("system.cpu.cpu")),1),t("span",te,e(d.value.cpu.name),1),t("span",ee,e(s.$t("system.cpu.physicalCores")),1),t("span",se,e(d.value.cpu.cores),1),t("span",ae,e(s.$t("system.cpu.logicalProcessors")),1),t("span",oe,e(d.value.cpu.logicalProcessors),1),t("span",re,e(s.$t("system.cpu.maxClock")),1),t("span",ne,e(j.value),1)])]),t("div",le,[t("h3",de,[n[4]||(n[4]=t("span",{class:"text-base"},"🧠",-1)),p(" "+e(s.$t("system.memory.title")),1)]),t("div",ie,[t("span",ce,e(s.$t("system.memory.totalRam")),1),t("span",ue,e(l(m)(d.value.memory.totalBytes)),1),t("span",me,e(s.$t("system.memory.available")),1),t("span",xe,e(l(m)(d.value.memory.freeBytes)),1),t("span",pe,e(s.$t("system.memory.inUse")),1),t("span",ye,e(l(m)(d.value.memory.totalBytes-d.value.memory.freeBytes))+" ("+e(C.value)+"%)",1)]),t("div",_e,[t("div",{class:k(["h-full rounded-full transition-all duration-500",C.value>85?"bg-error":C.value>60?"bg-warning":"bg-success"]),style:D({width:`${C.value}%`})},null,6)])])]),t("div",he,[t("h3",fe,[n[5]||(n[5]=t("span",{class:"text-base"},"🎮",-1)),p(" "+e(s.$t("system.gpu.title")),1)]),(o(!0),r(_,null,g(d.value.gpu,(a,w)=>(o(),r("div",{key:w,class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},[t("span",ve,e(s.$t("system.gpu.gpu"))+" "+e(d.value.gpu.length>1?w+1:""),1),t("span",ge,e(a.name),1),t("span",be,e(s.$t("system.gpu.adapterRam")),1),t("span",$e,e(a.adapterRamBytes>0?l(m)(a.adapterRamBytes):s.$t("system.gpu.sharedNotReported")),1),a.driverVersion?(o(),r(_,{key:0},[t("span",we,e(s.$t("system.gpu.driver")),1),t("span",Be,e(a.driverVersion),1)],64)):u("",!0),w<d.value.gpu.length-1?(o(),r("div",ke)):u("",!0)]))),128))]),t("div",Me,[t("h3",Se,[n[6]||(n[6]=t("span",{class:"text-base"},"💾",-1)),p(" "+e(s.$t("system.storage.title")),1)]),(o(!0),r(_,null,g(d.value.storage,(a,w)=>(o(),r("div",{key:w,class:"space-y-2"},[t("div",ze,[t("span",Ce,e(s.$t("system.storage.drive")),1),t("span",De,e(a.drive),1),t("span",Ee,e(s.$t("system.storage.total")),1),t("span",Ie,e(l(m)(a.totalBytes)),1),t("span",Le,e(s.$t("system.storage.free")),1),t("span",Re,e(l(m)(a.freeBytes)),1),t("span",Te,e(s.$t("system.storage.used")),1),t("span",Ve,e(l(m)(a.totalBytes-a.freeBytes))+" ("+e(a.totalBytes>0?Math.round((a.totalBytes-a.freeBytes)/a.totalBytes*100):0)+"%) ",1)]),t("div",Pe,[t("div",{class:k(["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:D({width:`${a.totalBytes>0?(a.totalBytes-a.freeBytes)/a.totalBytes*100:0}%`})},null,6)]),w<d.value.storage.length-1?(o(),r("div",Ae)):u("",!0)]))),128))])],64)):u("",!0),t("div",Oe,[t("div",je,[t("h3",Fe,[n[7]||(n[7]=t("span",{class:"text-base"},"📀",-1)),p(" "+e(s.$t("system.browserStorage.title")),1)]),t("div",qe,[l(c).origin?(o(),r("span",{key:0,class:k(["rounded-full px-2 py-0.5 text-[9px]",l(c).origin.persisted?"bg-success/10 text-success":"bg-warning/10 text-warning"])},e(l(c).origin.persisted?s.$t("system.browserStorage.persistent"):s.$t("system.browserStorage.bestEffort")),3)):u("",!0),l(c).loading?(o(),r("span",Ue,e(s.$t("system.browserStorage.scanning")),1)):(o(),r("button",{key:1,class:"text-[10px] text-text-muted hover:text-text-primary transition-colors",onClick:n[0]||(n[0]=a=>l(c).refresh())},e(s.$t("system.refresh")),1))])]),l(c).origin?(o(),V(W,{key:0,used:l(c).origin.usage,total:l(c).origin.quota,label:s.$t("system.browserStorage.indexedDbQuota")},null,8,["used","total","label"])):u("",!0),l(c).databases.length>0?(o(),r("div",Ne,[(o(!0),r(_,null,g(l(c).databases,a=>(o(),V(ht,{key:a.id,database:a,onClear:E},null,8,["database"]))),128))])):u("",!0),l(c).databases.length>0?(o(),r("p",Ge,e(s.$t("system.browserStorage.totalRecords",{count:l(c).totalRecordCount.toLocaleString(),databases:l(c).databases.length})),1)):u("",!0)]),t("div",He,[t("div",Qe,[t("h3",Je,[n[8]||(n[8]=t("span",{class:"text-base"},"⚡",-1)),p(" "+e(s.$t("system.ollama.title")),1)]),t("div",Ke,[t("span",We,e(s.$t("system.ollama.status")),1),t("span",Xe,[t("span",{class:k(["inline-block h-2 w-2 rounded-full",f.value?"bg-success":"bg-error"])},null,2),t("span",{class:k(f.value?"text-success":"text-error")},e(f.value?s.$t("common.status.connected"):s.$t("common.status.disconnected")),3)]),t("span",Ye,e(s.$t("system.ollama.version")),1),t("span",Ze,e(y.value??"—"),1),t("span",ts,e(s.$t("system.ollama.installedModels")),1),t("span",es,e(l(v).models.length),1),t("span",ss,e(s.$t("system.ollama.totalModelStorage")),1),t("span",as,e(l(m)(O.value)),1),t("span",os,e(s.$t("system.ollama.modelsLoaded")),1),t("span",rs,e(i.value.length),1)])]),t("div",ns,[t("h3",ls,[n[9]||(n[9]=t("span",{class:"text-base"},"📊",-1)),p(" "+e(s.$t("system.inference.title"))+" ",1),t("span",ds,"("+e(s.$t("system.inference.thisSession"))+")",1)]),b.value.totalSessions===0?(o(),r("div",is,e(s.$t("system.inference.noSessions")),1)):(o(),r("div",cs,[t("span",us,e(s.$t("system.inference.sessions")),1),t("span",ms,e(b.value.totalSessions),1),t("span",xs,e(s.$t("system.inference.avgSpeed")),1),t("span",ps,e(b.value.avgTps.toFixed(1))+" tok/s",1),t("span",ys,e(s.$t("system.inference.tokensGenerated")),1),t("span",_s,e(b.value.totalTokensGenerated.toLocaleString()),1),t("span",hs,e(s.$t("system.inference.avgTtft")),1),t("span",fs,e(b.value.avgTtftMs.toFixed(0))+" ms",1)])),b.value.modelsUsed.length>0?(o(),r("div",vs,[t("span",gs,e(s.$t("system.inference.modelsUsed"))+":",1),(o(!0),r(_,null,g(b.value.modelsUsed,a=>(o(),r("span",{key:a,class:"rounded-full bg-surface-overlay px-2 py-0.5 text-[10px] text-text-secondary"},e(a),1))),128))])):u("",!0)])]),t("div",bs,[t("h3",$s,[n[10]||(n[10]=t("span",{class:"text-base"},"⚡",-1)),p(" "+e(s.$t("system.activeModels.title")),1)]),i.value.length===0?(o(),r("div",ws,e(s.$t("system.activeModels.noModels")),1)):(o(),r("div",Bs,[t("div",ks,[I.value>0?(o(),r("span",Ms,[p(e(s.$t("system.activeModels.vram"))+": ",1),t("span",Ss,e(l(m)(I.value)),1)])):u("",!0),L.value>0?(o(),r("span",zs,[p(e(s.$t("system.activeModels.ram"))+": ",1),t("span",Cs,e(l(m)(L.value)),1)])):u("",!0),t("span",null,[p(e(s.$t("system.activeModels.total"))+": ",1),t("span",Ds,e(l(m)(I.value+L.value)),1)])]),(o(!0),r(_,null,g(i.value,a=>(o(),r("div",{key:a.digest,class:"flex items-center gap-4 rounded-lg bg-surface px-4 py-3 border border-border-default"},[t("div",Es,[t("p",Is,e(a.name),1),t("p",Ls,e(a.details.parameter_size)+" · "+e(a.details.quantization_level)+" · "+e(a.details.family),1)]),t("div",Rs,[a.size_vram>0?(o(),r("p",Ts,[t("span",Vs,e(s.$t("system.activeModels.vram")),1),t("span",Ps,e(l(m)(a.size_vram)),1)])):u("",!0),a.size-a.size_vram>0?(o(),r("p",As,[t("span",Os,e(s.$t("system.activeModels.ram")),1),t("span",js,e(l(m)(a.size-a.size_vram)),1)])):u("",!0),t("p",null,[t("span",Fs,e(s.$t("system.activeModels.ctx")),1),t("span",qs,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(q(a.expires_at)),9,Us)]))),128))]))]),t("div",Ns,[t("h3",Gs,[n[11]||(n[11]=t("span",{class:"text-base"},"📦",-1)),p(" "+e(s.$t("system.installedModels.title")),1)]),l(v).models.length===0?(o(),r("div",Hs,e(s.$t("system.installedModels.noModels")),1)):(o(),r("div",Qs,[t("table",Js,[t("thead",null,[t("tr",Ks,[t("th",Ws,e(s.$t("system.installedModels.model")),1),t("th",Xs,e(s.$t("system.installedModels.family")),1),t("th",Ys,e(s.$t("system.installedModels.parameters")),1),t("th",Zs,e(s.$t("system.installedModels.quantization")),1),t("th",ta,e(s.$t("system.installedModels.size")),1)])]),t("tbody",null,[(o(!0),r(_,null,g(l(v).models,a=>(o(),r("tr",{key:a.name,class:"border-b border-border-default/50"},[t("td",ea,e(a.name),1),t("td",sa,e(a.details.family),1),t("td",aa,e(a.details.parameter_size),1),t("td",oa,e(a.details.quantization_level),1),t("td",ra,e(l(m)(a.size)),1)]))),128))])])]))])]))}});export{ua 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-CgqXFXWk.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-DVvWJgFn.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-Do1APUFY.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-CgqXFXWk.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:"ml-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-D24kGmB6.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-DVvWJgFn.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,4 +1,4 @@
1
- import{Z as xO,w as Ge,b as ot,$ as bO,P as YP,e as be,p as xt,s as Ki,a0 as wt,u as Se,B as fn,j as ve,g as bt,a1 as GP,m as lt,r as ze,a as Qe,a2 as Fs,a3 as SO,a4 as cr,a5 as pu,a6 as HP,f as pe,F as mt,k as Jt,l as hi,y as vi,a7 as jd,a8 as JP,q as Ct,i as Re,V as Mi,t as Te,a9 as KP,aa as Zd,ab as eT,ac as tT,ad as Xr,U as ut,ae as nt,af as io,ag as iT,ah as wO,ai as Vd,aj as Mu,K as wr,h as nT,ak as rT,al as sT,d as aT,A as PO,o as Tc,n as oT,R as lT,v as Yi,C as Vn,D as ia,G as uT,Q as cT,am as ig,z as hT,T as fT}from"./index-CgqXFXWk.js";import{u as Ud}from"./tool-workshop-store-XDULj1FM.js";import{a as dT,u as pT}from"./toolcall-store-CFB1O-_8.js";import{g as TO}from"./_commonjsHelpers-DsqdWQfm.js";import{canvasAiDB as qd}from"./canvas-ai-db-BolM-_G7.js";import{J as ng,a as mT,g as gT,b as yT}from"./JsonTreeNode-BvAGKM9G.js";import{D as vT}from"./base-CrPFMexR.js";import{_ as CO}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{T as OT}from"./trash-2-BLyRKRSt.js";class xT extends vT{constructor(){super(...arguments),this.tokenize=wT}equals(e,i,n){return n.ignoreWhitespace?((!n.newlineIsToken||!e.includes(`
1
+ import{Z as xO,w as Ge,b as ot,$ as bO,P as YP,e as be,p as xt,s as Ki,a0 as wt,u as Se,B as fn,j as ve,g as bt,a1 as GP,m as lt,r as ze,a as Qe,a2 as Fs,a3 as SO,a4 as cr,a5 as pu,a6 as HP,f as pe,F as mt,k as Jt,l as hi,y as vi,a7 as jd,a8 as JP,q as Ct,i as Re,V as Mi,t as Te,a9 as KP,aa as Zd,ab as eT,ac as tT,ad as Xr,U as ut,ae as nt,af as io,ag as iT,ah as wO,ai as Vd,aj as Mu,K as wr,h as nT,ak as rT,al as sT,d as aT,A as PO,o as Tc,n as oT,R as lT,v as Yi,C as Vn,D as ia,G as uT,Q as cT,am as ig,z as hT,T as fT}from"./index-DVvWJgFn.js";import{u as Ud}from"./tool-workshop-store-Dz7QH2FM.js";import{a as dT,u as pT}from"./toolcall-store-BFoy2Mdx.js";import{g as TO}from"./_commonjsHelpers-DsqdWQfm.js";import{canvasAiDB as qd}from"./canvas-ai-db-BolM-_G7.js";import{J as ng,a as mT,g as gT,b as yT}from"./JsonTreeNode-DckR4Nv8.js";import{D as vT}from"./base-CrPFMexR.js";import{_ as CO}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{T as OT}from"./trash-2-CbznmmWI.js";class xT extends vT{constructor(){super(...arguments),this.tokenize=wT}equals(e,i,n){return n.ignoreWhitespace?((!n.newlineIsToken||!e.includes(`
2
2
  `))&&(e=e.trim()),(!n.newlineIsToken||!i.includes(`
3
3
  `))&&(i=i.trim())):n.ignoreNewlineAtEof&&!n.newlineIsToken&&(e.endsWith(`
4
4
  `)&&(e=e.slice(0,-1)),i.endsWith(`
@@ -212,7 +212,7 @@ Respond with JSON: {"fixedCode": "<corrected function body>", "explanation": "<w
212
212
  constructor(\${params}) {
213
213
  \${}
214
214
  }
215
- }`,{label:"class",detail:"definition",type:"keyword"}),ii('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),ii('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],y8=rP.concat([ii("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),ii("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),ii("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),fO=new PB,sP=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function va(t){return(e,i)=>{let n=e.node.getChild("VariableDefinition");return n&&i(n,t),!0}}const v8=["FunctionDeclaration"],O8={FunctionDeclaration:va("function"),ClassDeclaration:va("class"),ClassExpression:()=>!0,EnumDeclaration:va("constant"),TypeAliasDeclaration:va("type"),NamespaceDeclaration:va("namespace"),VariableDefinition(t,e){t.matchContext(v8)||e(t,"variable")},TypeDefinition(t,e){e(t,"type")},__proto__:null};function aP(t,e){let i=fO.get(e);if(i)return i;let n=[],r=!0;function s(a,l){let u=t.sliceString(a.from,a.to);n.push({label:u,type:l})}return e.cursor(Pt.IncludeAnonymous).iterate(a=>{if(r)r=!1;else if(a.name){let l=O8[a.name];if(l&&l(a,s)||sP.has(a.name))return!1}else if(a.to-a.from>8192){for(let l of aP(t,a.node))n.push(l);return!1}}),fO.set(e,n),n}const dO=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,oP=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function x8(t){let e=Qt(t.state).resolveInner(t.pos,-1);if(oP.indexOf(e.name)>-1)return null;let i=e.name=="VariableName"||e.to-e.from<20&&dO.test(t.state.sliceDoc(e.from,e.to));if(!i&&!t.explicit)return null;let n=[];for(let r=e;r;r=r.parent)sP.has(r.name)&&(n=n.concat(aP(t.state.doc,r)));return{options:n,from:i?e.from:t.pos,validFor:dO}}const zr=zo.define({name:"javascript",parser:g8.configure({props:[Zp.add({IfStatement:mo({except:/^\s*({|else\b)/}),TryStatement:mo({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:ZB,SwitchBody:t=>{let e=t.textAfter,i=/^\s*\}/.test(e),n=/^\s*(case|default)\b/.test(e);return t.baseIndent+(i?0:n?1:2)*t.unit},Block:jB({closing:"}"}),ArrowFunction:t=>t.baseIndent+t.unit,"TemplateString BlockComment":()=>null,"Statement Property":mo({except:/^\s*{/}),JSXElement(t){let e=/^\s*<\//.test(t.textAfter);return t.lineIndent(t.node.from)+(e?0:t.unit)},JSXEscape(t){let e=/\s*\}/.test(t.textAfter);return t.lineIndent(t.node.from)+(e?0:t.unit)},"JSXOpenTag JSXSelfClosingTag"(t){return t.column(t.node.from)+t.unit}}),Up.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":FS,BlockComment(t){return{from:t.from+2,to:t.to-2}},JSXElement(t){let e=t.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let i=t.lastChild;return{from:e.to,to:i.type.isError?t.to:i.from}},"JSXSelfClosingTag JSXOpenTag"(t){var e;let i=(e=t.firstChild)===null||e===void 0?void 0:e.nextSibling,n=t.lastChild;return!i||i.type.isError?null:{from:i.to,to:n.type.isError?t.to:n.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),lP={test:t=>/^JSX/.test(t.name),facet:MS({commentTokens:{block:{open:"{/*",close:"*/}"}}})},b8=zr.configure({dialect:"ts"},"typescript"),S8=zr.configure({dialect:"jsx",props:[Xp.add(t=>t.isTop?[lP]:void 0)]}),w8=zr.configure({dialect:"jsx ts",props:[Xp.add(t=>t.isTop?[lP]:void 0)]},"typescript");let uP=t=>({label:t,type:"keyword"});const cP="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(uP),P8=cP.concat(["declare","implements","private","protected","public"].map(uP));function T8(t={}){let e=t.jsx?t.typescript?w8:S8:t.typescript?b8:zr,i=t.typescript?y8.concat(P8):rP.concat(cP);return new LS(e,[zr.data.of({autocomplete:f4(oP,zw(i))}),zr.data.of({autocomplete:x8}),t.jsx?E8:[]])}function C8(t){for(;;){if(t.name=="JSXOpenTag"||t.name=="JSXSelfClosingTag"||t.name=="JSXFragmentTag")return t;if(t.name=="JSXEscape"||!t.parent)return null;t=t.parent}}function pO(t,e,i=t.length){for(let n=e?.firstChild;n;n=n.nextSibling)if(n.name=="JSXIdentifier"||n.name=="JSXBuiltin"||n.name=="JSXNamespacedName"||n.name=="JSXMemberExpression")return t.sliceString(n.from,Math.min(n.to,i));return""}const k8=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),E8=_e.inputHandler.of((t,e,i,n,r)=>{if((k8?t.composing:t.compositionStarted)||t.state.readOnly||e!=i||n!=">"&&n!="/"||!zr.isActiveAt(t.state,e,-1))return!1;let s=r(),{state:a}=s,l=a.changeByRange(u=>{var h;let{head:c}=u,p=Qt(a).resolveInner(c-1,-1),v;if(p.name=="JSXStartTag"&&(p=p.parent),!(a.doc.sliceString(c-1,c)!=n||p.name=="JSXAttributeValue"&&p.to>c)){if(n==">"&&p.name=="JSXFragmentTag")return{range:u,changes:{from:c,insert:"</>"}};if(n=="/"&&p.name=="JSXStartCloseTag"){let g=p.parent,b=g.parent;if(b&&g.from==c-2&&((v=pO(a.doc,b.firstChild,c))||((h=b.firstChild)===null||h===void 0?void 0:h.name)=="JSXFragmentTag")){let m=`${v}>`;return{range:Oe.cursor(c+m.length,-1),changes:{from:c,insert:m}}}}else if(n==">"){let g=C8(p);if(g&&g.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(a.doc.sliceString(c,c+2))&&(v=pO(a.doc,g,c)))return{range:u,changes:{from:c,insert:`</${v}>`}}}}return{range:u}});return l.changes.empty?!1:(t.dispatch([s,a.update(l,{userEvent:"input.complete",scrollIntoView:!0})]),!0)}),A8=zp({String:ne.string,Number:ne.number,"True False":ne.bool,PropertyName:ne.propertyName,Null:ne.null,", :":ne.separator,"[ ]":ne.squareBracket,"{ }":ne.brace}),D8=Yo.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O",goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"⚠ JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array",maxTerm:25,nodeProps:[["isolate",-2,6,11,""],["openedBy",7,"{",14,"["],["closedBy",8,"}",15,"]"]],propSources:[A8],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0}),_8=zo.define({name:"json",parser:D8.configure({props:[Zp.add({Object:mo({except:/^\s*\}/}),Array:mo({except:/^\s*\]/})}),Up.add({"Object Array":FS})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function I8(){return new LS(_8)}const N8="#e5c07b",mO="#e06c75",M8="#56b6c2",$8="#ffffff",Nu="#abb2bf",Xd="#7d8799",L8="#61afef",B8="#98c379",gO="#d19a66",Q8="#c678dd",F8="#21252b",yO="#2c313a",vO="#282c34",Of="#353a42",R8="#3E4451",OO="#528bff",z8=_e.theme({"&":{color:Nu,backgroundColor:vO},".cm-content":{caretColor:OO},".cm-cursor, .cm-dropCursor":{borderLeftColor:OO},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:R8},".cm-panels":{backgroundColor:F8,color:Nu},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:vO,color:Xd,border:"none"},".cm-activeLineGutter":{backgroundColor:yO},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:Of},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:Of,borderBottomColor:Of},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:yO,color:Nu}}},{dark:!0}),X8=cl.define([{tag:ne.keyword,color:Q8},{tag:[ne.name,ne.deleted,ne.character,ne.propertyName,ne.macroName],color:mO},{tag:[ne.function(ne.variableName),ne.labelName],color:L8},{tag:[ne.color,ne.constant(ne.name),ne.standard(ne.name)],color:gO},{tag:[ne.definition(ne.name),ne.separator],color:Nu},{tag:[ne.typeName,ne.className,ne.number,ne.changed,ne.annotation,ne.modifier,ne.self,ne.namespace],color:N8},{tag:[ne.operator,ne.operatorKeyword,ne.url,ne.escape,ne.regexp,ne.link,ne.special(ne.string)],color:M8},{tag:[ne.meta,ne.comment],color:Xd},{tag:ne.strong,fontWeight:"bold"},{tag:ne.emphasis,fontStyle:"italic"},{tag:ne.strikethrough,textDecoration:"line-through"},{tag:ne.link,color:Xd,textDecoration:"underline"},{tag:ne.heading,fontWeight:"bold",color:mO},{tag:[ne.atom,ne.bool,ne.special(ne.variableName)],color:gO},{tag:[ne.processingInstruction,ne.string,ne.inserted],color:B8},{tag:ne.invalid,color:$8}]),j8=[z8,WS(X8)],go=ot({__name:"CodeEditor",props:{modelValue:{},language:{default:"typescript"},readonly:{type:Boolean,default:!1},placeholder:{default:""},minHeight:{default:"100px"}},emits:["update:modelValue"],setup(t,{emit:e}){const i=t,n=e,r=Qe(()=>{const a=[i.language==="json"?I8():T8({typescript:!0}),j8,_e.theme({"&":{backgroundColor:"var(--color-surface-base, #0f172a)",minHeight:i.minHeight},".cm-gutters":{backgroundColor:"var(--color-surface-base, #0f172a)",borderRight:"1px solid var(--color-border-default)",color:"var(--color-text-muted)"},".cm-activeLineGutter":{backgroundColor:"color-mix(in srgb, var(--color-accent) 10%, transparent)"},".cm-activeLine":{backgroundColor:"color-mix(in srgb, var(--color-accent) 5%, transparent)"},"&.cm-focused":{outline:"none"},".cm-cursor":{borderLeftColor:"var(--color-accent)"},".cm-selectionBackground":{backgroundColor:"color-mix(in srgb, var(--color-accent) 20%, transparent) !important"},".cm-content":{caretColor:"var(--color-accent)"}}),_e.lineWrapping];return i.readonly&&a.push(_e.editable.of(!1)),a});function s(a){n("update:modelValue",a)}return(a,l)=>(ve(),Ct(Se(DR),{"model-value":t.modelValue,extensions:r.value,placeholder:t.placeholder,style:hi({minHeight:t.minHeight,fontSize:"12px",borderRadius:"6px",overflow:"hidden",border:"1px solid var(--color-border-default)"}),"onUpdate:modelValue":s},null,8,["model-value","extensions","placeholder","style"]))}}),Z8={class:"ai-diff"},V8={key:0,class:"diff-explanation"},U8={class:"diff-code"},q8={class:"diff-actions"},W8=ot({__name:"AiDiffView",props:{oldCode:{},newCode:{},explanation:{}},emits:["accept","dismiss"],setup(t){const e=t,i=Qe(()=>ST(e.oldCode,e.newCode));return(n,r)=>(ve(),be("div",Z8,[t.explanation?(ve(),be("div",V8,Te(t.explanation),1)):Re("",!0),pe("div",U8,[(ve(!0),be(mt,null,Jt(i.value,(s,a)=>(ve(),be("div",{key:a,class:bt(["diff-line",{added:s.added,removed:s.removed}])},Te(s.value),3))),128))]),pe("div",q8,[pe("button",{class:"diff-accept",onClick:r[0]||(r[0]=s=>n.$emit("accept"))},Te(n.$t("tools.aiDiff.accept")),1),pe("button",{class:"diff-dismiss",onClick:r[1]||(r[1]=s=>n.$emit("dismiss"))},Te(n.$t("tools.aiDiff.dismiss")),1)])]))}}),Y8=CO(W8,[["__scopeId","data-v-01c9471b"]]),G8={class:"block-header"},H8={class:"block-badge"},J8=["value","placeholder"],K8=["disabled","title"],e6=["disabled","title"],t6={key:0,class:"thinking-bar nodrag"},i6={class:"thinking-text"},n6={key:1,class:"insights-row"},r6={key:2,class:"insights-row"},s6=["onClick"],a6={key:3,class:"insight-detail nodrag nowheel"},o6={class:"insight-desc"},l6={class:"insight-suggestion-label"},u6={key:4,class:"exec-badge-row"},c6={key:0,class:"exec-badge exec-executing"},h6={key:2,class:"exec-badge exec-failed"},f6=["disabled"],d6={key:5,class:"exec-result-panel nodrag nowheel"},p6={class:"block-section"},m6=["value","placeholder"],g6={key:6,class:"block-section nodrag nowheel"},y6=["placeholder"],v6={class:"intent-actions"},O6=["disabled"],x6={key:0,class:"intent-error"},b6={class:"block-section"},S6={class:"param-header"},w6=["value","onChange","placeholder"],P6=["value","onChange","placeholder"],T6=["onClick"],C6={key:0,class:"param-empty"},k6={class:"block-section probe-section"},E6={class:"probe-badge"},A6={key:0,class:"probe-panel nodrag nowheel"},D6={class:"probe-url-row"},_6=["placeholder"],I6=["disabled"],N6={class:"diag-row"},M6={key:0,class:"diag-tag"},$6={key:1,class:"diag-tag"},L6={key:2,class:"diag-tag diag-openapi"},B6={key:0,class:"diag-auth"},Q6={class:"config-section"},F6={class:"config-header"},R6={class:"config-label"},z6=["onUpdate:modelValue","placeholder"],X6=["onUpdate:modelValue","placeholder"],j6=["onClick","title"],Z6=["onClick"],V6={key:1,class:"config-section"},U6={class:"config-label"},q6={key:2,class:"ep-section"},W6={class:"config-label"},Y6=["placeholder"],G6={class:"ep-list"},H6=["onClick"],J6={class:"ep-path"},K6={key:0,class:"ep-summary"},e7={key:0,class:"param-empty"},t7={class:"probe-ai-row"},i7=["disabled"],n7={key:0,class:"auto-map-reasoning"},r7={class:"probe-tree"},s7={key:1,class:"probe-footer"},a7={class:"probe-count"},o7={key:4,class:"probe-error"},l7={key:5,class:"probe-raw"},u7={key:7,class:"block-section mappings-section"},c7={class:"mappings-header"},h7={key:0,class:"stale-badge",title:"Some mapped fields are missing from the function body"},f7={class:"mappings-list"},d7=["title"],p7={class:"block-section nodrag nowheel"},m7=ot({__name:"ToolFunctionNode",props:{data:{}},setup(t){const e=e1(),i=t;function n(J,ue){i.data.onUpdate?.(J,ue)}function r(J,ue,me){const Pe=i.data.parameters.map((Ve,He)=>He===J?{...Ve,[ue]:me}:{...Ve});n("parameters",Pe)}function s(){n("parameters",[...i.data.parameters,{name:"arg",type:"string"}])}function a(J){n("parameters",i.data.parameters.filter((ue,me)=>me!==J))}const l=Qe(()=>{const J=i.data.mappings;if(!J||J.length===0)return[];const ue=i.data.body;return J.filter(me=>!ue.includes(me.returnKey))}),u=Qe(()=>l.value.length>0),h=ze(!1),c=ze(!1),p=ze(e.getIntent(i.data.uid)??""),v=Qe(()=>e.drafts.get(i.data.uid)),g=Qe(()=>v.value?.loading??!1);async function b(){if(!p.value.trim()||!e.effectiveModel)return;e.setIntent(i.data.uid,p.value),e.setDraft(i.data.uid,{toolId:i.data.uid,phase:"draft",code:"",explanation:"",loading:!0,intentText:p.value});const J=await q$({model:e.effectiveModel,toolName:i.data.name,description:i.data.description,parameters:i.data.parameters,probeResponseSample:Q.value??void 0,intent:p.value});J.error?e.setDraft(i.data.uid,{toolId:i.data.uid,phase:"draft",code:"",explanation:"",loading:!1,error:J.error,intentText:p.value}):e.setDraft(i.data.uid,{toolId:i.data.uid,phase:"draft",code:J.code,explanation:J.explanation,loading:!1,trainingPairId:J.trainingPairId,intentText:p.value})}function m(){const J=v.value;!J||!J.code||(n("body",J.code),J.trainingPairId&&qd.updateAccepted(J.trainingPairId),e.clearDraft(i.data.uid))}function x(){e.clearDraft(i.data.uid)}const O=Qe(()=>e.insights.get(i.data.uid)),P=ze(null),S=ze(!1);Ge(()=>i.data.body,()=>{e.insights.get(i.data.uid)&&(e.clearInsights(i.data.uid),P.value=null)});const w=ze(null),C=["Thinking","Cogitating","Analyzing","Flexing","Scrutinizing","Neuroticizing","Polarizing","Rasterizing","Criticizing","Parameterizing","Inspecting","Evaluating","Dissecting","Probing","Examining","Parsing","Reviewing","Synthesizing"],E=ze(0);let k=null;const A=Qe(()=>C[E.value%C.length]);function $(){E.value=0,k=setInterval(()=>{E.value++},1500)}function F(){k&&(clearInterval(k),k=null)}function N(){if(!P.value?.suggestedCode){console.warn("[Insight] No suggestedCode to apply");return}const J=P.value.suggestedCode;console.log("[Insight] Applying fix, code length:",J.length),n("body",J),P.value=null}async function B(){if(!e.effectiveModel){w.value="No AI model selected. Choose one in the Canvas AI model selector.";return}S.value=!0,w.value=null,P.value=null,$();const J=await W$({model:e.effectiveModel,toolName:i.data.name,code:i.data.body,parameters:i.data.parameters});S.value=!1,F(),J.error?w.value=J.error:e.setInsights(i.data.uid,{toolId:i.data.uid,insights:J.insights,codeHash:i.data.body})}const X=ze(!1),I=ze("");async function Z(){if(!e.effectiveModel||!Q.value)return;X.value=!0,I.value="";const J=await Y$({model:e.effectiveModel,toolName:i.data.name,description:i.data.description,probeResponseSample:Q.value});X.value=!1,!J.error&&J.paths.length>0&&(I.value=J.reasoning,xe.value=new Set(J.paths))}const j=ze(!1);async function te(){if(!e.effectiveModel)return;j.value=!0;const J=e.getIntent(i.data.uid),ue=await G$({model:e.effectiveModel,toolName:i.data.name,code:i.data.body,parameters:i.data.parameters,error:i.data.lastCallError??"Unknown error",arguments:i.data.lastCallArguments??{},originalIntent:J});j.value=!1,!ue.error&&ue.fixedCode&&e.setDraft(i.data.uid,{toolId:i.data.uid,phase:"fix",code:ue.fixedCode,explanation:ue.explanation,loading:!1,trainingPairId:ue.trainingPairId})}const q=ze(!1),oe=ze("idle"),ae=ze(i.data.probeConfig?.url??""),he=ze(i.data.probeConfig?.method??"GET"),D=ze(null),V=ze(null),L=ze(null),se=ze(i.data.probeConfig?.headers?Object.entries(i.data.probeConfig.headers).map(([J,ue])=>({key:J,value:ue})):[]),fe=ze(new Set(i.data.probeConfig?.secretHeaders??[]));function ie(J){const ue=se.value[J].key.trim();if(!ue)return;const me=new Set(fe.value);me.has(ue)?me.delete(ue):me.add(ue),fe.value=me}const R=ze(""),Q=ze(null),xe=ze(new Set),Fe=ze(""),ke=ze(null),$e=Qe(()=>{if(!L.value)return[];const J=Fe.value.toLowerCase();return J?L.value.endpoints.filter(ue=>ue.path.toLowerCase().includes(J)||ue.summary?.toLowerCase().includes(J)||ue.operationId?.toLowerCase().includes(J)):L.value.endpoints});function ee(J){return J>=200&&J<300?"var(--color-success)":J>=300&&J<400?"var(--color-warning, #f9e2af)":"var(--color-error)"}function G(J){switch(J){case"GET":return"var(--color-accent)";case"POST":return"var(--color-success)";case"PUT":return"var(--color-warning, #f9e2af)";case"DELETE":return"var(--color-error)";case"PATCH":return"#cba6f7";default:return"var(--color-text-muted)"}}async function re(){const J=ae.value.trim();if(!J)return;oe.value="discovering",D.value=null,V.value=null,L.value=null,Q.value=null,xe.value=new Set,ke.value=null;const ue={};for(const Ve of se.value)Ve.key.trim()&&(ue[Ve.key.trim()]=Ve.value);const[me,Pe]=await Promise.allSettled([n3(J,{method:he.value,headers:Object.keys(ue).length>0?ue:void 0,body:(he.value==="POST"||he.value==="PUT")&&R.value||void 0}),a3(J)]);me.status==="fulfilled"&&(D.value=me.value,me.value.data&&(Q.value=me.value.data),me.value.authHint&&se.value.length===0&&(me.value.authHint.type==="bearer"?se.value=[{key:"Authorization",value:"Bearer "}]:me.value.authHint.type==="apikey"?se.value=[{key:"X-API-Key",value:""}]:me.value.authHint.type==="basic"&&(se.value=[{key:"Authorization",value:"Basic "}]))),Pe.status==="fulfilled"&&Pe.value.spec&&(V.value=Pe.value,L.value=K$(Pe.value.spec)),oe.value="diagnosed"}function Y(J){ke.value=J;const ue=L.value?.info.baseUrl??"",me=ue?`${ue.replace(/\/$/,"")}${J.path}`:J.path;ae.value=me,he.value=J.method;const Pe=J.operationId??J.path.replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_|_$/g,"");n("name",Pe),(J.summary||J.description)&&n("description",J.summary??J.description??"");const Ve=J.parameters.filter(He=>He.in==="query"||He.in==="path").map(He=>({name:He.name,type:He.type}));Ve.length>0&&n("parameters",Ve)}function H(){se.value=[...se.value,{key:"",value:""}]}function le(J){se.value=se.value.filter((ue,me)=>me!==J)}function ye(J){const ue=new Set(xe.value);ue.has(J)?ue.delete(J):ue.add(J),xe.value=ue}function we(){const J=Array.from(xe.value);if(J.length===0)return;const ue={};for(const Je of se.value)Je.key.trim()&&(ue[Je.key.trim()]=Je.value);const me=Array.from(fe.value),{body:Pe,addedParams:Ve}=mT(ae.value.trim(),J,{method:he.value!=="GET"?he.value:void 0,headers:Object.keys(ue).length>0?ue:void 0,body:(he.value==="POST"||he.value==="PUT")&&R.value||void 0,secretHeaders:me.length>0?me:void 0});n("body",Pe);const He=gT(J);if(n("mappings",He),Q.value){const Je=yT(He,Q.value);n("returnSchema",Je)}const Tt={url:ae.value.trim(),method:he.value,headers:ue,...me.length>0?{secretHeaders:me}:{}};if(n("probeConfig",Tt),Ve.length>0){const Je=i.data.parameters.map(qt=>qt.name),ei=Ve.filter(qt=>!Je.includes(qt.name));ei.length>0&&n("parameters",[...i.data.parameters,...ei])}oe.value="picked"}return(J,ue)=>(ve(),be("div",{class:bt(["tool-block",{executing:t.data.executionStatus==="executing",completed:t.data.executionStatus==="completed",failed:t.data.executionStatus==="failed"}])},[xt(Se(Es),{type:"target",position:Se(Xe).Top},null,8,["position"]),pe("div",G8,[pe("span",H8,Te(J.$t("tools.node.badge")),1),pe("input",{class:"block-name-input",value:t.data.name,onChange:ue[0]||(ue[0]=me=>n("name",me.target.value)),placeholder:J.$t("tools.node.functionNamePlaceholder")},null,40,J8),pe("button",{class:bt(["ai-header-btn",{active:c.value}]),disabled:g.value,title:J.$t("tools.node.draftWithAi"),onClick:ue[1]||(ue[1]=Yi(me=>c.value=!c.value,["stop"]))},Te(g.value?"...":"✨"),11,K8),pe("button",{class:"ai-header-btn ai-analyze",disabled:S.value||!t.data.body.trim(),title:J.$t("tools.node.aiInsights"),onClick:Yi(B,["stop"])},Te(S.value?"...":"🔍"),9,e6)]),S.value?(ve(),be("div",t6,[ue[14]||(ue[14]=pe("span",{class:"thinking-dot"},null,-1)),pe("span",i6,Te(A.value)+"...",1)])):Re("",!0),w.value?(ve(),be("div",n6,[pe("span",{class:"insight-badge error",onClick:ue[2]||(ue[2]=Yi(me=>w.value=null,["stop"]))},Te(w.value),1)])):Re("",!0),O.value?.insights.length?(ve(),be("div",r6,[(ve(!0),be(mt,null,Jt(O.value.insights,(me,Pe)=>(ve(),be("span",{key:Pe,class:bt(["insight-badge",me.severity]),onClick:Yi(Ve=>P.value=P.value===me?null:me,["stop"])},Te(me.title),11,s6))),128))])):Re("",!0),P.value?(ve(),be("div",a6,[pe("p",o6,Te(P.value.description),1),P.value.suggestedCode?(ve(),be(mt,{key:0},[pe("p",l6,Te(J.$t("tools.node.insightSuggestionLabel")),1),xt(go,{"model-value":P.value.suggestedCode,language:"typescript",readonly:!0,"min-height":"60px"},null,8,["model-value"])],64)):Re("",!0),pe("div",{class:"insight-actions",onMousedown:ue[4]||(ue[4]=Yi(()=>{},["stop"]))},[P.value.suggestedCode?(ve(),be("button",{key:0,class:"insight-apply",onClick:Yi(N,["stop","prevent"])},Te(J.$t("tools.node.applyFix")),1)):Re("",!0),pe("button",{class:"insight-close",onClick:ue[3]||(ue[3]=Yi(me=>P.value=null,["stop"]))},"× "+Te(J.$t("tools.node.closeInsight")),1)],32)])):Re("",!0),t.data.executionStatus&&t.data.executionStatus!=="idle"?(ve(),be("div",u6,[t.data.executionStatus==="executing"?(ve(),be("span",c6,Te(J.$t("tools.node.running")),1)):t.data.executionStatus==="completed"?(ve(),be("button",{key:1,class:"exec-badge exec-completed",onClick:ue[5]||(ue[5]=Yi(me=>h.value=!h.value,["stop"]))}," ✓ "+Te(t.data.lastDurationMs!=null?`${t.data.lastDurationMs}ms`:J.$t("tools.node.done")),1)):t.data.executionStatus==="failed"?(ve(),be("span",h6," ✗ "+Te(J.$t("tools.node.failed")),1)):Re("",!0),t.data.executionStatus==="failed"?(ve(),be("button",{key:3,class:"ai-fix-btn",disabled:j.value,onClick:Yi(te,["stop"])},Te(j.value?"...":J.$t("tools.node.aiFix")),9,f6)):Re("",!0)])):Re("",!0),h.value&&t.data.lastResult!==void 0?(ve(),be("div",d6,[xt(ng,{label:"result",value:t.data.lastResult,path:"","selected-paths":new Set,depth:0,onTogglePath:()=>{}},null,8,["value","selected-paths"])])):Re("",!0),pe("div",p6,[pe("label",null,Te(J.$t("tools.node.description")),1),pe("input",{class:"block-input",value:t.data.description,onChange:ue[6]||(ue[6]=me=>n("description",me.target.value)),placeholder:J.$t("tools.node.descriptionPlaceholder")},null,40,m6)]),c.value?(ve(),be("div",g6,[pe("label",null,Te(J.$t("tools.node.intent")),1),Vn(pe("textarea",{"onUpdate:modelValue":ue[7]||(ue[7]=me=>p.value=me),class:"intent-textarea",placeholder:J.$t("tools.node.intentPlaceholder"),rows:"2"},null,8,y6),[[ia,p.value]]),pe("div",v6,[pe("button",{class:"intent-generate-btn",disabled:g.value||!p.value.trim(),onClick:b},Te(g.value?J.$t("tools.node.generating"):J.$t("tools.node.generate")),9,O6)]),v.value?.error?(ve(),be("div",x6,Te(v.value.error),1)):Re("",!0)])):Re("",!0),pe("div",b6,[pe("div",S6,[pe("label",null,Te(J.$t("tools.node.parameters")),1),pe("button",{class:"param-add-btn",onClick:s},Te(J.$t("tools.node.addParam")),1)]),(ve(!0),be(mt,null,Jt(t.data.parameters,(me,Pe)=>(ve(),be("div",{key:Pe,class:"param-row"},[pe("input",{class:"param-name",value:me.name,onChange:Ve=>r(Pe,"name",Ve.target.value),placeholder:J.$t("tools.node.paramNamePlaceholder")},null,40,w6),pe("input",{class:"param-type",value:me.type,onChange:Ve=>r(Pe,"type",Ve.target.value),placeholder:J.$t("tools.node.paramTypePlaceholder")},null,40,P6),pe("button",{class:"param-remove-btn",onClick:Ve=>a(Pe)},"×",8,T6)]))),128)),t.data.parameters.length===0?(ve(),be("div",C6,Te(J.$t("tools.node.noParameters")),1)):Re("",!0)]),pe("div",k6,[pe("div",{class:"probe-toggle",onClick:ue[8]||(ue[8]=me=>q.value=!q.value)},[pe("span",{class:bt(["toggle-arrow",{open:q.value}])},"▶",2),pe("label",null,Te(J.$t("tools.node.probeAndPick")),1),pe("span",E6,Te(J.$t("tools.node.apiBadge")),1)]),q.value?(ve(),be("div",A6,[pe("div",D6,[Vn(pe("select",{"onUpdate:modelValue":ue[9]||(ue[9]=me=>he.value=me),class:"method-select"},[...ue[15]||(ue[15]=[pe("option",null,"GET",-1),pe("option",null,"POST",-1),pe("option",null,"PUT",-1),pe("option",null,"DELETE",-1)])],512),[[uT,he.value]]),Vn(pe("input",{"onUpdate:modelValue":ue[10]||(ue[10]=me=>ae.value=me),class:"block-input probe-url",placeholder:J.$t("tools.node.urlPlaceholder"),onKeydown:cT(re,["enter"])},null,40,_6),[[ia,ae.value]]),pe("button",{class:"probe-btn",disabled:oe.value==="discovering"||!ae.value.trim(),onClick:re},Te(oe.value==="discovering"?"...":J.$t("tools.node.probe")),9,I6)]),D.value&&oe.value!=="idle"?(ve(),be(mt,{key:0},[pe("div",N6,[pe("span",{class:"diag-status",style:hi({background:ee(D.value.status)})},Te(D.value.status),5),D.value.headers["content-type"]?(ve(),be("span",M6,Te(D.value.headers["content-type"].split(";")[0]),1)):Re("",!0),D.value.headers.server?(ve(),be("span",$6,Te(D.value.headers.server),1)):Re("",!0),L.value?(ve(),be("span",L6," OpenAPI · "+Te(L.value.endpoints.length)+" endpoints ",1)):Re("",!0)]),D.value.authHint?(ve(),be("div",B6,[ue[16]||(ue[16]=pe("span",{class:"diag-auth-icon"},"🔒",-1)),pe("span",null,Te(D.value.authHint.message),1)])):Re("",!0)],64)):Re("",!0),pe("div",Q6,[pe("div",F6,[pe("span",R6,Te(J.$t("tools.node.headers")),1),pe("button",{class:"param-add-btn",onClick:H},Te(J.$t("tools.node.addHeader")),1)]),(ve(!0),be(mt,null,Jt(se.value,(me,Pe)=>(ve(),be("div",{key:Pe,class:"param-row"},[Vn(pe("input",{class:"param-name","onUpdate:modelValue":Ve=>se.value[Pe].key=Ve,placeholder:J.$t("tools.node.headerNamePlaceholder")},null,8,z6),[[ia,se.value[Pe].key]]),Vn(pe("input",{class:bt(["param-type",{"secret-masked":fe.value.has(se.value[Pe].key.trim())}]),"onUpdate:modelValue":Ve=>se.value[Pe].value=Ve,placeholder:J.$t("tools.node.headerValuePlaceholder")},null,10,X6),[[ia,se.value[Pe].value]]),pe("button",{class:bt(["secret-toggle-btn",{active:fe.value.has(se.value[Pe].key.trim())}]),onClick:Ve=>ie(Pe),title:J.$t("tools.node.markAsSecret")}," 🔒 ",10,j6),pe("button",{class:"param-remove-btn",onClick:Ve=>le(Pe)},"×",8,Z6)]))),128))]),he.value==="POST"||he.value==="PUT"?(ve(),be("div",V6,[pe("span",U6,Te(J.$t("tools.node.requestBody")),1),xt(go,{modelValue:R.value,"onUpdate:modelValue":ue[11]||(ue[11]=me=>R.value=me),language:"json","min-height":"60px",placeholder:'{"key": "value"}'},null,8,["modelValue"])])):Re("",!0),L.value&&L.value.endpoints.length>0?(ve(),be("div",q6,[pe("span",W6,Te(J.$t("tools.node.endpoints")),1),Vn(pe("input",{"onUpdate:modelValue":ue[12]||(ue[12]=me=>Fe.value=me),class:"block-input ep-search",placeholder:J.$t("tools.node.searchEndpoints")},null,8,Y6),[[ia,Fe.value]]),pe("div",G6,[(ve(!0),be(mt,null,Jt($e.value,me=>(ve(),be("div",{key:me.method+me.path,class:bt(["ep-row",{selected:ke.value===me}]),onClick:Pe=>Y(me)},[pe("span",{class:"ep-method",style:hi({background:G(me.method)})},Te(me.method),5),pe("span",J6,Te(me.path),1),me.summary?(ve(),be("span",K6,Te(me.summary),1)):Re("",!0)],10,H6))),128)),$e.value.length===0?(ve(),be("div",e7,Te(J.$t("tools.node.noMatchingEndpoints")),1)):Re("",!0)])])):Re("",!0),Q.value&&D.value&&D.value.ok?(ve(),be(mt,{key:3},[pe("div",t7,[pe("button",{class:"ai-suggest-btn",disabled:X.value,onClick:Z},Te(X.value?J.$t("tools.node.thinking"):J.$t("tools.node.aiSuggest")),9,i7)]),I.value?(ve(),be("div",n7,Te(I.value),1)):Re("",!0),pe("div",r7,[xt(ng,{label:"response",value:Q.value,path:"","selected-paths":xe.value,depth:0,onTogglePath:ye},null,8,["value","selected-paths"])]),xe.value.size>0?(ve(),be("div",s7,[pe("span",a7,Te(xe.value.size)+" "+Te(xe.value.size!==1?J.$t("tools.node.fields"):J.$t("tools.node.field")),1),pe("button",{class:"probe-apply-btn",onClick:we},Te(J.$t("tools.node.apply")),1)])):Re("",!0)],64)):Re("",!0),D.value&&D.value.error&&!D.value.data?(ve(),be("div",o7,Te(D.value.error),1)):Re("",!0),D.value?.rawText?(ve(),be("pre",l7,Te(D.value.rawText),1)):Re("",!0)])):Re("",!0)]),t.data.mappings&&t.data.mappings.length>0?(ve(),be("div",u7,[pe("div",c7,[pe("label",null,Te(J.$t("tools.node.mappings")),1),u.value?(ve(),be("span",h7,Te(J.$t("tools.node.outOfSync")),1)):Re("",!0)]),pe("div",f7,[(ve(!0),be(mt,null,Jt(t.data.mappings,me=>(ve(),be("span",{key:me.jsonPath,class:bt(["mapping-tag",{stale:l.value.some(Pe=>Pe.jsonPath===me.jsonPath)}]),title:me.jsonPath},Te(me.returnKey),11,d7))),128))])])):Re("",!0),pe("div",p7,[pe("label",null,Te(J.$t("tools.node.bodyLabel")),1),v.value&&!v.value.loading&&v.value.code?(ve(),Ct(Y8,{key:0,"old-code":t.data.body,"new-code":v.value.code,explanation:v.value.explanation,onAccept:m,onDismiss:x},null,8,["old-code","new-code","explanation"])):(ve(),Ct(go,{key:1,"model-value":t.data.body,language:"typescript","min-height":"100px",placeholder:J.$t("tools.node.bodyPlaceholder"),"onUpdate:modelValue":ue[13]||(ue[13]=me=>n("body",me))},null,8,["model-value","placeholder"]))]),xt(Se(Es),{type:"source",position:Se(Xe).Bottom},null,8,["position"])],2))}}),g7=CO(m7,[["__scopeId","data-v-655b6640"]]),y7={class:"flex h-full w-full relative"},v7={key:0,class:"w-[440px] flex flex-col border-r border-border-default bg-surface-base shrink-0"},O7={class:"p-3 border-b border-border-default flex items-center justify-between"},x7={class:"flex items-center gap-2"},b7={class:"text-sm font-semibold text-text-primary"},S7={class:"flex border-b border-border-default"},w7={class:"flex-1 flex flex-col p-3 gap-2 min-h-0 overflow-auto"},P7={class:"flex-1 flex flex-col p-3 gap-2 min-h-0"},T7={class:"flex items-center justify-between"},C7={class:"text-xs text-text-muted"},k7={class:"flex-1 overflow-auto"},E7={key:0,class:"p-3 border-t border-border-default"},A7={class:"text-xs text-warning uppercase tracking-wider"},D7={class:"mt-1 text-xs text-warning/80 list-disc pl-4 space-y-0.5"},_7={class:"p-3 border-t border-border-default text-xs text-text-muted"},I7={class:"flex-1 relative min-h-0 overflow-hidden"},N7={key:0,class:"absolute inset-0 flex flex-col items-center justify-center pointer-events-none"},M7={class:"text-center pointer-events-auto"},$7={class:"text-text-muted text-sm mb-4"},L7={class:"flex items-center gap-3"},B7={class:"absolute top-3 right-3 z-10 flex items-center gap-2"},Q7=["value"],F7={value:""},R7=["value"],z7=["title"],X7=["title"],j7={key:1,class:"absolute inset-0 z-50 flex items-center justify-center bg-black/40"},Z7={class:"rounded-xl bg-surface-raised border border-border-default p-6 shadow-2xl max-w-xs text-center"},V7={class:"text-sm text-text-primary mb-1 font-semibold"},U7={class:"text-xs text-text-muted mb-4"},q7={class:"flex items-center justify-center gap-3"},W7={key:1,class:"w-[280px] flex flex-col border-l border-border-default bg-surface-base shrink-0"},Y7={class:"p-3 border-b border-border-default flex items-center justify-between"},G7={class:"text-sm font-semibold text-text-primary"},H7={class:"flex-1 overflow-y-auto p-2 space-y-1"},J7=["title","onClick"],K7={class:"min-w-0 flex-1"},e9={class:"truncate text-[10px] text-text-muted"},t9=["title","onClick"],i9={key:0,class:"px-3 py-4 text-xs text-text-muted text-center"},n9={class:"p-3 border-t border-border-default text-xs text-text-muted"},r9=ot({__name:"ToolCanvasView",emits:["add-template"],setup(t,{emit:e}){const i=e,n={"tool-function":io(g7)},r=Ud(),s=e1(),a=PO(),{flowNodes:l,flowEdges:u,combinedCode:h,codeWarnings:c,codeSyncStatus:p,schemas:v,onNodeDragStop:g,onNodesDelete:b,onCodeEdit:m,addNewTool:x}=z$(),{fitView:O}=yt();fn(()=>{a.models.length===0&&a.fetchModels()});const P=ze(!1),S=ze("code");Ge(P,()=>{l.value.length>0&&setTimeout(()=>{O({padding:.3,duration:300})},50)});const w=ze(!1);Ge(w,()=>{l.value.length>0&&setTimeout(()=>{O({padding:.3,duration:300})},50)});function C(X){r.removeTool(X)}const E=ze(!1);function k(){r.clearAll(),E.value=!1}const A=Qe(()=>JSON.stringify(v.value,null,2));function $(X){g({node:X.node})}function F(X){for(const I of X)I.type==="remove"&&b([{id:I.id}])}function N(){const X=x();vi(()=>{O({nodes:[X],padding:.5,duration:300})})}async function B(){try{await navigator.clipboard.writeText(A.value)}catch{}}return(X,I)=>(ve(),be("div",y7,[P.value?(ve(),be("div",v7,[pe("div",O7,[pe("div",x7,[pe("span",b7,Te(X.$t("tools.canvas.codePanel")),1),pe("span",{class:bt(["sync-dot",Se(p)])},null,2)]),pe("button",{class:"text-xs text-text-muted hover:text-text-primary transition-colors bg-transparent border-none cursor-pointer",onClick:I[0]||(I[0]=Z=>P.value=!1)},Te(X.$t("tools.canvas.close")),1)]),pe("div",S7,[pe("button",{onClick:I[1]||(I[1]=Z=>S.value="code"),class:bt(["flex-1 px-3 py-2 text-xs uppercase tracking-wider border-none cursor-pointer transition-colors",S.value==="code"?"bg-surface-raised text-accent font-bold":"bg-transparent text-text-muted"])},Te(X.$t("tools.canvas.source")),3),pe("button",{onClick:I[2]||(I[2]=Z=>S.value="schema"),class:bt(["flex-1 px-3 py-2 text-xs uppercase tracking-wider border-none cursor-pointer transition-colors",S.value==="schema"?"bg-surface-raised text-success font-bold":"bg-transparent text-text-muted"])},Te(X.$t("tools.canvas.schema")),3)]),Vn(pe("div",w7,[xt(go,{"model-value":Se(h),language:"typescript",placeholder:"Combined tool source...","min-height":"200px","onUpdate:modelValue":Se(m)},null,8,["model-value","onUpdate:modelValue"])],512),[[ig,S.value==="code"]]),Vn(pe("div",P7,[pe("div",T7,[pe("span",C7,Te(X.$t("tools.canvas.schemaManifest")),1),pe("button",{onClick:B,class:"px-2 py-1 text-xs rounded bg-surface-overlay text-text-secondary hover:bg-surface-raised transition-colors cursor-pointer border-none"},Te(X.$t("tools.canvas.copy")),1)]),pe("div",k7,[xt(go,{"model-value":A.value,language:"json",readonly:!0,"min-height":"200px"},null,8,["model-value"])])],512),[[ig,S.value==="schema"]]),Se(c).length>0?(ve(),be("div",E7,[pe("label",A7,Te(X.$t("tools.canvas.warnings")),1),pe("ul",D7,[(ve(!0),be(mt,null,Jt(Se(c),(Z,j)=>(ve(),be("li",{key:j},Te(Z),1))),128))])])):Re("",!0),pe("div",_7,Te(Se(l).length)+" tool"+Te(Se(l).length!==1?"s":"")+" · "+Te(Se(v).length)+" schema"+Te(Se(v).length!==1?"s":""),1)])):Re("",!0),pe("div",I7,[xt(Se(AD),{nodes:Se(l),edges:Se(u),"node-types":n,"default-viewport":{x:40,y:40,zoom:1},"min-zoom":.3,"max-zoom":2,"fit-view-on-init":Se(l).length>0,"fit-view-on-init-options":{padding:.3,minZoom:.6,maxZoom:1.2},class:"canvas-flow",onNodeDragStop:$,onNodesChange:F},{default:Ki(()=>[xt(Se(BD),{gap:24,size:1,"pattern-color":"var(--color-border-default)"}),xt(Se(p_)),xt(Se(GM))]),_:1},8,["nodes","edges","fit-view-on-init"]),Se(l).length===0?(ve(),be("div",N7,[pe("div",M7,[pe("div",$7,Te(X.$t("tools.canvas.emptyState")),1),pe("div",L7,[pe("button",{onClick:N,class:"px-4 py-2 rounded-lg bg-accent text-surface-base font-semibold text-sm hover:opacity-90 transition-opacity cursor-pointer border-none"},Te(X.$t("tools.canvas.newTool")),1),pe("button",{onClick:I[3]||(I[3]=Z=>i("add-template")),class:"px-4 py-2 rounded-lg border border-dashed border-border-default text-text-muted text-sm font-medium hover:border-accent hover:text-text-primary transition-colors cursor-pointer bg-transparent"},Te(X.$t("tools.canvas.fromTemplate")),1)])])])):Re("",!0),pe("div",B7,[Se(a).chatModelNames.length>0?(ve(),be("select",{key:0,value:Se(s).canvasAiModel??"",onChange:I[4]||(I[4]=Z=>Se(s).setCanvasAiModel(Z.target.value||null)),class:"canvas-ai-model-select px-2 py-1.5 rounded-lg bg-surface-overlay/90 text-text-secondary text-xs border border-border-default shadow-lg cursor-pointer"},[pe("option",F7,"AI: "+Te(Se(a).chatModelNames[0]??"none"),1),(ve(!0),be(mt,null,Jt(Se(a).chatModelNames,Z=>(ve(),be("option",{key:Z,value:Z}," AI: "+Te(Z)+" "+Te(Se(a).capabilityIcons(Z)),9,R7))),128))],40,Q7)):Re("",!0),pe("button",{onClick:I[5]||(I[5]=Z=>Se(H$)()),class:"px-3 py-1.5 rounded-lg bg-surface-overlay/90 text-text-secondary text-xs font-medium hover:bg-surface-overlay transition-colors cursor-pointer border border-border-default shadow-lg",title:X.$t("tools.canvas.exportTitle")},Te(X.$t("tools.canvas.export")),9,z7),P.value?Re("",!0):(ve(),be("button",{key:1,onClick:I[6]||(I[6]=Z=>P.value=!0),class:"px-3 py-1.5 rounded-lg bg-surface-overlay/90 text-text-secondary text-xs font-medium hover:bg-surface-overlay transition-colors cursor-pointer border border-border-default shadow-lg"},Te(X.$t("tools.canvas.codePanel")),1)),pe("button",{onClick:I[7]||(I[7]=Z=>w.value=!w.value),class:bt(["px-3 py-1.5 rounded-lg bg-surface-overlay/90 text-xs font-medium hover:bg-surface-overlay transition-colors cursor-pointer border border-border-default shadow-lg",w.value?"text-accent":"text-text-secondary"])},Te(X.$t("tools.canvas.toolLibrary")),3),Se(l).length>0?(ve(),be("button",{key:2,onClick:I[8]||(I[8]=Z=>E.value=!0),class:"px-3 py-1.5 rounded-lg bg-surface-overlay/90 text-text-secondary text-xs font-medium hover:bg-surface-overlay hover:text-error transition-colors cursor-pointer border border-border-default shadow-lg",title:X.$t("tools.canvas.clearAllTitle")},Te(X.$t("tools.canvas.clearAll")),9,X7)):Re("",!0),pe("button",{onClick:I[9]||(I[9]=Z=>i("add-template")),class:"px-3 py-1.5 rounded-lg bg-surface-overlay/90 text-text-secondary text-xs font-medium hover:bg-surface-overlay transition-colors cursor-pointer border border-dashed border-border-default shadow-lg"},Te(X.$t("tools.canvas.fromTemplate")),1),Se(l).length>0?(ve(),be("button",{key:3,onClick:N,class:"px-3 py-1.5 rounded-lg bg-accent/90 text-surface-base font-semibold text-xs hover:bg-accent transition-colors cursor-pointer border-none shadow-lg"},Te(X.$t("tools.canvas.newTool")),1)):Re("",!0)]),E.value?(ve(),be("div",j7,[pe("div",Z7,[pe("p",V7,Te(X.$t("tools.canvas.clearAllConfirm")),1),pe("p",U7,Te(X.$t("tools.canvas.clearAllWarning",{count:Se(l).length})),1),pe("div",q7,[pe("button",{onClick:I[10]||(I[10]=Z=>E.value=!1),class:"px-4 py-1.5 rounded-lg text-xs text-text-secondary bg-surface-overlay hover:bg-surface-raised transition-colors cursor-pointer border border-border-default"},Te(X.$t("tools.canvas.cancel")),1),pe("button",{onClick:k,class:"px-4 py-1.5 rounded-lg text-xs text-white bg-error hover:opacity-90 transition-opacity cursor-pointer border-none"},Te(X.$t("tools.canvas.deleteAll")),1)])])])):Re("",!0)]),w.value?(ve(),be("div",W7,[pe("div",Y7,[pe("span",G7,Te(X.$t("tools.canvas.toolLibrary")),1),pe("button",{class:"text-xs text-text-muted hover:text-text-primary transition-colors bg-transparent border-none cursor-pointer",onClick:I[11]||(I[11]=Z=>w.value=!1)},Te(X.$t("tools.canvas.close")),1)]),pe("div",H7,[(ve(!0),be(mt,null,Jt(Se(r).allTools,Z=>(ve(),be("div",{key:Z.id,class:"flex items-center gap-2 rounded-lg px-3 py-2 text-xs hover:bg-surface-overlay transition-colors"},[pe("button",{class:bt(["h-4 w-7 shrink-0 rounded-full transition-colors",Z.enabled?"bg-accent":"bg-surface-overlay"]),title:Z.enabled?X.$t("tools.canvas.disableForChat"):X.$t("tools.canvas.enableForChat"),onClick:j=>Se(r).toggleEnabled(Z.id)},[pe("span",{class:bt(["block h-3 w-3 rounded-full bg-white transition-transform",Z.enabled?"translate-x-3.5":"translate-x-0.5"])},null,2)],10,J7),pe("div",K7,[pe("span",{class:bt(["font-mono block",Z.enabled?"text-text-primary":"text-text-muted"])},Te(Z.definition.function.name),3),pe("p",e9,Te(Z.definition.function.description),1)]),pe("button",{class:"shrink-0 text-text-muted hover:text-error transition-colors bg-transparent border-none cursor-pointer",title:X.$t("tools.canvas.deleteToolTitle"),onClick:j=>C(Z.id)},[xt(Se(OT),{class:"h-3.5 w-3.5"})],8,t9)]))),128)),Se(r).allTools.length===0?(ve(),be("p",i9,Te(X.$t("tools.canvas.noToolsYet")),1)):Re("",!0)]),pe("div",n9,Te(Se(r).enabledTools.length)+"/"+Te(Se(r).allTools.length)+" "+Te(X.$t("tools.canvas.enabledForChat")),1)])):Re("",!0)]))}}),s9={class:"flex h-full overflow-hidden flex-col"},a9={class:"bg-surface-raised rounded-xl border border-border-default shadow-xl w-[480px] max-h-[70vh] overflow-hidden"},o9={class:"p-4 border-b border-border-default"},l9={class:"text-sm font-medium text-text-primary"},u9={class:"text-[10px] text-text-muted mt-0.5"},c9={class:"p-3 space-y-4 overflow-y-auto max-h-[50vh]"},h9={class:"text-[10px] font-semibold text-text-muted uppercase tracking-wider mb-2 px-1"},f9={class:"space-y-1.5"},d9=["onClick"],p9={class:"flex items-center justify-between"},m9={class:"text-xs font-medium text-text-primary"},g9={class:"text-[10px] text-text-muted mt-1"},y9={class:"p-3 border-t border-border-default"},$9=ot({__name:"ToolWorkshopPage",setup(t){const e=Ud(),{t:i}=hT(),n=ze(!1),r=[{name:"Current Time",description:"Returns the current date and time",category:"utility",definition:{type:"function",function:{name:"get_current_time",description:"Get the current date and time in ISO format",parameters:{type:"object",properties:{},required:[]}}},code:"return new Date().toISOString()"},{name:"Web Fetch",description:"Fetch readable text or JSON from a URL",category:"api",definition:{type:"function",function:{name:"fetch_url",description:"Fetch the content of a web page or API endpoint. Returns extracted text for HTML pages, or raw JSON for API responses.",parameters:{type:"object",properties:{url:{type:"string",description:"The URL to fetch"}},required:["url"]}}},code:`const res = await fetch(args.url)
215
+ }`,{label:"class",detail:"definition",type:"keyword"}),ii('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),ii('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],y8=rP.concat([ii("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),ii("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),ii("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),fO=new PB,sP=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function va(t){return(e,i)=>{let n=e.node.getChild("VariableDefinition");return n&&i(n,t),!0}}const v8=["FunctionDeclaration"],O8={FunctionDeclaration:va("function"),ClassDeclaration:va("class"),ClassExpression:()=>!0,EnumDeclaration:va("constant"),TypeAliasDeclaration:va("type"),NamespaceDeclaration:va("namespace"),VariableDefinition(t,e){t.matchContext(v8)||e(t,"variable")},TypeDefinition(t,e){e(t,"type")},__proto__:null};function aP(t,e){let i=fO.get(e);if(i)return i;let n=[],r=!0;function s(a,l){let u=t.sliceString(a.from,a.to);n.push({label:u,type:l})}return e.cursor(Pt.IncludeAnonymous).iterate(a=>{if(r)r=!1;else if(a.name){let l=O8[a.name];if(l&&l(a,s)||sP.has(a.name))return!1}else if(a.to-a.from>8192){for(let l of aP(t,a.node))n.push(l);return!1}}),fO.set(e,n),n}const dO=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,oP=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function x8(t){let e=Qt(t.state).resolveInner(t.pos,-1);if(oP.indexOf(e.name)>-1)return null;let i=e.name=="VariableName"||e.to-e.from<20&&dO.test(t.state.sliceDoc(e.from,e.to));if(!i&&!t.explicit)return null;let n=[];for(let r=e;r;r=r.parent)sP.has(r.name)&&(n=n.concat(aP(t.state.doc,r)));return{options:n,from:i?e.from:t.pos,validFor:dO}}const zr=zo.define({name:"javascript",parser:g8.configure({props:[Zp.add({IfStatement:mo({except:/^\s*({|else\b)/}),TryStatement:mo({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:ZB,SwitchBody:t=>{let e=t.textAfter,i=/^\s*\}/.test(e),n=/^\s*(case|default)\b/.test(e);return t.baseIndent+(i?0:n?1:2)*t.unit},Block:jB({closing:"}"}),ArrowFunction:t=>t.baseIndent+t.unit,"TemplateString BlockComment":()=>null,"Statement Property":mo({except:/^\s*{/}),JSXElement(t){let e=/^\s*<\//.test(t.textAfter);return t.lineIndent(t.node.from)+(e?0:t.unit)},JSXEscape(t){let e=/\s*\}/.test(t.textAfter);return t.lineIndent(t.node.from)+(e?0:t.unit)},"JSXOpenTag JSXSelfClosingTag"(t){return t.column(t.node.from)+t.unit}}),Up.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":FS,BlockComment(t){return{from:t.from+2,to:t.to-2}},JSXElement(t){let e=t.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let i=t.lastChild;return{from:e.to,to:i.type.isError?t.to:i.from}},"JSXSelfClosingTag JSXOpenTag"(t){var e;let i=(e=t.firstChild)===null||e===void 0?void 0:e.nextSibling,n=t.lastChild;return!i||i.type.isError?null:{from:i.to,to:n.type.isError?t.to:n.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),lP={test:t=>/^JSX/.test(t.name),facet:MS({commentTokens:{block:{open:"{/*",close:"*/}"}}})},b8=zr.configure({dialect:"ts"},"typescript"),S8=zr.configure({dialect:"jsx",props:[Xp.add(t=>t.isTop?[lP]:void 0)]}),w8=zr.configure({dialect:"jsx ts",props:[Xp.add(t=>t.isTop?[lP]:void 0)]},"typescript");let uP=t=>({label:t,type:"keyword"});const cP="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(uP),P8=cP.concat(["declare","implements","private","protected","public"].map(uP));function T8(t={}){let e=t.jsx?t.typescript?w8:S8:t.typescript?b8:zr,i=t.typescript?y8.concat(P8):rP.concat(cP);return new LS(e,[zr.data.of({autocomplete:f4(oP,zw(i))}),zr.data.of({autocomplete:x8}),t.jsx?E8:[]])}function C8(t){for(;;){if(t.name=="JSXOpenTag"||t.name=="JSXSelfClosingTag"||t.name=="JSXFragmentTag")return t;if(t.name=="JSXEscape"||!t.parent)return null;t=t.parent}}function pO(t,e,i=t.length){for(let n=e?.firstChild;n;n=n.nextSibling)if(n.name=="JSXIdentifier"||n.name=="JSXBuiltin"||n.name=="JSXNamespacedName"||n.name=="JSXMemberExpression")return t.sliceString(n.from,Math.min(n.to,i));return""}const k8=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),E8=_e.inputHandler.of((t,e,i,n,r)=>{if((k8?t.composing:t.compositionStarted)||t.state.readOnly||e!=i||n!=">"&&n!="/"||!zr.isActiveAt(t.state,e,-1))return!1;let s=r(),{state:a}=s,l=a.changeByRange(u=>{var h;let{head:c}=u,p=Qt(a).resolveInner(c-1,-1),v;if(p.name=="JSXStartTag"&&(p=p.parent),!(a.doc.sliceString(c-1,c)!=n||p.name=="JSXAttributeValue"&&p.to>c)){if(n==">"&&p.name=="JSXFragmentTag")return{range:u,changes:{from:c,insert:"</>"}};if(n=="/"&&p.name=="JSXStartCloseTag"){let g=p.parent,b=g.parent;if(b&&g.from==c-2&&((v=pO(a.doc,b.firstChild,c))||((h=b.firstChild)===null||h===void 0?void 0:h.name)=="JSXFragmentTag")){let m=`${v}>`;return{range:Oe.cursor(c+m.length,-1),changes:{from:c,insert:m}}}}else if(n==">"){let g=C8(p);if(g&&g.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(a.doc.sliceString(c,c+2))&&(v=pO(a.doc,g,c)))return{range:u,changes:{from:c,insert:`</${v}>`}}}}return{range:u}});return l.changes.empty?!1:(t.dispatch([s,a.update(l,{userEvent:"input.complete",scrollIntoView:!0})]),!0)}),A8=zp({String:ne.string,Number:ne.number,"True False":ne.bool,PropertyName:ne.propertyName,Null:ne.null,", :":ne.separator,"[ ]":ne.squareBracket,"{ }":ne.brace}),D8=Yo.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O",goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"⚠ JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array",maxTerm:25,nodeProps:[["isolate",-2,6,11,""],["openedBy",7,"{",14,"["],["closedBy",8,"}",15,"]"]],propSources:[A8],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0}),_8=zo.define({name:"json",parser:D8.configure({props:[Zp.add({Object:mo({except:/^\s*\}/}),Array:mo({except:/^\s*\]/})}),Up.add({"Object Array":FS})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function I8(){return new LS(_8)}const N8="#e5c07b",mO="#e06c75",M8="#56b6c2",$8="#ffffff",Nu="#abb2bf",Xd="#7d8799",L8="#61afef",B8="#98c379",gO="#d19a66",Q8="#c678dd",F8="#21252b",yO="#2c313a",vO="#282c34",Of="#353a42",R8="#3E4451",OO="#528bff",z8=_e.theme({"&":{color:Nu,backgroundColor:vO},".cm-content":{caretColor:OO},".cm-cursor, .cm-dropCursor":{borderLeftColor:OO},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:R8},".cm-panels":{backgroundColor:F8,color:Nu},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:vO,color:Xd,border:"none"},".cm-activeLineGutter":{backgroundColor:yO},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:Of},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:Of,borderBottomColor:Of},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:yO,color:Nu}}},{dark:!0}),X8=cl.define([{tag:ne.keyword,color:Q8},{tag:[ne.name,ne.deleted,ne.character,ne.propertyName,ne.macroName],color:mO},{tag:[ne.function(ne.variableName),ne.labelName],color:L8},{tag:[ne.color,ne.constant(ne.name),ne.standard(ne.name)],color:gO},{tag:[ne.definition(ne.name),ne.separator],color:Nu},{tag:[ne.typeName,ne.className,ne.number,ne.changed,ne.annotation,ne.modifier,ne.self,ne.namespace],color:N8},{tag:[ne.operator,ne.operatorKeyword,ne.url,ne.escape,ne.regexp,ne.link,ne.special(ne.string)],color:M8},{tag:[ne.meta,ne.comment],color:Xd},{tag:ne.strong,fontWeight:"bold"},{tag:ne.emphasis,fontStyle:"italic"},{tag:ne.strikethrough,textDecoration:"line-through"},{tag:ne.link,color:Xd,textDecoration:"underline"},{tag:ne.heading,fontWeight:"bold",color:mO},{tag:[ne.atom,ne.bool,ne.special(ne.variableName)],color:gO},{tag:[ne.processingInstruction,ne.string,ne.inserted],color:B8},{tag:ne.invalid,color:$8}]),j8=[z8,WS(X8)],go=ot({__name:"CodeEditor",props:{modelValue:{},language:{default:"typescript"},readonly:{type:Boolean,default:!1},placeholder:{default:""},minHeight:{default:"100px"}},emits:["update:modelValue"],setup(t,{emit:e}){const i=t,n=e,r=Qe(()=>{const a=[i.language==="json"?I8():T8({typescript:!0}),j8,_e.theme({"&":{backgroundColor:"var(--color-surface-base, #0f172a)",minHeight:i.minHeight},".cm-gutters":{backgroundColor:"var(--color-surface-base, #0f172a)",borderRight:"1px solid var(--color-border-default)",color:"var(--color-text-muted)"},".cm-activeLineGutter":{backgroundColor:"color-mix(in srgb, var(--color-accent) 10%, transparent)"},".cm-activeLine":{backgroundColor:"color-mix(in srgb, var(--color-accent) 5%, transparent)"},"&.cm-focused":{outline:"none"},".cm-cursor":{borderLeftColor:"var(--color-accent)"},".cm-selectionBackground":{backgroundColor:"color-mix(in srgb, var(--color-accent) 20%, transparent) !important"},".cm-content":{caretColor:"var(--color-accent)"}}),_e.lineWrapping];return i.readonly&&a.push(_e.editable.of(!1)),a});function s(a){n("update:modelValue",a)}return(a,l)=>(ve(),Ct(Se(DR),{"model-value":t.modelValue,extensions:r.value,placeholder:t.placeholder,style:hi({minHeight:t.minHeight,fontSize:"12px",borderRadius:"6px",overflow:"hidden",border:"1px solid var(--color-border-default)"}),"onUpdate:modelValue":s},null,8,["model-value","extensions","placeholder","style"]))}}),Z8={class:"ai-diff"},V8={key:0,class:"diff-explanation"},U8={class:"diff-code"},q8={class:"diff-actions"},W8=ot({__name:"AiDiffView",props:{oldCode:{},newCode:{},explanation:{}},emits:["accept","dismiss"],setup(t){const e=t,i=Qe(()=>ST(e.oldCode,e.newCode));return(n,r)=>(ve(),be("div",Z8,[t.explanation?(ve(),be("div",V8,Te(t.explanation),1)):Re("",!0),pe("div",U8,[(ve(!0),be(mt,null,Jt(i.value,(s,a)=>(ve(),be("div",{key:a,class:bt(["diff-line",{added:s.added,removed:s.removed}])},Te(s.value),3))),128))]),pe("div",q8,[pe("button",{class:"diff-accept",onClick:r[0]||(r[0]=s=>n.$emit("accept"))},Te(n.$t("tools.aiDiff.accept")),1),pe("button",{class:"diff-dismiss",onClick:r[1]||(r[1]=s=>n.$emit("dismiss"))},Te(n.$t("tools.aiDiff.dismiss")),1)])]))}}),Y8=CO(W8,[["__scopeId","data-v-01c9471b"]]),G8={class:"block-header"},H8={class:"block-badge"},J8=["value","placeholder"],K8=["disabled","title"],e6=["disabled","title"],t6={key:0,class:"thinking-bar nodrag"},i6={class:"thinking-text"},n6={key:1,class:"insights-row"},r6={key:2,class:"insights-row"},s6=["onClick"],a6={key:3,class:"insight-detail nodrag nowheel"},o6={class:"insight-desc"},l6={class:"insight-suggestion-label"},u6={key:4,class:"exec-badge-row"},c6={key:0,class:"exec-badge exec-executing"},h6={key:2,class:"exec-badge exec-failed"},f6=["disabled"],d6={key:5,class:"exec-result-panel nodrag nowheel"},p6={class:"block-section"},m6=["value","placeholder"],g6={key:6,class:"block-section nodrag nowheel"},y6=["placeholder"],v6={class:"intent-actions"},O6=["disabled"],x6={key:0,class:"intent-error"},b6={class:"block-section"},S6={class:"param-header"},w6=["value","onChange","placeholder"],P6=["value","onChange","placeholder"],T6=["onClick"],C6={key:0,class:"param-empty"},k6={class:"block-section probe-section"},E6={class:"probe-badge"},A6={key:0,class:"probe-panel nodrag nowheel"},D6={class:"probe-url-row"},_6=["placeholder"],I6=["disabled"],N6={class:"diag-row"},M6={key:0,class:"diag-tag"},$6={key:1,class:"diag-tag"},L6={key:2,class:"diag-tag diag-openapi"},B6={key:0,class:"diag-auth"},Q6={class:"config-section"},F6={class:"config-header"},R6={class:"config-label"},z6=["onUpdate:modelValue","placeholder"],X6=["onUpdate:modelValue","placeholder"],j6=["onClick","title"],Z6=["onClick"],V6={key:1,class:"config-section"},U6={class:"config-label"},q6={key:2,class:"ep-section"},W6={class:"config-label"},Y6=["placeholder"],G6={class:"ep-list"},H6=["onClick"],J6={class:"ep-path"},K6={key:0,class:"ep-summary"},e7={key:0,class:"param-empty"},t7={class:"probe-ai-row"},i7=["disabled"],n7={key:0,class:"auto-map-reasoning"},r7={class:"probe-tree"},s7={key:1,class:"probe-footer"},a7={class:"probe-count"},o7={key:4,class:"probe-error"},l7={key:5,class:"probe-raw"},u7={key:7,class:"block-section mappings-section"},c7={class:"mappings-header"},h7={key:0,class:"stale-badge",title:"Some mapped fields are missing from the function body"},f7={class:"mappings-list"},d7=["title"],p7={class:"block-section nodrag nowheel"},m7=ot({__name:"ToolFunctionNode",props:{data:{}},setup(t){const e=e1(),i=t;function n(J,ue){i.data.onUpdate?.(J,ue)}function r(J,ue,me){const Pe=i.data.parameters.map((Ve,He)=>He===J?{...Ve,[ue]:me}:{...Ve});n("parameters",Pe)}function s(){n("parameters",[...i.data.parameters,{name:"arg",type:"string"}])}function a(J){n("parameters",i.data.parameters.filter((ue,me)=>me!==J))}const l=Qe(()=>{const J=i.data.mappings;if(!J||J.length===0)return[];const ue=i.data.body;return J.filter(me=>!ue.includes(me.returnKey))}),u=Qe(()=>l.value.length>0),h=ze(!1),c=ze(!1),p=ze(e.getIntent(i.data.uid)??""),v=Qe(()=>e.drafts.get(i.data.uid)),g=Qe(()=>v.value?.loading??!1);async function b(){if(!p.value.trim()||!e.effectiveModel)return;e.setIntent(i.data.uid,p.value),e.setDraft(i.data.uid,{toolId:i.data.uid,phase:"draft",code:"",explanation:"",loading:!0,intentText:p.value});const J=await q$({model:e.effectiveModel,toolName:i.data.name,description:i.data.description,parameters:i.data.parameters,probeResponseSample:Q.value??void 0,intent:p.value});J.error?e.setDraft(i.data.uid,{toolId:i.data.uid,phase:"draft",code:"",explanation:"",loading:!1,error:J.error,intentText:p.value}):e.setDraft(i.data.uid,{toolId:i.data.uid,phase:"draft",code:J.code,explanation:J.explanation,loading:!1,trainingPairId:J.trainingPairId,intentText:p.value})}function m(){const J=v.value;!J||!J.code||(n("body",J.code),J.trainingPairId&&qd.updateAccepted(J.trainingPairId),e.clearDraft(i.data.uid))}function x(){e.clearDraft(i.data.uid)}const O=Qe(()=>e.insights.get(i.data.uid)),P=ze(null),S=ze(!1);Ge(()=>i.data.body,()=>{e.insights.get(i.data.uid)&&(e.clearInsights(i.data.uid),P.value=null)});const w=ze(null),C=["Thinking","Cogitating","Analyzing","Flexing","Scrutinizing","Neuroticizing","Polarizing","Rasterizing","Criticizing","Parameterizing","Inspecting","Evaluating","Dissecting","Probing","Examining","Parsing","Reviewing","Synthesizing"],E=ze(0);let k=null;const A=Qe(()=>C[E.value%C.length]);function $(){E.value=0,k=setInterval(()=>{E.value++},1500)}function F(){k&&(clearInterval(k),k=null)}function N(){if(!P.value?.suggestedCode){console.warn("[Insight] No suggestedCode to apply");return}const J=P.value.suggestedCode;console.log("[Insight] Applying fix, code length:",J.length),n("body",J),P.value=null}async function B(){if(!e.effectiveModel){w.value="No AI model selected. Choose one in the Canvas AI model selector.";return}S.value=!0,w.value=null,P.value=null,$();const J=await W$({model:e.effectiveModel,toolName:i.data.name,code:i.data.body,parameters:i.data.parameters});S.value=!1,F(),J.error?w.value=J.error:e.setInsights(i.data.uid,{toolId:i.data.uid,insights:J.insights,codeHash:i.data.body})}const X=ze(!1),I=ze("");async function Z(){if(!e.effectiveModel||!Q.value)return;X.value=!0,I.value="";const J=await Y$({model:e.effectiveModel,toolName:i.data.name,description:i.data.description,probeResponseSample:Q.value});X.value=!1,!J.error&&J.paths.length>0&&(I.value=J.reasoning,xe.value=new Set(J.paths))}const j=ze(!1);async function te(){if(!e.effectiveModel)return;j.value=!0;const J=e.getIntent(i.data.uid),ue=await G$({model:e.effectiveModel,toolName:i.data.name,code:i.data.body,parameters:i.data.parameters,error:i.data.lastCallError??"Unknown error",arguments:i.data.lastCallArguments??{},originalIntent:J});j.value=!1,!ue.error&&ue.fixedCode&&e.setDraft(i.data.uid,{toolId:i.data.uid,phase:"fix",code:ue.fixedCode,explanation:ue.explanation,loading:!1,trainingPairId:ue.trainingPairId})}const q=ze(!1),oe=ze("idle"),ae=ze(i.data.probeConfig?.url??""),he=ze(i.data.probeConfig?.method??"GET"),D=ze(null),V=ze(null),L=ze(null),se=ze(i.data.probeConfig?.headers?Object.entries(i.data.probeConfig.headers).map(([J,ue])=>({key:J,value:ue})):[]),fe=ze(new Set(i.data.probeConfig?.secretHeaders??[]));function ie(J){const ue=se.value[J].key.trim();if(!ue)return;const me=new Set(fe.value);me.has(ue)?me.delete(ue):me.add(ue),fe.value=me}const R=ze(""),Q=ze(null),xe=ze(new Set),Fe=ze(""),ke=ze(null),$e=Qe(()=>{if(!L.value)return[];const J=Fe.value.toLowerCase();return J?L.value.endpoints.filter(ue=>ue.path.toLowerCase().includes(J)||ue.summary?.toLowerCase().includes(J)||ue.operationId?.toLowerCase().includes(J)):L.value.endpoints});function ee(J){return J>=200&&J<300?"var(--color-success)":J>=300&&J<400?"var(--color-warning, #f9e2af)":"var(--color-error)"}function G(J){switch(J){case"GET":return"var(--color-accent)";case"POST":return"var(--color-success)";case"PUT":return"var(--color-warning, #f9e2af)";case"DELETE":return"var(--color-error)";case"PATCH":return"#cba6f7";default:return"var(--color-text-muted)"}}async function re(){const J=ae.value.trim();if(!J)return;oe.value="discovering",D.value=null,V.value=null,L.value=null,Q.value=null,xe.value=new Set,ke.value=null;const ue={};for(const Ve of se.value)Ve.key.trim()&&(ue[Ve.key.trim()]=Ve.value);const[me,Pe]=await Promise.allSettled([n3(J,{method:he.value,headers:Object.keys(ue).length>0?ue:void 0,body:(he.value==="POST"||he.value==="PUT")&&R.value||void 0}),a3(J)]);me.status==="fulfilled"&&(D.value=me.value,me.value.data&&(Q.value=me.value.data),me.value.authHint&&se.value.length===0&&(me.value.authHint.type==="bearer"?se.value=[{key:"Authorization",value:"Bearer "}]:me.value.authHint.type==="apikey"?se.value=[{key:"X-API-Key",value:""}]:me.value.authHint.type==="basic"&&(se.value=[{key:"Authorization",value:"Basic "}]))),Pe.status==="fulfilled"&&Pe.value.spec&&(V.value=Pe.value,L.value=K$(Pe.value.spec)),oe.value="diagnosed"}function Y(J){ke.value=J;const ue=L.value?.info.baseUrl??"",me=ue?`${ue.replace(/\/$/,"")}${J.path}`:J.path;ae.value=me,he.value=J.method;const Pe=J.operationId??J.path.replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_|_$/g,"");n("name",Pe),(J.summary||J.description)&&n("description",J.summary??J.description??"");const Ve=J.parameters.filter(He=>He.in==="query"||He.in==="path").map(He=>({name:He.name,type:He.type}));Ve.length>0&&n("parameters",Ve)}function H(){se.value=[...se.value,{key:"",value:""}]}function le(J){se.value=se.value.filter((ue,me)=>me!==J)}function ye(J){const ue=new Set(xe.value);ue.has(J)?ue.delete(J):ue.add(J),xe.value=ue}function we(){const J=Array.from(xe.value);if(J.length===0)return;const ue={};for(const Je of se.value)Je.key.trim()&&(ue[Je.key.trim()]=Je.value);const me=Array.from(fe.value),{body:Pe,addedParams:Ve}=mT(ae.value.trim(),J,{method:he.value!=="GET"?he.value:void 0,headers:Object.keys(ue).length>0?ue:void 0,body:(he.value==="POST"||he.value==="PUT")&&R.value||void 0,secretHeaders:me.length>0?me:void 0});n("body",Pe);const He=gT(J);if(n("mappings",He),Q.value){const Je=yT(He,Q.value);n("returnSchema",Je)}const Tt={url:ae.value.trim(),method:he.value,headers:ue,...me.length>0?{secretHeaders:me}:{}};if(n("probeConfig",Tt),Ve.length>0){const Je=i.data.parameters.map(qt=>qt.name),ei=Ve.filter(qt=>!Je.includes(qt.name));ei.length>0&&n("parameters",[...i.data.parameters,...ei])}oe.value="picked"}return(J,ue)=>(ve(),be("div",{class:bt(["tool-block",{executing:t.data.executionStatus==="executing",completed:t.data.executionStatus==="completed",failed:t.data.executionStatus==="failed"}])},[xt(Se(Es),{type:"target",position:Se(Xe).Top},null,8,["position"]),pe("div",G8,[pe("span",H8,Te(J.$t("tools.node.badge")),1),pe("input",{class:"block-name-input",value:t.data.name,onChange:ue[0]||(ue[0]=me=>n("name",me.target.value)),placeholder:J.$t("tools.node.functionNamePlaceholder")},null,40,J8),pe("button",{class:bt(["ai-header-btn",{active:c.value}]),disabled:g.value,title:J.$t("tools.node.draftWithAi"),onClick:ue[1]||(ue[1]=Yi(me=>c.value=!c.value,["stop"]))},Te(g.value?"...":"✨"),11,K8),pe("button",{class:"ai-header-btn ai-analyze",disabled:S.value||!t.data.body.trim(),title:J.$t("tools.node.aiInsights"),onClick:Yi(B,["stop"])},Te(S.value?"...":"🔍"),9,e6)]),S.value?(ve(),be("div",t6,[ue[14]||(ue[14]=pe("span",{class:"thinking-dot"},null,-1)),pe("span",i6,Te(A.value)+"...",1)])):Re("",!0),w.value?(ve(),be("div",n6,[pe("span",{class:"insight-badge error",onClick:ue[2]||(ue[2]=Yi(me=>w.value=null,["stop"]))},Te(w.value),1)])):Re("",!0),O.value?.insights.length?(ve(),be("div",r6,[(ve(!0),be(mt,null,Jt(O.value.insights,(me,Pe)=>(ve(),be("span",{key:Pe,class:bt(["insight-badge",me.severity]),onClick:Yi(Ve=>P.value=P.value===me?null:me,["stop"])},Te(me.title),11,s6))),128))])):Re("",!0),P.value?(ve(),be("div",a6,[pe("p",o6,Te(P.value.description),1),P.value.suggestedCode?(ve(),be(mt,{key:0},[pe("p",l6,Te(J.$t("tools.node.insightSuggestionLabel")),1),xt(go,{"model-value":P.value.suggestedCode,language:"typescript",readonly:!0,"min-height":"60px"},null,8,["model-value"])],64)):Re("",!0),pe("div",{class:"insight-actions",onMousedown:ue[4]||(ue[4]=Yi(()=>{},["stop"]))},[P.value.suggestedCode?(ve(),be("button",{key:0,class:"insight-apply",onClick:Yi(N,["stop","prevent"])},Te(J.$t("tools.node.applyFix")),1)):Re("",!0),pe("button",{class:"insight-close",onClick:ue[3]||(ue[3]=Yi(me=>P.value=null,["stop"]))},"× "+Te(J.$t("tools.node.closeInsight")),1)],32)])):Re("",!0),t.data.executionStatus&&t.data.executionStatus!=="idle"?(ve(),be("div",u6,[t.data.executionStatus==="executing"?(ve(),be("span",c6,Te(J.$t("tools.node.running")),1)):t.data.executionStatus==="completed"?(ve(),be("button",{key:1,class:"exec-badge exec-completed",onClick:ue[5]||(ue[5]=Yi(me=>h.value=!h.value,["stop"]))}," ✓ "+Te(t.data.lastDurationMs!=null?`${t.data.lastDurationMs}ms`:J.$t("tools.node.done")),1)):t.data.executionStatus==="failed"?(ve(),be("span",h6," ✗ "+Te(J.$t("tools.node.failed")),1)):Re("",!0),t.data.executionStatus==="failed"?(ve(),be("button",{key:3,class:"ai-fix-btn",disabled:j.value,onClick:Yi(te,["stop"])},Te(j.value?"...":J.$t("tools.node.aiFix")),9,f6)):Re("",!0)])):Re("",!0),h.value&&t.data.lastResult!==void 0?(ve(),be("div",d6,[xt(ng,{label:"result",value:t.data.lastResult,path:"","selected-paths":new Set,depth:0,onTogglePath:()=>{}},null,8,["value","selected-paths"])])):Re("",!0),pe("div",p6,[pe("label",null,Te(J.$t("tools.node.description")),1),pe("input",{class:"block-input",value:t.data.description,onChange:ue[6]||(ue[6]=me=>n("description",me.target.value)),placeholder:J.$t("tools.node.descriptionPlaceholder")},null,40,m6)]),c.value?(ve(),be("div",g6,[pe("label",null,Te(J.$t("tools.node.intent")),1),Vn(pe("textarea",{"onUpdate:modelValue":ue[7]||(ue[7]=me=>p.value=me),class:"intent-textarea",placeholder:J.$t("tools.node.intentPlaceholder"),rows:"2"},null,8,y6),[[ia,p.value]]),pe("div",v6,[pe("button",{class:"intent-generate-btn",disabled:g.value||!p.value.trim(),onClick:b},Te(g.value?J.$t("tools.node.generating"):J.$t("tools.node.generate")),9,O6)]),v.value?.error?(ve(),be("div",x6,Te(v.value.error),1)):Re("",!0)])):Re("",!0),pe("div",b6,[pe("div",S6,[pe("label",null,Te(J.$t("tools.node.parameters")),1),pe("button",{class:"param-add-btn",onClick:s},Te(J.$t("tools.node.addParam")),1)]),(ve(!0),be(mt,null,Jt(t.data.parameters,(me,Pe)=>(ve(),be("div",{key:Pe,class:"param-row"},[pe("input",{class:"param-name",value:me.name,onChange:Ve=>r(Pe,"name",Ve.target.value),placeholder:J.$t("tools.node.paramNamePlaceholder")},null,40,w6),pe("input",{class:"param-type",value:me.type,onChange:Ve=>r(Pe,"type",Ve.target.value),placeholder:J.$t("tools.node.paramTypePlaceholder")},null,40,P6),pe("button",{class:"param-remove-btn",onClick:Ve=>a(Pe)},"×",8,T6)]))),128)),t.data.parameters.length===0?(ve(),be("div",C6,Te(J.$t("tools.node.noParameters")),1)):Re("",!0)]),pe("div",k6,[pe("div",{class:"probe-toggle",onClick:ue[8]||(ue[8]=me=>q.value=!q.value)},[pe("span",{class:bt(["toggle-arrow",{open:q.value}])},"▶",2),pe("label",null,Te(J.$t("tools.node.probeAndPick")),1),pe("span",E6,Te(J.$t("tools.node.apiBadge")),1)]),q.value?(ve(),be("div",A6,[pe("div",D6,[Vn(pe("select",{"onUpdate:modelValue":ue[9]||(ue[9]=me=>he.value=me),class:"method-select"},[...ue[15]||(ue[15]=[pe("option",null,"GET",-1),pe("option",null,"POST",-1),pe("option",null,"PUT",-1),pe("option",null,"DELETE",-1)])],512),[[uT,he.value]]),Vn(pe("input",{"onUpdate:modelValue":ue[10]||(ue[10]=me=>ae.value=me),class:"block-input probe-url",placeholder:J.$t("tools.node.urlPlaceholder"),onKeydown:cT(re,["enter"])},null,40,_6),[[ia,ae.value]]),pe("button",{class:"probe-btn",disabled:oe.value==="discovering"||!ae.value.trim(),onClick:re},Te(oe.value==="discovering"?"...":J.$t("tools.node.probe")),9,I6)]),D.value&&oe.value!=="idle"?(ve(),be(mt,{key:0},[pe("div",N6,[pe("span",{class:"diag-status",style:hi({background:ee(D.value.status)})},Te(D.value.status),5),D.value.headers["content-type"]?(ve(),be("span",M6,Te(D.value.headers["content-type"].split(";")[0]),1)):Re("",!0),D.value.headers.server?(ve(),be("span",$6,Te(D.value.headers.server),1)):Re("",!0),L.value?(ve(),be("span",L6," OpenAPI · "+Te(L.value.endpoints.length)+" endpoints ",1)):Re("",!0)]),D.value.authHint?(ve(),be("div",B6,[ue[16]||(ue[16]=pe("span",{class:"diag-auth-icon"},"🔒",-1)),pe("span",null,Te(D.value.authHint.message),1)])):Re("",!0)],64)):Re("",!0),pe("div",Q6,[pe("div",F6,[pe("span",R6,Te(J.$t("tools.node.headers")),1),pe("button",{class:"param-add-btn",onClick:H},Te(J.$t("tools.node.addHeader")),1)]),(ve(!0),be(mt,null,Jt(se.value,(me,Pe)=>(ve(),be("div",{key:Pe,class:"param-row"},[Vn(pe("input",{class:"param-name","onUpdate:modelValue":Ve=>se.value[Pe].key=Ve,placeholder:J.$t("tools.node.headerNamePlaceholder")},null,8,z6),[[ia,se.value[Pe].key]]),Vn(pe("input",{class:bt(["param-type",{"secret-masked":fe.value.has(se.value[Pe].key.trim())}]),"onUpdate:modelValue":Ve=>se.value[Pe].value=Ve,placeholder:J.$t("tools.node.headerValuePlaceholder")},null,10,X6),[[ia,se.value[Pe].value]]),pe("button",{class:bt(["secret-toggle-btn",{active:fe.value.has(se.value[Pe].key.trim())}]),onClick:Ve=>ie(Pe),title:J.$t("tools.node.markAsSecret")}," 🔒 ",10,j6),pe("button",{class:"param-remove-btn",onClick:Ve=>le(Pe)},"×",8,Z6)]))),128))]),he.value==="POST"||he.value==="PUT"?(ve(),be("div",V6,[pe("span",U6,Te(J.$t("tools.node.requestBody")),1),xt(go,{modelValue:R.value,"onUpdate:modelValue":ue[11]||(ue[11]=me=>R.value=me),language:"json","min-height":"60px",placeholder:'{"key": "value"}'},null,8,["modelValue"])])):Re("",!0),L.value&&L.value.endpoints.length>0?(ve(),be("div",q6,[pe("span",W6,Te(J.$t("tools.node.endpoints")),1),Vn(pe("input",{"onUpdate:modelValue":ue[12]||(ue[12]=me=>Fe.value=me),class:"block-input ep-search",placeholder:J.$t("tools.node.searchEndpoints")},null,8,Y6),[[ia,Fe.value]]),pe("div",G6,[(ve(!0),be(mt,null,Jt($e.value,me=>(ve(),be("div",{key:me.method+me.path,class:bt(["ep-row",{selected:ke.value===me}]),onClick:Pe=>Y(me)},[pe("span",{class:"ep-method",style:hi({background:G(me.method)})},Te(me.method),5),pe("span",J6,Te(me.path),1),me.summary?(ve(),be("span",K6,Te(me.summary),1)):Re("",!0)],10,H6))),128)),$e.value.length===0?(ve(),be("div",e7,Te(J.$t("tools.node.noMatchingEndpoints")),1)):Re("",!0)])])):Re("",!0),Q.value&&D.value&&D.value.ok?(ve(),be(mt,{key:3},[pe("div",t7,[pe("button",{class:"ai-suggest-btn",disabled:X.value,onClick:Z},Te(X.value?J.$t("tools.node.thinking"):J.$t("tools.node.aiSuggest")),9,i7)]),I.value?(ve(),be("div",n7,Te(I.value),1)):Re("",!0),pe("div",r7,[xt(ng,{label:"response",value:Q.value,path:"","selected-paths":xe.value,depth:0,onTogglePath:ye},null,8,["value","selected-paths"])]),xe.value.size>0?(ve(),be("div",s7,[pe("span",a7,Te(xe.value.size)+" "+Te(xe.value.size!==1?J.$t("tools.node.fields"):J.$t("tools.node.field")),1),pe("button",{class:"probe-apply-btn",onClick:we},Te(J.$t("tools.node.apply")),1)])):Re("",!0)],64)):Re("",!0),D.value&&D.value.error&&!D.value.data?(ve(),be("div",o7,Te(D.value.error),1)):Re("",!0),D.value?.rawText?(ve(),be("pre",l7,Te(D.value.rawText),1)):Re("",!0)])):Re("",!0)]),t.data.mappings&&t.data.mappings.length>0?(ve(),be("div",u7,[pe("div",c7,[pe("label",null,Te(J.$t("tools.node.mappings")),1),u.value?(ve(),be("span",h7,Te(J.$t("tools.node.outOfSync")),1)):Re("",!0)]),pe("div",f7,[(ve(!0),be(mt,null,Jt(t.data.mappings,me=>(ve(),be("span",{key:me.jsonPath,class:bt(["mapping-tag",{stale:l.value.some(Pe=>Pe.jsonPath===me.jsonPath)}]),title:me.jsonPath},Te(me.returnKey),11,d7))),128))])])):Re("",!0),pe("div",p7,[pe("label",null,Te(J.$t("tools.node.bodyLabel")),1),v.value&&!v.value.loading&&v.value.code?(ve(),Ct(Y8,{key:0,"old-code":t.data.body,"new-code":v.value.code,explanation:v.value.explanation,onAccept:m,onDismiss:x},null,8,["old-code","new-code","explanation"])):(ve(),Ct(go,{key:1,"model-value":t.data.body,language:"typescript","min-height":"100px",placeholder:J.$t("tools.node.bodyPlaceholder"),"onUpdate:modelValue":ue[13]||(ue[13]=me=>n("body",me))},null,8,["model-value","placeholder"]))]),xt(Se(Es),{type:"source",position:Se(Xe).Bottom},null,8,["position"])],2))}}),g7=CO(m7,[["__scopeId","data-v-655b6640"]]),y7={class:"flex h-full w-full relative"},v7={key:0,class:"w-[440px] flex flex-col border-e border-border-default bg-surface-base shrink-0"},O7={class:"p-3 border-b border-border-default flex items-center justify-between"},x7={class:"flex items-center gap-2"},b7={class:"text-sm font-semibold text-text-primary"},S7={class:"flex border-b border-border-default"},w7={class:"flex-1 flex flex-col p-3 gap-2 min-h-0 overflow-auto"},P7={class:"flex-1 flex flex-col p-3 gap-2 min-h-0"},T7={class:"flex items-center justify-between"},C7={class:"text-xs text-text-muted"},k7={class:"flex-1 overflow-auto"},E7={key:0,class:"p-3 border-t border-border-default"},A7={class:"text-xs text-warning uppercase tracking-wider"},D7={class:"mt-1 text-xs text-warning/80 list-disc ps-4 space-y-0.5"},_7={class:"p-3 border-t border-border-default text-xs text-text-muted"},I7={class:"flex-1 relative min-h-0 overflow-hidden"},N7={key:0,class:"absolute inset-0 flex flex-col items-center justify-center pointer-events-none"},M7={class:"text-center pointer-events-auto"},$7={class:"text-text-muted text-sm mb-4"},L7={class:"flex items-center gap-3"},B7={class:"absolute top-3 right-3 z-10 flex items-center gap-2"},Q7=["value"],F7={value:""},R7=["value"],z7=["title"],X7=["title"],j7={key:1,class:"absolute inset-0 z-50 flex items-center justify-center bg-black/40"},Z7={class:"rounded-xl bg-surface-raised border border-border-default p-6 shadow-2xl max-w-xs text-center"},V7={class:"text-sm text-text-primary mb-1 font-semibold"},U7={class:"text-xs text-text-muted mb-4"},q7={class:"flex items-center justify-center gap-3"},W7={key:1,class:"w-[280px] flex flex-col border-s border-border-default bg-surface-base shrink-0"},Y7={class:"p-3 border-b border-border-default flex items-center justify-between"},G7={class:"text-sm font-semibold text-text-primary"},H7={class:"flex-1 overflow-y-auto p-2 space-y-1"},J7=["title","onClick"],K7={class:"min-w-0 flex-1"},e9={class:"truncate text-[10px] text-text-muted"},t9=["title","onClick"],i9={key:0,class:"px-3 py-4 text-xs text-text-muted text-center"},n9={class:"p-3 border-t border-border-default text-xs text-text-muted"},r9=ot({__name:"ToolCanvasView",emits:["add-template"],setup(t,{emit:e}){const i=e,n={"tool-function":io(g7)},r=Ud(),s=e1(),a=PO(),{flowNodes:l,flowEdges:u,combinedCode:h,codeWarnings:c,codeSyncStatus:p,schemas:v,onNodeDragStop:g,onNodesDelete:b,onCodeEdit:m,addNewTool:x}=z$(),{fitView:O}=yt();fn(()=>{a.models.length===0&&a.fetchModels()});const P=ze(!1),S=ze("code");Ge(P,()=>{l.value.length>0&&setTimeout(()=>{O({padding:.3,duration:300})},50)});const w=ze(!1);Ge(w,()=>{l.value.length>0&&setTimeout(()=>{O({padding:.3,duration:300})},50)});function C(X){r.removeTool(X)}const E=ze(!1);function k(){r.clearAll(),E.value=!1}const A=Qe(()=>JSON.stringify(v.value,null,2));function $(X){g({node:X.node})}function F(X){for(const I of X)I.type==="remove"&&b([{id:I.id}])}function N(){const X=x();vi(()=>{O({nodes:[X],padding:.5,duration:300})})}async function B(){try{await navigator.clipboard.writeText(A.value)}catch{}}return(X,I)=>(ve(),be("div",y7,[P.value?(ve(),be("div",v7,[pe("div",O7,[pe("div",x7,[pe("span",b7,Te(X.$t("tools.canvas.codePanel")),1),pe("span",{class:bt(["sync-dot",Se(p)])},null,2)]),pe("button",{class:"text-xs text-text-muted hover:text-text-primary transition-colors bg-transparent border-none cursor-pointer",onClick:I[0]||(I[0]=Z=>P.value=!1)},Te(X.$t("tools.canvas.close")),1)]),pe("div",S7,[pe("button",{onClick:I[1]||(I[1]=Z=>S.value="code"),class:bt(["flex-1 px-3 py-2 text-xs uppercase tracking-wider border-none cursor-pointer transition-colors",S.value==="code"?"bg-surface-raised text-accent font-bold":"bg-transparent text-text-muted"])},Te(X.$t("tools.canvas.source")),3),pe("button",{onClick:I[2]||(I[2]=Z=>S.value="schema"),class:bt(["flex-1 px-3 py-2 text-xs uppercase tracking-wider border-none cursor-pointer transition-colors",S.value==="schema"?"bg-surface-raised text-success font-bold":"bg-transparent text-text-muted"])},Te(X.$t("tools.canvas.schema")),3)]),Vn(pe("div",w7,[xt(go,{"model-value":Se(h),language:"typescript",placeholder:"Combined tool source...","min-height":"200px","onUpdate:modelValue":Se(m)},null,8,["model-value","onUpdate:modelValue"])],512),[[ig,S.value==="code"]]),Vn(pe("div",P7,[pe("div",T7,[pe("span",C7,Te(X.$t("tools.canvas.schemaManifest")),1),pe("button",{onClick:B,class:"px-2 py-1 text-xs rounded bg-surface-overlay text-text-secondary hover:bg-surface-raised transition-colors cursor-pointer border-none"},Te(X.$t("tools.canvas.copy")),1)]),pe("div",k7,[xt(go,{"model-value":A.value,language:"json",readonly:!0,"min-height":"200px"},null,8,["model-value"])])],512),[[ig,S.value==="schema"]]),Se(c).length>0?(ve(),be("div",E7,[pe("label",A7,Te(X.$t("tools.canvas.warnings")),1),pe("ul",D7,[(ve(!0),be(mt,null,Jt(Se(c),(Z,j)=>(ve(),be("li",{key:j},Te(Z),1))),128))])])):Re("",!0),pe("div",_7,Te(Se(l).length)+" tool"+Te(Se(l).length!==1?"s":"")+" · "+Te(Se(v).length)+" schema"+Te(Se(v).length!==1?"s":""),1)])):Re("",!0),pe("div",I7,[xt(Se(AD),{nodes:Se(l),edges:Se(u),"node-types":n,"default-viewport":{x:40,y:40,zoom:1},"min-zoom":.3,"max-zoom":2,"fit-view-on-init":Se(l).length>0,"fit-view-on-init-options":{padding:.3,minZoom:.6,maxZoom:1.2},class:"canvas-flow",onNodeDragStop:$,onNodesChange:F},{default:Ki(()=>[xt(Se(BD),{gap:24,size:1,"pattern-color":"var(--color-border-default)"}),xt(Se(p_)),xt(Se(GM))]),_:1},8,["nodes","edges","fit-view-on-init"]),Se(l).length===0?(ve(),be("div",N7,[pe("div",M7,[pe("div",$7,Te(X.$t("tools.canvas.emptyState")),1),pe("div",L7,[pe("button",{onClick:N,class:"px-4 py-2 rounded-lg bg-accent text-surface-base font-semibold text-sm hover:opacity-90 transition-opacity cursor-pointer border-none"},Te(X.$t("tools.canvas.newTool")),1),pe("button",{onClick:I[3]||(I[3]=Z=>i("add-template")),class:"px-4 py-2 rounded-lg border border-dashed border-border-default text-text-muted text-sm font-medium hover:border-accent hover:text-text-primary transition-colors cursor-pointer bg-transparent"},Te(X.$t("tools.canvas.fromTemplate")),1)])])])):Re("",!0),pe("div",B7,[Se(a).chatModelNames.length>0?(ve(),be("select",{key:0,value:Se(s).canvasAiModel??"",onChange:I[4]||(I[4]=Z=>Se(s).setCanvasAiModel(Z.target.value||null)),class:"canvas-ai-model-select px-2 py-1.5 rounded-lg bg-surface-overlay/90 text-text-secondary text-xs border border-border-default shadow-lg cursor-pointer"},[pe("option",F7,"AI: "+Te(Se(a).chatModelNames[0]??"none"),1),(ve(!0),be(mt,null,Jt(Se(a).chatModelNames,Z=>(ve(),be("option",{key:Z,value:Z}," AI: "+Te(Z)+" "+Te(Se(a).capabilityIcons(Z)),9,R7))),128))],40,Q7)):Re("",!0),pe("button",{onClick:I[5]||(I[5]=Z=>Se(H$)()),class:"px-3 py-1.5 rounded-lg bg-surface-overlay/90 text-text-secondary text-xs font-medium hover:bg-surface-overlay transition-colors cursor-pointer border border-border-default shadow-lg",title:X.$t("tools.canvas.exportTitle")},Te(X.$t("tools.canvas.export")),9,z7),P.value?Re("",!0):(ve(),be("button",{key:1,onClick:I[6]||(I[6]=Z=>P.value=!0),class:"px-3 py-1.5 rounded-lg bg-surface-overlay/90 text-text-secondary text-xs font-medium hover:bg-surface-overlay transition-colors cursor-pointer border border-border-default shadow-lg"},Te(X.$t("tools.canvas.codePanel")),1)),pe("button",{onClick:I[7]||(I[7]=Z=>w.value=!w.value),class:bt(["px-3 py-1.5 rounded-lg bg-surface-overlay/90 text-xs font-medium hover:bg-surface-overlay transition-colors cursor-pointer border border-border-default shadow-lg",w.value?"text-accent":"text-text-secondary"])},Te(X.$t("tools.canvas.toolLibrary")),3),Se(l).length>0?(ve(),be("button",{key:2,onClick:I[8]||(I[8]=Z=>E.value=!0),class:"px-3 py-1.5 rounded-lg bg-surface-overlay/90 text-text-secondary text-xs font-medium hover:bg-surface-overlay hover:text-error transition-colors cursor-pointer border border-border-default shadow-lg",title:X.$t("tools.canvas.clearAllTitle")},Te(X.$t("tools.canvas.clearAll")),9,X7)):Re("",!0),pe("button",{onClick:I[9]||(I[9]=Z=>i("add-template")),class:"px-3 py-1.5 rounded-lg bg-surface-overlay/90 text-text-secondary text-xs font-medium hover:bg-surface-overlay transition-colors cursor-pointer border border-dashed border-border-default shadow-lg"},Te(X.$t("tools.canvas.fromTemplate")),1),Se(l).length>0?(ve(),be("button",{key:3,onClick:N,class:"px-3 py-1.5 rounded-lg bg-accent/90 text-surface-base font-semibold text-xs hover:bg-accent transition-colors cursor-pointer border-none shadow-lg"},Te(X.$t("tools.canvas.newTool")),1)):Re("",!0)]),E.value?(ve(),be("div",j7,[pe("div",Z7,[pe("p",V7,Te(X.$t("tools.canvas.clearAllConfirm")),1),pe("p",U7,Te(X.$t("tools.canvas.clearAllWarning",{count:Se(l).length})),1),pe("div",q7,[pe("button",{onClick:I[10]||(I[10]=Z=>E.value=!1),class:"px-4 py-1.5 rounded-lg text-xs text-text-secondary bg-surface-overlay hover:bg-surface-raised transition-colors cursor-pointer border border-border-default"},Te(X.$t("tools.canvas.cancel")),1),pe("button",{onClick:k,class:"px-4 py-1.5 rounded-lg text-xs text-white bg-error hover:opacity-90 transition-opacity cursor-pointer border-none"},Te(X.$t("tools.canvas.deleteAll")),1)])])])):Re("",!0)]),w.value?(ve(),be("div",W7,[pe("div",Y7,[pe("span",G7,Te(X.$t("tools.canvas.toolLibrary")),1),pe("button",{class:"text-xs text-text-muted hover:text-text-primary transition-colors bg-transparent border-none cursor-pointer",onClick:I[11]||(I[11]=Z=>w.value=!1)},Te(X.$t("tools.canvas.close")),1)]),pe("div",H7,[(ve(!0),be(mt,null,Jt(Se(r).allTools,Z=>(ve(),be("div",{key:Z.id,class:"flex items-center gap-2 rounded-lg px-3 py-2 text-xs hover:bg-surface-overlay transition-colors"},[pe("button",{class:bt(["h-4 w-7 shrink-0 rounded-full transition-colors",Z.enabled?"bg-accent":"bg-surface-overlay"]),title:Z.enabled?X.$t("tools.canvas.disableForChat"):X.$t("tools.canvas.enableForChat"),onClick:j=>Se(r).toggleEnabled(Z.id)},[pe("span",{class:bt(["block h-3 w-3 rounded-full bg-white transition-transform",Z.enabled?"translate-x-3.5":"translate-x-0.5"])},null,2)],10,J7),pe("div",K7,[pe("span",{class:bt(["font-mono block",Z.enabled?"text-text-primary":"text-text-muted"])},Te(Z.definition.function.name),3),pe("p",e9,Te(Z.definition.function.description),1)]),pe("button",{class:"shrink-0 text-text-muted hover:text-error transition-colors bg-transparent border-none cursor-pointer",title:X.$t("tools.canvas.deleteToolTitle"),onClick:j=>C(Z.id)},[xt(Se(OT),{class:"h-3.5 w-3.5"})],8,t9)]))),128)),Se(r).allTools.length===0?(ve(),be("p",i9,Te(X.$t("tools.canvas.noToolsYet")),1)):Re("",!0)]),pe("div",n9,Te(Se(r).enabledTools.length)+"/"+Te(Se(r).allTools.length)+" "+Te(X.$t("tools.canvas.enabledForChat")),1)])):Re("",!0)]))}}),s9={class:"flex h-full overflow-hidden flex-col"},a9={class:"bg-surface-raised rounded-xl border border-border-default shadow-xl w-[480px] max-h-[70vh] overflow-hidden"},o9={class:"p-4 border-b border-border-default"},l9={class:"text-sm font-medium text-text-primary"},u9={class:"text-[10px] text-text-muted mt-0.5"},c9={class:"p-3 space-y-4 overflow-y-auto max-h-[50vh]"},h9={class:"text-[10px] font-semibold text-text-muted uppercase tracking-wider mb-2 px-1"},f9={class:"space-y-1.5"},d9=["onClick"],p9={class:"flex items-center justify-between"},m9={class:"text-xs font-medium text-text-primary"},g9={class:"text-[10px] text-text-muted mt-1"},y9={class:"p-3 border-t border-border-default"},$9=ot({__name:"ToolWorkshopPage",setup(t){const e=Ud(),{t:i}=hT(),n=ze(!1),r=[{name:"Current Time",description:"Returns the current date and time",category:"utility",definition:{type:"function",function:{name:"get_current_time",description:"Get the current date and time in ISO format",parameters:{type:"object",properties:{},required:[]}}},code:"return new Date().toISOString()"},{name:"Web Fetch",description:"Fetch readable text or JSON from a URL",category:"api",definition:{type:"function",function:{name:"fetch_url",description:"Fetch the content of a web page or API endpoint. Returns extracted text for HTML pages, or raw JSON for API responses.",parameters:{type:"object",properties:{url:{type:"string",description:"The URL to fetch"}},required:["url"]}}},code:`const res = await fetch(args.url)
216
216
  const contentType = res.headers.get('content-type') || ''
217
217
  if (contentType.includes('application/json')) {
218
218
  return await res.json()
@@ -1 +1 @@
1
- import{d as p,V as f,J as h,r as g,n as v}from"./index-CgqXFXWk.js";const k=p("tokens",()=>{const t=f(new Map);function r(e,n){const o=new Map(t.value),s=o.get(e)??[];o.set(e,[...s,n]),t.value=o}function i(e){return t.value.get(e)??[]}function l(e){return(t.value.get(e)??[]).length}function c(e){const n=new Map(t.value);n.delete(e),t.value=n}function a(e){const n=t.value.get(e);n&&n.length>0&&h.saveTokens(e,n).catch(console.error)}async function u(e){if(t.value.has(e))return;const n=await h.getTokens(e);if(n.length>0){const o=new Map(t.value);o.set(e,n),t.value=o}}return{tokensBySession:t,pushToken:r,getTokens:i,getTokenCount:l,clearTokens:c,persistTokens:a,loadTokens:u}}),S=p("reasoning",()=>{const t=g(new Map),r=g(new Map);function i(n){return t.value.get(n)??null}function l(n){return t.value.get(n)?.steps??[]}function c(n,o){let s=t.value.get(n);s||(s={sessionId:n,steps:[],totalSteps:0,currentDepth:0},t.value.set(n,s)),s.steps.push(o),s.totalSteps=s.steps.length}function a(n){t.value.delete(n)}function u(n,o,s){r.value.set(n,{isThinking:o,content:s})}function e(n){return r.value.get(n)??{isThinking:!1,content:""}}return{chainsBySession:t,thinkingBySession:r,getChain:i,getSteps:l,addStep:c,clearChain:a,setThinking:u,getThinking:e}}),T=p("agent",()=>{const t=g(new Map);function r(a){return t.value.get(a)??null}function i(a){t.value.has(a)||t.value.set(a,{sessionId:a,nodes:[],edges:[]})}function l(a,u){const e=t.value.get(a);if(e&&(e.nodes.push(u),e.nodes.length>1)){const n=e.nodes[e.nodes.length-2];e.edges.push({id:v(),source:n.id,target:u.id,label:`Step ${e.nodes.length-1}`})}}function c(a,u){const e=t.value.get(a);e&&e.edges.push(u)}return{graphsBySession:t,getGraph:r,initGraph:i,addNode:l,addEdge:c}});export{k as a,S as b,T as u};
1
+ import{d as p,V as f,J as h,r as g,n as v}from"./index-DVvWJgFn.js";const k=p("tokens",()=>{const t=f(new Map);function r(e,n){const o=new Map(t.value),s=o.get(e)??[];o.set(e,[...s,n]),t.value=o}function i(e){return t.value.get(e)??[]}function l(e){return(t.value.get(e)??[]).length}function c(e){const n=new Map(t.value);n.delete(e),t.value=n}function a(e){const n=t.value.get(e);n&&n.length>0&&h.saveTokens(e,n).catch(console.error)}async function u(e){if(t.value.has(e))return;const n=await h.getTokens(e);if(n.length>0){const o=new Map(t.value);o.set(e,n),t.value=o}}return{tokensBySession:t,pushToken:r,getTokens:i,getTokenCount:l,clearTokens:c,persistTokens:a,loadTokens:u}}),S=p("reasoning",()=>{const t=g(new Map),r=g(new Map);function i(n){return t.value.get(n)??null}function l(n){return t.value.get(n)?.steps??[]}function c(n,o){let s=t.value.get(n);s||(s={sessionId:n,steps:[],totalSteps:0,currentDepth:0},t.value.set(n,s)),s.steps.push(o),s.totalSteps=s.steps.length}function a(n){t.value.delete(n)}function u(n,o,s){r.value.set(n,{isThinking:o,content:s})}function e(n){return r.value.get(n)??{isThinking:!1,content:""}}return{chainsBySession:t,thinkingBySession:r,getChain:i,getSteps:l,addStep:c,clearChain:a,setThinking:u,getThinking:e}}),T=p("agent",()=>{const t=g(new Map);function r(a){return t.value.get(a)??null}function i(a){t.value.has(a)||t.value.set(a,{sessionId:a,nodes:[],edges:[]})}function l(a,u){const e=t.value.get(a);if(e&&(e.nodes.push(u),e.nodes.length>1)){const n=e.nodes[e.nodes.length-2];e.edges.push({id:v(),source:n.id,target:u.id,label:`Step ${e.nodes.length-1}`})}}function c(a,u){const e=t.value.get(a);e&&e.edges.push(u)}return{graphsBySession:t,getGraph:r,initGraph:i,addNode:l,addEdge:c}});export{k as a,S as b,T as u};
@@ -0,0 +1,3 @@
1
+ import{u as p}from"./toolcall-store-BFoy2Mdx.js";import{u as m}from"./StatusBadge.vue_vue_type_script_setup_true_lang-D24kGmB6.js";import{n as a,o as d}from"./index-DVvWJgFn.js";import{a as y}from"./stream-handler-_fccIkW6.js";function u(t,o="en"){if(!t)return 0;if(["zh","ja","ko"].includes(o))return t.replace(/\s/g,"").length||1;const i=t.split(/\s+/).filter(Boolean).length;return Math.ceil(i*1.3)}function g(t,o){const i=b(o),n=u(o);for(const r of i)r.tokenCount=u(r.content),r.percentage=n>0?r.tokenCount/n*100:0;return{sessionId:t,rawPrompt:o,totalTokenCount:n,sections:i}}function S(t,o){const i=[];let n=0;for(const e of o){const c={system:"system",user:"user",assistant:"context",tool:"tools"},l={id:a(),type:c[e.role]??"unknown",label:`${e.role} message`,content:e.content,startOffset:n,endOffset:n+e.content.length,tokenCount:u(e.content),percentage:0};i.push(l),n+=e.content.length+1}const r=i.reduce((e,c)=>e+c.tokenCount,0);for(const e of i)e.percentage=r>0?e.tokenCount/r*100:0;const s=o.map(e=>`[${e.role}] ${e.content}`).join(`
2
+
3
+ `);return{sessionId:t,rawPrompt:s,totalTokenCount:r,sections:i,messages:o.map(e=>({role:e.role,content:e.content,tokenCount:u(e.content)}))}}function b(t){const o=[],i=[{regex:/^#{1,3}\s*system\b/im,type:"system",label:"System Instructions"},{regex:/^#{1,3}\s*(?:user|query|question)\b/im,type:"user",label:"User Query"},{regex:/^#{1,3}\s*(?:context|background)\b/im,type:"context",label:"Context"},{regex:/^#{1,3}\s*(?:tools?|functions?)\b/im,type:"tools",label:"Tool Definitions"},{regex:/^#{1,3}\s*(?:memory|history|conversation)\b/im,type:"memory",label:"Memory / History"},{regex:/^#{1,3}\s*(?:examples?|few[- ]shot)\b/im,type:"examples",label:"Examples"},{regex:/^#{1,3}\s*(?:instructions?|rules?|guidelines?)\b/im,type:"instructions",label:"Instructions"}],n=[];for(const{regex:s,type:e,label:c}of i){const l=t.match(s);l?.index!==void 0&&n.push({index:l.index,type:e,label:c})}if(n.length===0)return o.push({id:a(),type:"user",label:"Prompt",content:t,startOffset:0,endOffset:t.length,tokenCount:0,percentage:100}),o;n.sort((s,e)=>s.index-e.index);for(let s=0;s<n.length;s++){const e=n[s],c=n[s+1],l=c?c.index:t.length,f=t.slice(e.index,l).trim();o.push({id:a(),type:e.type,label:e.label,content:f,startOffset:e.index,endOffset:l,tokenCount:0,percentage:0})}const r=n[0];if(r&&r.index>0){const s=t.slice(0,r.index).trim();s&&o.unshift({id:a(),type:"unknown",label:"Preamble",content:s,startOffset:0,endOffset:r.index,tokenCount:0,percentage:0})}return o}async function O(t){const o=p(),i=m(),n=o.createSession({mode:"generate",model:t.model,prompt:t.prompt,options:t.options});o.setActiveSession(n);const r=g(n,t.prompt);i.setAnatomy(n,r);const s=new AbortController;return d.streamGenerate({model:t.model,prompt:t.prompt,system:t.system,options:t.options},s.signal).then(e=>y(n,e,s.signal)).catch(e=>{s.signal.aborted||o.setSessionError(n,e instanceof Error?e.message:"Generation failed")}),{sessionId:n,abort:()=>{s.abort(),o.cancelSession(n)}}}export{S as a,O as s};
@@ -1 +1 @@
1
- import{d as m,r as n}from"./index-CgqXFXWk.js";import{getClientId as p,isConnected as C,getCachedEmail as y,getStoredTokens as c,setClientId as A,startGoogleAuth as w,handleCallback as x,getUserEmail as E,clearTokens as I,getAccessToken as S}from"./google-auth-CfEcVMA7.js";const _=m("google-auth",()=>{const a=n(!1),o=n(null),u=n(null),r=n(!1),s=n(""),l=n(null);function i(){s.value=p()??"",a.value=C(),o.value=y();const e=c();u.value=e?.expires_at??null}i();function v(e){A(e),s.value=e.trim()}async function f(){if(!s.value){l.value="Please enter a Google Client ID first.";return}l.value=null,await w()}async function d(e){r.value=!0,l.value=null;try{const t=await x(e);u.value=t.expires_at,a.value=!0;const k=await E();o.value=k}catch(t){l.value=t instanceof Error?t.message:String(t),a.value=!1}finally{r.value=!1}}function g(){I(),a.value=!1,o.value=null,u.value=null,l.value=null}async function h(){try{const e=await S();a.value=!0;const t=c();return t&&(u.value=t.expires_at),e}catch(e){throw a.value=!1,e}}return{connected:a,userEmail:o,tokenExpiresAt:u,isAuthenticating:r,clientId:s,error:l,updateClientId:v,connect:f,handleOAuthCallback:d,disconnect:g,getToken:h}});export{_ as u};
1
+ import{d as m,r as n}from"./index-DVvWJgFn.js";import{getClientId as p,isConnected as C,getCachedEmail as y,getStoredTokens as c,setClientId as A,startGoogleAuth as w,handleCallback as x,getUserEmail as E,clearTokens as I,getAccessToken as S}from"./google-auth-CfEcVMA7.js";const _=m("google-auth",()=>{const a=n(!1),o=n(null),u=n(null),r=n(!1),s=n(""),l=n(null);function i(){s.value=p()??"",a.value=C(),o.value=y();const e=c();u.value=e?.expires_at??null}i();function v(e){A(e),s.value=e.trim()}async function f(){if(!s.value){l.value="Please enter a Google Client ID first.";return}l.value=null,await w()}async function d(e){r.value=!0,l.value=null;try{const t=await x(e);u.value=t.expires_at,a.value=!0;const k=await E();o.value=k}catch(t){l.value=t instanceof Error?t.message:String(t),a.value=!1}finally{r.value=!1}}function g(){I(),a.value=!1,o.value=null,u.value=null,l.value=null}async function h(){try{const e=await S();a.value=!0;const t=c();return t&&(u.value=t.expires_at),e}catch(e){throw a.value=!1,e}}return{connected:a,userEmail:o,tokenExpiresAt:u,isAuthenticating:r,clientId:s,error:l,updateClientId:v,connect:f,handleOAuthCallback:d,disconnect:g,getToken:h}});export{_ as u};