llmxray 0.4.3 → 0.4.4

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 (191) hide show
  1. package/dist/assets/{AITrainingPage-DEU4UAR7.js → AITrainingPage-GE_hvc8i.js} +1 -1
  2. package/dist/assets/{AnalyticsPage-C7mNUAil.js → AnalyticsPage-CUpkcOcS.js} +1 -1
  3. package/dist/assets/{BenchmarkPage-jiUqdHmg.js → BenchmarkPage-DQuv9EdH.js} +2 -2
  4. package/dist/assets/{ComparisonPage-BoBWSObY.js → ComparisonPage-DXh2a8TJ.js} +3 -3
  5. package/dist/assets/{CostDashboardPage-BKQDsZhx.js → CostDashboardPage-C4IVmHn1.js} +1 -1
  6. package/dist/assets/{DashboardPage-CV8Ejgxv.js → DashboardPage-DhvUf3u6.js} +6 -6
  7. package/dist/assets/{EmbeddingsPage-DXjVT4eU.js → EmbeddingsPage-tMH5Unz8.js} +1 -1
  8. package/dist/assets/GoogleCallbackPage-Bljvoj2X.js +1 -0
  9. package/dist/assets/{JsonTreeNode-C0UNUwZm.js → JsonTreeNode-srBpwnIe.js} +1 -1
  10. package/dist/assets/{ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-vQNvYFzV.js → ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-CBo5u7cq.js} +1 -1
  11. package/dist/assets/{RAGPage-Dv4UDEyz.js → RAGPage-Br6DZPuU.js} +1 -1
  12. package/dist/assets/{SessionPage-B0fMQGSB.js → SessionPage-CVpgkmrd.js} +2 -2
  13. package/dist/assets/SettingsPage-DY1zfkza.js +1 -0
  14. package/dist/assets/{StatusBadge.vue_vue_type_script_setup_true_lang-BiB0M6lv.js → StatusBadge.vue_vue_type_script_setup_true_lang-PDuG6Cj4.js} +1 -1
  15. package/dist/assets/{StorageGauge.vue_vue_type_style_index_0_lang-DToi3R0q.js → StorageGauge.vue_vue_type_style_index_0_lang-OYUc8hU5.js} +1 -1
  16. package/dist/assets/{SystemPage-BPK15qwe.js → SystemPage-D-tjkE5U.js} +3 -3
  17. package/dist/assets/{TabBar.vue_vue_type_script_setup_true_lang-BtGCdMZK.js → TabBar.vue_vue_type_script_setup_true_lang-DvubG_tm.js} +1 -1
  18. package/dist/assets/{TokenStreamDisplay.vue_vue_type_script_setup_true_lang-B6juPZsY.js → TokenStreamDisplay.vue_vue_type_script_setup_true_lang-GmRAK2xe.js} +1 -1
  19. package/dist/assets/{ToolWorkshopPage-DmpoHHaD.js → ToolWorkshopPage-ChG2v784.js} +2 -2
  20. package/dist/assets/{ToolWorkshopPage-7TRbWVVL.css → ToolWorkshopPage-Duf-VZbs.css} +1 -1
  21. package/dist/assets/ad-B18i8NGa.svg +150 -0
  22. package/dist/assets/ad-Blhdm5jl.svg +148 -0
  23. package/dist/assets/af-Bc2fqp73.svg +81 -0
  24. package/dist/assets/af-C77Rf6cE.svg +81 -0
  25. package/dist/assets/{agent-store-C6w1zV86.js → agent-store-qLxji-w9.js} +1 -1
  26. package/dist/assets/arab-C-KgnQEz.svg +109 -0
  27. package/dist/assets/arab-C4CYPgyC.svg +109 -0
  28. package/dist/assets/as-BTEVCXG-.svg +73 -0
  29. package/dist/assets/as-Dekqy8Of.svg +72 -0
  30. package/dist/assets/aw-CLCX8uk5.svg +186 -0
  31. package/dist/assets/aw-W0PWLK5p.svg +186 -0
  32. package/dist/assets/bm-BeYgB2z9.svg +97 -0
  33. package/dist/assets/bm-DvNWWcPM.svg +97 -0
  34. package/dist/assets/bn-B6T3O78g.svg +36 -0
  35. package/dist/assets/bn-CPQcA8Ol.svg +36 -0
  36. package/dist/assets/bo-CcUiMqkJ.svg +673 -0
  37. package/dist/assets/bo-Dry0C6UA.svg +674 -0
  38. package/dist/assets/br-Cu5YU29T.svg +45 -0
  39. package/dist/assets/br-Dr5rMAMb.svg +45 -0
  40. package/dist/assets/bt-BTo4qm10.svg +89 -0
  41. package/dist/assets/bt-SxWnbWW0.svg +89 -0
  42. package/dist/assets/bz-BCKHR4_q.svg +145 -0
  43. package/dist/assets/bz-CoBdB-p8.svg +145 -0
  44. package/dist/assets/{canvas-ai-db-BpqhUp6k.js → canvas-ai-db-DIu3Cyqr.js} +1 -1
  45. package/dist/assets/cy-DJKnEFYW.svg +6 -0
  46. package/dist/assets/cy-bZuP8hmf.svg +6 -0
  47. package/dist/assets/dg-CJPJrjiZ.svg +130 -0
  48. package/dist/assets/dg-DqkWLbnk.svg +130 -0
  49. package/dist/assets/dm-Cbhezfe1.svg +152 -0
  50. package/dist/assets/dm-DPPHwW2M.svg +152 -0
  51. package/dist/assets/do-B86d445t.svg +121 -0
  52. package/dist/assets/do-DeRnbj4d.svg +122 -0
  53. package/dist/assets/{download-pCIjWOn5.js → download-DBk31Sbj.js} +1 -1
  54. package/dist/assets/eac-CwGQsyAM.svg +48 -0
  55. package/dist/assets/eac-h4QKADRE.svg +48 -0
  56. package/dist/assets/ec-CaVOFQ3t.svg +138 -0
  57. package/dist/assets/ec-cwfBJlvF.svg +138 -0
  58. package/dist/assets/eg-DwOkwyQ0.svg +38 -0
  59. package/dist/assets/eg-YC70hswZ.svg +38 -0
  60. package/dist/assets/es-BuSGTZm_.svg +547 -0
  61. package/dist/assets/es-d5m8M5h8.svg +544 -0
  62. package/dist/assets/es-ga-D9xG2hYr.svg +187 -0
  63. package/dist/assets/es-ga-DXhVZ333.svg +187 -0
  64. package/dist/assets/fj-DEAVMg38.svg +120 -0
  65. package/dist/assets/fj-u3dAPoew.svg +123 -0
  66. package/dist/assets/fk-B-RvQ4Hz.svg +89 -0
  67. package/dist/assets/fk-nuUF_Ak3.svg +90 -0
  68. package/dist/assets/gb-nir-D4gikpNq.svg +132 -0
  69. package/dist/assets/gb-nir-vEp1ZXy6.svg +131 -0
  70. package/dist/assets/gb-wls-Bxz9hxvX.svg +9 -0
  71. package/dist/assets/gb-wls-CK0XlKT-.svg +9 -0
  72. package/dist/assets/generate-service-BIV4odla.js +3 -0
  73. package/dist/assets/{google-auth-store-Dgv2FihL.js → google-auth-store-Cxj4bIXD.js} +1 -1
  74. package/dist/assets/gq-CPnMO1hT.svg +23 -0
  75. package/dist/assets/gq-Cag8QTk2.svg +23 -0
  76. package/dist/assets/gs-DOgYbHsY.svg +132 -0
  77. package/dist/assets/gs-DiiNa0F5.svg +133 -0
  78. package/dist/assets/gt-BLpn5qMn.svg +204 -0
  79. package/dist/assets/gt-CJo5DI-7.svg +204 -0
  80. package/dist/assets/gu-Di1JYREk.svg +19 -0
  81. package/dist/assets/gu-SbvrH0uZ.svg +19 -0
  82. package/dist/assets/hr-BpiVVBoV.svg +56 -0
  83. package/dist/assets/hr-fzLfaANM.svg +58 -0
  84. package/dist/assets/ht-DIMg4gti.svg +116 -0
  85. package/dist/assets/ht-pweRl6ZP.svg +116 -0
  86. package/dist/assets/im--VPIqfkF.svg +36 -0
  87. package/dist/assets/im-Dd9p-0-T.svg +36 -0
  88. package/dist/assets/index-B0RKZCO8.css +1 -0
  89. package/dist/assets/index-BI1ok0nK.js +8 -0
  90. package/dist/assets/{index-DHuj6tKB.js → index-CIiugJtV.js} +1 -1
  91. package/dist/assets/index-lybAETDi.js +3 -0
  92. package/dist/assets/{info-Eg1tUw1x.js → info-Cxpjao0U.js} +1 -1
  93. package/dist/assets/io-13HOfeJD.svg +130 -0
  94. package/dist/assets/io-BImhNBcd.svg +130 -0
  95. package/dist/assets/ir-Q03Mij62.svg +219 -0
  96. package/dist/assets/ir-cCIgaNf6.svg +219 -0
  97. package/dist/assets/je-DyWbhIiC.svg +62 -0
  98. package/dist/assets/je-vXe0Dr49.svg +62 -0
  99. package/dist/assets/kg-B0FsxZiL.svg +4 -0
  100. package/dist/assets/kg-CjfitMyT.svg +4 -0
  101. package/dist/assets/kh-BBvObpUS.svg +61 -0
  102. package/dist/assets/kh-BeWfuE30.svg +61 -0
  103. package/dist/assets/ki-fuIMkEYQ.svg +36 -0
  104. package/dist/assets/ki-p_fAQGbS.svg +36 -0
  105. package/dist/assets/ky-BqaZHuhf.svg +103 -0
  106. package/dist/assets/ky-Dpsu1myA.svg +103 -0
  107. package/dist/assets/kz-CwKXYZ8s.svg +36 -0
  108. package/dist/assets/kz-Dkyx6q-p.svg +36 -0
  109. package/dist/assets/li-CHdhvNcr.svg +43 -0
  110. package/dist/assets/li-CMlf0YU8.svg +43 -0
  111. package/dist/assets/lk-DSQoDxn_.svg +22 -0
  112. package/dist/assets/lk-DUkgV9Tq.svg +22 -0
  113. package/dist/assets/md-DRlxvNwm.svg +70 -0
  114. package/dist/assets/md-DTi94M3M.svg +71 -0
  115. package/dist/assets/me-CfGorN3b.svg +118 -0
  116. package/dist/assets/me-Cv4Gwqah.svg +116 -0
  117. package/dist/assets/{metrics-store-7m97Sb7w.js → metrics-store-BZ8E63Rc.js} +1 -1
  118. package/dist/assets/mp-CrOApEqW.svg +86 -0
  119. package/dist/assets/mp-CuaQmCLf.svg +86 -0
  120. package/dist/assets/ms-B-w7hFKu.svg +25 -0
  121. package/dist/assets/ms-DxciGbUu.svg +29 -0
  122. package/dist/assets/mt-YDa8zgzO.svg +56 -0
  123. package/dist/assets/mt-YqzKx9xl.svg +58 -0
  124. package/dist/assets/mx-Cc8Ccfe8.svg +382 -0
  125. package/dist/assets/mx-CvCwYHGF.svg +377 -0
  126. package/dist/assets/nf-DGrQb42O.svg +11 -0
  127. package/dist/assets/nf-Dl00mlk2.svg +9 -0
  128. package/dist/assets/ni-BX2WCaNt.svg +129 -0
  129. package/dist/assets/ni-CcFCSQxm.svg +129 -0
  130. package/dist/assets/om-DcqxRdQL.svg +115 -0
  131. package/dist/assets/om-nN8zP2Bu.svg +115 -0
  132. package/dist/assets/{papaparse.min-3FeAYh4d.js → papaparse.min-kBINl9ZG.js} +1 -1
  133. package/dist/assets/{pencil-CZp68oBU.js → pencil-DuvF5FdW.js} +1 -1
  134. package/dist/assets/pn-BPAlH32D.svg +53 -0
  135. package/dist/assets/pn-DgxdtieE.svg +53 -0
  136. package/dist/assets/pt-BTevY6N2.svg +57 -0
  137. package/dist/assets/pt-DZ2ADgIR.svg +57 -0
  138. package/dist/assets/py-BKi5dxWt.svg +156 -0
  139. package/dist/assets/py-mNzh0mZC.svg +157 -0
  140. package/dist/assets/{rag-store-Bm0nxdec.js → rag-store-fluSCOWr.js} +3 -3
  141. package/dist/assets/rs-BfwKwXtn.svg +292 -0
  142. package/dist/assets/rs-CnTO3ehk.svg +296 -0
  143. package/dist/assets/sa-Dh79zbT9.svg +25 -0
  144. package/dist/assets/sa-DnlyVVKx.svg +25 -0
  145. package/dist/assets/{session-store-BQ0TF24S.js → session-store-DQW7koXz.js} +1 -1
  146. package/dist/assets/sh-ac-D-aE2xRW.svg +690 -0
  147. package/dist/assets/sh-ac-FjwY7RYr.svg +689 -0
  148. package/dist/assets/sh-hl-CgxUDvtv.svg +164 -0
  149. package/dist/assets/sh-hl-CqtQPzWZ.svg +164 -0
  150. package/dist/assets/sh-ta-BFo5zkKU.svg +76 -0
  151. package/dist/assets/sh-ta-CPJublpi.svg +76 -0
  152. package/dist/assets/{share-2-CJJGZsZO.js → share-2-NJrUNieP.js} +1 -1
  153. package/dist/assets/sm-BKrUHzrq.svg +73 -0
  154. package/dist/assets/sm-DGBIRFB_.svg +75 -0
  155. package/dist/assets/{storage-store-6qFwk_C5.js → storage-store-BVsJ2m6T.js} +1 -1
  156. package/dist/assets/{stream-handler-BM5egg14.js → stream-handler-BJnVDKi0.js} +1 -1
  157. package/dist/assets/sv-CJIHhYwF.svg +593 -0
  158. package/dist/assets/sv-RZ39q5hO.svg +593 -0
  159. package/dist/assets/sx-RKKs0ph6.svg +56 -0
  160. package/dist/assets/sx-nDhIaDNb.svg +56 -0
  161. package/dist/assets/sz-D39eIL5d.svg +34 -0
  162. package/dist/assets/sz-qxMwa2gs.svg +34 -0
  163. package/dist/assets/tc-CJHJmJj1.svg +50 -0
  164. package/dist/assets/tc-dtelpZmc.svg +50 -0
  165. package/dist/assets/tm-C_WSgUcv.svg +204 -0
  166. package/dist/assets/tm-DGBJvQay.svg +205 -0
  167. package/dist/assets/{tool-workshop-store-9_FKfdnT.js → tool-workshop-store-C-j6ilp2.js} +1 -1
  168. package/dist/assets/{toolcall-store-C4Trr01T.js → toolcall-store-CMBLYe4d.js} +1 -1
  169. package/dist/assets/{trash-2-DjfJXqVK.js → trash-2-CCIzK_vg.js} +1 -1
  170. package/dist/assets/un-Bqg4Cbbh.svg +16 -0
  171. package/dist/assets/un-DabL4p35.svg +16 -0
  172. package/dist/assets/va-B9-hqIE-.svg +190 -0
  173. package/dist/assets/va-s7kyhqIM.svg +190 -0
  174. package/dist/assets/vg-C7xY6pic.svg +59 -0
  175. package/dist/assets/vg-ClZ-0KpG.svg +59 -0
  176. package/dist/assets/vi-BC_zcciE.svg +28 -0
  177. package/dist/assets/vi-BSdsyIxY.svg +28 -0
  178. package/dist/assets/xk-Bj15g7cp.svg +5 -0
  179. package/dist/assets/xk-Cdz2uTvR.svg +5 -0
  180. package/dist/assets/zm-BmsW91ne.svg +27 -0
  181. package/dist/assets/zm-D8B-0kdx.svg +27 -0
  182. package/dist/assets/zw-CSuuaw9K.svg +21 -0
  183. package/dist/assets/zw-U0m7oJ5e.svg +21 -0
  184. package/dist/index.html +3 -2
  185. package/package.json +2 -1
  186. package/dist/assets/GoogleCallbackPage-BUIkYpZv.js +0 -1
  187. package/dist/assets/SettingsPage-DTJP-4xU.js +0 -1
  188. package/dist/assets/generate-service-DmtXqq_h.js +0 -3
  189. package/dist/assets/index-534TcCbY.js +0 -8
  190. package/dist/assets/index-B72Sw9uL.css +0 -1
  191. package/dist/assets/index-ClITfJ3t.js +0 -3
