@openpalm/ui 0.11.0-rc.2

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 (329) hide show
  1. package/README.md +129 -0
  2. package/build/.openpalm-ui-version +1 -0
  3. package/build/client/_app/immutable/assets/0.BK7X4bPu.css +1 -0
  4. package/build/client/_app/immutable/assets/0.BK7X4bPu.css.br +0 -0
  5. package/build/client/_app/immutable/assets/0.BK7X4bPu.css.gz +0 -0
  6. package/build/client/_app/immutable/assets/4.D9MwgTDo.css +1 -0
  7. package/build/client/_app/immutable/assets/4.D9MwgTDo.css.br +0 -0
  8. package/build/client/_app/immutable/assets/4.D9MwgTDo.css.gz +0 -0
  9. package/build/client/_app/immutable/assets/5.Cj0Mk9Gn.css +1 -0
  10. package/build/client/_app/immutable/assets/5.Cj0Mk9Gn.css.br +0 -0
  11. package/build/client/_app/immutable/assets/5.Cj0Mk9Gn.css.gz +0 -0
  12. package/build/client/_app/immutable/assets/6.DJenXolA.css +1 -0
  13. package/build/client/_app/immutable/assets/6.DJenXolA.css.br +0 -0
  14. package/build/client/_app/immutable/assets/6.DJenXolA.css.gz +0 -0
  15. package/build/client/_app/immutable/assets/7.BHUsSUvX.css +1 -0
  16. package/build/client/_app/immutable/assets/7.BHUsSUvX.css.br +0 -0
  17. package/build/client/_app/immutable/assets/7.BHUsSUvX.css.gz +0 -0
  18. package/build/client/_app/immutable/assets/8.DjrHy5wu.css +1 -0
  19. package/build/client/_app/immutable/assets/8.DjrHy5wu.css.br +0 -0
  20. package/build/client/_app/immutable/assets/8.DjrHy5wu.css.gz +0 -0
  21. package/build/client/_app/immutable/assets/AuthGate.BtJV-xXj.css +1 -0
  22. package/build/client/_app/immutable/assets/AuthGate.BtJV-xXj.css.br +0 -0
  23. package/build/client/_app/immutable/assets/AuthGate.BtJV-xXj.css.gz +0 -0
  24. package/build/client/_app/immutable/assets/VoiceProfileSelector.Dp7tWdKe.css +1 -0
  25. package/build/client/_app/immutable/assets/VoiceProfileSelector.Dp7tWdKe.css.br +0 -0
  26. package/build/client/_app/immutable/assets/VoiceProfileSelector.Dp7tWdKe.css.gz +0 -0
  27. package/build/client/_app/immutable/chunks/BuFlayix.js +1 -0
  28. package/build/client/_app/immutable/chunks/BuFlayix.js.br +0 -0
  29. package/build/client/_app/immutable/chunks/BuFlayix.js.gz +0 -0
  30. package/build/client/_app/immutable/chunks/BwTF6U35.js +3 -0
  31. package/build/client/_app/immutable/chunks/BwTF6U35.js.br +0 -0
  32. package/build/client/_app/immutable/chunks/BwTF6U35.js.gz +0 -0
  33. package/build/client/_app/immutable/chunks/C8qMxft1.js +1 -0
  34. package/build/client/_app/immutable/chunks/C8qMxft1.js.br +0 -0
  35. package/build/client/_app/immutable/chunks/C8qMxft1.js.gz +0 -0
  36. package/build/client/_app/immutable/chunks/Cb_i8bV9.js +1 -0
  37. package/build/client/_app/immutable/chunks/Cb_i8bV9.js.br +0 -0
  38. package/build/client/_app/immutable/chunks/Cb_i8bV9.js.gz +0 -0
  39. package/build/client/_app/immutable/chunks/CzXGhlNF.js +1 -0
  40. package/build/client/_app/immutable/chunks/CzXGhlNF.js.br +0 -0
  41. package/build/client/_app/immutable/chunks/CzXGhlNF.js.gz +0 -0
  42. package/build/client/_app/immutable/chunks/DYskO3Sk.js +5 -0
  43. package/build/client/_app/immutable/chunks/DYskO3Sk.js.br +0 -0
  44. package/build/client/_app/immutable/chunks/DYskO3Sk.js.gz +0 -0
  45. package/build/client/_app/immutable/chunks/ak2ISc8B.js +1 -0
  46. package/build/client/_app/immutable/chunks/ak2ISc8B.js.br +0 -0
  47. package/build/client/_app/immutable/chunks/ak2ISc8B.js.gz +0 -0
  48. package/build/client/_app/immutable/chunks/kNaey6uv.js +1 -0
  49. package/build/client/_app/immutable/chunks/kNaey6uv.js.br +0 -0
  50. package/build/client/_app/immutable/chunks/kNaey6uv.js.gz +0 -0
  51. package/build/client/_app/immutable/chunks/os2NZ37U.js +1 -0
  52. package/build/client/_app/immutable/chunks/os2NZ37U.js.br +1 -0
  53. package/build/client/_app/immutable/chunks/os2NZ37U.js.gz +0 -0
  54. package/build/client/_app/immutable/chunks/xihTtKlq.js +1 -0
  55. package/build/client/_app/immutable/chunks/xihTtKlq.js.br +1 -0
  56. package/build/client/_app/immutable/chunks/xihTtKlq.js.gz +0 -0
  57. package/build/client/_app/immutable/entry/app.C_eSlUyi.js +2 -0
  58. package/build/client/_app/immutable/entry/app.C_eSlUyi.js.br +0 -0
  59. package/build/client/_app/immutable/entry/app.C_eSlUyi.js.gz +0 -0
  60. package/build/client/_app/immutable/entry/start.BAta_Cih.js +1 -0
  61. package/build/client/_app/immutable/entry/start.BAta_Cih.js.br +0 -0
  62. package/build/client/_app/immutable/entry/start.BAta_Cih.js.gz +0 -0
  63. package/build/client/_app/immutable/nodes/0.Bi_of0So.js +1 -0
  64. package/build/client/_app/immutable/nodes/0.Bi_of0So.js.br +0 -0
  65. package/build/client/_app/immutable/nodes/0.Bi_of0So.js.gz +0 -0
  66. package/build/client/_app/immutable/nodes/1.qjZsjpWC.js +1 -0
  67. package/build/client/_app/immutable/nodes/1.qjZsjpWC.js.br +0 -0
  68. package/build/client/_app/immutable/nodes/1.qjZsjpWC.js.gz +0 -0
  69. package/build/client/_app/immutable/nodes/2.ojh8oE7F.js +1 -0
  70. package/build/client/_app/immutable/nodes/2.ojh8oE7F.js.br +0 -0
  71. package/build/client/_app/immutable/nodes/2.ojh8oE7F.js.gz +0 -0
  72. package/build/client/_app/immutable/nodes/3.DeAC3yVJ.js +1 -0
  73. package/build/client/_app/immutable/nodes/3.DeAC3yVJ.js.br +0 -0
  74. package/build/client/_app/immutable/nodes/3.DeAC3yVJ.js.gz +0 -0
  75. package/build/client/_app/immutable/nodes/4.BYtA2xx-.js +19 -0
  76. package/build/client/_app/immutable/nodes/4.BYtA2xx-.js.br +0 -0
  77. package/build/client/_app/immutable/nodes/4.BYtA2xx-.js.gz +0 -0
  78. package/build/client/_app/immutable/nodes/5.ChSoAFFd.js +4 -0
  79. package/build/client/_app/immutable/nodes/5.ChSoAFFd.js.br +0 -0
  80. package/build/client/_app/immutable/nodes/5.ChSoAFFd.js.gz +0 -0
  81. package/build/client/_app/immutable/nodes/6.BRG0vYmH.js +1 -0
  82. package/build/client/_app/immutable/nodes/6.BRG0vYmH.js.br +0 -0
  83. package/build/client/_app/immutable/nodes/6.BRG0vYmH.js.gz +0 -0
  84. package/build/client/_app/immutable/nodes/7.BVvy1f_p.js +15 -0
  85. package/build/client/_app/immutable/nodes/7.BVvy1f_p.js.br +0 -0
  86. package/build/client/_app/immutable/nodes/7.BVvy1f_p.js.gz +0 -0
  87. package/build/client/_app/immutable/nodes/8.Cb4MWMah.js +2 -0
  88. package/build/client/_app/immutable/nodes/8.Cb4MWMah.js.br +0 -0
  89. package/build/client/_app/immutable/nodes/8.Cb4MWMah.js.gz +0 -0
  90. package/build/client/_app/version.json +1 -0
  91. package/build/client/_app/version.json.br +0 -0
  92. package/build/client/_app/version.json.gz +0 -0
  93. package/build/client/banner.png +0 -0
  94. package/build/client/fu-128.png +0 -0
  95. package/build/client/fu.png +0 -0
  96. package/build/client/logo-128.png +0 -0
  97. package/build/client/logo.png +0 -0
  98. package/build/client/setup/wizard.css +1639 -0
  99. package/build/client/setup/wizard.css.br +0 -0
  100. package/build/client/setup/wizard.css.gz +0 -0
  101. package/build/client/wizard-128.png +0 -0
  102. package/build/client/wizard.png +0 -0
  103. package/build/env.js +94 -0
  104. package/build/handler.js +1494 -0
  105. package/build/index.js +345 -0
  106. package/build/server/chunks/0-Dk6RRhi2.js +9 -0
  107. package/build/server/chunks/0-Dk6RRhi2.js.map +1 -0
  108. package/build/server/chunks/1-CWcY3PRs.js +9 -0
  109. package/build/server/chunks/1-CWcY3PRs.js.map +1 -0
  110. package/build/server/chunks/2-C2y4ydWU.js +9 -0
  111. package/build/server/chunks/2-C2y4ydWU.js.map +1 -0
  112. package/build/server/chunks/3-BgeGdVvT.js +23 -0
  113. package/build/server/chunks/3-BgeGdVvT.js.map +1 -0
  114. package/build/server/chunks/4-DeAt_mYc.js +9 -0
  115. package/build/server/chunks/4-DeAt_mYc.js.map +1 -0
  116. package/build/server/chunks/5-qTXiNPEM.js +9 -0
  117. package/build/server/chunks/5-qTXiNPEM.js.map +1 -0
  118. package/build/server/chunks/6-C444Mr69.js +9 -0
  119. package/build/server/chunks/6-C444Mr69.js.map +1 -0
  120. package/build/server/chunks/7-Dg_sVly5.js +9 -0
  121. package/build/server/chunks/7-Dg_sVly5.js.map +1 -0
  122. package/build/server/chunks/8-CF5kn4AY.js +9 -0
  123. package/build/server/chunks/8-CF5kn4AY.js.map +1 -0
  124. package/build/server/chunks/AuthGate-keg7G6rX.js +707 -0
  125. package/build/server/chunks/AuthGate-keg7G6rX.js.map +1 -0
  126. package/build/server/chunks/_helpers-B_lb4-jB.js +74 -0
  127. package/build/server/chunks/_helpers-B_lb4-jB.js.map +1 -0
  128. package/build/server/chunks/_layout.svelte-B93aaRP_.js +11 -0
  129. package/build/server/chunks/_layout.svelte-B93aaRP_.js.map +1 -0
  130. package/build/server/chunks/_layout.svelte-BNWepgTx.js +58 -0
  131. package/build/server/chunks/_layout.svelte-BNWepgTx.js.map +1 -0
  132. package/build/server/chunks/_page.svelte-BP2EdQl3.js +5 -0
  133. package/build/server/chunks/_page.svelte-BP2EdQl3.js.map +1 -0
  134. package/build/server/chunks/_page.svelte-BdYSYjmj.js +67 -0
  135. package/build/server/chunks/_page.svelte-BdYSYjmj.js.map +1 -0
  136. package/build/server/chunks/_page.svelte-BiKY57wg.js +533 -0
  137. package/build/server/chunks/_page.svelte-BiKY57wg.js.map +1 -0
  138. package/build/server/chunks/_page.svelte-CtX_8pMq.js +5528 -0
  139. package/build/server/chunks/_page.svelte-CtX_8pMq.js.map +1 -0
  140. package/build/server/chunks/_page.svelte-D0gMlmzQ.js +104 -0
  141. package/build/server/chunks/_page.svelte-D0gMlmzQ.js.map +1 -0
  142. package/build/server/chunks/_page.svelte-DwMiUmq6.js +107 -0
  143. package/build/server/chunks/_page.svelte-DwMiUmq6.js.map +1 -0
  144. package/build/server/chunks/_server.ts-0FuXkx70.js +56 -0
  145. package/build/server/chunks/_server.ts-0FuXkx70.js.map +1 -0
  146. package/build/server/chunks/_server.ts-33LuQvHu.js +19 -0
  147. package/build/server/chunks/_server.ts-33LuQvHu.js.map +1 -0
  148. package/build/server/chunks/_server.ts-5Q0J3F4-.js +55 -0
  149. package/build/server/chunks/_server.ts-5Q0J3F4-.js.map +1 -0
  150. package/build/server/chunks/_server.ts-AJk0xBLJ.js +46 -0
  151. package/build/server/chunks/_server.ts-AJk0xBLJ.js.map +1 -0
  152. package/build/server/chunks/_server.ts-AQe1PIYE.js +68 -0
  153. package/build/server/chunks/_server.ts-AQe1PIYE.js.map +1 -0
  154. package/build/server/chunks/_server.ts-B0N2Nj7L.js +44 -0
  155. package/build/server/chunks/_server.ts-B0N2Nj7L.js.map +1 -0
  156. package/build/server/chunks/_server.ts-BDBJ6fxs.js +67 -0
  157. package/build/server/chunks/_server.ts-BDBJ6fxs.js.map +1 -0
  158. package/build/server/chunks/_server.ts-BEeaI665.js +79 -0
  159. package/build/server/chunks/_server.ts-BEeaI665.js.map +1 -0
  160. package/build/server/chunks/_server.ts-BM4QuGQf.js +53 -0
  161. package/build/server/chunks/_server.ts-BM4QuGQf.js.map +1 -0
  162. package/build/server/chunks/_server.ts-BSIZMZVn.js +50 -0
  163. package/build/server/chunks/_server.ts-BSIZMZVn.js.map +1 -0
  164. package/build/server/chunks/_server.ts-BV-6Mum8.js +54 -0
  165. package/build/server/chunks/_server.ts-BV-6Mum8.js.map +1 -0
  166. package/build/server/chunks/_server.ts-BdnJF23z.js +44 -0
  167. package/build/server/chunks/_server.ts-BdnJF23z.js.map +1 -0
  168. package/build/server/chunks/_server.ts-Bfy4RFhe.js +41 -0
  169. package/build/server/chunks/_server.ts-Bfy4RFhe.js.map +1 -0
  170. package/build/server/chunks/_server.ts-Bhh33s6N.js +149 -0
  171. package/build/server/chunks/_server.ts-Bhh33s6N.js.map +1 -0
  172. package/build/server/chunks/_server.ts-BiSuK8jN.js +41 -0
  173. package/build/server/chunks/_server.ts-BiSuK8jN.js.map +1 -0
  174. package/build/server/chunks/_server.ts-BjiyoKWK.js +41 -0
  175. package/build/server/chunks/_server.ts-BjiyoKWK.js.map +1 -0
  176. package/build/server/chunks/_server.ts-BnEeEd9g.js +57 -0
  177. package/build/server/chunks/_server.ts-BnEeEd9g.js.map +1 -0
  178. package/build/server/chunks/_server.ts-Bq2dkWvj.js +33 -0
  179. package/build/server/chunks/_server.ts-Bq2dkWvj.js.map +1 -0
  180. package/build/server/chunks/_server.ts-Br16AqpO.js +82 -0
  181. package/build/server/chunks/_server.ts-Br16AqpO.js.map +1 -0
  182. package/build/server/chunks/_server.ts-BsZrddQT.js +200 -0
  183. package/build/server/chunks/_server.ts-BsZrddQT.js.map +1 -0
  184. package/build/server/chunks/_server.ts-Btbzy89u.js +65 -0
  185. package/build/server/chunks/_server.ts-Btbzy89u.js.map +1 -0
  186. package/build/server/chunks/_server.ts-BudQlGOx.js +70 -0
  187. package/build/server/chunks/_server.ts-BudQlGOx.js.map +1 -0
  188. package/build/server/chunks/_server.ts-BxPYakCb.js +59 -0
  189. package/build/server/chunks/_server.ts-BxPYakCb.js.map +1 -0
  190. package/build/server/chunks/_server.ts-ByyRcwFy.js +79 -0
  191. package/build/server/chunks/_server.ts-ByyRcwFy.js.map +1 -0
  192. package/build/server/chunks/_server.ts-C7rtn3mH.js +103 -0
  193. package/build/server/chunks/_server.ts-C7rtn3mH.js.map +1 -0
  194. package/build/server/chunks/_server.ts-C88qd-ju.js +46 -0
  195. package/build/server/chunks/_server.ts-C88qd-ju.js.map +1 -0
  196. package/build/server/chunks/_server.ts-CD6LeslU.js +55 -0
  197. package/build/server/chunks/_server.ts-CD6LeslU.js.map +1 -0
  198. package/build/server/chunks/_server.ts-CDlWxA5S.js +60 -0
  199. package/build/server/chunks/_server.ts-CDlWxA5S.js.map +1 -0
  200. package/build/server/chunks/_server.ts-CGqrfNlv.js +514 -0
  201. package/build/server/chunks/_server.ts-CGqrfNlv.js.map +1 -0
  202. package/build/server/chunks/_server.ts-CGwYZUuw.js +759 -0
  203. package/build/server/chunks/_server.ts-CGwYZUuw.js.map +1 -0
  204. package/build/server/chunks/_server.ts-CHVs0yya.js +54 -0
  205. package/build/server/chunks/_server.ts-CHVs0yya.js.map +1 -0
  206. package/build/server/chunks/_server.ts-CMEY6oQe.js +121 -0
  207. package/build/server/chunks/_server.ts-CMEY6oQe.js.map +1 -0
  208. package/build/server/chunks/_server.ts-CS73tiTY.js +63 -0
  209. package/build/server/chunks/_server.ts-CS73tiTY.js.map +1 -0
  210. package/build/server/chunks/_server.ts-CWwgmo8z.js +33 -0
  211. package/build/server/chunks/_server.ts-CWwgmo8z.js.map +1 -0
  212. package/build/server/chunks/_server.ts-CXzZeGlQ.js +55 -0
  213. package/build/server/chunks/_server.ts-CXzZeGlQ.js.map +1 -0
  214. package/build/server/chunks/_server.ts-C_kseo_y.js +72 -0
  215. package/build/server/chunks/_server.ts-C_kseo_y.js.map +1 -0
  216. package/build/server/chunks/_server.ts-Cbk-UThV.js +73 -0
  217. package/build/server/chunks/_server.ts-Cbk-UThV.js.map +1 -0
  218. package/build/server/chunks/_server.ts-CboRRTK1.js +139 -0
  219. package/build/server/chunks/_server.ts-CboRRTK1.js.map +1 -0
  220. package/build/server/chunks/_server.ts-CgD8-EFl.js +52 -0
  221. package/build/server/chunks/_server.ts-CgD8-EFl.js.map +1 -0
  222. package/build/server/chunks/_server.ts-Ci-q0BiD.js +79 -0
  223. package/build/server/chunks/_server.ts-Ci-q0BiD.js.map +1 -0
  224. package/build/server/chunks/_server.ts-Cn7ahHlk.js +44 -0
  225. package/build/server/chunks/_server.ts-Cn7ahHlk.js.map +1 -0
  226. package/build/server/chunks/_server.ts-Cy36-qGT.js +60 -0
  227. package/build/server/chunks/_server.ts-Cy36-qGT.js.map +1 -0
  228. package/build/server/chunks/_server.ts-CyFZ9OZQ.js +97 -0
  229. package/build/server/chunks/_server.ts-CyFZ9OZQ.js.map +1 -0
  230. package/build/server/chunks/_server.ts-D-UAqhor.js +33 -0
  231. package/build/server/chunks/_server.ts-D-UAqhor.js.map +1 -0
  232. package/build/server/chunks/_server.ts-D1cb1hmF.js +90 -0
  233. package/build/server/chunks/_server.ts-D1cb1hmF.js.map +1 -0
  234. package/build/server/chunks/_server.ts-D33gvU5B.js +65 -0
  235. package/build/server/chunks/_server.ts-D33gvU5B.js.map +1 -0
  236. package/build/server/chunks/_server.ts-DDwiNChJ.js +88 -0
  237. package/build/server/chunks/_server.ts-DDwiNChJ.js.map +1 -0
  238. package/build/server/chunks/_server.ts-DEnxvwcJ.js +46 -0
  239. package/build/server/chunks/_server.ts-DEnxvwcJ.js.map +1 -0
  240. package/build/server/chunks/_server.ts-DHXmcRrP.js +41 -0
  241. package/build/server/chunks/_server.ts-DHXmcRrP.js.map +1 -0
  242. package/build/server/chunks/_server.ts-DQxY-pHZ.js +64 -0
  243. package/build/server/chunks/_server.ts-DQxY-pHZ.js.map +1 -0
  244. package/build/server/chunks/_server.ts-DXNJ2LJu.js +83 -0
  245. package/build/server/chunks/_server.ts-DXNJ2LJu.js.map +1 -0
  246. package/build/server/chunks/_server.ts-Dbly1Fe-.js +96 -0
  247. package/build/server/chunks/_server.ts-Dbly1Fe-.js.map +1 -0
  248. package/build/server/chunks/_server.ts-DffjWMNC.js +53 -0
  249. package/build/server/chunks/_server.ts-DffjWMNC.js.map +1 -0
  250. package/build/server/chunks/_server.ts-Di-8UJYw.js +40 -0
  251. package/build/server/chunks/_server.ts-Di-8UJYw.js.map +1 -0
  252. package/build/server/chunks/_server.ts-DsEzCr9k.js +109 -0
  253. package/build/server/chunks/_server.ts-DsEzCr9k.js.map +1 -0
  254. package/build/server/chunks/_server.ts-DwXd92Ow.js +63 -0
  255. package/build/server/chunks/_server.ts-DwXd92Ow.js.map +1 -0
  256. package/build/server/chunks/_server.ts-DwjjO7L5.js +41 -0
  257. package/build/server/chunks/_server.ts-DwjjO7L5.js.map +1 -0
  258. package/build/server/chunks/_server.ts-DyEbcQS0.js +62 -0
  259. package/build/server/chunks/_server.ts-DyEbcQS0.js.map +1 -0
  260. package/build/server/chunks/_server.ts-HxcM6xQA.js +70 -0
  261. package/build/server/chunks/_server.ts-HxcM6xQA.js.map +1 -0
  262. package/build/server/chunks/_server.ts-JItoNB1Z.js +57 -0
  263. package/build/server/chunks/_server.ts-JItoNB1Z.js.map +1 -0
  264. package/build/server/chunks/_server.ts-KpT_vKKo.js +77 -0
  265. package/build/server/chunks/_server.ts-KpT_vKKo.js.map +1 -0
  266. package/build/server/chunks/_server.ts-WbY7XmtT.js +157 -0
  267. package/build/server/chunks/_server.ts-WbY7XmtT.js.map +1 -0
  268. package/build/server/chunks/_server.ts-Yy0BWsSd.js +70 -0
  269. package/build/server/chunks/_server.ts-Yy0BWsSd.js.map +1 -0
  270. package/build/server/chunks/_server.ts-b9yNYKW6.js +49 -0
  271. package/build/server/chunks/_server.ts-b9yNYKW6.js.map +1 -0
  272. package/build/server/chunks/_server.ts-bAJXjaCc.js +42 -0
  273. package/build/server/chunks/_server.ts-bAJXjaCc.js.map +1 -0
  274. package/build/server/chunks/_server.ts-cwRl-tZ-.js +40 -0
  275. package/build/server/chunks/_server.ts-cwRl-tZ-.js.map +1 -0
  276. package/build/server/chunks/_server.ts-hMTx0DC3.js +159 -0
  277. package/build/server/chunks/_server.ts-hMTx0DC3.js.map +1 -0
  278. package/build/server/chunks/_server.ts-l_HoZ2_I.js +163 -0
  279. package/build/server/chunks/_server.ts-l_HoZ2_I.js.map +1 -0
  280. package/build/server/chunks/_server.ts-uLRX2uy0.js +107 -0
  281. package/build/server/chunks/_server.ts-uLRX2uy0.js.map +1 -0
  282. package/build/server/chunks/_server.ts-uWfb47S6.js +204 -0
  283. package/build/server/chunks/_server.ts-uWfb47S6.js.map +1 -0
  284. package/build/server/chunks/addon-helpers-Bnj3aKJ2.js +49 -0
  285. package/build/server/chunks/addon-helpers-Bnj3aKJ2.js.map +1 -0
  286. package/build/server/chunks/chunk-CLZ62Ad-.js +18 -0
  287. package/build/server/chunks/chunk-CLZ62Ad-.js.map +1 -0
  288. package/build/server/chunks/coercion-TNFJisCC.js +34 -0
  289. package/build/server/chunks/coercion-TNFJisCC.js.map +1 -0
  290. package/build/server/chunks/config-CEYPfvQh.js +121 -0
  291. package/build/server/chunks/config-CEYPfvQh.js.map +1 -0
  292. package/build/server/chunks/dev-DjANv7AF.js +4389 -0
  293. package/build/server/chunks/dev-DjANv7AF.js.map +1 -0
  294. package/build/server/chunks/docker-sGFTjRfy.js +20 -0
  295. package/build/server/chunks/docker-sGFTjRfy.js.map +1 -0
  296. package/build/server/chunks/endpoints-L7Wjvq44.js +340 -0
  297. package/build/server/chunks/endpoints-L7Wjvq44.js.map +1 -0
  298. package/build/server/chunks/environment-BnT49Gi3.js +36 -0
  299. package/build/server/chunks/environment-BnT49Gi3.js.map +1 -0
  300. package/build/server/chunks/error.svelte-PJnhZZCy.js +16 -0
  301. package/build/server/chunks/error.svelte-PJnhZZCy.js.map +1 -0
  302. package/build/server/chunks/exports-D1quPX8S.js +124 -0
  303. package/build/server/chunks/exports-D1quPX8S.js.map +1 -0
  304. package/build/server/chunks/helpers-5jd3ccud.js +226 -0
  305. package/build/server/chunks/helpers-5jd3ccud.js.map +1 -0
  306. package/build/server/chunks/hooks.server-Al9-eO5K.js +82 -0
  307. package/build/server/chunks/hooks.server-Al9-eO5K.js.map +1 -0
  308. package/build/server/chunks/http-D5xo_m60.js +31 -0
  309. package/build/server/chunks/http-D5xo_m60.js.map +1 -0
  310. package/build/server/chunks/internal-CJBOAkaQ.js +1544 -0
  311. package/build/server/chunks/internal-CJBOAkaQ.js.map +1 -0
  312. package/build/server/chunks/serial-queue-D9FEpYVv.js +22 -0
  313. package/build/server/chunks/serial-queue-D9FEpYVv.js.map +1 -0
  314. package/build/server/chunks/setup-deploy-UKTSVAC0.js +529 -0
  315. package/build/server/chunks/setup-deploy-UKTSVAC0.js.map +1 -0
  316. package/build/server/chunks/src-FpMyngcw.js +14064 -0
  317. package/build/server/chunks/src-FpMyngcw.js.map +1 -0
  318. package/build/server/chunks/state-BI-lJPhE.js +203 -0
  319. package/build/server/chunks/state-BI-lJPhE.js.map +1 -0
  320. package/build/server/chunks/utils-BSRjJDrZ.js +150 -0
  321. package/build/server/chunks/utils-BSRjJDrZ.js.map +1 -0
  322. package/build/server/chunks/voice-state.svelte-CQp8u0bn.js +437 -0
  323. package/build/server/chunks/voice-state.svelte-CQp8u0bn.js.map +1 -0
  324. package/build/server/index.js +4359 -0
  325. package/build/server/index.js.map +1 -0
  326. package/build/server/manifest.js +570 -0
  327. package/build/server/manifest.js.map +1 -0
  328. package/build/shims.js +32 -0
  329. package/package.json +61 -0
