llmxray 0.2.1 → 0.3.0

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 (47) hide show
  1. package/dist/assets/AITrainingPage-6EIRz3kX.js +1 -0
  2. package/dist/assets/{BenchmarkPage-yZ1Kt8KK.js → BenchmarkPage-B7ahJqyh.js} +2 -2
  3. package/dist/assets/ComparisonPage-Cg4Ut59Z.js +1 -0
  4. package/dist/assets/DashboardPage-BrCHJN4q.js +101 -0
  5. package/dist/assets/EmbeddingsPage-CpsFUo1d.js +1 -0
  6. package/dist/assets/{GoogleCallbackPage-DqfqxXhg.js → GoogleCallbackPage-CN8CaZK-.js} +1 -1
  7. package/dist/assets/{JsonTreeNode-BE6Ps90W.js → JsonTreeNode-BvAGKM9G.js} +2 -2
  8. package/dist/assets/ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-Cu2p2PDw.js +1 -0
  9. package/dist/assets/RAGPage-BKtz_PYd.js +1 -0
  10. package/dist/assets/SessionPage-BR4SPR1L.js +14 -0
  11. package/dist/assets/SettingsPage-BMhdIE_y.js +1 -0
  12. package/dist/assets/StatusBadge.vue_vue_type_script_setup_true_lang-Do1APUFY.js +1 -0
  13. package/dist/assets/StorageGauge.vue_vue_type_style_index_0_lang-DJFKaJRi.js +1 -0
  14. package/dist/assets/SystemPage-BoP1hvPb.js +2 -0
  15. package/dist/assets/{TabBar.vue_vue_type_script_setup_true_lang-CnQ8vq8x.js → TabBar.vue_vue_type_script_setup_true_lang-DEYUQ8oI.js} +1 -1
  16. package/dist/assets/{TokenStreamDisplay.vue_vue_type_script_setup_true_lang-CJW7ndOY.js → TokenStreamDisplay.vue_vue_type_script_setup_true_lang-DTGfuxgU.js} +1 -1
  17. package/dist/assets/{ToolWorkshopPage-gO5DvECk.css → ToolWorkshopPage-7TRbWVVL.css} +1 -1
  18. package/dist/assets/{ToolWorkshopPage-DoVwZp_3.js → ToolWorkshopPage-WPcjRasF.js} +88 -88
  19. package/dist/assets/{agent-store-_RIMRfEn.js → agent-store-DHWdued4.js} +1 -1
  20. package/dist/assets/{generate-service-mPYQA7Xh.js → generate-service-Cek8un6v.js} +1 -1
  21. package/dist/assets/{google-auth-store-BnEs-xLw.js → google-auth-store-DZ-3XsJA.js} +1 -1
  22. package/dist/assets/{index-D87kMEMb.js → index-B19rmHaK.js} +1 -1
  23. package/dist/assets/index-CgqXFXWk.js +6 -0
  24. package/dist/assets/index-DL68effo.css +1 -0
  25. package/dist/assets/{metrics-store-HzdMIV8O.js → metrics-store-eda0zEsH.js} +1 -1
  26. package/dist/assets/{rag-store-VWnttX_x.js → rag-store-lxO_mW3a.js} +1 -1
  27. package/dist/assets/{storage-store-B1XevdC4.js → storage-store-B9VvK961.js} +1 -1
  28. package/dist/assets/{stream-handler-29OjEvbo.js → stream-handler-D3rNjxe3.js} +2 -2
  29. package/dist/assets/{tool-workshop-store-Btx8DDqg.js → tool-workshop-store-XDULj1FM.js} +1 -1
  30. package/dist/assets/{toolcall-store-BumXt8DE.js → toolcall-store-CFB1O-_8.js} +1 -1
  31. package/dist/assets/trash-2-BLyRKRSt.js +1 -0
  32. package/dist/index.html +2 -2
  33. package/dist/social-card.svg +150 -0
  34. package/package.json +5 -2
  35. package/dist/assets/AITrainingPage-BbRryhHe.js +0 -1
  36. package/dist/assets/ComparisonPage-BnBp-VsC.js +0 -1
  37. package/dist/assets/DashboardPage-DTXPIpEx.js +0 -101
  38. package/dist/assets/EmbeddingsPage-CghkdGEr.js +0 -1
  39. package/dist/assets/ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-CsL7aDHj.js +0 -1
  40. package/dist/assets/RAGPage-B_c1Nogo.js +0 -1
  41. package/dist/assets/SessionPage-lWGESxx3.js +0 -14
  42. package/dist/assets/SettingsPage-k9HWgy9B.js +0 -1
  43. package/dist/assets/StatusBadge.vue_vue_type_script_setup_true_lang-f9O-U2FX.js +0 -1
  44. package/dist/assets/StorageGauge.vue_vue_type_style_index_0_lang-hO4dId5t.js +0 -1
  45. package/dist/assets/SystemPage-BgwBHFJB.js +0 -2
  46. package/dist/assets/index-BqB3FY2M.js +0 -4
  47. package/dist/assets/index-C0qd34Zo.css +0 -1
