@gatanot/qualia_web 0.1.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 (224) hide show
  1. package/build/client/_app/immutable/assets/0.BlmLthUu.css +1 -0
  2. package/build/client/_app/immutable/assets/0.BlmLthUu.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.BlmLthUu.css.gz +0 -0
  4. package/build/client/_app/immutable/assets/2.C6F1hpzI.css +1 -0
  5. package/build/client/_app/immutable/assets/2.C6F1hpzI.css.br +0 -0
  6. package/build/client/_app/immutable/assets/2.C6F1hpzI.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/3.D8sLuVpx.css +1 -0
  8. package/build/client/_app/immutable/assets/3.D8sLuVpx.css.br +0 -0
  9. package/build/client/_app/immutable/assets/3.D8sLuVpx.css.gz +0 -0
  10. package/build/client/_app/immutable/assets/4.1xWrYHn4.css +1 -0
  11. package/build/client/_app/immutable/assets/4.1xWrYHn4.css.br +0 -0
  12. package/build/client/_app/immutable/assets/4.1xWrYHn4.css.gz +0 -0
  13. package/build/client/_app/immutable/assets/5.K6sy6bnZ.css +1 -0
  14. package/build/client/_app/immutable/assets/5.K6sy6bnZ.css.br +0 -0
  15. package/build/client/_app/immutable/assets/5.K6sy6bnZ.css.gz +0 -0
  16. package/build/client/_app/immutable/assets/ChatInput.CmxPxwkj.css +1 -0
  17. package/build/client/_app/immutable/assets/ChatInput.CmxPxwkj.css.br +0 -0
  18. package/build/client/_app/immutable/assets/ChatInput.CmxPxwkj.css.gz +0 -0
  19. package/build/client/_app/immutable/assets/KaTeX_AMS-Regular.BQhdFMY1.woff2 +0 -0
  20. package/build/client/_app/immutable/assets/KaTeX_AMS-Regular.DMm9YOAa.woff +0 -0
  21. package/build/client/_app/immutable/assets/KaTeX_AMS-Regular.DRggAlZN.ttf +0 -0
  22. package/build/client/_app/immutable/assets/KaTeX_Caligraphic-Bold.ATXxdsX0.ttf +0 -0
  23. package/build/client/_app/immutable/assets/KaTeX_Caligraphic-Bold.BEiXGLvX.woff +0 -0
  24. package/build/client/_app/immutable/assets/KaTeX_Caligraphic-Bold.Dq_IR9rO.woff2 +0 -0
  25. package/build/client/_app/immutable/assets/KaTeX_Caligraphic-Regular.CTRA-rTL.woff +0 -0
  26. package/build/client/_app/immutable/assets/KaTeX_Caligraphic-Regular.Di6jR-x-.woff2 +0 -0
  27. package/build/client/_app/immutable/assets/KaTeX_Caligraphic-Regular.wX97UBjC.ttf +0 -0
  28. package/build/client/_app/immutable/assets/KaTeX_Fraktur-Bold.BdnERNNW.ttf +0 -0
  29. package/build/client/_app/immutable/assets/KaTeX_Fraktur-Bold.BsDP51OF.woff +0 -0
  30. package/build/client/_app/immutable/assets/KaTeX_Fraktur-Bold.CL6g_b3V.woff2 +0 -0
  31. package/build/client/_app/immutable/assets/KaTeX_Fraktur-Regular.CB_wures.ttf +0 -0
  32. package/build/client/_app/immutable/assets/KaTeX_Fraktur-Regular.CTYiF6lA.woff2 +0 -0
  33. package/build/client/_app/immutable/assets/KaTeX_Fraktur-Regular.Dxdc4cR9.woff +0 -0
  34. package/build/client/_app/immutable/assets/KaTeX_Main-Bold.Cx986IdX.woff2 +0 -0
  35. package/build/client/_app/immutable/assets/KaTeX_Main-Bold.Jm3AIy58.woff +0 -0
  36. package/build/client/_app/immutable/assets/KaTeX_Main-Bold.waoOVXN0.ttf +0 -0
  37. package/build/client/_app/immutable/assets/KaTeX_Main-BoldItalic.DxDJ3AOS.woff2 +0 -0
  38. package/build/client/_app/immutable/assets/KaTeX_Main-BoldItalic.DzxPMmG6.ttf +0 -0
  39. package/build/client/_app/immutable/assets/KaTeX_Main-BoldItalic.SpSLRI95.woff +0 -0
  40. package/build/client/_app/immutable/assets/KaTeX_Main-Italic.3WenGoN9.ttf +0 -0
  41. package/build/client/_app/immutable/assets/KaTeX_Main-Italic.BMLOBm91.woff +0 -0
  42. package/build/client/_app/immutable/assets/KaTeX_Main-Italic.NWA7e6Wa.woff2 +0 -0
  43. package/build/client/_app/immutable/assets/KaTeX_Main-Regular.B22Nviop.woff2 +0 -0
  44. package/build/client/_app/immutable/assets/KaTeX_Main-Regular.Dr94JaBh.woff +0 -0
  45. package/build/client/_app/immutable/assets/KaTeX_Main-Regular.ypZvNtVU.ttf +0 -0
  46. package/build/client/_app/immutable/assets/KaTeX_Math-BoldItalic.B3XSjfu4.ttf +0 -0
  47. package/build/client/_app/immutable/assets/KaTeX_Math-BoldItalic.CZnvNsCZ.woff2 +0 -0
  48. package/build/client/_app/immutable/assets/KaTeX_Math-BoldItalic.iY-2wyZ7.woff +0 -0
  49. package/build/client/_app/immutable/assets/KaTeX_Math-Italic.DA0__PXp.woff +0 -0
  50. package/build/client/_app/immutable/assets/KaTeX_Math-Italic.flOr_0UB.ttf +0 -0
  51. package/build/client/_app/immutable/assets/KaTeX_Math-Italic.t53AETM-.woff2 +0 -0
  52. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Bold.CFMepnvq.ttf +0 -0
  53. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Bold.D1sUS0GD.woff2 +0 -0
  54. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Bold.DbIhKOiC.woff +0 -0
  55. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Italic.C3H0VqGB.woff2 +0 -0
  56. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Italic.DN2j7dab.woff +0 -0
  57. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Italic.YYjJ1zSn.ttf +0 -0
  58. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Regular.BNo7hRIc.ttf +0 -0
  59. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Regular.CS6fqUqJ.woff +0 -0
  60. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Regular.DDBCnlJ7.woff2 +0 -0
  61. package/build/client/_app/immutable/assets/KaTeX_Script-Regular.C5JkGWo-.ttf +0 -0
  62. package/build/client/_app/immutable/assets/KaTeX_Script-Regular.D3wIWfF6.woff2 +0 -0
  63. package/build/client/_app/immutable/assets/KaTeX_Script-Regular.D5yQViql.woff +0 -0
  64. package/build/client/_app/immutable/assets/KaTeX_Size1-Regular.C195tn64.woff +0 -0
  65. package/build/client/_app/immutable/assets/KaTeX_Size1-Regular.Dbsnue_I.ttf +0 -0
  66. package/build/client/_app/immutable/assets/KaTeX_Size1-Regular.mCD8mA8B.woff2 +0 -0
  67. package/build/client/_app/immutable/assets/KaTeX_Size2-Regular.B7gKUWhC.ttf +0 -0
  68. package/build/client/_app/immutable/assets/KaTeX_Size2-Regular.Dy4dx90m.woff2 +0 -0
  69. package/build/client/_app/immutable/assets/KaTeX_Size2-Regular.oD1tc_U0.woff +0 -0
  70. package/build/client/_app/immutable/assets/KaTeX_Size3-Regular.CTq5MqoE.woff +0 -0
  71. package/build/client/_app/immutable/assets/KaTeX_Size3-Regular.DgpXs0kz.ttf +0 -0
  72. package/build/client/_app/immutable/assets/KaTeX_Size4-Regular.BF-4gkZK.woff +0 -0
  73. package/build/client/_app/immutable/assets/KaTeX_Size4-Regular.DWFBv043.ttf +0 -0
  74. package/build/client/_app/immutable/assets/KaTeX_Size4-Regular.Dl5lxZxV.woff2 +0 -0
  75. package/build/client/_app/immutable/assets/KaTeX_Typewriter-Regular.C0xS9mPB.woff +0 -0
  76. package/build/client/_app/immutable/assets/KaTeX_Typewriter-Regular.CO6r4hn1.woff2 +0 -0
  77. package/build/client/_app/immutable/assets/KaTeX_Typewriter-Regular.D3Ib7_Hf.ttf +0 -0
  78. package/build/client/_app/immutable/chunks/B39M1lOz.js +3 -0
  79. package/build/client/_app/immutable/chunks/B39M1lOz.js.br +0 -0
  80. package/build/client/_app/immutable/chunks/B39M1lOz.js.gz +0 -0
  81. package/build/client/_app/immutable/chunks/BMcRbUT8.js +3 -0
  82. package/build/client/_app/immutable/chunks/BMcRbUT8.js.br +0 -0
  83. package/build/client/_app/immutable/chunks/BMcRbUT8.js.gz +0 -0
  84. package/build/client/_app/immutable/chunks/BN2zEB6w.js +1 -0
  85. package/build/client/_app/immutable/chunks/BN2zEB6w.js.br +0 -0
  86. package/build/client/_app/immutable/chunks/BN2zEB6w.js.gz +0 -0
  87. package/build/client/_app/immutable/chunks/BVDlhZK_.js +1 -0
  88. package/build/client/_app/immutable/chunks/BVDlhZK_.js.br +2 -0
  89. package/build/client/_app/immutable/chunks/BVDlhZK_.js.gz +0 -0
  90. package/build/client/_app/immutable/chunks/CxmPiQW9.js +1 -0
  91. package/build/client/_app/immutable/chunks/CxmPiQW9.js.br +0 -0
  92. package/build/client/_app/immutable/chunks/CxmPiQW9.js.gz +0 -0
  93. package/build/client/_app/immutable/chunks/DAIlYrs_.js +1 -0
  94. package/build/client/_app/immutable/chunks/DAIlYrs_.js.br +0 -0
  95. package/build/client/_app/immutable/chunks/DAIlYrs_.js.gz +0 -0
  96. package/build/client/_app/immutable/chunks/Ir23lSxH.js +329 -0
  97. package/build/client/_app/immutable/chunks/Ir23lSxH.js.br +0 -0
  98. package/build/client/_app/immutable/chunks/Ir23lSxH.js.gz +0 -0
  99. package/build/client/_app/immutable/chunks/gZTJ0hjf.js +1 -0
  100. package/build/client/_app/immutable/chunks/gZTJ0hjf.js.br +0 -0
  101. package/build/client/_app/immutable/chunks/gZTJ0hjf.js.gz +0 -0
  102. package/build/client/_app/immutable/chunks/idCMFvY6.js +1 -0
  103. package/build/client/_app/immutable/chunks/idCMFvY6.js.br +2 -0
  104. package/build/client/_app/immutable/chunks/idCMFvY6.js.gz +0 -0
  105. package/build/client/_app/immutable/chunks/kNaey6uv.js +1 -0
  106. package/build/client/_app/immutable/chunks/kNaey6uv.js.br +0 -0
  107. package/build/client/_app/immutable/chunks/kNaey6uv.js.gz +0 -0
  108. package/build/client/_app/immutable/chunks/xihTtKlq.js +1 -0
  109. package/build/client/_app/immutable/chunks/xihTtKlq.js.br +1 -0
  110. package/build/client/_app/immutable/chunks/xihTtKlq.js.gz +0 -0
  111. package/build/client/_app/immutable/entry/app.CAKAEcgA.js +2 -0
  112. package/build/client/_app/immutable/entry/app.CAKAEcgA.js.br +0 -0
  113. package/build/client/_app/immutable/entry/app.CAKAEcgA.js.gz +0 -0
  114. package/build/client/_app/immutable/entry/start.BSM2k8tg.js +1 -0
  115. package/build/client/_app/immutable/entry/start.BSM2k8tg.js.br +0 -0
  116. package/build/client/_app/immutable/entry/start.BSM2k8tg.js.gz +0 -0
  117. package/build/client/_app/immutable/nodes/0.fnpvsEAN.js +1 -0
  118. package/build/client/_app/immutable/nodes/0.fnpvsEAN.js.br +0 -0
  119. package/build/client/_app/immutable/nodes/0.fnpvsEAN.js.gz +0 -0
  120. package/build/client/_app/immutable/nodes/1.CLtaTeie.js +1 -0
  121. package/build/client/_app/immutable/nodes/1.CLtaTeie.js.br +0 -0
  122. package/build/client/_app/immutable/nodes/1.CLtaTeie.js.gz +0 -0
  123. package/build/client/_app/immutable/nodes/2.BwxFyRtn.js +1 -0
  124. package/build/client/_app/immutable/nodes/2.BwxFyRtn.js.br +0 -0
  125. package/build/client/_app/immutable/nodes/2.BwxFyRtn.js.gz +0 -0
  126. package/build/client/_app/immutable/nodes/3.D2KZBL5g.js +4 -0
  127. package/build/client/_app/immutable/nodes/3.D2KZBL5g.js.br +0 -0
  128. package/build/client/_app/immutable/nodes/3.D2KZBL5g.js.gz +0 -0
  129. package/build/client/_app/immutable/nodes/4.B6LN5K9i.js +1 -0
  130. package/build/client/_app/immutable/nodes/4.B6LN5K9i.js.br +0 -0
  131. package/build/client/_app/immutable/nodes/4.B6LN5K9i.js.gz +0 -0
  132. package/build/client/_app/immutable/nodes/5.CVHYq0o4.js +10 -0
  133. package/build/client/_app/immutable/nodes/5.CVHYq0o4.js.br +0 -0
  134. package/build/client/_app/immutable/nodes/5.CVHYq0o4.js.gz +0 -0
  135. package/build/client/_app/version.json +1 -0
  136. package/build/client/_app/version.json.br +0 -0
  137. package/build/client/_app/version.json.gz +0 -0
  138. package/build/client/robots.txt +3 -0
  139. package/build/client/robots.txt.br +0 -0
  140. package/build/client/robots.txt.gz +0 -0
  141. package/build/env.js +70 -0
  142. package/build/env.js.map +1 -0
  143. package/build/handler.js +17 -0
  144. package/build/handler.js.map +1 -0
  145. package/build/index.js +140 -0
  146. package/build/index.js.map +1 -0
  147. package/build/server/chunks/0-CF_dr3E0.js +9 -0
  148. package/build/server/chunks/0-CF_dr3E0.js.map +1 -0
  149. package/build/server/chunks/1-CVoEVbhQ.js +9 -0
  150. package/build/server/chunks/1-CVoEVbhQ.js.map +1 -0
  151. package/build/server/chunks/2-BzhQC8cX.js +38 -0
  152. package/build/server/chunks/2-BzhQC8cX.js.map +1 -0
  153. package/build/server/chunks/3-CukYFw9L.js +9 -0
  154. package/build/server/chunks/3-CukYFw9L.js.map +1 -0
  155. package/build/server/chunks/4-4e_Gaah7.js +9 -0
  156. package/build/server/chunks/4-4e_Gaah7.js.map +1 -0
  157. package/build/server/chunks/5-B4fCEv4c.js +9 -0
  158. package/build/server/chunks/5-B4fCEv4c.js.map +1 -0
  159. package/build/server/chunks/ChatInput-GWTgCE1t.js +122 -0
  160. package/build/server/chunks/ChatInput-GWTgCE1t.js.map +1 -0
  161. package/build/server/chunks/_layout.svelte-MrMdtdjr.js +232 -0
  162. package/build/server/chunks/_layout.svelte-MrMdtdjr.js.map +1 -0
  163. package/build/server/chunks/_page.svelte-CfQFFres.js +64 -0
  164. package/build/server/chunks/_page.svelte-CfQFFres.js.map +1 -0
  165. package/build/server/chunks/_page.svelte-CgTaVEr0.js +189 -0
  166. package/build/server/chunks/_page.svelte-CgTaVEr0.js.map +1 -0
  167. package/build/server/chunks/_page.svelte-DEDJBB4D.js +602 -0
  168. package/build/server/chunks/_page.svelte-DEDJBB4D.js.map +1 -0
  169. package/build/server/chunks/_page.svelte-OC4xDCWu.js +67 -0
  170. package/build/server/chunks/_page.svelte-OC4xDCWu.js.map +1 -0
  171. package/build/server/chunks/_server.ts-BG3v883h.js +115 -0
  172. package/build/server/chunks/_server.ts-BG3v883h.js.map +1 -0
  173. package/build/server/chunks/_server.ts-C1hU_FnX.js +28 -0
  174. package/build/server/chunks/_server.ts-C1hU_FnX.js.map +1 -0
  175. package/build/server/chunks/_server.ts-CJOrsy4y.js +30 -0
  176. package/build/server/chunks/_server.ts-CJOrsy4y.js.map +1 -0
  177. package/build/server/chunks/_server.ts-Co2FAQm2.js +43 -0
  178. package/build/server/chunks/_server.ts-Co2FAQm2.js.map +1 -0
  179. package/build/server/chunks/_server.ts-D6NGuqud.js +106 -0
  180. package/build/server/chunks/_server.ts-D6NGuqud.js.map +1 -0
  181. package/build/server/chunks/_server.ts-DaHUgm60.js +26 -0
  182. package/build/server/chunks/_server.ts-DaHUgm60.js.map +1 -0
  183. package/build/server/chunks/_server.ts-DiHyx5ij.js +64 -0
  184. package/build/server/chunks/_server.ts-DiHyx5ij.js.map +1 -0
  185. package/build/server/chunks/_server.ts-GB-Qo389.js +73 -0
  186. package/build/server/chunks/_server.ts-GB-Qo389.js.map +1 -0
  187. package/build/server/chunks/_server.ts-K359HUPL.js +32 -0
  188. package/build/server/chunks/_server.ts-K359HUPL.js.map +1 -0
  189. package/build/server/chunks/_server.ts-e4VKCo3M.js +54 -0
  190. package/build/server/chunks/_server.ts-e4VKCo3M.js.map +1 -0
  191. package/build/server/chunks/_server.ts-nr6qwbTw.js +42 -0
  192. package/build/server/chunks/_server.ts-nr6qwbTw.js.map +1 -0
  193. package/build/server/chunks/chat-confirm-BW2aJ2qz.js +5 -0
  194. package/build/server/chunks/chat-confirm-BW2aJ2qz.js.map +1 -0
  195. package/build/server/chunks/chat-steering-DTefLITL.js +5 -0
  196. package/build/server/chunks/chat-steering-DTefLITL.js.map +1 -0
  197. package/build/server/chunks/client-BoLIct8q.js +69 -0
  198. package/build/server/chunks/client-BoLIct8q.js.map +1 -0
  199. package/build/server/chunks/config-d3FC8naq.js +4907 -0
  200. package/build/server/chunks/config-d3FC8naq.js.map +1 -0
  201. package/build/server/chunks/error.svelte-BpxjjtfZ.js +65 -0
  202. package/build/server/chunks/error.svelte-BpxjjtfZ.js.map +1 -0
  203. package/build/server/chunks/gateway-DWcUFfHo.js +478 -0
  204. package/build/server/chunks/gateway-DWcUFfHo.js.map +1 -0
  205. package/build/server/chunks/handler-BAQYBQgy.js +1454 -0
  206. package/build/server/chunks/handler-BAQYBQgy.js.map +1 -0
  207. package/build/server/chunks/hooks.server-C6heBR7o.js +35 -0
  208. package/build/server/chunks/hooks.server-C6heBR7o.js.map +1 -0
  209. package/build/server/chunks/index.js-N7Sh42pC.js +11584 -0
  210. package/build/server/chunks/index.js-N7Sh42pC.js.map +1 -0
  211. package/build/server/chunks/manifest.js-D2rH2GXr.js +143 -0
  212. package/build/server/chunks/manifest.js-D2rH2GXr.js.map +1 -0
  213. package/build/server/chunks/markdown-BYqQ8bKF.js +78593 -0
  214. package/build/server/chunks/markdown-BYqQ8bKF.js.map +1 -0
  215. package/build/server/chunks/prompts-tcGD1LCs.js +37 -0
  216. package/build/server/chunks/prompts-tcGD1LCs.js.map +1 -0
  217. package/build/server/chunks/session-store-B1Aop0Qn.js +50 -0
  218. package/build/server/chunks/session-store-B1Aop0Qn.js.map +1 -0
  219. package/build/server/chunks/stores-D_6JNTkz.js +36 -0
  220. package/build/server/chunks/stores-D_6JNTkz.js.map +1 -0
  221. package/build/shims.js +33 -0
  222. package/build/shims.js.map +1 -0
  223. package/handler.d.ts +8 -0
  224. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ import{K as e}from"./B39M1lOz.js";var t=e({config:null,allModels:[]});function n(){return t.allModels.find(e=>e.id===t.config?.activeModel)}function r(){let e=t.config;if(!e?.activeModel)return;let r=n();if(r)return e.providers.find(e=>e.name===r.providerName)?.reasoningEffort}function i(){let e=n();if(!e?.supportsReasoning)return[];let t=e.reasoningEffortValues;return t.length>0?t:[`enabled`]}export{i,t as n,r,n as t};