@@ -1,3 +1,3 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-534TcCbY.js","assets/index-B72Sw9uL.css","assets/canvas-ai-db-BpqhUp6k.js"])))=>i.map(i=>d[i]);
2
- import{c as J,b as G,e as l,f as t,t as e,u as n,i as m,F as g,k as $,l as L,a as S,j as r,A as Q,B as W,W as K,p as O,h as y,g as B,q as P,r as k,o as F,_ as z}from"./index-534TcCbY.js";import{d as X,a as Y}from"./download-WPaeALA4.js";import{u as Z}from"./metrics-store-7m97Sb7w.js";import{b as c}from"./format-BqVZ9rwM.js";import{u as tt}from"./storage-store-6qFwk_C5.js";import{_ as et}from"./StorageGauge.vue_vue_type_style_index_0_lang-DToi3R0q.js";import{D as st}from"./download-pCIjWOn5.js";const at=J("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);async function ot(){try{const p=await fetch("/__system-info");return p.ok?await p.json():null}catch{return null}}const rt={class:"rounded-lg border border-border-default bg-surface p-3 space-y-2.5"},lt={class:"flex items-center justify-between"},nt={class:"flex items-center gap-2"},dt={class:"text-sm"},it={class:"text-xs font-medium text-text-primary"},ct={class:"flex items-center gap-2"},ut={class:"text-[10px] font-medium text-text-secondary"},mt=["title"],pt={key:0,class:"h-1.5 rounded-full bg-surface-overlay overflow-hidden"},xt={class:"flex h-full"},yt=["title"],ht={key:1,class:"h-1.5 rounded-full bg-surface-overlay"},_t={class:"flex items-center justify-between text-[10px] text-text-muted"},ft={key:2,class:"space-y-1"},vt={class:"flex-1 text-text-muted"},gt={class:"text-text-muted"},bt={class:"text-text-secondary w-14 text-end"},$t={key:3,class:"text-[10px] text-text-muted italic"},wt=G({__name:"StorageBreakdownCard",props:{database:{}},emits:["clear"],setup(p,{emit:C}){const _=p,u=C,b=["#8b5cf6","#06b6d4","#f59e0b","#10b981","#f43f5e"],T=S(()=>_.database.stores.filter(x=>x.bytes>0).map((x,f)=>({name:x.name,bytes:x.bytes,color:b[f%b.length]})));return(x,f)=>(r(),l("div",rt,[t("div",lt,[t("div",nt,[t("span",dt,e(p.database.icon),1),t("span",it,e(p.database.label),1)]),t("div",ct,[t("span",ut,e(n(c)(p.database.totalBytes)),1),p.database.totalBytes>0?(r(),l("button",{key:0,class:"rounded px-1.5 py-0.5 text-[9px] text-text-muted hover:text-error hover:bg-error/10 transition-colors",title:x.$t("system.browserStorage.clearAll"),onClick:f[0]||(f[0]=i=>u("clear",p.database.id))},e(x.$t("common.actions.clear")),9,mt)):m("",!0)])]),p.database.totalBytes>0?(r(),l("div",pt,[t("div",xt,[(r(!0),l(g,null,$(T.value,i=>(r(),l("div",{key:i.name,class:"h-full transition-all duration-500 first:rounded-s-full last:rounded-e-full",style:L({width:`${i.bytes/p.database.totalBytes*100}%`,backgroundColor:i.color}),title:`${i.name}: ${n(c)(i.bytes)}`},null,12,yt))),128))])])):(r(),l("div",ht)),t("div",_t,[t("span",null,e(p.database.recordCount.toLocaleString())+" records",1),t("span",null,e(p.database.type==="indexeddb"?"IndexedDB":"External"),1)]),p.database.stores.some(i=>i.count>0)?(r(),l("div",ft,[(r(!0),l(g,null,$(p.database.stores.filter(i=>i.count>0),(i,d)=>(r(),l("div",{key:i.name,class:"flex items-center gap-2 text-[10px]"},[t("span",{class:"h-2 w-2 shrink-0 rounded-full",style:L({backgroundColor:b[d%b.length]})},null,4),t("span",vt,e(i.name),1),t("span",gt,e(i.count),1),t("span",bt,e(n(c)(i.bytes)),1)]))),128))])):(r(),l("p",$t,e(x.$t("system.browserStorage.empty")),1))]))}}),kt={class:"max-w-4xl space-y-6"},St={class:"flex items-center justify-between"},Mt={class:"text-lg font-semibold text-text-primary"},Bt={class:"text-xs text-text-muted mt-0.5"},zt={class:"flex items-center gap-2"},Ct={class:"relative"},Dt={key:1,class:"absolute end-0 top-full z-20 mt-1 w-64 rounded-lg border border-border-default bg-surface-raised shadow-lg py-1"},Lt={key:0,class:"flex flex-col items-center justify-center py-16 gap-4"},Tt={class:"text-sm text-text-secondary"},Rt={class:"text-[10px] text-text-muted"},It={key:1,class:"rounded-lg border border-border-default bg-surface-raised p-4 text-xs text-text-muted"},At={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Vt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Et={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ot={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Pt={class:"text-text-muted"},Ft={class:"text-text-primary"},Gt={class:"text-text-muted"},jt={class:"text-text-primary"},Ut={class:"text-text-muted"},qt={class:"text-text-primary"},Ht={class:"text-text-muted"},Nt={class:"text-text-primary"},Jt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Qt={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Wt={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Kt={class:"text-text-muted"},Xt={class:"text-text-primary"},Yt={class:"text-text-muted"},Zt={class:"text-text-primary"},te={class:"text-text-muted"},ee={class:"text-text-primary"},se={class:"text-text-muted"},ae={class:"text-text-primary"},oe={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},re={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},le={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ne={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},de={class:"text-text-muted"},ie={class:"text-text-primary"},ce={class:"text-text-muted"},ue={class:"text-text-primary"},me={class:"text-text-muted"},pe={class:"text-text-primary"},xe={class:"text-text-muted"},ye={class:"text-text-primary"},he={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},_e={class:"text-sm font-medium text-text-primary flex items-center gap-2"},fe={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},ve={class:"text-text-muted"},ge={class:"text-text-primary"},be={class:"text-text-muted"},$e={class:"text-text-primary"},we={class:"text-text-muted"},ke={class:"text-text-primary"},Se={class:"h-2 rounded-full bg-surface-overlay overflow-hidden"},Me={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Be={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ze={class:"text-text-muted"},Ce={class:"text-text-primary"},De={class:"text-text-muted"},Le={class:"text-text-primary"},Te={class:"text-text-muted"},Re={class:"text-text-primary"},Ie={key:1,class:"col-span-2 border-b border-border-default/50 my-1"},Ae={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Ve={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ee={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Oe={class:"text-text-muted"},Pe={class:"text-text-primary"},Fe={class:"text-text-muted"},Ge={class:"text-text-primary"},je={class:"text-text-muted"},Ue={class:"text-text-primary"},qe={class:"text-text-muted"},He={class:"text-text-primary"},Ne={class:"h-2 rounded-full bg-surface-overlay overflow-hidden"},Je={key:0,class:"border-b border-border-default/50"},Qe={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},We={class:"flex items-center justify-between"},Ke={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Xe={class:"flex items-center gap-2"},Ye={key:2,class:"text-[10px] text-text-muted"},Ze={key:1,class:"grid grid-cols-1 md:grid-cols-2 gap-3"},ts={key:2,class:"text-[9px] text-text-muted"},es={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},ss={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},as={class:"text-sm font-medium text-text-primary flex items-center gap-2"},os={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},rs={class:"text-text-muted"},ls={class:"flex items-center gap-1.5"},ns={class:"text-text-muted"},ds={class:"text-text-primary"},is={class:"text-text-muted"},cs={class:"text-text-primary"},us={class:"text-text-muted"},ms={class:"text-text-primary"},ps={class:"text-text-muted"},xs={class:"text-text-primary"},ys={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},hs={class:"text-sm font-medium text-text-primary flex items-center gap-2"},_s={class:"text-[10px] text-text-muted font-normal"},fs={key:0,class:"text-xs text-text-muted py-2"},vs={key:1,class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},gs={class:"text-text-muted"},bs={class:"text-text-primary font-medium"},$s={class:"text-text-muted"},ws={class:"text-accent font-medium"},ks={class:"text-text-muted"},Ss={class:"text-text-primary font-medium"},Ms={class:"text-text-muted"},Bs={class:"text-text-primary font-medium"},zs={key:2,class:"flex flex-wrap gap-1.5 pt-1"},Cs={class:"text-[10px] text-text-muted me-1"},Ds={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Ls={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ts={key:0,class:"text-xs text-text-muted py-2"},Rs={key:1,class:"space-y-2"},Is={class:"flex gap-4 text-xs text-text-secondary"},As={key:0},Vs={class:"text-accent font-medium"},Es={key:1},Os={class:"text-text-primary font-medium"},Ps={class:"text-text-primary font-medium"},Fs={class:"flex-1 min-w-0"},Gs={class:"text-sm font-medium text-text-primary truncate"},js={class:"text-xs text-text-muted"},Us={class:"text-end text-xs space-y-0.5 shrink-0"},qs={key:0},Hs={class:"text-text-muted"},Ns={class:"ms-1.5 text-accent font-medium"},Js={key:1},Qs={class:"text-text-muted"},Ws={class:"ms-1.5 text-text-primary font-medium"},Ks={class:"text-text-muted"},Xs={class:"ms-1.5 text-text-secondary"},Ys=["title"],Zs={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},ta={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ea={key:0,class:"text-xs text-text-muted py-2"},sa={key:1,class:"overflow-x-auto"},aa={class:"w-full text-xs"},oa={class:"border-b border-border-default text-text-muted"},ra={class:"text-start py-1.5 pe-4 font-medium"},la={class:"text-start py-1.5 pe-4 font-medium"},na={class:"text-start py-1.5 pe-4 font-medium"},da={class:"text-start py-1.5 pe-4 font-medium"},ia={class:"text-end py-1.5 font-medium"},ca={class:"py-1.5 pe-4 text-text-primary font-medium"},ua={class:"py-1.5 pe-4 text-text-secondary"},ma={class:"py-1.5 pe-4 text-text-secondary"},pa={class:"py-1.5 pe-4 text-text-secondary"},xa={class:"py-1.5 text-end text-text-secondary"},$a=G({__name:"SystemPage",setup(p){const C=Z(),_=Q(),u=tt(),b=k(null);async function T(s){if(b.value===s){const o={rag:()=>z(()=>import("./vector-db-ChAzHl5A.js"),[]).then(a=>a.vectorDB.clear()),conversations:()=>z(()=>import("./index-534TcCbY.js").then(a=>a.az),__vite__mapDeps([0,1])).then(a=>a.conversationDB.clear()),benchmarks:()=>z(()=>import("./benchmark-db-D8D5Wf9h.js"),[]).then(a=>a.benchmarkDB.clear()),"message-memory":()=>z(()=>import("./message-memory-db-C3Ifhs2B.js"),[]).then(a=>a.messageMemoryDB.clear()),"canvas-ai":()=>z(()=>import("./canvas-ai-db-BpqhUp6k.js"),__vite__mapDeps([2,0,1])).then(a=>a.canvasAiDB.clear())};try{await o[s]?.(),await u.refresh()}catch(a){console.error(`Failed to clear database ${s}:`,a)}b.value=null}else b.value=s,setTimeout(()=>{b.value===s&&(b.value=null)},3e3)}const x=k(null),f=k(!1),i=k([]),d=k(null),D=k(!0),E=S(()=>_.models.reduce((s,o)=>s+o.size,0)),R=S(()=>i.value.reduce((s,o)=>s+o.size_vram,0)),I=S(()=>i.value.reduce((s,o)=>s+(o.size-o.size_vram),0)),h=S(()=>C.aggregate),j=S(()=>{if(!d.value)return"";const s=d.value.cpu.maxClockMhz;return s>=1e3?`${(s/1e3).toFixed(2)} GHz`:`${s} MHz`}),M=S(()=>{if(!d.value)return 0;const{totalBytes:s,freeBytes:o}=d.value.memory;return s>0?Math.round((s-o)/s*100):0}),w=k(!1);function U(){const s=d.value,a={hardware:s?{os:s.os,cpu:s.cpu,memory:s.memory,gpu:s.gpu,storage:s.storage}:null,ollama:{connected:f.value,version:x.value,installedModels:_.models.map(v=>({name:v.name,size:v.size,family:v.details.family,parameterSize:v.details.parameter_size,quantization:v.details.quantization_level})),runningModels:i.value},inference:h.value,storage:{origin:u.origin,databases:u.databases}};X(a,`system-report-${new Date().toISOString().slice(0,10)}.json`),w.value=!1}function q(){const s=d.value,o=["# System Report — LLMxRay","",`**Date:** ${new Date().toLocaleString()}`,""];if(s){o.push("## Operating System"),o.push(`- **OS:** ${s.os.name}`),o.push(`- **Version:** ${s.os.version}`),o.push(`- **Architecture:** ${s.os.arch}`),o.push(""),o.push("## Processor"),o.push(`- **CPU:** ${s.cpu.name}`),o.push(`- **Cores:** ${s.cpu.cores} physical, ${s.cpu.logicalProcessors} logical`),o.push(`- **Max Clock:** ${s.cpu.maxClockMhz>=1e3?(s.cpu.maxClockMhz/1e3).toFixed(2)+" GHz":s.cpu.maxClockMhz+" MHz"}`),o.push(""),o.push("## Memory"),o.push(`- **Total:** ${c(s.memory.totalBytes)}`),o.push(`- **Available:** ${c(s.memory.freeBytes)}`),o.push(`- **Used:** ${c(s.memory.totalBytes-s.memory.freeBytes)} (${M.value}%)`),o.push(""),o.push("## Graphics");for(const a of s.gpu)o.push(`- **GPU:** ${a.name}`),o.push(` - Adapter RAM: ${a.adapterRamBytes>0?c(a.adapterRamBytes):"Shared / Not reported"}`),a.driverVersion&&o.push(` - Driver: ${a.driverVersion}`);o.push(""),o.push("## Storage");for(const a of s.storage)o.push(`- **${a.drive}:** ${c(a.totalBytes)} total, ${c(a.freeBytes)} free`);o.push("")}if(o.push("## Ollama Runtime"),o.push(`- **Status:** ${f.value?"Connected":"Disconnected"}`),x.value&&o.push(`- **Version:** ${x.value}`),o.push(`- **Installed Models:** ${_.models.length}`),_.models.length>0)for(const a of _.models)o.push(` - ${a.name} (${a.details.parameter_size??"?"}, ${a.details.quantization_level??"?"})`);if(o.push(`- **Total Model Storage:** ${c(E.value)}`),o.push(`- **Active Models:** ${i.value.length}`),i.value.length>0)for(const a of i.value)o.push(` - ${a.name} (ctx: ${a.context_length??"?"})`);o.push(""),h.value.totalSessions>0&&(o.push("## Inference (This Session)"),o.push(`- **Sessions:** ${h.value.totalSessions}`),o.push(`- **Avg Speed:** ${h.value.avgTps.toFixed(1)} tok/s`),o.push(`- **Tokens Generated:** ${h.value.totalTokensGenerated.toLocaleString()}`),o.push(`- **Avg TTFT:** ${h.value.avgTtftMs.toFixed(0)} ms`),o.push("")),o.push("---"),o.push("*Generated by LLMxRay — Local LLM Observatory*"),Y(o.join(`
3
- `),`system-report-${new Date().toISOString().slice(0,10)}.md`),w.value=!1}let A=null;async function H(){try{x.value=await F.version(),f.value=!0}catch{f.value=!1,x.value=null}try{i.value=await F.ps()}catch{i.value=[]}}async function V(){await Promise.all([H(),ot().then(s=>{s&&(d.value=s)}),u.refreshIfStale(3e4)])}function N(s){const o=new Date(s).getTime()-Date.now();if(o<=0)return"expiring...";const a=Math.floor(o/6e4);return a<1?"< 1 min":a<60?`${a} min`:`${Math.floor(a/60)}h ${a%60}m`}return W(async()=>{D.value=!0,await V(),D.value=!1,_.models.length===0&&await _.fetchModels(),C.recalculateAggregate(),A=setInterval(V,5e3)}),K(()=>{A&&clearInterval(A)}),(s,o)=>(r(),l("div",kt,[t("div",St,[t("div",null,[t("h2",Mt,e(s.$t("system.title")),1),t("p",Bt,e(s.$t("system.subtitle")),1)]),t("div",zt,[t("div",Ct,[t("button",{class:"flex items-center gap-1 rounded-lg bg-surface-overlay px-3 py-1.5 text-xs text-text-secondary hover:bg-border-default transition-colors",onClick:o[0]||(o[0]=a=>w.value=!w.value)},[O(n(st),{class:"h-3.5 w-3.5"}),y(" "+e(s.$t("system.export.title")),1)]),w.value?(r(),l("div",{key:0,class:"fixed inset-0 z-10",onClick:o[1]||(o[1]=a=>w.value=!1)})):m("",!0),w.value?(r(),l("div",Dt,[t("button",{class:"w-full px-3 py-2 text-start text-xs text-text-secondary hover:bg-surface-overlay",onClick:q},e(s.$t("system.export.downloadMarkdown")),1),t("button",{class:"w-full px-3 py-2 text-start text-xs text-text-secondary hover:bg-surface-overlay",onClick:U},e(s.$t("system.export.downloadJson")),1)])):m("",!0)]),t("button",{class:"rounded-lg bg-surface-overlay px-3 py-1.5 text-xs text-text-secondary hover:bg-border-default transition-colors",onClick:V},e(s.$t("system.refresh")),1)])]),D.value&&!d.value?(r(),l("div",Lt,[O(n(at),{class:"h-10 w-10 animate-spin text-accent"}),t("p",Tt,e(s.$t("system.detecting")),1),t("p",Rt,e(s.$t("system.detectingDetail")),1)])):m("",!0),!D.value&&!d.value?(r(),l("div",It,e(s.$t("system.unavailable")),1)):m("",!0),d.value?(r(),l(g,{key:2},[t("div",At,[t("div",Vt,[t("h3",Et,[o[3]||(o[3]=t("span",{class:"text-base"},"🖥",-1)),y(" "+e(s.$t("system.os.title")),1)]),t("div",Ot,[t("span",Pt,e(s.$t("system.os.os")),1),t("span",Ft,e(d.value.os.name),1),t("span",Gt,e(s.$t("system.os.version")),1),t("span",jt,e(d.value.os.version),1),t("span",Ut,e(s.$t("system.os.build")),1),t("span",qt,e(d.value.os.build||"—"),1),t("span",Ht,e(s.$t("system.os.architecture")),1),t("span",Nt,e(d.value.os.arch),1)])]),t("div",Jt,[t("h3",Qt,[o[4]||(o[4]=t("span",{class:"text-base"},"💻",-1)),y(" "+e(s.$t("system.device.title")),1)]),t("div",Wt,[t("span",Kt,e(s.$t("system.device.name")),1),t("span",Xt,e(d.value.device.name),1),t("span",Yt,e(s.$t("system.device.manufacturer")),1),t("span",Zt,e(d.value.device.manufacturer||"—"),1),t("span",te,e(s.$t("system.device.model")),1),t("span",ee,e(d.value.device.model||"—"),1),d.value.device.family?(r(),l(g,{key:0},[t("span",se,e(s.$t("system.device.family")),1),t("span",ae,e(d.value.device.family),1)],64)):m("",!0)])])]),t("div",oe,[t("div",re,[t("h3",le,[o[5]||(o[5]=t("span",{class:"text-base"},"⚙",-1)),y(" "+e(s.$t("system.cpu.title")),1)]),t("div",ne,[t("span",de,e(s.$t("system.cpu.cpu")),1),t("span",ie,e(d.value.cpu.name),1),t("span",ce,e(s.$t("system.cpu.physicalCores")),1),t("span",ue,e(d.value.cpu.cores),1),t("span",me,e(s.$t("system.cpu.logicalProcessors")),1),t("span",pe,e(d.value.cpu.logicalProcessors),1),t("span",xe,e(s.$t("system.cpu.maxClock")),1),t("span",ye,e(j.value),1)])]),t("div",he,[t("h3",_e,[o[6]||(o[6]=t("span",{class:"text-base"},"🧠",-1)),y(" "+e(s.$t("system.memory.title")),1)]),t("div",fe,[t("span",ve,e(s.$t("system.memory.totalRam")),1),t("span",ge,e(n(c)(d.value.memory.totalBytes)),1),t("span",be,e(s.$t("system.memory.available")),1),t("span",$e,e(n(c)(d.value.memory.freeBytes)),1),t("span",we,e(s.$t("system.memory.inUse")),1),t("span",ke,e(n(c)(d.value.memory.totalBytes-d.value.memory.freeBytes))+" ("+e(M.value)+"%)",1)]),t("div",Se,[t("div",{class:B(["h-full rounded-full transition-all duration-500",M.value>85?"bg-error":M.value>60?"bg-warning":"bg-success"]),style:L({width:`${M.value}%`})},null,6)])])]),t("div",Me,[t("h3",Be,[o[7]||(o[7]=t("span",{class:"text-base"},"🎮",-1)),y(" "+e(s.$t("system.gpu.title")),1)]),(r(!0),l(g,null,$(d.value.gpu,(a,v)=>(r(),l("div",{key:v,class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},[t("span",ze,e(s.$t("system.gpu.gpu"))+" "+e(d.value.gpu.length>1?v+1:""),1),t("span",Ce,e(a.name),1),t("span",De,e(s.$t("system.gpu.adapterRam")),1),t("span",Le,e(a.adapterRamBytes>0?n(c)(a.adapterRamBytes):s.$t("system.gpu.sharedNotReported")),1),a.driverVersion?(r(),l(g,{key:0},[t("span",Te,e(s.$t("system.gpu.driver")),1),t("span",Re,e(a.driverVersion),1)],64)):m("",!0),v<d.value.gpu.length-1?(r(),l("div",Ie)):m("",!0)]))),128))]),t("div",Ae,[t("h3",Ve,[o[8]||(o[8]=t("span",{class:"text-base"},"💾",-1)),y(" "+e(s.$t("system.storage.title")),1)]),(r(!0),l(g,null,$(d.value.storage,(a,v)=>(r(),l("div",{key:v,class:"space-y-2"},[t("div",Ee,[t("span",Oe,e(s.$t("system.storage.drive")),1),t("span",Pe,e(a.drive),1),t("span",Fe,e(s.$t("system.storage.total")),1),t("span",Ge,e(n(c)(a.totalBytes)),1),t("span",je,e(s.$t("system.storage.free")),1),t("span",Ue,e(n(c)(a.freeBytes)),1),t("span",qe,e(s.$t("system.storage.used")),1),t("span",He,e(n(c)(a.totalBytes-a.freeBytes))+" ("+e(a.totalBytes>0?Math.round((a.totalBytes-a.freeBytes)/a.totalBytes*100):0)+"%) ",1)]),t("div",Ne,[t("div",{class:B(["h-full rounded-full transition-all duration-500",a.totalBytes>0&&(a.totalBytes-a.freeBytes)/a.totalBytes>.85?"bg-error":(a.totalBytes-a.freeBytes)/a.totalBytes>.6?"bg-warning":"bg-success"]),style:L({width:`${a.totalBytes>0?(a.totalBytes-a.freeBytes)/a.totalBytes*100:0}%`})},null,6)]),v<d.value.storage.length-1?(r(),l("div",Je)):m("",!0)]))),128))])],64)):m("",!0),t("div",Qe,[t("div",We,[t("h3",Ke,[o[9]||(o[9]=t("span",{class:"text-base"},"📀",-1)),y(" "+e(s.$t("system.browserStorage.title")),1)]),t("div",Xe,[n(u).origin?(r(),l("span",{key:0,class:B(["rounded-full px-2 py-0.5 text-[9px]",n(u).origin.persisted?"bg-success/10 text-success":"bg-warning/10 text-warning"])},e(n(u).origin.persisted?s.$t("system.browserStorage.persistent"):s.$t("system.browserStorage.bestEffort")),3)):m("",!0),n(u).loading?(r(),l("span",Ye,e(s.$t("system.browserStorage.scanning")),1)):(r(),l("button",{key:1,class:"text-[10px] text-text-muted hover:text-text-primary transition-colors",onClick:o[2]||(o[2]=a=>n(u).refresh())},e(s.$t("system.refresh")),1))])]),n(u).origin?(r(),P(et,{key:0,used:n(u).origin.usage,total:n(u).origin.quota,label:s.$t("system.browserStorage.indexedDbQuota")},null,8,["used","total","label"])):m("",!0),n(u).databases.length>0?(r(),l("div",Ze,[(r(!0),l(g,null,$(n(u).databases,a=>(r(),P(wt,{key:a.id,database:a,onClear:T},null,8,["database"]))),128))])):m("",!0),n(u).databases.length>0?(r(),l("p",ts,e(s.$t("system.browserStorage.totalRecords",{count:n(u).totalRecordCount.toLocaleString(),databases:n(u).databases.length})),1)):m("",!0)]),t("div",es,[t("div",ss,[t("h3",as,[o[10]||(o[10]=t("span",{class:"text-base"},"⚡",-1)),y(" "+e(s.$t("system.ollama.title")),1)]),t("div",os,[t("span",rs,e(s.$t("system.ollama.status")),1),t("span",ls,[t("span",{class:B(["inline-block h-2 w-2 rounded-full",f.value?"bg-success":"bg-error"])},null,2),t("span",{class:B(f.value?"text-success":"text-error")},e(f.value?s.$t("common.status.connected"):s.$t("common.status.disconnected")),3)]),t("span",ns,e(s.$t("system.ollama.version")),1),t("span",ds,e(x.value??"—"),1),t("span",is,e(s.$t("system.ollama.installedModels")),1),t("span",cs,e(n(_).models.length),1),t("span",us,e(s.$t("system.ollama.totalModelStorage")),1),t("span",ms,e(n(c)(E.value)),1),t("span",ps,e(s.$t("system.ollama.modelsLoaded")),1),t("span",xs,e(i.value.length),1)])]),t("div",ys,[t("h3",hs,[o[11]||(o[11]=t("span",{class:"text-base"},"📊",-1)),y(" "+e(s.$t("system.inference.title"))+" ",1),t("span",_s,"("+e(s.$t("system.inference.thisSession"))+")",1)]),h.value.totalSessions===0?(r(),l("div",fs,e(s.$t("system.inference.noSessions")),1)):(r(),l("div",vs,[t("span",gs,e(s.$t("system.inference.sessions")),1),t("span",bs,e(h.value.totalSessions),1),t("span",$s,e(s.$t("system.inference.avgSpeed")),1),t("span",ws,e(h.value.avgTps.toFixed(1))+" tok/s",1),t("span",ks,e(s.$t("system.inference.tokensGenerated")),1),t("span",Ss,e(h.value.totalTokensGenerated.toLocaleString()),1),t("span",Ms,e(s.$t("system.inference.avgTtft")),1),t("span",Bs,e(h.value.avgTtftMs.toFixed(0))+" ms",1)])),h.value.modelsUsed.length>0?(r(),l("div",zs,[t("span",Cs,e(s.$t("system.inference.modelsUsed"))+":",1),(r(!0),l(g,null,$(h.value.modelsUsed,a=>(r(),l("span",{key:a,class:"rounded-full bg-surface-overlay px-2 py-0.5 text-[10px] text-text-secondary"},e(a),1))),128))])):m("",!0)])]),t("div",Ds,[t("h3",Ls,[o[12]||(o[12]=t("span",{class:"text-base"},"⚡",-1)),y(" "+e(s.$t("system.activeModels.title")),1)]),i.value.length===0?(r(),l("div",Ts,e(s.$t("system.activeModels.noModels")),1)):(r(),l("div",Rs,[t("div",Is,[R.value>0?(r(),l("span",As,[y(e(s.$t("system.activeModels.vram"))+": ",1),t("span",Vs,e(n(c)(R.value)),1)])):m("",!0),I.value>0?(r(),l("span",Es,[y(e(s.$t("system.activeModels.ram"))+": ",1),t("span",Os,e(n(c)(I.value)),1)])):m("",!0),t("span",null,[y(e(s.$t("system.activeModels.total"))+": ",1),t("span",Ps,e(n(c)(R.value+I.value)),1)])]),(r(!0),l(g,null,$(i.value,a=>(r(),l("div",{key:a.digest,class:"flex items-center gap-4 rounded-lg bg-surface px-4 py-3 border border-border-default"},[t("div",Fs,[t("p",Gs,e(a.name),1),t("p",js,e(a.details.parameter_size)+" · "+e(a.details.quantization_level)+" · "+e(a.details.family),1)]),t("div",Us,[a.size_vram>0?(r(),l("p",qs,[t("span",Hs,e(s.$t("system.activeModels.vram")),1),t("span",Ns,e(n(c)(a.size_vram)),1)])):m("",!0),a.size-a.size_vram>0?(r(),l("p",Js,[t("span",Qs,e(s.$t("system.activeModels.ram")),1),t("span",Ws,e(n(c)(a.size-a.size_vram)),1)])):m("",!0),t("p",null,[t("span",Ks,e(s.$t("system.activeModels.ctx")),1),t("span",Xs,e(a.context_length.toLocaleString()),1)])]),t("div",{class:"text-xs text-text-muted shrink-0 w-16 text-end",title:a.expires_at},e(N(a.expires_at)),9,Ys)]))),128))]))]),t("div",Zs,[t("h3",ta,[o[13]||(o[13]=t("span",{class:"text-base"},"📦",-1)),y(" "+e(s.$t("system.installedModels.title")),1)]),n(_).models.length===0?(r(),l("div",ea,e(s.$t("system.installedModels.noModels")),1)):(r(),l("div",sa,[t("table",aa,[t("thead",null,[t("tr",oa,[t("th",ra,e(s.$t("system.installedModels.model")),1),t("th",la,e(s.$t("system.installedModels.family")),1),t("th",na,e(s.$t("system.installedModels.parameters")),1),t("th",da,e(s.$t("system.installedModels.quantization")),1),t("th",ia,e(s.$t("system.installedModels.size")),1)])]),t("tbody",null,[(r(!0),l(g,null,$(n(_).models,a=>(r(),l("tr",{key:a.name,class:"border-b border-border-default/50"},[t("td",ca,e(a.name),1),t("td",ua,e(a.details.family),1),t("td",ma,e(a.details.parameter_size),1),t("td",pa,e(a.details.quantization_level),1),t("td",xa,e(n(c)(a.size)),1)]))),128))])])]))])]))}});export{$a as default};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BI1ok0nK.js","assets/index-B0RKZCO8.css","assets/canvas-ai-db-DIu3Cyqr.js"])))=>i.map(i=>d[i]);
2
+ import{c as J,b as G,e as l,f as t,t as e,u as n,i as m,F as g,k as $,l as L,a as S,j as r,A as Q,B as Y,Y as K,p as O,h as y,g as B,q as P,r as k,o as F,_ as z}from"./index-BI1ok0nK.js";import{d as W,a as X}from"./download-WPaeALA4.js";import{u as Z}from"./metrics-store-BZ8E63Rc.js";import{b as c}from"./format-BqVZ9rwM.js";import{u as tt}from"./storage-store-BVsJ2m6T.js";import{_ as et}from"./StorageGauge.vue_vue_type_style_index_0_lang-OYUc8hU5.js";import{D as st}from"./download-DBk31Sbj.js";const at=J("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);async function ot(){try{const p=await fetch("/__system-info");return p.ok?await p.json():null}catch{return null}}const rt={class:"rounded-lg border border-border-default bg-surface p-3 space-y-2.5"},lt={class:"flex items-center justify-between"},nt={class:"flex items-center gap-2"},dt={class:"text-sm"},it={class:"text-xs font-medium text-text-primary"},ct={class:"flex items-center gap-2"},ut={class:"text-[10px] font-medium text-text-secondary"},mt=["title"],pt={key:0,class:"h-1.5 rounded-full bg-surface-overlay overflow-hidden"},xt={class:"flex h-full"},yt=["title"],ht={key:1,class:"h-1.5 rounded-full bg-surface-overlay"},_t={class:"flex items-center justify-between text-[10px] text-text-muted"},ft={key:2,class:"space-y-1"},vt={class:"flex-1 text-text-muted"},gt={class:"text-text-muted"},bt={class:"text-text-secondary w-14 text-end"},$t={key:3,class:"text-[10px] text-text-muted italic"},wt=G({__name:"StorageBreakdownCard",props:{database:{}},emits:["clear"],setup(p,{emit:C}){const _=p,u=C,b=["#8b5cf6","#06b6d4","#f59e0b","#10b981","#f43f5e"],T=S(()=>_.database.stores.filter(x=>x.bytes>0).map((x,f)=>({name:x.name,bytes:x.bytes,color:b[f%b.length]})));return(x,f)=>(r(),l("div",rt,[t("div",lt,[t("div",nt,[t("span",dt,e(p.database.icon),1),t("span",it,e(p.database.label),1)]),t("div",ct,[t("span",ut,e(n(c)(p.database.totalBytes)),1),p.database.totalBytes>0?(r(),l("button",{key:0,class:"rounded px-1.5 py-0.5 text-[9px] text-text-muted hover:text-error hover:bg-error/10 transition-colors",title:x.$t("system.browserStorage.clearAll"),onClick:f[0]||(f[0]=i=>u("clear",p.database.id))},e(x.$t("common.actions.clear")),9,mt)):m("",!0)])]),p.database.totalBytes>0?(r(),l("div",pt,[t("div",xt,[(r(!0),l(g,null,$(T.value,i=>(r(),l("div",{key:i.name,class:"h-full transition-all duration-500 first:rounded-s-full last:rounded-e-full",style:L({width:`${i.bytes/p.database.totalBytes*100}%`,backgroundColor:i.color}),title:`${i.name}: ${n(c)(i.bytes)}`},null,12,yt))),128))])])):(r(),l("div",ht)),t("div",_t,[t("span",null,e(p.database.recordCount.toLocaleString())+" records",1),t("span",null,e(p.database.type==="indexeddb"?"IndexedDB":"External"),1)]),p.database.stores.some(i=>i.count>0)?(r(),l("div",ft,[(r(!0),l(g,null,$(p.database.stores.filter(i=>i.count>0),(i,d)=>(r(),l("div",{key:i.name,class:"flex items-center gap-2 text-[10px]"},[t("span",{class:"h-2 w-2 shrink-0 rounded-full",style:L({backgroundColor:b[d%b.length]})},null,4),t("span",vt,e(i.name),1),t("span",gt,e(i.count),1),t("span",bt,e(n(c)(i.bytes)),1)]))),128))])):(r(),l("p",$t,e(x.$t("system.browserStorage.empty")),1))]))}}),kt={class:"max-w-4xl space-y-6"},St={class:"flex items-center justify-between"},Mt={class:"text-lg font-semibold text-text-primary"},Bt={class:"text-xs text-text-muted mt-0.5"},zt={class:"flex items-center gap-2"},Ct={class:"relative"},Dt={key:1,class:"absolute end-0 top-full z-20 mt-1 w-64 rounded-lg border border-border-default bg-surface-raised shadow-lg py-1"},Lt={key:0,class:"flex flex-col items-center justify-center py-16 gap-4"},Tt={class:"text-sm text-text-secondary"},Rt={class:"text-[10px] text-text-muted"},It={key:1,class:"rounded-lg border border-border-default bg-surface-raised p-4 text-xs text-text-muted"},At={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Vt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Et={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ot={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Pt={class:"text-text-muted"},Ft={class:"text-text-primary"},Gt={class:"text-text-muted"},jt={class:"text-text-primary"},Ut={class:"text-text-muted"},qt={class:"text-text-primary"},Ht={class:"text-text-muted"},Nt={class:"text-text-primary"},Jt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Qt={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Yt={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Kt={class:"text-text-muted"},Wt={class:"text-text-primary"},Xt={class:"text-text-muted"},Zt={class:"text-text-primary"},te={class:"text-text-muted"},ee={class:"text-text-primary"},se={class:"text-text-muted"},ae={class:"text-text-primary"},oe={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},re={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},le={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ne={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},de={class:"text-text-muted"},ie={class:"text-text-primary"},ce={class:"text-text-muted"},ue={class:"text-text-primary"},me={class:"text-text-muted"},pe={class:"text-text-primary"},xe={class:"text-text-muted"},ye={class:"text-text-primary"},he={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},_e={class:"text-sm font-medium text-text-primary flex items-center gap-2"},fe={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},ve={class:"text-text-muted"},ge={class:"text-text-primary"},be={class:"text-text-muted"},$e={class:"text-text-primary"},we={class:"text-text-muted"},ke={class:"text-text-primary"},Se={class:"h-2 rounded-full bg-surface-overlay overflow-hidden"},Me={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Be={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ze={class:"text-text-muted"},Ce={class:"text-text-primary"},De={class:"text-text-muted"},Le={class:"text-text-primary"},Te={class:"text-text-muted"},Re={class:"text-text-primary"},Ie={key:1,class:"col-span-2 border-b border-border-default/50 my-1"},Ae={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Ve={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ee={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},Oe={class:"text-text-muted"},Pe={class:"text-text-primary"},Fe={class:"text-text-muted"},Ge={class:"text-text-primary"},je={class:"text-text-muted"},Ue={class:"text-text-primary"},qe={class:"text-text-muted"},He={class:"text-text-primary"},Ne={class:"h-2 rounded-full bg-surface-overlay overflow-hidden"},Je={key:0,class:"border-b border-border-default/50"},Qe={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},Ye={class:"flex items-center justify-between"},Ke={class:"text-sm font-medium text-text-primary flex items-center gap-2"},We={class:"flex items-center gap-2"},Xe={key:2,class:"text-[10px] text-text-muted"},Ze={key:1,class:"grid grid-cols-1 md:grid-cols-2 gap-3"},ts={key:2,class:"text-[9px] text-text-muted"},es={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},ss={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},as={class:"text-sm font-medium text-text-primary flex items-center gap-2"},os={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},rs={class:"text-text-muted"},ls={class:"flex items-center gap-1.5"},ns={class:"text-text-muted"},ds={class:"text-text-primary"},is={class:"text-text-muted"},cs={class:"text-text-primary"},us={class:"text-text-muted"},ms={class:"text-text-primary"},ps={class:"text-text-muted"},xs={class:"text-text-primary"},ys={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},hs={class:"text-sm font-medium text-text-primary flex items-center gap-2"},_s={class:"text-[10px] text-text-muted font-normal"},fs={key:0,class:"text-xs text-text-muted py-2"},vs={key:1,class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},gs={class:"text-text-muted"},bs={class:"text-text-primary font-medium"},$s={class:"text-text-muted"},ws={class:"text-accent font-medium"},ks={class:"text-text-muted"},Ss={class:"text-text-primary font-medium"},Ms={class:"text-text-muted"},Bs={class:"text-text-primary font-medium"},zs={key:2,class:"flex flex-wrap gap-1.5 pt-1"},Cs={class:"text-[10px] text-text-muted me-1"},Ds={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},Ls={class:"text-sm font-medium text-text-primary flex items-center gap-2"},Ts={key:0,class:"text-xs text-text-muted py-2"},Rs={key:1,class:"space-y-2"},Is={class:"flex gap-4 text-xs text-text-secondary"},As={key:0},Vs={class:"text-accent font-medium"},Es={key:1},Os={class:"text-text-primary font-medium"},Ps={class:"text-text-primary font-medium"},Fs={class:"flex-1 min-w-0"},Gs={class:"text-sm font-medium text-text-primary truncate"},js={class:"text-xs text-text-muted"},Us={class:"text-end text-xs space-y-0.5 shrink-0"},qs={key:0},Hs={class:"text-text-muted"},Ns={class:"ms-1.5 text-accent font-medium"},Js={key:1},Qs={class:"text-text-muted"},Ys={class:"ms-1.5 text-text-primary font-medium"},Ks={class:"text-text-muted"},Ws={class:"ms-1.5 text-text-secondary"},Xs=["title"],Zs={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-3"},ta={class:"text-sm font-medium text-text-primary flex items-center gap-2"},ea={key:0,class:"text-xs text-text-muted py-2"},sa={key:1,class:"overflow-x-auto"},aa={class:"w-full text-xs"},oa={class:"border-b border-border-default text-text-muted"},ra={class:"text-start py-1.5 pe-4 font-medium"},la={class:"text-start py-1.5 pe-4 font-medium"},na={class:"text-start py-1.5 pe-4 font-medium"},da={class:"text-start py-1.5 pe-4 font-medium"},ia={class:"text-end py-1.5 font-medium"},ca={class:"py-1.5 pe-4 text-text-primary font-medium"},ua={class:"py-1.5 pe-4 text-text-secondary"},ma={class:"py-1.5 pe-4 text-text-secondary"},pa={class:"py-1.5 pe-4 text-text-secondary"},xa={class:"py-1.5 text-end text-text-secondary"},$a=G({__name:"SystemPage",setup(p){const C=Z(),_=Q(),u=tt(),b=k(null);async function T(s){if(b.value===s){const o={rag:()=>z(()=>import("./vector-db-ChAzHl5A.js"),[]).then(a=>a.vectorDB.clear()),conversations:()=>z(()=>import("./index-BI1ok0nK.js").then(a=>a.aA),__vite__mapDeps([0,1])).then(a=>a.conversationDB.clear()),benchmarks:()=>z(()=>import("./benchmark-db-D8D5Wf9h.js"),[]).then(a=>a.benchmarkDB.clear()),"message-memory":()=>z(()=>import("./message-memory-db-C3Ifhs2B.js"),[]).then(a=>a.messageMemoryDB.clear()),"canvas-ai":()=>z(()=>import("./canvas-ai-db-DIu3Cyqr.js"),__vite__mapDeps([2,0,1])).then(a=>a.canvasAiDB.clear())};try{await o[s]?.(),await u.refresh()}catch(a){console.error(`Failed to clear database ${s}:`,a)}b.value=null}else b.value=s,setTimeout(()=>{b.value===s&&(b.value=null)},3e3)}const x=k(null),f=k(!1),i=k([]),d=k(null),D=k(!0),E=S(()=>_.models.reduce((s,o)=>s+o.size,0)),R=S(()=>i.value.reduce((s,o)=>s+o.size_vram,0)),I=S(()=>i.value.reduce((s,o)=>s+(o.size-o.size_vram),0)),h=S(()=>C.aggregate),j=S(()=>{if(!d.value)return"";const s=d.value.cpu.maxClockMhz;return s>=1e3?`${(s/1e3).toFixed(2)} GHz`:`${s} MHz`}),M=S(()=>{if(!d.value)return 0;const{totalBytes:s,freeBytes:o}=d.value.memory;return s>0?Math.round((s-o)/s*100):0}),w=k(!1);function U(){const s=d.value,a={hardware:s?{os:s.os,cpu:s.cpu,memory:s.memory,gpu:s.gpu,storage:s.storage}:null,ollama:{connected:f.value,version:x.value,installedModels:_.models.map(v=>({name:v.name,size:v.size,family:v.details.family,parameterSize:v.details.parameter_size,quantization:v.details.quantization_level})),runningModels:i.value},inference:h.value,storage:{origin:u.origin,databases:u.databases}};W(a,`system-report-${new Date().toISOString().slice(0,10)}.json`),w.value=!1}function q(){const s=d.value,o=["# System Report — LLMxRay","",`**Date:** ${new Date().toLocaleString()}`,""];if(s){o.push("## Operating System"),o.push(`- **OS:** ${s.os.name}`),o.push(`- **Version:** ${s.os.version}`),o.push(`- **Architecture:** ${s.os.arch}`),o.push(""),o.push("## Processor"),o.push(`- **CPU:** ${s.cpu.name}`),o.push(`- **Cores:** ${s.cpu.cores} physical, ${s.cpu.logicalProcessors} logical`),o.push(`- **Max Clock:** ${s.cpu.maxClockMhz>=1e3?(s.cpu.maxClockMhz/1e3).toFixed(2)+" GHz":s.cpu.maxClockMhz+" MHz"}`),o.push(""),o.push("## Memory"),o.push(`- **Total:** ${c(s.memory.totalBytes)}`),o.push(`- **Available:** ${c(s.memory.freeBytes)}`),o.push(`- **Used:** ${c(s.memory.totalBytes-s.memory.freeBytes)} (${M.value}%)`),o.push(""),o.push("## Graphics");for(const a of s.gpu)o.push(`- **GPU:** ${a.name}`),o.push(` - Adapter RAM: ${a.adapterRamBytes>0?c(a.adapterRamBytes):"Shared / Not reported"}`),a.driverVersion&&o.push(` - Driver: ${a.driverVersion}`);o.push(""),o.push("## Storage");for(const a of s.storage)o.push(`- **${a.drive}:** ${c(a.totalBytes)} total, ${c(a.freeBytes)} free`);o.push("")}if(o.push("## Ollama Runtime"),o.push(`- **Status:** ${f.value?"Connected":"Disconnected"}`),x.value&&o.push(`- **Version:** ${x.value}`),o.push(`- **Installed Models:** ${_.models.length}`),_.models.length>0)for(const a of _.models)o.push(` - ${a.name} (${a.details.parameter_size??"?"}, ${a.details.quantization_level??"?"})`);if(o.push(`- **Total Model Storage:** ${c(E.value)}`),o.push(`- **Active Models:** ${i.value.length}`),i.value.length>0)for(const a of i.value)o.push(` - ${a.name} (ctx: ${a.context_length??"?"})`);o.push(""),h.value.totalSessions>0&&(o.push("## Inference (This Session)"),o.push(`- **Sessions:** ${h.value.totalSessions}`),o.push(`- **Avg Speed:** ${h.value.avgTps.toFixed(1)} tok/s`),o.push(`- **Tokens Generated:** ${h.value.totalTokensGenerated.toLocaleString()}`),o.push(`- **Avg TTFT:** ${h.value.avgTtftMs.toFixed(0)} ms`),o.push("")),o.push("---"),o.push("*Generated by LLMxRay — Local LLM Observatory*"),X(o.join(`
3
+ `),`system-report-${new Date().toISOString().slice(0,10)}.md`),w.value=!1}let A=null;async function H(){try{x.value=await F.version(),f.value=!0}catch{f.value=!1,x.value=null}try{i.value=await F.ps()}catch{i.value=[]}}async function V(){await Promise.all([H(),ot().then(s=>{s&&(d.value=s)}),u.refreshIfStale(3e4)])}function N(s){const o=new Date(s).getTime()-Date.now();if(o<=0)return"expiring...";const a=Math.floor(o/6e4);return a<1?"< 1 min":a<60?`${a} min`:`${Math.floor(a/60)}h ${a%60}m`}return Y(async()=>{D.value=!0,await V(),D.value=!1,_.models.length===0&&await _.fetchModels(),C.recalculateAggregate(),A=setInterval(V,5e3)}),K(()=>{A&&clearInterval(A)}),(s,o)=>(r(),l("div",kt,[t("div",St,[t("div",null,[t("h2",Mt,e(s.$t("system.title")),1),t("p",Bt,e(s.$t("system.subtitle")),1)]),t("div",zt,[t("div",Ct,[t("button",{class:"flex items-center gap-1 rounded-lg bg-surface-overlay px-3 py-1.5 text-xs text-text-secondary hover:bg-border-default transition-colors",onClick:o[0]||(o[0]=a=>w.value=!w.value)},[O(n(st),{class:"h-3.5 w-3.5"}),y(" "+e(s.$t("system.export.title")),1)]),w.value?(r(),l("div",{key:0,class:"fixed inset-0 z-10",onClick:o[1]||(o[1]=a=>w.value=!1)})):m("",!0),w.value?(r(),l("div",Dt,[t("button",{class:"w-full px-3 py-2 text-start text-xs text-text-secondary hover:bg-surface-overlay",onClick:q},e(s.$t("system.export.downloadMarkdown")),1),t("button",{class:"w-full px-3 py-2 text-start text-xs text-text-secondary hover:bg-surface-overlay",onClick:U},e(s.$t("system.export.downloadJson")),1)])):m("",!0)]),t("button",{class:"rounded-lg bg-surface-overlay px-3 py-1.5 text-xs text-text-secondary hover:bg-border-default transition-colors",onClick:V},e(s.$t("system.refresh")),1)])]),D.value&&!d.value?(r(),l("div",Lt,[O(n(at),{class:"h-10 w-10 animate-spin text-accent"}),t("p",Tt,e(s.$t("system.detecting")),1),t("p",Rt,e(s.$t("system.detectingDetail")),1)])):m("",!0),!D.value&&!d.value?(r(),l("div",It,e(s.$t("system.unavailable")),1)):m("",!0),d.value?(r(),l(g,{key:2},[t("div",At,[t("div",Vt,[t("h3",Et,[o[3]||(o[3]=t("span",{class:"text-base"},"🖥",-1)),y(" "+e(s.$t("system.os.title")),1)]),t("div",Ot,[t("span",Pt,e(s.$t("system.os.os")),1),t("span",Ft,e(d.value.os.name),1),t("span",Gt,e(s.$t("system.os.version")),1),t("span",jt,e(d.value.os.version),1),t("span",Ut,e(s.$t("system.os.build")),1),t("span",qt,e(d.value.os.build||"—"),1),t("span",Ht,e(s.$t("system.os.architecture")),1),t("span",Nt,e(d.value.os.arch),1)])]),t("div",Jt,[t("h3",Qt,[o[4]||(o[4]=t("span",{class:"text-base"},"💻",-1)),y(" "+e(s.$t("system.device.title")),1)]),t("div",Yt,[t("span",Kt,e(s.$t("system.device.name")),1),t("span",Wt,e(d.value.device.name),1),t("span",Xt,e(s.$t("system.device.manufacturer")),1),t("span",Zt,e(d.value.device.manufacturer||"—"),1),t("span",te,e(s.$t("system.device.model")),1),t("span",ee,e(d.value.device.model||"—"),1),d.value.device.family?(r(),l(g,{key:0},[t("span",se,e(s.$t("system.device.family")),1),t("span",ae,e(d.value.device.family),1)],64)):m("",!0)])])]),t("div",oe,[t("div",re,[t("h3",le,[o[5]||(o[5]=t("span",{class:"text-base"},"⚙",-1)),y(" "+e(s.$t("system.cpu.title")),1)]),t("div",ne,[t("span",de,e(s.$t("system.cpu.cpu")),1),t("span",ie,e(d.value.cpu.name),1),t("span",ce,e(s.$t("system.cpu.physicalCores")),1),t("span",ue,e(d.value.cpu.cores),1),t("span",me,e(s.$t("system.cpu.logicalProcessors")),1),t("span",pe,e(d.value.cpu.logicalProcessors),1),t("span",xe,e(s.$t("system.cpu.maxClock")),1),t("span",ye,e(j.value),1)])]),t("div",he,[t("h3",_e,[o[6]||(o[6]=t("span",{class:"text-base"},"🧠",-1)),y(" "+e(s.$t("system.memory.title")),1)]),t("div",fe,[t("span",ve,e(s.$t("system.memory.totalRam")),1),t("span",ge,e(n(c)(d.value.memory.totalBytes)),1),t("span",be,e(s.$t("system.memory.available")),1),t("span",$e,e(n(c)(d.value.memory.freeBytes)),1),t("span",we,e(s.$t("system.memory.inUse")),1),t("span",ke,e(n(c)(d.value.memory.totalBytes-d.value.memory.freeBytes))+" ("+e(M.value)+"%)",1)]),t("div",Se,[t("div",{class:B(["h-full rounded-full transition-all duration-500",M.value>85?"bg-error":M.value>60?"bg-warning":"bg-success"]),style:L({width:`${M.value}%`})},null,6)])])]),t("div",Me,[t("h3",Be,[o[7]||(o[7]=t("span",{class:"text-base"},"🎮",-1)),y(" "+e(s.$t("system.gpu.title")),1)]),(r(!0),l(g,null,$(d.value.gpu,(a,v)=>(r(),l("div",{key:v,class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},[t("span",ze,e(s.$t("system.gpu.gpu"))+" "+e(d.value.gpu.length>1?v+1:""),1),t("span",Ce,e(a.name),1),t("span",De,e(s.$t("system.gpu.adapterRam")),1),t("span",Le,e(a.adapterRamBytes>0?n(c)(a.adapterRamBytes):s.$t("system.gpu.sharedNotReported")),1),a.driverVersion?(r(),l(g,{key:0},[t("span",Te,e(s.$t("system.gpu.driver")),1),t("span",Re,e(a.driverVersion),1)],64)):m("",!0),v<d.value.gpu.length-1?(r(),l("div",Ie)):m("",!0)]))),128))]),t("div",Ae,[t("h3",Ve,[o[8]||(o[8]=t("span",{class:"text-base"},"💾",-1)),y(" "+e(s.$t("system.storage.title")),1)]),(r(!0),l(g,null,$(d.value.storage,(a,v)=>(r(),l("div",{key:v,class:"space-y-2"},[t("div",Ee,[t("span",Oe,e(s.$t("system.storage.drive")),1),t("span",Pe,e(a.drive),1),t("span",Fe,e(s.$t("system.storage.total")),1),t("span",Ge,e(n(c)(a.totalBytes)),1),t("span",je,e(s.$t("system.storage.free")),1),t("span",Ue,e(n(c)(a.freeBytes)),1),t("span",qe,e(s.$t("system.storage.used")),1),t("span",He,e(n(c)(a.totalBytes-a.freeBytes))+" ("+e(a.totalBytes>0?Math.round((a.totalBytes-a.freeBytes)/a.totalBytes*100):0)+"%) ",1)]),t("div",Ne,[t("div",{class:B(["h-full rounded-full transition-all duration-500",a.totalBytes>0&&(a.totalBytes-a.freeBytes)/a.totalBytes>.85?"bg-error":(a.totalBytes-a.freeBytes)/a.totalBytes>.6?"bg-warning":"bg-success"]),style:L({width:`${a.totalBytes>0?(a.totalBytes-a.freeBytes)/a.totalBytes*100:0}%`})},null,6)]),v<d.value.storage.length-1?(r(),l("div",Je)):m("",!0)]))),128))])],64)):m("",!0),t("div",Qe,[t("div",Ye,[t("h3",Ke,[o[9]||(o[9]=t("span",{class:"text-base"},"📀",-1)),y(" "+e(s.$t("system.browserStorage.title")),1)]),t("div",We,[n(u).origin?(r(),l("span",{key:0,class:B(["rounded-full px-2 py-0.5 text-[9px]",n(u).origin.persisted?"bg-success/10 text-success":"bg-warning/10 text-warning"])},e(n(u).origin.persisted?s.$t("system.browserStorage.persistent"):s.$t("system.browserStorage.bestEffort")),3)):m("",!0),n(u).loading?(r(),l("span",Xe,e(s.$t("system.browserStorage.scanning")),1)):(r(),l("button",{key:1,class:"text-[10px] text-text-muted hover:text-text-primary transition-colors",onClick:o[2]||(o[2]=a=>n(u).refresh())},e(s.$t("system.refresh")),1))])]),n(u).origin?(r(),P(et,{key:0,used:n(u).origin.usage,total:n(u).origin.quota,label:s.$t("system.browserStorage.indexedDbQuota")},null,8,["used","total","label"])):m("",!0),n(u).databases.length>0?(r(),l("div",Ze,[(r(!0),l(g,null,$(n(u).databases,a=>(r(),P(wt,{key:a.id,database:a,onClear:T},null,8,["database"]))),128))])):m("",!0),n(u).databases.length>0?(r(),l("p",ts,e(s.$t("system.browserStorage.totalRecords",{count:n(u).totalRecordCount.toLocaleString(),databases:n(u).databases.length})),1)):m("",!0)]),t("div",es,[t("div",ss,[t("h3",as,[o[10]||(o[10]=t("span",{class:"text-base"},"⚡",-1)),y(" "+e(s.$t("system.ollama.title")),1)]),t("div",os,[t("span",rs,e(s.$t("system.ollama.status")),1),t("span",ls,[t("span",{class:B(["inline-block h-2 w-2 rounded-full",f.value?"bg-success":"bg-error"])},null,2),t("span",{class:B(f.value?"text-success":"text-error")},e(f.value?s.$t("common.status.connected"):s.$t("common.status.disconnected")),3)]),t("span",ns,e(s.$t("system.ollama.version")),1),t("span",ds,e(x.value??"—"),1),t("span",is,e(s.$t("system.ollama.installedModels")),1),t("span",cs,e(n(_).models.length),1),t("span",us,e(s.$t("system.ollama.totalModelStorage")),1),t("span",ms,e(n(c)(E.value)),1),t("span",ps,e(s.$t("system.ollama.modelsLoaded")),1),t("span",xs,e(i.value.length),1)])]),t("div",ys,[t("h3",hs,[o[11]||(o[11]=t("span",{class:"text-base"},"📊",-1)),y(" "+e(s.$t("system.inference.title"))+" ",1),t("span",_s,"("+e(s.$t("system.inference.thisSession"))+")",1)]),h.value.totalSessions===0?(r(),l("div",fs,e(s.$t("system.inference.noSessions")),1)):(r(),l("div",vs,[t("span",gs,e(s.$t("system.inference.sessions")),1),t("span",bs,e(h.value.totalSessions),1),t("span",$s,e(s.$t("system.inference.avgSpeed")),1),t("span",ws,e(h.value.avgTps.toFixed(1))+" tok/s",1),t("span",ks,e(s.$t("system.inference.tokensGenerated")),1),t("span",Ss,e(h.value.totalTokensGenerated.toLocaleString()),1),t("span",Ms,e(s.$t("system.inference.avgTtft")),1),t("span",Bs,e(h.value.avgTtftMs.toFixed(0))+" ms",1)])),h.value.modelsUsed.length>0?(r(),l("div",zs,[t("span",Cs,e(s.$t("system.inference.modelsUsed"))+":",1),(r(!0),l(g,null,$(h.value.modelsUsed,a=>(r(),l("span",{key:a,class:"rounded-full bg-surface-overlay px-2 py-0.5 text-[10px] text-text-secondary"},e(a),1))),128))])):m("",!0)])]),t("div",Ds,[t("h3",Ls,[o[12]||(o[12]=t("span",{class:"text-base"},"⚡",-1)),y(" "+e(s.$t("system.activeModels.title")),1)]),i.value.length===0?(r(),l("div",Ts,e(s.$t("system.activeModels.noModels")),1)):(r(),l("div",Rs,[t("div",Is,[R.value>0?(r(),l("span",As,[y(e(s.$t("system.activeModels.vram"))+": ",1),t("span",Vs,e(n(c)(R.value)),1)])):m("",!0),I.value>0?(r(),l("span",Es,[y(e(s.$t("system.activeModels.ram"))+": ",1),t("span",Os,e(n(c)(I.value)),1)])):m("",!0),t("span",null,[y(e(s.$t("system.activeModels.total"))+": ",1),t("span",Ps,e(n(c)(R.value+I.value)),1)])]),(r(!0),l(g,null,$(i.value,a=>(r(),l("div",{key:a.digest,class:"flex items-center gap-4 rounded-lg bg-surface px-4 py-3 border border-border-default"},[t("div",Fs,[t("p",Gs,e(a.name),1),t("p",js,e(a.details.parameter_size)+" · "+e(a.details.quantization_level)+" · "+e(a.details.family),1)]),t("div",Us,[a.size_vram>0?(r(),l("p",qs,[t("span",Hs,e(s.$t("system.activeModels.vram")),1),t("span",Ns,e(n(c)(a.size_vram)),1)])):m("",!0),a.size-a.size_vram>0?(r(),l("p",Js,[t("span",Qs,e(s.$t("system.activeModels.ram")),1),t("span",Ys,e(n(c)(a.size-a.size_vram)),1)])):m("",!0),t("p",null,[t("span",Ks,e(s.$t("system.activeModels.ctx")),1),t("span",Ws,e(a.context_length.toLocaleString()),1)])]),t("div",{class:"text-xs text-text-muted shrink-0 w-16 text-end",title:a.expires_at},e(N(a.expires_at)),9,Xs)]))),128))]))]),t("div",Zs,[t("h3",ta,[o[13]||(o[13]=t("span",{class:"text-base"},"📦",-1)),y(" "+e(s.$t("system.installedModels.title")),1)]),n(_).models.length===0?(r(),l("div",ea,e(s.$t("system.installedModels.noModels")),1)):(r(),l("div",sa,[t("table",aa,[t("thead",null,[t("tr",oa,[t("th",ra,e(s.$t("system.installedModels.model")),1),t("th",la,e(s.$t("system.installedModels.family")),1),t("th",na,e(s.$t("system.installedModels.parameters")),1),t("th",da,e(s.$t("system.installedModels.quantization")),1),t("th",ia,e(s.$t("system.installedModels.size")),1)])]),t("tbody",null,[(r(!0),l(g,null,$(n(_).models,a=>(r(),l("tr",{key:a.name,class:"border-b border-border-default/50"},[t("td",ca,e(a.name),1),t("td",ua,e(a.details.family),1),t("td",ma,e(a.details.parameter_size),1),t("td",pa,e(a.details.quantization_level),1),t("td",xa,e(n(c)(a.size)),1)]))),128))])])]))])]))}});export{$a as default};
@@ -1 +1 @@
1
- import{b as n,e as t,F as c,k as i,g as d,t as l,j as r}from"./index-534TcCbY.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-BI1ok0nK.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-BiB0M6lv.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-534TcCbY.js";const S=["title"],V=y({__name:"TokenChip",props:{token:{},color:{},isLatest:{type:Boolean},heatmapMode:{}},emits:["hover","click"],setup(o){const l=o,m=k(()=>({borderBottomColor:l.color,borderBottomWidth:"3px",borderBottomStyle:"solid"}));return(e,s)=>(a(),r("span",{class:"inline cursor-pointer rounded-sm px-px text-text-primary transition-all hover:bg-surface-overlay",style:_([m.value,o.isLatest?{animation:"glow-in 1.5s ease-in-out infinite",borderRadius:"2px"}:{}]),title:`Token #${o.token.index} | Confidence: ${(o.token.confidence*100).toFixed(0)}% | Latency: ${o.token.interTokenLatencyMs}ms`,onMouseenter:s[0]||(s[0]=i=>e.$emit("hover",o.token)),onClick:s[1]||(s[1]=i=>e.$emit("click",o.token))},u(o.token.text),45,S))}}),I={class:"flex items-center gap-2 text-xs text-text-secondary"},D={class:"flex h-3 overflow-hidden rounded-sm"},W=y({__name:"ConfidenceHeatmap",setup(o){const l=[0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1];return(m,e)=>(a(),r("div",I,[e[0]||(e[0]=t("span",null,"Low",-1)),t("div",D,[(a(),r(b,null,C(l,s=>t("div",{key:s,class:"w-4 h-full",style:_({backgroundColor:f(x)(s)})},null,4)),64))]),e[1]||(e[1]=t("span",null,"High",-1)),e[2]||(e[2]=t("span",{class:"ms-2 text-text-muted"},"(confidence from token latency)",-1))]))}}),j={class:"flex flex-col gap-3"},q={key:0,class:"text-text-muted italic"},z={key:0,class:"rounded-lg border border-border-default bg-surface-raised p-3 text-xs space-y-1"},E={class:"flex gap-4"},A={class:"text-text-muted"},G={class:"text-text-muted"},J={class:"text-text-primary"},K={class:"text-text-muted"},O={class:"text-text-primary"},P={class:"text-text-muted"},Q={class:"text-text-primary font-mono"},Y=y({__name:"TokenStreamDisplay",props:{sessionId:{},heatmapMode:{}},setup(o){const l=o,m=k(()=>l.sessionId),{tokens:e,confidenceRange:s}=B(m),i=T(null),d=T(null),h=k(()=>l.heatmapMode??"confidence");function $(c){switch(h.value){case"confidence":return x(c.confidence);case"latency":{const n=s.value.median;return M(c.interTokenLatencyMs,n>0?n*100:50)}case"position":{const n=e.value.length>1?c.index/(e.value.length-1):.5;return x(1-n)}default:return x(c.confidence)}}return R(()=>e.value.length,async()=>{await N(),i.value&&(i.value.scrollTop=i.value.scrollHeight)}),(c,n)=>(a(),r("div",j,[F(W),t("div",{ref_key:"containerRef",ref:i,class:"min-h-[200px] max-h-[500px] overflow-auto rounded-lg border border-border-default bg-surface p-4 font-mono text-sm leading-relaxed"},[f(e).length===0?(a(),r("span",q," Waiting for tokens... ")):g("",!0),(a(!0),r(b,null,C(f(e),(p,w)=>(a(),H(V,{key:p.id,token:p,color:$(p),"is-latest":w===f(e).length-1,"heatmap-mode":h.value,onHover:n[0]||(n[0]=L=>d.value=L)},null,8,["token","color","is-latest","heatmap-mode"]))),128))],512),d.value?(a(),r("div",z,[t("div",E,[t("span",A,"Token #"+u(d.value.index),1),t("span",G,[n[1]||(n[1]=v(" Confidence: ",-1)),t("span",J,u((d.value.confidence*100).toFixed(0))+"%",1)]),t("span",K,[n[2]||(n[2]=v(" Latency: ",-1)),t("span",O,u(d.value.interTokenLatencyMs)+"ms",1)]),t("span",P,[n[3]||(n[3]=v(" Text: ",-1)),t("span",Q,'"'+u(d.value.text)+'"',1)])])])):g("",!0)]))}});export{Y as _};
1
+ import{c as x,a as B,l as M}from"./StatusBadge.vue_vue_type_script_setup_true_lang-PDuG6Cj4.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-BI1ok0nK.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{a1 as SO,w as Ge,b as ot,a2 as wO,W as JP,e as be,p as ht,s as Ki,a3 as wt,u as Se,B as fn,j as ye,g as bt,a4 as KP,m as lt,r as ze,a as Fe,a5 as Fs,a6 as PO,a7 as cr,a8 as pu,a9 as eT,f as he,F as gt,k as Jt,l as hi,y as vi,aa as jd,ab as tT,q as Ct,i as Qe,a0 as Mi,t as Te,ac as iT,ad as Zd,ae as nT,af as rT,ag as Xr,ah as ut,ai as nt,aj as io,ak as sT,al as TO,am as Vd,an as Mu,K as wr,h as CO,ao as aT,ap as oT,aq as kO,d as lT,A as EO,o as Tc,n as uT,$ as cT,v as Yi,C as Vn,D as ia,G as hT,Y as fT,U as ig,z as dT,T as pT}from"./index-534TcCbY.js";import{u as Ud}from"./tool-workshop-store-9_FKfdnT.js";import{d as ng}from"./download-WPaeALA4.js";import{u as mT}from"./toolcall-store-C4Trr01T.js";import{u as gT}from"./session-store-BQ0TF24S.js";import{canvasAiDB as qd}from"./canvas-ai-db-BpqhUp6k.js";import{J as rg,a as yT,g as vT,b as OT}from"./JsonTreeNode-C0UNUwZm.js";import{D as xT}from"./base-CrPFMexR.js";import{_ as AO}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{D as sg}from"./download-pCIjWOn5.js";import{T as bT}from"./trash-2-DjfJXqVK.js";class ST extends xT{constructor(){super(...arguments),this.tokenize=TT}equals(e,i,n){return n.ignoreWhitespace?((!n.newlineIsToken||!e.includes(`
1
+ import{a2 as SO,w as Ge,b as ot,a3 as wO,Y as JP,e as be,p as ht,s as Ki,a4 as wt,u as Se,B as fn,j as ye,g as bt,a5 as KP,m as lt,r as ze,a as Fe,a6 as Fs,a7 as PO,a8 as cr,a9 as pu,aa as eT,f as he,F as gt,k as Jt,l as hi,y as vi,ab as jd,ac as tT,q as Ct,i as Qe,a1 as Mi,t as Te,ad as iT,ae as Zd,af as nT,ag as rT,ah as Xr,ai as ut,aj as nt,ak as io,al as sT,am as TO,an as Vd,ao as Mu,L as wr,h as CO,ap as aT,aq as oT,ar as kO,d as lT,A as EO,o as Tc,n as uT,a0 as cT,v as Yi,C as Vn,D as ia,G as hT,Z as fT,V as ig,z as dT,T as pT}from"./index-BI1ok0nK.js";import{u as Ud}from"./tool-workshop-store-C-j6ilp2.js";import{d as ng}from"./download-WPaeALA4.js";import{u as mT}from"./toolcall-store-CMBLYe4d.js";import{u as gT}from"./session-store-DQW7koXz.js";import{canvasAiDB as qd}from"./canvas-ai-db-DIu3Cyqr.js";import{J as rg,a as yT,g as vT,b as OT}from"./JsonTreeNode-srBpwnIe.js";import{D as xT}from"./base-CrPFMexR.js";import{_ as AO}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{D as sg}from"./download-DBk31Sbj.js";import{T as bT}from"./trash-2-CCIzK_vg.js";class ST extends xT{constructor(){super(...arguments),this.tokenize=TT}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"})],O8=oP.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"})]),pO=new CB,lP=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 x8=["FunctionDeclaration"],b8={FunctionDeclaration:va("function"),ClassDeclaration:va("class"),ClassExpression:()=>!0,EnumDeclaration:va("constant"),TypeAliasDeclaration:va("type"),NamespaceDeclaration:va("namespace"),VariableDefinition(t,e){t.matchContext(x8)||e(t,"variable")},TypeDefinition(t,e){e(t,"type")},__proto__:null};function uP(t,e){let i=pO.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=b8[a.name];if(l&&l(a,s)||lP.has(a.name))return!1}else if(a.to-a.from>8192){for(let l of uP(t,a.node))n.push(l);return!1}}),pO.set(e,n),n}const mO=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,cP=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function S8(t){let e=Qt(t.state).resolveInner(t.pos,-1);if(cP.indexOf(e.name)>-1)return null;let i=e.name=="VariableName"||e.to-e.from<20&&mO.test(t.state.sliceDoc(e.from,e.to));if(!i&&!t.explicit)return null;let n=[];for(let r=e;r;r=r.parent)lP.has(r.name)&&(n=n.concat(uP(t.state.doc,r)));return{options:n,from:i?e.from:t.pos,validFor:mO}}const zr=zo.define({name:"javascript",parser:v8.configure({props:[Zp.add({IfStatement:mo({except:/^\s*({|else\b)/}),TryStatement:mo({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:UB,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:VB({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":XS,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:"$"}}),hP={test:t=>/^JSX/.test(t.name),facet:BS({commentTokens:{block:{open:"{/*",close:"*/}"}}})},w8=zr.configure({dialect:"ts"},"typescript"),P8=zr.configure({dialect:"jsx",props:[Xp.add(t=>t.isTop?[hP]:void 0)]}),T8=zr.configure({dialect:"jsx ts",props:[Xp.add(t=>t.isTop?[hP]:void 0)]},"typescript");let fP=t=>({label:t,type:"keyword"});const dP="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(fP),C8=dP.concat(["declare","implements","private","protected","public"].map(fP));function k8(t={}){let e=t.jsx?t.typescript?T8:P8:t.typescript?w8:zr,i=t.typescript?O8.concat(C8):oP.concat(dP);return new FS(e,[zr.data.of({autocomplete:p4(cP,Zw(i))}),zr.data.of({autocomplete:S8}),t.jsx?D8:[]])}function E8(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 gO(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 A8=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),D8=_e.inputHandler.of((t,e,i,n,r)=>{if((A8?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=gO(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=E8(p);if(g&&g.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(a.doc.sliceString(c,c+2))&&(v=gO(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)}),_8=zp({String:ne.string,Number:ne.number,"True False":ne.bool,PropertyName:ne.propertyName,Null:ne.null,", :":ne.separator,"[ ]":ne.squareBracket,"{ }":ne.brace}),I8=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:[_8],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}),N8=zo.define({name:"json",parser:I8.configure({props:[Zp.add({Object:mo({except:/^\s*\}/}),Array:mo({except:/^\s*\]/})}),Up.add({"Object Array":XS})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function M8(){return new FS(N8)}const $8="#e5c07b",yO="#e06c75",L8="#56b6c2",B8="#ffffff",Nu="#abb2bf",Xd="#7d8799",Q8="#61afef",F8="#98c379",vO="#d19a66",R8="#c678dd",z8="#21252b",OO="#2c313a",xO="#282c34",Of="#353a42",X8="#3E4451",bO="#528bff",j8=_e.theme({"&":{color:Nu,backgroundColor:xO},".cm-content":{caretColor:bO},".cm-cursor, .cm-dropCursor":{borderLeftColor:bO},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:X8},".cm-panels":{backgroundColor:z8,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:xO,color:Xd,border:"none"},".cm-activeLineGutter":{backgroundColor:OO},".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:OO,color:Nu}}},{dark:!0}),Z8=cl.define([{tag:ne.keyword,color:R8},{tag:[ne.name,ne.deleted,ne.character,ne.propertyName,ne.macroName],color:yO},{tag:[ne.function(ne.variableName),ne.labelName],color:Q8},{tag:[ne.color,ne.constant(ne.name),ne.standard(ne.name)],color:vO},{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:$8},{tag:[ne.operator,ne.operatorKeyword,ne.url,ne.escape,ne.regexp,ne.link,ne.special(ne.string)],color:L8},{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:yO},{tag:[ne.atom,ne.bool,ne.special(ne.variableName)],color:vO},{tag:[ne.processingInstruction,ne.string,ne.inserted],color:F8},{tag:ne.invalid,color:B8}]),V8=[j8,HS(Z8)],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=Fe(()=>{const a=[i.language==="json"?M8():k8({typescript:!0}),V8,_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)=>(ye(),Ct(Se(IR),{"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"]))}}),U8={class:"ai-diff"},q8={key:0,class:"diff-explanation"},W8={class:"diff-code"},Y8={class:"diff-actions"},G8=ot({__name:"AiDiffView",props:{oldCode:{},newCode:{},explanation:{}},emits:["accept","dismiss"],setup(t){const e=t,i=Fe(()=>PT(e.oldCode,e.newCode));return(n,r)=>(ye(),be("div",U8,[t.explanation?(ye(),be("div",q8,Te(t.explanation),1)):Qe("",!0),he("div",W8,[(ye(!0),be(gt,null,Jt(i.value,(s,a)=>(ye(),be("div",{key:a,class:bt(["diff-line",{added:s.added,removed:s.removed}])},Te(s.value),3))),128))]),he("div",Y8,[he("button",{class:"diff-accept",onClick:r[0]||(r[0]=s=>n.$emit("accept"))},Te(n.$t("tools.aiDiff.accept")),1),he("button",{class:"diff-dismiss",onClick:r[1]||(r[1]=s=>n.$emit("dismiss"))},Te(n.$t("tools.aiDiff.dismiss")),1)])]))}}),H8=AO(G8,[["__scopeId","data-v-01c9471b"]]),J8={class:"block-header"},K8={class:"block-badge"},e6=["value","placeholder"],t6=["disabled","title"],i6=["disabled","title"],n6={key:0,class:"thinking-bar nodrag"},r6={class:"thinking-text"},s6={key:1,class:"insights-row"},a6={key:2,class:"insights-row"},o6=["onClick"],l6={key:3,class:"insight-detail nodrag nowheel"},u6={class:"insight-desc"},c6={class:"insight-suggestion-label"},h6={key:4,class:"exec-badge-row"},f6={key:0,class:"exec-badge exec-executing"},d6={key:2,class:"exec-badge exec-failed"},p6=["disabled"],m6={key:5,class:"exec-result-panel nodrag nowheel"},g6={class:"block-section"},y6=["value","placeholder"],v6={key:6,class:"block-section nodrag nowheel"},O6=["placeholder"],x6={class:"intent-actions"},b6=["disabled"],S6={key:0,class:"intent-error"},w6={class:"block-section"},P6={class:"param-header"},T6=["value","onChange","placeholder"],C6=["value","onChange","placeholder"],k6=["onClick"],E6={key:0,class:"param-empty"},A6={class:"block-section probe-section"},D6={class:"probe-badge"},_6={key:0,class:"probe-panel nodrag nowheel"},I6={class:"probe-url-row"},N6=["placeholder"],M6=["disabled"],$6={class:"diag-row"},L6={key:0,class:"diag-tag"},B6={key:1,class:"diag-tag"},Q6={key:2,class:"diag-tag diag-openapi"},F6={key:0,class:"diag-auth"},R6={class:"config-section"},z6={class:"config-header"},X6={class:"config-label"},j6=["onUpdate:modelValue","placeholder"],Z6=["onUpdate:modelValue","placeholder"],V6=["onClick","title"],U6=["onClick"],q6={key:1,class:"config-section"},W6={class:"config-label"},Y6={key:2,class:"ep-section"},G6={class:"config-label"},H6=["placeholder"],J6={class:"ep-list"},K6=["onClick"],e7={class:"ep-path"},t7={key:0,class:"ep-summary"},i7={key:0,class:"param-empty"},n7={class:"probe-ai-row"},r7=["disabled"],s7={key:0,class:"auto-map-reasoning"},a7={class:"probe-tree"},o7={key:1,class:"probe-footer"},l7={class:"probe-count"},u7={key:4,class:"probe-error"},c7={key:5,class:"probe-raw"},h7={key:7,class:"block-section mappings-section"},f7={class:"mappings-header"},d7={key:0,class:"stale-badge",title:"Some mapped fields are missing from the function body"},p7={class:"mappings-list"},m7=["title"],g7={class:"block-section nodrag nowheel"},y7=ot({__name:"ToolFunctionNode",props:{data:{}},setup(t){const e=n1(),i=t;function n(K,ue){i.data.onUpdate?.(K,ue)}function r(K,ue,me){const Pe=i.data.parameters.map((Ve,He)=>He===K?{...Ve,[ue]:me}:{...Ve});n("parameters",Pe)}function s(){n("parameters",[...i.data.parameters,{name:"arg",type:"string"}])}function a(K){n("parameters",i.data.parameters.filter((ue,me)=>me!==K))}const l=Fe(()=>{const K=i.data.mappings;if(!K||K.length===0)return[];const ue=i.data.body;return K.filter(me=>!ue.includes(me.returnKey))}),u=Fe(()=>l.value.length>0),h=ze(!1),c=ze(!1),p=ze(e.getIntent(i.data.uid)??""),v=Fe(()=>e.drafts.get(i.data.uid)),g=Fe(()=>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 K=await Y$({model:e.effectiveModel,toolName:i.data.name,description:i.data.description,parameters:i.data.parameters,probeResponseSample:Q.value??void 0,intent:p.value});K.error?e.setDraft(i.data.uid,{toolId:i.data.uid,phase:"draft",code:"",explanation:"",loading:!1,error:K.error,intentText:p.value}):e.setDraft(i.data.uid,{toolId:i.data.uid,phase:"draft",code:K.code,explanation:K.explanation,loading:!1,trainingPairId:K.trainingPairId,intentText:p.value})}function m(){const K=v.value;!K||!K.code||(n("body",K.code),K.trainingPairId&&qd.updateAccepted(K.trainingPairId),e.clearDraft(i.data.uid))}function x(){e.clearDraft(i.data.uid)}const O=Fe(()=>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=Fe(()=>C[E.value%C.length]);function $(){E.value=0,k=setInterval(()=>{E.value++},1500)}function F(){k&&(clearInterval(k),k=null)}function I(){if(!P.value?.suggestedCode){console.warn("[Insight] No suggestedCode to apply");return}const K=P.value.suggestedCode;console.log("[Insight] Applying fix, code length:",K.length),n("body",K),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 K=await G$({model:e.effectiveModel,toolName:i.data.name,code:i.data.body,parameters:i.data.parameters});S.value=!1,F(),K.error?w.value=K.error:e.setInsights(i.data.uid,{toolId:i.data.uid,insights:K.insights,codeHash:i.data.body})}const j=ze(!1),M=ze("");async function q(){if(!e.effectiveModel||!Q.value)return;j.value=!0,M.value="";const K=await H$({model:e.effectiveModel,toolName:i.data.name,description:i.data.description,probeResponseSample:Q.value});j.value=!1,!K.error&&K.paths.length>0&&(M.value=K.reasoning,xe.value=new Set(K.paths))}const X=ze(!1);async function Y(){if(!e.effectiveModel)return;X.value=!0;const K=e.getIntent(i.data.uid),ue=await J$({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:K});X.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 V=ze(!1),oe=ze("idle"),ae=ze(i.data.probeConfig?.url??""),fe=ze(i.data.probeConfig?.method??"GET"),D=ze(null),Z=ze(null),L=ze(null),se=ze(i.data.probeConfig?.headers?Object.entries(i.data.probeConfig.headers).map(([K,ue])=>({key:K,value:ue})):[]),de=ze(new Set(i.data.probeConfig?.secretHeaders??[]));function ie(K){const ue=se.value[K].key.trim();if(!ue)return;const me=new Set(de.value);me.has(ue)?me.delete(ue):me.add(ue),de.value=me}const R=ze(""),Q=ze(null),xe=ze(new Set),Re=ze(""),ke=ze(null),$e=Fe(()=>{if(!L.value)return[];const K=Re.value.toLowerCase();return K?L.value.endpoints.filter(ue=>ue.path.toLowerCase().includes(K)||ue.summary?.toLowerCase().includes(K)||ue.operationId?.toLowerCase().includes(K)):L.value.endpoints});function te(K){return K>=200&&K<300?"var(--color-success)":K>=300&&K<400?"var(--color-warning, #f9e2af)":"var(--color-error)"}function H(K){switch(K){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 K=ae.value.trim();if(!K)return;oe.value="discovering",D.value=null,Z.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([s3(K,{method:fe.value,headers:Object.keys(ue).length>0?ue:void 0,body:(fe.value==="POST"||fe.value==="PUT")&&R.value||void 0}),l3(K)]);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&&(Z.value=Pe.value,L.value=t3(Pe.value.spec)),oe.value="diagnosed"}function G(K){ke.value=K;const ue=L.value?.info.baseUrl??"",me=ue?`${ue.replace(/\/$/,"")}${K.path}`:K.path;ae.value=me,fe.value=K.method;const Pe=K.operationId??K.path.replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_|_$/g,"");n("name",Pe),(K.summary||K.description)&&n("description",K.summary??K.description??"");const Ve=K.parameters.filter(He=>He.in==="query"||He.in==="path").map(He=>({name:He.name,type:He.type}));Ve.length>0&&n("parameters",Ve)}function J(){se.value=[...se.value,{key:"",value:""}]}function le(K){se.value=se.value.filter((ue,me)=>me!==K)}function ve(K){const ue=new Set(xe.value);ue.has(K)?ue.delete(K):ue.add(K),xe.value=ue}function we(){const K=Array.from(xe.value);if(K.length===0)return;const ue={};for(const Je of se.value)Je.key.trim()&&(ue[Je.key.trim()]=Je.value);const me=Array.from(de.value),{body:Pe,addedParams:Ve}=yT(ae.value.trim(),K,{method:fe.value!=="GET"?fe.value:void 0,headers:Object.keys(ue).length>0?ue:void 0,body:(fe.value==="POST"||fe.value==="PUT")&&R.value||void 0,secretHeaders:me.length>0?me:void 0});n("body",Pe);const He=vT(K);if(n("mappings",He),Q.value){const Je=OT(He,Q.value);n("returnSchema",Je)}const Tt={url:ae.value.trim(),method:fe.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(K,ue)=>(ye(),be("div",{class:bt(["tool-block",{executing:t.data.executionStatus==="executing",completed:t.data.executionStatus==="completed",failed:t.data.executionStatus==="failed"}])},[ht(Se(Es),{type:"target",position:Se(Xe).Top},null,8,["position"]),he("div",J8,[he("span",K8,Te(K.$t("tools.node.badge")),1),he("input",{class:"block-name-input",value:t.data.name,onChange:ue[0]||(ue[0]=me=>n("name",me.target.value)),placeholder:K.$t("tools.node.functionNamePlaceholder")},null,40,e6),he("button",{class:bt(["ai-header-btn",{active:c.value}]),disabled:g.value,title:K.$t("tools.node.draftWithAi"),onClick:ue[1]||(ue[1]=Yi(me=>c.value=!c.value,["stop"]))},Te(g.value?"...":"✨"),11,t6),he("button",{class:"ai-header-btn ai-analyze",disabled:S.value||!t.data.body.trim(),title:K.$t("tools.node.aiInsights"),onClick:Yi(B,["stop"])},Te(S.value?"...":"🔍"),9,i6)]),S.value?(ye(),be("div",n6,[ue[14]||(ue[14]=he("span",{class:"thinking-dot"},null,-1)),he("span",r6,Te(A.value)+"...",1)])):Qe("",!0),w.value?(ye(),be("div",s6,[he("span",{class:"insight-badge error",onClick:ue[2]||(ue[2]=Yi(me=>w.value=null,["stop"]))},Te(w.value),1)])):Qe("",!0),O.value?.insights.length?(ye(),be("div",a6,[(ye(!0),be(gt,null,Jt(O.value.insights,(me,Pe)=>(ye(),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,o6))),128))])):Qe("",!0),P.value?(ye(),be("div",l6,[he("p",u6,Te(P.value.description),1),P.value.suggestedCode?(ye(),be(gt,{key:0},[he("p",c6,Te(K.$t("tools.node.insightSuggestionLabel")),1),ht(go,{"model-value":P.value.suggestedCode,language:"typescript",readonly:!0,"min-height":"60px"},null,8,["model-value"])],64)):Qe("",!0),he("div",{class:"insight-actions",onMousedown:ue[4]||(ue[4]=Yi(()=>{},["stop"]))},[P.value.suggestedCode?(ye(),be("button",{key:0,class:"insight-apply",onClick:Yi(I,["stop","prevent"])},Te(K.$t("tools.node.applyFix")),1)):Qe("",!0),he("button",{class:"insight-close",onClick:ue[3]||(ue[3]=Yi(me=>P.value=null,["stop"]))},"× "+Te(K.$t("tools.node.closeInsight")),1)],32)])):Qe("",!0),t.data.executionStatus&&t.data.executionStatus!=="idle"?(ye(),be("div",h6,[t.data.executionStatus==="executing"?(ye(),be("span",f6,Te(K.$t("tools.node.running")),1)):t.data.executionStatus==="completed"?(ye(),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`:K.$t("tools.node.done")),1)):t.data.executionStatus==="failed"?(ye(),be("span",d6," ✗ "+Te(K.$t("tools.node.failed")),1)):Qe("",!0),t.data.executionStatus==="failed"?(ye(),be("button",{key:3,class:"ai-fix-btn",disabled:X.value,onClick:Yi(Y,["stop"])},Te(X.value?"...":K.$t("tools.node.aiFix")),9,p6)):Qe("",!0)])):Qe("",!0),h.value&&t.data.lastResult!==void 0?(ye(),be("div",m6,[ht(rg,{label:"result",value:t.data.lastResult,path:"","selected-paths":new Set,depth:0,onTogglePath:()=>{}},null,8,["value","selected-paths"])])):Qe("",!0),he("div",g6,[he("label",null,Te(K.$t("tools.node.description")),1),he("input",{class:"block-input",value:t.data.description,onChange:ue[6]||(ue[6]=me=>n("description",me.target.value)),placeholder:K.$t("tools.node.descriptionPlaceholder")},null,40,y6)]),c.value?(ye(),be("div",v6,[he("label",null,Te(K.$t("tools.node.intent")),1),Vn(he("textarea",{"onUpdate:modelValue":ue[7]||(ue[7]=me=>p.value=me),class:"intent-textarea",placeholder:K.$t("tools.node.intentPlaceholder"),rows:"2"},null,8,O6),[[ia,p.value]]),he("div",x6,[he("button",{class:"intent-generate-btn",disabled:g.value||!p.value.trim(),onClick:b},Te(g.value?K.$t("tools.node.generating"):K.$t("tools.node.generate")),9,b6)]),v.value?.error?(ye(),be("div",S6,Te(v.value.error),1)):Qe("",!0)])):Qe("",!0),he("div",w6,[he("div",P6,[he("label",null,Te(K.$t("tools.node.parameters")),1),he("button",{class:"param-add-btn",onClick:s},Te(K.$t("tools.node.addParam")),1)]),(ye(!0),be(gt,null,Jt(t.data.parameters,(me,Pe)=>(ye(),be("div",{key:Pe,class:"param-row"},[he("input",{class:"param-name",value:me.name,onChange:Ve=>r(Pe,"name",Ve.target.value),placeholder:K.$t("tools.node.paramNamePlaceholder")},null,40,T6),he("input",{class:"param-type",value:me.type,onChange:Ve=>r(Pe,"type",Ve.target.value),placeholder:K.$t("tools.node.paramTypePlaceholder")},null,40,C6),he("button",{class:"param-remove-btn",onClick:Ve=>a(Pe)},"×",8,k6)]))),128)),t.data.parameters.length===0?(ye(),be("div",E6,Te(K.$t("tools.node.noParameters")),1)):Qe("",!0)]),he("div",A6,[he("div",{class:"probe-toggle",onClick:ue[8]||(ue[8]=me=>V.value=!V.value)},[he("span",{class:bt(["toggle-arrow",{open:V.value}])},"▶",2),he("label",null,Te(K.$t("tools.node.probeAndPick")),1),he("span",D6,Te(K.$t("tools.node.apiBadge")),1)]),V.value?(ye(),be("div",_6,[he("div",I6,[Vn(he("select",{"onUpdate:modelValue":ue[9]||(ue[9]=me=>fe.value=me),class:"method-select"},[...ue[15]||(ue[15]=[he("option",null,"GET",-1),he("option",null,"POST",-1),he("option",null,"PUT",-1),he("option",null,"DELETE",-1)])],512),[[hT,fe.value]]),Vn(he("input",{"onUpdate:modelValue":ue[10]||(ue[10]=me=>ae.value=me),class:"block-input probe-url",placeholder:K.$t("tools.node.urlPlaceholder"),onKeydown:fT(re,["enter"])},null,40,N6),[[ia,ae.value]]),he("button",{class:"probe-btn",disabled:oe.value==="discovering"||!ae.value.trim(),onClick:re},Te(oe.value==="discovering"?"...":K.$t("tools.node.probe")),9,M6)]),D.value&&oe.value!=="idle"?(ye(),be(gt,{key:0},[he("div",$6,[he("span",{class:"diag-status",style:hi({background:te(D.value.status)})},Te(D.value.status),5),D.value.headers["content-type"]?(ye(),be("span",L6,Te(D.value.headers["content-type"].split(";")[0]),1)):Qe("",!0),D.value.headers.server?(ye(),be("span",B6,Te(D.value.headers.server),1)):Qe("",!0),L.value?(ye(),be("span",Q6," OpenAPI · "+Te(L.value.endpoints.length)+" endpoints ",1)):Qe("",!0)]),D.value.authHint?(ye(),be("div",F6,[ue[16]||(ue[16]=he("span",{class:"diag-auth-icon"},"🔒",-1)),he("span",null,Te(D.value.authHint.message),1)])):Qe("",!0)],64)):Qe("",!0),he("div",R6,[he("div",z6,[he("span",X6,Te(K.$t("tools.node.headers")),1),he("button",{class:"param-add-btn",onClick:J},Te(K.$t("tools.node.addHeader")),1)]),(ye(!0),be(gt,null,Jt(se.value,(me,Pe)=>(ye(),be("div",{key:Pe,class:"param-row"},[Vn(he("input",{class:"param-name","onUpdate:modelValue":Ve=>se.value[Pe].key=Ve,placeholder:K.$t("tools.node.headerNamePlaceholder")},null,8,j6),[[ia,se.value[Pe].key]]),Vn(he("input",{class:bt(["param-type",{"secret-masked":de.value.has(se.value[Pe].key.trim())}]),"onUpdate:modelValue":Ve=>se.value[Pe].value=Ve,placeholder:K.$t("tools.node.headerValuePlaceholder")},null,10,Z6),[[ia,se.value[Pe].value]]),he("button",{class:bt(["secret-toggle-btn",{active:de.value.has(se.value[Pe].key.trim())}]),onClick:Ve=>ie(Pe),title:K.$t("tools.node.markAsSecret")}," 🔒 ",10,V6),he("button",{class:"param-remove-btn",onClick:Ve=>le(Pe)},"×",8,U6)]))),128))]),fe.value==="POST"||fe.value==="PUT"?(ye(),be("div",q6,[he("span",W6,Te(K.$t("tools.node.requestBody")),1),ht(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"])])):Qe("",!0),L.value&&L.value.endpoints.length>0?(ye(),be("div",Y6,[he("span",G6,Te(K.$t("tools.node.endpoints")),1),Vn(he("input",{"onUpdate:modelValue":ue[12]||(ue[12]=me=>Re.value=me),class:"block-input ep-search",placeholder:K.$t("tools.node.searchEndpoints")},null,8,H6),[[ia,Re.value]]),he("div",J6,[(ye(!0),be(gt,null,Jt($e.value,me=>(ye(),be("div",{key:me.method+me.path,class:bt(["ep-row",{selected:ke.value===me}]),onClick:Pe=>G(me)},[he("span",{class:"ep-method",style:hi({background:H(me.method)})},Te(me.method),5),he("span",e7,Te(me.path),1),me.summary?(ye(),be("span",t7,Te(me.summary),1)):Qe("",!0)],10,K6))),128)),$e.value.length===0?(ye(),be("div",i7,Te(K.$t("tools.node.noMatchingEndpoints")),1)):Qe("",!0)])])):Qe("",!0),Q.value&&D.value&&D.value.ok?(ye(),be(gt,{key:3},[he("div",n7,[he("button",{class:"ai-suggest-btn",disabled:j.value,onClick:q},Te(j.value?K.$t("tools.node.thinking"):K.$t("tools.node.aiSuggest")),9,r7)]),M.value?(ye(),be("div",s7,Te(M.value),1)):Qe("",!0),he("div",a7,[ht(rg,{label:"response",value:Q.value,path:"","selected-paths":xe.value,depth:0,onTogglePath:ve},null,8,["value","selected-paths"])]),xe.value.size>0?(ye(),be("div",o7,[he("span",l7,Te(xe.value.size)+" "+Te(xe.value.size!==1?K.$t("tools.node.fields"):K.$t("tools.node.field")),1),he("button",{class:"probe-apply-btn",onClick:we},Te(K.$t("tools.node.apply")),1)])):Qe("",!0)],64)):Qe("",!0),D.value&&D.value.error&&!D.value.data?(ye(),be("div",u7,Te(D.value.error),1)):Qe("",!0),D.value?.rawText?(ye(),be("pre",c7,Te(D.value.rawText),1)):Qe("",!0)])):Qe("",!0)]),t.data.mappings&&t.data.mappings.length>0?(ye(),be("div",h7,[he("div",f7,[he("label",null,Te(K.$t("tools.node.mappings")),1),u.value?(ye(),be("span",d7,Te(K.$t("tools.node.outOfSync")),1)):Qe("",!0)]),he("div",p7,[(ye(!0),be(gt,null,Jt(t.data.mappings,me=>(ye(),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,m7))),128))])])):Qe("",!0),he("div",g7,[he("label",null,Te(K.$t("tools.node.bodyLabel")),1),v.value&&!v.value.loading&&v.value.code?(ye(),Ct(H8,{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"])):(ye(),Ct(go,{key:1,"model-value":t.data.body,language:"typescript","min-height":"100px",placeholder:K.$t("tools.node.bodyPlaceholder"),"onUpdate:modelValue":ue[13]||(ue[13]=me=>n("body",me))},null,8,["model-value","placeholder"]))]),ht(Se(Es),{type:"source",position:Se(Xe).Bottom},null,8,["position"])],2))}}),v7=AO(y7,[["__scopeId","data-v-655b6640"]]),O7={class:"flex h-full w-full relative"},x7={key:0,class:"w-[440px] flex flex-col border-e border-border-default bg-surface-base shrink-0"},b7={class:"p-3 border-b border-border-default flex items-center justify-between"},S7={class:"flex items-center gap-2"},w7={class:"text-sm font-semibold text-text-primary"},P7={class:"flex border-b border-border-default"},T7={class:"flex-1 flex flex-col p-3 gap-2 min-h-0 overflow-auto"},C7={class:"flex-1 flex flex-col p-3 gap-2 min-h-0"},k7={class:"flex items-center justify-between"},E7={class:"text-xs text-text-muted"},A7={class:"flex-1 overflow-auto"},D7={key:0,class:"p-3 border-t border-border-default"},_7={class:"text-xs text-warning uppercase tracking-wider"},I7={class:"mt-1 text-xs text-warning/80 list-disc ps-4 space-y-0.5"},N7={class:"p-3 border-t border-border-default text-xs text-text-muted"},M7={class:"flex-1 relative min-h-0 overflow-hidden"},$7={key:0,class:"absolute inset-0 flex flex-col items-center justify-center pointer-events-none"},L7={class:"text-center pointer-events-auto"},B7={class:"text-text-muted text-sm mb-4"},Q7={class:"flex items-center gap-3"},F7={class:"absolute top-3 right-3 z-10 flex items-center gap-2"},R7=["value"],z7={value:""},X7=["value"],j7={class:"relative"},Z7={key:1,class:"absolute end-0 top-full z-20 mt-1 w-56 rounded-lg border border-border-default bg-surface-raised shadow-lg py-1"},V7=["title"],U7={key:1,class:"absolute inset-0 z-50 flex items-center justify-center bg-black/40"},q7={class:"rounded-xl bg-surface-raised border border-border-default p-6 shadow-2xl max-w-xs text-center"},W7={class:"text-sm text-text-primary mb-1 font-semibold"},Y7={class:"text-xs text-text-muted mb-4"},G7={class:"flex items-center justify-center gap-3"},H7={key:1,class:"w-[280px] flex flex-col border-s border-border-default bg-surface-base shrink-0"},J7={class:"p-3 border-b border-border-default flex items-center justify-between"},K7={class:"text-sm font-semibold text-text-primary"},e9={class:"flex-1 overflow-y-auto p-2 space-y-1"},t9=["title","onClick"],i9={class:"min-w-0 flex-1"},n9={class:"truncate text-[10px] text-text-muted"},r9=["title","onClick"],s9=["title","onClick"],a9={key:0,class:"px-3 py-4 text-xs text-text-muted text-center"},o9={class:"p-3 border-t border-border-default text-xs text-text-muted"},l9=ot({__name:"ToolCanvasView",emits:["add-template"],setup(t,{emit:e}){const i=e,n={"tool-function":io(v7)},r=Ud(),s=n1(),a=EO(),{flowNodes:l,flowEdges:u,combinedCode:h,codeWarnings:c,codeSyncStatus:p,schemas:v,onNodeDragStop:g,onNodesDelete:b,onCodeEdit:m,addNewTool:x}=j$(),{fitView:O}=vt();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=Fe(()=>JSON.stringify(v.value,null,2));function $(X){g({node:X.node})}function F(X){for(const Y of X)Y.type==="remove"&&b([{id:Y.id}])}function I(){const X=x();vi(()=>{O({nodes:[X],padding:.5,duration:300})})}async function B(){try{await navigator.clipboard.writeText(A.value)}catch{}}const j=ze(!1);function M(){const X=r.allTools.map(Y=>Y.definition);ng(X,"llmxray-tools.json"),j.value=!1}function q(X){const Y=r.allTools.find(V=>V.id===X);Y&&ng(Y.definition,`tool-${Y.definition.function.name}.json`)}return(X,Y)=>(ye(),be("div",O7,[P.value?(ye(),be("div",x7,[he("div",b7,[he("div",S7,[he("span",w7,Te(X.$t("tools.canvas.codePanel")),1),he("span",{class:bt(["sync-dot",Se(p)])},null,2)]),he("button",{class:"text-xs text-text-muted hover:text-text-primary transition-colors bg-transparent border-none cursor-pointer",onClick:Y[0]||(Y[0]=V=>P.value=!1)},Te(X.$t("tools.canvas.close")),1)]),he("div",P7,[he("button",{onClick:Y[1]||(Y[1]=V=>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),he("button",{onClick:Y[2]||(Y[2]=V=>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(he("div",T7,[ht(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(he("div",C7,[he("div",k7,[he("span",E7,Te(X.$t("tools.canvas.schemaManifest")),1),he("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)]),he("div",A7,[ht(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?(ye(),be("div",D7,[he("label",_7,Te(X.$t("tools.canvas.warnings")),1),he("ul",I7,[(ye(!0),be(gt,null,Jt(Se(c),(V,oe)=>(ye(),be("li",{key:oe},Te(V),1))),128))])])):Qe("",!0),he("div",N7,Te(Se(l).length)+" tool"+Te(Se(l).length!==1?"s":"")+" · "+Te(Se(v).length)+" schema"+Te(Se(v).length!==1?"s":""),1)])):Qe("",!0),he("div",M7,[ht(Se(_D),{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(()=>[ht(Se(FD),{gap:24,size:1,"pattern-color":"var(--color-border-default)"}),ht(Se(g_)),ht(Se(JM))]),_:1},8,["nodes","edges","fit-view-on-init"]),Se(l).length===0?(ye(),be("div",$7,[he("div",L7,[he("div",B7,Te(X.$t("tools.canvas.emptyState")),1),he("div",Q7,[he("button",{onClick:I,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),he("button",{onClick:Y[3]||(Y[3]=V=>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)])])])):Qe("",!0),he("div",F7,[Se(a).chatModelNames.length>0?(ye(),be("select",{key:0,value:Se(s).canvasAiModel??"",onChange:Y[4]||(Y[4]=V=>Se(s).setCanvasAiModel(V.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"},[he("option",z7,"AI: "+Te(Se(a).chatModelNames[0]??"none"),1),(ye(!0),be(gt,null,Jt(Se(a).chatModelNames,V=>(ye(),be("option",{key:V,value:V}," AI: "+Te(V)+" "+Te(Se(a).capabilityIcons(V)),9,X7))),128))],40,R7)):Qe("",!0),he("div",j7,[he("button",{class:"flex items-center gap-1 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",onClick:Y[5]||(Y[5]=V=>j.value=!j.value)},[ht(Se(sg),{class:"h-3.5 w-3.5"}),CO(" "+Te(X.$t("tools.canvas.export")),1)]),j.value?(ye(),be("div",{key:0,class:"fixed inset-0 z-10",onClick:Y[6]||(Y[6]=V=>j.value=!1)})):Qe("",!0),j.value?(ye(),be("div",Z7,[he("button",{class:"w-full px-3 py-2 text-start text-xs text-text-secondary hover:bg-surface-overlay",onClick:Y[7]||(Y[7]=V=>{Se(K$)(),j.value=!1})},Te(X.$t("tools.canvas.exportTitle")),1),he("button",{class:"w-full px-3 py-2 text-start text-xs text-text-secondary hover:bg-surface-overlay",onClick:M},Te(X.$t("tools.canvas.exportAllJson")),1)])):Qe("",!0)]),P.value?Qe("",!0):(ye(),be("button",{key:1,onClick:Y[8]||(Y[8]=V=>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)),he("button",{onClick:Y[9]||(Y[9]=V=>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?(ye(),be("button",{key:2,onClick:Y[10]||(Y[10]=V=>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,V7)):Qe("",!0),he("button",{onClick:Y[11]||(Y[11]=V=>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?(ye(),be("button",{key:3,onClick:I,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)):Qe("",!0)]),E.value?(ye(),be("div",U7,[he("div",q7,[he("p",W7,Te(X.$t("tools.canvas.clearAllConfirm")),1),he("p",Y7,Te(X.$t("tools.canvas.clearAllWarning",{count:Se(l).length})),1),he("div",G7,[he("button",{onClick:Y[12]||(Y[12]=V=>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),he("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)])])])):Qe("",!0)]),w.value?(ye(),be("div",H7,[he("div",J7,[he("span",K7,Te(X.$t("tools.canvas.toolLibrary")),1),he("button",{class:"text-xs text-text-muted hover:text-text-primary transition-colors bg-transparent border-none cursor-pointer",onClick:Y[13]||(Y[13]=V=>w.value=!1)},Te(X.$t("tools.canvas.close")),1)]),he("div",e9,[(ye(!0),be(gt,null,Jt(Se(r).allTools,V=>(ye(),be("div",{key:V.id,class:"flex items-center gap-2 rounded-lg px-3 py-2 text-xs hover:bg-surface-overlay transition-colors"},[he("button",{class:bt(["h-4 w-7 shrink-0 rounded-full transition-colors",V.enabled?"bg-accent":"bg-surface-overlay"]),title:V.enabled?X.$t("tools.canvas.disableForChat"):X.$t("tools.canvas.enableForChat"),onClick:oe=>Se(r).toggleEnabled(V.id)},[he("span",{class:bt(["block h-3 w-3 rounded-full bg-white transition-transform",V.enabled?"translate-x-3.5":"translate-x-0.5"])},null,2)],10,t9),he("div",i9,[he("span",{class:bt(["font-mono block",V.enabled?"text-text-primary":"text-text-muted"])},Te(V.definition.function.name),3),he("p",n9,Te(V.definition.function.description),1)]),he("button",{class:"shrink-0 text-text-muted hover:text-accent transition-colors bg-transparent border-none cursor-pointer",title:X.$t("tools.canvas.exportToolJson"),onClick:oe=>q(V.id)},[ht(Se(sg),{class:"h-3.5 w-3.5"})],8,r9),he("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:oe=>C(V.id)},[ht(Se(bT),{class:"h-3.5 w-3.5"})],8,s9)]))),128)),Se(r).allTools.length===0?(ye(),be("p",a9,Te(X.$t("tools.canvas.noToolsYet")),1)):Qe("",!0)]),he("div",o9,Te(Se(r).enabledTools.length)+"/"+Te(Se(r).allTools.length)+" "+Te(X.$t("tools.canvas.enabledForChat")),1)])):Qe("",!0)]))}}),u9={class:"flex h-full overflow-hidden flex-col"},c9={class:"bg-surface-raised rounded-xl border border-border-default shadow-xl w-[480px] max-h-[70vh] overflow-hidden"},h9={class:"p-4 border-b border-border-default"},f9={class:"text-sm font-medium text-text-primary"},d9={class:"text-[10px] text-text-muted mt-0.5"},p9={class:"p-3 space-y-4 overflow-y-auto max-h-[50vh]"},m9={class:"text-[10px] font-semibold text-text-muted uppercase tracking-wider mb-2 px-1"},g9={class:"space-y-1.5"},y9=["onClick"],v9={class:"flex items-center justify-between"},O9={class:"text-xs font-medium text-text-primary"},x9={class:"text-[10px] text-text-muted mt-1"},b9={class:"p-3 border-t border-border-default"},z9=ot({__name:"ToolWorkshopPage",setup(t){const e=Ud(),{t:i}=dT(),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"})],O8=oP.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"})]),pO=new CB,lP=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 x8=["FunctionDeclaration"],b8={FunctionDeclaration:va("function"),ClassDeclaration:va("class"),ClassExpression:()=>!0,EnumDeclaration:va("constant"),TypeAliasDeclaration:va("type"),NamespaceDeclaration:va("namespace"),VariableDefinition(t,e){t.matchContext(x8)||e(t,"variable")},TypeDefinition(t,e){e(t,"type")},__proto__:null};function uP(t,e){let i=pO.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=b8[a.name];if(l&&l(a,s)||lP.has(a.name))return!1}else if(a.to-a.from>8192){for(let l of uP(t,a.node))n.push(l);return!1}}),pO.set(e,n),n}const mO=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,cP=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function S8(t){let e=Qt(t.state).resolveInner(t.pos,-1);if(cP.indexOf(e.name)>-1)return null;let i=e.name=="VariableName"||e.to-e.from<20&&mO.test(t.state.sliceDoc(e.from,e.to));if(!i&&!t.explicit)return null;let n=[];for(let r=e;r;r=r.parent)lP.has(r.name)&&(n=n.concat(uP(t.state.doc,r)));return{options:n,from:i?e.from:t.pos,validFor:mO}}const zr=zo.define({name:"javascript",parser:v8.configure({props:[Zp.add({IfStatement:mo({except:/^\s*({|else\b)/}),TryStatement:mo({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:UB,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:VB({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":XS,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:"$"}}),hP={test:t=>/^JSX/.test(t.name),facet:BS({commentTokens:{block:{open:"{/*",close:"*/}"}}})},w8=zr.configure({dialect:"ts"},"typescript"),P8=zr.configure({dialect:"jsx",props:[Xp.add(t=>t.isTop?[hP]:void 0)]}),T8=zr.configure({dialect:"jsx ts",props:[Xp.add(t=>t.isTop?[hP]:void 0)]},"typescript");let fP=t=>({label:t,type:"keyword"});const dP="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(fP),C8=dP.concat(["declare","implements","private","protected","public"].map(fP));function k8(t={}){let e=t.jsx?t.typescript?T8:P8:t.typescript?w8:zr,i=t.typescript?O8.concat(C8):oP.concat(dP);return new FS(e,[zr.data.of({autocomplete:p4(cP,Zw(i))}),zr.data.of({autocomplete:S8}),t.jsx?D8:[]])}function E8(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 gO(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 A8=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),D8=_e.inputHandler.of((t,e,i,n,r)=>{if((A8?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=gO(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=E8(p);if(g&&g.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(a.doc.sliceString(c,c+2))&&(v=gO(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)}),_8=zp({String:ne.string,Number:ne.number,"True False":ne.bool,PropertyName:ne.propertyName,Null:ne.null,", :":ne.separator,"[ ]":ne.squareBracket,"{ }":ne.brace}),I8=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:[_8],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}),N8=zo.define({name:"json",parser:I8.configure({props:[Zp.add({Object:mo({except:/^\s*\}/}),Array:mo({except:/^\s*\]/})}),Up.add({"Object Array":XS})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function M8(){return new FS(N8)}const $8="#e5c07b",yO="#e06c75",L8="#56b6c2",B8="#ffffff",Nu="#abb2bf",Xd="#7d8799",Q8="#61afef",F8="#98c379",vO="#d19a66",R8="#c678dd",z8="#21252b",OO="#2c313a",xO="#282c34",Of="#353a42",X8="#3E4451",bO="#528bff",j8=_e.theme({"&":{color:Nu,backgroundColor:xO},".cm-content":{caretColor:bO},".cm-cursor, .cm-dropCursor":{borderLeftColor:bO},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:X8},".cm-panels":{backgroundColor:z8,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:xO,color:Xd,border:"none"},".cm-activeLineGutter":{backgroundColor:OO},".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:OO,color:Nu}}},{dark:!0}),Z8=cl.define([{tag:ne.keyword,color:R8},{tag:[ne.name,ne.deleted,ne.character,ne.propertyName,ne.macroName],color:yO},{tag:[ne.function(ne.variableName),ne.labelName],color:Q8},{tag:[ne.color,ne.constant(ne.name),ne.standard(ne.name)],color:vO},{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:$8},{tag:[ne.operator,ne.operatorKeyword,ne.url,ne.escape,ne.regexp,ne.link,ne.special(ne.string)],color:L8},{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:yO},{tag:[ne.atom,ne.bool,ne.special(ne.variableName)],color:vO},{tag:[ne.processingInstruction,ne.string,ne.inserted],color:F8},{tag:ne.invalid,color:B8}]),V8=[j8,HS(Z8)],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=Fe(()=>{const a=[i.language==="json"?M8():k8({typescript:!0}),V8,_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)=>(ye(),Ct(Se(IR),{"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"]))}}),U8={class:"ai-diff"},q8={key:0,class:"diff-explanation"},W8={class:"diff-code"},Y8={class:"diff-actions"},G8=ot({__name:"AiDiffView",props:{oldCode:{},newCode:{},explanation:{}},emits:["accept","dismiss"],setup(t){const e=t,i=Fe(()=>PT(e.oldCode,e.newCode));return(n,r)=>(ye(),be("div",U8,[t.explanation?(ye(),be("div",q8,Te(t.explanation),1)):Qe("",!0),he("div",W8,[(ye(!0),be(gt,null,Jt(i.value,(s,a)=>(ye(),be("div",{key:a,class:bt(["diff-line",{added:s.added,removed:s.removed}])},Te(s.value),3))),128))]),he("div",Y8,[he("button",{class:"diff-accept",onClick:r[0]||(r[0]=s=>n.$emit("accept"))},Te(n.$t("tools.aiDiff.accept")),1),he("button",{class:"diff-dismiss",onClick:r[1]||(r[1]=s=>n.$emit("dismiss"))},Te(n.$t("tools.aiDiff.dismiss")),1)])]))}}),H8=AO(G8,[["__scopeId","data-v-01c9471b"]]),J8={class:"block-header"},K8={class:"block-badge"},e6=["value","placeholder"],t6=["disabled","title"],i6=["disabled","title"],n6={key:0,class:"thinking-bar nodrag"},r6={class:"thinking-text"},s6={key:1,class:"insights-row"},a6={key:2,class:"insights-row"},o6=["onClick"],l6={key:3,class:"insight-detail nodrag nowheel"},u6={class:"insight-desc"},c6={class:"insight-suggestion-label"},h6={key:4,class:"exec-badge-row"},f6={key:0,class:"exec-badge exec-executing"},d6={key:2,class:"exec-badge exec-failed"},p6=["disabled"],m6={key:5,class:"exec-result-panel nodrag nowheel"},g6={class:"block-section"},y6=["value","placeholder"],v6={key:6,class:"block-section nodrag nowheel"},O6=["placeholder"],x6={class:"intent-actions"},b6=["disabled"],S6={key:0,class:"intent-error"},w6={class:"block-section"},P6={class:"param-header"},T6=["value","onChange","placeholder"],C6=["value","onChange","placeholder"],k6=["onClick"],E6={key:0,class:"param-empty"},A6={class:"block-section probe-section"},D6={class:"probe-badge"},_6={key:0,class:"probe-panel nodrag nowheel"},I6={class:"probe-url-row"},N6=["placeholder"],M6=["disabled"],$6={class:"diag-row"},L6={key:0,class:"diag-tag"},B6={key:1,class:"diag-tag"},Q6={key:2,class:"diag-tag diag-openapi"},F6={key:0,class:"diag-auth"},R6={class:"config-section"},z6={class:"config-header"},X6={class:"config-label"},j6=["onUpdate:modelValue","placeholder"],Z6=["onUpdate:modelValue","placeholder"],V6=["onClick","title"],U6=["onClick"],q6={key:1,class:"config-section"},W6={class:"config-label"},Y6={key:2,class:"ep-section"},G6={class:"config-label"},H6=["placeholder"],J6={class:"ep-list"},K6=["onClick"],e7={class:"ep-path"},t7={key:0,class:"ep-summary"},i7={key:0,class:"param-empty"},n7={class:"probe-ai-row"},r7=["disabled"],s7={key:0,class:"auto-map-reasoning"},a7={class:"probe-tree"},o7={key:1,class:"probe-footer"},l7={class:"probe-count"},u7={key:4,class:"probe-error"},c7={key:5,class:"probe-raw"},h7={key:7,class:"block-section mappings-section"},f7={class:"mappings-header"},d7={key:0,class:"stale-badge",title:"Some mapped fields are missing from the function body"},p7={class:"mappings-list"},m7=["title"],g7={class:"block-section nodrag nowheel"},y7=ot({__name:"ToolFunctionNode",props:{data:{}},setup(t){const e=n1(),i=t;function n(K,ue){i.data.onUpdate?.(K,ue)}function r(K,ue,me){const Pe=i.data.parameters.map((Ve,He)=>He===K?{...Ve,[ue]:me}:{...Ve});n("parameters",Pe)}function s(){n("parameters",[...i.data.parameters,{name:"arg",type:"string"}])}function a(K){n("parameters",i.data.parameters.filter((ue,me)=>me!==K))}const l=Fe(()=>{const K=i.data.mappings;if(!K||K.length===0)return[];const ue=i.data.body;return K.filter(me=>!ue.includes(me.returnKey))}),u=Fe(()=>l.value.length>0),h=ze(!1),c=ze(!1),p=ze(e.getIntent(i.data.uid)??""),v=Fe(()=>e.drafts.get(i.data.uid)),g=Fe(()=>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 K=await Y$({model:e.effectiveModel,toolName:i.data.name,description:i.data.description,parameters:i.data.parameters,probeResponseSample:Q.value??void 0,intent:p.value});K.error?e.setDraft(i.data.uid,{toolId:i.data.uid,phase:"draft",code:"",explanation:"",loading:!1,error:K.error,intentText:p.value}):e.setDraft(i.data.uid,{toolId:i.data.uid,phase:"draft",code:K.code,explanation:K.explanation,loading:!1,trainingPairId:K.trainingPairId,intentText:p.value})}function m(){const K=v.value;!K||!K.code||(n("body",K.code),K.trainingPairId&&qd.updateAccepted(K.trainingPairId),e.clearDraft(i.data.uid))}function x(){e.clearDraft(i.data.uid)}const O=Fe(()=>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=Fe(()=>C[E.value%C.length]);function $(){E.value=0,k=setInterval(()=>{E.value++},1500)}function F(){k&&(clearInterval(k),k=null)}function I(){if(!P.value?.suggestedCode){console.warn("[Insight] No suggestedCode to apply");return}const K=P.value.suggestedCode;console.log("[Insight] Applying fix, code length:",K.length),n("body",K),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 K=await G$({model:e.effectiveModel,toolName:i.data.name,code:i.data.body,parameters:i.data.parameters});S.value=!1,F(),K.error?w.value=K.error:e.setInsights(i.data.uid,{toolId:i.data.uid,insights:K.insights,codeHash:i.data.body})}const j=ze(!1),M=ze("");async function q(){if(!e.effectiveModel||!Q.value)return;j.value=!0,M.value="";const K=await H$({model:e.effectiveModel,toolName:i.data.name,description:i.data.description,probeResponseSample:Q.value});j.value=!1,!K.error&&K.paths.length>0&&(M.value=K.reasoning,xe.value=new Set(K.paths))}const X=ze(!1);async function Y(){if(!e.effectiveModel)return;X.value=!0;const K=e.getIntent(i.data.uid),ue=await J$({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:K});X.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 V=ze(!1),oe=ze("idle"),ae=ze(i.data.probeConfig?.url??""),fe=ze(i.data.probeConfig?.method??"GET"),D=ze(null),Z=ze(null),L=ze(null),se=ze(i.data.probeConfig?.headers?Object.entries(i.data.probeConfig.headers).map(([K,ue])=>({key:K,value:ue})):[]),de=ze(new Set(i.data.probeConfig?.secretHeaders??[]));function ie(K){const ue=se.value[K].key.trim();if(!ue)return;const me=new Set(de.value);me.has(ue)?me.delete(ue):me.add(ue),de.value=me}const R=ze(""),Q=ze(null),xe=ze(new Set),Re=ze(""),ke=ze(null),$e=Fe(()=>{if(!L.value)return[];const K=Re.value.toLowerCase();return K?L.value.endpoints.filter(ue=>ue.path.toLowerCase().includes(K)||ue.summary?.toLowerCase().includes(K)||ue.operationId?.toLowerCase().includes(K)):L.value.endpoints});function te(K){return K>=200&&K<300?"var(--color-success)":K>=300&&K<400?"var(--color-warning, #f9e2af)":"var(--color-error)"}function H(K){switch(K){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 K=ae.value.trim();if(!K)return;oe.value="discovering",D.value=null,Z.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([s3(K,{method:fe.value,headers:Object.keys(ue).length>0?ue:void 0,body:(fe.value==="POST"||fe.value==="PUT")&&R.value||void 0}),l3(K)]);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&&(Z.value=Pe.value,L.value=t3(Pe.value.spec)),oe.value="diagnosed"}function G(K){ke.value=K;const ue=L.value?.info.baseUrl??"",me=ue?`${ue.replace(/\/$/,"")}${K.path}`:K.path;ae.value=me,fe.value=K.method;const Pe=K.operationId??K.path.replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_|_$/g,"");n("name",Pe),(K.summary||K.description)&&n("description",K.summary??K.description??"");const Ve=K.parameters.filter(He=>He.in==="query"||He.in==="path").map(He=>({name:He.name,type:He.type}));Ve.length>0&&n("parameters",Ve)}function J(){se.value=[...se.value,{key:"",value:""}]}function le(K){se.value=se.value.filter((ue,me)=>me!==K)}function ve(K){const ue=new Set(xe.value);ue.has(K)?ue.delete(K):ue.add(K),xe.value=ue}function we(){const K=Array.from(xe.value);if(K.length===0)return;const ue={};for(const Je of se.value)Je.key.trim()&&(ue[Je.key.trim()]=Je.value);const me=Array.from(de.value),{body:Pe,addedParams:Ve}=yT(ae.value.trim(),K,{method:fe.value!=="GET"?fe.value:void 0,headers:Object.keys(ue).length>0?ue:void 0,body:(fe.value==="POST"||fe.value==="PUT")&&R.value||void 0,secretHeaders:me.length>0?me:void 0});n("body",Pe);const He=vT(K);if(n("mappings",He),Q.value){const Je=OT(He,Q.value);n("returnSchema",Je)}const Tt={url:ae.value.trim(),method:fe.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(K,ue)=>(ye(),be("div",{class:bt(["tool-block",{executing:t.data.executionStatus==="executing",completed:t.data.executionStatus==="completed",failed:t.data.executionStatus==="failed"}])},[ht(Se(Es),{type:"target",position:Se(Xe).Top},null,8,["position"]),he("div",J8,[he("span",K8,Te(K.$t("tools.node.badge")),1),he("input",{class:"block-name-input",value:t.data.name,onChange:ue[0]||(ue[0]=me=>n("name",me.target.value)),placeholder:K.$t("tools.node.functionNamePlaceholder")},null,40,e6),he("button",{class:bt(["ai-header-btn",{active:c.value}]),disabled:g.value,title:K.$t("tools.node.draftWithAi"),onClick:ue[1]||(ue[1]=Yi(me=>c.value=!c.value,["stop"]))},Te(g.value?"...":"✨"),11,t6),he("button",{class:"ai-header-btn ai-analyze",disabled:S.value||!t.data.body.trim(),title:K.$t("tools.node.aiInsights"),onClick:Yi(B,["stop"])},Te(S.value?"...":"🔍"),9,i6)]),S.value?(ye(),be("div",n6,[ue[14]||(ue[14]=he("span",{class:"thinking-dot"},null,-1)),he("span",r6,Te(A.value)+"...",1)])):Qe("",!0),w.value?(ye(),be("div",s6,[he("span",{class:"insight-badge error",onClick:ue[2]||(ue[2]=Yi(me=>w.value=null,["stop"]))},Te(w.value),1)])):Qe("",!0),O.value?.insights.length?(ye(),be("div",a6,[(ye(!0),be(gt,null,Jt(O.value.insights,(me,Pe)=>(ye(),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,o6))),128))])):Qe("",!0),P.value?(ye(),be("div",l6,[he("p",u6,Te(P.value.description),1),P.value.suggestedCode?(ye(),be(gt,{key:0},[he("p",c6,Te(K.$t("tools.node.insightSuggestionLabel")),1),ht(go,{"model-value":P.value.suggestedCode,language:"typescript",readonly:!0,"min-height":"60px"},null,8,["model-value"])],64)):Qe("",!0),he("div",{class:"insight-actions",onMousedown:ue[4]||(ue[4]=Yi(()=>{},["stop"]))},[P.value.suggestedCode?(ye(),be("button",{key:0,class:"insight-apply",onClick:Yi(I,["stop","prevent"])},Te(K.$t("tools.node.applyFix")),1)):Qe("",!0),he("button",{class:"insight-close",onClick:ue[3]||(ue[3]=Yi(me=>P.value=null,["stop"]))},"× "+Te(K.$t("tools.node.closeInsight")),1)],32)])):Qe("",!0),t.data.executionStatus&&t.data.executionStatus!=="idle"?(ye(),be("div",h6,[t.data.executionStatus==="executing"?(ye(),be("span",f6,Te(K.$t("tools.node.running")),1)):t.data.executionStatus==="completed"?(ye(),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`:K.$t("tools.node.done")),1)):t.data.executionStatus==="failed"?(ye(),be("span",d6," ✗ "+Te(K.$t("tools.node.failed")),1)):Qe("",!0),t.data.executionStatus==="failed"?(ye(),be("button",{key:3,class:"ai-fix-btn",disabled:X.value,onClick:Yi(Y,["stop"])},Te(X.value?"...":K.$t("tools.node.aiFix")),9,p6)):Qe("",!0)])):Qe("",!0),h.value&&t.data.lastResult!==void 0?(ye(),be("div",m6,[ht(rg,{label:"result",value:t.data.lastResult,path:"","selected-paths":new Set,depth:0,onTogglePath:()=>{}},null,8,["value","selected-paths"])])):Qe("",!0),he("div",g6,[he("label",null,Te(K.$t("tools.node.description")),1),he("input",{class:"block-input",value:t.data.description,onChange:ue[6]||(ue[6]=me=>n("description",me.target.value)),placeholder:K.$t("tools.node.descriptionPlaceholder")},null,40,y6)]),c.value?(ye(),be("div",v6,[he("label",null,Te(K.$t("tools.node.intent")),1),Vn(he("textarea",{"onUpdate:modelValue":ue[7]||(ue[7]=me=>p.value=me),class:"intent-textarea",placeholder:K.$t("tools.node.intentPlaceholder"),rows:"2"},null,8,O6),[[ia,p.value]]),he("div",x6,[he("button",{class:"intent-generate-btn",disabled:g.value||!p.value.trim(),onClick:b},Te(g.value?K.$t("tools.node.generating"):K.$t("tools.node.generate")),9,b6)]),v.value?.error?(ye(),be("div",S6,Te(v.value.error),1)):Qe("",!0)])):Qe("",!0),he("div",w6,[he("div",P6,[he("label",null,Te(K.$t("tools.node.parameters")),1),he("button",{class:"param-add-btn",onClick:s},Te(K.$t("tools.node.addParam")),1)]),(ye(!0),be(gt,null,Jt(t.data.parameters,(me,Pe)=>(ye(),be("div",{key:Pe,class:"param-row"},[he("input",{class:"param-name",value:me.name,onChange:Ve=>r(Pe,"name",Ve.target.value),placeholder:K.$t("tools.node.paramNamePlaceholder")},null,40,T6),he("input",{class:"param-type",value:me.type,onChange:Ve=>r(Pe,"type",Ve.target.value),placeholder:K.$t("tools.node.paramTypePlaceholder")},null,40,C6),he("button",{class:"param-remove-btn","aria-label":"Remove parameter",onClick:Ve=>a(Pe)},"×",8,k6)]))),128)),t.data.parameters.length===0?(ye(),be("div",E6,Te(K.$t("tools.node.noParameters")),1)):Qe("",!0)]),he("div",A6,[he("div",{class:"probe-toggle",onClick:ue[8]||(ue[8]=me=>V.value=!V.value)},[he("span",{class:bt(["toggle-arrow",{open:V.value}])},"▶",2),he("label",null,Te(K.$t("tools.node.probeAndPick")),1),he("span",D6,Te(K.$t("tools.node.apiBadge")),1)]),V.value?(ye(),be("div",_6,[he("div",I6,[Vn(he("select",{"onUpdate:modelValue":ue[9]||(ue[9]=me=>fe.value=me),class:"method-select"},[...ue[15]||(ue[15]=[he("option",null,"GET",-1),he("option",null,"POST",-1),he("option",null,"PUT",-1),he("option",null,"DELETE",-1)])],512),[[hT,fe.value]]),Vn(he("input",{"onUpdate:modelValue":ue[10]||(ue[10]=me=>ae.value=me),class:"block-input probe-url",placeholder:K.$t("tools.node.urlPlaceholder"),onKeydown:fT(re,["enter"])},null,40,N6),[[ia,ae.value]]),he("button",{class:"probe-btn",disabled:oe.value==="discovering"||!ae.value.trim(),onClick:re},Te(oe.value==="discovering"?"...":K.$t("tools.node.probe")),9,M6)]),D.value&&oe.value!=="idle"?(ye(),be(gt,{key:0},[he("div",$6,[he("span",{class:"diag-status",style:hi({background:te(D.value.status)})},Te(D.value.status),5),D.value.headers["content-type"]?(ye(),be("span",L6,Te(D.value.headers["content-type"].split(";")[0]),1)):Qe("",!0),D.value.headers.server?(ye(),be("span",B6,Te(D.value.headers.server),1)):Qe("",!0),L.value?(ye(),be("span",Q6," OpenAPI · "+Te(L.value.endpoints.length)+" endpoints ",1)):Qe("",!0)]),D.value.authHint?(ye(),be("div",F6,[ue[16]||(ue[16]=he("span",{class:"diag-auth-icon"},"🔒",-1)),he("span",null,Te(D.value.authHint.message),1)])):Qe("",!0)],64)):Qe("",!0),he("div",R6,[he("div",z6,[he("span",X6,Te(K.$t("tools.node.headers")),1),he("button",{class:"param-add-btn",onClick:J},Te(K.$t("tools.node.addHeader")),1)]),(ye(!0),be(gt,null,Jt(se.value,(me,Pe)=>(ye(),be("div",{key:Pe,class:"param-row"},[Vn(he("input",{class:"param-name","onUpdate:modelValue":Ve=>se.value[Pe].key=Ve,placeholder:K.$t("tools.node.headerNamePlaceholder")},null,8,j6),[[ia,se.value[Pe].key]]),Vn(he("input",{class:bt(["param-type",{"secret-masked":de.value.has(se.value[Pe].key.trim())}]),"onUpdate:modelValue":Ve=>se.value[Pe].value=Ve,placeholder:K.$t("tools.node.headerValuePlaceholder")},null,10,Z6),[[ia,se.value[Pe].value]]),he("button",{class:bt(["secret-toggle-btn",{active:de.value.has(se.value[Pe].key.trim())}]),onClick:Ve=>ie(Pe),title:K.$t("tools.node.markAsSecret")}," 🔒 ",10,V6),he("button",{class:"param-remove-btn","aria-label":"Remove header",onClick:Ve=>le(Pe)},"×",8,U6)]))),128))]),fe.value==="POST"||fe.value==="PUT"?(ye(),be("div",q6,[he("span",W6,Te(K.$t("tools.node.requestBody")),1),ht(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"])])):Qe("",!0),L.value&&L.value.endpoints.length>0?(ye(),be("div",Y6,[he("span",G6,Te(K.$t("tools.node.endpoints")),1),Vn(he("input",{"onUpdate:modelValue":ue[12]||(ue[12]=me=>Re.value=me),class:"block-input ep-search",placeholder:K.$t("tools.node.searchEndpoints")},null,8,H6),[[ia,Re.value]]),he("div",J6,[(ye(!0),be(gt,null,Jt($e.value,me=>(ye(),be("div",{key:me.method+me.path,class:bt(["ep-row",{selected:ke.value===me}]),onClick:Pe=>G(me)},[he("span",{class:"ep-method",style:hi({background:H(me.method)})},Te(me.method),5),he("span",e7,Te(me.path),1),me.summary?(ye(),be("span",t7,Te(me.summary),1)):Qe("",!0)],10,K6))),128)),$e.value.length===0?(ye(),be("div",i7,Te(K.$t("tools.node.noMatchingEndpoints")),1)):Qe("",!0)])])):Qe("",!0),Q.value&&D.value&&D.value.ok?(ye(),be(gt,{key:3},[he("div",n7,[he("button",{class:"ai-suggest-btn",disabled:j.value,onClick:q},Te(j.value?K.$t("tools.node.thinking"):K.$t("tools.node.aiSuggest")),9,r7)]),M.value?(ye(),be("div",s7,Te(M.value),1)):Qe("",!0),he("div",a7,[ht(rg,{label:"response",value:Q.value,path:"","selected-paths":xe.value,depth:0,onTogglePath:ve},null,8,["value","selected-paths"])]),xe.value.size>0?(ye(),be("div",o7,[he("span",l7,Te(xe.value.size)+" "+Te(xe.value.size!==1?K.$t("tools.node.fields"):K.$t("tools.node.field")),1),he("button",{class:"probe-apply-btn",onClick:we},Te(K.$t("tools.node.apply")),1)])):Qe("",!0)],64)):Qe("",!0),D.value&&D.value.error&&!D.value.data?(ye(),be("div",u7,Te(D.value.error),1)):Qe("",!0),D.value?.rawText?(ye(),be("pre",c7,Te(D.value.rawText),1)):Qe("",!0)])):Qe("",!0)]),t.data.mappings&&t.data.mappings.length>0?(ye(),be("div",h7,[he("div",f7,[he("label",null,Te(K.$t("tools.node.mappings")),1),u.value?(ye(),be("span",d7,Te(K.$t("tools.node.outOfSync")),1)):Qe("",!0)]),he("div",p7,[(ye(!0),be(gt,null,Jt(t.data.mappings,me=>(ye(),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,m7))),128))])])):Qe("",!0),he("div",g7,[he("label",null,Te(K.$t("tools.node.bodyLabel")),1),v.value&&!v.value.loading&&v.value.code?(ye(),Ct(H8,{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"])):(ye(),Ct(go,{key:1,"model-value":t.data.body,language:"typescript","min-height":"100px",placeholder:K.$t("tools.node.bodyPlaceholder"),"onUpdate:modelValue":ue[13]||(ue[13]=me=>n("body",me))},null,8,["model-value","placeholder"]))]),ht(Se(Es),{type:"source",position:Se(Xe).Bottom},null,8,["position"])],2))}}),v7=AO(y7,[["__scopeId","data-v-0e5de25f"]]),O7={class:"flex h-full w-full relative"},x7={key:0,class:"w-[440px] flex flex-col border-e border-border-default bg-surface-base shrink-0"},b7={class:"p-3 border-b border-border-default flex items-center justify-between"},S7={class:"flex items-center gap-2"},w7={class:"text-sm font-semibold text-text-primary"},P7={class:"flex border-b border-border-default"},T7={class:"flex-1 flex flex-col p-3 gap-2 min-h-0 overflow-auto"},C7={class:"flex-1 flex flex-col p-3 gap-2 min-h-0"},k7={class:"flex items-center justify-between"},E7={class:"text-xs text-text-muted"},A7={class:"flex-1 overflow-auto"},D7={key:0,class:"p-3 border-t border-border-default"},_7={class:"text-xs text-warning uppercase tracking-wider"},I7={class:"mt-1 text-xs text-warning/80 list-disc ps-4 space-y-0.5"},N7={class:"p-3 border-t border-border-default text-xs text-text-muted"},M7={class:"flex-1 relative min-h-0 overflow-hidden"},$7={key:0,class:"absolute inset-0 flex flex-col items-center justify-center pointer-events-none"},L7={class:"text-center pointer-events-auto"},B7={class:"text-text-muted text-sm mb-4"},Q7={class:"flex items-center gap-3"},F7={class:"absolute top-3 right-3 z-10 flex items-center gap-2"},R7=["value"],z7={value:""},X7=["value"],j7={class:"relative"},Z7={key:1,class:"absolute end-0 top-full z-20 mt-1 w-56 rounded-lg border border-border-default bg-surface-raised shadow-lg py-1"},V7=["title"],U7={key:1,class:"absolute inset-0 z-50 flex items-center justify-center bg-black/40"},q7={class:"rounded-xl bg-surface-raised border border-border-default p-6 shadow-2xl max-w-xs text-center"},W7={class:"text-sm text-text-primary mb-1 font-semibold"},Y7={class:"text-xs text-text-muted mb-4"},G7={class:"flex items-center justify-center gap-3"},H7={key:1,class:"w-[280px] flex flex-col border-s border-border-default bg-surface-base shrink-0"},J7={class:"p-3 border-b border-border-default flex items-center justify-between"},K7={class:"text-sm font-semibold text-text-primary"},e9={class:"flex-1 overflow-y-auto p-2 space-y-1"},t9=["title","onClick"],i9={class:"min-w-0 flex-1"},n9={class:"truncate text-[10px] text-text-muted"},r9=["title","onClick"],s9=["title","onClick"],a9={key:0,class:"px-3 py-4 text-xs text-text-muted text-center"},o9={class:"p-3 border-t border-border-default text-xs text-text-muted"},l9=ot({__name:"ToolCanvasView",emits:["add-template"],setup(t,{emit:e}){const i=e,n={"tool-function":io(v7)},r=Ud(),s=n1(),a=EO(),{flowNodes:l,flowEdges:u,combinedCode:h,codeWarnings:c,codeSyncStatus:p,schemas:v,onNodeDragStop:g,onNodesDelete:b,onCodeEdit:m,addNewTool:x}=j$(),{fitView:O}=vt();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=Fe(()=>JSON.stringify(v.value,null,2));function $(X){g({node:X.node})}function F(X){for(const Y of X)Y.type==="remove"&&b([{id:Y.id}])}function I(){const X=x();vi(()=>{O({nodes:[X],padding:.5,duration:300})})}async function B(){try{await navigator.clipboard.writeText(A.value)}catch{}}const j=ze(!1);function M(){const X=r.allTools.map(Y=>Y.definition);ng(X,"llmxray-tools.json"),j.value=!1}function q(X){const Y=r.allTools.find(V=>V.id===X);Y&&ng(Y.definition,`tool-${Y.definition.function.name}.json`)}return(X,Y)=>(ye(),be("div",O7,[P.value?(ye(),be("div",x7,[he("div",b7,[he("div",S7,[he("span",w7,Te(X.$t("tools.canvas.codePanel")),1),he("span",{class:bt(["sync-dot",Se(p)])},null,2)]),he("button",{class:"text-xs text-text-muted hover:text-text-primary transition-colors bg-transparent border-none cursor-pointer",onClick:Y[0]||(Y[0]=V=>P.value=!1)},Te(X.$t("tools.canvas.close")),1)]),he("div",P7,[he("button",{onClick:Y[1]||(Y[1]=V=>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),he("button",{onClick:Y[2]||(Y[2]=V=>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(he("div",T7,[ht(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(he("div",C7,[he("div",k7,[he("span",E7,Te(X.$t("tools.canvas.schemaManifest")),1),he("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)]),he("div",A7,[ht(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?(ye(),be("div",D7,[he("label",_7,Te(X.$t("tools.canvas.warnings")),1),he("ul",I7,[(ye(!0),be(gt,null,Jt(Se(c),(V,oe)=>(ye(),be("li",{key:oe},Te(V),1))),128))])])):Qe("",!0),he("div",N7,Te(Se(l).length)+" tool"+Te(Se(l).length!==1?"s":"")+" · "+Te(Se(v).length)+" schema"+Te(Se(v).length!==1?"s":""),1)])):Qe("",!0),he("div",M7,[ht(Se(_D),{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(()=>[ht(Se(FD),{gap:24,size:1,"pattern-color":"var(--color-border-default)"}),ht(Se(g_)),ht(Se(JM))]),_:1},8,["nodes","edges","fit-view-on-init"]),Se(l).length===0?(ye(),be("div",$7,[he("div",L7,[he("div",B7,Te(X.$t("tools.canvas.emptyState")),1),he("div",Q7,[he("button",{onClick:I,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),he("button",{onClick:Y[3]||(Y[3]=V=>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)])])])):Qe("",!0),he("div",F7,[Se(a).chatModelNames.length>0?(ye(),be("select",{key:0,value:Se(s).canvasAiModel??"",onChange:Y[4]||(Y[4]=V=>Se(s).setCanvasAiModel(V.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"},[he("option",z7,"AI: "+Te(Se(a).chatModelNames[0]??"none"),1),(ye(!0),be(gt,null,Jt(Se(a).chatModelNames,V=>(ye(),be("option",{key:V,value:V}," AI: "+Te(V)+" "+Te(Se(a).capabilityIcons(V)),9,X7))),128))],40,R7)):Qe("",!0),he("div",j7,[he("button",{class:"flex items-center gap-1 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",onClick:Y[5]||(Y[5]=V=>j.value=!j.value)},[ht(Se(sg),{class:"h-3.5 w-3.5"}),CO(" "+Te(X.$t("tools.canvas.export")),1)]),j.value?(ye(),be("div",{key:0,class:"fixed inset-0 z-10",onClick:Y[6]||(Y[6]=V=>j.value=!1)})):Qe("",!0),j.value?(ye(),be("div",Z7,[he("button",{class:"w-full px-3 py-2 text-start text-xs text-text-secondary hover:bg-surface-overlay",onClick:Y[7]||(Y[7]=V=>{Se(K$)(),j.value=!1})},Te(X.$t("tools.canvas.exportTitle")),1),he("button",{class:"w-full px-3 py-2 text-start text-xs text-text-secondary hover:bg-surface-overlay",onClick:M},Te(X.$t("tools.canvas.exportAllJson")),1)])):Qe("",!0)]),P.value?Qe("",!0):(ye(),be("button",{key:1,onClick:Y[8]||(Y[8]=V=>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)),he("button",{onClick:Y[9]||(Y[9]=V=>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?(ye(),be("button",{key:2,onClick:Y[10]||(Y[10]=V=>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,V7)):Qe("",!0),he("button",{onClick:Y[11]||(Y[11]=V=>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?(ye(),be("button",{key:3,onClick:I,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)):Qe("",!0)]),E.value?(ye(),be("div",U7,[he("div",q7,[he("p",W7,Te(X.$t("tools.canvas.clearAllConfirm")),1),he("p",Y7,Te(X.$t("tools.canvas.clearAllWarning",{count:Se(l).length})),1),he("div",G7,[he("button",{onClick:Y[12]||(Y[12]=V=>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),he("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)])])])):Qe("",!0)]),w.value?(ye(),be("div",H7,[he("div",J7,[he("span",K7,Te(X.$t("tools.canvas.toolLibrary")),1),he("button",{class:"text-xs text-text-muted hover:text-text-primary transition-colors bg-transparent border-none cursor-pointer",onClick:Y[13]||(Y[13]=V=>w.value=!1)},Te(X.$t("tools.canvas.close")),1)]),he("div",e9,[(ye(!0),be(gt,null,Jt(Se(r).allTools,V=>(ye(),be("div",{key:V.id,class:"flex items-center gap-2 rounded-lg px-3 py-2 text-xs hover:bg-surface-overlay transition-colors"},[he("button",{class:bt(["h-4 w-7 shrink-0 rounded-full transition-colors",V.enabled?"bg-accent":"bg-surface-overlay"]),title:V.enabled?X.$t("tools.canvas.disableForChat"):X.$t("tools.canvas.enableForChat"),onClick:oe=>Se(r).toggleEnabled(V.id)},[he("span",{class:bt(["block h-3 w-3 rounded-full bg-white transition-transform",V.enabled?"translate-x-3.5":"translate-x-0.5"])},null,2)],10,t9),he("div",i9,[he("span",{class:bt(["font-mono block",V.enabled?"text-text-primary":"text-text-muted"])},Te(V.definition.function.name),3),he("p",n9,Te(V.definition.function.description),1)]),he("button",{class:"shrink-0 text-text-muted hover:text-accent transition-colors bg-transparent border-none cursor-pointer",title:X.$t("tools.canvas.exportToolJson"),onClick:oe=>q(V.id)},[ht(Se(sg),{class:"h-3.5 w-3.5"})],8,r9),he("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:oe=>C(V.id)},[ht(Se(bT),{class:"h-3.5 w-3.5"})],8,s9)]))),128)),Se(r).allTools.length===0?(ye(),be("p",a9,Te(X.$t("tools.canvas.noToolsYet")),1)):Qe("",!0)]),he("div",o9,Te(Se(r).enabledTools.length)+"/"+Te(Se(r).allTools.length)+" "+Te(X.$t("tools.canvas.enabledForChat")),1)])):Qe("",!0)]))}}),u9={class:"flex h-full overflow-hidden flex-col"},c9={class:"bg-surface-raised rounded-xl border border-border-default shadow-xl w-[480px] max-h-[70vh] overflow-hidden"},h9={class:"p-4 border-b border-border-default"},f9={class:"text-sm font-medium text-text-primary"},d9={class:"text-[10px] text-text-muted mt-0.5"},p9={class:"p-3 space-y-4 overflow-y-auto max-h-[50vh]"},m9={class:"text-[10px] font-semibold text-text-muted uppercase tracking-wider mb-2 px-1"},g9={class:"space-y-1.5"},y9=["onClick"],v9={class:"flex items-center justify-between"},O9={class:"text-xs font-medium text-text-primary"},x9={class:"text-[10px] text-text-muted mt-1"},b9={class:"p-3 border-t border-border-default"},z9=ot({__name:"ToolWorkshopPage",setup(t){const e=Ud(),{t:i}=dT(),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
- .vue-flow{position:relative;width:100%;height:100%;overflow:hidden;z-index:0;direction:ltr}.vue-flow__container{position:absolute;height:100%;width:100%;left:0;top:0}.vue-flow__pane{z-index:1}.vue-flow__pane.draggable{cursor:grab}.vue-flow__pane.selection{cursor:pointer}.vue-flow__pane.dragging{cursor:grabbing}.vue-flow__transformationpane{transform-origin:0 0;z-index:2;pointer-events:none}.vue-flow__viewport{z-index:4;overflow:clip}.vue-flow__selection{z-index:6}.vue-flow__edge-labels{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible{outline:none}.vue-flow .vue-flow__edges{pointer-events:none;overflow:visible}.vue-flow__edge-path,.vue-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.vue-flow__edge{pointer-events:visibleStroke;cursor:pointer}.vue-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__edge.animated path.vue-flow__edge-interaction{stroke-dasharray:none;animation:none}.vue-flow__edge.inactive{pointer-events:none}.vue-flow__edge.selected,.vue-flow__edge:focus,.vue-flow__edge:focus-visible{outline:none}.vue-flow__edge.selected .vue-flow__edge-path,.vue-flow__edge:focus .vue-flow__edge-path,.vue-flow__edge:focus-visible .vue-flow__edge-path{stroke:#555}.vue-flow__edge-textwrapper{pointer-events:all}.vue-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__connection{pointer-events:none}.vue-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__connectionline{z-index:1001}.vue-flow__nodes{pointer-events:none;transform-origin:0 0}.vue-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.vue-flow__node.draggable{cursor:grab;pointer-events:all}.vue-flow__node.draggable.dragging{cursor:grabbing}.vue-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.vue-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.vue-flow__nodesselection-rect.dragging{cursor:grabbing}.vue-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px}.vue-flow__handle.connectable{pointer-events:all;cursor:crosshair}.vue-flow__handle-bottom{left:50%;bottom:0;transform:translate(-50%,50%)}.vue-flow__handle-top{left:50%;top:0;transform:translate(-50%,-50%)}.vue-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.vue-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.vue-flow__edgeupdater{cursor:move;pointer-events:all}.vue-flow__panel{position:absolute;z-index:5;margin:15px}.vue-flow__panel.top{top:0}.vue-flow__panel.bottom{bottom:0}.vue-flow__panel.left{left:0}.vue-flow__panel.right{right:0}.vue-flow__panel.center{left:50%;transform:translate(-50%)}@keyframes dashdraw{0%{stroke-dashoffset:10}}:root{--vf-node-bg: #fff;--vf-node-text: #222;--vf-connection-path: #b1b1b7;--vf-handle: #555}.vue-flow__edge.updating .vue-flow__edge-path{stroke:#777}.vue-flow__edge-text{font-size:10px}.vue-flow__edge-textbg{fill:#fff}.vue-flow__connection-path{stroke:var(--vf-connection-path)}.vue-flow__node{cursor:grab}.vue-flow__node.selectable:focus,.vue-flow__node.selectable:focus-visible{outline:none}.vue-flow__node-default,.vue-flow__node-input,.vue-flow__node-output{padding:10px;border-radius:3px;width:150px;font-size:12px;text-align:center;border-width:1px;border-style:solid;color:var(--vf-node-text);background-color:var(--vf-node-bg);border-color:var(--vf-node-color)}.vue-flow__node-default.selected,.vue-flow__node-default.selected:hover,.vue-flow__node-input.selected,.vue-flow__node-input.selected:hover,.vue-flow__node-output.selected,.vue-flow__node-output.selected:hover{box-shadow:0 0 0 .5px var(--vf-box-shadow)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible,.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible,.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid #555}.vue-flow__node-default .vue-flow__handle,.vue-flow__node-input .vue-flow__handle,.vue-flow__node-output .vue-flow__handle{background:var(--vf-handle)}.vue-flow__node-default.selectable:hover,.vue-flow__node-input.selectable:hover,.vue-flow__node-output.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.vue-flow__node-input{--vf-node-color: var(--vf-node-color, #0041d0);--vf-handle: var(--vf-node-color, #0041d0);--vf-box-shadow: var(--vf-node-color, #0041d0);background:var(--vf-node-bg);border-color:var(--vf-node-color, #0041d0)}.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible{outline:none;border:1px solid var(--vf-node-color, #0041d0)}.vue-flow__node-default{--vf-handle: var(--vf-node-color, #1a192b);--vf-box-shadow: var(--vf-node-color, #1a192b);background:var(--vf-node-bg);border-color:var(--vf-node-color, #1a192b)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible{outline:none;border:1px solid var(--vf-node-color, #1a192b)}.vue-flow__node-output{--vf-handle: var(--vf-node-color, #ff0072);--vf-box-shadow: var(--vf-node-color, #ff0072);background:var(--vf-node-bg);border-color:var(--vf-node-color, #ff0072)}.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid var(--vf-node-color, #ff0072)}.vue-flow__nodesselection-rect,.vue-flow__selection{background:#0059dc14;border:1px dotted rgba(0,89,220,.8)}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible,.vue-flow__selection:focus,.vue-flow__selection:focus-visible{outline:none}.vue-flow__handle{width:6px;height:6px;background:var(--vf-handle);border:1px solid #fff;border-radius:100%}.vue-flow__controls{box-shadow:0 0 2px 1px #00000014}.vue-flow__controls-button{background:#fefefe;border:none;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:5px}.vue-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.vue-flow__controls-button:hover{background:#f4f4f4}.vue-flow__controls-button:disabled{pointer-events:none}.vue-flow__controls-button:disabled svg{fill-opacity:.4}.vue-flow__minimap{background-color:#fff}.vue-flow__minimap.pannable{cursor:grab}.vue-flow__minimap.dragging{cursor:grabbing}.vue-flow__minimap-mask.pannable{cursor:grab}.ai-diff[data-v-01c9471b]{display:flex;flex-direction:column;gap:6px}.diff-explanation[data-v-01c9471b]{font-size:11px;color:var(--color-text-secondary);background:color-mix(in srgb,var(--color-accent) 8%,transparent);padding:6px 8px;border-radius:4px;line-height:1.4}.diff-code[data-v-01c9471b]{background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);border-radius:4px;padding:6px 8px;max-height:200px;overflow:auto;font-family:ui-monospace,Consolas,monospace;font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-all}.diff-line[data-v-01c9471b]{color:var(--color-text-primary)}.diff-line.added[data-v-01c9471b]{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.diff-line.removed[data-v-01c9471b]{background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error);text-decoration:line-through}.diff-actions[data-v-01c9471b]{display:flex;gap:6px;justify-content:flex-end}.diff-accept[data-v-01c9471b]{background:var(--color-success);color:var(--color-surface-base, #0f172a);border:none;border-radius:4px;padding:3px 12px;font-size:11px;font-weight:700;cursor:pointer}.diff-accept[data-v-01c9471b]:hover{opacity:.9}.diff-dismiss[data-v-01c9471b]{background:none;border:1px solid var(--color-border-default);color:var(--color-text-muted);border-radius:4px;padding:3px 12px;font-size:11px;cursor:pointer}.diff-dismiss[data-v-01c9471b]:hover{background:var(--color-surface-overlay)}.tool-block[data-v-655b6640]{background:var(--color-surface-raised, #1e293b);border:1px solid var(--color-accent);border-radius:10px;padding:0;color:var(--color-text-primary);width:420px;font-size:13px;overflow:visible;transition:border-color .3s,box-shadow .3s}.tool-block.executing[data-v-655b6640]{animation:pulse-glow-655b6640 1s ease-in-out infinite;border-color:var(--color-accent);box-shadow:0 0 20px color-mix(in srgb,var(--color-accent) 30%,transparent)}.tool-block.completed[data-v-655b6640]{border-color:var(--color-success)}.tool-block.failed[data-v-655b6640]{border-color:var(--color-error)}@keyframes pulse-glow-655b6640{0%,to{box-shadow:0 0 5px color-mix(in srgb,var(--color-accent) 20%,transparent)}50%{box-shadow:0 0 25px color-mix(in srgb,var(--color-accent) 50%,transparent)}}.block-header[data-v-655b6640]{background:var(--color-surface-overlay, #334155);padding:10px 12px;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--color-border-default);border-radius:10px 10px 0 0}.block-badge[data-v-655b6640]{font-size:9px;text-transform:uppercase;letter-spacing:.8px;background:var(--color-accent);color:var(--color-surface-base, #0f172a);padding:2px 6px;border-radius:4px;font-weight:700;white-space:nowrap}.block-name-input[data-v-655b6640]{flex:1;background:transparent;border:none;color:var(--color-accent);font-size:15px;font-weight:700;font-family:ui-monospace,Consolas,monospace;outline:none;padding:0}.block-name-input[data-v-655b6640]:focus{border-bottom:1px solid var(--color-accent)}.exec-badge-row[data-v-655b6640]{padding:4px 12px;border-bottom:1px solid var(--color-border-default)}.exec-badge[data-v-655b6640]{font-size:10px;font-weight:700;padding:2px 8px;border-radius:4px;cursor:default}.exec-executing[data-v-655b6640]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);color:var(--color-accent)}.exec-completed[data-v-655b6640]{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success);border:none;cursor:pointer}.exec-completed[data-v-655b6640]:hover{background:color-mix(in srgb,var(--color-success) 25%,transparent)}.exec-failed[data-v-655b6640]{background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error)}.exec-result-panel[data-v-655b6640]{padding:6px 12px;border-bottom:1px solid var(--color-border-default);background:var(--color-surface-base, #0f172a);max-height:200px;overflow:auto}.block-section[data-v-655b6640]{padding:8px 12px;border-bottom:1px solid var(--color-border-default)}.block-section[data-v-655b6640]:last-child{border-bottom:none}.block-section>label[data-v-655b6640]{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted);display:block;margin-bottom:4px}.block-input[data-v-655b6640]{width:100%;background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);color:var(--color-text-primary);padding:4px 8px;border-radius:4px;font-size:12px;outline:none;box-sizing:border-box}.block-input[data-v-655b6640]:focus{border-color:var(--color-accent)}.param-header[data-v-655b6640]{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.param-header label[data-v-655b6640]{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted);margin-bottom:0}.param-add-btn[data-v-655b6640]{background:none;border:1px solid var(--color-border-default);color:var(--color-success);font-size:10px;padding:1px 6px;border-radius:3px;cursor:pointer}.param-add-btn[data-v-655b6640]:hover{background:var(--color-surface-overlay)}.param-row[data-v-655b6640]{display:flex;gap:4px;margin-bottom:3px}.param-name[data-v-655b6640],.param-type[data-v-655b6640]{flex:1;background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);color:var(--color-text-primary);padding:3px 6px;border-radius:4px;font-size:11px;font-family:ui-monospace,Consolas,monospace;outline:none;box-sizing:border-box}.param-name[data-v-655b6640]:focus,.param-type[data-v-655b6640]:focus{border-color:var(--color-accent)}.param-type[data-v-655b6640]{color:var(--color-accent)}.param-remove-btn[data-v-655b6640]{background:none;border:none;color:var(--color-error);font-size:14px;cursor:pointer;padding:0 4px;line-height:1}.secret-toggle-btn[data-v-655b6640]{background:none;border:none;font-size:11px;cursor:pointer;padding:0 3px;opacity:.35;transition:opacity .15s}.secret-toggle-btn[data-v-655b6640]:hover{opacity:.7}.secret-toggle-btn.active[data-v-655b6640]{opacity:1;filter:drop-shadow(0 0 3px var(--color-warning, #f9e2af))}.secret-masked[data-v-655b6640]{-webkit-text-security:disc}.param-empty[data-v-655b6640]{font-size:11px;color:var(--color-text-muted);font-style:italic}.probe-section[data-v-655b6640]{padding:0}.probe-toggle[data-v-655b6640]{display:flex;align-items:center;gap:6px;padding:8px 12px;cursor:pointer;-webkit-user-select:none;user-select:none}.probe-toggle label[data-v-655b6640]{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted);cursor:pointer;margin:0}.probe-badge[data-v-655b6640]{font-size:8px;text-transform:uppercase;letter-spacing:.5px;background:var(--color-accent);color:var(--color-surface-base, #0f172a);padding:1px 5px;border-radius:3px;font-weight:700;margin-left:auto}.toggle-arrow[data-v-655b6640]{font-size:8px;color:var(--color-text-muted);transition:transform .15s;display:inline-block;width:10px;text-align:center}.toggle-arrow.open[data-v-655b6640]{transform:rotate(90deg)}.probe-panel[data-v-655b6640]{padding:0 12px 10px;display:flex;flex-direction:column;gap:6px}.probe-url-row[data-v-655b6640]{display:flex;gap:4px}.probe-url[data-v-655b6640]{flex:1}.method-select[data-v-655b6640]{background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);color:var(--color-accent);padding:3px 4px;border-radius:4px;font-size:10px;font-weight:700;font-family:ui-monospace,Consolas,monospace;outline:none;cursor:pointer;width:62px}.probe-btn[data-v-655b6640]{background:var(--color-accent);color:var(--color-surface-base, #0f172a);border:none;border-radius:4px;padding:4px 10px;font-size:11px;font-weight:700;cursor:pointer;white-space:nowrap}.probe-btn[data-v-655b6640]:hover{opacity:.9}.probe-btn[data-v-655b6640]:disabled{opacity:.4;cursor:default}.diag-row[data-v-655b6640]{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.diag-status[data-v-655b6640]{font-size:10px;font-weight:700;color:var(--color-surface-base, #0f172a);padding:1px 6px;border-radius:3px;font-family:ui-monospace,Consolas,monospace}.diag-tag[data-v-655b6640]{font-size:9px;color:var(--color-text-secondary);background:var(--color-surface-overlay);padding:1px 5px;border-radius:3px}.diag-openapi[data-v-655b6640]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);color:var(--color-accent);font-weight:600}.diag-auth[data-v-655b6640]{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--color-warning, #f9e2af);background:color-mix(in srgb,var(--color-warning, #f9e2af) 8%,transparent);padding:4px 8px;border-radius:4px}.diag-auth-icon[data-v-655b6640]{font-size:12px}.config-section[data-v-655b6640]{display:flex;flex-direction:column;gap:3px}.config-header[data-v-655b6640]{display:flex;align-items:center;justify-content:space-between}.config-label[data-v-655b6640]{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted)}.req-body[data-v-655b6640]{min-height:50px}.ep-section[data-v-655b6640]{display:flex;flex-direction:column;gap:4px}.ep-search[data-v-655b6640]{font-size:11px}.ep-list[data-v-655b6640]{max-height:180px;overflow-y:auto;background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);border-radius:4px}.ep-row[data-v-655b6640]{display:flex;align-items:center;gap:6px;padding:4px 8px;cursor:pointer;border-bottom:1px solid var(--color-surface-raised, #1e293b)}.ep-row[data-v-655b6640]:last-child{border-bottom:none}.ep-row[data-v-655b6640]:hover{background:color-mix(in srgb,var(--color-accent) 8%,transparent)}.ep-row.selected[data-v-655b6640]{background:color-mix(in srgb,var(--color-accent) 15%,transparent)}.ep-method[data-v-655b6640]{font-size:8px;font-weight:700;color:var(--color-surface-base, #0f172a);padding:1px 4px;border-radius:2px;font-family:ui-monospace,Consolas,monospace;flex-shrink:0}.ep-path[data-v-655b6640]{font-size:11px;font-family:ui-monospace,Consolas,monospace;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ep-summary[data-v-655b6640]{font-size:10px;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-left:auto}.probe-tree[data-v-655b6640]{background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);border-radius:4px;padding:6px;max-height:220px;overflow:auto}.probe-footer[data-v-655b6640]{display:flex;align-items:center;justify-content:space-between}.probe-count[data-v-655b6640]{font-size:10px;color:var(--color-success);font-weight:600}.probe-apply-btn[data-v-655b6640]{background:var(--color-success);color:var(--color-surface-base, #0f172a);border:none;border-radius:4px;padding:3px 12px;font-size:11px;font-weight:700;cursor:pointer}.probe-apply-btn[data-v-655b6640]:hover{opacity:.9}.probe-error[data-v-655b6640]{font-size:11px;color:var(--color-error)}.probe-raw[data-v-655b6640]{font-size:10px;color:var(--color-text-secondary);background:var(--color-surface-base, #0f172a);padding:6px;border-radius:4px;max-height:80px;overflow:auto;margin:0;white-space:pre-wrap;word-break:break-all}.mappings-section[data-v-655b6640]{padding-bottom:6px}.mappings-header[data-v-655b6640]{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.mappings-header label[data-v-655b6640]{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted);margin:0}.stale-badge[data-v-655b6640]{font-size:9px;font-weight:700;color:var(--color-error);background:color-mix(in srgb,var(--color-error) 12%,transparent);padding:1px 6px;border-radius:3px}.mappings-list[data-v-655b6640]{display:flex;flex-wrap:wrap;gap:3px}.mapping-tag[data-v-655b6640]{font-size:10px;font-family:ui-monospace,Consolas,monospace;background:color-mix(in srgb,var(--color-success) 12%,transparent);color:var(--color-success);padding:1px 6px;border-radius:3px}.mapping-tag.stale[data-v-655b6640]{background:color-mix(in srgb,var(--color-error) 12%,transparent);color:var(--color-error);text-decoration:line-through}.block-body[data-v-655b6640]{width:100%;min-height:100px;background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);color:var(--color-text-primary);padding:8px;border-radius:4px;font-family:ui-monospace,Consolas,monospace;font-size:11px;line-height:1.5;resize:vertical;outline:none;box-sizing:border-box}.block-body[data-v-655b6640]:focus{border-color:var(--color-accent)}.ai-header-btn[data-v-655b6640]{background:none;border:1px solid var(--color-border-default);color:var(--color-text-muted);font-size:12px;padding:2px 6px;border-radius:4px;cursor:pointer;transition:all .15s;flex-shrink:0}.ai-header-btn[data-v-655b6640]:hover{background:var(--color-surface-overlay);color:var(--color-text-primary)}.ai-header-btn.active[data-v-655b6640]{border-color:var(--color-accent);color:var(--color-accent)}.ai-header-btn[data-v-655b6640]:disabled{opacity:.4;cursor:default}.ai-header-btn.ai-analyze[data-v-655b6640]{font-size:11px}.ai-fix-btn[data-v-655b6640]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);color:var(--color-accent);border:1px solid var(--color-accent);border-radius:4px;padding:2px 8px;font-size:10px;font-weight:700;cursor:pointer;margin-left:auto}.ai-fix-btn[data-v-655b6640]:hover{background:color-mix(in srgb,var(--color-accent) 25%,transparent)}.ai-fix-btn[data-v-655b6640]:disabled{opacity:.4;cursor:default}.insights-row[data-v-655b6640]{padding:4px 12px;border-bottom:1px solid var(--color-border-default);display:flex;flex-wrap:wrap;gap:4px}.insight-badge[data-v-655b6640]{font-size:10px;font-weight:600;padding:2px 8px;border-radius:4px;cursor:pointer;transition:opacity .15s}.insight-badge[data-v-655b6640]:hover{opacity:.8}.insight-badge.info[data-v-655b6640]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);color:var(--color-accent)}.insight-badge.warning[data-v-655b6640]{background:color-mix(in srgb,var(--color-warning, #f9e2af) 15%,transparent);color:var(--color-warning, #f9e2af)}.insight-badge.error[data-v-655b6640]{background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error)}.insight-detail[data-v-655b6640]{padding:8px 12px;border-bottom:1px solid var(--color-border-default);background:var(--color-surface-base, #0f172a)}.insight-desc[data-v-655b6640]{font-size:11px;color:var(--color-text-secondary);line-height:1.4;margin:0 0 6px}.thinking-bar[data-v-655b6640]{display:flex;align-items:center;gap:8px;padding:6px 12px;border-bottom:1px solid var(--color-border-default);background:linear-gradient(90deg,#8b5cf60d,#8b5cf61a,#8b5cf60d);background-size:200% 100%;animation:thinking-shimmer-655b6640 2s ease-in-out infinite}@keyframes thinking-shimmer-655b6640{0%{background-position:200% 0}to{background-position:-200% 0}}.thinking-dot[data-v-655b6640]{width:6px;height:6px;border-radius:50%;background:var(--color-accent);animation:thinking-pulse-655b6640 1s ease-in-out infinite}@keyframes thinking-pulse-655b6640{0%,to{opacity:.4;transform:scale(.8)}50%{opacity:1;transform:scale(1.2)}}.thinking-text[data-v-655b6640]{font-size:10px;color:var(--color-accent);font-style:italic;transition:opacity .3s}.insight-suggestion-label[data-v-655b6640]{font-size:9px;color:var(--color-text-muted);margin:4px 0 2px;font-style:italic}.insight-actions[data-v-655b6640]{display:flex;align-items:center;gap:8px;margin-top:6px}.insight-apply[data-v-655b6640]{background:var(--color-accent);border:none;color:#fff;font-size:10px;cursor:pointer;padding:3px 10px;border-radius:6px;font-weight:500}.insight-apply[data-v-655b6640]:hover{opacity:.85}.insight-close[data-v-655b6640]{background:none;border:none;color:var(--color-text-muted);font-size:10px;cursor:pointer;padding:2px 0}.insight-close[data-v-655b6640]:hover{color:var(--color-text-primary)}.intent-textarea[data-v-655b6640]{width:100%;background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);color:var(--color-text-primary);padding:6px 8px;border-radius:4px;font-size:12px;font-family:inherit;resize:vertical;outline:none;box-sizing:border-box}.intent-textarea[data-v-655b6640]:focus{border-color:var(--color-accent)}.intent-actions[data-v-655b6640]{display:flex;justify-content:flex-end;margin-top:4px}.intent-generate-btn[data-v-655b6640]{background:var(--color-accent);color:var(--color-surface-base, #0f172a);border:none;border-radius:4px;padding:3px 12px;font-size:11px;font-weight:700;cursor:pointer}.intent-generate-btn[data-v-655b6640]:hover{opacity:.9}.intent-generate-btn[data-v-655b6640]:disabled{opacity:.4;cursor:default}.intent-error[data-v-655b6640]{font-size:11px;color:var(--color-error);margin-top:4px}.probe-ai-row[data-v-655b6640]{display:flex;justify-content:flex-end}.ai-suggest-btn[data-v-655b6640]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);color:var(--color-accent);border:1px solid color-mix(in srgb,var(--color-accent) 30%,transparent);border-radius:4px;padding:2px 10px;font-size:10px;font-weight:700;cursor:pointer}.ai-suggest-btn[data-v-655b6640]:hover{background:color-mix(in srgb,var(--color-accent) 25%,transparent)}.ai-suggest-btn[data-v-655b6640]:disabled{opacity:.4;cursor:default}.auto-map-reasoning[data-v-655b6640]{font-size:10px;color:var(--color-text-secondary);background:color-mix(in srgb,var(--color-accent) 8%,transparent);padding:4px 8px;border-radius:4px;line-height:1.3}.sync-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.sync-dot.synced{background:var(--color-success)}.sync-dot.dirty{background:var(--color-warning, #f9e2af)}.canvas-flow{background:var(--color-surface-base, #0f172a)!important}.canvas-flow .vue-flow__node{border:none!important;background:none!important;padding:0!important;border-radius:0!important}.canvas-flow .vue-flow__handle{width:10px;height:10px;background:var(--color-accent)!important;border:2px solid var(--color-surface-base, #0f172a)!important}.canvas-flow .vue-flow__edge-path{stroke-width:2}.canvas-flow .vue-flow__minimap{background:var(--color-surface-raised, #1e293b)!important}.canvas-flow .vue-flow__controls{background:var(--color-surface-raised, #1e293b)!important;border-color:var(--color-border-default)!important}.canvas-flow .vue-flow__controls-button{background:var(--color-surface-raised, #1e293b)!important;border-color:var(--color-border-default)!important;color:var(--color-text-primary)!important;fill:var(--color-text-primary)!important}.canvas-flow .vue-flow__controls-button:hover{background:var(--color-surface-overlay)!important}.canvas-ai-model-select{outline:none;font-family:ui-monospace,Consolas,monospace;max-width:180px}.canvas-ai-model-select option{background:var(--color-surface-raised, #1e293b);color:var(--color-text-primary)}
1
+ .vue-flow{position:relative;width:100%;height:100%;overflow:hidden;z-index:0;direction:ltr}.vue-flow__container{position:absolute;height:100%;width:100%;left:0;top:0}.vue-flow__pane{z-index:1}.vue-flow__pane.draggable{cursor:grab}.vue-flow__pane.selection{cursor:pointer}.vue-flow__pane.dragging{cursor:grabbing}.vue-flow__transformationpane{transform-origin:0 0;z-index:2;pointer-events:none}.vue-flow__viewport{z-index:4;overflow:clip}.vue-flow__selection{z-index:6}.vue-flow__edge-labels{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible{outline:none}.vue-flow .vue-flow__edges{pointer-events:none;overflow:visible}.vue-flow__edge-path,.vue-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.vue-flow__edge{pointer-events:visibleStroke;cursor:pointer}.vue-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__edge.animated path.vue-flow__edge-interaction{stroke-dasharray:none;animation:none}.vue-flow__edge.inactive{pointer-events:none}.vue-flow__edge.selected,.vue-flow__edge:focus,.vue-flow__edge:focus-visible{outline:none}.vue-flow__edge.selected .vue-flow__edge-path,.vue-flow__edge:focus .vue-flow__edge-path,.vue-flow__edge:focus-visible .vue-flow__edge-path{stroke:#555}.vue-flow__edge-textwrapper{pointer-events:all}.vue-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__connection{pointer-events:none}.vue-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__connectionline{z-index:1001}.vue-flow__nodes{pointer-events:none;transform-origin:0 0}.vue-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.vue-flow__node.draggable{cursor:grab;pointer-events:all}.vue-flow__node.draggable.dragging{cursor:grabbing}.vue-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.vue-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.vue-flow__nodesselection-rect.dragging{cursor:grabbing}.vue-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px}.vue-flow__handle.connectable{pointer-events:all;cursor:crosshair}.vue-flow__handle-bottom{left:50%;bottom:0;transform:translate(-50%,50%)}.vue-flow__handle-top{left:50%;top:0;transform:translate(-50%,-50%)}.vue-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.vue-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.vue-flow__edgeupdater{cursor:move;pointer-events:all}.vue-flow__panel{position:absolute;z-index:5;margin:15px}.vue-flow__panel.top{top:0}.vue-flow__panel.bottom{bottom:0}.vue-flow__panel.left{left:0}.vue-flow__panel.right{right:0}.vue-flow__panel.center{left:50%;transform:translate(-50%)}@keyframes dashdraw{0%{stroke-dashoffset:10}}:root{--vf-node-bg: #fff;--vf-node-text: #222;--vf-connection-path: #b1b1b7;--vf-handle: #555}.vue-flow__edge.updating .vue-flow__edge-path{stroke:#777}.vue-flow__edge-text{font-size:10px}.vue-flow__edge-textbg{fill:#fff}.vue-flow__connection-path{stroke:var(--vf-connection-path)}.vue-flow__node{cursor:grab}.vue-flow__node.selectable:focus,.vue-flow__node.selectable:focus-visible{outline:none}.vue-flow__node-default,.vue-flow__node-input,.vue-flow__node-output{padding:10px;border-radius:3px;width:150px;font-size:12px;text-align:center;border-width:1px;border-style:solid;color:var(--vf-node-text);background-color:var(--vf-node-bg);border-color:var(--vf-node-color)}.vue-flow__node-default.selected,.vue-flow__node-default.selected:hover,.vue-flow__node-input.selected,.vue-flow__node-input.selected:hover,.vue-flow__node-output.selected,.vue-flow__node-output.selected:hover{box-shadow:0 0 0 .5px var(--vf-box-shadow)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible,.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible,.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid #555}.vue-flow__node-default .vue-flow__handle,.vue-flow__node-input .vue-flow__handle,.vue-flow__node-output .vue-flow__handle{background:var(--vf-handle)}.vue-flow__node-default.selectable:hover,.vue-flow__node-input.selectable:hover,.vue-flow__node-output.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.vue-flow__node-input{--vf-node-color: var(--vf-node-color, #0041d0);--vf-handle: var(--vf-node-color, #0041d0);--vf-box-shadow: var(--vf-node-color, #0041d0);background:var(--vf-node-bg);border-color:var(--vf-node-color, #0041d0)}.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible{outline:none;border:1px solid var(--vf-node-color, #0041d0)}.vue-flow__node-default{--vf-handle: var(--vf-node-color, #1a192b);--vf-box-shadow: var(--vf-node-color, #1a192b);background:var(--vf-node-bg);border-color:var(--vf-node-color, #1a192b)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible{outline:none;border:1px solid var(--vf-node-color, #1a192b)}.vue-flow__node-output{--vf-handle: var(--vf-node-color, #ff0072);--vf-box-shadow: var(--vf-node-color, #ff0072);background:var(--vf-node-bg);border-color:var(--vf-node-color, #ff0072)}.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid var(--vf-node-color, #ff0072)}.vue-flow__nodesselection-rect,.vue-flow__selection{background:#0059dc14;border:1px dotted rgba(0,89,220,.8)}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible,.vue-flow__selection:focus,.vue-flow__selection:focus-visible{outline:none}.vue-flow__handle{width:6px;height:6px;background:var(--vf-handle);border:1px solid #fff;border-radius:100%}.vue-flow__controls{box-shadow:0 0 2px 1px #00000014}.vue-flow__controls-button{background:#fefefe;border:none;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:5px}.vue-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.vue-flow__controls-button:hover{background:#f4f4f4}.vue-flow__controls-button:disabled{pointer-events:none}.vue-flow__controls-button:disabled svg{fill-opacity:.4}.vue-flow__minimap{background-color:#fff}.vue-flow__minimap.pannable{cursor:grab}.vue-flow__minimap.dragging{cursor:grabbing}.vue-flow__minimap-mask.pannable{cursor:grab}.ai-diff[data-v-01c9471b]{display:flex;flex-direction:column;gap:6px}.diff-explanation[data-v-01c9471b]{font-size:11px;color:var(--color-text-secondary);background:color-mix(in srgb,var(--color-accent) 8%,transparent);padding:6px 8px;border-radius:4px;line-height:1.4}.diff-code[data-v-01c9471b]{background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);border-radius:4px;padding:6px 8px;max-height:200px;overflow:auto;font-family:ui-monospace,Consolas,monospace;font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-all}.diff-line[data-v-01c9471b]{color:var(--color-text-primary)}.diff-line.added[data-v-01c9471b]{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.diff-line.removed[data-v-01c9471b]{background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error);text-decoration:line-through}.diff-actions[data-v-01c9471b]{display:flex;gap:6px;justify-content:flex-end}.diff-accept[data-v-01c9471b]{background:var(--color-success);color:var(--color-surface-base, #0f172a);border:none;border-radius:4px;padding:3px 12px;font-size:11px;font-weight:700;cursor:pointer}.diff-accept[data-v-01c9471b]:hover{opacity:.9}.diff-dismiss[data-v-01c9471b]{background:none;border:1px solid var(--color-border-default);color:var(--color-text-muted);border-radius:4px;padding:3px 12px;font-size:11px;cursor:pointer}.diff-dismiss[data-v-01c9471b]:hover{background:var(--color-surface-overlay)}.tool-block[data-v-0e5de25f]{background:var(--color-surface-raised, #1e293b);border:1px solid var(--color-accent);border-radius:10px;padding:0;color:var(--color-text-primary);width:420px;font-size:13px;overflow:visible;transition:border-color .3s,box-shadow .3s}.tool-block.executing[data-v-0e5de25f]{animation:pulse-glow-0e5de25f 1s ease-in-out infinite;border-color:var(--color-accent);box-shadow:0 0 20px color-mix(in srgb,var(--color-accent) 30%,transparent)}.tool-block.completed[data-v-0e5de25f]{border-color:var(--color-success)}.tool-block.failed[data-v-0e5de25f]{border-color:var(--color-error)}@keyframes pulse-glow-0e5de25f{0%,to{box-shadow:0 0 5px color-mix(in srgb,var(--color-accent) 20%,transparent)}50%{box-shadow:0 0 25px color-mix(in srgb,var(--color-accent) 50%,transparent)}}.block-header[data-v-0e5de25f]{background:var(--color-surface-overlay, #334155);padding:10px 12px;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--color-border-default);border-radius:10px 10px 0 0}.block-badge[data-v-0e5de25f]{font-size:9px;text-transform:uppercase;letter-spacing:.8px;background:var(--color-accent);color:var(--color-surface-base, #0f172a);padding:2px 6px;border-radius:4px;font-weight:700;white-space:nowrap}.block-name-input[data-v-0e5de25f]{flex:1;background:transparent;border:none;color:var(--color-accent);font-size:15px;font-weight:700;font-family:ui-monospace,Consolas,monospace;outline:none;padding:0}.block-name-input[data-v-0e5de25f]:focus{border-bottom:1px solid var(--color-accent)}.exec-badge-row[data-v-0e5de25f]{padding:4px 12px;border-bottom:1px solid var(--color-border-default)}.exec-badge[data-v-0e5de25f]{font-size:10px;font-weight:700;padding:2px 8px;border-radius:4px;cursor:default}.exec-executing[data-v-0e5de25f]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);color:var(--color-accent)}.exec-completed[data-v-0e5de25f]{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success);border:none;cursor:pointer}.exec-completed[data-v-0e5de25f]:hover{background:color-mix(in srgb,var(--color-success) 25%,transparent)}.exec-failed[data-v-0e5de25f]{background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error)}.exec-result-panel[data-v-0e5de25f]{padding:6px 12px;border-bottom:1px solid var(--color-border-default);background:var(--color-surface-base, #0f172a);max-height:200px;overflow:auto}.block-section[data-v-0e5de25f]{padding:8px 12px;border-bottom:1px solid var(--color-border-default)}.block-section[data-v-0e5de25f]:last-child{border-bottom:none}.block-section>label[data-v-0e5de25f]{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted);display:block;margin-bottom:4px}.block-input[data-v-0e5de25f]{width:100%;background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);color:var(--color-text-primary);padding:4px 8px;border-radius:4px;font-size:12px;outline:none;box-sizing:border-box}.block-input[data-v-0e5de25f]:focus{border-color:var(--color-accent)}.param-header[data-v-0e5de25f]{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.param-header label[data-v-0e5de25f]{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted);margin-bottom:0}.param-add-btn[data-v-0e5de25f]{background:none;border:1px solid var(--color-border-default);color:var(--color-success);font-size:10px;padding:1px 6px;border-radius:3px;cursor:pointer}.param-add-btn[data-v-0e5de25f]:hover{background:var(--color-surface-overlay)}.param-row[data-v-0e5de25f]{display:flex;gap:4px;margin-bottom:3px}.param-name[data-v-0e5de25f],.param-type[data-v-0e5de25f]{flex:1;background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);color:var(--color-text-primary);padding:3px 6px;border-radius:4px;font-size:11px;font-family:ui-monospace,Consolas,monospace;outline:none;box-sizing:border-box}.param-name[data-v-0e5de25f]:focus,.param-type[data-v-0e5de25f]:focus{border-color:var(--color-accent)}.param-type[data-v-0e5de25f]{color:var(--color-accent)}.param-remove-btn[data-v-0e5de25f]{background:none;border:none;color:var(--color-error);font-size:14px;cursor:pointer;padding:0 4px;line-height:1}.secret-toggle-btn[data-v-0e5de25f]{background:none;border:none;font-size:11px;cursor:pointer;padding:0 3px;opacity:.35;transition:opacity .15s}.secret-toggle-btn[data-v-0e5de25f]:hover{opacity:.7}.secret-toggle-btn.active[data-v-0e5de25f]{opacity:1;filter:drop-shadow(0 0 3px var(--color-warning, #f9e2af))}.secret-masked[data-v-0e5de25f]{-webkit-text-security:disc}.param-empty[data-v-0e5de25f]{font-size:11px;color:var(--color-text-muted);font-style:italic}.probe-section[data-v-0e5de25f]{padding:0}.probe-toggle[data-v-0e5de25f]{display:flex;align-items:center;gap:6px;padding:8px 12px;cursor:pointer;-webkit-user-select:none;user-select:none}.probe-toggle label[data-v-0e5de25f]{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted);cursor:pointer;margin:0}.probe-badge[data-v-0e5de25f]{font-size:8px;text-transform:uppercase;letter-spacing:.5px;background:var(--color-accent);color:var(--color-surface-base, #0f172a);padding:1px 5px;border-radius:3px;font-weight:700;margin-left:auto}.toggle-arrow[data-v-0e5de25f]{font-size:8px;color:var(--color-text-muted);transition:transform .15s;display:inline-block;width:10px;text-align:center}.toggle-arrow.open[data-v-0e5de25f]{transform:rotate(90deg)}.probe-panel[data-v-0e5de25f]{padding:0 12px 10px;display:flex;flex-direction:column;gap:6px}.probe-url-row[data-v-0e5de25f]{display:flex;gap:4px}.probe-url[data-v-0e5de25f]{flex:1}.method-select[data-v-0e5de25f]{background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);color:var(--color-accent);padding:3px 4px;border-radius:4px;font-size:10px;font-weight:700;font-family:ui-monospace,Consolas,monospace;outline:none;cursor:pointer;width:62px}.probe-btn[data-v-0e5de25f]{background:var(--color-accent);color:var(--color-surface-base, #0f172a);border:none;border-radius:4px;padding:4px 10px;font-size:11px;font-weight:700;cursor:pointer;white-space:nowrap}.probe-btn[data-v-0e5de25f]:hover{opacity:.9}.probe-btn[data-v-0e5de25f]:disabled{opacity:.4;cursor:default}.diag-row[data-v-0e5de25f]{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.diag-status[data-v-0e5de25f]{font-size:10px;font-weight:700;color:var(--color-surface-base, #0f172a);padding:1px 6px;border-radius:3px;font-family:ui-monospace,Consolas,monospace}.diag-tag[data-v-0e5de25f]{font-size:9px;color:var(--color-text-secondary);background:var(--color-surface-overlay);padding:1px 5px;border-radius:3px}.diag-openapi[data-v-0e5de25f]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);color:var(--color-accent);font-weight:600}.diag-auth[data-v-0e5de25f]{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--color-warning, #f9e2af);background:color-mix(in srgb,var(--color-warning, #f9e2af) 8%,transparent);padding:4px 8px;border-radius:4px}.diag-auth-icon[data-v-0e5de25f]{font-size:12px}.config-section[data-v-0e5de25f]{display:flex;flex-direction:column;gap:3px}.config-header[data-v-0e5de25f]{display:flex;align-items:center;justify-content:space-between}.config-label[data-v-0e5de25f]{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted)}.req-body[data-v-0e5de25f]{min-height:50px}.ep-section[data-v-0e5de25f]{display:flex;flex-direction:column;gap:4px}.ep-search[data-v-0e5de25f]{font-size:11px}.ep-list[data-v-0e5de25f]{max-height:180px;overflow-y:auto;background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);border-radius:4px}.ep-row[data-v-0e5de25f]{display:flex;align-items:center;gap:6px;padding:4px 8px;cursor:pointer;border-bottom:1px solid var(--color-surface-raised, #1e293b)}.ep-row[data-v-0e5de25f]:last-child{border-bottom:none}.ep-row[data-v-0e5de25f]:hover{background:color-mix(in srgb,var(--color-accent) 8%,transparent)}.ep-row.selected[data-v-0e5de25f]{background:color-mix(in srgb,var(--color-accent) 15%,transparent)}.ep-method[data-v-0e5de25f]{font-size:8px;font-weight:700;color:var(--color-surface-base, #0f172a);padding:1px 4px;border-radius:2px;font-family:ui-monospace,Consolas,monospace;flex-shrink:0}.ep-path[data-v-0e5de25f]{font-size:11px;font-family:ui-monospace,Consolas,monospace;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ep-summary[data-v-0e5de25f]{font-size:10px;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-left:auto}.probe-tree[data-v-0e5de25f]{background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);border-radius:4px;padding:6px;max-height:220px;overflow:auto}.probe-footer[data-v-0e5de25f]{display:flex;align-items:center;justify-content:space-between}.probe-count[data-v-0e5de25f]{font-size:10px;color:var(--color-success);font-weight:600}.probe-apply-btn[data-v-0e5de25f]{background:var(--color-success);color:var(--color-surface-base, #0f172a);border:none;border-radius:4px;padding:3px 12px;font-size:11px;font-weight:700;cursor:pointer}.probe-apply-btn[data-v-0e5de25f]:hover{opacity:.9}.probe-error[data-v-0e5de25f]{font-size:11px;color:var(--color-error)}.probe-raw[data-v-0e5de25f]{font-size:10px;color:var(--color-text-secondary);background:var(--color-surface-base, #0f172a);padding:6px;border-radius:4px;max-height:80px;overflow:auto;margin:0;white-space:pre-wrap;word-break:break-all}.mappings-section[data-v-0e5de25f]{padding-bottom:6px}.mappings-header[data-v-0e5de25f]{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.mappings-header label[data-v-0e5de25f]{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted);margin:0}.stale-badge[data-v-0e5de25f]{font-size:9px;font-weight:700;color:var(--color-error);background:color-mix(in srgb,var(--color-error) 12%,transparent);padding:1px 6px;border-radius:3px}.mappings-list[data-v-0e5de25f]{display:flex;flex-wrap:wrap;gap:3px}.mapping-tag[data-v-0e5de25f]{font-size:10px;font-family:ui-monospace,Consolas,monospace;background:color-mix(in srgb,var(--color-success) 12%,transparent);color:var(--color-success);padding:1px 6px;border-radius:3px}.mapping-tag.stale[data-v-0e5de25f]{background:color-mix(in srgb,var(--color-error) 12%,transparent);color:var(--color-error);text-decoration:line-through}.block-body[data-v-0e5de25f]{width:100%;min-height:100px;background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);color:var(--color-text-primary);padding:8px;border-radius:4px;font-family:ui-monospace,Consolas,monospace;font-size:11px;line-height:1.5;resize:vertical;outline:none;box-sizing:border-box}.block-body[data-v-0e5de25f]:focus{border-color:var(--color-accent)}.ai-header-btn[data-v-0e5de25f]{background:none;border:1px solid var(--color-border-default);color:var(--color-text-muted);font-size:12px;padding:2px 6px;border-radius:4px;cursor:pointer;transition:all .15s;flex-shrink:0}.ai-header-btn[data-v-0e5de25f]:hover{background:var(--color-surface-overlay);color:var(--color-text-primary)}.ai-header-btn.active[data-v-0e5de25f]{border-color:var(--color-accent);color:var(--color-accent)}.ai-header-btn[data-v-0e5de25f]:disabled{opacity:.4;cursor:default}.ai-header-btn.ai-analyze[data-v-0e5de25f]{font-size:11px}.ai-fix-btn[data-v-0e5de25f]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);color:var(--color-accent);border:1px solid var(--color-accent);border-radius:4px;padding:2px 8px;font-size:10px;font-weight:700;cursor:pointer;margin-left:auto}.ai-fix-btn[data-v-0e5de25f]:hover{background:color-mix(in srgb,var(--color-accent) 25%,transparent)}.ai-fix-btn[data-v-0e5de25f]:disabled{opacity:.4;cursor:default}.insights-row[data-v-0e5de25f]{padding:4px 12px;border-bottom:1px solid var(--color-border-default);display:flex;flex-wrap:wrap;gap:4px}.insight-badge[data-v-0e5de25f]{font-size:10px;font-weight:600;padding:2px 8px;border-radius:4px;cursor:pointer;transition:opacity .15s}.insight-badge[data-v-0e5de25f]:hover{opacity:.8}.insight-badge.info[data-v-0e5de25f]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);color:var(--color-accent)}.insight-badge.warning[data-v-0e5de25f]{background:color-mix(in srgb,var(--color-warning, #f9e2af) 15%,transparent);color:var(--color-warning, #f9e2af)}.insight-badge.error[data-v-0e5de25f]{background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error)}.insight-detail[data-v-0e5de25f]{padding:8px 12px;border-bottom:1px solid var(--color-border-default);background:var(--color-surface-base, #0f172a)}.insight-desc[data-v-0e5de25f]{font-size:11px;color:var(--color-text-secondary);line-height:1.4;margin:0 0 6px}.thinking-bar[data-v-0e5de25f]{display:flex;align-items:center;gap:8px;padding:6px 12px;border-bottom:1px solid var(--color-border-default);background:linear-gradient(90deg,#8b5cf60d,#8b5cf61a,#8b5cf60d);background-size:200% 100%;animation:thinking-shimmer-0e5de25f 2s ease-in-out infinite}@keyframes thinking-shimmer-0e5de25f{0%{background-position:200% 0}to{background-position:-200% 0}}.thinking-dot[data-v-0e5de25f]{width:6px;height:6px;border-radius:50%;background:var(--color-accent);animation:thinking-pulse-0e5de25f 1s ease-in-out infinite}@keyframes thinking-pulse-0e5de25f{0%,to{opacity:.4;transform:scale(.8)}50%{opacity:1;transform:scale(1.2)}}.thinking-text[data-v-0e5de25f]{font-size:10px;color:var(--color-accent);font-style:italic;transition:opacity .3s}.insight-suggestion-label[data-v-0e5de25f]{font-size:9px;color:var(--color-text-muted);margin:4px 0 2px;font-style:italic}.insight-actions[data-v-0e5de25f]{display:flex;align-items:center;gap:8px;margin-top:6px}.insight-apply[data-v-0e5de25f]{background:var(--color-accent);border:none;color:#fff;font-size:10px;cursor:pointer;padding:3px 10px;border-radius:6px;font-weight:500}.insight-apply[data-v-0e5de25f]:hover{opacity:.85}.insight-close[data-v-0e5de25f]{background:none;border:none;color:var(--color-text-muted);font-size:10px;cursor:pointer;padding:2px 0}.insight-close[data-v-0e5de25f]:hover{color:var(--color-text-primary)}.intent-textarea[data-v-0e5de25f]{width:100%;background:var(--color-surface-base, #0f172a);border:1px solid var(--color-border-default);color:var(--color-text-primary);padding:6px 8px;border-radius:4px;font-size:12px;font-family:inherit;resize:vertical;outline:none;box-sizing:border-box}.intent-textarea[data-v-0e5de25f]:focus{border-color:var(--color-accent)}.intent-actions[data-v-0e5de25f]{display:flex;justify-content:flex-end;margin-top:4px}.intent-generate-btn[data-v-0e5de25f]{background:var(--color-accent);color:var(--color-surface-base, #0f172a);border:none;border-radius:4px;padding:3px 12px;font-size:11px;font-weight:700;cursor:pointer}.intent-generate-btn[data-v-0e5de25f]:hover{opacity:.9}.intent-generate-btn[data-v-0e5de25f]:disabled{opacity:.4;cursor:default}.intent-error[data-v-0e5de25f]{font-size:11px;color:var(--color-error);margin-top:4px}.probe-ai-row[data-v-0e5de25f]{display:flex;justify-content:flex-end}.ai-suggest-btn[data-v-0e5de25f]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);color:var(--color-accent);border:1px solid color-mix(in srgb,var(--color-accent) 30%,transparent);border-radius:4px;padding:2px 10px;font-size:10px;font-weight:700;cursor:pointer}.ai-suggest-btn[data-v-0e5de25f]:hover{background:color-mix(in srgb,var(--color-accent) 25%,transparent)}.ai-suggest-btn[data-v-0e5de25f]:disabled{opacity:.4;cursor:default}.auto-map-reasoning[data-v-0e5de25f]{font-size:10px;color:var(--color-text-secondary);background:color-mix(in srgb,var(--color-accent) 8%,transparent);padding:4px 8px;border-radius:4px;line-height:1.3}.sync-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.sync-dot.synced{background:var(--color-success)}.sync-dot.dirty{background:var(--color-warning, #f9e2af)}.canvas-flow{background:var(--color-surface-base, #0f172a)!important}.canvas-flow .vue-flow__node{border:none!important;background:none!important;padding:0!important;border-radius:0!important}.canvas-flow .vue-flow__handle{width:10px;height:10px;background:var(--color-accent)!important;border:2px solid var(--color-surface-base, #0f172a)!important}.canvas-flow .vue-flow__edge-path{stroke-width:2}.canvas-flow .vue-flow__minimap{background:var(--color-surface-raised, #1e293b)!important}.canvas-flow .vue-flow__controls{background:var(--color-surface-raised, #1e293b)!important;border-color:var(--color-border-default)!important}.canvas-flow .vue-flow__controls-button{background:var(--color-surface-raised, #1e293b)!important;border-color:var(--color-border-default)!important;color:var(--color-text-primary)!important;fill:var(--color-text-primary)!important}.canvas-flow .vue-flow__controls-button:hover{background:var(--color-surface-overlay)!important}.canvas-ai-model-select{outline:none;font-family:ui-monospace,Consolas,monospace;max-width:180px}.canvas-ai-model-select option{background:var(--color-surface-raised, #1e293b);color:var(--color-text-primary)}