@@ -0,0 +1 @@
1
+ @font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2) format("woff2"),url(/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-cyrillic-400-normal-obahsSVq.woff2) format("woff2"),url(/assets/inter-cyrillic-400-normal-HOLc17fK.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2) format("woff2"),url(/assets/inter-greek-ext-400-normal-KugGGMne.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-greek-400-normal-B4URO6DV.woff2) format("woff2"),url(/assets/inter-greek-400-normal-q2sYcFCs.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-vietnamese-400-normal-DMkecbls.woff2) format("woff2"),url(/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-latin-ext-400-normal-C1nco2VV.woff2) format("woff2"),url(/assets/inter-latin-ext-400-normal-77YHD8bZ.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-latin-400-normal-C38fXH4l.woff2) format("woff2"),url(/assets/inter-latin-400-normal-CyCys3Eg.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2) format("woff2"),url(/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-cyrillic-500-normal-BasfLYem.woff2) format("woff2"),url(/assets/inter-cyrillic-500-normal-CxZf_p3X.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-greek-ext-500-normal-C4iEst2y.woff2) format("woff2"),url(/assets/inter-greek-ext-500-normal-2j5mBUwD.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-greek-500-normal-BIZE56-Y.woff2) format("woff2"),url(/assets/inter-greek-500-normal-Xzm54t5V.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-vietnamese-500-normal-DOriooB6.woff2) format("woff2"),url(/assets/inter-vietnamese-500-normal-mJboJaSs.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2) format("woff2"),url(/assets/inter-latin-ext-500-normal-BxGbmqWO.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-latin-500-normal-Cerq10X2.woff2) format("woff2"),url(/assets/inter-latin-500-normal-BL9OpVg8.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-cyrillic-ext-600-normal-Dfes3d0z.woff2) format("woff2"),url(/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-cyrillic-600-normal-CWCymEST.woff2) format("woff2"),url(/assets/inter-cyrillic-600-normal-4D_pXhcN.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-greek-ext-600-normal-DRtmH8MT.woff2) format("woff2"),url(/assets/inter-greek-ext-600-normal-B8X0CLgF.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-greek-600-normal-plRanbMR.woff2) format("woff2"),url(/assets/inter-greek-600-normal-BZpKdvQh.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2) format("woff2"),url(/assets/inter-vietnamese-600-normal-BuLX-rYi.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-latin-ext-600-normal-D2bJ5OIk.woff2) format("woff2"),url(/assets/inter-latin-ext-600-normal-CIVaiw4L.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-latin-600-normal-LgqL8muc.woff2) format("woff2"),url(/assets/inter-latin-600-normal-CiBQ2DWP.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-cyrillic-ext-700-normal-BjwYoWNd.woff2) format("woff2"),url(/assets/inter-cyrillic-ext-700-normal-LO58E6JB.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-cyrillic-700-normal-CjBOestx.woff2) format("woff2"),url(/assets/inter-cyrillic-700-normal-DrXBdSj3.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-greek-ext-700-normal-qfdV9bQt.woff2) format("woff2"),url(/assets/inter-greek-ext-700-normal-BoQ6DsYi.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-greek-700-normal-C3JjAnD8.woff2) format("woff2"),url(/assets/inter-greek-700-normal-BUv2fZ6O.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-vietnamese-700-normal-DlLaEgI2.woff2) format("woff2"),url(/assets/inter-vietnamese-700-normal-BZaoP0fm.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-latin-ext-700-normal-Ca8adRJv.woff2) format("woff2"),url(/assets/inter-latin-ext-700-normal-TidjK2hL.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-latin-700-normal-Yt3aPRUw.woff2) format("woff2"),url(/assets/inter-latin-700-normal-BLAVimhd.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/fira-code-cyrillic-ext-400-normal-txZ9Fk_1.woff2) format("woff2"),url(/assets/fira-code-cyrillic-ext-400-normal-Buh61xzB.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/fira-code-cyrillic-400-normal-UC0NFL4U.woff2) format("woff2"),url(/assets/fira-code-cyrillic-400-normal-dc1q3VD7.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/fira-code-greek-ext-400-normal-DR7mBgIM.woff2) format("woff2"),url(/assets/fira-code-greek-ext-400-normal-DSPUheWg.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/fira-code-greek-400-normal-B2Gh_Y8s.woff2) format("woff2"),url(/assets/fira-code-greek-400-normal-DobhaxvF.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/fira-code-symbols2-400-normal-_QEZCEwe.woff) format("woff");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/fira-code-latin-ext-400-normal-KSMg0QLl.woff2) format("woff2"),url(/assets/fira-code-latin-ext-400-normal-DG73JjOf.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/fira-code-latin-400-normal-DGosTW8U.woff2) format("woff2"),url(/assets/fira-code-latin-400-normal-C-QZfXAs.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/fira-code-cyrillic-ext-500-normal-CYRspHgm.woff2) format("woff2"),url(/assets/fira-code-cyrillic-ext-500-normal-CwtLmSFD.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/fira-code-cyrillic-500-normal-CX35h3Mg.woff2) format("woff2"),url(/assets/fira-code-cyrillic-500-normal-Bu7VCL72.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/fira-code-greek-ext-500-normal-BO3iq16n.woff2) format("woff2"),url(/assets/fira-code-greek-ext-500-normal-CMiNLXER.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/fira-code-greek-500-normal-CVO0IRNt.woff2) format("woff2"),url(/assets/fira-code-greek-500-normal-DEXIWiey.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/fira-code-symbols2-500-normal-DwsgbIjQ.woff) format("woff");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/fira-code-latin-ext-500-normal-Crd9e_oI.woff2) format("woff2"),url(/assets/fira-code-latin-ext-500-normal-CaANqXjI.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fira Code;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/fira-code-latin-500-normal-B6gioGu8.woff2) format("woff2"),url(/assets/fira-code-latin-500-normal-aMLC2AMm.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-surface:#0f172a;--color-surface-raised:#1e293b;--color-surface-overlay:#334155;--color-border-default:#475569;--color-text-primary:#f1f5f9;--color-text-secondary:#94a3b8;--color-text-muted:#64748b;--color-accent:#a855f7;--color-accent-hover:#c084fc;--color-success:#4ade80;--color-warning:#fbbf24;--color-error:#f87171}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.-top-0\.5{top:calc(var(--spacing) * -.5)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.top-16{top:calc(var(--spacing) * 16)}.top-full{top:100%}.-right-0\.5{right:calc(var(--spacing) * -.5)}.right-0{right:calc(var(--spacing) * 0)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-full{left:100%}.isolate{isolation:isolate}.z-10{z-index:10}.z-50{z-index:50}.z-\[9999\]{z-index:9999}.col-span-2{grid-column:span 2/span 2}.\!container{width:100%!important}@media(min-width:40rem){.\!container{max-width:40rem!important}}@media(min-width:48rem){.\!container{max-width:48rem!important}}@media(min-width:64rem){.\!container{max-width:64rem!important}}@media(min-width:80rem){.\!container{max-width:80rem!important}}@media(min-width:96rem){.\!container{max-width:96rem!important}}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.my-2{margin-block:calc(var(--spacing) * 2)}.-mt-3{margin-top:calc(var(--spacing) * -3)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-7{margin-left:calc(var(--spacing) * 7)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-4{-webkit-line-clamp:4;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-24{height:calc(var(--spacing) * 24)}.h-32{height:calc(var(--spacing) * 32)}.h-40{height:calc(var(--spacing) * 40)}.h-48{height:calc(var(--spacing) * 48)}.h-full{height:100%}.h-screen{height:100vh}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[50vh\]{max-height:50vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[150px\]{max-height:150px}.max-h-\[200px\]{max-height:200px}.max-h-\[400px\]{max-height:400px}.max-h-\[500px\]{max-height:500px}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[200px\]{min-height:200px}.min-h-full{min-height:100%}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-60{width:calc(var(--spacing) * 60)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-\[280px\]{width:280px}.w-\[400px\]{width:400px}.w-\[440px\]{width:440px}.w-\[480px\]{width:480px}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[80\%\]{max-width:80%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[100px\]{max-width:100px}.max-w-\[120px\]{max-width:120px}.max-w-\[200px\]{max-width:200px}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[150px\]{min-width:150px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-\[15\]{flex:15}.flex-\[20\]{flex:20}.flex-\[25\]{flex:25}.flex-\[40\]{flex:40}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0\.5{--tw-translate-x:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-3\.5{--tw-translate-x:calc(var(--spacing) * 3.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-2{--tw-translate-y:calc(var(--spacing) * -2);translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-crosshair{cursor:crosshair}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing) * 0)}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-px{gap:1px}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-br-md{border-bottom-right-radius:var(--radius-md)}.rounded-bl-md{border-bottom-left-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-\[\#a78bfa\]\/30{border-color:#a78bfa4d}.border-accent{border-color:var(--color-accent)}.border-accent\/20{border-color:#a855f733}@supports (color:color-mix(in lab,red,red)){.border-accent\/20{border-color:color-mix(in oklab,var(--color-accent) 20%,transparent)}}.border-accent\/30{border-color:#a855f74d}@supports (color:color-mix(in lab,red,red)){.border-accent\/30{border-color:color-mix(in oklab,var(--color-accent) 30%,transparent)}}.border-accent\/50{border-color:#a855f780}@supports (color:color-mix(in lab,red,red)){.border-accent\/50{border-color:color-mix(in oklab,var(--color-accent) 50%,transparent)}}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.border-blue-500\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500) 30%,transparent)}}.border-border-default{border-color:var(--color-border-default)}.border-border-default\/30{border-color:#4755694d}@supports (color:color-mix(in lab,red,red)){.border-border-default\/30{border-color:color-mix(in oklab,var(--color-border-default) 30%,transparent)}}.border-border-default\/50{border-color:#47556980}@supports (color:color-mix(in lab,red,red)){.border-border-default\/50{border-color:color-mix(in oklab,var(--color-border-default) 50%,transparent)}}.border-current{border-color:currentColor}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.border-error{border-color:var(--color-error)}.border-error\/30{border-color:#f871714d}@supports (color:color-mix(in lab,red,red)){.border-error\/30{border-color:color-mix(in oklab,var(--color-error) 30%,transparent)}}.border-error\/50{border-color:#f8717180}@supports (color:color-mix(in lab,red,red)){.border-error\/50{border-color:color-mix(in oklab,var(--color-error) 50%,transparent)}}.border-purple-500\/30{border-color:#ac4bff4d}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/30{border-color:color-mix(in oklab,var(--color-purple-500) 30%,transparent)}}.border-rose-500\/30{border-color:#ff23574d}@supports (color:color-mix(in lab,red,red)){.border-rose-500\/30{border-color:color-mix(in oklab,var(--color-rose-500) 30%,transparent)}}.border-success{border-color:var(--color-success)}.border-success\/30{border-color:#4ade804d}@supports (color:color-mix(in lab,red,red)){.border-success\/30{border-color:color-mix(in oklab,var(--color-success) 30%,transparent)}}.border-transparent{border-color:#0000}.border-warning\/20{border-color:#fbbf2433}@supports (color:color-mix(in lab,red,red)){.border-warning\/20{border-color:color-mix(in oklab,var(--color-warning) 20%,transparent)}}.border-warning\/30{border-color:#fbbf244d}@supports (color:color-mix(in lab,red,red)){.border-warning\/30{border-color:color-mix(in oklab,var(--color-warning) 30%,transparent)}}.border-t-\[\#a78bfa\]{border-top-color:#a78bfa}.border-t-transparent{border-top-color:#0000}.border-t-warning{border-top-color:var(--color-warning)}.border-b-surface-overlay{border-bottom-color:var(--color-surface-overlay)}.bg-\[\#a78bfa\]{background-color:#a78bfa}.bg-\[\#a78bfa\]\/10{background-color:#a78bfa1a}.bg-\[rgb\(139\,92\,246\)\]{background-color:#8b5cf6}.bg-\[rgb\(251\,146\,60\)\]{background-color:#fb923c}.bg-accent{background-color:var(--color-accent)}.bg-accent\/5{background-color:#a855f70d}@supports (color:color-mix(in lab,red,red)){.bg-accent\/5{background-color:color-mix(in oklab,var(--color-accent) 5%,transparent)}}.bg-accent\/10{background-color:#a855f71a}@supports (color:color-mix(in lab,red,red)){.bg-accent\/10{background-color:color-mix(in oklab,var(--color-accent) 10%,transparent)}}.bg-accent\/15{background-color:#a855f726}@supports (color:color-mix(in lab,red,red)){.bg-accent\/15{background-color:color-mix(in oklab,var(--color-accent) 15%,transparent)}}.bg-accent\/20{background-color:#a855f733}@supports (color:color-mix(in lab,red,red)){.bg-accent\/20{background-color:color-mix(in oklab,var(--color-accent) 20%,transparent)}}.bg-accent\/60{background-color:#a855f799}@supports (color:color-mix(in lab,red,red)){.bg-accent\/60{background-color:color-mix(in oklab,var(--color-accent) 60%,transparent)}}.bg-accent\/90{background-color:#a855f7e6}@supports (color:color-mix(in lab,red,red)){.bg-accent\/90{background-color:color-mix(in oklab,var(--color-accent) 90%,transparent)}}.bg-amber-500\/15{background-color:#f99c0026}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/15{background-color:color-mix(in oklab,var(--color-amber-500) 15%,transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/20{background-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-blue-500\/15{background-color:#3080ff26}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/15{background-color:color-mix(in oklab,var(--color-blue-500) 15%,transparent)}}.bg-blue-500\/20{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/20{background-color:color-mix(in oklab,var(--color-blue-500) 20%,transparent)}}.bg-border-default{background-color:var(--color-border-default)}.bg-border-default\/30{background-color:#4755694d}@supports (color:color-mix(in lab,red,red)){.bg-border-default\/30{background-color:color-mix(in oklab,var(--color-border-default) 30%,transparent)}}.bg-current{background-color:currentColor}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500) 15%,transparent)}}.bg-emerald-500\/20{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/20{background-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.bg-error{background-color:var(--color-error)}.bg-error\/5{background-color:#f871710d}@supports (color:color-mix(in lab,red,red)){.bg-error\/5{background-color:color-mix(in oklab,var(--color-error) 5%,transparent)}}.bg-error\/10{background-color:#f871711a}@supports (color:color-mix(in lab,red,red)){.bg-error\/10{background-color:color-mix(in oklab,var(--color-error) 10%,transparent)}}.bg-error\/20{background-color:#f8717133}@supports (color:color-mix(in lab,red,red)){.bg-error\/20{background-color:color-mix(in oklab,var(--color-error) 20%,transparent)}}.bg-error\/30{background-color:#f871714d}@supports (color:color-mix(in lab,red,red)){.bg-error\/30{background-color:color-mix(in oklab,var(--color-error) 30%,transparent)}}.bg-purple-500\/15{background-color:#ac4bff26}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/15{background-color:color-mix(in oklab,var(--color-purple-500) 15%,transparent)}}.bg-rose-500\/15{background-color:#ff235726}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/15{background-color:color-mix(in oklab,var(--color-rose-500) 15%,transparent)}}.bg-rose-500\/20{background-color:#ff235733}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/20{background-color:color-mix(in oklab,var(--color-rose-500) 20%,transparent)}}.bg-success{background-color:var(--color-success)}.bg-success\/5{background-color:#4ade800d}@supports (color:color-mix(in lab,red,red)){.bg-success\/5{background-color:color-mix(in oklab,var(--color-success) 5%,transparent)}}.bg-success\/10{background-color:#4ade801a}@supports (color:color-mix(in lab,red,red)){.bg-success\/10{background-color:color-mix(in oklab,var(--color-success) 10%,transparent)}}.bg-success\/20{background-color:#4ade8033}@supports (color:color-mix(in lab,red,red)){.bg-success\/20{background-color:color-mix(in oklab,var(--color-success) 20%,transparent)}}.bg-success\/30{background-color:#4ade804d}@supports (color:color-mix(in lab,red,red)){.bg-success\/30{background-color:color-mix(in oklab,var(--color-success) 30%,transparent)}}.bg-surface{background-color:var(--color-surface)}.bg-surface-overlay{background-color:var(--color-surface-overlay)}.bg-surface-overlay\/90{background-color:#334155e6}@supports (color:color-mix(in lab,red,red)){.bg-surface-overlay\/90{background-color:color-mix(in oklab,var(--color-surface-overlay) 90%,transparent)}}.bg-surface-raised{background-color:var(--color-surface-raised)}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--color-warning)}.bg-warning\/5{background-color:#fbbf240d}@supports (color:color-mix(in lab,red,red)){.bg-warning\/5{background-color:color-mix(in oklab,var(--color-warning) 5%,transparent)}}.bg-warning\/10{background-color:#fbbf241a}@supports (color:color-mix(in lab,red,red)){.bg-warning\/10{background-color:color-mix(in oklab,var(--color-warning) 10%,transparent)}}.bg-warning\/15{background-color:#fbbf2426}@supports (color:color-mix(in lab,red,red)){.bg-warning\/15{background-color:color-mix(in oklab,var(--color-warning) 15%,transparent)}}.bg-warning\/20{background-color:#fbbf2433}@supports (color:color-mix(in lab,red,red)){.bg-warning\/20{background-color:color-mix(in oklab,var(--color-warning) 20%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.fill-border-default{fill:var(--color-border-default)}.fill-surface-raised{fill:var(--color-surface-raised)}.fill-text-primary{fill:var(--color-text-primary)}.fill-text-secondary{fill:var(--color-text-secondary)}.stroke-border-default{stroke:var(--color-border-default)}.stroke-surface-overlay{stroke:var(--color-surface-overlay)}.stroke-2{stroke-width:2px}.stroke-\[3\]{stroke-width:3px}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-px{padding-inline:1px}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.py-\[16px\]{padding-block:16px}.py-px{padding-block:1px}.pt-0{padding-top:calc(var(--spacing) * 0)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pl-1{padding-left:calc(var(--spacing) * 1)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-text-bottom{vertical-align:text-bottom}.align-text-top{vertical-align:text-top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#a78bfa\]{color:#a78bfa}.text-\[\#f472b6\]{color:#f472b6}.text-accent{color:var(--color-accent)}.text-accent\/60{color:#a855f799}@supports (color:color-mix(in lab,red,red)){.text-accent\/60{color:color-mix(in oklab,var(--color-accent) 60%,transparent)}}.text-amber-400{color:var(--color-amber-400)}.text-blue-400{color:var(--color-blue-400)}.text-emerald-400{color:var(--color-emerald-400)}.text-error{color:var(--color-error)}.text-error\/80{color:#f87171cc}@supports (color:color-mix(in lab,red,red)){.text-error\/80{color:color-mix(in oklab,var(--color-error) 80%,transparent)}}.text-purple-400{color:var(--color-purple-400)}.text-rose-400{color:var(--color-rose-400)}.text-success{color:var(--color-success)}.text-success\/80{color:#4ade80cc}@supports (color:color-mix(in lab,red,red)){.text-success\/80{color:color-mix(in oklab,var(--color-success) 80%,transparent)}}.text-surface{color:var(--color-surface)}.text-text-muted{color:var(--color-text-muted)}.text-text-muted\/20{color:#64748b33}@supports (color:color-mix(in lab,red,red)){.text-text-muted\/20{color:color-mix(in oklab,var(--color-text-muted) 20%,transparent)}}.text-text-muted\/50{color:#64748b80}@supports (color:color-mix(in lab,red,red)){.text-text-muted\/50{color:color-mix(in oklab,var(--color-text-muted) 50%,transparent)}}.text-text-primary{color:var(--color-text-primary)}.text-text-secondary{color:var(--color-text-secondary)}.text-warning{color:var(--color-warning)}.text-warning\/80{color:#fbbf24cc}@supports (color:color-mix(in lab,red,red)){.text-warning\/80{color:color-mix(in oklab,var(--color-warning) 80%,transparent)}}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.placeholder-text-muted::placeholder{color:var(--color-text-muted)}.accent-accent{accent-color:var(--color-accent)}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}@media(hover:hover){.group-hover\:pointer-events-auto:is(:where(.group):hover *){pointer-events:auto}.group-hover\:flex:is(:where(.group):hover *){display:flex}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-text-muted::placeholder{color:var(--color-text-muted)}.first\:rounded-l-full:first-child{border-top-left-radius:3.40282e38px;border-bottom-left-radius:3.40282e38px}.last\:rounded-r-full:last-child{border-top-right-radius:3.40282e38px;border-bottom-right-radius:3.40282e38px}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.focus-within\:border-accent:focus-within{border-color:var(--color-accent)}@media(hover:hover){.hover\:border-accent:hover{border-color:var(--color-accent)}.hover\:border-accent\/30:hover{border-color:#a855f74d}@supports (color:color-mix(in lab,red,red)){.hover\:border-accent\/30:hover{border-color:color-mix(in oklab,var(--color-accent) 30%,transparent)}}.hover\:border-accent\/50:hover{border-color:#a855f780}@supports (color:color-mix(in lab,red,red)){.hover\:border-accent\/50:hover{border-color:color-mix(in oklab,var(--color-accent) 50%,transparent)}}.hover\:border-border-default:hover{border-color:var(--color-border-default)}.hover\:border-error:hover{border-color:var(--color-error)}.hover\:bg-accent:hover{background-color:var(--color-accent)}.hover\:bg-accent-hover:hover{background-color:var(--color-accent-hover)}.hover\:bg-accent\/10:hover{background-color:#a855f71a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/10:hover{background-color:color-mix(in oklab,var(--color-accent) 10%,transparent)}}.hover\:bg-accent\/20:hover{background-color:#a855f733}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/20:hover{background-color:color-mix(in oklab,var(--color-accent) 20%,transparent)}}.hover\:bg-border-default:hover{background-color:var(--color-border-default)}.hover\:bg-error\/10:hover{background-color:#f871711a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/10:hover{background-color:color-mix(in oklab,var(--color-error) 10%,transparent)}}.hover\:bg-error\/20:hover{background-color:#f8717133}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/20:hover{background-color:color-mix(in oklab,var(--color-error) 20%,transparent)}}.hover\:bg-error\/30:hover{background-color:#f871714d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/30:hover{background-color:color-mix(in oklab,var(--color-error) 30%,transparent)}}.hover\:bg-error\/80:hover{background-color:#f87171cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/80:hover{background-color:color-mix(in oklab,var(--color-error) 80%,transparent)}}.hover\:bg-success\/20:hover{background-color:#4ade8033}@supports (color:color-mix(in lab,red,red)){.hover\:bg-success\/20:hover{background-color:color-mix(in oklab,var(--color-success) 20%,transparent)}}.hover\:bg-surface:hover{background-color:var(--color-surface)}.hover\:bg-surface-overlay:hover{background-color:var(--color-surface-overlay)}.hover\:bg-surface-raised:hover{background-color:var(--color-surface-raised)}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.hover\:text-accent:hover{color:var(--color-accent)}.hover\:text-accent-hover:hover{color:var(--color-accent-hover)}.hover\:text-error:hover{color:var(--color-error)}.hover\:text-text-primary:hover{color:var(--color-text-primary)}.hover\:text-text-secondary:hover{color:var(--color-text-secondary)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}}.focus\:border-accent:focus{border-color:var(--color-accent)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:64rem){.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}.lg\:justify-center{justify-content:center}}@media(min-width:80rem){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}}html{color-scheme:dark}html.light{color-scheme:light;--color-surface:#f8fafc;--color-surface-raised:#fff;--color-surface-overlay:#e2e8f0;--color-border-default:#cbd5e1;--color-text-primary:#0f172a;--color-text-secondary:#475569;--color-text-muted:#94a3b8;--color-accent:#9333ea;--color-accent-hover:#7e22ce;--color-success:#16a34a;--color-warning:#d97706;--color-error:#dc2626;--color-confidence-high:#16a34a;--color-confidence-mid:#d97706;--color-confidence-low:#dc2626}@keyframes typing-bounce{0%,80%,to{opacity:.4;transform:translateY(0)}40%{opacity:1;transform:translateY(-6px)}}@keyframes ripple{0%{opacity:.6;transform:scale(1)}to{opacity:0;transform:scale(2.2)}}@keyframes glow-in{0%{box-shadow:0 0 #a855f766}50%{box-shadow:0 0 8px 2px #a855f733}to{box-shadow:0 0 #a855f700}}@keyframes thinking-orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}body{background-color:var(--color-surface);color:var(--color-text-primary);margin:0;font-family:Inter,system-ui,-apple-system,sans-serif}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-surface-overlay);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--color-border-default)}.markdown-prose{color:var(--color-text-primary);font-size:.875rem;line-height:1.625}.markdown-prose p{margin:.5em 0}.markdown-prose p:first-child{margin-top:0}.markdown-prose p:last-child{margin-bottom:0}.markdown-prose h1,.markdown-prose h2,.markdown-prose h3,.markdown-prose h4{color:var(--color-text-primary);margin:1em 0 .5em;font-weight:600}.markdown-prose h1{font-size:1.25em}.markdown-prose h2{font-size:1.125em}.markdown-prose h3{font-size:1em}.markdown-prose h1:first-child,.markdown-prose h2:first-child,.markdown-prose h3:first-child{margin-top:0}.markdown-prose strong{color:var(--color-text-primary);font-weight:600}.markdown-prose em{font-style:italic}.markdown-prose code{background:var(--color-surface-overlay);color:var(--color-accent);border-radius:4px;padding:.15em .35em;font-family:Fira Code,Cascadia Code,JetBrains Mono,monospace;font-size:.85em}.markdown-prose pre{background:var(--color-surface);border:1px solid var(--color-border-default);border-radius:8px;margin:.75em 0;padding:.75em 1em;overflow-x:auto}.markdown-prose pre code{color:var(--color-text-primary);background:0 0;border-radius:0;padding:0;font-size:.8em}.markdown-prose ul,.markdown-prose ol{margin:.5em 0;padding-left:1.5em}.markdown-prose ul{list-style-type:disc}.markdown-prose ol{list-style-type:decimal}.markdown-prose li,.markdown-prose li>ul,.markdown-prose li>ol{margin:.25em 0}.markdown-prose blockquote{border-left:3px solid var(--color-accent);background:var(--color-surface);color:var(--color-text-secondary);border-radius:0 6px 6px 0;margin:.75em 0;padding:.5em 1em}.markdown-prose hr{border:none;border-top:1px solid var(--color-border-default);margin:1em 0}.markdown-prose a{color:var(--color-accent);text-decoration:underline}.markdown-prose table{border-collapse:collapse;width:100%;margin:.75em 0;font-size:.85em}.markdown-prose th,.markdown-prose td{border:1px solid var(--color-border-default);text-align:left;padding:.4em .75em}.markdown-prose th{background:var(--color-surface);font-weight:600}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
@@ -1 +1 @@
1
- import{d as T,r as i,c as f}from"./index-BqB3FY2M.js";const M=T("metrics",()=>{const s=i(new Map),a=i({totalSessions:0,avgTtftMs:0,avgTps:0,avgTotalDurationMs:0,totalTokensGenerated:0,totalPromptsEvaluated:0,modelsUsed:[]}),d=f(()=>[...s.value.values()].sort((t,e)=>t.startedAt-e.startedAt));function g(t){return s.value.get(t)??null}function m(t,e){s.value.set(t,e)}function v(){const t=[...s.value.values()];if(t.length===0)return;const e=new Set;let n=0,l=0,r=0,u=0,c=0;for(const o of t)e.add(o.model),n+=o.ttftMs,l+=o.tokensPerSecond,r+=o.totalDurationMs,u+=o.completionTokenCount,c+=o.promptTokenCount;a.value={totalSessions:t.length,avgTtftMs:n/t.length,avgTps:l/t.length,avgTotalDurationMs:r/t.length,totalTokensGenerated:u,totalPromptsEvaluated:c,modelsUsed:[...e]}}return{metricsBySession:s,aggregate:a,metricsHistory:d,getMetrics:g,recordMetrics:m,recalculateAggregate:v}});export{M as u};
1
+ import{d as T,r as i,a as f}from"./index-CgqXFXWk.js";const M=T("metrics",()=>{const s=i(new Map),a=i({totalSessions:0,avgTtftMs:0,avgTps:0,avgTotalDurationMs:0,totalTokensGenerated:0,totalPromptsEvaluated:0,modelsUsed:[]}),d=f(()=>[...s.value.values()].sort((t,e)=>t.startedAt-e.startedAt));function g(t){return s.value.get(t)??null}function m(t,e){s.value.set(t,e)}function v(){const t=[...s.value.values()];if(t.length===0)return;const e=new Set;let n=0,l=0,r=0,u=0,c=0;for(const o of t)e.add(o.model),n+=o.ttftMs,l+=o.tokensPerSecond,r+=o.totalDurationMs,u+=o.completionTokenCount,c+=o.promptTokenCount;a.value={totalSessions:t.length,avgTtftMs:n/t.length,avgTps:l/t.length,avgTotalDurationMs:r/t.length,totalTokensGenerated:u,totalPromptsEvaluated:c,modelsUsed:[...e]}}return{metricsBySession:s,aggregate:a,metricsHistory:d,getMetrics:g,recordMetrics:m,recalculateAggregate:v}});export{M as u};
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DoAHVxX6.js","assets/_commonjsHelpers-DsqdWQfm.js","assets/papaparse.min-3s4OkBbM.js"])))=>i.map(i=>d[i]);
2
- import{_ as y,n as x,o as _,d as $,r as f,c as b}from"./index-BqB3FY2M.js";import{vectorDB as w}from"./vector-db-ChAzHl5A.js";async function I(e,o){switch(o){case"pdf":return O(e);case"docx":return j(e);case"csv":return R(e);case"txt":case"md":return e.text();default:throw new Error(`Unsupported format: ${o}`)}}async function O(e){const o=await y(()=>import("./pdf-vkbVaD7t.js"),[]);o.GlobalWorkerOptions.workerSrc=new URL("/assets/pdf.worker-CliDBb4N.mjs",import.meta.url).toString();const c=await e.arrayBuffer(),n=await o.getDocument({data:c}).promise,r=[];for(let a=1;a<=n.numPages;a++){const l=(await(await n.getPage(a)).getTextContent()).items.map(s=>"str"in s?s.str:"").join(" ");r.push(l)}return r.join(`
2
+ import{_ as y,n as x,o as _,d as $,r as f,a as b}from"./index-CgqXFXWk.js";import{vectorDB as w}from"./vector-db-ChAzHl5A.js";async function I(e,o){switch(o){case"pdf":return O(e);case"docx":return j(e);case"csv":return R(e);case"txt":case"md":return e.text();default:throw new Error(`Unsupported format: ${o}`)}}async function O(e){const o=await y(()=>import("./pdf-vkbVaD7t.js"),[]);o.GlobalWorkerOptions.workerSrc=new URL("/assets/pdf.worker-CliDBb4N.mjs",import.meta.url).toString();const c=await e.arrayBuffer(),n=await o.getDocument({data:c}).promise,r=[];for(let a=1;a<=n.numPages;a++){const l=(await(await n.getPage(a)).getTextContent()).items.map(s=>"str"in s?s.str:"").join(" ");r.push(l)}return r.join(`
3
3
 
4
4
  `)}async function j(e){const o=await y(()=>import("./index-DoAHVxX6.js").then(r=>r.i),__vite__mapDeps([0,1])),c=await e.arrayBuffer();return(await o.extractRawText({arrayBuffer:c})).value}async function R(e){const o=await y(()=>import("./papaparse.min-3s4OkBbM.js").then(n=>n.p),__vite__mapDeps([2,1])),c=await e.text();return new Promise((n,r)=>{o.default.parse(c,{header:!0,complete(a){const t=a.data.filter(u=>Object.values(u).some(l=>l!==""&&l!=null)).map((u,l)=>{const s=Object.entries(u).map(([d,m])=>`${d}: ${m}`).join(", ");return`Row ${l+1}: ${s}`});n(t.join(`
5
5
  `))},error(a){r(a)}})})}function T(e){switch(e.split(".").pop()?.toLowerCase()){case"pdf":return"pdf";case"docx":return"docx";case"txt":return"txt";case"md":return"md";case"csv":return"csv";default:return null}}const z={chunkSize:1e3,chunkOverlap:200,separator:`
@@ -1 +1 @@
1
- import{d as g,r as d,c as f}from"./index-BqB3FY2M.js";const b=[{id:"rag",dbName:"llmxray-rag",label:"Knowledge Base",icon:"📚",stores:["chunks","documents"]},{id:"conversations",dbName:"llmxray-conversations",label:"Conversations",icon:"💬",stores:["conversations","messages","sessions","tokens"]},{id:"benchmarks",dbName:"llmxray-benchmarks",label:"Benchmarks",icon:"⏱",stores:["results","custom-suites"]},{id:"message-memory",dbName:"llmxray-message-memory",label:"Message Memory",icon:"🧠",stores:["messages"]},{id:"canvas-ai",dbName:"llmxray-canvas-ai",label:"AI Training",icon:"🎨",stores:["training-pairs"]}];async function p(){if(!navigator.storage?.estimate)return{usage:0,quota:0,persisted:!1};const s=await navigator.storage.estimate(),e=await navigator.storage.persisted?.()??!1;return{usage:s.usage??0,quota:s.quota??0,persisted:e}}function y(s){if(s==null)return 0;if(typeof s!="object")return String(s).length*2;const e=s;let t=0;for(const o of Object.keys(e)){t+=o.length*2;const n=e[o];Array.isArray(n)&&n.length>0&&typeof n[0]=="number"?t+=n.length*8:typeof n=="string"?t+=n.length*2:typeof n=="number"?t+=8:typeof n=="boolean"?t+=4:n!=null&&typeof n=="object"&&(t+=y(n))}return t}function v(s){return new Promise(e=>{const t=indexedDB.open(s);t.onupgradeneeded=()=>{t.transaction?.abort(),e(null)},t.onsuccess=()=>e(t.result),t.onerror=()=>e(null)})}function h(s,e){return new Promise(t=>{if(!s.objectStoreNames.contains(e)){t({name:e,bytes:0,count:0});return}const n=s.transaction(e,"readonly").objectStore(e);let c=0,r=0;const i=n.openCursor();i.onsuccess=()=>{const l=i.result;l?(c+=y(l.value),r++,l.continue()):t({name:e,bytes:c,count:r})},i.onerror=()=>t({name:e,bytes:0,count:0})})}async function w(s,e){const t=await v(s);if(!t)return{totalBytes:0,recordCount:0,stores:e.map(o=>({name:o,bytes:0,count:0}))};try{const o=[];for(const r of e)o.push(await h(t,r));const n=o.reduce((r,i)=>r+i.bytes,0),c=o.reduce((r,i)=>r+i.count,0);return{totalBytes:n,recordCount:c,stores:o}}finally{t.close()}}async function S(){const s=[];for(const e of b){const{totalBytes:t,recordCount:o,stores:n}=await w(e.dbName,e.stores);s.push({id:e.id,label:e.label,icon:e.icon,type:"indexeddb",totalBytes:t,recordCount:o,stores:n})}return s}const B=g("storage",()=>{const s=d(null),e=d([]),t=d(!1),o=d(null),n=f(()=>e.value.reduce((a,u)=>a+u.totalBytes,0)),c=f(()=>!s.value||s.value.quota===0?0:Math.round(s.value.usage/s.value.quota*100)),r=f(()=>e.value.reduce((a,u)=>a+u.recordCount,0));function i(a){return e.value.find(u=>u.id===a)}async function l(){t.value=!0;try{const[a,u]=await Promise.all([p(),S()]);s.value=a,e.value=u,o.value=Date.now()}catch(a){console.error("Failed to estimate storage:",a)}finally{t.value=!1}}async function m(a=3e4){(!o.value||Date.now()-o.value>a)&&await l()}return{origin:s,databases:e,loading:t,lastUpdated:o,totalUsedBytes:n,usedPercent:c,totalRecordCount:r,getDatabaseById:i,refresh:l,refreshIfStale:m}});export{B as u};
1
+ import{d as g,r as d,a as f}from"./index-CgqXFXWk.js";const b=[{id:"rag",dbName:"llmxray-rag",label:"Knowledge Base",icon:"📚",stores:["chunks","documents"]},{id:"conversations",dbName:"llmxray-conversations",label:"Conversations",icon:"💬",stores:["conversations","messages","sessions","tokens"]},{id:"benchmarks",dbName:"llmxray-benchmarks",label:"Benchmarks",icon:"⏱",stores:["results","custom-suites"]},{id:"message-memory",dbName:"llmxray-message-memory",label:"Message Memory",icon:"🧠",stores:["messages"]},{id:"canvas-ai",dbName:"llmxray-canvas-ai",label:"AI Training",icon:"🎨",stores:["training-pairs"]}];async function p(){if(!navigator.storage?.estimate)return{usage:0,quota:0,persisted:!1};const s=await navigator.storage.estimate(),e=await navigator.storage.persisted?.()??!1;return{usage:s.usage??0,quota:s.quota??0,persisted:e}}function y(s){if(s==null)return 0;if(typeof s!="object")return String(s).length*2;const e=s;let t=0;for(const a of Object.keys(e)){t+=a.length*2;const n=e[a];Array.isArray(n)&&n.length>0&&typeof n[0]=="number"?t+=n.length*8:typeof n=="string"?t+=n.length*2:typeof n=="number"?t+=8:typeof n=="boolean"?t+=4:n!=null&&typeof n=="object"&&(t+=y(n))}return t}function v(s){return new Promise(e=>{const t=indexedDB.open(s);t.onupgradeneeded=()=>{t.transaction?.abort(),e(null)},t.onsuccess=()=>e(t.result),t.onerror=()=>e(null)})}function h(s,e){return new Promise(t=>{if(!s.objectStoreNames.contains(e)){t({name:e,bytes:0,count:0});return}const n=s.transaction(e,"readonly").objectStore(e);let c=0,r=0;const i=n.openCursor();i.onsuccess=()=>{const l=i.result;l?(c+=y(l.value),r++,l.continue()):t({name:e,bytes:c,count:r})},i.onerror=()=>t({name:e,bytes:0,count:0})})}async function w(s,e){const t=await v(s);if(!t)return{totalBytes:0,recordCount:0,stores:e.map(a=>({name:a,bytes:0,count:0}))};try{const a=[];for(const r of e)a.push(await h(t,r));const n=a.reduce((r,i)=>r+i.bytes,0),c=a.reduce((r,i)=>r+i.count,0);return{totalBytes:n,recordCount:c,stores:a}}finally{t.close()}}async function S(){const s=[];for(const e of b){const{totalBytes:t,recordCount:a,stores:n}=await w(e.dbName,e.stores);s.push({id:e.id,label:e.label,icon:e.icon,type:"indexeddb",totalBytes:t,recordCount:a,stores:n})}return s}const B=g("storage",()=>{const s=d(null),e=d([]),t=d(!1),a=d(null),n=f(()=>e.value.reduce((o,u)=>o+u.totalBytes,0)),c=f(()=>!s.value||s.value.quota===0?0:Math.round(s.value.usage/s.value.quota*100)),r=f(()=>e.value.reduce((o,u)=>o+u.recordCount,0));function i(o){return e.value.find(u=>u.id===o)}async function l(){t.value=!0;try{const[o,u]=await Promise.all([p(),S()]);s.value=o,e.value=u,a.value=Date.now()}catch(o){console.error("Failed to estimate storage:",o)}finally{t.value=!1}}async function m(o=3e4){(!a.value||Date.now()-a.value>o)&&await l()}return{origin:s,databases:e,loading:t,lastUpdated:a,totalUsedBytes:n,usedPercent:c,totalRecordCount:r,getDatabaseById:i,refresh:l,refreshIfStale:m}});export{B as u};
@@ -1,4 +1,4 @@
1
- import{n as u,z as O}from"./index-BqB3FY2M.js";import{u as G,a as q}from"./toolcall-store-BumXt8DE.js";import{a as R,b as E,u as J}from"./agent-store-_RIMRfEn.js";import{u as $}from"./metrics-store-HzdMIV8O.js";const B=1e6;function F(t,n,a,e,c){const s=(e.total_duration??0)/B,o=(e.load_duration??0)/B,i=(e.prompt_eval_duration??0)/B,l=(e.eval_duration??0)/B,p=e.prompt_eval_count??0,r=e.eval_count??0,h=l>0?r/l*1e3:0,f=i>0?p/i*1e3:0,d=c.length>0?c[0]:0;return{sessionId:t,model:n,startedAt:a,completedAt:Date.now(),ttftMs:d,totalDurationMs:s,loadDurationMs:o,promptEvalDurationMs:i,evalDurationMs:l,tokensPerSecond:h,promptTokensPerSecond:f,promptTokenCount:p,completionTokenCount:r,totalTokenCount:p+r,tokenLatencies:c}}class V{constructor(n){this.stepIndex=0,this.activeStep=null,this.inThinkBlock=!1,this.completedSteps=[],this.lastProcessedLineIndex=-1,this.thinkBlockProcessed=!1,this.enablePatternDetection=n?.patternDetection??!0}get isThinking(){return this.inThinkBlock}get thinkingContent(){return this.inThinkBlock&&this.activeStep?this.activeStep.content:""}processToken(n,a){if(!this.inThinkBlock&&!this.thinkBlockProcessed&&a.includes("<think>")){this.inThinkBlock=!0;const i=a.split("<think>").pop()??"";return this.activeStep={type:"thought",content:i,startTokenIndex:n.index,startTimestamp:n.timestamp},null}if(this.inThinkBlock&&a.includes("</think>")){if(this.inThinkBlock=!1,this.thinkBlockProcessed=!0,this.activeStep){const i=a.match(/<think>([\s\S]*?)<\/think>/);if(i?this.activeStep.content=i[1]?.trim()??this.activeStep.content.trim():this.activeStep.content=this.activeStep.content.replace(/<\/think>[\s\S]*$/,"").trim(),this.activeStep.content)return this.finalizeStep(n);this.activeStep=null}return null}if(this.inThinkBlock&&this.activeStep)return this.activeStep.content+=n.text,null;if(!this.enablePatternDetection)return null;const e=a.split(`
1
+ import{n as u,A as z}from"./index-CgqXFXWk.js";import{u as G,a as q}from"./toolcall-store-CFB1O-_8.js";import{a as R,b as E,u as J}from"./agent-store-DHWdued4.js";import{u as $}from"./metrics-store-eda0zEsH.js";const B=1e6;function F(t,n,a,e,c){const s=(e.total_duration??0)/B,o=(e.load_duration??0)/B,i=(e.prompt_eval_duration??0)/B,l=(e.eval_duration??0)/B,p=e.prompt_eval_count??0,r=e.eval_count??0,h=l>0?r/l*1e3:0,f=i>0?p/i*1e3:0,d=c.length>0?c[0]:0;return{sessionId:t,model:n,startedAt:a,completedAt:Date.now(),ttftMs:d,totalDurationMs:s,loadDurationMs:o,promptEvalDurationMs:i,evalDurationMs:l,tokensPerSecond:h,promptTokensPerSecond:f,promptTokenCount:p,completionTokenCount:r,totalTokenCount:p+r,tokenLatencies:c}}class V{constructor(n){this.stepIndex=0,this.activeStep=null,this.inThinkBlock=!1,this.completedSteps=[],this.lastProcessedLineIndex=-1,this.thinkBlockProcessed=!1,this.enablePatternDetection=n?.patternDetection??!0}get isThinking(){return this.inThinkBlock}get thinkingContent(){return this.inThinkBlock&&this.activeStep?this.activeStep.content:""}processToken(n,a){if(!this.inThinkBlock&&!this.thinkBlockProcessed&&a.includes("<think>")){this.inThinkBlock=!0;const i=a.split("<think>").pop()??"";return this.activeStep={type:"thought",content:i,startTokenIndex:n.index,startTimestamp:n.timestamp},null}if(this.inThinkBlock&&a.includes("</think>")){if(this.inThinkBlock=!1,this.thinkBlockProcessed=!0,this.activeStep){const i=a.match(/<think>([\s\S]*?)<\/think>/);if(i?this.activeStep.content=i[1]?.trim()??this.activeStep.content.trim():this.activeStep.content=this.activeStep.content.replace(/<\/think>[\s\S]*$/,"").trim(),this.activeStep.content)return this.finalizeStep(n);this.activeStep=null}return null}if(this.inThinkBlock&&this.activeStep)return this.activeStep.content+=n.text,null;if(!this.enablePatternDetection)return null;const e=a.split(`
2
2
  `);if(e.length<2)return null;const c=e.length-2;if(c<=this.lastProcessedLineIndex)return null;this.lastProcessedLineIndex=c;const s=e[c]?.trim()??"";if(!s)return null;const o=K(s);if(o){let i=null;return this.activeStep&&(i=this.finalizeStep(n)),this.activeStep={type:o.type,content:o.content,startTokenIndex:n.index,startTimestamp:n.timestamp},i}return this.activeStep&&(this.activeStep.content+=n.text),null}finalize(){if(this.activeStep){const n={id:u(),index:this.stepIndex++,type:this.activeStep.type,content:this.activeStep.content.trim(),startTokenIndex:this.activeStep.startTokenIndex,endTokenIndex:this.activeStep.startTokenIndex,timestamp:this.activeStep.startTimestamp,durationMs:Date.now()-this.activeStep.startTimestamp};if(this.activeStep=null,n.content)return this.completedSteps.push(n),n}return null}finalizeStep(n){const a={id:u(),index:this.stepIndex++,type:this.activeStep.type,content:this.activeStep.content.trim(),startTokenIndex:this.activeStep.startTokenIndex,endTokenIndex:n.index,timestamp:this.activeStep.startTimestamp,durationMs:n.timestamp-this.activeStep.startTimestamp};return this.completedSteps.push(a),this.activeStep=null,a}}const H=[{regex:/^(?:Step\s+\d+[:.]\s*)(.+)/i,type:"thought"},{regex:/^(?:Thought[:.]\s*)(.+)/i,type:"thought"},{regex:/^(?:Observation[:.]\s*)(.+)/i,type:"observation"},{regex:/^(?:Action[:.]\s*)(.+)/i,type:"action"},{regex:/^(?:Conclusion[:.]\s*)(.+)/i,type:"conclusion"},{regex:/^(?:Therefore[,:.]\s*)(.+)/i,type:"conclusion"}];function K(t){const n=t.trim();for(const{regex:a,type:e}of H){const c=n.match(a);if(c)return{type:e,content:c[1]??n}}return null}async function Z(t,n,a){const e=t.getReader(),c=new TextDecoder;let s="";try{for(;!a?.aborted;){const{done:o,value:i}=await e.read();if(o)break;s+=c.decode(i,{stream:!0});const l=s.split(`
3
3
  `);s=l.pop()??"";for(const p of l){const r=p.trim();if(!r||!r.startsWith("data: "))continue;const h=r.slice(6);if(h==="[DONE]")return;try{const f=JSON.parse(h);n(f)}catch{}}}}finally{e.releaseLock()}}async function W(t,n,a){const e=t.getReader(),c=new TextDecoder;let s="";try{for(;!a?.aborted;){const{done:o,value:i}=await e.read();if(o)break;s+=c.decode(i,{stream:!0});const l=s.split(`
4
- `);s=l.pop()??"";for(const p of l){const r=p.trim();if(r)try{const h=JSON.parse(r);n(h)}catch{}}}if(s.trim())try{const o=JSON.parse(s.trim());n(o)}catch{}}finally{e.releaseLock()}}async function I(t,n,a){const e=G(),c=R(),s=$(),o=E(),i=J(),l=Date.now();let p=0,r=l,h="";const f=[],d=O(),b=e.sessionById(t),y=b?d.isThinkingModel(b.model):!1,x=new V({patternDetection:y});i.initGraph(t),i.addNode(t,{id:u(),type:"start",label:"Generation Start",sessionId:t,stepIndex:0,state:{},timestamp:l}),e.updateSessionStatus(t,"streaming"),await W(n,g=>{const M=Date.now(),D=M-r;h+=g.response;const C=j(D,f),v={id:u(),index:p++,text:g.response,timestamp:M,confidence:C,cumulativeText:h,interTokenLatencyMs:D};c.pushToken(t,v),e.appendOutput(t,g.response),f.push(D),r=M;const k=x.processToken(v,h);if(o.setThinking(t,x.isThinking,x.thinkingContent),k&&(o.addStep(t,k),i.addNode(t,{id:u(),type:"decision",label:`${k.type}: ${k.content.slice(0,40)}...`,sessionId:t,stepIndex:k.index,state:{reasoning:k.type},timestamp:k.timestamp})),g.done){x.finalize(),o.setThinking(t,!1,""),g.done_reason&&e.setDoneReason(t,g.done_reason);const m=e.sessionById(t);if(m){const T=F(t,m.model,l,g,f);s.recordMetrics(t,T),e.finalizeSession(t,T),s.recalculateAggregate()}i.addNode(t,{id:u(),type:"output",label:"Generation Complete",sessionId:t,stepIndex:p,state:{tokenCount:p},timestamp:Date.now()})}},a)}async function tt(t,n,a){const e=G(),c=R(),s=$(),o=E(),i=q(),l=J(),p=Date.now();let r=0,h=p,f="",d="",b="",y=!1;const x=[],g=[],M=O(),D=e.sessionById(t),C=D?M.isThinkingModel(D.model):!1,v=new V({patternDetection:C});l.initGraph(t);const k=l.getGraph(t);return(!k||k.nodes.length===0)&&l.addNode(t,{id:u(),type:"start",label:"Chat Start",sessionId:t,stepIndex:0,state:{},timestamp:p}),e.updateSessionStatus(t,"streaming"),await W(n,m=>{const T=Date.now(),w=T-h,z=m.message.thinking;if(z){y=!0,d+=z,o.setThinking(t,!0,d),x.push(w),h=T;return}y&&d&&!m.done&&(o.setThinking(t,!1,d),d.trim()&&o.addStep(t,{id:u(),index:0,type:"thought",content:d.trim(),startTokenIndex:0,endTokenIndex:r,timestamp:T,durationMs:T-p}),b=d,d="");const N=m.message.content;f+=N;let P,L;m.logprobs&&m.logprobs.length>0?(L=m.logprobs[0].logprob,P=Math.exp(L)):P=j(w,x);const A={id:u(),index:r++,text:N,timestamp:T,confidence:P,logprob:L,cumulativeText:f,interTokenLatencyMs:w};if(c.pushToken(t,A),e.appendOutput(t,N),x.push(w),h=T,!y){const S=v.processToken(A,f);o.setThinking(t,v.isThinking,v.thinkingContent),S&&o.addStep(t,S)}if(m.message.tool_calls)for(const S of m.message.tool_calls){g.push(S);const _={id:u(),sessionId:t,index:i.getToolCalls(t).length,functionName:S.function.name,arguments:S.function.arguments,status:"pending",startedAt:T,tokenIndexStart:r};i.addToolCall(t,_),l.addNode(t,{id:u(),type:"tool_call",label:`Tool: ${S.function.name}`,sessionId:t,stepIndex:r,state:{tool:S.function.name,args:S.function.arguments},timestamp:T})}if(m.done&&(y&&d.trim()&&(b=d,o.addStep(t,{id:u(),index:0,type:"thought",content:d.trim(),startTokenIndex:0,endTokenIndex:r,timestamp:Date.now(),durationMs:Date.now()-p})),v.finalize(),o.setThinking(t,!1,y?b:""),m.done_reason&&e.setDoneReason(t,m.done_reason),g.length===0)){const S=e.sessionById(t);if(S){const _=F(t,S.model,p,m,x);s.recordMetrics(t,_),e.finalizeSession(t,_),s.recalculateAggregate()}l.addNode(t,{id:u(),type:"output",label:"Chat Complete",sessionId:t,stepIndex:r,state:{tokenCount:r},timestamp:Date.now()})}},a),{toolCalls:g}}function j(t,n){if(n.length<2)return .5;const a=[...n].sort((o,i)=>o-i),e=a[Math.floor(a.length/2)];if(e<=0)return .5;const c=t/e,s=Math.max(0,Math.min(1,1-(c-.5)/2));return Math.round(s*100)/100}export{I as a,tt as e,Z as r};
4
+ `);s=l.pop()??"";for(const p of l){const r=p.trim();if(r)try{const h=JSON.parse(r);n(h)}catch{}}}if(s.trim())try{const o=JSON.parse(s.trim());n(o)}catch{}}finally{e.releaseLock()}}async function I(t,n,a){const e=G(),c=R(),s=$(),o=E(),i=J(),l=Date.now();let p=0,r=l,h="";const f=[],d=z(),b=e.sessionById(t),y=b?d.isThinkingModel(b.model):!1,x=new V({patternDetection:y});i.initGraph(t),i.addNode(t,{id:u(),type:"start",label:"Generation Start",sessionId:t,stepIndex:0,state:{},timestamp:l}),e.updateSessionStatus(t,"streaming"),await W(n,g=>{const M=Date.now(),D=M-r;h+=g.response;const C=j(D,f),v={id:u(),index:p++,text:g.response,timestamp:M,confidence:C,cumulativeText:h,interTokenLatencyMs:D};c.pushToken(t,v),e.appendOutput(t,g.response),f.push(D),r=M;const k=x.processToken(v,h);if(o.setThinking(t,x.isThinking,x.thinkingContent),k&&(o.addStep(t,k),i.addNode(t,{id:u(),type:"decision",label:`${k.type}: ${k.content.slice(0,40)}...`,sessionId:t,stepIndex:k.index,state:{reasoning:k.type},timestamp:k.timestamp})),g.done){x.finalize(),o.setThinking(t,!1,""),g.done_reason&&e.setDoneReason(t,g.done_reason);const m=e.sessionById(t);if(m){const T=F(t,m.model,l,g,f);s.recordMetrics(t,T),e.finalizeSession(t,T),s.recalculateAggregate()}i.addNode(t,{id:u(),type:"output",label:"Generation Complete",sessionId:t,stepIndex:p,state:{tokenCount:p},timestamp:Date.now()})}},a)}async function tt(t,n,a){const e=G(),c=R(),s=$(),o=E(),i=q(),l=J(),p=Date.now();let r=0,h=p,f="",d="",b="",y=!1;const x=[],g=[],M=z(),D=e.sessionById(t),C=D?M.isThinkingModel(D.model):!1,v=new V({patternDetection:C});l.initGraph(t);const k=l.getGraph(t);return(!k||k.nodes.length===0)&&l.addNode(t,{id:u(),type:"start",label:"Chat Start",sessionId:t,stepIndex:0,state:{},timestamp:p}),e.updateSessionStatus(t,"streaming"),await W(n,m=>{const T=Date.now(),w=T-h,A=m.message.thinking;if(A){y=!0,d+=A,o.setThinking(t,!0,d),x.push(w),h=T;return}y&&d&&!m.done&&(o.setThinking(t,!1,d),d.trim()&&o.addStep(t,{id:u(),index:0,type:"thought",content:d.trim(),startTokenIndex:0,endTokenIndex:r,timestamp:T,durationMs:T-p}),b=d,d="");const N=m.message.content;f+=N;let P,L;m.logprobs&&m.logprobs.length>0?(L=m.logprobs[0].logprob,P=Math.exp(L)):P=j(w,x);const O={id:u(),index:r++,text:N,timestamp:T,confidence:P,logprob:L,cumulativeText:f,interTokenLatencyMs:w};if(c.pushToken(t,O),e.appendOutput(t,N),x.push(w),h=T,!y){const S=v.processToken(O,f);o.setThinking(t,v.isThinking,v.thinkingContent),S&&o.addStep(t,S)}if(m.message.tool_calls)for(const S of m.message.tool_calls){g.push(S);const _={id:u(),sessionId:t,index:i.getToolCalls(t).length,functionName:S.function.name,arguments:S.function.arguments,status:"pending",startedAt:T,tokenIndexStart:r};i.addToolCall(t,_),l.addNode(t,{id:u(),type:"tool_call",label:`Tool: ${S.function.name}`,sessionId:t,stepIndex:r,state:{tool:S.function.name,args:S.function.arguments},timestamp:T})}if(m.done&&(y&&d.trim()&&(b=d,o.addStep(t,{id:u(),index:0,type:"thought",content:d.trim(),startTokenIndex:0,endTokenIndex:r,timestamp:Date.now(),durationMs:Date.now()-p})),v.finalize(),o.setThinking(t,!1,y?b:""),m.done_reason&&e.setDoneReason(t,m.done_reason),g.length===0)){const S=e.sessionById(t);if(S){const _=F(t,S.model,p,m,x);s.recordMetrics(t,_),e.finalizeSession(t,_),s.recalculateAggregate()}l.addNode(t,{id:u(),type:"output",label:"Chat Complete",sessionId:t,stepIndex:r,state:{tokenCount:r},timestamp:Date.now()})}},a),{toolCalls:g}}function j(t,n){if(n.length<2)return .5;const a=[...n].sort((o,i)=>o-i),e=a[Math.floor(a.length/2)];if(e<=0)return .5;const c=t/e,s=Math.max(0,Math.min(1,1-(c-.5)/2));return Math.round(s*100)/100}export{I as a,tt as e,Z as r};
@@ -1 +1 @@
1
- import{d as k,r as f,c as i,n as x}from"./index-BqB3FY2M.js";function m(){return{mode:"code",blocks:[],code:""}}const v="llmxray-workshop-tools",D="llmxray-tool-definitions",_=k("tool-workshop",()=>{const n=f({}),a=f(null);function p(){try{const e=localStorage.getItem(v);if(e){const t=JSON.parse(e),o={};for(const l of t)o[l.id]=l;n.value=o;return}g()}catch{}}function g(){try{const e=localStorage.getItem(D);if(!e)return;const t=JSON.parse(e),o={};for(const l of t){const d={id:l.id,definition:l.definition,implementation:m(),enabled:l.enabled,category:"custom",createdAt:l.createdAt,updatedAt:l.updatedAt,lastTestedAt:null,testResult:null};o[d.id]=d}n.value=o,c()}catch{}}function c(){const e=Object.values(n.value);localStorage.setItem(v,JSON.stringify(e))}p();const u=i(()=>Object.values(n.value)),r=i(()=>u.value.filter(e=>e.enabled)),y=i(()=>r.value.map(e=>e.definition)),b=i(()=>{const e={};for(const t of u.value){const o=t.category||"custom";e[o]||(e[o]=[]),e[o].push(t)}return e}),S=i(()=>a.value?n.value[a.value]??null:null);function s(e){const t=x(),o=Date.now(),l={id:t,definition:e.definition,implementation:e.implementation??m(),enabled:e.enabled??!1,category:e.category??"custom",createdAt:o,updatedAt:o,lastTestedAt:null,testResult:null};return n.value[t]=l,c(),t}function O(e,t){const o=n.value[e];o&&(n.value[e]={...o,...t,updatedAt:Date.now()},c())}function T(e){delete n.value[e],a.value===e&&(a.value=null),c()}function A(){n.value={},a.value=null,c()}function w(e){const t=n.value[e];if(!t)return null;const o=JSON.parse(JSON.stringify(t.definition));return o.function.name=`${o.function.name}_copy`,s({definition:o,implementation:JSON.parse(JSON.stringify(t.implementation)),category:t.category})}function N(e){const t=n.value[e];t&&(n.value[e]={...t,enabled:!t.enabled},c())}function J(){for(const e of Object.keys(n.value))n.value[e]={...n.value[e],enabled:!1};c()}function h(e){a.value=e}function E(e){return n.value[e]}function I(e){return u.value.find(t=>t.definition.function.name===e)}return{tools:n,selectedToolId:a,allTools:u,enabledTools:r,enabledDefinitions:y,toolsByCategory:b,selectedTool:S,addTool:s,updateTool:O,removeTool:T,clearAll:A,duplicateTool:w,toggleEnabled:N,disableAll:J,selectTool:h,getById:E,findByFunctionName:I}});export{_ as u};
1
+ import{d as k,r as f,a as u,n as x}from"./index-CgqXFXWk.js";function m(){return{mode:"code",blocks:[],code:""}}const v="llmxray-workshop-tools",D="llmxray-tool-definitions",_=k("tool-workshop",()=>{const n=f({}),a=f(null);function p(){try{const e=localStorage.getItem(v);if(e){const t=JSON.parse(e),o={};for(const l of t)o[l.id]=l;n.value=o;return}g()}catch{}}function g(){try{const e=localStorage.getItem(D);if(!e)return;const t=JSON.parse(e),o={};for(const l of t){const d={id:l.id,definition:l.definition,implementation:m(),enabled:l.enabled,category:"custom",createdAt:l.createdAt,updatedAt:l.updatedAt,lastTestedAt:null,testResult:null};o[d.id]=d}n.value=o,i()}catch{}}function i(){const e=Object.values(n.value);localStorage.setItem(v,JSON.stringify(e))}p();const c=u(()=>Object.values(n.value)),r=u(()=>c.value.filter(e=>e.enabled)),y=u(()=>r.value.map(e=>e.definition)),b=u(()=>{const e={};for(const t of c.value){const o=t.category||"custom";e[o]||(e[o]=[]),e[o].push(t)}return e}),S=u(()=>a.value?n.value[a.value]??null:null);function s(e){const t=x(),o=Date.now(),l={id:t,definition:e.definition,implementation:e.implementation??m(),enabled:e.enabled??!1,category:e.category??"custom",createdAt:o,updatedAt:o,lastTestedAt:null,testResult:null};return n.value[t]=l,i(),t}function O(e,t){const o=n.value[e];o&&(n.value[e]={...o,...t,updatedAt:Date.now()},i())}function T(e){delete n.value[e],a.value===e&&(a.value=null),i()}function A(){n.value={},a.value=null,i()}function w(e){const t=n.value[e];if(!t)return null;const o=JSON.parse(JSON.stringify(t.definition));return o.function.name=`${o.function.name}_copy`,s({definition:o,implementation:JSON.parse(JSON.stringify(t.implementation)),category:t.category})}function N(e){const t=n.value[e];t&&(n.value[e]={...t,enabled:!t.enabled},i())}function J(){for(const e of Object.keys(n.value))n.value[e]={...n.value[e],enabled:!1};i()}function h(e){a.value=e}function E(e){return n.value[e]}function I(e){return c.value.find(t=>t.definition.function.name===e)}return{tools:n,selectedToolId:a,allTools:c,enabledTools:r,enabledDefinitions:y,toolsByCategory:b,selectedTool:S,addTool:s,updateTool:O,removeTool:T,clearAll:A,duplicateTool:w,toggleEnabled:N,disableAll:J,selectTool:h,getById:E,findByFunctionName:I}});export{_ as u};
@@ -1 +1 @@
1
- import{d as m,r as f,c as S,n as M,H as x}from"./index-BqB3FY2M.js";const B=m("sessions",()=>{const n=f(new Map),u=f(null),l=f(new Map),v=S(()=>u.value?n.value.get(u.value)??null:null),d=S(()=>[...n.value.values()].sort((e,s)=>s.createdAt-e.createdAt));function o(e){return n.value.get(e)}function a(e){const s=M(),t={id:s,mode:e.mode,model:e.model,status:"idle",createdAt:Date.now(),prompt:e.prompt,messages:e.messages??[],options:e.options??{},outputText:"",metrics:null};return n.value.set(s,t),s}function i(e,s){l.value.set(e,s)}function c(e,s){const t=n.value.get(e);t&&(t.status=s)}function r(e,s){const t=n.value.get(e);t&&(t.outputText+=s)}function g(e,s){const t=n.value.get(e);if(t){t.status="completed",t.metrics=s;const p=l.value.get(e);p&&x.saveSession(t,p).catch(console.error)}}function C(e,s){const t=n.value.get(e);t&&(t.status="error",t.error=s)}function T(e){const s=n.value.get(e);s&&(s.status="cancelled")}function w(e,s){const t=n.value.get(e);t&&(t.doneReason=s)}function A(e){u.value=e}return{sessions:n,activeSessionId:u,activeSession:v,recentSessions:d,sessionConversationMap:l,sessionById:o,createSession:a,linkSessionToConversation:i,updateSessionStatus:c,appendOutput:r,finalizeSession:g,setSessionError:C,cancelSession:T,setDoneReason:w,setActiveSession:A}}),D=m("toolcalls",()=>{const n=f(new Map);function u(o){return n.value.get(o)??[]}function l(o){return u(o).filter(a=>a.status==="pending")}function v(o,a){let i=n.value.get(o);i||(i=[],n.value.set(o,i)),i.push(a)}function d(o,a,i){const c=n.value.get(o);if(!c)return;const r=c.find(g=>g.id===a);r&&Object.assign(r,i)}return{callsBySession:n,getToolCalls:u,getPendingCalls:l,addToolCall:v,updateToolCall:d}});export{D as a,B as u};
1
+ import{d as m,r as f,a as S,n as M,J as x}from"./index-CgqXFXWk.js";const B=m("sessions",()=>{const n=f(new Map),u=f(null),l=f(new Map),v=S(()=>u.value?n.value.get(u.value)??null:null),d=S(()=>[...n.value.values()].sort((e,s)=>s.createdAt-e.createdAt));function o(e){return n.value.get(e)}function a(e){const s=M(),t={id:s,mode:e.mode,model:e.model,status:"idle",createdAt:Date.now(),prompt:e.prompt,messages:e.messages??[],options:e.options??{},outputText:"",metrics:null};return n.value.set(s,t),s}function i(e,s){l.value.set(e,s)}function c(e,s){const t=n.value.get(e);t&&(t.status=s)}function r(e,s){const t=n.value.get(e);t&&(t.outputText+=s)}function g(e,s){const t=n.value.get(e);if(t){t.status="completed",t.metrics=s;const p=l.value.get(e);p&&x.saveSession(t,p).catch(console.error)}}function C(e,s){const t=n.value.get(e);t&&(t.status="error",t.error=s)}function T(e){const s=n.value.get(e);s&&(s.status="cancelled")}function w(e,s){const t=n.value.get(e);t&&(t.doneReason=s)}function A(e){u.value=e}return{sessions:n,activeSessionId:u,activeSession:v,recentSessions:d,sessionConversationMap:l,sessionById:o,createSession:a,linkSessionToConversation:i,updateSessionStatus:c,appendOutput:r,finalizeSession:g,setSessionError:C,cancelSession:T,setDoneReason:w,setActiveSession:A}}),D=m("toolcalls",()=>{const n=f(new Map);function u(o){return n.value.get(o)??[]}function l(o){return u(o).filter(a=>a.status==="pending")}function v(o,a){let i=n.value.get(o);i||(i=[],n.value.set(o,i)),i.push(a)}function d(o,a,i){const c=n.value.get(o);if(!c)return;const r=c.find(g=>g.id===a);r&&Object.assign(r,i)}return{callsBySession:n,getToolCalls:u,getPendingCalls:l,addToolCall:v,updateToolCall:d}});export{D as a,B as u};
@@ -0,0 +1 @@
1
+ import{c as a}from"./index-CgqXFXWk.js";const e=a("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);export{e as T};
package/dist/index.html CHANGED
@@ -5,8 +5,8 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>LLMxRay — Local LLM Observatory</title>
8
- <script type="module" crossorigin src="/assets/index-BqB3FY2M.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-C0qd34Zo.css">
8
+ <script type="module" crossorigin src="/assets/index-CgqXFXWk.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-DL68effo.css">
10
10
  </head>
11
11
  <body>
12
12
  <script>
@@ -0,0 +1,150 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="640" viewBox="0 0 1280 640">
2
+ <defs>
3
+ <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
4
+ <stop offset="0%" stop-color="#0f0a2e"/>
5
+ <stop offset="50%" stop-color="#1e1b4b"/>
6
+ <stop offset="100%" stop-color="#0f172a"/>
7
+ </linearGradient>
8
+ <linearGradient id="pulse" x1="0" y1="0" x2="1" y2="0">
9
+ <stop offset="0%" stop-color="#7c3aed" stop-opacity="0.3"/>
10
+ <stop offset="30%" stop-color="#a855f7"/>
11
+ <stop offset="70%" stop-color="#c084fc"/>
12
+ <stop offset="100%" stop-color="#e9d5ff"/>
13
+ </linearGradient>
14
+ <linearGradient id="chipStroke" x1="0" y1="0" x2="1" y2="1">
15
+ <stop offset="0%" stop-color="#a855f7"/>
16
+ <stop offset="100%" stop-color="#6d28d9"/>
17
+ </linearGradient>
18
+ <filter id="pulseGlow">
19
+ <feGaussianBlur in="SourceGraphic" stdDeviation="3"/>
20
+ </filter>
21
+ <filter id="textGlow">
22
+ <feGaussianBlur in="SourceGraphic" stdDeviation="8"/>
23
+ </filter>
24
+ </defs>
25
+
26
+ <!-- Background -->
27
+ <rect width="1280" height="640" fill="url(#bg)"/>
28
+
29
+ <!-- Subtle grid pattern -->
30
+ <g stroke="#a855f7" stroke-width="0.5" opacity="0.04">
31
+ <line x1="0" y1="80" x2="1280" y2="80"/><line x1="0" y1="160" x2="1280" y2="160"/>
32
+ <line x1="0" y1="240" x2="1280" y2="240"/><line x1="0" y1="320" x2="1280" y2="320"/>
33
+ <line x1="0" y1="400" x2="1280" y2="400"/><line x1="0" y1="480" x2="1280" y2="480"/>
34
+ <line x1="0" y1="560" x2="1280" y2="560"/>
35
+ <line x1="160" y1="0" x2="160" y2="640"/><line x1="320" y1="0" x2="320" y2="640"/>
36
+ <line x1="480" y1="0" x2="480" y2="640"/><line x1="640" y1="0" x2="640" y2="640"/>
37
+ <line x1="800" y1="0" x2="800" y2="640"/><line x1="960" y1="0" x2="960" y2="640"/>
38
+ <line x1="1120" y1="0" x2="1120" y2="640"/>
39
+ </g>
40
+
41
+ <!-- Large ambient glow behind icon -->
42
+ <circle cx="640" cy="240" r="200" fill="#a855f7" opacity="0.06"/>
43
+ <circle cx="640" cy="240" r="120" fill="#7c3aed" opacity="0.08"/>
44
+
45
+ <!-- === FAVICON ICON (centered, scaled up) === -->
46
+ <g transform="translate(576, 150) scale(1.0)">
47
+ <!-- Chip outline -->
48
+ <rect x="34" y="34" width="60" height="60" rx="6" fill="none" stroke="url(#chipStroke)" stroke-width="2.5" opacity="0.55"/>
49
+
50
+ <!-- Chip pins — top -->
51
+ <g stroke="#8b5cf6" stroke-width="2.5" stroke-linecap="round" opacity="0.35">
52
+ <line x1="50" y1="22" x2="50" y2="34"/>
53
+ <line x1="64" y1="18" x2="64" y2="34"/>
54
+ <line x1="78" y1="22" x2="78" y2="34"/>
55
+ </g>
56
+ <!-- Chip pins — bottom -->
57
+ <g stroke="#8b5cf6" stroke-width="2.5" stroke-linecap="round" opacity="0.35">
58
+ <line x1="50" y1="94" x2="50" y2="106"/>
59
+ <line x1="64" y1="94" x2="64" y2="110"/>
60
+ <line x1="78" y1="94" x2="78" y2="106"/>
61
+ </g>
62
+ <!-- Chip pins — left -->
63
+ <g stroke="#8b5cf6" stroke-width="2.5" stroke-linecap="round" opacity="0.35">
64
+ <line x1="22" y1="50" x2="34" y2="50"/>
65
+ <line x1="18" y1="64" x2="34" y2="64"/>
66
+ <line x1="22" y1="78" x2="34" y2="78"/>
67
+ </g>
68
+ <!-- Chip pins — right -->
69
+ <g stroke="#8b5cf6" stroke-width="2.5" stroke-linecap="round" opacity="0.35">
70
+ <line x1="94" y1="50" x2="106" y2="50"/>
71
+ <line x1="94" y1="64" x2="110" y2="64"/>
72
+ <line x1="94" y1="78" x2="106" y2="78"/>
73
+ </g>
74
+
75
+ <!-- Grid inside chip -->
76
+ <g stroke="#a855f7" stroke-width="0.5" opacity="0.08">
77
+ <line x1="38" y1="44" x2="90" y2="44"/><line x1="38" y1="54" x2="90" y2="54"/>
78
+ <line x1="38" y1="74" x2="90" y2="74"/><line x1="38" y1="84" x2="90" y2="84"/>
79
+ <line x1="48" y1="36" x2="48" y2="92"/><line x1="58" y1="36" x2="58" y2="92"/>
80
+ <line x1="68" y1="36" x2="68" y2="92"/><line x1="78" y1="36" x2="78" y2="92"/>
81
+ </g>
82
+
83
+ <!-- Circuit traces -->
84
+ <g stroke="#c084fc" stroke-width="1" opacity="0.15" stroke-linecap="round">
85
+ <polyline points="44,44 56,44 56,52" fill="none"/>
86
+ <polyline points="72,44 84,44 84,52" fill="none"/>
87
+ <polyline points="44,84 56,84 56,76" fill="none"/>
88
+ <polyline points="72,84 84,84 84,76" fill="none"/>
89
+ </g>
90
+
91
+ <!-- Pulse glow -->
92
+ <polyline
93
+ points="12,64 32,64 40,64 47,48 52,76 57,38 63,82 69,42 75,78 81,50 88,64 96,64 116,64"
94
+ fill="none" stroke="#a855f7" stroke-width="6"
95
+ stroke-linecap="round" stroke-linejoin="round"
96
+ opacity="0.15" filter="url(#pulseGlow)"
97
+ />
98
+ <!-- Main pulse -->
99
+ <polyline
100
+ points="12,64 32,64 40,64 47,48 52,76 57,38 63,82 69,42 75,78 81,50 88,64 96,64 116,64"
101
+ fill="none" stroke="url(#pulse)" stroke-width="3"
102
+ stroke-linecap="round" stroke-linejoin="round"
103
+ />
104
+ <!-- Pulse dot -->
105
+ <circle cx="116" cy="64" r="4" fill="#c084fc" opacity="0.4"/>
106
+ <circle cx="116" cy="64" r="2.5" fill="#e9d5ff"/>
107
+ </g>
108
+
109
+ <!-- === PROJECT NAME === -->
110
+ <!-- Glow behind text -->
111
+ <text x="640" y="370" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="72" font-weight="800" fill="#a855f7" opacity="0.15" filter="url(#textGlow)">LLMxRay</text>
112
+ <!-- Main text -->
113
+ <text x="640" y="370" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="72" font-weight="800">
114
+ <tspan fill="#f1f5f9">LLM</tspan><tspan fill="#a855f7" font-family="'Courier New', monospace">xR</tspan><tspan fill="#f1f5f9">ay</tspan>
115
+ </text>
116
+
117
+ <!-- === TAGLINE === -->
118
+ <text x="640" y="420" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="24" fill="#94a3b8" font-weight="400">
119
+ Local LLM Observatory
120
+ </text>
121
+
122
+ <!-- === SUBTITLE === -->
123
+ <text x="640" y="470" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="18" fill="#64748b" font-weight="300">
124
+ See what your AI is actually doing — token by token, layer by layer.
125
+ </text>
126
+
127
+ <!-- === BOTTOM PILLS === -->
128
+ <!-- Vue pill -->
129
+ <rect x="370" y="530" width="80" height="28" rx="14" fill="#42b883" opacity="0.15"/>
130
+ <text x="410" y="549" text-anchor="middle" font-family="system-ui, sans-serif" font-size="13" fill="#42b883" font-weight="500">Vue 3</text>
131
+
132
+ <!-- TypeScript pill -->
133
+ <rect x="470" y="530" width="110" height="28" rx="14" fill="#3178c6" opacity="0.15"/>
134
+ <text x="525" y="549" text-anchor="middle" font-family="system-ui, sans-serif" font-size="13" fill="#3178c6" font-weight="500">TypeScript</text>
135
+
136
+ <!-- Ollama pill -->
137
+ <rect x="600" y="530" width="85" height="28" rx="14" fill="#f1f5f9" opacity="0.1"/>
138
+ <text x="642" y="549" text-anchor="middle" font-family="system-ui, sans-serif" font-size="13" fill="#94a3b8" font-weight="500">Ollama</text>
139
+
140
+ <!-- Free pill -->
141
+ <rect x="705" y="530" width="65" height="28" rx="14" fill="#4ade80" opacity="0.15"/>
142
+ <text x="737" y="549" text-anchor="middle" font-family="system-ui, sans-serif" font-size="13" fill="#4ade80" font-weight="500">Free</text>
143
+
144
+ <!-- Local pill -->
145
+ <rect x="790" y="530" width="70" height="28" rx="14" fill="#c084fc" opacity="0.15"/>
146
+ <text x="825" y="549" text-anchor="middle" font-family="system-ui, sans-serif" font-size="13" fill="#c084fc" font-weight="500">Local</text>
147
+
148
+ <!-- Subtle border -->
149
+ <rect x="0" y="0" width="1280" height="640" rx="0" fill="none" stroke="#a855f7" stroke-width="1" opacity="0.1"/>
150
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "llmxray",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Local LLM Observatory — See what your AI is actually doing, token by token.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -37,7 +37,9 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "express": "^5.1.0",
40
- "http-proxy-middleware": "^3.0.3"
40
+ "http-proxy-middleware": "^3.0.3",
41
+ "lucide-vue-next": "^0.577.0",
42
+ "vue-i18n": "^10.0.8"
41
43
  },
42
44
  "devDependencies": {
43
45
  "@babel/parser": "^7.29.0",
@@ -46,6 +48,7 @@
46
48
  "@codemirror/theme-one-dark": "^6.1.3",
47
49
  "@fontsource/fira-code": "^5.2.7",
48
50
  "@fontsource/inter": "^5.2.8",
51
+ "@intlify/unplugin-vue-i18n": "^11.0.7",
49
52
  "@playwright/test": "^1.58.2",
50
53
  "@tailwindcss/vite": "^4.2.1",
51
54
  "@types/d3": "^7.4.3",
@@ -1 +0,0 @@
1
- import{d as H,r as h,c as I,a as D,e as p,f as e,t as m,m as R,u,i as $,k as Q,F as A,j as S,b as c,g as w,h as j,B as E,C as L,p as N,v as X,M as V,A as Y,s as Z,ab as _}from"./index-BqB3FY2M.js";import{canvasAiDB as P}from"./canvas-ai-db-BolM-_G7.js";import{b as ee,d as z}from"./format-BqVZ9rwM.js";import{_ as te}from"./StorageGauge.vue_vue_type_style_index_0_lang-hO4dId5t.js";const se=H("training",()=>{const s=h([]),l=h(!1),g=h(new Set),o=h(null),f=h({phase:null,model:null,accepted:null,toolName:null,tag:null,search:"",sortBy:"timestamp",sortDir:"desc"}),n=I(()=>{let r=[...s.value];const i=f.value;if(i.phase&&(r=r.filter(x=>x.phase===i.phase)),i.model&&(r=r.filter(x=>x.model===i.model)),i.accepted!==null&&(r=r.filter(x=>x.accepted===i.accepted)),i.toolName&&(r=r.filter(x=>x.toolName===i.toolName)),i.tag&&(r=r.filter(x=>x.tags?.includes(i.tag)??!1)),i.search){const x=i.search.toLowerCase();r=r.filter(v=>v.userPrompt.toLowerCase().includes(x)||v.response.toLowerCase().includes(x)||v.toolName.toLowerCase().includes(x))}return r.sort((x,v)=>{let k=0;return i.sortBy==="timestamp"?k=x.timestamp-v.timestamp:i.sortBy==="phase"?k=x.phase.localeCompare(v.phase):i.sortBy==="model"&&(k=x.model.localeCompare(v.model)),i.sortDir==="desc"?-k:k}),r}),d=I(()=>{const r=s.value,i=new Map,x=new Map;let v=0,k=0;for(const T of r)T.accepted&&v++,i.set(T.phase,(i.get(T.phase)??0)+1),x.set(T.model,(x.get(T.model)??0)+1),k+=T.systemPrompt.length+T.userPrompt.length+T.response.length;return{total:r.length,accepted:v,rejected:r.length-v,phaseBreakdown:i,modelBreakdown:x,estimatedBytes:k*2}}),t=I(()=>{const r=new Set;for(const i of s.value)for(const x of i.tags??[])r.add(x);return[...r].sort()}),a=I(()=>[...new Set(s.value.map(r=>r.model))].sort()),b=I(()=>[...new Set(s.value.map(r=>r.toolName))].sort());async function C(){l.value=!0;try{s.value=await P.getAllPairs()}catch(r){console.error("Failed to load training pairs:",r)}finally{l.value=!1}}async function M(r,i){await P.updatePairResponse(r,i);const x=s.value.find(v=>v.id===r);x&&(x.response=i)}async function U(r,i){await P.updatePairTags(r,i);const x=s.value.find(v=>v.id===r);x&&(x.tags=i)}async function y(r){const i=s.value.find(v=>v.id===r);if(!i)return;const x=!i.accepted;await P.updateAccepted(r,x),i.accepted=x}async function B(r){await P.deletePairs(r);const i=new Set(r);s.value=s.value.filter(x=>!i.has(x.id));for(const x of r)g.value.delete(x);o.value&&i.has(o.value)&&(o.value=null)}async function F(r,i){for(const x of r){await P.updateAccepted(x,i);const v=s.value.find(k=>k.id===x);v&&(v.accepted=i)}}async function K(r,i){for(const x of r){const v=s.value.find(T=>T.id===x);if(!v)continue;const k=[...v.tags??[]];k.includes(i)||(k.push(i),await P.updatePairTags(x,k),v.tags=k)}}function J(r){P.exportSelectedAsJsonl(r)}function O(r){const i=new Set(g.value);i.has(r)?i.delete(r):i.add(r),g.value=i}function W(){g.value=new Set(n.value.map(r=>r.id))}function q(){g.value=new Set}function G(r){o.value=o.value===r?null:r}return{pairs:s,loading:l,selectedIds:g,expandedId:o,filters:f,filteredPairs:n,stats:d,allTags:t,allModels:a,allToolNames:b,loadPairs:C,updateResponse:M,updateTags:U,toggleAccepted:y,deletePairs:B,bulkSetAccepted:F,bulkAddTag:K,exportSelected:J,toggleSelection:O,selectAll:W,deselectAll:q,setExpanded:G}}),oe={class:"grid grid-cols-2 gap-3 lg:grid-cols-4"},ae={class:"rounded-lg border border-border-default bg-surface-raised p-3 space-y-2"},le={class:"text-xl font-bold text-text-primary"},ne={class:"rounded-lg border border-border-default bg-surface-raised p-3 space-y-2"},re={class:"text-xl font-bold text-text-primary"},de={class:"flex items-center gap-2 text-[10px]"},ie={class:"text-success"},ue={class:"text-error"},ce={key:0,class:"h-1.5 rounded-full bg-surface-overlay overflow-hidden"},xe={class:"rounded-lg border border-border-default bg-surface-raised p-3 space-y-2"},pe={class:"flex flex-wrap gap-1.5"},me={class:"rounded-lg border border-border-default bg-surface-raised p-3 space-y-2"},ge={key:0,class:"space-y-1"},fe={class:"text-text-secondary truncate"},ve={class:"text-text-muted shrink-0"},be={key:1,class:"text-[10px] text-text-muted italic"},ye=D({__name:"TrainingDashboard",props:{stats:{}},setup(s){const l=s,g=I(()=>["draft","insights","automap","fix"].map(t=>({key:t,count:l.stats.phaseBreakdown.get(t)??0}))),o=I(()=>[...l.stats.modelBreakdown.entries()].sort((d,t)=>t[1]-d[1]).slice(0,3)),f=I(()=>l.stats.total>0?Math.round(l.stats.accepted/l.stats.total*100):0),n={draft:"bg-blue-500/20 text-blue-400",insights:"bg-amber-500/20 text-amber-400",automap:"bg-emerald-500/20 text-emerald-400",fix:"bg-rose-500/20 text-rose-400"};return(d,t)=>(c(),p("div",oe,[e("div",ae,[t[0]||(t[0]=e("p",{class:"text-[10px] text-text-muted uppercase tracking-wider"},"Training Pairs",-1)),e("p",le,m(s.stats.total),1),s.stats.estimatedBytes>0?(c(),R(te,{key:0,used:s.stats.estimatedBytes,total:s.stats.estimatedBytes*5,compact:"",label:`~${u(ee)(s.stats.estimatedBytes)} dataset`},null,8,["used","total","label"])):$("",!0)]),e("div",ne,[t[2]||(t[2]=e("p",{class:"text-[10px] text-text-muted uppercase tracking-wider"},"Acceptance Rate",-1)),e("p",re,m(f.value)+"%",1),e("div",de,[e("span",ie,m(s.stats.accepted)+" accepted",1),t[1]||(t[1]=e("span",{class:"text-text-muted"},"/",-1)),e("span",ue,m(s.stats.rejected)+" rejected",1)]),s.stats.total>0?(c(),p("div",ce,[e("div",{class:"h-full rounded-full bg-success transition-all duration-500",style:Q({width:`${f.value}%`})},null,4)])):$("",!0)]),e("div",xe,[t[3]||(t[3]=e("p",{class:"text-[10px] text-text-muted uppercase tracking-wider"},"By Phase",-1)),e("div",pe,[(c(!0),p(A,null,S(g.value,a=>(c(),p("span",{key:a.key,class:w(["rounded-full px-2 py-0.5 text-[10px] font-medium",n[a.key]])},m(a.key)+" "+m(a.count),3))),128))])]),e("div",me,[t[4]||(t[4]=e("p",{class:"text-[10px] text-text-muted uppercase tracking-wider"},"Top Models",-1)),o.value.length>0?(c(),p("div",ge,[(c(!0),p(A,null,S(o.value,([a,b])=>(c(),p("div",{key:a,class:"flex items-center justify-between text-[10px]"},[e("span",fe,m(a),1),e("span",ve,m(b),1)]))),128))])):(c(),p("p",be,"No data"))])]))}}),ke={class:"flex flex-wrap items-center gap-2"},he=["value"],we=["value"],$e=["value"],Ce=["value"],Te=["value"],Ae=["value"],Se={class:"flex rounded-lg border border-border-default overflow-hidden"},Pe=["value"],Ie=["value"],Be=["value"],De=["value"],Ne=["title"],je=D({__name:"TrainingFilters",props:{filters:{},models:{},toolNames:{},tags:{}},emits:["update:filters"],setup(s,{emit:l}){const g=s,o=l;function f(d){o("update:filters",{...g.filters,...d})}const n=[{value:"",label:"All phases"},{value:"draft",label:"Draft"},{value:"insights",label:"Insights"},{value:"automap",label:"Auto-map"},{value:"fix",label:"Fix"}];return(d,t)=>(c(),p("div",ke,[e("select",{value:s.filters.phase??"",class:"rounded-lg border border-border-default bg-surface px-2.5 py-1.5 text-xs text-text-primary outline-none focus:border-accent",onChange:t[0]||(t[0]=a=>f({phase:a.target.value||null}))},[(c(),p(A,null,S(n,a=>e("option",{key:a.label,value:a.value},m(a.label),9,we)),64))],40,he),e("select",{value:s.filters.model??"",class:"rounded-lg border border-border-default bg-surface px-2.5 py-1.5 text-xs text-text-primary outline-none focus:border-accent",onChange:t[1]||(t[1]=a=>f({model:a.target.value||null}))},[t[10]||(t[10]=e("option",{value:""},"All models",-1)),(c(!0),p(A,null,S(s.models,a=>(c(),p("option",{key:a,value:a},m(a),9,Ce))),128))],40,$e),e("select",{value:s.filters.toolName??"",class:"rounded-lg border border-border-default bg-surface px-2.5 py-1.5 text-xs text-text-primary outline-none focus:border-accent",onChange:t[2]||(t[2]=a=>f({toolName:a.target.value||null}))},[t[11]||(t[11]=e("option",{value:""},"All tools",-1)),(c(!0),p(A,null,S(s.toolNames,a=>(c(),p("option",{key:a,value:a},m(a),9,Ae))),128))],40,Te),e("div",Se,[e("button",{class:w(["px-2.5 py-1.5 text-[10px] transition-colors",s.filters.accepted===null?"bg-accent/10 text-accent":"bg-surface text-text-muted hover:text-text-primary"]),onClick:t[3]||(t[3]=a=>f({accepted:null}))},"All",2),e("button",{class:w(["px-2.5 py-1.5 text-[10px] transition-colors border-l border-border-default",s.filters.accepted===!0?"bg-success/10 text-success":"bg-surface text-text-muted hover:text-text-primary"]),onClick:t[4]||(t[4]=a=>f({accepted:!0}))},"Accepted",2),e("button",{class:w(["px-2.5 py-1.5 text-[10px] transition-colors border-l border-border-default",s.filters.accepted===!1?"bg-error/10 text-error":"bg-surface text-text-muted hover:text-text-primary"]),onClick:t[5]||(t[5]=a=>f({accepted:!1}))},"Rejected",2)]),s.tags.length>0?(c(),p("select",{key:0,value:s.filters.tag??"",class:"rounded-lg border border-border-default bg-surface px-2.5 py-1.5 text-xs text-text-primary outline-none focus:border-accent",onChange:t[6]||(t[6]=a=>f({tag:a.target.value||null}))},[t[12]||(t[12]=e("option",{value:""},"All tags",-1)),(c(!0),p(A,null,S(s.tags,a=>(c(),p("option",{key:a,value:a},m(a),9,Ie))),128))],40,Pe)):$("",!0),e("input",{value:s.filters.search,type:"text",placeholder:"Search prompts...",class:"flex-1 min-w-[150px] rounded-lg border border-border-default bg-surface px-2.5 py-1.5 text-xs text-text-primary placeholder-text-muted outline-none focus:border-accent",onInput:t[7]||(t[7]=a=>f({search:a.target.value}))},null,40,Be),e("select",{value:s.filters.sortBy,class:"rounded-lg border border-border-default bg-surface px-2.5 py-1.5 text-xs text-text-primary outline-none focus:border-accent",onChange:t[8]||(t[8]=a=>f({sortBy:a.target.value}))},[...t[13]||(t[13]=[e("option",{value:"timestamp"},"Sort by time",-1),e("option",{value:"phase"},"Sort by phase",-1),e("option",{value:"model"},"Sort by model",-1)])],40,De),e("button",{class:"rounded-lg border border-border-default bg-surface px-2 py-1.5 text-xs text-text-muted hover:text-text-primary transition-colors",title:s.filters.sortDir==="desc"?"Newest first":"Oldest first",onClick:t[9]||(t[9]=a=>f({sortDir:s.filters.sortDir==="desc"?"asc":"desc"}))},m(s.filters.sortDir==="desc"?"↓":"↑"),9,Ne)]))}}),Me={class:"flex flex-wrap items-center gap-1.5"},Re=["onClick"],Ee=D({__name:"TrainingTagEditor",props:{tags:{},allTags:{}},emits:["update:tags"],setup(s,{emit:l}){const g=l,o=h("");function f(d,t){if(d.key==="Enter"||d.key===","){d.preventDefault();const a=o.value.trim().toLowerCase();a&&!t.includes(a)&&g("update:tags",[...t,a]),o.value=""}}function n(d,t){g("update:tags",d.filter(a=>a!==t))}return(d,t)=>(c(),p("div",Me,[(c(!0),p(A,null,S(s.tags,a=>(c(),p("span",{key:a,class:"flex items-center gap-1 rounded-full bg-accent/10 px-2 py-0.5 text-[10px] text-accent"},[j(m(a)+" ",1),e("button",{class:"text-accent/60 hover:text-accent transition-colors",onClick:b=>n(s.tags,a)},[...t[2]||(t[2]=[e("svg",{class:"h-2.5 w-2.5",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3"},[e("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])],8,Re)]))),128)),E(e("input",{"onUpdate:modelValue":t[0]||(t[0]=a=>o.value=a),type:"text",placeholder:"Add tag...",class:"w-20 bg-transparent text-[10px] text-text-primary placeholder-text-muted outline-none",onKeydown:t[1]||(t[1]=a=>f(a,s.tags))},null,544),[[L,o.value]])]))}}),Le={class:"rounded-lg border border-accent/30 bg-surface-raised p-4 space-y-4"},Ue={class:"flex items-center justify-between"},Ve={class:"flex items-center gap-2"},ze={class:"text-xs text-text-secondary"},Fe={class:"text-[10px] text-text-muted"},Ke={class:"text-[10px] text-text-muted"},Je={class:"flex items-center gap-2"},Oe={class:"max-h-32 overflow-auto rounded-lg bg-surface p-3 text-xs text-text-secondary whitespace-pre-wrap font-mono"},We={class:"max-h-32 overflow-auto rounded-lg bg-surface p-3 text-xs text-text-secondary whitespace-pre-wrap font-mono"},qe={key:0},Ge={class:"max-h-40 overflow-auto rounded-lg bg-accent/5 border border-accent/20 p-3 text-xs text-text-secondary whitespace-pre-wrap font-mono italic"},He={class:"mb-1 flex items-center justify-between"},Qe={key:1,class:"max-h-64 overflow-auto rounded-lg bg-surface p-3 text-xs text-text-secondary whitespace-pre-wrap font-mono"},Xe={key:2,class:"mt-2 flex gap-2"},Ye={class:"flex items-center justify-end border-t border-border-default pt-3"},Ze=D({__name:"TrainingDetailPanel",props:{pair:{},allTags:{}},emits:["close","update:response","update:tags","toggle-accepted","delete"],setup(s,{emit:l}){const g=s,o=l,f=h(!1),n=h(""),d=h(!1);function t(){n.value=g.pair.response,f.value=!0}function a(){o("update:response",g.pair.id,n.value),f.value=!1}function b(){f.value=!1}function C(){d.value?(o("delete",g.pair.id),d.value=!1):(d.value=!0,setTimeout(()=>{d.value=!1},3e3))}const M={draft:"bg-blue-500/20 text-blue-400",insights:"bg-amber-500/20 text-amber-400",automap:"bg-emerald-500/20 text-emerald-400",fix:"bg-rose-500/20 text-rose-400"};return(U,y)=>(c(),p("div",Le,[e("div",Ue,[e("div",Ve,[e("span",{class:w(["rounded-full px-2 py-0.5 text-[10px] font-medium",M[s.pair.phase]])},m(s.pair.phase),3),e("span",ze,m(s.pair.toolName),1),e("span",Fe,m(s.pair.model),1),e("span",Ke,m(u(z)(s.pair.timestamp)),1)]),e("div",Je,[e("button",{class:w(["rounded px-2 py-1 text-[10px] transition-colors",s.pair.accepted?"bg-success/10 text-success":"bg-error/10 text-error"]),onClick:y[0]||(y[0]=B=>o("toggle-accepted",s.pair.id))},m(s.pair.accepted?"Accepted":"Rejected"),3),e("button",{class:"text-text-muted hover:text-text-primary transition-colors text-xs",onClick:y[1]||(y[1]=B=>o("close"))}," ✕ ")])]),e("div",null,[y[4]||(y[4]=e("p",{class:"mb-1 text-[10px] font-medium uppercase tracking-wider text-text-muted"},"System Prompt",-1)),e("pre",Oe,m(s.pair.systemPrompt),1)]),e("div",null,[y[5]||(y[5]=e("p",{class:"mb-1 text-[10px] font-medium uppercase tracking-wider text-text-muted"},"User Prompt",-1)),e("pre",We,m(s.pair.userPrompt),1)]),s.pair.reasoning?(c(),p("div",qe,[y[6]||(y[6]=e("p",{class:"mb-1 text-[10px] font-medium uppercase tracking-wider text-accent"},"Reasoning",-1)),e("pre",Ge,m(s.pair.reasoning),1)])):$("",!0),e("div",null,[e("div",He,[y[7]||(y[7]=e("p",{class:"text-[10px] font-medium uppercase tracking-wider text-text-muted"},"AI Response",-1)),f.value?$("",!0):(c(),p("button",{key:0,class:"text-[10px] text-accent hover:underline",onClick:t}," Edit response "))]),f.value?E((c(),p("textarea",{key:0,"onUpdate:modelValue":y[2]||(y[2]=B=>n.value=B),rows:"8",class:"w-full rounded-lg border border-accent bg-surface px-3 py-2 text-xs text-text-primary font-mono outline-none resize-y"},null,512)),[[L,n.value]]):(c(),p("pre",Qe,m(s.pair.response),1)),f.value?(c(),p("div",Xe,[e("button",{class:"rounded-lg bg-accent px-3 py-1 text-xs text-white hover:bg-accent-hover transition-colors",onClick:a}," Save "),e("button",{class:"rounded-lg px-3 py-1 text-xs text-text-muted hover:text-text-primary transition-colors",onClick:b}," Cancel ")])):$("",!0)]),e("div",null,[y[8]||(y[8]=e("p",{class:"mb-1.5 text-[10px] font-medium uppercase tracking-wider text-text-muted"},"Tags",-1)),N(Ee,{tags:s.pair.tags??[],"all-tags":s.allTags,"onUpdate:tags":y[3]||(y[3]=B=>o("update:tags",s.pair.id,B))},null,8,["tags","all-tags"])]),e("div",Ye,[e("button",{class:w(["rounded-lg px-3 py-1 text-xs transition-colors",d.value?"bg-error/10 text-error":"text-text-muted hover:text-error"]),onClick:C},m(d.value?"Confirm delete?":"Delete pair"),3)])]))}}),_e={key:0,class:"rounded-lg bg-surface-overlay p-8 text-center"},et={key:1,class:"space-y-1"},tt=["onClick"],st=["onClick"],ot={key:0,class:"text-[8px]"},at={class:"shrink-0 text-text-secondary w-24 truncate"},lt={class:"shrink-0 text-text-muted w-28 truncate"},nt={class:"flex items-center gap-1 shrink-0"},rt={key:0,class:"text-[8px] text-text-muted"},dt={class:"flex-1 min-w-0 truncate text-text-muted"},it={class:"shrink-0 text-[10px] text-text-muted"},ut=D({__name:"TrainingTable",props:{pairs:{},selectedIds:{},expandedId:{},allTags:{}},emits:["toggle-selection","set-expanded","update:response","update:tags","toggle-accepted","delete"],setup(s,{emit:l}){const g=l,o={draft:"bg-blue-500/20 text-blue-400",insights:"bg-amber-500/20 text-amber-400",automap:"bg-emerald-500/20 text-emerald-400",fix:"bg-rose-500/20 text-rose-400"};return(f,n)=>s.pairs.length===0?(c(),p("div",_e,[...n[5]||(n[5]=[e("p",{class:"text-sm text-text-muted"},"No training pairs match your filters.",-1)])])):(c(),p("div",et,[(c(!0),p(A,null,S(s.pairs,d=>(c(),p("div",{key:d.id},[e("div",{class:w(["flex items-center gap-3 rounded-lg border border-border-default bg-surface-raised px-3 py-2.5 text-xs transition-colors cursor-pointer hover:border-accent/30",s.expandedId===d.id?"border-accent/50":""]),onClick:t=>g("set-expanded",d.id)},[e("button",{class:w(["flex h-4 w-4 shrink-0 items-center justify-center rounded border transition-colors",s.selectedIds.has(d.id)?"border-accent bg-accent text-white":"border-border-default hover:border-accent"]),onClick:X(t=>g("toggle-selection",d.id),["stop"])},[s.selectedIds.has(d.id)?(c(),p("span",ot,"✓")):$("",!0)],10,st),e("span",{class:w(["shrink-0 rounded-full px-2 py-0.5 text-[9px] font-medium",o[d.phase]])},m(d.phase),3),e("span",at,m(d.toolName),1),e("span",lt,m(d.model),1),e("span",{class:w(["shrink-0 rounded-full px-1.5 py-0.5 text-[9px]",d.accepted?"bg-success/10 text-success":"bg-error/10 text-error"])},m(d.accepted?"accepted":"rejected"),3),e("div",nt,[(c(!0),p(A,null,S((d.tags??[]).slice(0,2),t=>(c(),p("span",{key:t,class:"rounded-full bg-accent/10 px-1.5 py-0.5 text-[8px] text-accent"},m(t),1))),128)),(d.tags??[]).length>2?(c(),p("span",rt,"+"+m((d.tags??[]).length-2),1)):$("",!0)]),e("span",dt,m(d.userPrompt.slice(0,80))+m(d.userPrompt.length>80?"...":""),1),e("span",it,m(u(z)(d.timestamp)),1)],10,tt),s.expandedId===d.id?(c(),R(Ze,{key:0,pair:d,"all-tags":s.allTags,class:"mt-1 ml-7",onClose:n[0]||(n[0]=t=>g("set-expanded",null)),"onUpdate:response":n[1]||(n[1]=(t,a)=>g("update:response",t,a)),"onUpdate:tags":n[2]||(n[2]=(t,a)=>g("update:tags",t,a)),onToggleAccepted:n[3]||(n[3]=t=>g("toggle-accepted",t)),onDelete:n[4]||(n[4]=t=>g("delete",t))},null,8,["pair","all-tags"])):$("",!0)]))),128))]))}}),ct={class:"flex items-center gap-2 rounded-lg border border-accent/30 bg-surface-raised px-4 py-2.5"},xt={class:"text-xs font-medium text-accent"},pt={class:"ml-auto flex items-center gap-2"},mt={key:0,class:"flex items-center gap-1"},gt=D({__name:"TrainingBulkActions",props:{selectedCount:{}},emits:["export","mark-accepted","mark-rejected","add-tag","delete","deselect-all"],setup(s,{emit:l}){const g=l,o=h(!1),f=h(""),n=h(!1);function d(){const a=f.value.trim().toLowerCase();a&&(g("add-tag",a),f.value="",o.value=!1)}function t(){n.value?(g("delete"),n.value=!1):(n.value=!0,setTimeout(()=>{n.value=!1},3e3))}return(a,b)=>(c(),p("div",ct,[e("span",xt,m(s.selectedCount)+" selected",1),e("div",pt,[e("button",{class:"rounded-lg bg-surface-overlay px-3 py-1 text-[10px] text-text-secondary hover:text-text-primary transition-colors",onClick:b[0]||(b[0]=C=>g("export"))}," Export JSONL "),e("button",{class:"rounded-lg bg-success/10 px-3 py-1 text-[10px] text-success hover:bg-success/20 transition-colors",onClick:b[1]||(b[1]=C=>g("mark-accepted"))}," Mark Accepted "),e("button",{class:"rounded-lg bg-error/10 px-3 py-1 text-[10px] text-error hover:bg-error/20 transition-colors",onClick:b[2]||(b[2]=C=>g("mark-rejected"))}," Mark Rejected "),o.value?(c(),p("div",mt,[E(e("input",{"onUpdate:modelValue":b[3]||(b[3]=C=>f.value=C),type:"text",placeholder:"Tag name...",class:"w-24 rounded border border-accent bg-surface px-2 py-0.5 text-[10px] text-text-primary outline-none",onKeydown:[V(d,["enter"]),b[4]||(b[4]=V(C=>o.value=!1,["escape"]))]},null,544),[[L,f.value]]),e("button",{class:"text-[10px] text-accent hover:underline",onClick:d},"Add")])):(c(),p("button",{key:1,class:"rounded-lg bg-accent/10 px-3 py-1 text-[10px] text-accent hover:bg-accent/20 transition-colors",onClick:b[5]||(b[5]=C=>o.value=!0)}," Add Tag ")),e("button",{class:w(["rounded-lg px-3 py-1 text-[10px] transition-colors",n.value?"bg-error/10 text-error":"text-text-muted hover:text-error"]),onClick:t},m(n.value?"Confirm?":"Delete"),3),e("button",{class:"text-[10px] text-text-muted hover:text-text-primary transition-colors",onClick:b[6]||(b[6]=C=>g("deselect-all"))}," Deselect ")])]))}}),ft={class:"mx-auto max-w-6xl space-y-6"},vt={key:1,class:"flex items-center gap-3"},bt={class:"text-[10px] text-text-muted"},yt={key:2,class:"rounded-lg border border-border-default bg-surface-raised p-8 text-center"},kt={class:"text-xs text-text-muted"},Tt=D({__name:"AITrainingPage",setup(s){const l=se();return Y(()=>{l.loadPairs()}),(g,o)=>{const f=_("RouterLink");return c(),p("div",ft,[o[18]||(o[18]=e("div",null,[e("h2",{class:"text-lg font-semibold text-text-primary"},"AI Training"),e("p",{class:"text-sm text-text-muted"},"Browse, curate, and export your training data from the Tool Workshop.")],-1)),N(ye,{stats:u(l).stats},null,8,["stats"]),N(je,{filters:u(l).filters,models:u(l).allModels,"tool-names":u(l).allToolNames,tags:u(l).allTags,"onUpdate:filters":o[0]||(o[0]=n=>u(l).filters=n)},null,8,["filters","models","tool-names","tags"]),u(l).selectedIds.size>0?(c(),R(gt,{key:0,"selected-count":u(l).selectedIds.size,onExport:o[1]||(o[1]=n=>u(l).exportSelected([...u(l).selectedIds])),onMarkAccepted:o[2]||(o[2]=n=>u(l).bulkSetAccepted([...u(l).selectedIds],!0)),onMarkRejected:o[3]||(o[3]=n=>u(l).bulkSetAccepted([...u(l).selectedIds],!1)),onAddTag:o[4]||(o[4]=n=>u(l).bulkAddTag([...u(l).selectedIds],n)),onDelete:o[5]||(o[5]=n=>u(l).deletePairs([...u(l).selectedIds])),onDeselectAll:o[6]||(o[6]=n=>u(l).deselectAll())},null,8,["selected-count"])):$("",!0),u(l).filteredPairs.length>0?(c(),p("div",vt,[e("button",{class:"text-[10px] text-text-muted hover:text-accent transition-colors",onClick:o[7]||(o[7]=n=>u(l).selectedIds.size===u(l).filteredPairs.length?u(l).deselectAll():u(l).selectAll())},m(u(l).selectedIds.size===u(l).filteredPairs.length?"Deselect all":`Select all ${u(l).filteredPairs.length}`),1),e("span",bt,m(u(l).filteredPairs.length)+" of "+m(u(l).pairs.length)+" pairs shown ",1)])):$("",!0),N(ut,{pairs:u(l).filteredPairs,"selected-ids":u(l).selectedIds,"expanded-id":u(l).expandedId,"all-tags":u(l).allTags,onToggleSelection:o[8]||(o[8]=n=>u(l).toggleSelection(n)),onSetExpanded:o[9]||(o[9]=n=>u(l).setExpanded(n)),"onUpdate:response":o[10]||(o[10]=(n,d)=>u(l).updateResponse(n,d)),"onUpdate:tags":o[11]||(o[11]=(n,d)=>u(l).updateTags(n,d)),onToggleAccepted:o[12]||(o[12]=n=>u(l).toggleAccepted(n)),onDelete:o[13]||(o[13]=n=>u(l).deletePairs([n]))},null,8,["pairs","selected-ids","expanded-id","all-tags"]),u(l).pairs.length===0&&!u(l).loading?(c(),p("div",yt,[o[17]||(o[17]=e("p",{class:"text-sm text-text-muted mb-2"},"No training data collected yet.",-1)),e("p",kt,[o[15]||(o[15]=j(" Training pairs are generated automatically when you use AI features in the ",-1)),N(f,{to:"/tools",class:"text-accent hover:underline"},{default:Z(()=>[...o[14]||(o[14]=[j("Tool Workshop",-1)])]),_:1}),o[16]||(o[16]=j(" (draft generation, code analysis, auto-mapping, and AI fix). ",-1))])])):$("",!0)])}}});export{Tt as default};