@@ -0,0 +1 @@
1
+ import"./B39M1lOz.js";
@@ -0,0 +1,2 @@
1
+
2
+ �import"./B39M1lOz.js";
@@ -0,0 +1 @@
1
+ var e=`modulepreload`,t=function(e,t){return new URL(e,t).href},n={},r=function(r,i,a){let o=Promise.resolve();if(i&&i.length>0){let r=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}o=l(i.map(i=>{if(i=t(i,a),i in n)return;n[i]=!0;let o=i.endsWith(`.css`),s=o?`[rel="stylesheet"]`:``;if(a)for(let e=r.length-1;e>=0;e--){let t=r[e];if(t.href===i&&(!o||t.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${i}"]${s}`))return;let l=document.createElement(`link`);if(l.rel=o?`stylesheet`:e,o||(l.as=`script`),l.crossOrigin=``,l.href=i,c&&l.setAttribute(`nonce`,c),document.head.appendChild(l),o)return new Promise((e,t)=>{l.addEventListener(`load`,e),l.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${i}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(e=>{for(let t of e||[])t.status===`rejected`&&s(t.reason);return r().catch(s)})};export{r as t};
@@ -0,0 +1 @@
1
+ typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);
@@ -0,0 +1 @@
1
+ �typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.fnpvsEAN.js","../chunks/B39M1lOz.js","../chunks/BMcRbUT8.js","../chunks/idCMFvY6.js","../chunks/BVDlhZK_.js","../chunks/CxmPiQW9.js","../chunks/xihTtKlq.js","../chunks/gZTJ0hjf.js","../chunks/BN2zEB6w.js","../assets/0.BlmLthUu.css","../nodes/1.CLtaTeie.js","../nodes/2.BwxFyRtn.js","../chunks/DAIlYrs_.js","../assets/ChatInput.CmxPxwkj.css","../assets/2.C6F1hpzI.css","../nodes/3.D2KZBL5g.js","../chunks/Ir23lSxH.js","../assets/3.D8sLuVpx.css","../nodes/4.B6LN5K9i.js","../assets/4.1xWrYHn4.css","../nodes/5.CVHYq0o4.js","../assets/5.K6sy6bnZ.css"])))=>i.map(i=>d[i]);
2
+ import{C as e,D as t,E as n,G as r,J as i,L as a,M as o,O as s,P as c,R as l,T as u,U as d,W as f,X as p,a as m,i as h,n as g,nt as _,ot as v,q as y,r as b,rt as x,v as S,w as C,z as w}from"../chunks/B39M1lOz.js";import{t as T}from"../chunks/kNaey6uv.js";import"../chunks/xihTtKlq.js";var E={},D=t(`<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>`),O=t(`<!> <!>`,1);function k(t,b){x(b,!0);let T=h(b,`components`,23,()=>[]),E=h(b,`data_0`,3,null),k=h(b,`data_1`,3,null);w(()=>b.stores.page.set(b.page)),l(()=>{b.stores,b.page,b.constructors,T(),b.form,E(),k(),b.stores.page.notify()});let A=i(!1),j=i(!1),M=i(null);g(()=>{let e=b.stores.page.subscribe(()=>{o(A)&&(y(j,!0),c().then(()=>{y(M,document.title||`untitled page`,!0)}))});return y(A,!0),e});let N=p(()=>b.constructors[1]);var P=O(),F=f(P),I=e=>{let t=p(()=>b.constructors[0]);var r=n();S(f(r),()=>o(t),(e,t)=>{m(t(e,{get data(){return E()},get form(){return b.form},get params(){return b.page.params},children:(e,t)=>{var r=n();S(f(r),()=>o(N),(e,t)=>{m(t(e,{get data(){return k()},get form(){return b.form},get params(){return b.page.params}}),e=>T()[1]=e,()=>T()?.[1])}),u(e,r)},$$slots:{default:!0}}),e=>T()[0]=e,()=>T()?.[0])}),u(e,r)},L=e=>{let t=p(()=>b.constructors[0]);var r=n();S(f(r),()=>o(t),(e,t)=>{m(t(e,{get data(){return E()},get form(){return b.form},get params(){return b.page.params}}),e=>T()[0]=e,()=>T()?.[0])}),u(e,r)};e(F,e=>{b.constructors[1]?e(I):e(L,-1)});var R=r(F,2),z=t=>{var n=D(),r=d(n),i=e=>{var t=s();a(()=>C(t,o(M))),u(e,t)};e(r,e=>{o(j)&&e(i)}),v(n),u(t,n)};e(R,e=>{o(A)&&e(z)}),u(t,P),_()}var A=b(k),j=[()=>T(()=>import(`../nodes/0.fnpvsEAN.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]),import.meta.url),()=>T(()=>import(`../nodes/1.CLtaTeie.js`),__vite__mapDeps([10,1,2,3,6]),import.meta.url),()=>T(()=>import(`../nodes/2.BwxFyRtn.js`),__vite__mapDeps([11,1,2,3,4,6,12,7,13,8,14]),import.meta.url),()=>T(()=>import(`../nodes/3.D2KZBL5g.js`),__vite__mapDeps([15,1,2,3,4,5,16,6,12,7,13,8,17]),import.meta.url),()=>T(()=>import(`../nodes/4.B6LN5K9i.js`),__vite__mapDeps([18,1,2,3,4,16,6,8,19]),import.meta.url),()=>T(()=>import(`../nodes/5.CVHYq0o4.js`),__vite__mapDeps([20,1,6,7,8,3,21]),import.meta.url)],M=[],N={"/":[-3],"/chat/[sessionId]":[3],"/records":[4],"/settings":[5]},P={handleError:(({error:e})=>{console.error(e)}),reroute:(()=>{}),transport:{}},F=Object.fromEntries(Object.entries(P.transport).map(([e,t])=>[e,t.decode])),I=Object.fromEntries(Object.entries(P.transport).map(([e,t])=>[e,t.encode])),L=!1,R=(e,t)=>F[e](t);export{R as decode,F as decoders,N as dictionary,I as encoders,L as hash,P as hooks,E as matchers,j as nodes,A as root,M as server_loads};
@@ -0,0 +1 @@
1
+ import{c as e,r as t}from"../chunks/BMcRbUT8.js";export{e as load_css,t as start};
@@ -0,0 +1 @@
1
+ import{A as e,B as t,C as n,D as r,E as i,G as a,H as o,I as s,J as c,K as l,L as u,M as d,Q as f,R as p,S as m,T as h,U as g,W as _,X as v,Z as y,_ as b,a as x,at as S,c as C,g as w,i as T,j as E,k as D,l as O,nt as k,ot as A,q as j,rt as M,s as N,w as P,x as F,y as I}from"../chunks/B39M1lOz.js";import{n as L,t as ee}from"../chunks/BMcRbUT8.js";import"../chunks/xihTtKlq.js";import{t as te}from"../chunks/CxmPiQW9.js";import"../chunks/BVDlhZK_.js";import{d as ne,i as re,t as ie,u as ae}from"../chunks/BN2zEB6w.js";import{n as R}from"../chunks/gZTJ0hjf.js";var z=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='107'%20height='128'%20viewBox='0%200%20107%20128'%3e%3ctitle%3esvelte-logo%3c/title%3e%3cpath%20d='M94.157%2022.819c-10.4-14.885-30.94-19.297-45.792-9.835L22.282%2029.608A29.92%2029.92%200%200%200%208.764%2049.65a31.5%2031.5%200%200%200%203.108%2020.231%2030%2030%200%200%200-4.477%2011.183%2031.9%2031.9%200%200%200%205.448%2024.116c10.402%2014.887%2030.942%2019.297%2045.791%209.835l26.083-16.624A29.92%2029.92%200%200%200%2098.235%2078.35a31.53%2031.53%200%200%200-3.105-20.232%2030%2030%200%200%200%204.474-11.182%2031.88%2031.88%200%200%200-5.447-24.116'%20style='fill:%23ff3e00'/%3e%3cpath%20d='M45.817%20106.582a20.72%2020.72%200%200%201-22.237-8.243%2019.17%2019.17%200%200%201-3.277-14.503%2018%2018%200%200%201%20.624-2.435l.49-1.498%201.337.981a33.6%2033.6%200%200%200%2010.203%205.098l.97.294-.09.968a5.85%205.85%200%200%200%201.052%203.878%206.24%206.24%200%200%200%206.695%202.485%205.8%205.8%200%200%200%201.603-.704L69.27%2076.28a5.43%205.43%200%200%200%202.45-3.631%205.8%205.8%200%200%200-.987-4.371%206.24%206.24%200%200%200-6.698-2.487%205.7%205.7%200%200%200-1.6.704l-9.953%206.345a19%2019%200%200%201-5.296%202.326%2020.72%2020.72%200%200%201-22.237-8.243%2019.17%2019.17%200%200%201-3.277-14.502%2017.99%2017.99%200%200%201%208.13-12.052l26.081-16.623a19%2019%200%200%201%205.3-2.329%2020.72%2020.72%200%200%201%2022.237%208.243%2019.17%2019.17%200%200%201%203.277%2014.503%2018%2018%200%200%201-.624%202.435l-.49%201.498-1.337-.98a33.6%2033.6%200%200%200-10.203-5.1l-.97-.294.09-.968a5.86%205.86%200%200%200-1.052-3.878%206.24%206.24%200%200%200-6.696-2.485%205.8%205.8%200%200%200-1.602.704L37.73%2051.72a5.42%205.42%200%200%200-2.449%203.63%205.79%205.79%200%200%200%20.986%204.372%206.24%206.24%200%200%200%206.698%202.486%205.8%205.8%200%200%200%201.602-.704l9.952-6.342a19%2019%200%200%201%205.295-2.328%2020.72%2020.72%200%200%201%2022.237%208.242%2019.17%2019.17%200%200%201%203.277%2014.503%2018%2018%200%200%201-8.13%2012.053l-26.081%2016.622a19%2019%200%200%201-5.3%202.328'%20style='fill:%23fff'/%3e%3c/svg%3e`,B=r(`<button class="clear-btn svelte-jfym0o"><span class="material-symbols-rounded svelte-jfym0o">close</span></button>`),V=r(`<div class="empty-hint svelte-jfym0o">未找到匹配的对话</div>`),H=r(`<div class="empty-hint svelte-jfym0o">暂无对话</div>`),U=r(`<button class="search-item svelte-jfym0o"><span class="material-symbols-rounded session-icon svelte-jfym0o">chat_bubble</span> <div class="session-info svelte-jfym0o"><div class="session-title svelte-jfym0o"> </div> <div class="session-time svelte-jfym0o"> </div></div></button>`),W=r(`<div class="search-overlay svelte-jfym0o" role="dialog"><div class="search-panel svelte-jfym0o" role="document"><div class="search-header svelte-jfym0o"><span class="material-symbols-rounded search-icon svelte-jfym0o">search</span> <input class="search-input svelte-jfym0o" type="text" placeholder="搜索对话标题..." autocomplete="off"/> <!></div> <div class="search-results svelte-jfym0o"><!></div></div></div>`);function oe(t,r){M(r,!0);let o=T(r,`open`,15,!1),s=c(``),l=c(void 0);function f(e){o(!1),L(`/chat/`+e.id)}function m(e){e.key===`Escape`&&(e.preventDefault(),d(s)?j(s,``):o(!1))}let y=v(()=>{let e=d(s).trim().toLowerCase();return e?r.sessions.filter(t=>t.title.toLowerCase().includes(e)):r.sessions});function b(e){let t=new Date(e);return new Date().getTime()-t.getTime()<864e5?t.toLocaleTimeString(`zh-CN`,{hour:`2-digit`,minute:`2-digit`}):t.toLocaleDateString(`zh-CN`,{month:`short`,day:`numeric`})}p(()=>{o()&&(j(s,``),requestAnimationFrame(()=>d(l)?.focus()))});var S=i(),w=_(S),E=t=>{var c=W(),p=g(c),v=g(p),S=a(g(v),2);C(S),x(S,e=>j(l,e),()=>d(l));var w=a(S,2),T=t=>{var n=B();e(`click`,n,()=>{j(s,``),d(l)?.focus()}),h(t,n)};n(w,e=>{d(s)&&e(T)}),A(v);var E=a(v,2),D=g(E),O=e=>{h(e,V())},k=e=>{h(e,H())},M=t=>{var n=i();F(_(n),17,()=>d(y),e=>e.id,(t,n)=>{var r=U(),i=a(g(r),2),o=g(i),s=g(o,!0);A(o);var c=a(o,2),l=g(c,!0);A(c),A(i),A(r),u(e=>{P(s,d(n).title),P(l,e)},[()=>b(d(n).updated_at)]),e(`click`,r,()=>f(d(n))),h(t,r)}),h(t,n)};n(D,e=>{d(s)&&d(y).length===0?e(O):!d(s)&&r.sessions.length===0?e(k,1):e(M,-1)}),A(E),A(p),A(c),e(`click`,c,()=>o(!1)),e(`click`,p,e=>e.stopPropagation()),e(`keydown`,S,m),N(S,()=>d(s),e=>j(s,e)),h(t,c)};n(w,e=>{o()&&e(E)}),h(t,S),k()}D([`click`,`keydown`]);function G(){return typeof window>`u`?`light`:window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function K(){return typeof window>`u`?null:localStorage.getItem(`qualia-theme`)}function q(e){typeof document>`u`||document.documentElement.setAttribute(`data-theme`,e)}var J=K()||G();function Y(){q(J),typeof window<`u`&&window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,e=>{K()||(J=e.matches?`dark`:`light`,q(J))})}function se(){return J}function ce(e){J=e,typeof window<`u`&&localStorage.setItem(`qualia-theme`,e),q(e)}function le(){ce(J===`light`?`dark`:`light`)}var ue=r(`<img src="/api/brand-icon" alt="" class="brand-img svelte-103bhu0"/>`),de=r(`<span class="material-symbols-rounded brand-icon svelte-103bhu0">spa</span>`),fe=r(`<button><span class="material-symbols-rounded svelte-103bhu0">folder</span> <span> </span></button>`),pe=r(`<div class="ws-menu svelte-103bhu0"><button><span class="material-symbols-rounded svelte-103bhu0">computer</span> <span>默认工作区</span></button> <!> <div class="ws-separator svelte-103bhu0"></div> <button class="ws-option ws-add-btn svelte-103bhu0"><span class="material-symbols-rounded svelte-103bhu0">create_new_folder</span> <span>添加工作区...</span></button></div>`),me=r(`<input class="session-title-input svelte-103bhu0" type="text"/>`),he=r(`<div class="session-title svelte-103bhu0" role="textbox" tabindex="-1"> </div> <div class="session-time svelte-103bhu0"> </div>`,1),ge=r(`<div role="button" tabindex="0"><span class="material-symbols-rounded session-icon svelte-103bhu0">chat_bubble</span> <div class="session-info svelte-103bhu0"><!></div> <button class="delete-btn svelte-103bhu0" title="删除"><span class="material-symbols-rounded">delete</span></button></div>`),_e=r(`<button class="group-header svelte-103bhu0"><span class="material-symbols-rounded group-arrow svelte-103bhu0"> </span> <span class="material-symbols-rounded group-icon svelte-103bhu0">folder</span> <span class="group-name svelte-103bhu0"> </span> <span class="group-count svelte-103bhu0"> </span></button> <!>`,1),ve=r(`<button class="picker-entry svelte-103bhu0"><span class="material-symbols-rounded svelte-103bhu0">arrow_upward</span> <span>..</span></button>`),ye=r(`<button class="picker-entry svelte-103bhu0"><span class="material-symbols-rounded svelte-103bhu0">folder</span> <span> </span></button>`),be=r(`<div class="picker-overlay svelte-103bhu0" role="presentation"><div class="picker-dialog svelte-103bhu0" role="dialog" tabindex="-1"><div class="picker-header svelte-103bhu0"><span class="material-symbols-rounded svelte-103bhu0">folder_open</span> <span class="picker-path svelte-103bhu0"> </span></div> <div class="picker-list svelte-103bhu0"><!> <!></div> <div class="picker-actions svelte-103bhu0"><button class="picker-btn secondary svelte-103bhu0">取消</button> <button class="picker-btn primary svelte-103bhu0">选择此文件夹</button></div></div></div>`),xe=r(`<div><div class="sidebar-header svelte-103bhu0"><a href="/" class="brand svelte-103bhu0"><!> <span class="brand-name svelte-103bhu0">Qualia</span></a> <button class="collapse-btn svelte-103bhu0" title="收起侧边栏"><span class="material-symbols-rounded">menu_open</span></button></div> <div class="workspace-bar svelte-103bhu0"><button class="ws-selector svelte-103bhu0"><span class="material-symbols-rounded ws-icon svelte-103bhu0">folder</span> <span class="ws-label svelte-103bhu0"> </span> <span class="material-symbols-rounded ws-arrow svelte-103bhu0">expand_more</span></button> <!></div> <div class="section-label svelte-103bhu0"><span>对话</span> <button class="new-btn svelte-103bhu0"><span class="material-symbols-rounded">add</span></button></div> <div class="session-list svelte-103bhu0"><!> <a href="/records" class="view-all-link svelte-103bhu0"><span class="material-symbols-rounded view-all-icon svelte-103bhu0">history</span> <span class="view-all-text">查看全部记录</span></a></div> <div class="sidebar-footer svelte-103bhu0"><a href="/settings"><span class="material-symbols-rounded">settings</span> 设置</a> <button class="footer-link search-btn svelte-103bhu0"><span class="material-symbols-rounded">search</span> 搜索</button> <button class="footer-link theme-btn svelte-103bhu0" title="切换主题"><span class="material-symbols-rounded"> </span></button></div></div> <!> <!>`,1);function Se(r,o){M(o,!0);let s=()=>f(ae,`$sessions`,x),p=()=>f(ie,`$activeWorkspace`,x),b=()=>f(te,`$page`,x),[x,D]=y(),I=T(o,`mobileOpen`,15,!1),R=T(o,`customIcon`,3,!1),z=c(null),B=c(``),V=c(!1),H=c(l(se()===`dark`?`light_mode`:`dark_mode`)),U=c(!1),W=c(``),G=c(l([])),K=c(``),q=c(l(new Set)),J=c(!1);ee(()=>{I(!1)});function Y(e){L(`/chat/`+e.id)}function ce(){L(`/`)}async function Se(){j(J,!d(J))}async function Ce(){j(J,!1),j(U,!0),await X(``)}async function X(e){let t=await fetch(`/api/browse`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})});if(t.ok){let e=await t.json();j(W,e.path,!0),j(G,e.entries,!0),j(K,e.parent,!0)}}function Z(e){ie.set(e),j(J,!1)}function we(){ie.set(d(W)),j(U,!1)}function Te(e){d(q).has(e)?d(q).delete(e):d(q).add(e),j(q,new Set(d(q)),!0)}function Ee(e){j(z,e.id,!0),j(B,e.title||``,!0)}async function De(e){let t=d(B).trim();t&&await ne(e,t),j(z,null)}function Oe(){j(z,null)}async function ke(e){await re(e)}function Ae(e,t){e.key===`Enter`?(e.preventDefault(),De(t)):e.key===`Escape`&&Oe()}function je(){le(),j(H,se()===`dark`?`light_mode`:`dark_mode`,!0)}function Me(e){let t=new Date(e);return new Date().getTime()-t.getTime()<864e5?t.toLocaleTimeString(`zh-CN`,{hour:`2-digit`,minute:`2-digit`}):t.toLocaleDateString(`zh-CN`,{month:`short`,day:`numeric`})}function Ne(e){if(!e)return`默认工作区`;let t=e.replace(/\\/g,`/`).split(`/`);return t[t.length-1]||e}let Pe=v(()=>{let e=new Map;for(let t of s()){let n=t.workspace||``;e.has(n)||e.set(n,[]),e.get(n).push(t)}return Array.from(e.entries()).map(([e,t])=>({workspace:e,sessions:t})).sort((e,t)=>e.workspace?t.workspace?e.workspace.localeCompare(t.workspace):1:-1)});var Fe=xe(),Q=_(Fe);let Ie;var Le=g(Q),Re=g(Le),ze=g(Re),Be=e=>{h(e,ue())},Ve=e=>{h(e,de())};n(ze,e=>{R()?e(Be):e(Ve,-1)}),S(2),A(Re);var He=a(Re,2);A(Le);var Ue=a(Le,2),$=g(Ue),We=a(g($),2),Ge=g(We,!0);A(We),S(2),A($);var Ke=a($,2),qe=t=>{var r=pe(),o=g(r);let s;var c=a(o,2);F(c,17,()=>d(Pe),e=>e.workspace,(t,r)=>{var o=i(),s=_(o),c=t=>{var n=fe();let i;var o=a(g(n),2),s=g(o,!0);A(o),A(n),u(e=>{i=w(n,1,`ws-option svelte-103bhu0`,null,i,{active:p()===d(r).workspace}),O(o,`title`,d(r).workspace),P(s,e)},[()=>Ne(d(r).workspace)]),e(`click`,n,()=>Z(d(r).workspace)),h(t,n)};n(s,e=>{d(r).workspace&&e(c)}),h(t,o)});var l=a(c,4);A(r),u(()=>s=w(o,1,`ws-option svelte-103bhu0`,null,s,{active:!p()})),e(`click`,o,()=>Z(``)),e(`click`,l,Ce),h(t,r)};n(Ke,e=>{d(J)&&e(qe)}),A(Ue);var Je=a(Ue,2),Ye=a(g(Je),2);A(Je);var Xe=a(Je,2);F(g(Xe),17,()=>d(Pe),e=>e.workspace,(r,o)=>{let s=v(()=>d(q).has(d(o).workspace));var c=_e(),l=_(c),f=g(l),p=g(f,!0);A(f);var m=a(f,4),y=g(m,!0);A(m);var x=a(m,2),S=g(x,!0);A(x),A(l);var T=a(l,2),D=r=>{var s=i();F(_(s),17,()=>d(o).sessions.slice(0,8),e=>e.id,(r,i)=>{var o=ge();let s;var c=a(g(o),2),l=g(c),f=n=>{var r=me();C(r),t(r,!0),E(`blur`,r,()=>De(d(i).id)),e(`keydown`,r,e=>Ae(e,d(i).id)),e(`click`,r,e=>e.stopPropagation()),N(r,()=>d(B),e=>j(B,e)),h(n,r)},p=t=>{var n=he(),r=_(n),o=g(r,!0);A(r);var s=a(r,2),c=g(s,!0);A(s),u(e=>{P(o,d(i).title),P(c,e)},[()=>Me(d(i).updated_at)]),e(`dblclick`,r,()=>Ee(d(i))),e(`keydown`,r,()=>{}),h(t,n)};n(l,e=>{d(z)===d(i).id?e(f):e(p,-1)}),A(c);var m=a(c,2);A(o),u(()=>s=w(o,1,`session-item svelte-103bhu0`,null,s,{active:d(i).id===b().params.sessionId})),e(`click`,o,()=>Y(d(i))),e(`keydown`,o,e=>e.key===`Enter`&&Y(d(i))),e(`click`,m,e=>{e.stopPropagation(),ke(d(i).id)}),h(r,o)}),h(r,s)};n(T,e=>{d(s)||e(D)}),u(e=>{P(p,d(s)?`chevron_right`:`expand_more`),P(y,e),P(S,d(o).sessions.length)},[()=>Ne(d(o).workspace)]),e(`click`,l,()=>Te(d(o).workspace)),h(r,c)}),S(2),A(Xe);var Ze=a(Xe,2),Qe=g(Ze);let $e;var et=a(Qe,2),tt=a(et,2),nt=g(tt),rt=g(nt,!0);A(nt),A(tt),A(Ze),A(Q);var it=a(Q,2),at=t=>{var r=be(),i=g(r),o=g(i),s=a(g(o),2),c=g(s,!0);A(s),A(o);var l=a(o,2),f=g(l),p=t=>{var n=ve();e(`click`,n,()=>X(d(K))),h(t,n)};n(f,e=>{d(K)!==d(W)&&e(p)}),F(a(f,2),17,()=>d(G),m,(t,n)=>{var r=ye(),i=a(g(r),2),o=g(i,!0);A(i),A(r),u(()=>P(o,d(n).name)),e(`click`,r,()=>X(d(W)+(d(W).endsWith(`/`)||d(W).endsWith(`\\`)?``:`/`)+d(n).name)),h(t,r)}),A(l);var _=a(l,2),v=g(_),y=a(v,2);A(_),A(i),A(r),u(()=>P(c,d(W))),e(`click`,r,()=>j(U,!1)),e(`click`,i,e=>e.stopPropagation()),e(`click`,v,()=>j(U,!1)),e(`click`,y,we),h(t,r)};n(it,e=>{d(U)&&e(at)}),oe(a(it,2),{get sessions(){return s()},get open(){return d(V)},set open(e){j(V,e,!0)}}),u(e=>{Ie=w(Q,1,`sidebar svelte-103bhu0`,null,Ie,{"mobile-open":I()}),P(Ge,e),$e=w(Qe,1,`footer-link svelte-103bhu0`,null,$e,{active:b().url.pathname===`/settings`}),P(rt,d(H))},[()=>Ne(p())]),e(`click`,He,()=>I(!1)),e(`click`,$,Se),e(`click`,Ye,ce),e(`click`,et,()=>j(V,!0)),e(`click`,tt,je),h(r,Fe),k(),D()}D([`click`,`keydown`,`dblclick`]);var Ce=r(`<style>html, body { overflow: hidden; }</style>`),X=r(`<link rel="icon"/> <link rel="preconnect" href="https://fonts.googleapis.com"/> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""/> <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&amp;family=Noto+Serif+SC:wght@400;700&amp;family=Roboto:wght@300;400;500;700&amp;display=swap" rel="stylesheet"/> <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet"/> <!>`,1),Z=r(`<div class="scrim svelte-12qhfyh"></div>`),we=r(`<div class="app svelte-12qhfyh"><!> <div class="main-wrapper svelte-12qhfyh"><header class="app-header svelte-12qhfyh"><button class="icon-btn svelte-12qhfyh"><span class="material-symbols-rounded">menu</span></button> <a href="/" class="app-title svelte-12qhfyh">Qualia</a> <div class="header-right svelte-12qhfyh"><a href="/" class="icon-btn new-chat-btn svelte-12qhfyh"><span class="material-symbols-rounded">add_comment</span></a></div></header> <main class="svelte-12qhfyh"><!> <!></main></div></div>`);function Te(t,r){M(r,!0);let i=c(!1),l=c(!1);function f(){j(i,!d(i))}function m(){j(i,!1)}async function v(){let e=await fetch(`/api/config`);if(!e.ok)return;let t=await e.json();R.config=t,j(l,t.customBrandIcon===!0);let n=await fetch(`/api/models`);n.ok&&(R.allModels=await n.json())}p(()=>{Y(),v()});var y=we();b(`12qhfyh`,e=>{var t=X(),r=_(t),c=a(r,10),l=e=>{h(e,Ce())};n(c,e=>{d(i)&&e(l)}),u(()=>O(r,`href`,z)),s(()=>{o.title=`Qualia`}),h(e,t)});var x=g(y);Se(x,{get customIcon(){return d(l)},get mobileOpen(){return d(i)},set mobileOpen(e){j(i,e,!0)}});var C=a(x,2),w=g(C),T=g(w);S(4),A(w);var E=a(w,2),D=g(E),N=t=>{var n=Z();e(`click`,n,m),h(t,n)};n(D,e=>{d(i)&&e(N)}),I(a(D,2),()=>r.children),A(E),A(C),A(y),e(`click`,T,f),h(t,y),k()}D([`click`]);export{Te as component};
@@ -0,0 +1 @@
1
+ import{D as e,G as t,L as n,T as r,U as i,W as a,nt as o,ot as s,rt as c,w as l}from"../chunks/B39M1lOz.js";import{a as u,i as d,o as f}from"../chunks/BMcRbUT8.js";import"../chunks/xihTtKlq.js";var p={get data(){return f.data},get error(){return f.error},get form(){return f.form},get params(){return f.params},get route(){return f.route},get state(){return f.state},get status(){return f.status},get url(){return f.url}};Object.defineProperty({get from(){return u.current?u.current.from:null},get to(){return u.current?u.current.to:null},get type(){return u.current?u.current.type:null},get willUnload(){return u.current?u.current.willUnload:null},get delta(){return u.current?u.current.delta:null},get complete(){return u.current?u.current.complete:null}},"current",{get(){throw Error(`Replace navigating.current.<prop> with navigating.<prop>`)}}),d.updated.check;var m=p,h=e(`<h1> </h1> <p> </p>`,1);function g(e,u){c(u,!0);var d=h(),f=a(d),p=i(f,!0);s(f);var g=t(f,2),_=i(g,!0);s(g),n(()=>{l(p,m.status),l(_,m.error?.message)}),r(e,d),o()}export{g as component};
@@ -0,0 +1 @@
1
+ import{C as e,D as t,G as n,J as r,M as i,Q as a,R as o,T as s,U as c,Z as l,nt as u,ot as d,q as f,rt as p}from"../chunks/B39M1lOz.js";import{n as m}from"../chunks/BMcRbUT8.js";import"../chunks/xihTtKlq.js";import"../chunks/BVDlhZK_.js";import{c as h,l as g,r as _,s as v,t as y}from"../chunks/BN2zEB6w.js";import{n as b,t as x}from"../chunks/DAIlYrs_.js";var S=t(`<div class="no-provider-hint svelte-1uha8ag"><span class="material-symbols-rounded hint-icon svelte-1uha8ag">info</span> <span>尚未配置 AI 供应商,请先前往 <a href="/settings" class="hint-link svelte-1uha8ag">设置</a> 添加</span></div>`),C=t(`<div class="root-page svelte-1uha8ag"><div class="welcome-area svelte-1uha8ag"><!> <div class="input-anchor svelte-1uha8ag"><!> <!></div></div></div>`);function w(t,w){p(w,!0);let T=()=>a(y,`$activeWorkspace`,E),[E,D]=l(),O=r(``),k=r(!1),A=r(!1),j=r(!1),M=r(!1),N=r(!1);o(()=>{v(),fetch(`/api/config`).then(e=>e.json()).then(e=>{f(A,e.providers?.length>0),f(j,!0),f(N,e.customBrandIcon===!0)}).catch(()=>{f(j,!0)})});async function P(e){let t=i(O).trim();if(!t||i(k))return;if(i(j)&&!i(A)){f(M,!0);return}f(k,!0),f(O,``),f(M,!1);let n=await _(T());if(!n){f(k,!1);return}g.set(t),h.set(e),m(`/chat/`+n.id)}var F=C(),I=c(F),L=c(I);b(L,{get customIcon(){return i(N)}});var R=n(L,2),z=c(R);x(z,{streaming:!1,queueCount:0,onsend:P,onstop:()=>{},get value(){return i(O)},set value(e){f(O,e,!0)}});var B=n(z,2),V=e=>{s(e,S())};e(B,e=>{i(M)&&e(V)}),d(R),d(I),d(F),s(t,F),u(),D()}export{w as component};
@@ -0,0 +1,4 @@
1
+ import{A as e,C as t,D as n,E as r,G as i,J as a,K as o,L as s,M as c,Q as l,R as u,S as d,T as f,U as p,W as m,X as h,Y as g,Z as _,b as ee,g as v,i as y,k as b,l as x,nt as S,ot as C,q as w,rt as T,w as E,x as D}from"../chunks/B39M1lOz.js";import{n as O}from"../chunks/BMcRbUT8.js";import"../chunks/xihTtKlq.js";import{t as te}from"../chunks/CxmPiQW9.js";import"../chunks/BVDlhZK_.js";import{a as k,c as A,l as j,n as M,o as N,s as P,t as F}from"../chunks/BN2zEB6w.js";import{n as I}from"../chunks/gZTJ0hjf.js";import{n as L,t as ne}from"../chunks/DAIlYrs_.js";import{t as re}from"../chunks/Ir23lSxH.js";var R=n(`<span class="tool-command svelte-87mzaw"> </span>`),z=n(`<div><span class="material-symbols-rounded svelte-87mzaw"> </span> </div>`),B=n(`<div class="tool-args svelte-87mzaw"><pre class="svelte-87mzaw"> </pre></div> <!>`,1),V=n(`<div><div class="tool-header svelte-87mzaw"><span class="material-symbols-rounded tool-icon svelte-87mzaw"> </span> <div class="tool-summary svelte-87mzaw"><span class="tool-name svelte-87mzaw"> </span> <!></div> <span class="material-symbols-rounded expand-icon svelte-87mzaw"> </span></div> <!></div>`);function H(n,r){T(r,!0);let o=y(r,`result`,3,void 0),l=a(!1);function u(e){let t=JSON.stringify(e,null,2);return t.length>200?t.slice(0,200)+`...`:t}let d=h(()=>!!o()),g=h(()=>o()?!o().success:!1),_=h(()=>{let e=r.args.command;if(e)return e.length>60?e.slice(0,60)+`…`:e;let t=Object.keys(r.args);if(t.length===1){let e=String(r.args[t[0]]);return e.length>60?e.slice(0,60)+`…`:e}return``});function ee(){w(l,!c(l))}var b=V();let x;var D=p(b),O=p(D),te=p(O,!0);C(O);var k=i(O,2),A=p(k),j=p(A,!0);C(A);var M=i(A,2),N=e=>{var t=R(),n=p(t,!0);C(t),s(()=>E(n,c(_))),f(e,t)};t(M,e=>{c(_)&&!c(l)&&e(N)}),C(k);var P=i(k,2),F=p(P,!0);C(P),C(D);var I=i(D,2),L=e=>{var n=B(),a=m(n),l=p(a),d=p(l,!0);C(l),C(a);var h=i(a,2),_=e=>{var t=z();let n;var r=p(t),a=p(r,!0);C(r);var l=i(r);C(t),s(()=>{n=v(t,1,`tool-output svelte-87mzaw`,null,n,{"tool-error":c(g)}),E(a,c(g)?`warning`:`terminal`),E(l,` ${o().output??``}`)}),f(e,t)};t(h,e=>{o()&&e(_)}),s(e=>E(d,e),[()=>u(r.args)]),f(e,n)};t(I,e=>{c(l)&&e(L)}),C(b),s(()=>{x=v(b,1,`tool-call svelte-87mzaw`,null,x,{"tool-done":c(d),expanded:c(l)}),E(te,c(g)?`warning`:c(d)?`check_circle`:`pending`),E(j,r.name),E(F,c(l)?`expand_less`:`expand_more`)}),e(`click`,D,ee),f(n,b),S()}b([`click`]);var U=n(`<div class="confirm-inline svelte-ovag81"><div class="confirm-header svelte-ovag81"><span class="material-symbols-rounded confirm-icon svelte-ovag81">gavel</span> <span class="confirm-label svelte-ovag81">需要确认操作</span></div> <p class="confirm-message svelte-ovag81"> </p> <div class="confirm-actions svelte-ovag81"><button class="btn btn-outline svelte-ovag81">拒绝</button> <button class="btn btn-primary svelte-ovag81">允许</button></div></div>`);function W(t,n){T(n,!0);var r=U(),a=i(p(r),2),o=p(a,!0);C(a);var c=i(a,2),l=p(c),u=i(l,2);C(c),C(r),s(()=>E(o,n.message)),e(`click`,l,()=>n.onresolve(n.confirmId,!1)),e(`click`,u,()=>n.onresolve(n.confirmId,!0)),f(t,r),S()}b([`click`]);var G=n(`<span class="reasoning-dot svelte-1okjtiv">●</span>`),K=n(`<div class="reasoning-content svelte-1okjtiv"> </div>`),q=n(`<div><div class="reasoning-header svelte-1okjtiv"><span class="reasoning-label svelte-1okjtiv">Thought</span> <!> <span class="material-symbols-rounded expand-icon svelte-1okjtiv"> </span></div> <!></div>`);function ie(n,r){let o=y(r,`content`,3,``),l=y(r,`done`,3,!1),u=a(!1);function d(){w(u,!c(u))}var m=q();let h;var g=p(m),_=i(p(g),2),ee=e=>{f(e,G())};t(_,e=>{l()||e(ee)});var b=i(_,2),x=p(b,!0);C(b),C(g);var S=i(g,2),T=e=>{var t=K(),n=p(t,!0);C(t),s(()=>E(n,o())),f(e,t)};t(S,e=>{c(u)&&e(T)}),C(m),s(()=>{h=v(m,1,`reasoning svelte-1okjtiv`,null,h,{expanded:c(u),done:l()}),E(x,c(u)?`expand_less`:`expand_more`)}),e(`click`,g,d),f(n,m)}b([`click`]);var J=n(`<div class="message-role svelte-1e5n1dp"> </div>`),ae=n(`<div class="message-content svelte-1e5n1dp"> </div>`),Y=n(`<div class="message-content markdown-body svelte-1e5n1dp"></div>`),oe=n(`<div class="image-block svelte-1e5n1dp"><img alt="上传图片" class="svelte-1e5n1dp"/></div>`),X=n(`<div class="error-recovery svelte-1e5n1dp"><p class="recovery-msg svelte-1e5n1dp"> </p> <div class="recovery-actions svelte-1e5n1dp"><button class="btn-recovery svelte-1e5n1dp"><span class="material-symbols-rounded svelte-1e5n1dp">refresh</span> 重试</button> <button class="btn-recovery btn-recovery-secondary svelte-1e5n1dp"><span class="material-symbols-rounded svelte-1e5n1dp">undo</span> 回退</button></div></div>`),se=n(`<span class="cursor svelte-1e5n1dp">|</span>`),Z=n(`<span class="confirm-label svelte-1e5n1dp">确认?</span>`),ce=n(`<div class="msg-actions svelte-1e5n1dp"><button class="action-btn svelte-1e5n1dp" title="复制"><span class="material-symbols-rounded svelte-1e5n1dp">content_copy</span></button> <button class="action-btn svelte-1e5n1dp" title="分叉"><span class="material-symbols-rounded svelte-1e5n1dp">call_split</span></button> <button title="回退到此"><span class="material-symbols-rounded svelte-1e5n1dp">undo</span> <!></button></div>`),le=n(`<div><div class="message-body svelte-1e5n1dp"><!> <!> <!> <!></div></div>`);function ue(n,o){T(o,!0);let l=h(()=>o.message.role===`error`?`错误`:`Qualia`),u=new Map,g=a(!1),_=null;function y(){return o.message.blocks.filter(e=>e.type===`text`).map(e=>e.content).join(`
2
+ `)}async function b(){try{await navigator.clipboard.writeText(y())}catch{}}function O(){c(g)?(_&&clearTimeout(_),w(g,!1),o.onrollback?.(o.message.id)):(w(g,!0),_=setTimeout(()=>{w(g,!1)},3e3))}function te(e){let t=u.get(e);if(t)return t;let n=re(e);return u.set(e,n),n}function k(e,t){return e.type!==`text`||o.message.done?!1:t===o.message.blocks.length-1}function A(e,t){o.onconfirm?.(e,t)}function j(){o.onfork?.(o.message.id)}var M=le();let N;var P=p(M),F=p(P),I=e=>{var t=J(),n=p(t,!0);C(t),s(()=>E(n,c(l))),f(e,t)};t(F,e=>{o.message.role!==`user`&&e(I)});var L=i(F,2);D(L,17,()=>o.message.blocks,d,(n,a,l)=>{var u=r(),d=m(u),g=e=>{var n=r(),i=m(n),o=e=>{var t=ae(),n=p(t,!0);C(t),s(()=>E(n,c(a).content)),f(e,t)},u=h(()=>k(c(a),l)),d=e=>{var t=Y();ee(t,()=>te(c(a).content),!0),C(t),f(e,t)};t(i,e=>{c(u)?e(o):e(d,-1)}),f(e,n)},_=e=>{var t=oe(),n=p(t);C(t),s(()=>x(n,`src`,c(a).url)),f(e,t)},v=e=>{ie(e,{get content(){return c(a).content},get done(){return o.message.done}})},y=e=>{H(e,{get name(){return c(a).name},get args(){return c(a).args},get result(){return c(a).result}})},b=e=>{W(e,{get confirmId(){return c(a).confirmId},get message(){return c(a).message},onresolve:A})},S=t=>{var n=X(),r=p(n),l=p(r,!0);C(r);var u=i(r,2),d=p(u),m=i(d,2);C(u),C(n),s(()=>E(l,c(a).message)),e(`click`,d,()=>o.onrecovery?.(`retry`)),e(`click`,m,()=>o.onrecovery?.(`rollback`)),f(t,n)};t(d,e=>{c(a).type===`text`?e(g):c(a).type===`image`?e(_,1):c(a).type===`reasoning`?e(v,2):c(a).type===`tool`?e(y,3):c(a).type===`confirm`?e(b,4):c(a).type===`error_recovery`&&e(S,5)}),f(n,u)});var ne=i(L,2),R=e=>{f(e,se())};t(ne,e=>{o.message.done||e(R)});var z=i(ne,2),B=n=>{var r=ce(),a=p(r),o=i(a,2),l=i(o,2);let u;var d=i(p(l),2),m=e=>{f(e,Z())};t(d,e=>{c(g)&&e(m)}),C(l),C(r),s(()=>u=v(l,1,`action-btn svelte-1e5n1dp`,null,u,{confirm:c(g)})),e(`click`,a,b),e(`click`,o,j),e(`click`,l,O),f(n,r)};t(z,e=>{o.message.role===`user`&&o.message.done&&e(B)}),C(P),C(M),s(()=>N=v(M,1,`message-row svelte-1e5n1dp`,null,N,{user:o.message.role===`user`,error:o.message.role===`error`})),f(n,M),S()}b([`click`]);var de=n(`<span class="stats-pct svelte-1ca3w4l"> </span>`),fe=n(`<span class="stats-sep svelte-1ca3w4l">/</span> <span class="stats-max svelte-1ca3w4l"> </span> <!>`,1),pe=n(`<div class="stats-line svelte-1ca3w4l"><span class="stats-label svelte-1ca3w4l">Token</span> <span class="stats-value svelte-1ca3w4l"> </span> <!></div>`),me=n(`<button class="scroll-btn svelte-1ca3w4l"><span class="material-symbols-rounded svelte-1ca3w4l">arrow_downward</span></button>`),he=n(`<div class="chat-container svelte-1ca3w4l"><div><!> <!> <!></div> <!> <div class="input-anchor svelte-1ca3w4l"><!></div></div>`);function ge(n,r){T(r,!0);let d=()=>l(te,`$page`,x),ee=()=>l(j,`$pendingFirstMessage`,x),y=()=>l(A,`$pendingFirstImages`,x),b=()=>l(F,`$activeWorkspace`,x),[x,re]=_(),R=h(()=>d().params.sessionId),z=a(o([])),B=a(``),V=a(!1),H=a(null),U=new Map,W=a(0),G=o([]),K=null,q=null,ie=a(!0),J=a(``),ae=a(o([])),Y=a(void 0),oe=a(``),X=a(void 0),se=a(!1),Z=h(()=>{let e=0;for(let t=c(z).length-1;t>=0;t--){let n=c(z)[t];if(n.role===`assistant`&&n.usage){e=n.usage.total_tokens;break}}let t=c(X)&&e>0?(e/c(X)*100).toFixed(1):null;return{total:e,pct:t}});u(()=>{P()}),u(()=>{let e=I.allModels.find(e=>e.id===I.config?.activeModel);e?.contextWindow&&w(X,e.contextWindow,!0),w(se,I.config?.customBrandIcon===!0)}),u(()=>{c(R)&&c(R)!==c(oe)&&(w(oe,c(R),!0),w(z,[],!0),w(H,null),N(c(R)).then(e=>{if(d().params.sessionId!==c(R))return;w(z,le(e),!0),ve();let t=ee(),n=y();t&&e.length===0?(j.set(``),A.set([]),$({id:crypto.randomUUID(),text:t,images:n??[]})):t&&(j.set(``),A.set([]),w(B,t,!0),g(W))}))});function ce(e){if(e.startsWith(`[`))try{return JSON.parse(e).map(e=>e.type===`text`?{type:`text`,content:e.text}:e.type===`image_url`?{type:`image`,url:e.image_url.url,detail:e.image_url.detail}:{type:`text`,content:``})}catch{}return[{type:`text`,content:e}]}function le(e){let t=[];for(let n of e)if(n.role!==`system`){if(n.role===`user`){let e=ce(n.content);t.push({id:n.id,role:`user`,blocks:e,done:!0})}else if(n.role===`assistant`){let e=[];if(n.reasoning_content&&e.push({type:`reasoning`,content:n.reasoning_content}),n.content&&e.push({type:`text`,content:n.content}),n.tool_calls)for(let t of n.tool_calls){let n={};try{n=JSON.parse(t.function.arguments)}catch{}e.push({type:`tool`,name:t.function.name,args:n})}t.push({id:n.id,role:`assistant`,blocks:e,done:!0,usage:n.usage})}else if(n.role===`tool`){let e=t[t.length-1];if(e?.role===`assistant`)for(let t=e.blocks.length-1;t>=0;t--){let r=e.blocks[t];if(r.type===`tool`&&!r.result){r.result={success:!0,output:n.content};break}}}}return t}function ge(){if(!c(Y))return!0;let{scrollHeight:e,scrollTop:t,clientHeight:n}=c(Y);return e-t-n<150}function _e(){w(ie,ge(),!0)}function Q(){requestAnimationFrame(()=>{!c(Y)||!ge()||(c(Y).scrollTop=c(Y).scrollHeight)})}function ve(){w(ie,!0),requestAnimationFrame(()=>{c(Y)&&c(Y).scrollTo({top:c(Y).scrollHeight,behavior:`smooth`})})}u(()=>{let e=document.querySelector(`main`);if(e)return w(Y,e,!0),e.addEventListener(`scroll`,_e,{passive:!0}),()=>e.removeEventListener(`scroll`,_e)});function ye(){c(H)&&(c(H).done=!0,w(H,null)),K=null,q=null,w(V,!1),g(W),Q(),G.length>0&&$(G.shift())}function be(){K?.abort(),q?.cancel().catch(()=>{}),q=null}function xe(e,t){for(let t of c(z)){let n=t.blocks.findIndex(t=>t.type===`confirm`&&t.confirmId===e);if(n!==-1){t.blocks.splice(n,1);break}}fetch(`/api/confirm`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({confirmId:e,approved:t})});let n=U.get(e);n&&(U.delete(e),n())}function Se(e){let t=c(z).find(e=>e.blocks.some(e=>e.type===`error_recovery`));if(t){let e=c(z).indexOf(t);e!==-1&&c(z).splice(e,1)}e===`retry`?c(J)&&$({id:crypto.randomUUID(),text:c(J),images:c(ae)},!0):(w(B,c(J),!0),g(W))}async function Ce(e){c(V)&&(be(),await new Promise(e=>setTimeout(e,100)));let t=c(z).findIndex(t=>t.id===e);if(t===-1)return;let n=c(z)[t].blocks.filter(e=>e.type===`text`).map(e=>e.content).join(`
3
+ `);t<c(z).length-1&&c(z).splice(t+1),c(z).splice(t,1),fetch(`/api/messages`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`deleteFrom`,sessionId:c(R),messageId:e})}).catch(()=>{}),w(B,n,!0),g(W)}async function $(e,t=!1){let n=e?.text?.trim(),r=e?.images??[];if(!n||!e)return;let i=e.id;if(c(V)){t||(G.push({id:i,text:n,images:[...r]}),fetch(`/api/steer`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:c(R),messageId:i,message:n})}).catch(()=>{}));return}if(w(J,n,!0),w(ae,[...r],!0),!t){let e=[];for(let t of r)e.push({type:`image`,url:t.url,detail:t.detail});e.push({type:`text`,content:n}),c(z).push({id:i,role:`user`,blocks:e,done:!0}),ve()}w(V,!0);let a=new AbortController;K=a,q=null;try{let e={sessionId:c(R),message:n,workspace:b()};t||(e.clientMessageId=i),r.length>0&&(e.images=r.map(e=>({url:e.url,detail:e.detail||`auto`})));let o=await fetch(`/api/chat`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:a.signal});if(!o.ok){let e=await o.json().catch(()=>({error:`请求失败`}));c(z).push({id:crypto.randomUUID(),role:`error`,blocks:[{type:`text`,content:e.error||`请求失败`}],done:!0}),ye();return}let s=o.headers.get(`X-Session-Id`);if(s&&s!==c(R)){M(s),O(`/chat/`+s,{replaceState:!0});return}else s&&M(s);let l=o.body.getReader();q=l;let u=new TextDecoder,d=``;for(;;){let{done:e,value:t}=await l.read();if(e)break;d+=u.decode(t,{stream:!0});let n=d.split(`
4
+ `);d=n.pop()||``;for(let e of n){let t=e.trim();if(!t||!t.startsWith(`data:`))continue;let n=t.slice(5).trim();try{await Te(JSON.parse(n))}catch{}}}ye()}catch(e){if(e.name===`AbortError`){c(H)&&(c(H).done=!0,w(H,null)),K=null,q=null,w(V,!1),g(W),G.length>0&&$(G.shift());return}c(z).push({id:crypto.randomUUID(),role:`error`,blocks:[{type:`text`,content:e.message||`连接失败`}],done:!0}),ye()}}async function we(e){if(c(V)||!c(R))return;let t=await k(c(R),e);t&&(O(`/chat/`+t.newSessionId,{replaceState:!1}),j.set(t.draftContent),A.set([]))}async function Te(e){switch(e.type){case`content`:{let t=e.text;if(!c(H))w(H,{id:crypto.randomUUID(),role:`assistant`,blocks:[{type:`text`,content:t}],done:!1},!0),c(z).push(c(H));else{let e=c(H).blocks,n=e[e.length-1];n&&n.type===`text`?n.content+=t:e.push({type:`text`,content:t})}Q();break}case`reasoning`:{let t=e.text;if(!c(H))w(H,{id:crypto.randomUUID(),role:`assistant`,blocks:[{type:`reasoning`,content:t}],done:!1},!0),c(z).push(c(H));else{let e=c(H).blocks,n=e[e.length-1];n&&n.type===`reasoning`?n.content+=t:e.push({type:`reasoning`,content:t})}Q();break}case`tool_call`:c(H)||(w(H,{id:crypto.randomUUID(),role:`assistant`,blocks:[],done:!1},!0),c(z).push(c(H))),c(H).blocks.push({type:`tool`,name:e.name,args:e.args});break;case`tool_result`:{c(H)||(w(H,{id:crypto.randomUUID(),role:`assistant`,blocks:[],done:!1},!0),c(z).push(c(H)));let t=c(H).blocks;for(let n=t.length-1;n>=0;n--){let r=t[n];if(r.type===`tool`&&!r.result&&r.name===e.name){r.result={success:e.success,output:e.output};break}}Q();break}case`tool_execution_update`:{let t=e.name,n=e.text,r=!1;if(c(H)){for(let e=c(H).blocks.length-1;e>=0;e--){let i=c(H).blocks[e];if(i.type===`tool`&&i.name===t){i.result||={success:!0,output:``},i.result={...i.result,output:i.result.output+n},r=!0;break}}r&&w(z,[...c(z)],!0)}Q();break}case`confirm_required`:{let t=e.confirmId,n=e.confirmation?.reason||`需要确认此操作`;c(H)||(w(H,{id:crypto.randomUUID(),role:`assistant`,blocks:[],done:!1},!0),c(z).push(c(H))),c(H).blocks.push({type:`confirm`,confirmId:t,message:n}),await new Promise(e=>{U.set(t,e)});break}case`error`:c(z).push({id:crypto.randomUUID(),role:`error`,blocks:[{type:`text`,content:e.message}],done:!0}),Q();break;case`steering_consumed`:{let t=e.messageId,n=G.findIndex(e=>e.id===t);n!==-1&&G.splice(n,1);break}case`forked`:e.newSessionId&&(M(e.newSessionId),O(`/chat/`+e.newSessionId,{replaceState:!0}));break;case`retrying`:if(c(H)){let e=c(z).indexOf(c(H));e!==-1&&c(z).splice(e,1),w(H,null)}break;case`retry_exhausted`:if(c(H)){let e=c(z).indexOf(c(H));e!==-1&&c(z).splice(e,1),w(H,null)}w(H,{id:crypto.randomUUID(),role:`assistant`,blocks:[{type:`error_recovery`,message:e.message}],done:!0},!0),c(z).push(c(H)),w(H,null),w(V,!1),g(W);break;case`done`:c(H)&&e.usage&&(c(H).usage=e.usage),e.contextWindow&&w(X,e.contextWindow,!0);break}}var Ee=he(),De=p(Ee);let Oe;var ke=p(De),Ae=e=>{L(e,{get customIcon(){return c(se)}})};t(ke,e=>{c(z).length===0&&e(Ae)});var je=i(ke,2);D(je,17,()=>c(z),e=>e.id,(e,t)=>{ue(e,{get message(){return c(t)},onconfirm:xe,onrecovery:Se,onrollback:Ce,onfork:we})});var Me=i(je,2),Ne=e=>{var n=pe(),r=i(p(n),2),a=p(r,!0);C(r);var o=i(r,2),l=e=>{var n=fe(),r=i(m(n),2),a=p(r,!0);C(r);var o=i(r,2),l=e=>{var t=de(),n=p(t);C(t),s(()=>E(n,`(${c(Z).pct??``}%)`)),f(e,t)};t(o,e=>{c(Z).pct&&e(l)}),s(()=>E(a,c(X))),f(e,n)};t(o,e=>{c(X)&&e(l)}),C(n),s(()=>E(a,c(Z).total)),f(e,n)};t(Me,e=>{c(Z).total>0&&e(Ne)}),C(De);var Pe=i(De,2),Fe=t=>{var n=me();e(`click`,n,ve),f(t,n)};t(Pe,e=>{!c(ie)&&c(V)&&e(Fe)});var Ie=i(Pe,2);ne(p(Ie),{get streaming(){return c(V)},get queueCount(){return G.length},onsend:e=>{let t={id:crypto.randomUUID(),text:c(B),images:e};w(B,``),g(W),$(t)},onstop:be,get focusTrigger(){return c(W)},get value(){return c(B)},set value(e){w(B,e,!0)}}),C(Ie),C(Ee),s(()=>Oe=v(De,1,`messages svelte-1ca3w4l`,null,Oe,{welcome:c(z).length===0})),f(n,Ee),S(),re()}b([`click`]);export{ge as component};
@@ -0,0 +1 @@
1
+ import{A as e,C as t,D as n,G as r,J as i,L as a,M as o,Q as s,R as c,T as l,U as u,W as d,X as f,Y as p,Z as m,b as h,k as g,nt as _,ot as v,q as y,rt as b,w as x,x as S}from"../chunks/B39M1lOz.js";import{n as C}from"../chunks/BMcRbUT8.js";import"../chunks/xihTtKlq.js";import"../chunks/BVDlhZK_.js";import{s as w,u as T}from"../chunks/BN2zEB6w.js";import{t as E}from"../chunks/Ir23lSxH.js";var D=n(`<div class="empty-state svelte-192mfm1"><span class="material-symbols-rounded empty-icon svelte-192mfm1">chat_bubble</span> <p class="svelte-192mfm1">暂无对话记录</p></div>`),O=n(`<div class="record-summary svelte-192mfm1"></div>`),k=n(`<button class="record-card svelte-192mfm1"><div class="record-header svelte-192mfm1"><span class="record-title svelte-192mfm1"> </span> <span class="record-time svelte-192mfm1"> </span></div> <!></button>`),A=n(`<div class="pagination svelte-192mfm1"><button class="page-btn svelte-192mfm1"><span class="material-symbols-rounded">chevron_left</span></button> <span class="page-info svelte-192mfm1"> </span> <button class="page-btn svelte-192mfm1"><span class="material-symbols-rounded">chevron_right</span></button></div>`),j=n(`<div class="record-list svelte-192mfm1"></div> <!>`,1),M=n(`<div class="records-page svelte-192mfm1"><div class="records-inner svelte-192mfm1"><header class="records-header svelte-192mfm1"><button class="back-btn svelte-192mfm1"><span class="material-symbols-rounded">arrow_back</span></button> <h1 class="svelte-192mfm1">对话记录</h1> <span class="record-count svelte-192mfm1"> </span></header> <!></div></div>`);function N(n,g){b(g,!0);let N=()=>s(T,`$sessions`,P),[P,F]=m(),I=i(1),L=f(()=>Math.max(1,Math.ceil(N().length/20))),R=f(()=>{o(I)>o(L)&&y(I,o(L),!0);let e=(o(I)-1)*20;return N().slice(e,e+20)});c(()=>{w()});function z(e){C(`/chat/`+e.id)}function B(e){let t=new Date(e),n=new Date().getTime()-t.getTime(),r=t.toLocaleTimeString(`zh-CN`,{hour:`2-digit`,minute:`2-digit`});return n<864e5?`今天 ${r}`:n<1728e5?`昨天 ${r}`:t.toLocaleDateString(`zh-CN`,{year:`numeric`,month:`long`,day:`numeric`})+` `+r}function V(){o(I)>1&&p(I,-1)}function H(){o(I)<o(L)&&p(I)}var U=M(),W=u(U),G=u(W),K=u(G),q=r(K,4),J=u(q,!0);v(q),v(G);var Y=r(G,2),X=e=>{l(e,D())},Z=n=>{var i=j(),s=d(i);S(s,21,()=>o(R),e=>e.id,(n,i)=>{var s=k(),c=u(s),d=u(c),f=u(d,!0);v(d);var p=r(d,2),m=u(p,!0);v(p),v(c);var g=r(c,2),_=e=>{var t=O();h(t,()=>E(o(i).summary),!0),v(t),l(e,t)};t(g,e=>{o(i).summary&&e(_)}),v(s),a(e=>{x(f,o(i).title),x(m,e)},[()=>B(o(i).updated_at)]),e(`click`,s,()=>z(o(i))),l(n,s)}),v(s);var c=r(s,2),f=t=>{var n=A(),i=u(n),s=r(i,2),c=u(s);v(s);var d=r(s,2);v(n),a(()=>{i.disabled=o(I)<=1,x(c,`${o(I)??``} / ${o(L)??``}`),d.disabled=o(I)>=o(L)}),e(`click`,i,V),e(`click`,d,H),l(t,n)};t(c,e=>{o(L)>1&&e(f)}),l(n,i)};t(Y,e=>{N().length===0?e(X):e(Z,-1)}),v(W),v(U),a(e=>x(J,e),[()=>o(R).length>0?`${(o(I)-1)*20+1}–${Math.min(o(I)*20,N().length)} / ${N().length}`:``]),e(`click`,K,()=>history.back()),l(n,U),_(),F()}g([`click`]);export{N as component};
@@ -0,0 +1,10 @@
1
+ import{A as e,C as t,D as n,E as r,G as i,J as a,K as o,L as s,M as c,O as l,R as u,S as d,T as f,U as p,V as m,W as h,a as g,at as _,c as v,d as y,f as b,g as x,h as S,i as C,j as w,k as T,l as E,nt as D,o as O,ot as k,q as A,rt as j,s as M,u as N,w as P,x as F}from"../chunks/B39M1lOz.js";import"../chunks/xihTtKlq.js";import{s as I}from"../chunks/BN2zEB6w.js";import{n as L}from"../chunks/gZTJ0hjf.js";var R=n(`<section class="section svelte-ux4set"><h2 class="svelte-ux4set">常规</h2> <div class="setting-row svelte-ux4set"><div class="setting-label"><div class="setting-title svelte-ux4set">对话存储</div> <div class="setting-desc svelte-ux4set"><!></div></div> <button aria-label="切换存储开关"><span class="toggle-knob svelte-ux4set"></span></button></div></section>`);function z(n,r){j(r,!0);let a=C(r,`enabled`,11,!1);var o=R(),c=i(p(o),2),u=p(c),d=i(p(u),2),m=p(d),h=e=>{f(e,l(`已开启 — 对话历史持久化到本地数据库`))},g=e=>{f(e,l(`已关闭 — 数据仅保存在内存,重启后丢失(适合开发测试)`))};t(m,e=>{a()?e(h):e(g,-1)}),k(d),k(u);var _=i(u,2);let v;k(c),k(o),s(()=>v=x(_,1,`toggle svelte-ux4set`,null,v,{on:a()})),e(`click`,_,function(...e){r.ontoggle?.apply(this,e)}),f(n,o),D()}T([`click`]);var B=`你是 Qualia,一个运行在用户本地环境中的虚拟 AI 伙伴。
2
+
3
+ ## 行为准则
4
+
5
+ 1. 使用中文回复,代码和命令使用原文
6
+ 2. 称呼用户为「你」,保持友好亲近的语气
7
+ 3. 修改代码前先读取文件内容
8
+ 4. 执行可能有副作用的命令前先说明目的
9
+ 5. 遇到需要用户确认的操作时等待确认后再执行
10
+ 6. 回复简洁直接,避免不必要的前言后语`,V=n(`<section class="section svelte-1cqdm0h"><h2 class="svelte-1cqdm0h">系统提示词</h2> <p class="section-desc svelte-1cqdm0h">定义 Qualia 的角色和行为准则,将作为每条对话的 system prompt 发送给模型。</p> <textarea class="prompt-editor svelte-1cqdm0h" placeholder="输入系统提示词..."></textarea> <div class="prompt-actions svelte-1cqdm0h"><span class="prompt-hint svelte-1cqdm0h"> </span> <div class="prompt-actions-right svelte-1cqdm0h"><button type="button" class="btn svelte-1cqdm0h">恢复默认</button> <button class="btn btn-primary svelte-1cqdm0h">保存提示词</button></div></div></section>`);function H(t,n){j(n,!0);let r=C(n,`systemPrompt`,15,``);function a(){r(B)}var o=V(),c=i(p(o),4);m(c),E(c,`rows`,10);var l=i(c,2),u=p(l),d=p(u);k(u);var h=i(u,2),g=p(h),_=i(g,2);k(h),k(l),k(o),s(()=>{P(d,`${(r()?.length||0)??``} 字符`),g.disabled=r()===B}),M(c,r),e(`click`,g,a),e(`click`,_,function(...e){n.onsave?.apply(this,e)}),f(t,o),D()}T([`click`]);var U=n(`<div class="msg msg-error svelte-1pave8a"> </div>`),W=n(`<p class="msg svelte-1pave8a">加载中...</p>`),G=n(`<p class="msg svelte-1pave8a">尚未配置供应商,请添加一个开始使用</p>`),K=n(`<div class="provider-card svelte-1pave8a"><div class="provider-info"><div class="provider-name svelte-1pave8a"> </div> <div class="provider-meta svelte-1pave8a"><span> </span> <span> </span></div></div> <div class="provider-actions svelte-1pave8a"><button class="btn btn-sm svelte-1pave8a">编辑</button> <button class="btn btn-sm btn-danger svelte-1pave8a">删除</button></div></div>`),q=n(`<div class="provider-list svelte-1pave8a"></div>`),J=n(`<label class="svelte-1pave8a">Ollama 地址 <input type="text" placeholder="http://localhost:11434" required="" class="svelte-1pave8a"/></label>`),Y=n(`<div class="modal-overlay svelte-1pave8a" role="dialog" tabindex="-1"><div class="modal svelte-1pave8a" role="document" tabindex="-1"><h3 class="svelte-1pave8a"> </h3> <form method="post" class="svelte-1pave8a"><label class="svelte-1pave8a">供应商类型 <select name="type" class="svelte-1pave8a"><option>OpenAI 兼容</option><option>DeepSeek</option><option>Xiaomi MiMo</option><option>Ollama</option></select></label> <label class="svelte-1pave8a">名称 <input name="name" type="text" placeholder="例如:我的 MiMo" required="" class="svelte-1pave8a"/></label> <label class="svelte-1pave8a">API 密钥 <input name="apiKey" type="password" class="svelte-1pave8a"/></label> <!> <label class="svelte-1pave8a">接口地址 <input type="text" required="" class="svelte-1pave8a"/></label> <div class="form-actions svelte-1pave8a"><button type="button" class="btn svelte-1pave8a">取消</button> <button type="submit" class="btn btn-primary svelte-1pave8a"> </button></div></form></div></div>`),X=n(`<section class="section svelte-1pave8a"><div class="section-header svelte-1pave8a"><h2 class="svelte-1pave8a">AI 供应商</h2> <button class="btn btn-primary svelte-1pave8a">+ 添加供应商</button></div> <!> <!></section> <!>`,1);function Z(n,r){j(r,!0);let o={deepseek:`https://api.deepseek.com/v1`,xiaomi:`https://api.xiaomimimo.com/v1`,ollama:`http://localhost:11434/v1`},l=a(``),d=a(!1),m=a(null),g=a(`openai`),_=a(``),x=a(`http://localhost:11434`);u(()=>{c(m)||A(_,o[c(g)]||``,!0)});function S(e){return e.length<=8?`****`:e.slice(0,4)+`****`+e.slice(-4)}function C(){A(m,null),A(g,`openai`),A(_,``),A(x,`http://localhost:11434`),A(d,!0),A(l,``)}function T(e){A(m,e,!0),A(g,e.type||`openai`,!0),A(_,e.baseURL||``,!0),A(x,e.ollamaURL||`http://localhost:11434`,!0),A(d,!0),A(l,``)}function O(){A(d,!1),A(m,null),A(l,``)}async function M(e){let t=e.target,n=new FormData(t),i=n.get(`type`)||`openai`,a=n.get(`name`).trim(),o=n.get(`apiKey`).trim(),s=c(_).trim();if(!a||!s){A(l,`名称和接口地址必填`);return}if(i!==`ollama`&&!o){A(l,`名称、密钥、接口地址必填`);return}let u={type:i,name:a,apiKey:o||`ollama`,baseURL:s};i===`ollama`&&c(x)&&(u.ollamaURL=c(x).trim());let f=await fetch(`/api/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`addProvider`,provider:u})});if(f.ok){let e=await f.json();r.onconfigchange(e),A(d,!1),A(m,null),t.reset(),A(l,``)}else A(l,(await f.json()).error||`保存供应商失败`,!0)}async function N(e){let t=await fetch(`/api/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`removeProvider`,name:e})});t.ok&&r.onconfigchange(await t.json())}var I=X(),L=h(I),R=p(L),z=i(p(R),2);k(R);var B=i(R,2),V=e=>{var t=U(),n=p(t,!0);k(t),s(()=>P(n,c(l))),f(e,t)};t(B,e=>{c(l)&&e(V)});var H=i(B,2),Z=e=>{f(e,W())},Q=e=>{f(e,G())},ee=t=>{var n=q();F(n,21,()=>r.providers,e=>e.name,(t,n)=>{var r=K(),a=p(r),o=p(a),l=p(o,!0);k(o);var u=i(o,2),d=p(u),m=p(d);k(d);var h=i(d,2),g=p(h);k(h),k(u),k(a);var _=i(a,2),v=p(_),y=i(v,2);k(_),k(r),s(e=>{P(l,c(n).name),P(m,`类型:${c(n).type===`deepseek`?`DeepSeek`:c(n).type===`xiaomi`?`Xiaomi MiMo`:c(n).type===`ollama`?`Ollama`:`OpenAI 兼容`}`),P(g,`密钥:${e??``}`)},[()=>S(c(n).apiKey)]),e(`click`,v,()=>T(c(n))),e(`click`,y,()=>N(c(n).name)),f(t,r)}),k(n),f(t,n)};t(H,e=>{r.loading?e(Z):r.providers.length===0?e(Q,1):e(ee,-1)}),k(L);var te=i(L,2),ne=n=>{var r=Y(),a=p(r),o=p(a),l=p(o,!0);k(o);var u=i(o,2),d=p(u),h=i(p(d)),S=p(h);S.value=S.__value=`openai`;var C=i(S);C.value=C.__value=`deepseek`;var T=i(C);T.value=T.__value=`xiaomi`;var D=i(T);D.value=D.__value=`ollama`,k(h),k(d);var j=i(d,2),N=i(p(j));v(N),k(j);var F=i(j,2),I=i(p(F));v(I),k(F);var L=i(F,2),R=t=>{var n=J(),r=i(p(n));v(r),k(n),s(()=>y(r,c(x))),e(`input`,r,e=>A(x,e.target.value,!0)),f(t,n)};t(L,e=>{c(g)===`ollama`&&e(R)});var z=i(L,2),B=i(p(z));v(B),k(z);var V=i(z,2),H=p(V),U=i(H,2),W=p(U,!0);k(U),k(V),k(u),k(a),k(r),s(()=>{P(l,c(m)?`编辑供应商`:`添加供应商`),y(N,c(m)?.name||``),E(I,`placeholder`,c(g)===`ollama`?`ollama(本地无需密钥)`:`sk-...`),y(I,c(m)?.apiKey||``),I.required=c(g)!==`ollama`,y(B,c(_)),P(W,c(m)?`保存`:`添加`)}),e(`click`,r,O),e(`keydown`,r,e=>e.key===`Escape`&&O()),e(`click`,a,e=>e.stopPropagation()),e(`keydown`,a,e=>e.stopPropagation()),w(`submit`,u,e=>{e.preventDefault(),M(e)}),b(h,()=>c(g),e=>A(g,e)),e(`input`,B,e=>A(_,e.target.value,!0)),e(`click`,H,O),f(n,r)};t(te,e=>{c(d)&&e(ne)}),e(`click`,z,C),f(n,I),D()}T([`click`,`keydown`,`input`]);var Q=n(`<img alt="头像" class="preview-img svelte-1ae3gd2"/>`),ee=n(`<span class="material-symbols-rounded preview-icon svelte-1ae3gd2">spa</span>`),te=n(`<button class="btn btn-sm btn-danger svelte-1ae3gd2">恢复默认</button>`),ne=n(`<div class="upload-area svelte-1ae3gd2"><label class="upload-label svelte-1ae3gd2"><span class="material-symbols-rounded upload-icon svelte-1ae3gd2">image</span> <span>选择图片</span> <input type="file" accept="image/*" class="file-input svelte-1ae3gd2"/></label></div>`),re=n(`<img alt="" class="crop-image svelte-1ae3gd2"/>`),ie=n(`<p class="crop-hint svelte-1ae3gd2">拖拽图片调整位置</p> <div class="crop-container svelte-1ae3gd2"><!> <canvas class="crop-canvas svelte-1ae3gd2"></canvas> <div class="crop-mask svelte-1ae3gd2"></div></div>`,1),ae=n(`<div class="msg msg-error svelte-1ae3gd2"> </div>`),oe=n(`<div class="modal-overlay svelte-1ae3gd2" role="dialog" tabindex="-1"><div class="modal svelte-1ae3gd2" role="document" tabindex="-1"><h3 class="svelte-1ae3gd2">上传头像</h3> <!> <!> <div class="form-actions svelte-1ae3gd2"><button type="button" class="btn svelte-1ae3gd2">取消</button> <button type="button" class="btn btn-primary svelte-1ae3gd2"> </button></div></div></div>`),se=n(`<div class="brand-icon-row svelte-1ae3gd2"><div class="brand-icon-preview svelte-1ae3gd2"><!></div> <div class="brand-icon-actions svelte-1ae3gd2"><button class="btn btn-sm svelte-1ae3gd2">上传图片</button> <!></div></div> <!>`,1);function ce(n,r){j(r,!0);let o=a(!1),l=a(!1),d=a(``),m=a(null),v=a(void 0),y=a(void 0),b=a(void 0),x=a(!1),S=a(0),C=a(0),w=a(0),T=a(0),O=a(1),M=a(!1),N=a(0),F=a(0),I=a(0),L=a(0);function R(){A(o,!0),A(d,``),A(x,!1),A(m,null)}function z(){A(o,!1),A(x,!1),A(m,null),A(l,!1),A(d,``)}function B(e){let t=e.target.files?.[0];if(!t)return;let n=URL.createObjectURL(t);A(m,n,!0),A(x,!1),A(d,``);let r=new Image;r.onload=()=>{A(S,r.naturalWidth,!0),A(C,r.naturalHeight,!0),A(O,Math.max(250/c(S),250/c(C)),!0),A(w,(250-c(S)*c(O))/2),A(T,(250-c(C)*c(O))/2),A(x,!0),requestAnimationFrame(V)},r.src=n}function V(){let e=c(v),t=c(y);if(!e||!t||!c(x))return;let n=e.getContext(`2d`);if(!n)return;let r=c(S)*c(O),i=c(C)*c(O);e.width=250,e.height=250,n.clearRect(0,0,250,250),n.save(),n.beginPath(),n.arc(250/2,250/2,250/2,0,Math.PI*2),n.clip(),n.drawImage(t,c(w),c(T),r,i),n.restore()}u(()=>{c(w),c(T),c(x)&&requestAnimationFrame(V)});function H(e){c(x)&&(A(M,!0),A(N,e.clientX,!0),A(F,e.clientY,!0),A(I,c(w),!0),A(L,c(T),!0),e.target.setPointerCapture(e.pointerId))}function U(e){if(!c(M))return;let t=e.clientX-c(N),n=e.clientY-c(F),r=c(S)*c(O),i=c(C)*c(O),a=c(I)+t,o=c(L)+n;A(w,Math.min(0,Math.max(250-r,a)),!0),A(T,Math.min(0,Math.max(250-i,o)),!0)}function W(){A(M,!1)}function G(){return new Promise(e=>{let t=document.createElement(`canvas`),n=Math.min(c(S),c(C));t.width=n,t.height=n;let r=t.getContext(`2d`),i=n/c(S);r.drawImage(c(y),c(w)/c(O),c(T)/c(O),n/i,n/i,0,0,n,n),t.toBlob(t=>e(t),`image/png`)})}async function K(){if(c(x)){A(l,!0),A(d,``);try{let e=await G(),t=new FormData;t.append(`file`,e,`icon.png`);let n=await fetch(`/api/brand-icon`,{method:`POST`,body:t});n.ok?(z(),r.onsave()):A(d,(await n.json()).error||`上传失败`,!0)}catch{A(d,`上传失败`)}A(l,!1)}}async function q(){try{await fetch(`/api/brand-icon`,{method:`DELETE`}),r.onreset()}catch{}}var J=se(),Y=h(J),X=p(Y),Z=p(X),ce=e=>{var t=Q();E(t,`src`,`/api/brand-icon?t=${Date.now()??``}`),f(e,t)},le=e=>{f(e,ee())};t(Z,e=>{r.customBrandIcon?e(ce):e(le,-1)}),k(X);var $=i(X,2),ue=p($),de=i(ue,2),fe=t=>{var n=te();e(`click`,n,q),f(t,n)};t(de,e=>{r.customBrandIcon&&e(fe)}),k($),k(Y);var pe=i(Y,2),me=n=>{var r=oe(),a=p(r),o=i(p(a),2),u=t=>{var n=ne(),r=p(n),a=i(p(r),4);k(r),k(n),e(`change`,a,B),f(t,n)},S=n=>{var r=ie(),a=i(h(r),2),o=p(a),l=e=>{var t=re();g(t,e=>A(y,e),()=>c(y)),s(()=>E(t,`src`,c(m))),f(e,t)};t(o,e=>{c(m)&&e(l)}),g(i(o,2),e=>A(v,e),()=>c(v)),_(2),k(a),g(a,e=>A(b,e),()=>c(b)),e(`pointerdown`,a,H),e(`pointermove`,a,U),e(`pointerup`,a,W),f(n,r)};t(o,e=>{c(x)?e(S,-1):e(u)});var C=i(o,2),w=e=>{var t=ae(),n=p(t,!0);k(t),s(()=>P(n,c(d))),f(e,t)};t(C,e=>{c(d)&&e(w)});var T=i(C,2),D=p(T),O=i(D,2),j=p(O,!0);k(O),k(T),k(a),k(r),s(()=>{O.disabled=!c(x)||c(l),P(j,c(l)?`上传中...`:`确认上传`)}),e(`click`,r,z),e(`keydown`,r,e=>e.key===`Escape`&&z()),e(`click`,a,e=>e.stopPropagation()),e(`keydown`,a,e=>e.stopPropagation()),e(`click`,D,z),e(`click`,O,K),f(n,r)};t(pe,e=>{c(o)&&e(me)}),e(`click`,ue,R),f(n,J),D()}T([`click`,`keydown`,`change`,`pointerdown`,`pointermove`,`pointerup`]);var le=n(`<div class="setting-row sub svelte-1rhh7gi"><div class="setting-label"><div class="setting-title svelte-1rhh7gi">空闲阈值</div> <div class="setting-desc svelte-1rhh7gi">会话超过此时间未活动时生成摘要</div></div> <div class="number-input svelte-1rhh7gi"><input type="number" min="1" max="48" class="svelte-1rhh7gi"/> <span class="number-unit svelte-1rhh7gi">小时</span></div></div>`),$=n(`<div class="setting-row sub svelte-1rhh7gi"><div class="setting-label"><div class="setting-title svelte-1rhh7gi">执行时刻</div> <div class="setting-desc svelte-1rhh7gi">每天此时自动为所有会话生成摘要和日记</div></div> <div class="number-input svelte-1rhh7gi"><input type="number" min="0" max="23" class="svelte-1rhh7gi"/> <span class="number-unit svelte-1rhh7gi">时</span></div></div>`),ue=n(`<span class="spinner svelte-1rhh7gi"></span> 生成中`,1),de=n(`<div class="setting-row sub svelte-1rhh7gi"><div class="setting-label"><div class="setting-title svelte-1rhh7gi">生成模式</div></div> <div class="mode-group svelte-1rhh7gi"><button>空闲触发</button> <button>定时</button></div></div> <!> <div class="setting-row sub svelte-1rhh7gi"><div class="setting-label"><div class="setting-title svelte-1rhh7gi">扫描间隔</div> <div class="setting-desc svelte-1rhh7gi">后台检查触发条件的频率</div></div> <div class="number-input svelte-1rhh7gi"><input type="number" min="5" max="120" class="svelte-1rhh7gi"/> <span class="number-unit svelte-1rhh7gi">分钟</span></div></div> <div class="setting-row sub action-row svelte-1rhh7gi"><div class="setting-label"><div class="setting-title svelte-1rhh7gi">立即生成</div> <div class="setting-desc svelte-1rhh7gi"><!></div></div> <button class="generate-btn svelte-1rhh7gi"><!></button></div>`,1),fe=n(`<section class="section svelte-1rhh7gi"><h2 class="svelte-1rhh7gi">摘要与日记</h2> <div class="setting-row svelte-1rhh7gi"><div class="setting-label"><div class="setting-title svelte-1rhh7gi">自动生成</div> <div class="setting-desc svelte-1rhh7gi"><!></div></div> <button aria-label="切换自动摘要开关"><span class="toggle-knob svelte-1rhh7gi"></span></button></div> <!></section>`);function pe(n,o){j(o,!0);let u=C(o,`enabled`,15,!1),d=C(o,`mode`,15,`idle`),m=C(o,`idleHours`,15,8),g=C(o,`scheduleHour`,15,2),b=C(o,`intervalMin`,15,30),S=a(!1),w=a(``);function T(){u(!u()),o.onchange()}function E(e){d(e),o.onchange()}function O(e){let t=parseInt(e.target.value);t>=1&&t<=48&&(m(t),o.onchange())}function M(e){let t=parseInt(e.target.value);t>=0&&t<=23&&(g(t),o.onchange())}function N(e){let t=parseInt(e.target.value);t>=5&&t<=120&&(b(t),o.onchange())}async function F(){if(!c(S)){A(S,!0),A(w,``);try{let e=await fetch(`/api/summarize`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({force:!0})});if(e.ok){let t=await e.json();A(w,`已为 ${t.summarized} 个会话生成摘要`+(t.diary?`,并撰写日记`:``))}else A(w,(await e.json()).error||`生成失败`,!0)}catch{A(w,`请求失败`)}finally{A(S,!1)}}}var I=fe(),L=i(p(I),2),R=p(L),z=i(p(R),2),B=p(z),V=e=>{var n=r(),i=h(n),a=e=>{var t=l();s(()=>P(t,`会话空闲 ${m()??``} 小时后自动生成摘要`)),f(e,t)},o=e=>{var t=l();s(()=>P(t,`每天 ${g()??``}:00 自动生成摘要和日记`)),f(e,t)};t(i,e=>{d()===`idle`?e(a):e(o,-1)}),f(e,n)},H=e=>{f(e,l(`已关闭`))};t(B,e=>{u()?e(V):e(H,-1)}),k(z),k(R);var U=i(R,2);let W;k(L);var G=i(L,2),K=n=>{var r=de(),a=h(r),o=i(p(a),2),u=p(o);let C;var T=i(u,2);let D;k(o),k(a);var A=i(a,2),j=t=>{var n=le(),r=i(p(n),2),a=p(r);v(a),_(2),k(r),k(n),s(()=>y(a,m())),e(`input`,a,O),f(t,n)},I=t=>{var n=$(),r=i(p(n),2),a=p(r);v(a),_(2),k(r),k(n),s(()=>y(a,g())),e(`input`,a,M),f(t,n)};t(A,e=>{d()===`idle`?e(j):e(I,-1)});var L=i(A,2),R=i(p(L),2),z=p(R);v(z),_(2),k(R),k(L);var B=i(L,2),V=p(B),H=i(p(V),2),U=p(H),W=e=>{var t=l();s(()=>P(t,c(w))),f(e,t)},G=e=>{f(e,l(`立即为所有有消息的会话生成摘要和日记`))};t(U,e=>{c(w)?e(W):e(G,-1)}),k(H),k(V);var K=i(V,2),q=p(K),J=e=>{var t=ue();_(),f(e,t)},Y=e=>{f(e,l(`执行`))};t(q,e=>{c(S)?e(J):e(Y,-1)}),k(K),k(B),s(()=>{C=x(u,1,`mode-btn svelte-1rhh7gi`,null,C,{active:d()===`idle`}),D=x(T,1,`mode-btn svelte-1rhh7gi`,null,D,{active:d()===`scheduled`}),y(z,b()),K.disabled=c(S)}),e(`click`,u,()=>E(`idle`)),e(`click`,T,()=>E(`scheduled`)),e(`input`,z,N),e(`click`,K,F),f(n,r)};t(G,e=>{u()&&e(K)}),k(I),s(()=>W=x(U,1,`toggle svelte-1rhh7gi`,null,W,{on:u()})),e(`click`,U,T),f(n,I),D()}T([`click`,`input`]);var me=n(`<div class="setting-row sub svelte-12q7l2r"><div class="setting-label"><div class="setting-title svelte-12q7l2r">SearXNG 地址</div> <div class="setting-desc svelte-12q7l2r">自部署的 SearXNG 实例地址,默认 http://localhost:8080</div></div> <div class="url-input-wrap svelte-12q7l2r"><input type="url" class="url-input svelte-12q7l2r" placeholder="http://localhost:8080"/></div></div>`),he=n(`<div class="setting-row sub svelte-12q7l2r"><div class="setting-label"><div class="setting-title svelte-12q7l2r">Tavily API Key</div> <div class="setting-desc svelte-12q7l2r">从 tavily.com 获取,免费额度 1000 次/月</div></div> <div class="url-input-wrap svelte-12q7l2r"><input type="password" class="url-input svelte-12q7l2r" placeholder="tvly-..."/></div></div>`),ge=n(`<div class="setting-row sub svelte-12q7l2r"><div class="setting-label"><div class="setting-title svelte-12q7l2r">搜索后端</div></div> <div class="mode-group svelte-12q7l2r"><button>SearXNG</button> <button>Tavily</button></div></div> <!>`,1),_e=n(`<section class="section svelte-12q7l2r"><h2 class="svelte-12q7l2r">网页搜索</h2> <div class="setting-row svelte-12q7l2r"><div class="setting-label"><div class="setting-title svelte-12q7l2r">启用搜索</div> <div class="setting-desc svelte-12q7l2r">开启后 AI 可通过 web_search 工具联网搜索实时信息</div></div> <button aria-label="切换搜索开关"><span class="toggle-knob svelte-12q7l2r"></span></button></div> <!></section>`);function ve(n,r){j(r,!0);let a=C(r,`enabled`,15,!1),o=C(r,`provider`,15,`searxng`),c=C(r,`searxngURL`,15,`http://localhost:8080`),l=C(r,`tavilyApiKey`,15,``);function u(){a(!a()),r.onchange()}function d(e){o(e),r.onchange()}var m=_e(),g=i(p(m),2),_=i(p(g),2);let y;k(g);var b=i(g,2),S=n=>{var a=ge(),u=h(a),m=i(p(u),2),g=p(m);let _;var y=i(g,2);let b;k(m),k(u);var S=i(u,2),C=t=>{var n=me(),a=i(p(n),2),o=p(a);v(o),k(a),k(n),e(`input`,o,()=>r.onchange()),M(o,c),f(t,n)},w=t=>{var n=he(),a=i(p(n),2),o=p(a);v(o),k(a),k(n),e(`input`,o,()=>r.onchange()),M(o,l),f(t,n)};t(S,e=>{o()===`searxng`?e(C):e(w,-1)}),s(()=>{_=x(g,1,`mode-btn svelte-12q7l2r`,null,_,{active:o()===`searxng`}),b=x(y,1,`mode-btn svelte-12q7l2r`,null,b,{active:o()===`tavily`})}),e(`click`,g,()=>d(`searxng`)),e(`click`,y,()=>d(`tavily`)),f(n,a)};t(b,e=>{a()&&e(S)}),k(m),s(()=>y=x(_,1,`toggle svelte-12q7l2r`,null,y,{on:a()})),e(`click`,_,u),f(n,m),D()}T([`click`,`input`]);var ye=n(`<div class="form-group svelte-zid3hj"><label class="label svelte-zid3hj" for="threshold">触发阈值(token)</label> <div class="input-with-hint svelte-zid3hj"><input id="threshold" type="number" min="50000" step="10000" class="svelte-zid3hj"/> <span class="hint svelte-zid3hj">推荐 256000 ~ 300000。对话总 token 数超过此值后自动续写新会话。</span></div></div>`),be=n(`<section class="section svelte-zid3hj"><h2 class="svelte-zid3hj">上下文压缩</h2> <p class="desc svelte-zid3hj">当对话内容接近上下文窗口极限时,自动生成摘要并创建延续会话。</p> <div class="form-group svelte-zid3hj"><fieldset class="radio-fieldset svelte-zid3hj"><legend class="label svelte-zid3hj">压缩策略</legend> <div class="radio-group svelte-zid3hj"><label class="radio svelte-zid3hj"><input type="radio" name="mode" value="auto" class="svelte-zid3hj"/> <span>使用模型默认上下文窗口</span></label> <label class="radio svelte-zid3hj"><input type="radio" name="mode" value="custom" class="svelte-zid3hj"/> <span>自定义阈值</span></label></div></fieldset></div> <!></section>`);function xe(n,r){j(r,!0);let a=C(r,`mode`,15,`auto`),o=C(r,`threshold`,15,0);var c=be(),l=i(p(c),4),u=p(l),d=i(p(u),2),m=p(d),h=p(m);v(h),_(2),k(m);var g=i(m,2),y=p(g);v(y),_(2),k(g),k(d),k(u),k(l);var b=i(l,2),x=t=>{var n=ye(),a=i(p(n),2),s=p(a);v(s),_(2),k(a),k(n),e(`change`,s,function(...e){r.onchange?.apply(this,e)}),M(s,o),f(t,n)};t(b,e=>{a()===`custom`&&e(x)}),k(c),s(()=>{N(h,a()===`auto`),N(y,a()===`custom`)}),e(`change`,h,()=>{a(`auto`),r.onchange()}),e(`change`,y,()=>{a(`custom`),r.onchange()}),f(n,c),D()}T([`change`]);var Se=n(`<div class="empty svelte-1dy2epu">加载中...</div>`),Ce=n(`<div class="empty svelte-1dy2epu">暂无任务。在对话中让 AI 使用 schedule_task 工具创建定时任务。</div>`),we=n(`<span> </span>`),Te=n(`<div class="task-result svelte-1dy2epu"> </div>`),Ee=n(`<div class="task-error svelte-1dy2epu"> </div>`),De=n(`<button class="action-btn svelte-1dy2epu">暂停</button>`),Oe=n(`<button class="action-btn svelte-1dy2epu">恢复</button>`),ke=n(`<button class="action-btn danger svelte-1dy2epu">删除</button>`),Ae=n(`<div><div class="task-header svelte-1dy2epu"><div class="task-name svelte-1dy2epu"> </div> <span class="task-status svelte-1dy2epu"> </span></div> <div class="task-meta svelte-1dy2epu"><span> </span> <span> </span> <!></div> <div class="task-prompt svelte-1dy2epu"> </div> <!> <!> <div class="task-actions svelte-1dy2epu"><!> <!></div></div>`),je=n(`<div class="task-list svelte-1dy2epu"></div>`),Me=n(`<section class="section svelte-1dy2epu"><h2 class="svelte-1dy2epu">定时任务</h2> <!></section>`);function Ne(n,r){j(r,!0);let l=a(o([])),d=a(!0),m={pending:`等待中`,running:`执行中`,completed:`已完成`,failed:`失败`,paused:`已暂停`},h={pending:`#f59e0b`,running:`#3b82f6`,completed:`#10b981`,failed:`#ef4444`,paused:`#6b7280`};async function g(){try{A(l,(await(await fetch(`/api/tasks`)).json()).tasks||[],!0)}catch{}finally{A(d,!1)}}async function _(e,t){try{(await fetch(`/api/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:e,id:t})})).ok&&(await g(),r.onchange?.())}catch{}}function v(e){return new Date(e).toLocaleString(`zh-CN`,{month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}u(()=>{g()});var y=Me(),b=i(p(y),2),C=e=>{f(e,Se())},w=e=>{f(e,Ce())},T=n=>{var r=je();F(r,21,()=>c(l),e=>e.id,(n,r)=>{var a=Ae();let o;var l=p(a),u=p(l),d=p(u,!0);k(u);var g=i(u,2),y=p(g,!0);k(g),k(l);var b=i(l,2),C=p(b),w=p(C);k(C);var T=i(C,2),E=p(T);k(T);var D=i(T,2),O=e=>{var t=we(),n=p(t);k(t),s(e=>P(n,`完成: ${e??``}`),[()=>v(c(r).completedAt)]),f(e,t)};t(D,e=>{c(r).completedAt&&e(O)}),k(b);var A=i(b,2),j=p(A);k(A);var M=i(A,2),N=e=>{var t=Te(),n=p(t);k(t),s(e=>P(n,`${e??``}${c(r).result.length>200?`...`:``}`),[()=>c(r).result.slice(0,200)]),f(e,t)};t(M,e=>{c(r).result&&e(N)});var F=i(M,2),I=e=>{var t=Ee(),n=p(t);k(t),s(()=>P(n,`错误: ${c(r).error??``}`)),f(e,t)};t(F,e=>{c(r).error&&e(I)});var L=i(F,2),R=p(L),z=t=>{var n=De();e(`click`,n,()=>_(`pause`,c(r).id)),f(t,n)},B=t=>{var n=Oe();e(`click`,n,()=>_(`resume`,c(r).id)),f(t,n)};t(R,e=>{c(r).status===`pending`?e(z):c(r).status===`paused`&&e(B,1)});var V=i(R,2),H=t=>{var n=ke();e(`click`,n,()=>_(`delete`,c(r).id)),f(t,n)};t(V,e=>{c(r).status!==`running`&&e(H)}),k(L),k(a),s((e,t,n)=>{o=x(a,1,`task-item svelte-1dy2epu`,null,o,{completed:c(r).status===`completed`,failed:c(r).status===`failed`}),P(d,c(r).name),S(g,`color: ${(h[c(r).status]||`#6b7280`)??``}`),P(y,m[c(r).status]||c(r).status),P(w,`创建: ${e??``}`),P(E,`计划: ${t??``}`),P(j,`${n??``}${c(r).prompt.length>150?`...`:``}`)},[()=>v(c(r).createdAt),()=>v(c(r).scheduledAt),()=>c(r).prompt.slice(0,150)]),f(n,a)}),k(r),f(n,r)};t(b,e=>{c(d)?e(C):c(l).length===0?e(w,1):e(T,-1)}),k(y),f(n,y),D()}T([`click`]);var Pe=n(`<span class="spinner svelte-6kj6xl"></span> 发送中`,1),Fe=n(`<div class="setting-row sub svelte-6kj6xl"><div class="setting-label"><div class="setting-title svelte-6kj6xl">SMTP 服务器</div> <div class="setting-desc svelte-6kj6xl">发送邮件的服务器地址和端口</div></div> <div class="inline-inputs svelte-6kj6xl"><input type="text" placeholder="smtp.qq.com" class="svelte-6kj6xl"/> <input type="number" class="svelte-6kj6xl"/> <label class="checkbox-label svelte-6kj6xl"><input type="checkbox" class="svelte-6kj6xl"/> <span>SSL</span></label></div></div> <div class="setting-row sub svelte-6kj6xl"><div class="setting-label"><div class="setting-title svelte-6kj6xl">发件账号</div></div> <div class="inline-inputs svelte-6kj6xl"><input type="text" placeholder="your@qq.com" class="svelte-6kj6xl"/> <input type="password" placeholder="授权码" class="svelte-6kj6xl"/></div></div> <div class="setting-row sub svelte-6kj6xl"><div class="setting-label"><div class="setting-title svelte-6kj6xl">发件人与收件人</div></div> <div class="inline-inputs svelte-6kj6xl"><input type="text" placeholder="发件人地址" class="svelte-6kj6xl"/> <input type="text" placeholder="收件人地址" class="svelte-6kj6xl"/></div></div> <div class="setting-row sub action-row svelte-6kj6xl"><div class="setting-label"><div class="setting-title svelte-6kj6xl">测试发送</div> <div class="setting-desc svelte-6kj6xl"><!></div></div> <button class="test-btn svelte-6kj6xl"><!></button></div>`,1),Ie=n(`<section class="section svelte-6kj6xl"><h2 class="svelte-6kj6xl">邮件通知</h2> <div class="setting-row svelte-6kj6xl"><div class="setting-label"><div class="setting-title svelte-6kj6xl">启用邮件通知</div> <div class="setting-desc svelte-6kj6xl"><!></div></div> <button aria-label="切换邮件通知开关"><span class="toggle-knob svelte-6kj6xl"></span></button></div> <!></section>`);function Le(n,r){j(r,!0);let o=C(r,`notifications`,15,!1),u=C(r,`smtpHost`,15,``),d=C(r,`smtpPort`,15,465),m=C(r,`smtpSecure`,15,!0),g=C(r,`smtpUser`,15,``),y=C(r,`smtpPass`,15,``),b=C(r,`emailFrom`,15,``),S=C(r,`emailTo`,15,``),w=a(!1),T=a(``);function N(){o(!o()),r.onchange()}function F(){r.onchange()}async function I(){if(!c(w)){A(w,!0),A(T,``);try{let e=await(await fetch(`/api/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`testEmail`,config:{smtpHost:u(),smtpPort:d(),smtpSecure:m(),user:g(),password:y(),from:b(),to:S()}})})).json();A(T,e.success?`测试邮件已发送,请检查收件箱`:e.error||`发送失败`,!0)}catch(e){A(T,`请求失败: `+e.message)}finally{A(w,!1)}}}var L=Ie(),R=i(p(L),2),z=p(R),B=i(p(z),2),V=p(B),H=e=>{f(e,l(`任务完成、摘要生成时通过邮件通知`))},U=e=>{f(e,l(`已关闭`))};t(V,e=>{o()?e(H):e(U,-1)}),k(B),k(z);var W=i(z,2);let G;k(R);var K=i(R,2),q=n=>{var r=Fe(),a=h(r),o=i(p(a),2),x=p(o);v(x);var C=i(x,2);v(C),E(C,`min`,1),E(C,`max`,65535);var D=i(C,2),A=p(D);v(A),_(2),k(D),k(o),k(a);var j=i(a,2),N=i(p(j),2),L=p(N);v(L);var R=i(L,2);v(R),k(N),k(j);var z=i(j,2),B=i(p(z),2),V=p(B);v(V);var H=i(V,2);v(H),k(B),k(z);var U=i(z,2),W=p(U),G=i(p(W),2),K=p(G),q=e=>{var t=l();s(()=>P(t,c(T))),f(e,t)},J=e=>{f(e,l(`发送一封测试邮件以验证配置`))};t(K,e=>{c(T)?e(q):e(J,-1)}),k(G),k(W);var Y=i(W,2),X=p(Y),Z=e=>{var t=Pe();_(),f(e,t)},Q=e=>{f(e,l(`测试`))};t(X,e=>{c(w)?e(Z):e(Q,-1)}),k(Y),k(U),s(()=>Y.disabled=c(w)),e(`input`,x,F),M(x,u),e(`input`,C,F),M(C,d),e(`change`,A,F),O(A,m),e(`input`,L,F),M(L,g),e(`input`,R,F),M(R,y),e(`input`,V,F),M(V,b),e(`input`,H,F),M(H,S),e(`click`,Y,I),f(n,r)};t(K,e=>{o()&&e(q)}),k(L),s(()=>G=x(W,1,`toggle svelte-6kj6xl`,null,G,{on:o()})),e(`click`,W,N),f(n,L),D()}T([`click`,`input`,`change`]);var Re=n(`<div class="setting-row sub svelte-808oqo"><div class="setting-label"><div class="setting-title svelte-808oqo">允许的用户</div> <div class="setting-desc svelte-808oqo">逗号分隔的 chat ID 列表。获取方式:给 Bot 发一条消息,然后访问 <code class="svelte-808oqo">https://api.telegram.org/bot&lt;token&gt;/getUpdates</code></div></div> <div class="input-wrapper svelte-808oqo"><input type="text" placeholder="12345678,87654321" class="svelte-808oqo"/></div></div>`),ze=n(`<div class="setting-row sub svelte-808oqo"><div class="setting-label"><div class="setting-title svelte-808oqo">Bot Token</div> <div class="setting-desc svelte-808oqo">在 <a href="https://t.me/BotFather" target="_blank" rel="noopener" class="svelte-808oqo">@BotFather</a> 创建 Bot 后获取</div></div> <div class="input-wrapper svelte-808oqo"><input type="password" placeholder="123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11" class="svelte-808oqo"/></div></div> <!> <div class="setting-row sub svelte-808oqo"><div class="setting-label"><div class="setting-title svelte-808oqo">连接状态</div> <div class="setting-desc svelte-808oqo">保存配置后重启服务即可连接</div></div> <span class="hint svelte-808oqo">需重启服务生效</span></div>`,1),Be=n(`<section class="section svelte-808oqo"><h2 class="svelte-808oqo">Telegram</h2> <div class="setting-row svelte-808oqo"><div class="setting-label"><div class="setting-title svelte-808oqo">启用 Telegram 接入</div> <div class="setting-desc svelte-808oqo"><!></div></div> <button aria-label="切换 Telegram 开关"><span class="toggle-knob svelte-808oqo"></span></button></div> <!></section>`);function Ve(n,r){j(r,!0);let a=C(r,`enabled`,15,!1),o=C(r,`botToken`,15,``),c=C(r,`allowedUsers`,15,``);function u(){a(!a()),r.onchange()}function d(){r.onchange()}var m=Be(),g=i(p(m),2),y=p(g),b=i(p(y),2),S=p(b),w=e=>{f(e,l(`通过 Telegram Bot 接收消息和发送通知`))},T=e=>{f(e,l(`已关闭`))};t(S,e=>{a()?e(w):e(T,-1)}),k(b),k(y);var E=i(y,2);let O;k(g);var A=i(g,2),N=n=>{var r=ze(),a=h(r),s=i(p(a),2),l=p(s);v(l),k(s),k(a);var u=i(a,2),m=t=>{var n=Re(),r=i(p(n),2),a=p(r);v(a),k(r),k(n),e(`input`,a,d),M(a,c),f(t,n)};t(u,e=>{o()&&e(m)}),_(2),e(`input`,l,d),M(l,o),f(n,r)};t(A,e=>{a()&&e(N)}),k(m),s(()=>O=x(E,1,`toggle svelte-808oqo`,null,O,{on:a()})),e(`click`,E,u),f(n,m),D()}T([`click`,`input`]);var He=n(`<button> </button>`),Ue=n(`<!> <!> <section class="section svelte-1i19ct2"><h2 class="svelte-1i19ct2">头像</h2> <!></section>`,1),We=n(`<!> <!>`,1),Ge=n(`<div class="settings svelte-1i19ct2"><div class="settings-inner svelte-1i19ct2"><h1 class="svelte-1i19ct2">设置</h1> <nav class="tab-bar svelte-1i19ct2"></nav> <div class="tab-content"><!></div></div></div>`);function Ke(n,r){j(r,!0);let l=[{id:`general`,label:`常规`},{id:`provider`,label:`供应商`},{id:`notify`,label:`通知`},{id:`summary`,label:`摘要`},{id:`compress`,label:`压缩`},{id:`search`,label:`搜索`},{id:`tasks`,label:`任务`}],m=a(o({providers:[],activeModel:``,storageEnabled:!1,systemPrompt:``,customBrandIcon:!1,autoSummarize:!0,summaryMode:`idle`,summaryIdleHours:8,summaryScheduleHour:2,summaryIntervalMin:30,compressionMode:`auto`,compressionThreshold:256e3,searchEnabled:!1,searchProvider:`searxng`,searxngURL:`http://localhost:8080`,tavilyApiKey:``,emailNotifications:!1,emailSmtpHost:``,emailSmtpPort:465,emailSmtpSecure:!0,emailSmtpUser:``,emailSmtpPass:``,emailFrom:``,emailTo:``,telegramEnabled:!1,telegramBotToken:``,telegramAllowedUsers:``})),g=a(!0),_=a(`general`);u(()=>{v(),I()});async function v(){A(g,!0);try{let e=await fetch(`/api/config`);e.ok&&A(m,await e.json(),!0)}catch{}A(g,!1)}async function y(){let e={...c(m),storageEnabled:!c(m).storageEnabled},t=await fetch(`/api/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`writeConfig`,config:e})});t.ok&&A(m,await t.json(),!0)}async function b(){let e=await fetch(`/api/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`writeConfig`,config:c(m)})});e.ok&&A(m,await e.json(),!0)}async function S(e){A(m,{...c(m),providers:e.providers,activeModel:e.activeModel},!0),L.config=c(m);let t=await fetch(`/api/models`);t.ok&&(L.allModels=await t.json())}async function C(){let e=await fetch(`/api/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`writeConfig`,config:c(m)})});e.ok&&A(m,await e.json(),!0)}async function w(){let e=await fetch(`/api/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`writeConfig`,config:c(m)})});e.ok&&A(m,await e.json(),!0)}async function T(){let e=await fetch(`/api/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`writeConfig`,config:c(m)})});e.ok&&A(m,await e.json(),!0)}async function E(){let e=await fetch(`/api/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`writeConfig`,config:c(m)})});e.ok&&A(m,await e.json(),!0)}var O=Ge(),M=p(O),N=i(p(M),2);F(N,21,()=>l,d,(t,n)=>{var r=He();let i;var a=p(r,!0);k(r),s(()=>{i=x(r,1,`tab-btn svelte-1i19ct2`,null,i,{active:c(_)===c(n).id}),P(a,c(n).label)}),e(`click`,r,()=>A(_,c(n).id,!0)),f(t,r)}),k(N);var R=i(N,2),B=p(R),V=e=>{var t=Ue(),n=h(t);z(n,{get enabled(){return c(m).storageEnabled},ontoggle:y});var r=i(n,2);H(r,{onsave:b,get systemPrompt(){return c(m).systemPrompt},set systemPrompt(e){c(m).systemPrompt=e}});var a=i(r,2);ce(i(p(a),2),{get customBrandIcon(){return c(m).customBrandIcon},onsave:()=>v(),onreset:()=>v()}),k(a),f(e,t)},U=e=>{Z(e,{get providers(){return c(m).providers},get loading(){return c(g)},onconfigchange:S})},W=e=>{var t=We(),n=h(t);Le(n,{onchange:E,get notifications(){return c(m).emailNotifications},set notifications(e){c(m).emailNotifications=e},get smtpHost(){return c(m).emailSmtpHost},set smtpHost(e){c(m).emailSmtpHost=e},get smtpPort(){return c(m).emailSmtpPort},set smtpPort(e){c(m).emailSmtpPort=e},get smtpSecure(){return c(m).emailSmtpSecure},set smtpSecure(e){c(m).emailSmtpSecure=e},get smtpUser(){return c(m).emailSmtpUser},set smtpUser(e){c(m).emailSmtpUser=e},get smtpPass(){return c(m).emailSmtpPass},set smtpPass(e){c(m).emailSmtpPass=e},get emailFrom(){return c(m).emailFrom},set emailFrom(e){c(m).emailFrom=e},get emailTo(){return c(m).emailTo},set emailTo(e){c(m).emailTo=e}}),Ve(i(n,2),{onchange:E,get enabled(){return c(m).telegramEnabled},set enabled(e){c(m).telegramEnabled=e},get botToken(){return c(m).telegramBotToken},set botToken(e){c(m).telegramBotToken=e},get allowedUsers(){return c(m).telegramAllowedUsers},set allowedUsers(e){c(m).telegramAllowedUsers=e}}),f(e,t)},G=e=>{pe(e,{onchange:C,get enabled(){return c(m).autoSummarize},set enabled(e){c(m).autoSummarize=e},get mode(){return c(m).summaryMode},set mode(e){c(m).summaryMode=e},get idleHours(){return c(m).summaryIdleHours},set idleHours(e){c(m).summaryIdleHours=e},get scheduleHour(){return c(m).summaryScheduleHour},set scheduleHour(e){c(m).summaryScheduleHour=e},get intervalMin(){return c(m).summaryIntervalMin},set intervalMin(e){c(m).summaryIntervalMin=e}})},K=e=>{xe(e,{onchange:T,get mode(){return c(m).compressionMode},set mode(e){c(m).compressionMode=e},get threshold(){return c(m).compressionThreshold},set threshold(e){c(m).compressionThreshold=e}})},q=e=>{ve(e,{onchange:w,get enabled(){return c(m).searchEnabled},set enabled(e){c(m).searchEnabled=e},get provider(){return c(m).searchProvider},set provider(e){c(m).searchProvider=e},get searxngURL(){return c(m).searxngURL},set searxngURL(e){c(m).searxngURL=e},get tavilyApiKey(){return c(m).tavilyApiKey},set tavilyApiKey(e){c(m).tavilyApiKey=e}})},J=e=>{Ne(e,{})};t(B,e=>{c(_)===`general`?e(V):c(_)===`provider`?e(U,1):c(_)===`notify`?e(W,2):c(_)===`summary`?e(G,3):c(_)===`compress`?e(K,4):c(_)===`search`?e(q,5):c(_)===`tasks`&&e(J,6)}),k(R),k(M),k(O),f(n,O),D()}T([`click`]);export{Ke as component};
@@ -0,0 +1 @@
1
+ {"version":"1783078739886"}
@@ -0,0 +1,3 @@
1
+ # allow crawling everything by default
2
+ User-agent: *
3
+ Disallow:
Binary file
Binary file
package/build/env.js ADDED
@@ -0,0 +1,70 @@
1
+ import path from 'node:path';
2
+ import process from 'node:process';
3
+ import { fileURLToPath } from 'node:url';
4
+
5
+ // since env.js is an entrypoint, `dir` will point to the output directory
6
+ const dir = path.dirname(fileURLToPath(import.meta.url));
7
+
8
+ const expected_unprefixed = new Set(['LISTEN_PID', 'LISTEN_FDS']);
9
+
10
+ const env_prefix = "";
11
+
12
+ /**
13
+ * @param {string} name
14
+ * @param {any} [fallback]
15
+ */
16
+ function env(name, fallback) {
17
+ const prefix = expected_unprefixed.has(name) ? '' : env_prefix;
18
+ const prefixed = prefix + name;
19
+ return prefixed in process.env ? process.env[prefixed] : fallback;
20
+ }
21
+
22
+ const integer_regexp = /^\d+$/;
23
+
24
+ /**
25
+ * Throw a consistently-structured parsing error for environment variables.
26
+ * @param {string} name
27
+ * @param {any} value
28
+ * @param {string} description
29
+ * @returns {never}
30
+ */
31
+ function parsing_error(name, value, description) {
32
+ throw new Error(
33
+ `Invalid value for environment variable ${name}: ${JSON.stringify(value)} (${description})`
34
+ );
35
+ }
36
+
37
+ /**
38
+ * Check the environment for a timeout value (non-negative integer) in seconds.
39
+ * @param {string} name
40
+ * @param {number} [fallback]
41
+ * @returns {number | undefined}
42
+ */
43
+ function timeout_env(name, fallback) {
44
+ const raw = env(name, fallback);
45
+ if (!raw) {
46
+ return fallback;
47
+ }
48
+
49
+ if (!integer_regexp.test(raw)) {
50
+ parsing_error(name, raw, 'should be a non-negative integer');
51
+ }
52
+
53
+ const parsed = Number.parseInt(raw, 10);
54
+
55
+ // We don't technically need to check `Number.isNaN` because the value already passed the regexp test.
56
+ // However, just in case there's some new codepath introduced somewhere down the line, it's probably good
57
+ // to stick this in here.
58
+ if (Number.isNaN(parsed)) {
59
+ parsing_error(name, raw, 'should be a non-negative integer');
60
+ }
61
+
62
+ if (parsed < 0) {
63
+ parsing_error(name, raw, 'should be a non-negative integer');
64
+ }
65
+
66
+ return parsed;
67
+ }
68
+
69
+ export { dir, env, env_prefix, timeout_env };
70
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sources":["../.svelte-kit/adapter-node/entries/env.js"],"sourcesContent":["import path from 'node:path';\nimport process from 'node:process';\nimport { fileURLToPath } from 'node:url';\n\n// since env.js is an entrypoint, `dir` will point to the output directory\nconst dir = path.dirname(fileURLToPath(import.meta.url));\n\nconst expected = new Set([\n\t'SOCKET_PATH',\n\t'HOST',\n\t'PORT',\n\t'ORIGIN',\n\t'XFF_DEPTH',\n\t'ADDRESS_HEADER',\n\t'PROTOCOL_HEADER',\n\t'HOST_HEADER',\n\t'PORT_HEADER',\n\t'BODY_SIZE_LIMIT',\n\t'SHUTDOWN_TIMEOUT',\n\t'IDLE_TIMEOUT',\n\t'KEEP_ALIVE_TIMEOUT',\n\t'HEADERS_TIMEOUT'\n]);\n\nconst expected_unprefixed = new Set(['LISTEN_PID', 'LISTEN_FDS']);\n\nconst env_prefix = ENV_PREFIX;\n\nif (env_prefix) {\n\tfor (const name in process.env) {\n\t\tif (name.startsWith(env_prefix)) {\n\t\t\tconst unprefixed = name.slice(env_prefix.length);\n\t\t\tif (!expected.has(unprefixed)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`You should change envPrefix (${env_prefix}) to avoid conflicts with existing environment variables — unexpectedly saw ${name}`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {string} name\n * @param {any} [fallback]\n */\nfunction env(name, fallback) {\n\tconst prefix = expected_unprefixed.has(name) ? '' : env_prefix;\n\tconst prefixed = prefix + name;\n\treturn prefixed in process.env ? process.env[prefixed] : fallback;\n}\n\nconst integer_regexp = /^\\d+$/;\n\n/**\n * Throw a consistently-structured parsing error for environment variables.\n * @param {string} name\n * @param {any} value\n * @param {string} description\n * @returns {never}\n */\nfunction parsing_error(name, value, description) {\n\tthrow new Error(\n\t\t`Invalid value for environment variable ${name}: ${JSON.stringify(value)} (${description})`\n\t);\n}\n\n/**\n * Check the environment for a timeout value (non-negative integer) in seconds.\n * @param {string} name\n * @param {number} [fallback]\n * @returns {number | undefined}\n */\nfunction timeout_env(name, fallback) {\n\tconst raw = env(name, fallback);\n\tif (!raw) {\n\t\treturn fallback;\n\t}\n\n\tif (!integer_regexp.test(raw)) {\n\t\tparsing_error(name, raw, 'should be a non-negative integer');\n\t}\n\n\tconst parsed = Number.parseInt(raw, 10);\n\n\t// We don't technically need to check `Number.isNaN` because the value already passed the regexp test.\n\t// However, just in case there's some new codepath introduced somewhere down the line, it's probably good\n\t// to stick this in here.\n\tif (Number.isNaN(parsed)) {\n\t\tparsing_error(name, raw, 'should be a non-negative integer');\n\t}\n\n\tif (parsed < 0) {\n\t\tparsing_error(name, raw, 'should be a non-negative integer');\n\t}\n\n\treturn parsed;\n}\n\nexport { dir, env, env_prefix, timeout_env };\n"],"names":[],"mappings":";;;;AAIA;AACK,MAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;;AAmBvD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;;AAE5D,MAAC,UAAU,GAAG;;AAenB;AACA;AACA;AACA;AACA,SAAS,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE;AAC7B,CAAC,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;AAC/D,CAAC,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI;AAC/B,CAAC,OAAO,QAAQ,IAAI,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ;AAClE;;AAEA,MAAM,cAAc,GAAG,OAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;AACjD,CAAC,MAAM,IAAI,KAAK;AAChB,EAAE,CAAC,uCAAuC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AAC5F,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE;AACrC,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;AAChC,CAAC,IAAI,CAAC,GAAG,EAAE;AACX,EAAE,OAAO,QAAQ;AACjB,CAAC;;AAED,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAChC,EAAE,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,kCAAkC,CAAC;AAC9D,CAAC;;AAED,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;;AAExC;AACA;AACA;AACA,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC3B,EAAE,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,kCAAkC,CAAC;AAC9D,CAAC;;AAED,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;AACjB,EAAE,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,kCAAkC,CAAC;AAC9D,CAAC;;AAED,CAAC,OAAO,MAAM;AACd;;;;"}
@@ -0,0 +1,17 @@
1
+ import './shims.js';
2
+ import 'node:fs';
3
+ import 'node:path';
4
+ import 'node:process';
5
+ export { h as handler } from './server/chunks/handler-BAQYBQgy.js';
6
+ import './server/chunks/index.js-N7Sh42pC.js';
7
+ import './server/chunks/manifest.js-D2rH2GXr.js';
8
+ import './env.js';
9
+ import 'node:buffer';
10
+ import 'node:crypto';
11
+ import 'node:http';
12
+ import 'node:timers';
13
+ import 'node:querystring';
14
+ import 'node:stream';
15
+ import 'node:url';
16
+ import 'node:module';
17
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
package/build/index.js ADDED
@@ -0,0 +1,140 @@
1
+ import http from 'node:http';
2
+ import fs__default from 'node:fs';
3
+ import process from 'node:process';
4
+ import { p as polka, h as handler, f as format_listening_address } from './server/chunks/handler-BAQYBQgy.js';
5
+ import { env, timeout_env } from './env.js';
6
+ import { rm } from 'node:fs/promises';
7
+ import './shims.js';
8
+ import 'node:buffer';
9
+ import 'node:crypto';
10
+ import 'node:path';
11
+ import 'node:timers';
12
+ import 'node:querystring';
13
+ import 'node:stream';
14
+ import './server/chunks/index.js-N7Sh42pC.js';
15
+ import 'node:module';
16
+ import './server/chunks/manifest.js-D2rH2GXr.js';
17
+ import 'node:url';
18
+
19
+ const path = env('SOCKET_PATH', false);
20
+ const host = env('HOST', '0.0.0.0');
21
+ const port = env('PORT', !path && '3000');
22
+
23
+ const shutdown_timeout = parseInt(env('SHUTDOWN_TIMEOUT', '30'));
24
+ const idle_timeout = parseInt(env('IDLE_TIMEOUT', '0'));
25
+ const listen_pid = parseInt(env('LISTEN_PID', '0'));
26
+ const listen_fds = parseInt(env('LISTEN_FDS', '0'));
27
+ // https://www.freedesktop.org/software/systemd/man/latest/sd_listen_fds.html
28
+ const SD_LISTEN_FDS_START = 3;
29
+
30
+ if (listen_pid !== 0 && listen_pid !== process.pid) {
31
+ throw new Error(`received LISTEN_PID ${listen_pid} but current process id is ${process.pid}`);
32
+ }
33
+ if (listen_fds > 1) {
34
+ throw new Error(
35
+ `only one socket is allowed for socket activation, but LISTEN_FDS was set to ${listen_fds}`
36
+ );
37
+ }
38
+
39
+ const socket_activation = listen_pid === process.pid && listen_fds === 1;
40
+
41
+ let requests = 0;
42
+ /** @type {NodeJS.Timeout | void} */
43
+ let shutdown_timeout_id;
44
+ /** @type {NodeJS.Timeout | void} */
45
+ let idle_timeout_id;
46
+
47
+ // Initialize the HTTP server here so that we can set properties before starting to listen.
48
+ // Otherwise, polka delays creating the server until listen() is called. Settings these
49
+ // properties after the server has started listening could lead to race conditions.
50
+ const httpServer = http.createServer();
51
+
52
+ const keep_alive_timeout = timeout_env('KEEP_ALIVE_TIMEOUT');
53
+ if (keep_alive_timeout !== undefined) {
54
+ // Convert the keep-alive timeout from seconds to milliseconds (the unit Node.js expects).
55
+ httpServer.keepAliveTimeout = keep_alive_timeout * 1000;
56
+ }
57
+
58
+ const headers_timeout = timeout_env('HEADERS_TIMEOUT');
59
+ if (headers_timeout !== undefined) {
60
+ // Convert the headers timeout from seconds to milliseconds (the unit Node.js expects).
61
+ httpServer.headersTimeout = headers_timeout * 1000;
62
+ }
63
+
64
+ const server = polka({ server: httpServer }).use(handler);
65
+
66
+ if (socket_activation) {
67
+ server.listen({ fd: SD_LISTEN_FDS_START }, () => {
68
+ console.log(`Listening on file descriptor ${SD_LISTEN_FDS_START}`);
69
+ });
70
+ } else {
71
+ if (path) {
72
+ try {
73
+ if (fs__default.statSync(path).size === 0) {
74
+ await rm(path);
75
+ }
76
+ } catch {
77
+ // ignore
78
+ }
79
+ }
80
+
81
+ server.listen({ path, host, port }, () => {
82
+ console.log(`Listening on ${format_listening_address(path, host, port, httpServer.address())}`);
83
+ });
84
+ }
85
+
86
+ /** @param {'SIGINT' | 'SIGTERM' | 'IDLE'} reason */
87
+ function graceful_shutdown(reason) {
88
+ if (shutdown_timeout_id) return;
89
+
90
+ // If a connection was opened with a keep-alive header close() will wait for the connection to
91
+ // time out rather than close it even if it is not handling any requests, so call this first
92
+ httpServer.closeIdleConnections();
93
+
94
+ httpServer.close((error) => {
95
+ // occurs if the server is already closed
96
+ if (error) return;
97
+
98
+ if (shutdown_timeout_id) {
99
+ clearTimeout(shutdown_timeout_id);
100
+ }
101
+ if (idle_timeout_id) {
102
+ clearTimeout(idle_timeout_id);
103
+ }
104
+
105
+ // @ts-expect-error custom events cannot be typed
106
+ process.emit('sveltekit:shutdown', reason);
107
+ });
108
+
109
+ shutdown_timeout_id = setTimeout(() => httpServer.closeAllConnections(), shutdown_timeout * 1000);
110
+ }
111
+
112
+ httpServer.on(
113
+ 'request',
114
+ /** @param {import('node:http').IncomingMessage} req */
115
+ (req) => {
116
+ requests++;
117
+
118
+ if (socket_activation && idle_timeout_id) {
119
+ idle_timeout_id = clearTimeout(idle_timeout_id);
120
+ }
121
+
122
+ req.on('close', () => {
123
+ requests--;
124
+
125
+ if (shutdown_timeout_id) {
126
+ // close connections as soon as they become idle, so they don't accept new requests
127
+ httpServer.closeIdleConnections();
128
+ }
129
+ if (requests === 0 && socket_activation && idle_timeout) {
130
+ idle_timeout_id = setTimeout(() => graceful_shutdown('IDLE'), idle_timeout * 1000);
131
+ }
132
+ });
133
+ }
134
+ );
135
+
136
+ process.on('SIGTERM', graceful_shutdown);
137
+ process.on('SIGINT', graceful_shutdown);
138
+
139
+ export { host, path, port, server };
140
+ //# sourceMappingURL=index.js.map