@@ -0,0 +1,707 @@
1
+ import { v as version } from './environment-BnT49Gi3.js';
2
+ import { d as attr, p as escape_html, m as derived, n as ensure_array_like, e as attr_class } from './dev-DjANv7AF.js';
3
+ import { o as onDestroy, p as page } from './state-BI-lJPhE.js';
4
+ import { g as fetchEndpoints, m as setActiveEndpoint, l as listSessions, k as getSessionMessages, c as createSession, s as sendChatMessage, v as voiceState, p as speakText, q as stopSpeaking, d as destroyVoice } from './voice-state.svelte-CQp8u0bn.js';
5
+
6
+ //#region src/lib/chat/session-events.ts
7
+ var INITIAL_BACKOFF_MS = 1e3;
8
+ var MAX_BACKOFF_MS = 3e4;
9
+ var STREAM_URL = "/proxy/assistant/event";
10
+ /**
11
+ * Parse one `\n\n`-delimited SSE frame. Multi-line `data:` fields are
12
+ * concatenated with `\n` per the SSE spec.
13
+ */
14
+ function parseFrame(chunk) {
15
+ const frame = {};
16
+ const dataLines = [];
17
+ for (const rawLine of chunk.split("\n")) {
18
+ if (!rawLine || rawLine.startsWith(":")) continue;
19
+ if (rawLine.startsWith("data:")) dataLines.push(rawLine.replace(/^data:\s?/, ""));
20
+ else if (rawLine.startsWith("event:")) frame.event = rawLine.replace(/^event:\s?/, "");
21
+ else if (rawLine.startsWith("id:")) frame.id = rawLine.replace(/^id:\s?/, "");
22
+ }
23
+ if (dataLines.length > 0) frame.data = dataLines.join("\n");
24
+ return frame;
25
+ }
26
+ function dispatch(handlers, payload) {
27
+ const info = payload.properties?.info;
28
+ const id = info?.id;
29
+ if (!id) return;
30
+ switch (payload.type) {
31
+ case "session.created":
32
+ handlers.onCreated(id);
33
+ return;
34
+ case "session.updated":
35
+ handlers.onUpdated(id, {
36
+ title: info?.title,
37
+ updatedAt: info?.time?.updated
38
+ });
39
+ return;
40
+ case "session.deleted":
41
+ handlers.onDeleted(id);
42
+ return;
43
+ default: return;
44
+ }
45
+ }
46
+ /**
47
+ * Open an SSE connection to `/proxy/assistant/event` and dispatch
48
+ * session-scoped events. Returns an unsubscribe function that aborts the
49
+ * stream and prevents reconnection.
50
+ */
51
+ function subscribeSessionEvents(handlers) {
52
+ let stopped = false;
53
+ let controller = new AbortController();
54
+ let lastEventId;
55
+ const sleep = (ms) => new Promise((resolve) => {
56
+ const timer = setTimeout(resolve, ms);
57
+ controller.signal.addEventListener("abort", () => {
58
+ clearTimeout(timer);
59
+ resolve();
60
+ }, { once: true });
61
+ });
62
+ async function readStream() {
63
+ const headers = { accept: "text/event-stream" };
64
+ if (lastEventId !== void 0) headers["Last-Event-ID"] = lastEventId;
65
+ const response = await fetch(STREAM_URL, {
66
+ method: "GET",
67
+ headers,
68
+ credentials: "include",
69
+ signal: controller.signal
70
+ });
71
+ if (!response.ok || !response.body) throw new Error(`SSE stream failed: ${response.status} ${response.statusText}`);
72
+ handlers.onConnect?.();
73
+ const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
74
+ let buffer = "";
75
+ try {
76
+ while (true) {
77
+ const { done, value } = await reader.read();
78
+ if (done) break;
79
+ buffer += value;
80
+ const chunks = buffer.split("\n\n");
81
+ buffer = chunks.pop() ?? "";
82
+ for (const chunk of chunks) {
83
+ if (!chunk) continue;
84
+ const frame = parseFrame(chunk);
85
+ if (frame.id !== void 0) lastEventId = frame.id;
86
+ if (!frame.data) continue;
87
+ let payload;
88
+ try {
89
+ payload = JSON.parse(frame.data);
90
+ } catch (err) {
91
+ console.warn("[session-events] Bad JSON in SSE frame", err);
92
+ continue;
93
+ }
94
+ dispatch(handlers, payload);
95
+ }
96
+ }
97
+ } finally {
98
+ try {
99
+ reader.releaseLock();
100
+ } catch {}
101
+ }
102
+ }
103
+ (async () => {
104
+ let attempt = 0;
105
+ while (!stopped) try {
106
+ attempt++;
107
+ await readStream();
108
+ attempt = 0;
109
+ if (!stopped) await sleep(500);
110
+ } catch (err) {
111
+ if (stopped) return;
112
+ const error = err instanceof Error ? err : new Error(String(err));
113
+ if (error.name !== "AbortError") {
114
+ console.warn("[session-events] SSE error, reconnecting", error);
115
+ handlers.onDisconnect?.(error);
116
+ }
117
+ await sleep(Math.min(INITIAL_BACKOFF_MS * 2 ** Math.max(0, attempt - 1), MAX_BACKOFF_MS));
118
+ if (controller.signal.aborted && !stopped) controller = new AbortController();
119
+ }
120
+ })();
121
+ return () => {
122
+ stopped = true;
123
+ try {
124
+ controller.abort();
125
+ } catch {}
126
+ };
127
+ }
128
+ //#endregion
129
+ //#region src/lib/chat/chat-state.svelte.ts
130
+ function emptyEndpointState() {
131
+ return {
132
+ sessions: [],
133
+ sessionsLoaded: false,
134
+ sessionsLoading: false,
135
+ sessionsError: "",
136
+ activeSessionId: null
137
+ };
138
+ }
139
+ var ChatService = class {
140
+ /**
141
+ * Per-endpoint session cache. Reassigned on every mutation so Svelte 5
142
+ * picks up the change. Never mutate the existing Map in place.
143
+ */
144
+ byEndpoint = /* @__PURE__ */ new Map();
145
+ /**
146
+ * Mirrored from `endpointsService.activeId` via `onEndpointChanged()`
147
+ * so the chat layer doesn't have to import the endpoint store.
148
+ */
149
+ activeEndpointId = "default";
150
+ /** Messages for the currently rendered session only. */
151
+ entries = [];
152
+ entriesLoading = false;
153
+ sending = false;
154
+ error = "";
155
+ /**
156
+ * Set true while the SSE event stream is connected. Surfaced by the
157
+ * SessionPicker as a tiny green/gray dot so the operator can see at a
158
+ * glance whether live updates are flowing.
159
+ */
160
+ liveConnected = false;
161
+ /**
162
+ * Active SSE subscription handle. Reassigned on every endpoint switch.
163
+ * Plain field (not `$state`) — only the chat service touches it.
164
+ */
165
+ _unsubscribeEvents = null;
166
+ #activeSessionId = derived(() => this.byEndpoint.get(this.activeEndpointId)?.activeSessionId ?? null);
167
+ get activeSessionId() {
168
+ return this.#activeSessionId();
169
+ }
170
+ set activeSessionId($$value) {
171
+ return this.#activeSessionId($$value);
172
+ }
173
+ setEndpointState(id, patch) {
174
+ const next = {
175
+ ...this.byEndpoint.get(id) ?? emptyEndpointState(),
176
+ ...patch
177
+ };
178
+ this.byEndpoint = new Map(this.byEndpoint).set(id, next);
179
+ return next;
180
+ }
181
+ /**
182
+ * Handle an endpoint switch: load sessions, restore prior or pick
183
+ * newest, fetch messages. Mid-generation switches are blocked.
184
+ */
185
+ async onEndpointChanged(id) {
186
+ if (this.sending) {
187
+ this.error = "Wait for the current reply to finish before switching.";
188
+ return;
189
+ }
190
+ this.activeEndpointId = id;
191
+ this.entries = [];
192
+ this.error = "";
193
+ if (!this.byEndpoint.get(id)?.sessionsLoaded) await this.loadSessions();
194
+ const state = this.byEndpoint.get(id) ?? emptyEndpointState();
195
+ const sessions = state.sessions;
196
+ const previous = state.activeSessionId;
197
+ let nextSessionId = null;
198
+ if (previous && sessions.some((s) => s.id === previous)) nextSessionId = previous;
199
+ else if (sessions.length > 0) nextSessionId = sessions[0].id;
200
+ if (nextSessionId !== state.activeSessionId) this.setEndpointState(id, { activeSessionId: nextSessionId });
201
+ if (nextSessionId) await this.openSession(nextSessionId);
202
+ this._resubscribeEvents();
203
+ }
204
+ /**
205
+ * Tear down any prior SSE subscription and open a new one. Handlers
206
+ * dispatch session.created / updated / deleted into the per-endpoint
207
+ * cache, mirroring out-of-band changes (CLI, other clients).
208
+ */
209
+ _resubscribeEvents() {
210
+ if (this._unsubscribeEvents) {
211
+ try {
212
+ this._unsubscribeEvents();
213
+ } catch (err) {
214
+ console.warn("[chat] failed to unsubscribe from previous event stream", err);
215
+ }
216
+ this._unsubscribeEvents = null;
217
+ }
218
+ this.liveConnected = false;
219
+ this._unsubscribeEvents = subscribeSessionEvents({
220
+ onCreated: (id) => {
221
+ this._onSessionCreated(id);
222
+ },
223
+ onUpdated: (id, info) => {
224
+ this._onSessionUpdated(id, info);
225
+ },
226
+ onDeleted: (id) => {
227
+ this._onSessionDeleted(id);
228
+ },
229
+ onConnect: () => {
230
+ this.liveConnected = true;
231
+ },
232
+ onDisconnect: () => {
233
+ this.liveConnected = false;
234
+ }
235
+ });
236
+ }
237
+ /**
238
+ * A session was created out-of-band — prepend to the active endpoint's
239
+ * list if not already known. Do not auto-switch to it: the user owns
240
+ * navigation.
241
+ */
242
+ _onSessionCreated(sessionId) {
243
+ const endpointId = this.activeEndpointId;
244
+ const prev = this.byEndpoint.get(endpointId) ?? emptyEndpointState();
245
+ if (prev.sessions.some((s) => s.id === sessionId)) return;
246
+ const now = Date.now();
247
+ const summary = {
248
+ id: sessionId,
249
+ title: "",
250
+ createdAt: now,
251
+ updatedAt: now
252
+ };
253
+ this.setEndpointState(endpointId, {
254
+ sessions: [summary, ...prev.sessions],
255
+ sessionsLoaded: true
256
+ });
257
+ }
258
+ /**
259
+ * A session was touched out-of-band — patch its updatedAt (and title if
260
+ * the event carries one) and re-sort. Do NOT refetch messages: if the
261
+ * user is viewing this session, leave the in-memory entries alone for
262
+ * v1. A follow-up phase can reconcile message deltas via the assistant
263
+ * event stream.
264
+ */
265
+ _onSessionUpdated(sessionId, info) {
266
+ const endpointId = this.activeEndpointId;
267
+ const prev = this.byEndpoint.get(endpointId);
268
+ if (!prev) return;
269
+ const idx = prev.sessions.findIndex((s) => s.id === sessionId);
270
+ if (idx === -1) return;
271
+ const existing = prev.sessions[idx];
272
+ const sessions = [{
273
+ ...existing,
274
+ title: info?.title ?? existing.title,
275
+ updatedAt: info?.updatedAt ?? Date.now()
276
+ }, ...prev.sessions.filter((s) => s.id !== sessionId)];
277
+ sessions.sort((a, b) => b.updatedAt - a.updatedAt);
278
+ this.setEndpointState(endpointId, { sessions });
279
+ }
280
+ /**
281
+ * A session was deleted out-of-band. Remove it from the list; if it was
282
+ * the active session, fall back to the newest remaining session (or
283
+ * null) and reload its messages.
284
+ */
285
+ async _onSessionDeleted(sessionId) {
286
+ const endpointId = this.activeEndpointId;
287
+ const prev = this.byEndpoint.get(endpointId);
288
+ if (!prev) return;
289
+ if (!prev.sessions.some((s) => s.id === sessionId)) return;
290
+ const sessions = prev.sessions.filter((s) => s.id !== sessionId);
291
+ const wasActive = prev.activeSessionId === sessionId;
292
+ const nextActive = wasActive ? sessions[0]?.id ?? null : prev.activeSessionId;
293
+ this.setEndpointState(endpointId, {
294
+ sessions,
295
+ activeSessionId: nextActive
296
+ });
297
+ if (wasActive) {
298
+ this.entries = [];
299
+ if (nextActive) await this.openSession(nextActive);
300
+ }
301
+ }
302
+ /** Fetch the session list for the active endpoint. */
303
+ async loadSessions() {
304
+ const id = this.activeEndpointId;
305
+ this.setEndpointState(id, {
306
+ sessionsLoading: true,
307
+ sessionsError: ""
308
+ });
309
+ try {
310
+ const sessions = await listSessions();
311
+ this.setEndpointState(id, {
312
+ sessions,
313
+ sessionsLoaded: true,
314
+ sessionsLoading: false,
315
+ sessionsError: ""
316
+ });
317
+ } catch (e) {
318
+ const err = e;
319
+ const message = err.status === 503 || err.status === 502 ? "Assistant is not reachable." : err.message ?? "Failed to load sessions.";
320
+ this.setEndpointState(id, {
321
+ sessionsLoading: false,
322
+ sessionsError: message
323
+ });
324
+ }
325
+ }
326
+ /** Select a session and render its messages. */
327
+ async openSession(sessionId) {
328
+ if (this.sending) {
329
+ this.error = "Wait for the current reply to finish before switching.";
330
+ return;
331
+ }
332
+ const endpointId = this.activeEndpointId;
333
+ this.setEndpointState(endpointId, { activeSessionId: sessionId });
334
+ this.entries = [];
335
+ this.entriesLoading = true;
336
+ this.error = "";
337
+ try {
338
+ const messages = await getSessionMessages(sessionId);
339
+ if (this.activeEndpointId === endpointId && this.byEndpoint.get(endpointId)?.activeSessionId === sessionId) this.entries = messages;
340
+ } catch (e) {
341
+ const err = e;
342
+ if (err.status === 503 || err.status === 502) this.error = "Assistant is not reachable. Try reconnecting.";
343
+ else if (err.status === 401) this.error = "Sign-in required.";
344
+ else this.error = err.message ?? "Failed to load messages.";
345
+ } finally {
346
+ this.entriesLoading = false;
347
+ }
348
+ }
349
+ /** Create a new session on the active endpoint and select it. */
350
+ async startNewSession() {
351
+ if (this.sending) {
352
+ this.error = "Wait for the current reply to finish before switching.";
353
+ return null;
354
+ }
355
+ const endpointId = this.activeEndpointId;
356
+ this.error = "";
357
+ try {
358
+ const { id } = await createSession();
359
+ const now = Date.now();
360
+ const summary = {
361
+ id,
362
+ title: "",
363
+ createdAt: now,
364
+ updatedAt: now
365
+ };
366
+ const prev = this.byEndpoint.get(endpointId) ?? emptyEndpointState();
367
+ this.setEndpointState(endpointId, {
368
+ sessions: [summary, ...prev.sessions.filter((s) => s.id !== id)],
369
+ sessionsLoaded: true,
370
+ activeSessionId: id
371
+ });
372
+ this.entries = [];
373
+ return id;
374
+ } catch (e) {
375
+ const err = e;
376
+ this.error = `Failed to start session: ${err.message ?? "unknown error"}`;
377
+ return null;
378
+ }
379
+ }
380
+ /**
381
+ * Send a message in the active session. If none is active, create one
382
+ * first (matches the "zero sessions" empty-state flow).
383
+ */
384
+ async send(text) {
385
+ if (this.sending) return;
386
+ const trimmed = text.trim();
387
+ if (!trimmed) return;
388
+ let sessionId = this.activeSessionId;
389
+ if (!sessionId) {
390
+ sessionId = await this.startNewSession();
391
+ if (!sessionId) return;
392
+ }
393
+ const userEntry = {
394
+ id: crypto.randomUUID(),
395
+ role: "user",
396
+ text: trimmed,
397
+ timestamp: Date.now()
398
+ };
399
+ this.entries = [...this.entries, userEntry];
400
+ this.error = "";
401
+ this.sending = true;
402
+ try {
403
+ const replyText = (await sendChatMessage(sessionId, trimmed)).parts.filter((p) => p.type === "text" && p.text).map((p) => p.text ?? "").join("");
404
+ const assistantEntry = {
405
+ id: crypto.randomUUID(),
406
+ role: "assistant",
407
+ text: replyText || "(no response)",
408
+ timestamp: Date.now()
409
+ };
410
+ this.entries = [...this.entries, assistantEntry];
411
+ const endpointId = this.activeEndpointId;
412
+ const prev = this.byEndpoint.get(endpointId);
413
+ if (prev) {
414
+ const now = Date.now();
415
+ const existing = prev.sessions.find((s) => s.id === sessionId);
416
+ const updated = existing ? {
417
+ ...existing,
418
+ updatedAt: now
419
+ } : {
420
+ id: sessionId,
421
+ title: "",
422
+ createdAt: now,
423
+ updatedAt: now
424
+ };
425
+ const rest = prev.sessions.filter((s) => s.id !== sessionId);
426
+ this.setEndpointState(endpointId, { sessions: [updated, ...rest] });
427
+ }
428
+ if (voiceState.ttsSupported && voiceState.ttsAutoEnabled && replyText) speakText(replyText);
429
+ } catch (e) {
430
+ const err = e;
431
+ if (err.status === 503 || err.status === 502) {
432
+ this.error = "Assistant is not reachable. Try reconnecting.";
433
+ this.setEndpointState(this.activeEndpointId, { activeSessionId: null });
434
+ } else if (err.status === 401) this.error = "Sign-in required.";
435
+ else this.error = err.message ?? "Message failed.";
436
+ } finally {
437
+ this.sending = false;
438
+ }
439
+ }
440
+ reset() {
441
+ stopSpeaking();
442
+ this.entries = [];
443
+ this.error = "";
444
+ this.byEndpoint = /* @__PURE__ */ new Map();
445
+ if (this._unsubscribeEvents) {
446
+ try {
447
+ this._unsubscribeEvents();
448
+ } catch (err) {
449
+ console.warn("[chat] failed to unsubscribe from event stream during reset", err);
450
+ }
451
+ this._unsubscribeEvents = null;
452
+ }
453
+ this.liveConnected = false;
454
+ }
455
+ };
456
+ var chat = new ChatService();
457
+ //#endregion
458
+ //#region src/lib/components/VoiceControl.svelte
459
+ function VoiceControl($$renderer, $$props) {
460
+ $$renderer.component(($$renderer) => {
461
+ const MAX_INTERIM_CHARS = 48;
462
+ let mounted = false;
463
+ onDestroy(() => {
464
+ destroyVoice();
465
+ });
466
+ let supported = derived(() => mounted);
467
+ let ttsAvailable = derived(() => mounted);
468
+ let isRecording = derived(() => voiceState.status === "recording");
469
+ let isTranscribing = derived(() => voiceState.status === "transcribing");
470
+ let isProcessing = derived(() => !isRecording() && !isTranscribing() && chat.sending);
471
+ let isSpeaking = derived(() => voiceState.status === "speaking");
472
+ if (supported() || ttsAvailable() || voiceState.autoplayBlocked) {
473
+ $$renderer.push("<!--[0-->");
474
+ $$renderer.push(`<div class="voice-control svelte-1a5q9sh" role="toolbar" aria-label="Voice controls">`);
475
+ if (isRecording() && voiceState.interimTranscript) {
476
+ $$renderer.push("<!--[0-->");
477
+ $$renderer.push(`<span class="voice-interim svelte-1a5q9sh" aria-hidden="true"${attr("title", voiceState.interimTranscript)}>${escape_html(voiceState.interimTranscript.length > MAX_INTERIM_CHARS ? voiceState.interimTranscript.slice(0, MAX_INTERIM_CHARS) + "…" : voiceState.interimTranscript)}</span>`);
478
+ } else $$renderer.push("<!--[-1-->");
479
+ $$renderer.push(`<!--]--> `);
480
+ if (voiceState.autoplayBlocked) {
481
+ $$renderer.push("<!--[0-->");
482
+ $$renderer.push(`<button type="button" class="voice-autoplay-banner svelte-1a5q9sh" aria-label="Resume paused audio" title="Audio was blocked by the browser. Click to resume."><svg aria-hidden="true" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svelte-1a5q9sh"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5" class="svelte-1a5q9sh"></polygon><line x1="23" y1="9" x2="17" y2="15" class="svelte-1a5q9sh"></line><line x1="17" y1="9" x2="23" y2="15" class="svelte-1a5q9sh"></line></svg> <span class="svelte-1a5q9sh">Audio paused — click to resume</span></button>`);
483
+ } else $$renderer.push("<!--[-1-->");
484
+ $$renderer.push(`<!--]--> `);
485
+ if (ttsAvailable()) {
486
+ $$renderer.push("<!--[0-->");
487
+ $$renderer.push(`<button${attr_class("voice-btn svelte-1a5q9sh", void 0, {
488
+ "voice-btn-on": voiceState.ttsAutoEnabled,
489
+ "voice-btn-speaking": isSpeaking()
490
+ })}${attr("aria-label", voiceState.ttsAutoEnabled ? "Turn off spoken responses" : "Turn on spoken responses")}${attr("aria-pressed", voiceState.ttsAutoEnabled)}${attr("title", isSpeaking() ? "Speaking — click to turn off spoken responses" : voiceState.ttsAutoEnabled ? "Spoken responses are on — click to turn off" : "Spoken responses are off — click to turn on")}><svg aria-hidden="true" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svelte-1a5q9sh"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5" class="svelte-1a5q9sh"></polygon>`);
491
+ if (voiceState.ttsAutoEnabled) {
492
+ $$renderer.push("<!--[0-->");
493
+ $$renderer.push(`<path d="M15.54 8.46a5 5 0 0 1 0 7.07"${attr_class("svelte-1a5q9sh", void 0, { "wave-anim": isSpeaking() })}></path><path d="M19.07 4.93a10 10 0 0 1 0 14.14"${attr_class("svelte-1a5q9sh", void 0, { "wave-anim-2": isSpeaking() })}></path>`);
494
+ } else {
495
+ $$renderer.push("<!--[-1-->");
496
+ $$renderer.push(`<line x1="23" y1="9" x2="17" y2="15" class="svelte-1a5q9sh"></line><line x1="17" y1="9" x2="23" y2="15" class="svelte-1a5q9sh"></line>`);
497
+ }
498
+ $$renderer.push(`<!--]--></svg></button>`);
499
+ } else $$renderer.push("<!--[-1-->");
500
+ $$renderer.push(`<!--]--> `);
501
+ if (supported()) {
502
+ $$renderer.push("<!--[0-->");
503
+ $$renderer.push(`<button${attr_class("voice-btn svelte-1a5q9sh", void 0, {
504
+ "voice-btn-active": isRecording(),
505
+ "voice-btn-processing": isProcessing() || isTranscribing()
506
+ })}${attr("disabled", isProcessing(), true)}${attr("aria-label", isRecording() ? "Stop recording" : isTranscribing() ? "Transcribing…" : isProcessing() ? "Sending message…" : "Start recording")}${attr("aria-pressed", isRecording())}${attr("title", isRecording() ? "Stop recording" : isTranscribing() ? "Transcribing…" : isProcessing() ? "Sending message…" : "Speak — message will be sent to the selected assistant")}>`);
507
+ if (isTranscribing() || isProcessing()) {
508
+ $$renderer.push("<!--[0-->");
509
+ $$renderer.push(`<span class="voice-spinner svelte-1a5q9sh" aria-hidden="true"></span>`);
510
+ } else if (isRecording()) {
511
+ $$renderer.push("<!--[1-->");
512
+ $$renderer.push(`<svg aria-hidden="true" width="14" height="14" viewBox="0 0 24 24" fill="currentColor" class="svelte-1a5q9sh"><rect x="6" y="6" width="12" height="12" rx="1.5" class="svelte-1a5q9sh"></rect></svg> <span class="voice-pulse svelte-1a5q9sh" aria-hidden="true"></span>`);
513
+ } else {
514
+ $$renderer.push("<!--[-1-->");
515
+ $$renderer.push(`<svg aria-hidden="true" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svelte-1a5q9sh"><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z" class="svelte-1a5q9sh"></path><path d="M19 10v2a7 7 0 0 1-14 0v-2" class="svelte-1a5q9sh"></path><line x1="12" y1="19" x2="12" y2="23" class="svelte-1a5q9sh"></line><line x1="8" y1="23" x2="16" y2="23" class="svelte-1a5q9sh"></line></svg>`);
516
+ }
517
+ $$renderer.push(`<!--]--></button>`);
518
+ } else $$renderer.push("<!--[-1-->");
519
+ $$renderer.push(`<!--]--> <span class="sr-only svelte-1a5q9sh" aria-live="polite">${escape_html(isRecording() && voiceState.interimTranscript ? voiceState.interimTranscript : isRecording() ? "Recording" : isTranscribing() ? "Transcribing" : isProcessing() ? "Sending message to assistant" : isSpeaking() ? "Assistant is speaking" : voiceState.ttsAutoEnabled ? "Spoken responses on" : "")}</span></div>`);
520
+ } else $$renderer.push("<!--[-1-->");
521
+ $$renderer.push(`<!--]-->`);
522
+ });
523
+ }
524
+ //#endregion
525
+ //#region src/lib/endpoints-state.svelte.ts
526
+ var EndpointsService = class {
527
+ endpoints = [];
528
+ activeId = "default";
529
+ loading = false;
530
+ loaded = false;
531
+ error = "";
532
+ #active = derived(() => this.endpoints.find((e) => e.id === this.activeId) ?? this.endpoints[0] ?? null);
533
+ get active() {
534
+ return this.#active();
535
+ }
536
+ set active($$value) {
537
+ return this.#active($$value);
538
+ }
539
+ async load(force = false) {
540
+ if (this.loading) return;
541
+ if (this.loaded && !force) return;
542
+ this.loading = true;
543
+ this.error = "";
544
+ try {
545
+ const { endpoints, activeId } = await fetchEndpoints();
546
+ this.endpoints = endpoints;
547
+ this.activeId = activeId;
548
+ this.loaded = true;
549
+ } catch (e) {
550
+ const err = e;
551
+ if (err.status !== 401) this.error = err.message ?? "Failed to load endpoints";
552
+ } finally {
553
+ this.loading = false;
554
+ }
555
+ }
556
+ async activate(id) {
557
+ if (id === this.activeId) return;
558
+ if (chat.sending) {
559
+ this.error = "Wait for the current reply to finish before switching.";
560
+ throw new Error(this.error);
561
+ }
562
+ const previous = this.activeId;
563
+ this.activeId = id;
564
+ try {
565
+ await setActiveEndpoint(id);
566
+ await chat.onEndpointChanged(id);
567
+ } catch (e) {
568
+ this.activeId = previous;
569
+ const err = e;
570
+ this.error = err.message ?? "Failed to switch endpoint";
571
+ throw e;
572
+ }
573
+ }
574
+ };
575
+ var endpointsService = new EndpointsService();
576
+ //#endregion
577
+ //#region src/lib/components/EndpointSwitcher.svelte
578
+ function EndpointSwitcher($$renderer, $$props) {
579
+ $$renderer.component(($$renderer) => {
580
+ let open = false;
581
+ const active = derived(() => endpointsService.active);
582
+ $$renderer.push(`<div class="switcher svelte-1gh51ee"><button type="button" class="trigger svelte-1gh51ee" aria-haspopup="menu"${attr("aria-expanded", open)}${attr("aria-label", active() ? `Assistant endpoint: ${active().label}` : "Assistant endpoints")}${attr("title", active() ? `Connected to: ${active().label} (${active().url})` : "Assistant endpoints")}${attr("disabled", endpointsService.loading, true)}><svg class="trigger-icon svelte-1gh51ee" aria-hidden="true" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="8" rx="2" ry="2"></rect><rect x="2" y="14" width="20" height="8" rx="2" ry="2"></rect><line x1="6" y1="6" x2="6.01" y2="6"></line><line x1="6" y1="18" x2="6.01" y2="18"></line></svg> <span class="dot svelte-1gh51ee" aria-hidden="true"></span> <span class="label svelte-1gh51ee">${escape_html(active()?.label ?? "Endpoint…")}</span> <span class="caret svelte-1gh51ee" aria-hidden="true">▾</span></button> `);
583
+ $$renderer.push("<!--[-1-->");
584
+ $$renderer.push(`<!--]--></div>`);
585
+ });
586
+ }
587
+ //#endregion
588
+ //#region src/lib/components/SessionPicker.svelte
589
+ function SessionPicker($$renderer, $$props) {
590
+ $$renderer.component(($$renderer) => {
591
+ let open = false;
592
+ const active = derived(() => endpointsService.active);
593
+ const endpointState = derived(() => active() ? chat.byEndpoint.get(active().id) ?? null : null);
594
+ const sessions = derived(() => endpointState()?.sessions ?? []);
595
+ const activeSessionId = derived(() => chat.activeSessionId);
596
+ const activeSummary = derived(() => sessions().find((s) => s.id === activeSessionId()) ?? null);
597
+ const triggerLabel = derived(() => activeSummary() ? activeSummary().title || `Untitled · ${formatRelative(activeSummary().updatedAt)}` : "New session");
598
+ /**
599
+ * Live-updates indicator. True when the chat service's SSE stream to
600
+ * `/proxy/assistant/event` is connected — out-of-band session changes
601
+ * (CLI, other clients) will flow through. Shown as a tiny dot so the
602
+ * operator can tell at a glance whether the picker is reactive or
603
+ * snapshot.
604
+ */
605
+ const liveConnected = derived(() => chat.liveConnected);
606
+ /**
607
+ * Tiny relative-time helper. No date-fns dep — that would be ~30 KB for
608
+ * 4 cases.
609
+ */
610
+ function formatRelative(ts) {
611
+ if (!ts) return "";
612
+ const diffSec = Math.max(0, (Date.now() - ts) / 1e3);
613
+ if (diffSec < 60) return "just now";
614
+ const min = Math.floor(diffSec / 60);
615
+ if (min < 60) return `${min}m ago`;
616
+ const hr = Math.floor(min / 60);
617
+ if (hr < 24) return `${hr}h ago`;
618
+ const day = Math.floor(hr / 24);
619
+ if (day === 1) return "yesterday";
620
+ if (day < 7) return `${day}d ago`;
621
+ const wk = Math.floor(day / 7);
622
+ if (wk < 5) return `${wk}w ago`;
623
+ const mo = Math.floor(day / 30);
624
+ if (mo < 12) return `${mo}mo ago`;
625
+ return `${Math.floor(day / 365)}y ago`;
626
+ }
627
+ $$renderer.push(`<div class="picker svelte-1owsj0q"><button type="button" class="trigger svelte-1owsj0q" aria-haspopup="menu"${attr("aria-expanded", open)} aria-label="Sessions"${attr("title", triggerLabel())}><svg class="trigger-icon svelte-1owsj0q" aria-hidden="true" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 9a2 2 0 0 1-2 2H6l-4 4V4c0-1.1.9-2 2-2h8a2 2 0 0 1 2 2z"></path><path d="M18 9h2a2 2 0 0 1 2 2v11l-4-4h-6a2 2 0 0 1-2-2v-1"></path></svg> <span${attr_class("dot svelte-1owsj0q", void 0, { "connected": liveConnected() })} aria-hidden="true"${attr("title", liveConnected() ? "Live updates connected" : "Live updates disconnected")}></span> <span class="label svelte-1owsj0q">${escape_html(triggerLabel())}</span> <span class="caret svelte-1owsj0q" aria-hidden="true">▾</span></button> `);
628
+ $$renderer.push("<!--[-1-->");
629
+ $$renderer.push(`<!--]--></div>`);
630
+ });
631
+ }
632
+ //#endregion
633
+ //#region src/lib/components/Navbar.svelte
634
+ function Navbar($$renderer, $$props) {
635
+ $$renderer.component(($$renderer) => {
636
+ const NAV_ITEMS = [
637
+ {
638
+ href: "/chat",
639
+ label: "Chat",
640
+ icon: "chat"
641
+ },
642
+ {
643
+ href: "/advanced",
644
+ label: "Advanced",
645
+ icon: "advanced"
646
+ },
647
+ {
648
+ href: "/admin",
649
+ label: "Admin",
650
+ icon: "admin"
651
+ }
652
+ ];
653
+ const pathname = derived(() => page.url?.pathname ?? "");
654
+ function isActive(href) {
655
+ return pathname() === href || pathname().startsWith(href + "/");
656
+ }
657
+ $$renderer.push(`<nav class="navbar svelte-rfuq4y" aria-label="Main navigation"><div class="navbar-inner svelte-rfuq4y"><div class="navbar-brand svelte-rfuq4y"><span class="brand-icon svelte-rfuq4y"><img src="/logo-128.png" alt="OpenPalm Logo" class="svelte-rfuq4y"/></span> <div><span class="brand-text svelte-rfuq4y">OpenPalm</span> <span class="version-badge svelte-rfuq4y">v${escape_html(version)}</span></div></div> <div class="navbar-nav svelte-rfuq4y" aria-label="Primary navigation"><!--[-->`);
658
+ const each_array = ensure_array_like(NAV_ITEMS);
659
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
660
+ let item = each_array[$$index];
661
+ $$renderer.push(`<a${attr("href", item.href)}${attr_class("nav-btn svelte-rfuq4y", void 0, { "active": isActive(item.href) })}${attr("aria-current", isActive(item.href) ? "page" : void 0)}${attr("title", item.label)}>`);
662
+ if (item.icon === "chat") {
663
+ $$renderer.push("<!--[0-->");
664
+ $$renderer.push(`<svg aria-hidden="true" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>`);
665
+ } else if (item.icon === "advanced") {
666
+ $$renderer.push("<!--[1-->");
667
+ $$renderer.push(`<svg aria-hidden="true" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><path d="m7 9 3 3-3 3"></path><line x1="13" y1="15" x2="17" y2="15"></line></svg>`);
668
+ } else {
669
+ $$renderer.push("<!--[-1-->");
670
+ $$renderer.push(`<svg aria-hidden="true" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"></line><line x1="4" y1="10" x2="4" y2="3"></line><line x1="12" y1="21" x2="12" y2="12"></line><line x1="12" y1="8" x2="12" y2="3"></line><line x1="20" y1="21" x2="20" y2="16"></line><line x1="20" y1="12" x2="20" y2="3"></line><line x1="1" y1="14" x2="7" y2="14"></line><line x1="9" y1="8" x2="15" y2="8"></line><line x1="17" y1="16" x2="23" y2="16"></line></svg>`);
671
+ }
672
+ $$renderer.push(`<!--]--> <span class="nav-label svelte-rfuq4y">${escape_html(item.label)}</span></a>`);
673
+ }
674
+ $$renderer.push(`<!--]--></div> <div class="navbar-actions svelte-rfuq4y">`);
675
+ EndpointSwitcher($$renderer);
676
+ $$renderer.push(`<!----> `);
677
+ SessionPicker($$renderer);
678
+ $$renderer.push(`<!----> `);
679
+ VoiceControl($$renderer);
680
+ $$renderer.push(`<!----></div></div></nav>`);
681
+ });
682
+ }
683
+ //#endregion
684
+ //#region src/lib/components/AuthGate.svelte
685
+ function AuthGate($$renderer, $$props) {
686
+ $$renderer.component(($$renderer) => {
687
+ let { onSuccess, loading, error } = $$props;
688
+ let tokenInput = "";
689
+ $$renderer.push(`<main class="auth-gate svelte-1vviwqr" aria-label="Admin login gate"><section class="auth-card svelte-1vviwqr"><div class="auth-brand svelte-1vviwqr"><span class="brand-icon svelte-1vviwqr"><img src="/logo-128.png" alt="OpenPalm Logo" class="svelte-1vviwqr"/></span> <div><h1 class="svelte-1vviwqr">OpenPalm Console</h1> <p class="svelte-1vviwqr">Enter your admin password to unlock the control plane.</p></div></div> <form class="auth-form svelte-1vviwqr"><label for="admin-token" class="svelte-1vviwqr">Admin Password</label> <input type="text" name="username" autocomplete="username" value="admin" class="sr-only svelte-1vviwqr" tabindex="-1" aria-hidden="true"/> <div class="token-input-wrapper svelte-1vviwqr"><input id="admin-token" name="admin-token"${attr("type", "password")}${attr("value", tokenInput)} placeholder="Enter admin password" autocomplete="current-password" class="svelte-1vviwqr"/> <button type="button" class="btn-toggle svelte-1vviwqr"${attr("aria-label", "Show token")}>`);
690
+ $$renderer.push("<!--[-1-->");
691
+ $$renderer.push(`<svg aria-hidden="true" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg>`);
692
+ $$renderer.push(`<!--]--></button></div> `);
693
+ if (error) {
694
+ $$renderer.push("<!--[0-->");
695
+ $$renderer.push(`<p class="auth-error svelte-1vviwqr" role="alert">${escape_html(error)}</p>`);
696
+ } else $$renderer.push("<!--[-1-->");
697
+ $$renderer.push(`<!--]--> <button class="btn btn-primary" type="submit"${attr("disabled", loading || !tokenInput.trim(), true)}>`);
698
+ if (loading) {
699
+ $$renderer.push("<!--[0-->");
700
+ $$renderer.push(`<span class="spinner"></span>`);
701
+ } else $$renderer.push("<!--[-1-->");
702
+ $$renderer.push(`<!--]--> Unlock Console</button></form></section></main>`);
703
+ });
704
+ }
705
+
706
+ export { AuthGate as A, Navbar as N, chat as c, endpointsService as e };
707
+ //# sourceMappingURL=AuthGate-keg7G6rX.js.map