@openpalm/ui 0.12.52 → 0.13.0-beta.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 (852) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/0.CNWpIzQn.css +1 -0
  3. package/build/client/_app/immutable/assets/0.CNWpIzQn.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.CNWpIzQn.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/10.vLP66eby.css +1 -0
  6. package/build/client/_app/immutable/assets/10.vLP66eby.css.br +0 -0
  7. package/build/client/_app/immutable/assets/10.vLP66eby.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/11.BF9IcRAW.css +1 -0
  9. package/build/client/_app/immutable/assets/11.BF9IcRAW.css.br +0 -0
  10. package/build/client/_app/immutable/assets/11.BF9IcRAW.css.gz +0 -0
  11. package/build/client/_app/immutable/assets/5.CTNuT1CQ.css +1 -0
  12. package/build/client/_app/immutable/assets/5.CTNuT1CQ.css.br +0 -0
  13. package/build/client/_app/immutable/assets/5.CTNuT1CQ.css.gz +0 -0
  14. package/build/client/_app/immutable/assets/6.D_kTgQ70.css +1 -0
  15. package/build/client/_app/immutable/assets/6.D_kTgQ70.css.br +0 -0
  16. package/build/client/_app/immutable/assets/6.D_kTgQ70.css.gz +0 -0
  17. package/build/client/_app/immutable/assets/7.CEu3B1cr.css +1 -0
  18. package/build/client/_app/immutable/assets/7.CEu3B1cr.css.br +0 -0
  19. package/build/client/_app/immutable/assets/7.CEu3B1cr.css.gz +0 -0
  20. package/build/client/_app/immutable/assets/9.vqGkbIg9.css +1 -0
  21. package/build/client/_app/immutable/assets/9.vqGkbIg9.css.br +0 -0
  22. package/build/client/_app/immutable/assets/9.vqGkbIg9.css.gz +0 -0
  23. package/build/client/_app/immutable/assets/ChatNavbar.C7LJB8r7.css +1 -0
  24. package/build/client/_app/immutable/assets/ChatNavbar.C7LJB8r7.css.br +0 -0
  25. package/build/client/_app/immutable/assets/ChatNavbar.C7LJB8r7.css.gz +0 -0
  26. package/build/client/_app/immutable/assets/Drawer.C9zcL24P.css +1 -0
  27. package/build/client/_app/immutable/assets/Drawer.C9zcL24P.css.br +0 -0
  28. package/build/client/_app/immutable/assets/Drawer.C9zcL24P.css.gz +0 -0
  29. package/build/client/_app/immutable/assets/IconActivity.BdXOPwBm.css +1 -0
  30. package/build/client/_app/immutable/assets/IconActivity.BdXOPwBm.css.br +0 -0
  31. package/build/client/_app/immutable/assets/IconActivity.BdXOPwBm.css.gz +0 -0
  32. package/build/client/_app/immutable/assets/Spinner.DfNgj4dl.css +1 -0
  33. package/build/client/_app/immutable/assets/Spinner.DfNgj4dl.css.br +2 -0
  34. package/build/client/_app/immutable/assets/Spinner.DfNgj4dl.css.gz +0 -0
  35. package/build/client/_app/immutable/chunks/9mRSvTWj.js +1 -0
  36. package/build/client/_app/immutable/chunks/9mRSvTWj.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/9mRSvTWj.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/BApqEZP1.js +3 -0
  39. package/build/client/_app/immutable/chunks/BApqEZP1.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/BApqEZP1.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/BDK50g8a.js +1 -0
  42. package/build/client/_app/immutable/chunks/BDK50g8a.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/BDK50g8a.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/B_Sgy7qx.js +1 -0
  45. package/build/client/_app/immutable/chunks/B_Sgy7qx.js.br +2 -0
  46. package/build/client/_app/immutable/chunks/B_Sgy7qx.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/B_jhBV5Z.js +5 -0
  48. package/build/client/_app/immutable/chunks/B_jhBV5Z.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/B_jhBV5Z.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/Be7qat4r.js +3 -0
  51. package/build/client/_app/immutable/chunks/Be7qat4r.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/Be7qat4r.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/BoOBAdGl.js +1 -0
  54. package/build/client/_app/immutable/chunks/BoOBAdGl.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/BoOBAdGl.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/BzIvC31O.js +3 -0
  57. package/build/client/_app/immutable/chunks/BzIvC31O.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/BzIvC31O.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/CUa5ff3d.js +1 -0
  60. package/build/client/_app/immutable/chunks/CUa5ff3d.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/CUa5ff3d.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/D5FtEngX.js +1 -0
  63. package/build/client/_app/immutable/chunks/D5FtEngX.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/D5FtEngX.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/DBHgGGCD.js +1 -0
  66. package/build/client/_app/immutable/chunks/DBHgGGCD.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/DBHgGGCD.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/DSs95sLz.js +1 -0
  69. package/build/client/_app/immutable/chunks/DSs95sLz.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/DSs95sLz.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/DfZbBavE.js +1 -0
  72. package/build/client/_app/immutable/chunks/DfZbBavE.js.br +1 -0
  73. package/build/client/_app/immutable/chunks/DfZbBavE.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/DmFbAjwW.js +1 -0
  75. package/build/client/_app/immutable/chunks/DmFbAjwW.js.br +3 -0
  76. package/build/client/_app/immutable/chunks/DmFbAjwW.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/NR-JVJz-.js +1 -0
  78. package/build/client/_app/immutable/chunks/NR-JVJz-.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/NR-JVJz-.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/R6GPcDBF.js +14 -0
  81. package/build/client/_app/immutable/chunks/R6GPcDBF.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/R6GPcDBF.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/SXdvPq3_.js +1 -0
  84. package/build/client/_app/immutable/chunks/SXdvPq3_.js.br +0 -0
  85. package/build/client/_app/immutable/chunks/SXdvPq3_.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/c0lkYAgh.js +5 -0
  87. package/build/client/_app/immutable/chunks/c0lkYAgh.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/c0lkYAgh.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/hSjQday7.js +1 -0
  90. package/build/client/_app/immutable/chunks/hSjQday7.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/hSjQday7.js.gz +0 -0
  92. package/build/client/_app/immutable/chunks/mG6HnNbi.js +1 -0
  93. package/build/client/_app/immutable/chunks/mG6HnNbi.js.br +0 -0
  94. package/build/client/_app/immutable/chunks/mG6HnNbi.js.gz +0 -0
  95. package/build/client/_app/immutable/entry/app.DZwy1Y3W.js +2 -0
  96. package/build/client/_app/immutable/entry/app.DZwy1Y3W.js.br +0 -0
  97. package/build/client/_app/immutable/entry/app.DZwy1Y3W.js.gz +0 -0
  98. package/build/client/_app/immutable/entry/start.C0ic7Ewp.js +1 -0
  99. package/build/client/_app/immutable/entry/start.C0ic7Ewp.js.br +1 -0
  100. package/build/client/_app/immutable/entry/start.C0ic7Ewp.js.gz +0 -0
  101. package/build/client/_app/immutable/nodes/0.mcDF2Cfv.js +1 -0
  102. package/build/client/_app/immutable/nodes/0.mcDF2Cfv.js.br +0 -0
  103. package/build/client/_app/immutable/nodes/0.mcDF2Cfv.js.gz +0 -0
  104. package/build/client/_app/immutable/nodes/1.Bxihn5f1.js +1 -0
  105. package/build/client/_app/immutable/nodes/1.Bxihn5f1.js.br +0 -0
  106. package/build/client/_app/immutable/nodes/1.Bxihn5f1.js.gz +0 -0
  107. package/build/client/_app/immutable/nodes/10.BZ76_WLP.js +1 -0
  108. package/build/client/_app/immutable/nodes/10.BZ76_WLP.js.br +0 -0
  109. package/build/client/_app/immutable/nodes/10.BZ76_WLP.js.gz +0 -0
  110. package/build/client/_app/immutable/nodes/11.Bzf3G5G0.js +6 -0
  111. package/build/client/_app/immutable/nodes/11.Bzf3G5G0.js.br +0 -0
  112. package/build/client/_app/immutable/nodes/11.Bzf3G5G0.js.gz +0 -0
  113. package/build/client/_app/immutable/nodes/2.C-PzaHZx.js +1 -0
  114. package/build/client/_app/immutable/nodes/2.C-PzaHZx.js.br +0 -0
  115. package/build/client/_app/immutable/nodes/2.C-PzaHZx.js.gz +0 -0
  116. package/build/client/_app/immutable/nodes/3.26Z_fr6N.js +1 -0
  117. package/build/client/_app/immutable/nodes/3.26Z_fr6N.js.br +0 -0
  118. package/build/client/_app/immutable/nodes/3.26Z_fr6N.js.gz +0 -0
  119. package/build/client/_app/immutable/nodes/4.D-CwW2PH.js +1 -0
  120. package/build/client/_app/immutable/nodes/4.D-CwW2PH.js.br +0 -0
  121. package/build/client/_app/immutable/nodes/4.D-CwW2PH.js.gz +0 -0
  122. package/build/client/_app/immutable/nodes/5.BbStivMI.js +2 -0
  123. package/build/client/_app/immutable/nodes/5.BbStivMI.js.br +0 -0
  124. package/build/client/_app/immutable/nodes/5.BbStivMI.js.gz +0 -0
  125. package/build/client/_app/immutable/nodes/6.BKVgKxKO.js +2 -0
  126. package/build/client/_app/immutable/nodes/6.BKVgKxKO.js.br +0 -0
  127. package/build/client/_app/immutable/nodes/6.BKVgKxKO.js.gz +0 -0
  128. package/build/client/_app/immutable/nodes/7.DuXt155R.js +4 -0
  129. package/build/client/_app/immutable/nodes/7.DuXt155R.js.br +0 -0
  130. package/build/client/_app/immutable/nodes/7.DuXt155R.js.gz +0 -0
  131. package/build/client/_app/immutable/nodes/8.NHp_bSVx.js +1 -0
  132. package/build/client/_app/immutable/nodes/8.NHp_bSVx.js.br +0 -0
  133. package/build/client/_app/immutable/nodes/8.NHp_bSVx.js.gz +0 -0
  134. package/build/client/_app/immutable/nodes/9.BdeFVi2a.js +126 -0
  135. package/build/client/_app/immutable/nodes/9.BdeFVi2a.js.br +0 -0
  136. package/build/client/_app/immutable/nodes/9.BdeFVi2a.js.gz +0 -0
  137. package/build/client/_app/version.json +1 -1
  138. package/build/client/_app/version.json.br +1 -2
  139. package/build/client/_app/version.json.gz +0 -0
  140. package/build/server/chunks/0-C7zzjezl.js +43 -0
  141. package/build/server/chunks/0-C7zzjezl.js.map +1 -0
  142. package/build/server/chunks/1-Ceq9WsUZ.js +9 -0
  143. package/build/server/chunks/1-Ceq9WsUZ.js.map +1 -0
  144. package/build/server/chunks/10-DbLLQ-Uy.js +35 -0
  145. package/build/server/chunks/10-DbLLQ-Uy.js.map +1 -0
  146. package/build/server/chunks/11-Dryt5Piv.js +9 -0
  147. package/build/server/chunks/11-Dryt5Piv.js.map +1 -0
  148. package/build/server/chunks/2-CQSBaE_w.js +9 -0
  149. package/build/server/chunks/2-CQSBaE_w.js.map +1 -0
  150. package/build/server/chunks/3-CAH3EmhU.js +58 -0
  151. package/build/server/chunks/3-CAH3EmhU.js.map +1 -0
  152. package/build/server/chunks/4-DxmFWVQJ.js +9 -0
  153. package/build/server/chunks/4-DxmFWVQJ.js.map +1 -0
  154. package/build/server/chunks/5-CQ9cELI7.js +9 -0
  155. package/build/server/chunks/5-CQ9cELI7.js.map +1 -0
  156. package/build/server/chunks/6-B-hnmc7F.js +9 -0
  157. package/build/server/chunks/6-B-hnmc7F.js.map +1 -0
  158. package/build/server/chunks/7-BE6BzHsh.js +9 -0
  159. package/build/server/chunks/7-BE6BzHsh.js.map +1 -0
  160. package/build/server/chunks/8-DiHmrGkL.js +30 -0
  161. package/build/server/chunks/8-DiHmrGkL.js.map +1 -0
  162. package/build/server/chunks/9-BWzd_hmh.js +42 -0
  163. package/build/server/chunks/9-BWzd_hmh.js.map +1 -0
  164. package/build/server/chunks/ChatNavbar-BonHVqfi.js +243 -0
  165. package/build/server/chunks/ChatNavbar-BonHVqfi.js.map +1 -0
  166. package/build/server/chunks/IconActivity-BVrMC8FH.js +5486 -0
  167. package/build/server/chunks/IconActivity-BVrMC8FH.js.map +1 -0
  168. package/build/server/chunks/IconAgent-DeBWj6Gr.js +16 -0
  169. package/build/server/chunks/IconAgent-DeBWj6Gr.js.map +1 -0
  170. package/build/server/chunks/IconDone-CHBJ36xT.js +10 -0
  171. package/build/server/chunks/IconDone-CHBJ36xT.js.map +1 -0
  172. package/build/server/chunks/IconInfo-DA5uGQyP.js +10 -0
  173. package/build/server/chunks/IconInfo-DA5uGQyP.js.map +1 -0
  174. package/build/server/chunks/IconLock-Bz5zHCBQ.js +10 -0
  175. package/build/server/chunks/IconLock-Bz5zHCBQ.js.map +1 -0
  176. package/build/server/chunks/IconLogo-BRmPVDI_.js +10 -0
  177. package/build/server/chunks/IconLogo-BRmPVDI_.js.map +1 -0
  178. package/build/server/chunks/IconMic-BbjkE_nG.js +18 -0
  179. package/build/server/chunks/IconMic-BbjkE_nG.js.map +1 -0
  180. package/build/server/chunks/IconServer-fOHYHe-O.js +180 -0
  181. package/build/server/chunks/IconServer-fOHYHe-O.js.map +1 -0
  182. package/build/server/chunks/IconSoundOn-DHtvjphK.js +1116 -0
  183. package/build/server/chunks/IconSoundOn-DHtvjphK.js.map +1 -0
  184. package/build/server/chunks/IconStop-C89_dmt4.js +956 -0
  185. package/build/server/chunks/IconStop-C89_dmt4.js.map +1 -0
  186. package/build/server/chunks/_helpers-CafYq-UD.js +74 -0
  187. package/build/server/chunks/_helpers-CafYq-UD.js.map +1 -0
  188. package/build/server/chunks/_layout.svelte-BLxvGwKC.js +67 -0
  189. package/build/server/chunks/_layout.svelte-BLxvGwKC.js.map +1 -0
  190. package/build/server/chunks/_page.svelte-0Rf024eH.js +530 -0
  191. package/build/server/chunks/_page.svelte-0Rf024eH.js.map +1 -0
  192. package/build/server/chunks/_page.svelte-BWNjxN63.js +82 -0
  193. package/build/server/chunks/_page.svelte-BWNjxN63.js.map +1 -0
  194. package/build/server/chunks/_page.svelte-BXeh8wzh.js +2425 -0
  195. package/build/server/chunks/_page.svelte-BXeh8wzh.js.map +1 -0
  196. package/build/server/chunks/_page.svelte-Bovrn7AQ.js +47 -0
  197. package/build/server/chunks/_page.svelte-Bovrn7AQ.js.map +1 -0
  198. package/build/server/chunks/_page.svelte-COf36oAu.js +92 -0
  199. package/build/server/chunks/_page.svelte-COf36oAu.js.map +1 -0
  200. package/build/server/chunks/_page.svelte-DkZsmNYc.js +24 -0
  201. package/build/server/chunks/_page.svelte-DkZsmNYc.js.map +1 -0
  202. package/build/server/chunks/_page.svelte-Du3fWBth.js +5 -0
  203. package/build/server/chunks/_page.svelte-Du3fWBth.js.map +1 -0
  204. package/build/server/chunks/_page.svelte-LsoJ7E5M.js +3516 -0
  205. package/build/server/chunks/_page.svelte-LsoJ7E5M.js.map +1 -0
  206. package/build/server/chunks/_server.ts-2-50j5S8.js +93 -0
  207. package/build/server/chunks/_server.ts-2-50j5S8.js.map +1 -0
  208. package/build/server/chunks/_server.ts-2Z0JYuCr.js +61 -0
  209. package/build/server/chunks/_server.ts-2Z0JYuCr.js.map +1 -0
  210. package/build/server/chunks/_server.ts-42ZGRWhn.js +58 -0
  211. package/build/server/chunks/_server.ts-42ZGRWhn.js.map +1 -0
  212. package/build/server/chunks/_server.ts-6EuPIrt7.js +88 -0
  213. package/build/server/chunks/_server.ts-6EuPIrt7.js.map +1 -0
  214. package/build/server/chunks/_server.ts-6muCM4Nz.js +44 -0
  215. package/build/server/chunks/_server.ts-6muCM4Nz.js.map +1 -0
  216. package/build/server/chunks/_server.ts-B28SfXaZ.js +172 -0
  217. package/build/server/chunks/_server.ts-B28SfXaZ.js.map +1 -0
  218. package/build/server/chunks/_server.ts-BA11l9Z1.js +87 -0
  219. package/build/server/chunks/_server.ts-BA11l9Z1.js.map +1 -0
  220. package/build/server/chunks/_server.ts-BA7wxHYg.js +61 -0
  221. package/build/server/chunks/_server.ts-BA7wxHYg.js.map +1 -0
  222. package/build/server/chunks/_server.ts-BARmSEZ2.js +49 -0
  223. package/build/server/chunks/_server.ts-BARmSEZ2.js.map +1 -0
  224. package/build/server/chunks/_server.ts-BBewn2kP.js +106 -0
  225. package/build/server/chunks/_server.ts-BBewn2kP.js.map +1 -0
  226. package/build/server/chunks/_server.ts-BEaiuN8Q.js +66 -0
  227. package/build/server/chunks/_server.ts-BEaiuN8Q.js.map +1 -0
  228. package/build/server/chunks/_server.ts-BJrYBXpY.js +87 -0
  229. package/build/server/chunks/_server.ts-BJrYBXpY.js.map +1 -0
  230. package/build/server/chunks/_server.ts-BJv74_DI.js +52 -0
  231. package/build/server/chunks/_server.ts-BJv74_DI.js.map +1 -0
  232. package/build/server/chunks/_server.ts-BKWx8K8U.js +60 -0
  233. package/build/server/chunks/_server.ts-BKWx8K8U.js.map +1 -0
  234. package/build/server/chunks/_server.ts-BLn_cTkK.js +58 -0
  235. package/build/server/chunks/_server.ts-BLn_cTkK.js.map +1 -0
  236. package/build/server/chunks/_server.ts-BR24J2uB.js +40 -0
  237. package/build/server/chunks/_server.ts-BR24J2uB.js.map +1 -0
  238. package/build/server/chunks/_server.ts-BRdjsMSd.js +44 -0
  239. package/build/server/chunks/_server.ts-BRdjsMSd.js.map +1 -0
  240. package/build/server/chunks/_server.ts-BTPbwN92.js +92 -0
  241. package/build/server/chunks/_server.ts-BTPbwN92.js.map +1 -0
  242. package/build/server/chunks/_server.ts-BUDMOZOz.js +44 -0
  243. package/build/server/chunks/_server.ts-BUDMOZOz.js.map +1 -0
  244. package/build/server/chunks/_server.ts-BVMpHE3G.js +38 -0
  245. package/build/server/chunks/_server.ts-BVMpHE3G.js.map +1 -0
  246. package/build/server/chunks/_server.ts-BWO1Eoro.js +45 -0
  247. package/build/server/chunks/_server.ts-BWO1Eoro.js.map +1 -0
  248. package/build/server/chunks/_server.ts-B_R9VtOW.js +152 -0
  249. package/build/server/chunks/_server.ts-B_R9VtOW.js.map +1 -0
  250. package/build/server/chunks/_server.ts-Ba8xSIQn.js +107 -0
  251. package/build/server/chunks/_server.ts-Ba8xSIQn.js.map +1 -0
  252. package/build/server/chunks/_server.ts-BeP_sHqj.js +58 -0
  253. package/build/server/chunks/_server.ts-BeP_sHqj.js.map +1 -0
  254. package/build/server/chunks/_server.ts-BhAp0vvt.js +171 -0
  255. package/build/server/chunks/_server.ts-BhAp0vvt.js.map +1 -0
  256. package/build/server/chunks/_server.ts-Bi0rRbcw.js +166 -0
  257. package/build/server/chunks/_server.ts-Bi0rRbcw.js.map +1 -0
  258. package/build/server/chunks/_server.ts-BjD0Uf0U.js +248 -0
  259. package/build/server/chunks/_server.ts-BjD0Uf0U.js.map +1 -0
  260. package/build/server/chunks/_server.ts-BjjicBDy.js +173 -0
  261. package/build/server/chunks/_server.ts-BjjicBDy.js.map +1 -0
  262. package/build/server/chunks/_server.ts-BsPu8Fny.js +521 -0
  263. package/build/server/chunks/_server.ts-BsPu8Fny.js.map +1 -0
  264. package/build/server/chunks/_server.ts-C-tvKaFE.js +68 -0
  265. package/build/server/chunks/_server.ts-C-tvKaFE.js.map +1 -0
  266. package/build/server/chunks/_server.ts-C83FzZfP.js +36 -0
  267. package/build/server/chunks/_server.ts-C83FzZfP.js.map +1 -0
  268. package/build/server/chunks/_server.ts-C8eCqXP6.js +96 -0
  269. package/build/server/chunks/_server.ts-C8eCqXP6.js.map +1 -0
  270. package/build/server/chunks/_server.ts-C9F005zM.js +45 -0
  271. package/build/server/chunks/_server.ts-C9F005zM.js.map +1 -0
  272. package/build/server/chunks/_server.ts-CCmsGl_u.js +111 -0
  273. package/build/server/chunks/_server.ts-CCmsGl_u.js.map +1 -0
  274. package/build/server/chunks/_server.ts-CG60Cdqf.js +205 -0
  275. package/build/server/chunks/_server.ts-CG60Cdqf.js.map +1 -0
  276. package/build/server/chunks/_server.ts-CGZizh2V.js +105 -0
  277. package/build/server/chunks/_server.ts-CGZizh2V.js.map +1 -0
  278. package/build/server/chunks/_server.ts-CIv0zM75.js +70 -0
  279. package/build/server/chunks/_server.ts-CIv0zM75.js.map +1 -0
  280. package/build/server/chunks/_server.ts-CJVwtNhA.js +34 -0
  281. package/build/server/chunks/_server.ts-CJVwtNhA.js.map +1 -0
  282. package/build/server/chunks/_server.ts-CMAepV0J.js +38 -0
  283. package/build/server/chunks/_server.ts-CMAepV0J.js.map +1 -0
  284. package/build/server/chunks/_server.ts-COcv1puW.js +57 -0
  285. package/build/server/chunks/_server.ts-COcv1puW.js.map +1 -0
  286. package/build/server/chunks/_server.ts-CQHkw9ni.js +94 -0
  287. package/build/server/chunks/_server.ts-CQHkw9ni.js.map +1 -0
  288. package/build/server/chunks/_server.ts-CS2LQKMb.js +44 -0
  289. package/build/server/chunks/_server.ts-CS2LQKMb.js.map +1 -0
  290. package/build/server/chunks/_server.ts-CX_CwTW0.js +41 -0
  291. package/build/server/chunks/_server.ts-CX_CwTW0.js.map +1 -0
  292. package/build/server/chunks/_server.ts-CcoaYeM8.js +50 -0
  293. package/build/server/chunks/_server.ts-CcoaYeM8.js.map +1 -0
  294. package/build/server/chunks/_server.ts-CfuLncMW.js +134 -0
  295. package/build/server/chunks/_server.ts-CfuLncMW.js.map +1 -0
  296. package/build/server/chunks/_server.ts-CjPhaG_g.js +68 -0
  297. package/build/server/chunks/_server.ts-CjPhaG_g.js.map +1 -0
  298. package/build/server/chunks/_server.ts-CmUo0zla.js +112 -0
  299. package/build/server/chunks/_server.ts-CmUo0zla.js.map +1 -0
  300. package/build/server/chunks/_server.ts-CnQ4hgIT.js +41 -0
  301. package/build/server/chunks/_server.ts-CnQ4hgIT.js.map +1 -0
  302. package/build/server/chunks/_server.ts-CncBUb14.js +64 -0
  303. package/build/server/chunks/_server.ts-CncBUb14.js.map +1 -0
  304. package/build/server/chunks/_server.ts-CnrWBkQ7.js +149 -0
  305. package/build/server/chunks/_server.ts-CnrWBkQ7.js.map +1 -0
  306. package/build/server/chunks/_server.ts-CspCDw2x.js +49 -0
  307. package/build/server/chunks/_server.ts-CspCDw2x.js.map +1 -0
  308. package/build/server/chunks/_server.ts-CtsLQpY2.js +19 -0
  309. package/build/server/chunks/_server.ts-CtsLQpY2.js.map +1 -0
  310. package/build/server/chunks/_server.ts-D-6mgHZB.js +72 -0
  311. package/build/server/chunks/_server.ts-D-6mgHZB.js.map +1 -0
  312. package/build/server/chunks/_server.ts-D-Rf8If2.js +94 -0
  313. package/build/server/chunks/_server.ts-D-Rf8If2.js.map +1 -0
  314. package/build/server/chunks/_server.ts-D5F-pzp2.js +45 -0
  315. package/build/server/chunks/_server.ts-D5F-pzp2.js.map +1 -0
  316. package/build/server/chunks/_server.ts-D6wuFDe4.js +77 -0
  317. package/build/server/chunks/_server.ts-D6wuFDe4.js.map +1 -0
  318. package/build/server/chunks/_server.ts-D7VWMcNm.js +80 -0
  319. package/build/server/chunks/_server.ts-D7VWMcNm.js.map +1 -0
  320. package/build/server/chunks/_server.ts-D7X0LmkL.js +65 -0
  321. package/build/server/chunks/_server.ts-D7X0LmkL.js.map +1 -0
  322. package/build/server/chunks/_server.ts-D9yQyMbZ.js +141 -0
  323. package/build/server/chunks/_server.ts-D9yQyMbZ.js.map +1 -0
  324. package/build/server/chunks/_server.ts-DE-c3Y5D.js +48 -0
  325. package/build/server/chunks/_server.ts-DE-c3Y5D.js.map +1 -0
  326. package/build/server/chunks/_server.ts-DH343hlx.js +57 -0
  327. package/build/server/chunks/_server.ts-DH343hlx.js.map +1 -0
  328. package/build/server/chunks/_server.ts-DH3Uc_0m.js +57 -0
  329. package/build/server/chunks/_server.ts-DH3Uc_0m.js.map +1 -0
  330. package/build/server/chunks/_server.ts-DHeSwA7p.js +55 -0
  331. package/build/server/chunks/_server.ts-DHeSwA7p.js.map +1 -0
  332. package/build/server/chunks/_server.ts-DJCIu42O.js +49 -0
  333. package/build/server/chunks/_server.ts-DJCIu42O.js.map +1 -0
  334. package/build/server/chunks/_server.ts-DJqSQny9.js +56 -0
  335. package/build/server/chunks/_server.ts-DJqSQny9.js.map +1 -0
  336. package/build/server/chunks/_server.ts-DKYXeaKr.js +88 -0
  337. package/build/server/chunks/_server.ts-DKYXeaKr.js.map +1 -0
  338. package/build/server/chunks/_server.ts-DM9EsKQc.js +68 -0
  339. package/build/server/chunks/_server.ts-DM9EsKQc.js.map +1 -0
  340. package/build/server/chunks/_server.ts-DQozxLn6.js +58 -0
  341. package/build/server/chunks/_server.ts-DQozxLn6.js.map +1 -0
  342. package/build/server/chunks/_server.ts-DTQe-U35.js +80 -0
  343. package/build/server/chunks/_server.ts-DTQe-U35.js.map +1 -0
  344. package/build/server/chunks/_server.ts-Dcf84tjG.js +42 -0
  345. package/build/server/chunks/_server.ts-Dcf84tjG.js.map +1 -0
  346. package/build/server/chunks/_server.ts-DdHx6Xig.js +88 -0
  347. package/build/server/chunks/_server.ts-DdHx6Xig.js.map +1 -0
  348. package/build/server/chunks/_server.ts-DdoJFQaX.js +89 -0
  349. package/build/server/chunks/_server.ts-DdoJFQaX.js.map +1 -0
  350. package/build/server/chunks/_server.ts-DdocuErM.js +71 -0
  351. package/build/server/chunks/_server.ts-DdocuErM.js.map +1 -0
  352. package/build/server/chunks/_server.ts-Ddqhnr_7.js +58 -0
  353. package/build/server/chunks/_server.ts-Ddqhnr_7.js.map +1 -0
  354. package/build/server/chunks/_server.ts-Dj6nwJgl.js +42 -0
  355. package/build/server/chunks/_server.ts-Dj6nwJgl.js.map +1 -0
  356. package/build/server/chunks/_server.ts-Dl-Rn5Ku.js +68 -0
  357. package/build/server/chunks/_server.ts-Dl-Rn5Ku.js.map +1 -0
  358. package/build/server/chunks/_server.ts-DnczK3Pw.js +49 -0
  359. package/build/server/chunks/_server.ts-DnczK3Pw.js.map +1 -0
  360. package/build/server/chunks/_server.ts-Dq4RvC5F.js +69 -0
  361. package/build/server/chunks/_server.ts-Dq4RvC5F.js.map +1 -0
  362. package/build/server/chunks/_server.ts-DrGzrygC.js +103 -0
  363. package/build/server/chunks/_server.ts-DrGzrygC.js.map +1 -0
  364. package/build/server/chunks/_server.ts-Ds62LEMU.js +162 -0
  365. package/build/server/chunks/_server.ts-Ds62LEMU.js.map +1 -0
  366. package/build/server/chunks/_server.ts-DsVbuYhj.js +64 -0
  367. package/build/server/chunks/_server.ts-DsVbuYhj.js.map +1 -0
  368. package/build/server/chunks/_server.ts-Dy65kWxL.js +84 -0
  369. package/build/server/chunks/_server.ts-Dy65kWxL.js.map +1 -0
  370. package/build/server/chunks/_server.ts-Dy9l5NMO.js +715 -0
  371. package/build/server/chunks/_server.ts-Dy9l5NMO.js.map +1 -0
  372. package/build/server/chunks/_server.ts-JO0zy17P.js +60 -0
  373. package/build/server/chunks/_server.ts-JO0zy17P.js.map +1 -0
  374. package/build/server/chunks/_server.ts-LokXM9hH.js +51 -0
  375. package/build/server/chunks/_server.ts-LokXM9hH.js.map +1 -0
  376. package/build/server/chunks/_server.ts-pRYFJihh.js +72 -0
  377. package/build/server/chunks/_server.ts-pRYFJihh.js.map +1 -0
  378. package/build/server/chunks/_server.ts-xPuEhFJO.js +56 -0
  379. package/build/server/chunks/_server.ts-xPuEhFJO.js.map +1 -0
  380. package/build/server/chunks/addon-helpers-Cgg8lPxe.js +51 -0
  381. package/build/server/chunks/addon-helpers-Cgg8lPxe.js.map +1 -0
  382. package/build/server/chunks/akm-5HN45xWY.js +151 -0
  383. package/build/server/chunks/akm-5HN45xWY.js.map +1 -0
  384. package/build/server/chunks/catalog-7z8dgrJF.js +217 -0
  385. package/build/server/chunks/catalog-7z8dgrJF.js.map +1 -0
  386. package/build/server/chunks/client-D2lMniPd.js +202 -0
  387. package/build/server/chunks/client-D2lMniPd.js.map +1 -0
  388. package/build/server/chunks/compose-args2-BFdWixAZ.js +26 -0
  389. package/build/server/chunks/compose-args2-BFdWixAZ.js.map +1 -0
  390. package/build/server/chunks/config-I5hb-W80.js +121 -0
  391. package/build/server/chunks/config-I5hb-W80.js.map +1 -0
  392. package/build/server/chunks/connections-api-NkotVLIl.js +34 -0
  393. package/build/server/chunks/connections-api-NkotVLIl.js.map +1 -0
  394. package/build/server/chunks/constants-B7J5DDaI.js +298 -0
  395. package/build/server/chunks/constants-B7J5DDaI.js.map +1 -0
  396. package/build/server/chunks/docker2-HZnACjh6.js +26 -0
  397. package/build/server/chunks/docker2-HZnACjh6.js.map +1 -0
  398. package/build/server/chunks/docker3-Dj9Pc_Pt.js +20 -0
  399. package/build/server/chunks/docker3-Dj9Pc_Pt.js.map +1 -0
  400. package/build/server/chunks/endpoints-B9ePqrMw.js +377 -0
  401. package/build/server/chunks/endpoints-B9ePqrMw.js.map +1 -0
  402. package/build/server/chunks/environment-BYp8JQYM.js +38 -0
  403. package/build/server/chunks/environment-BYp8JQYM.js.map +1 -0
  404. package/build/server/chunks/error.svelte-DGngrZ2V.js +18 -0
  405. package/build/server/chunks/error.svelte-DGngrZ2V.js.map +1 -0
  406. package/build/server/chunks/exports-CcmcYU0M.js +124 -0
  407. package/build/server/chunks/exports-CcmcYU0M.js.map +1 -0
  408. package/build/server/chunks/exports2-BjzhbhYA.js +691 -0
  409. package/build/server/chunks/exports2-BjzhbhYA.js.map +1 -0
  410. package/build/server/chunks/features-0lgyQreD.js +116 -0
  411. package/build/server/chunks/features-0lgyQreD.js.map +1 -0
  412. package/build/server/chunks/helpers-q4Ng8QTq.js +320 -0
  413. package/build/server/chunks/helpers-q4Ng8QTq.js.map +1 -0
  414. package/build/server/chunks/hooks.server-BTXqUhpH.js +121 -0
  415. package/build/server/chunks/hooks.server-BTXqUhpH.js.map +1 -0
  416. package/build/server/chunks/http-jBNJXVHg.js +31 -0
  417. package/build/server/chunks/http-jBNJXVHg.js.map +1 -0
  418. package/build/server/chunks/internal-G-Uk-kCA.js +915 -0
  419. package/build/server/chunks/internal-G-Uk-kCA.js.map +1 -0
  420. package/build/server/chunks/landing-BR5KUuDz.js +132 -0
  421. package/build/server/chunks/landing-BR5KUuDz.js.map +1 -0
  422. package/build/server/chunks/paths-tzRSDsKc.js +17 -0
  423. package/build/server/chunks/paths-tzRSDsKc.js.map +1 -0
  424. package/build/server/chunks/provider-constants-1s1k8kbj.js +68 -0
  425. package/build/server/chunks/provider-constants-1s1k8kbj.js.map +1 -0
  426. package/build/server/chunks/runtime-context.svelte-C5zNEC6u.js +72 -0
  427. package/build/server/chunks/runtime-context.svelte-C5zNEC6u.js.map +1 -0
  428. package/build/server/chunks/session-cookie-qHDuQboc.js +74 -0
  429. package/build/server/chunks/session-cookie-qHDuQboc.js.map +1 -0
  430. package/build/server/chunks/setup-deploy-DleJTifu.js +75 -0
  431. package/build/server/chunks/setup-deploy-DleJTifu.js.map +1 -0
  432. package/build/server/chunks/speakable-text-BflxDDdY.js +65 -0
  433. package/build/server/chunks/speakable-text-BflxDDdY.js.map +1 -0
  434. package/build/server/chunks/src-BwQUi60U.js +17213 -0
  435. package/build/server/chunks/src-BwQUi60U.js.map +1 -0
  436. package/build/server/chunks/state-Dm7U51xT.js +24 -0
  437. package/build/server/chunks/state-Dm7U51xT.js.map +1 -0
  438. package/build/server/chunks/state2-BhKHITEo.js +62 -0
  439. package/build/server/chunks/state2-BhKHITEo.js.map +1 -0
  440. package/build/server/chunks/utils-OXHIhUb5.js +150 -0
  441. package/build/server/chunks/utils-OXHIhUb5.js.map +1 -0
  442. package/build/server/chunks/voice-state.svelte-BAiqUOIX.js +1214 -0
  443. package/build/server/chunks/voice-state.svelte-BAiqUOIX.js.map +1 -0
  444. package/build/server/index.js +33 -33
  445. package/build/server/index.js.map +1 -1
  446. package/build/server/manifest.js +279 -243
  447. package/build/server/manifest.js.map +1 -1
  448. package/package.json +3 -2
  449. package/build/client/_app/immutable/assets/0.C-UsFwN5.css +0 -1
  450. package/build/client/_app/immutable/assets/0.C-UsFwN5.css.br +0 -0
  451. package/build/client/_app/immutable/assets/0.C-UsFwN5.css.gz +0 -0
  452. package/build/client/_app/immutable/assets/10.p7qpuBHR.css +0 -1
  453. package/build/client/_app/immutable/assets/10.p7qpuBHR.css.br +0 -2
  454. package/build/client/_app/immutable/assets/10.p7qpuBHR.css.gz +0 -0
  455. package/build/client/_app/immutable/assets/4.DKS7ivN-.css +0 -1
  456. package/build/client/_app/immutable/assets/4.DKS7ivN-.css.br +0 -0
  457. package/build/client/_app/immutable/assets/4.DKS7ivN-.css.gz +0 -0
  458. package/build/client/_app/immutable/assets/5.B9kVBENv.css +0 -1
  459. package/build/client/_app/immutable/assets/5.B9kVBENv.css.br +0 -0
  460. package/build/client/_app/immutable/assets/5.B9kVBENv.css.gz +0 -0
  461. package/build/client/_app/immutable/assets/7.CcyzbXoG.css +0 -1
  462. package/build/client/_app/immutable/assets/7.CcyzbXoG.css.br +0 -0
  463. package/build/client/_app/immutable/assets/7.CcyzbXoG.css.gz +0 -0
  464. package/build/client/_app/immutable/assets/8.DdhLOSFx.css +0 -1
  465. package/build/client/_app/immutable/assets/8.DdhLOSFx.css.br +0 -0
  466. package/build/client/_app/immutable/assets/8.DdhLOSFx.css.gz +0 -0
  467. package/build/client/_app/immutable/assets/9.4QFZFijM.css +0 -1
  468. package/build/client/_app/immutable/assets/9.4QFZFijM.css.br +0 -0
  469. package/build/client/_app/immutable/assets/9.4QFZFijM.css.gz +0 -0
  470. package/build/client/_app/immutable/assets/IconClock.CudG-UM6.css +0 -1
  471. package/build/client/_app/immutable/assets/IconClock.CudG-UM6.css.br +0 -0
  472. package/build/client/_app/immutable/assets/IconClock.CudG-UM6.css.gz +0 -0
  473. package/build/client/_app/immutable/assets/Navbar.D3rckLpW.css +0 -1
  474. package/build/client/_app/immutable/assets/Navbar.D3rckLpW.css.br +0 -0
  475. package/build/client/_app/immutable/assets/Navbar.D3rckLpW.css.gz +0 -0
  476. package/build/client/_app/immutable/assets/Spinner.CCwieGti.css +0 -1
  477. package/build/client/_app/immutable/assets/Spinner.CCwieGti.css.br +0 -0
  478. package/build/client/_app/immutable/assets/Spinner.CCwieGti.css.gz +0 -0
  479. package/build/client/_app/immutable/chunks/B6a5LPQe.js +0 -3
  480. package/build/client/_app/immutable/chunks/B6a5LPQe.js.br +0 -0
  481. package/build/client/_app/immutable/chunks/B6a5LPQe.js.gz +0 -0
  482. package/build/client/_app/immutable/chunks/BDvA7M6l.js +0 -1
  483. package/build/client/_app/immutable/chunks/BDvA7M6l.js.br +0 -0
  484. package/build/client/_app/immutable/chunks/BDvA7M6l.js.gz +0 -0
  485. package/build/client/_app/immutable/chunks/BFVV1YJb.js +0 -1
  486. package/build/client/_app/immutable/chunks/BFVV1YJb.js.br +0 -0
  487. package/build/client/_app/immutable/chunks/BFVV1YJb.js.gz +0 -0
  488. package/build/client/_app/immutable/chunks/BM4jJmEk.js +0 -1
  489. package/build/client/_app/immutable/chunks/BM4jJmEk.js.br +0 -0
  490. package/build/client/_app/immutable/chunks/BM4jJmEk.js.gz +0 -0
  491. package/build/client/_app/immutable/chunks/BeDFZ0w6.js +0 -1
  492. package/build/client/_app/immutable/chunks/BeDFZ0w6.js.br +0 -0
  493. package/build/client/_app/immutable/chunks/BeDFZ0w6.js.gz +0 -0
  494. package/build/client/_app/immutable/chunks/BiuKIdz2.js +0 -1
  495. package/build/client/_app/immutable/chunks/BiuKIdz2.js.br +0 -0
  496. package/build/client/_app/immutable/chunks/BiuKIdz2.js.gz +0 -0
  497. package/build/client/_app/immutable/chunks/C4c5Y6rY.js +0 -5
  498. package/build/client/_app/immutable/chunks/C4c5Y6rY.js.br +0 -0
  499. package/build/client/_app/immutable/chunks/C4c5Y6rY.js.gz +0 -0
  500. package/build/client/_app/immutable/chunks/C4j7gGnm.js +0 -14
  501. package/build/client/_app/immutable/chunks/C4j7gGnm.js.br +0 -0
  502. package/build/client/_app/immutable/chunks/C4j7gGnm.js.gz +0 -0
  503. package/build/client/_app/immutable/chunks/C7x_T9zu.js +0 -3
  504. package/build/client/_app/immutable/chunks/C7x_T9zu.js.br +0 -0
  505. package/build/client/_app/immutable/chunks/C7x_T9zu.js.gz +0 -0
  506. package/build/client/_app/immutable/chunks/C8Qdq8nY.js +0 -1
  507. package/build/client/_app/immutable/chunks/C8Qdq8nY.js.br +0 -0
  508. package/build/client/_app/immutable/chunks/C8Qdq8nY.js.gz +0 -0
  509. package/build/client/_app/immutable/chunks/DI0CI0UJ.js +0 -1
  510. package/build/client/_app/immutable/chunks/DI0CI0UJ.js.br +0 -2
  511. package/build/client/_app/immutable/chunks/DI0CI0UJ.js.gz +0 -0
  512. package/build/client/_app/immutable/chunks/DWwJdNrB.js +0 -1
  513. package/build/client/_app/immutable/chunks/DWwJdNrB.js.br +0 -1
  514. package/build/client/_app/immutable/chunks/DWwJdNrB.js.gz +0 -0
  515. package/build/client/_app/immutable/chunks/DoTCwfyJ.js +0 -1
  516. package/build/client/_app/immutable/chunks/DoTCwfyJ.js.br +0 -2
  517. package/build/client/_app/immutable/chunks/DoTCwfyJ.js.gz +0 -0
  518. package/build/client/_app/immutable/chunks/DwEShcLP.js +0 -1
  519. package/build/client/_app/immutable/chunks/DwEShcLP.js.br +0 -0
  520. package/build/client/_app/immutable/chunks/DwEShcLP.js.gz +0 -0
  521. package/build/client/_app/immutable/chunks/HbvxHNCX.js +0 -1
  522. package/build/client/_app/immutable/chunks/HbvxHNCX.js.br +0 -0
  523. package/build/client/_app/immutable/chunks/HbvxHNCX.js.gz +0 -0
  524. package/build/client/_app/immutable/chunks/jopA0ZFl.js +0 -1
  525. package/build/client/_app/immutable/chunks/jopA0ZFl.js.br +0 -0
  526. package/build/client/_app/immutable/chunks/jopA0ZFl.js.gz +0 -0
  527. package/build/client/_app/immutable/chunks/mVxTG_mC.js +0 -1
  528. package/build/client/_app/immutable/chunks/mVxTG_mC.js.br +0 -3
  529. package/build/client/_app/immutable/chunks/mVxTG_mC.js.gz +0 -0
  530. package/build/client/_app/immutable/chunks/zMaWNBEE.js +0 -1
  531. package/build/client/_app/immutable/chunks/zMaWNBEE.js.br +0 -0
  532. package/build/client/_app/immutable/chunks/zMaWNBEE.js.gz +0 -0
  533. package/build/client/_app/immutable/entry/app.D5lUGJr1.js +0 -2
  534. package/build/client/_app/immutable/entry/app.D5lUGJr1.js.br +0 -0
  535. package/build/client/_app/immutable/entry/app.D5lUGJr1.js.gz +0 -0
  536. package/build/client/_app/immutable/entry/start.CKoCEnYJ.js +0 -1
  537. package/build/client/_app/immutable/entry/start.CKoCEnYJ.js.br +0 -0
  538. package/build/client/_app/immutable/entry/start.CKoCEnYJ.js.gz +0 -0
  539. package/build/client/_app/immutable/nodes/0.anwXhDvm.js +0 -1
  540. package/build/client/_app/immutable/nodes/0.anwXhDvm.js.br +0 -0
  541. package/build/client/_app/immutable/nodes/0.anwXhDvm.js.gz +0 -0
  542. package/build/client/_app/immutable/nodes/1.DrRwtvKf.js +0 -1
  543. package/build/client/_app/immutable/nodes/1.DrRwtvKf.js.br +0 -1
  544. package/build/client/_app/immutable/nodes/1.DrRwtvKf.js.gz +0 -0
  545. package/build/client/_app/immutable/nodes/10.BLqUjjTI.js +0 -1
  546. package/build/client/_app/immutable/nodes/10.BLqUjjTI.js.br +0 -0
  547. package/build/client/_app/immutable/nodes/10.BLqUjjTI.js.gz +0 -0
  548. package/build/client/_app/immutable/nodes/2.Di1bEoG2.js +0 -1
  549. package/build/client/_app/immutable/nodes/2.Di1bEoG2.js.br +0 -0
  550. package/build/client/_app/immutable/nodes/2.Di1bEoG2.js.gz +0 -0
  551. package/build/client/_app/immutable/nodes/3.DNLsgB0V.js +0 -1
  552. package/build/client/_app/immutable/nodes/3.DNLsgB0V.js.br +0 -0
  553. package/build/client/_app/immutable/nodes/3.DNLsgB0V.js.gz +0 -0
  554. package/build/client/_app/immutable/nodes/4.paHt3QH9.js +0 -124
  555. package/build/client/_app/immutable/nodes/4.paHt3QH9.js.br +0 -0
  556. package/build/client/_app/immutable/nodes/4.paHt3QH9.js.gz +0 -0
  557. package/build/client/_app/immutable/nodes/5.bKLnh085.js +0 -4
  558. package/build/client/_app/immutable/nodes/5.bKLnh085.js.br +0 -0
  559. package/build/client/_app/immutable/nodes/5.bKLnh085.js.gz +0 -0
  560. package/build/client/_app/immutable/nodes/6.DRi42KoD.js +0 -1
  561. package/build/client/_app/immutable/nodes/6.DRi42KoD.js.br +0 -0
  562. package/build/client/_app/immutable/nodes/6.DRi42KoD.js.gz +0 -0
  563. package/build/client/_app/immutable/nodes/7.BvgWYGnm.js +0 -2
  564. package/build/client/_app/immutable/nodes/7.BvgWYGnm.js.br +0 -0
  565. package/build/client/_app/immutable/nodes/7.BvgWYGnm.js.gz +0 -0
  566. package/build/client/_app/immutable/nodes/8.BKAKOw6V.js +0 -1
  567. package/build/client/_app/immutable/nodes/8.BKAKOw6V.js.br +0 -0
  568. package/build/client/_app/immutable/nodes/8.BKAKOw6V.js.gz +0 -0
  569. package/build/client/_app/immutable/nodes/9.DwWxN6-k.js +0 -6
  570. package/build/client/_app/immutable/nodes/9.DwWxN6-k.js.br +0 -0
  571. package/build/client/_app/immutable/nodes/9.DwWxN6-k.js.gz +0 -0
  572. package/build/server/chunks/0-BiE1oF-J.js +0 -22
  573. package/build/server/chunks/0-BiE1oF-J.js.map +0 -1
  574. package/build/server/chunks/1-B-LNip7q.js +0 -9
  575. package/build/server/chunks/1-B-LNip7q.js.map +0 -1
  576. package/build/server/chunks/10-CS2lFzh1.js +0 -69
  577. package/build/server/chunks/10-CS2lFzh1.js.map +0 -1
  578. package/build/server/chunks/2-BcxV9Utx.js +0 -9
  579. package/build/server/chunks/2-BcxV9Utx.js.map +0 -1
  580. package/build/server/chunks/3-EodZ49YI.js +0 -23
  581. package/build/server/chunks/3-EodZ49YI.js.map +0 -1
  582. package/build/server/chunks/4-CliJOxWK.js +0 -9
  583. package/build/server/chunks/4-CliJOxWK.js.map +0 -1
  584. package/build/server/chunks/5-DkkL3QsU.js +0 -9
  585. package/build/server/chunks/5-DkkL3QsU.js.map +0 -1
  586. package/build/server/chunks/6-B6ZHxJZG.js +0 -9
  587. package/build/server/chunks/6-B6ZHxJZG.js.map +0 -1
  588. package/build/server/chunks/7-CIl66k8R.js +0 -9
  589. package/build/server/chunks/7-CIl66k8R.js.map +0 -1
  590. package/build/server/chunks/8-Dbz3fLZs.js +0 -35
  591. package/build/server/chunks/8-Dbz3fLZs.js.map +0 -1
  592. package/build/server/chunks/9-CnaXNk2w.js +0 -9
  593. package/build/server/chunks/9-CnaXNk2w.js.map +0 -1
  594. package/build/server/chunks/IconAlert-eLDsz7qz.js +0 -5496
  595. package/build/server/chunks/IconAlert-eLDsz7qz.js.map +0 -1
  596. package/build/server/chunks/IconDone-YB1DYJFs.js +0 -10
  597. package/build/server/chunks/IconDone-YB1DYJFs.js.map +0 -1
  598. package/build/server/chunks/IconInfo-yYiI9uGe.js +0 -10
  599. package/build/server/chunks/IconInfo-yYiI9uGe.js.map +0 -1
  600. package/build/server/chunks/IconLock-DHiqGiiZ.js +0 -10
  601. package/build/server/chunks/IconLock-DHiqGiiZ.js.map +0 -1
  602. package/build/server/chunks/IconLogo-Iv-7q8aY.js +0 -10
  603. package/build/server/chunks/IconLogo-Iv-7q8aY.js.map +0 -1
  604. package/build/server/chunks/IconMic-DMJf4zcn.js +0 -1295
  605. package/build/server/chunks/IconMic-DMJf4zcn.js.map +0 -1
  606. package/build/server/chunks/Navbar-CbBudHU6.js +0 -403
  607. package/build/server/chunks/Navbar-CbBudHU6.js.map +0 -1
  608. package/build/server/chunks/Spinner-jfNKSy3m.js +0 -12
  609. package/build/server/chunks/Spinner-jfNKSy3m.js.map +0 -1
  610. package/build/server/chunks/_helpers-B_lb4-jB.js +0 -74
  611. package/build/server/chunks/_helpers-B_lb4-jB.js.map +0 -1
  612. package/build/server/chunks/_layout.svelte-B5opDXuf.js +0 -66
  613. package/build/server/chunks/_layout.svelte-B5opDXuf.js.map +0 -1
  614. package/build/server/chunks/_page.svelte-1VhBiAl_.js +0 -385
  615. package/build/server/chunks/_page.svelte-1VhBiAl_.js.map +0 -1
  616. package/build/server/chunks/_page.svelte-6gpwjZv0.js +0 -122
  617. package/build/server/chunks/_page.svelte-6gpwjZv0.js.map +0 -1
  618. package/build/server/chunks/_page.svelte-Bd16jege.js +0 -47
  619. package/build/server/chunks/_page.svelte-Bd16jege.js.map +0 -1
  620. package/build/server/chunks/_page.svelte-Boq5WJfs.js +0 -3289
  621. package/build/server/chunks/_page.svelte-Boq5WJfs.js.map +0 -1
  622. package/build/server/chunks/_page.svelte-DM-4V1_g.js +0 -79
  623. package/build/server/chunks/_page.svelte-DM-4V1_g.js.map +0 -1
  624. package/build/server/chunks/_page.svelte-jdDbUptn.js +0 -89
  625. package/build/server/chunks/_page.svelte-jdDbUptn.js.map +0 -1
  626. package/build/server/chunks/_page.svelte-yAnFAnHi.js +0 -74
  627. package/build/server/chunks/_page.svelte-yAnFAnHi.js.map +0 -1
  628. package/build/server/chunks/_server.ts-0x3ZsRoq.js +0 -41
  629. package/build/server/chunks/_server.ts-0x3ZsRoq.js.map +0 -1
  630. package/build/server/chunks/_server.ts-1fytrAUC.js +0 -105
  631. package/build/server/chunks/_server.ts-1fytrAUC.js.map +0 -1
  632. package/build/server/chunks/_server.ts-2trnHYNR.js +0 -103
  633. package/build/server/chunks/_server.ts-2trnHYNR.js.map +0 -1
  634. package/build/server/chunks/_server.ts-33LuQvHu.js +0 -19
  635. package/build/server/chunks/_server.ts-33LuQvHu.js.map +0 -1
  636. package/build/server/chunks/_server.ts-3IGr8J7j.js +0 -103
  637. package/build/server/chunks/_server.ts-3IGr8J7j.js.map +0 -1
  638. package/build/server/chunks/_server.ts-4HApbECL.js +0 -49
  639. package/build/server/chunks/_server.ts-4HApbECL.js.map +0 -1
  640. package/build/server/chunks/_server.ts-4cGCnV5A.js +0 -172
  641. package/build/server/chunks/_server.ts-4cGCnV5A.js.map +0 -1
  642. package/build/server/chunks/_server.ts-5mKh6tgD.js +0 -56
  643. package/build/server/chunks/_server.ts-5mKh6tgD.js.map +0 -1
  644. package/build/server/chunks/_server.ts-B-gZIXCx.js +0 -120
  645. package/build/server/chunks/_server.ts-B-gZIXCx.js.map +0 -1
  646. package/build/server/chunks/_server.ts-B1LApKwc.js +0 -48
  647. package/build/server/chunks/_server.ts-B1LApKwc.js.map +0 -1
  648. package/build/server/chunks/_server.ts-B5s8k9IW.js +0 -53
  649. package/build/server/chunks/_server.ts-B5s8k9IW.js.map +0 -1
  650. package/build/server/chunks/_server.ts-B7oDgVRm.js +0 -208
  651. package/build/server/chunks/_server.ts-B7oDgVRm.js.map +0 -1
  652. package/build/server/chunks/_server.ts-BA7OxoAM.js +0 -69
  653. package/build/server/chunks/_server.ts-BA7OxoAM.js.map +0 -1
  654. package/build/server/chunks/_server.ts-BCqZP9mX.js +0 -94
  655. package/build/server/chunks/_server.ts-BCqZP9mX.js.map +0 -1
  656. package/build/server/chunks/_server.ts-BE9eO04W.js +0 -100
  657. package/build/server/chunks/_server.ts-BE9eO04W.js.map +0 -1
  658. package/build/server/chunks/_server.ts-BL9qmwrJ.js +0 -152
  659. package/build/server/chunks/_server.ts-BL9qmwrJ.js.map +0 -1
  660. package/build/server/chunks/_server.ts-BUf-IIIm.js +0 -85
  661. package/build/server/chunks/_server.ts-BUf-IIIm.js.map +0 -1
  662. package/build/server/chunks/_server.ts-BW13CurN.js +0 -43
  663. package/build/server/chunks/_server.ts-BW13CurN.js.map +0 -1
  664. package/build/server/chunks/_server.ts-BWh3c-xu.js +0 -44
  665. package/build/server/chunks/_server.ts-BWh3c-xu.js.map +0 -1
  666. package/build/server/chunks/_server.ts-BYDgL8Wh.js +0 -68
  667. package/build/server/chunks/_server.ts-BYDgL8Wh.js.map +0 -1
  668. package/build/server/chunks/_server.ts-B_9-b1wk.js +0 -82
  669. package/build/server/chunks/_server.ts-B_9-b1wk.js.map +0 -1
  670. package/build/server/chunks/_server.ts-Bbc4zzJy.js +0 -39
  671. package/build/server/chunks/_server.ts-Bbc4zzJy.js.map +0 -1
  672. package/build/server/chunks/_server.ts-BhmHIGs6.js +0 -45
  673. package/build/server/chunks/_server.ts-BhmHIGs6.js.map +0 -1
  674. package/build/server/chunks/_server.ts-BhuoSeRy.js +0 -64
  675. package/build/server/chunks/_server.ts-BhuoSeRy.js.map +0 -1
  676. package/build/server/chunks/_server.ts-BnL_ReBS.js +0 -50
  677. package/build/server/chunks/_server.ts-BnL_ReBS.js.map +0 -1
  678. package/build/server/chunks/_server.ts-BoOQ7F2z.js +0 -40
  679. package/build/server/chunks/_server.ts-BoOQ7F2z.js.map +0 -1
  680. package/build/server/chunks/_server.ts-Bry3Z40C.js +0 -160
  681. package/build/server/chunks/_server.ts-Bry3Z40C.js.map +0 -1
  682. package/build/server/chunks/_server.ts-BtVLVJf0.js +0 -80
  683. package/build/server/chunks/_server.ts-BtVLVJf0.js.map +0 -1
  684. package/build/server/chunks/_server.ts-BzISiSHa.js +0 -57
  685. package/build/server/chunks/_server.ts-BzISiSHa.js.map +0 -1
  686. package/build/server/chunks/_server.ts-C7PeR-ll.js +0 -112
  687. package/build/server/chunks/_server.ts-C7PeR-ll.js.map +0 -1
  688. package/build/server/chunks/_server.ts-C8NW6VWR.js +0 -55
  689. package/build/server/chunks/_server.ts-C8NW6VWR.js.map +0 -1
  690. package/build/server/chunks/_server.ts-CF0aKxAL.js +0 -59
  691. package/build/server/chunks/_server.ts-CF0aKxAL.js.map +0 -1
  692. package/build/server/chunks/_server.ts-CH-OPdXJ.js +0 -56
  693. package/build/server/chunks/_server.ts-CH-OPdXJ.js.map +0 -1
  694. package/build/server/chunks/_server.ts-CPsQ5aGi.js +0 -79
  695. package/build/server/chunks/_server.ts-CPsQ5aGi.js.map +0 -1
  696. package/build/server/chunks/_server.ts-CQ8JX5O7.js +0 -89
  697. package/build/server/chunks/_server.ts-CQ8JX5O7.js.map +0 -1
  698. package/build/server/chunks/_server.ts-CQPRTbTX.js +0 -63
  699. package/build/server/chunks/_server.ts-CQPRTbTX.js.map +0 -1
  700. package/build/server/chunks/_server.ts-CTVpEmAc.js +0 -517
  701. package/build/server/chunks/_server.ts-CTVpEmAc.js.map +0 -1
  702. package/build/server/chunks/_server.ts-CWVi9VhR.js +0 -76
  703. package/build/server/chunks/_server.ts-CWVi9VhR.js.map +0 -1
  704. package/build/server/chunks/_server.ts-CXQd0L0u.js +0 -57
  705. package/build/server/chunks/_server.ts-CXQd0L0u.js.map +0 -1
  706. package/build/server/chunks/_server.ts-Cgg_3L-k.js +0 -44
  707. package/build/server/chunks/_server.ts-Cgg_3L-k.js.map +0 -1
  708. package/build/server/chunks/_server.ts-ChvbGMR6.js +0 -50
  709. package/build/server/chunks/_server.ts-ChvbGMR6.js.map +0 -1
  710. package/build/server/chunks/_server.ts-CnByyw9m.js +0 -35
  711. package/build/server/chunks/_server.ts-CnByyw9m.js.map +0 -1
  712. package/build/server/chunks/_server.ts-Ct_0qiMK.js +0 -76
  713. package/build/server/chunks/_server.ts-Ct_0qiMK.js.map +0 -1
  714. package/build/server/chunks/_server.ts-Cu1u6Fq3.js +0 -244
  715. package/build/server/chunks/_server.ts-Cu1u6Fq3.js.map +0 -1
  716. package/build/server/chunks/_server.ts-Cuq4zRUh.js +0 -66
  717. package/build/server/chunks/_server.ts-Cuq4zRUh.js.map +0 -1
  718. package/build/server/chunks/_server.ts-Cx8pH99_.js +0 -43
  719. package/build/server/chunks/_server.ts-Cx8pH99_.js.map +0 -1
  720. package/build/server/chunks/_server.ts-D-eORdC8.js +0 -57
  721. package/build/server/chunks/_server.ts-D-eORdC8.js.map +0 -1
  722. package/build/server/chunks/_server.ts-D1cvo-nO.js +0 -55
  723. package/build/server/chunks/_server.ts-D1cvo-nO.js.map +0 -1
  724. package/build/server/chunks/_server.ts-D4nuqQNX.js +0 -85
  725. package/build/server/chunks/_server.ts-D4nuqQNX.js.map +0 -1
  726. package/build/server/chunks/_server.ts-D6aAJoCf.js +0 -70
  727. package/build/server/chunks/_server.ts-D6aAJoCf.js.map +0 -1
  728. package/build/server/chunks/_server.ts-D9PUEjiN.js +0 -47
  729. package/build/server/chunks/_server.ts-D9PUEjiN.js.map +0 -1
  730. package/build/server/chunks/_server.ts-DAiD8z-P.js +0 -47
  731. package/build/server/chunks/_server.ts-DAiD8z-P.js.map +0 -1
  732. package/build/server/chunks/_server.ts-DDKL_uuS.js +0 -203
  733. package/build/server/chunks/_server.ts-DDKL_uuS.js.map +0 -1
  734. package/build/server/chunks/_server.ts-DGkgd0uc.js +0 -166
  735. package/build/server/chunks/_server.ts-DGkgd0uc.js.map +0 -1
  736. package/build/server/chunks/_server.ts-DHig-2Ii.js +0 -58
  737. package/build/server/chunks/_server.ts-DHig-2Ii.js.map +0 -1
  738. package/build/server/chunks/_server.ts-DJdHVo2c.js +0 -36
  739. package/build/server/chunks/_server.ts-DJdHVo2c.js.map +0 -1
  740. package/build/server/chunks/_server.ts-DLrsnGKc.js +0 -64
  741. package/build/server/chunks/_server.ts-DLrsnGKc.js.map +0 -1
  742. package/build/server/chunks/_server.ts-DRYh6JJM.js +0 -36
  743. package/build/server/chunks/_server.ts-DRYh6JJM.js.map +0 -1
  744. package/build/server/chunks/_server.ts-DUbqsB2y.js +0 -43
  745. package/build/server/chunks/_server.ts-DUbqsB2y.js.map +0 -1
  746. package/build/server/chunks/_server.ts-DVRwJs1D.js +0 -89
  747. package/build/server/chunks/_server.ts-DVRwJs1D.js.map +0 -1
  748. package/build/server/chunks/_server.ts-DYZ1SnMq.js +0 -44
  749. package/build/server/chunks/_server.ts-DYZ1SnMq.js.map +0 -1
  750. package/build/server/chunks/_server.ts-DdpgDdUI.js +0 -59
  751. package/build/server/chunks/_server.ts-DdpgDdUI.js.map +0 -1
  752. package/build/server/chunks/_server.ts-DhVR_dEn.js +0 -67
  753. package/build/server/chunks/_server.ts-DhVR_dEn.js.map +0 -1
  754. package/build/server/chunks/_server.ts-DorWUEnZ.js +0 -762
  755. package/build/server/chunks/_server.ts-DorWUEnZ.js.map +0 -1
  756. package/build/server/chunks/_server.ts-DptdgCp1.js +0 -92
  757. package/build/server/chunks/_server.ts-DptdgCp1.js.map +0 -1
  758. package/build/server/chunks/_server.ts-DyFhMY-d.js +0 -84
  759. package/build/server/chunks/_server.ts-DyFhMY-d.js.map +0 -1
  760. package/build/server/chunks/_server.ts-FBHhAciM.js +0 -149
  761. package/build/server/chunks/_server.ts-FBHhAciM.js.map +0 -1
  762. package/build/server/chunks/_server.ts-H0_rl9HF.js +0 -66
  763. package/build/server/chunks/_server.ts-H0_rl9HF.js.map +0 -1
  764. package/build/server/chunks/_server.ts-MGCXhBlP.js +0 -52
  765. package/build/server/chunks/_server.ts-MGCXhBlP.js.map +0 -1
  766. package/build/server/chunks/_server.ts-OXR06_zO.js +0 -167
  767. package/build/server/chunks/_server.ts-OXR06_zO.js.map +0 -1
  768. package/build/server/chunks/_server.ts-QbGAW-It.js +0 -58
  769. package/build/server/chunks/_server.ts-QbGAW-It.js.map +0 -1
  770. package/build/server/chunks/_server.ts-TAvt1Rlb.js +0 -57
  771. package/build/server/chunks/_server.ts-TAvt1Rlb.js.map +0 -1
  772. package/build/server/chunks/_server.ts-VXMfJF_F.js +0 -62
  773. package/build/server/chunks/_server.ts-VXMfJF_F.js.map +0 -1
  774. package/build/server/chunks/_server.ts-XiInWDAF.js +0 -82
  775. package/build/server/chunks/_server.ts-XiInWDAF.js.map +0 -1
  776. package/build/server/chunks/_server.ts-d08IyVdj.js +0 -54
  777. package/build/server/chunks/_server.ts-d08IyVdj.js.map +0 -1
  778. package/build/server/chunks/_server.ts-dtw_InfP.js +0 -36
  779. package/build/server/chunks/_server.ts-dtw_InfP.js.map +0 -1
  780. package/build/server/chunks/_server.ts-eTP3NGlu.js +0 -49
  781. package/build/server/chunks/_server.ts-eTP3NGlu.js.map +0 -1
  782. package/build/server/chunks/_server.ts-fm-L_1WH.js +0 -56
  783. package/build/server/chunks/_server.ts-fm-L_1WH.js.map +0 -1
  784. package/build/server/chunks/_server.ts-g5H0gdQB.js +0 -70
  785. package/build/server/chunks/_server.ts-g5H0gdQB.js.map +0 -1
  786. package/build/server/chunks/_server.ts-gBvSTaRH.js +0 -78
  787. package/build/server/chunks/_server.ts-gBvSTaRH.js.map +0 -1
  788. package/build/server/chunks/_server.ts-lMB9A2Vx.js +0 -92
  789. package/build/server/chunks/_server.ts-lMB9A2Vx.js.map +0 -1
  790. package/build/server/chunks/_server.ts-tww34LXr.js +0 -42
  791. package/build/server/chunks/_server.ts-tww34LXr.js.map +0 -1
  792. package/build/server/chunks/_server.ts-xgg0Rj1C.js +0 -129
  793. package/build/server/chunks/_server.ts-xgg0Rj1C.js.map +0 -1
  794. package/build/server/chunks/_server.ts-yO3j4YDH.js +0 -169
  795. package/build/server/chunks/_server.ts-yO3j4YDH.js.map +0 -1
  796. package/build/server/chunks/addon-helpers-DnZ1IPC7.js +0 -51
  797. package/build/server/chunks/addon-helpers-DnZ1IPC7.js.map +0 -1
  798. package/build/server/chunks/akm-BVM3F-FY.js +0 -151
  799. package/build/server/chunks/akm-BVM3F-FY.js.map +0 -1
  800. package/build/server/chunks/catalog-B_9Qf_Tj.js +0 -217
  801. package/build/server/chunks/catalog-B_9Qf_Tj.js.map +0 -1
  802. package/build/server/chunks/client-CEfPhREO.js +0 -202
  803. package/build/server/chunks/client-CEfPhREO.js.map +0 -1
  804. package/build/server/chunks/config-VJ5wAdKd.js +0 -121
  805. package/build/server/chunks/config-VJ5wAdKd.js.map +0 -1
  806. package/build/server/chunks/dist-DOFcG0Zp.js +0 -6617
  807. package/build/server/chunks/dist-DOFcG0Zp.js.map +0 -1
  808. package/build/server/chunks/docker-7rKo0FDm.js +0 -20
  809. package/build/server/chunks/docker-7rKo0FDm.js.map +0 -1
  810. package/build/server/chunks/endpoints-DUs5zmwI.js +0 -358
  811. package/build/server/chunks/endpoints-DUs5zmwI.js.map +0 -1
  812. package/build/server/chunks/environment-DqfL567G.js +0 -38
  813. package/build/server/chunks/environment-DqfL567G.js.map +0 -1
  814. package/build/server/chunks/error.svelte-DXUxoirZ.js +0 -18
  815. package/build/server/chunks/error.svelte-DXUxoirZ.js.map +0 -1
  816. package/build/server/chunks/exports-D1quPX8S.js +0 -124
  817. package/build/server/chunks/exports-D1quPX8S.js.map +0 -1
  818. package/build/server/chunks/exports2-DECEtwH0.js +0 -691
  819. package/build/server/chunks/exports2-DECEtwH0.js.map +0 -1
  820. package/build/server/chunks/features-h0rPqe2e.js +0 -15
  821. package/build/server/chunks/features-h0rPqe2e.js.map +0 -1
  822. package/build/server/chunks/features.svelte-DsfDrPnq.js +0 -11
  823. package/build/server/chunks/features.svelte-DsfDrPnq.js.map +0 -1
  824. package/build/server/chunks/helpers-GEmeDI6e.js +0 -293
  825. package/build/server/chunks/helpers-GEmeDI6e.js.map +0 -1
  826. package/build/server/chunks/hooks.server-CwgeONEs.js +0 -155
  827. package/build/server/chunks/hooks.server-CwgeONEs.js.map +0 -1
  828. package/build/server/chunks/http-BzGcbSMh.js +0 -31
  829. package/build/server/chunks/http-BzGcbSMh.js.map +0 -1
  830. package/build/server/chunks/internal-CWT3-fy-.js +0 -915
  831. package/build/server/chunks/internal-CWT3-fy-.js.map +0 -1
  832. package/build/server/chunks/paths-D8yGDgAD.js +0 -17
  833. package/build/server/chunks/paths-D8yGDgAD.js.map +0 -1
  834. package/build/server/chunks/provider-constants-DPrj3yBX.js +0 -63
  835. package/build/server/chunks/provider-constants-DPrj3yBX.js.map +0 -1
  836. package/build/server/chunks/session-cookie-IMj1chTO.js +0 -74
  837. package/build/server/chunks/session-cookie-IMj1chTO.js.map +0 -1
  838. package/build/server/chunks/setup-deploy-DhMA_slP.js +0 -75
  839. package/build/server/chunks/setup-deploy-DhMA_slP.js.map +0 -1
  840. package/build/server/chunks/src-DBYue8Tb.js +0 -9682
  841. package/build/server/chunks/src-DBYue8Tb.js.map +0 -1
  842. package/build/server/chunks/state-Bpt5dC1X.js +0 -24
  843. package/build/server/chunks/state-Bpt5dC1X.js.map +0 -1
  844. package/build/server/chunks/state2-D20PkMjF.js +0 -62
  845. package/build/server/chunks/state2-D20PkMjF.js.map +0 -1
  846. package/build/server/chunks/theme-state.svelte-DPdcwIRf.js +0 -837
  847. package/build/server/chunks/theme-state.svelte-DPdcwIRf.js.map +0 -1
  848. package/build/server/chunks/utils-BSRjJDrZ.js +0 -150
  849. package/build/server/chunks/utils-BSRjJDrZ.js.map +0 -1
  850. /package/build/client/_app/immutable/assets/{6.BXlLAfIE.css → 4.BXlLAfIE.css} +0 -0
  851. /package/build/client/_app/immutable/assets/{6.BXlLAfIE.css.br → 4.BXlLAfIE.css.br} +0 -0
  852. /package/build/client/_app/immutable/assets/{6.BXlLAfIE.css.gz → 4.BXlLAfIE.css.gz} +0 -0
@@ -0,0 +1,2425 @@
1
+ import { F as head, d as attr, q as ensure_array_like, e as attr_class, s as escape_html, p as derived, f as attr_style, a9 as stringify, a0 as run } from './dev-D85DamNs.js';
2
+ import 'node:module';
3
+ import { b as addonProfileId, O as OLLAMA_DEFAULT_CHAT_MODEL, K as KNOWN_EMBEDDING_MODEL_DIMS } from './provider-constants-1s1k8kbj.js';
4
+ import { a as LOCAL_PROVIDER_IDS, f as friendlyProviderName, b as PROVIDERS, L as LOCAL_PROVIDERS, P as PORTALS, F as FRIENDLY_PROVIDER_NAMES, W as WIZARD_EXCLUDED_PROVIDERS } from './constants-B7J5DDaI.js';
5
+ import { r as resolve } from './paths-tzRSDsKc.js';
6
+ import { I as IconLogo } from './IconLogo-BRmPVDI_.js';
7
+ import { S as Spinner, I as IconMic } from './IconMic-BbjkE_nG.js';
8
+ import { I as IconAgent, a as IconAlert } from './IconAgent-DeBWj6Gr.js';
9
+ import './internal-G-Uk-kCA.js';
10
+ import './environment-BYp8JQYM.js';
11
+
12
+ //#region src/lib/client/helpers.ts
13
+ function selectAddonProfileId(profiles, addon, gpuDetected, variant) {
14
+ const avail = (p) => p.available !== false;
15
+ const preferred = addonProfileId(addon, variant ?? (gpuDetected ? "cuda" : "cpu"));
16
+ const cpu = addonProfileId(addon, "cpu");
17
+ return (profiles.find((p) => p.id === preferred && avail(p)) ?? profiles.find((p) => p.default && avail(p)) ?? profiles.find((p) => p.id === cpu && avail(p)) ?? profiles.find((p) => avail(p)))?.id;
18
+ }
19
+ /** Strip an Ollama-style ":tag" suffix so "llama3.2" matches "llama3.2:latest". */
20
+ function baseModelId(model) {
21
+ return model.replace(/:.*$/, "");
22
+ }
23
+ /** True for embedding models — never offered/auto-picked for the chat/small role. */
24
+ function isEmbeddingModelId(model) {
25
+ const base = baseModelId(model);
26
+ if (KNOWN_EMBEDDING_MODEL_DIMS[model] !== void 0 || KNOWN_EMBEDDING_MODEL_DIMS[base] !== void 0) return true;
27
+ return /(?:^|[-/_.])(embed|embedding|bge|gte|e5|nomic|mxbai|arctic-embed|minilm)/i.test(model);
28
+ }
29
+ /** Heuristic score for a chat ('llm') or 'small' model. Higher = better default. */
30
+ function scoreModelForRole(roleId, model) {
31
+ const m = model.toLowerCase();
32
+ let s = 0;
33
+ if (/instruct|chat|-it\b|\bit\b/.test(m)) s += 30;
34
+ if (/coder|code/.test(m)) s += 8;
35
+ const sizeMatch = m.match(/(\d+(?:\.\d+)?)\s*x?\s*b\b/);
36
+ const sizeB = sizeMatch ? parseFloat(sizeMatch[1]) : 0;
37
+ if (roleId === "llm") s += Math.min(40, sizeB);
38
+ else s += Math.max(0, 20 - Math.min(20, sizeB));
39
+ return s;
40
+ }
41
+ /**
42
+ * Build the ranked list of model options for a role across all verified
43
+ * providers. For chat/small: embedding models are excluded and results are
44
+ * ordered best-first (host/cloud before local, provider's declared default,
45
+ * then the role heuristic) so options[0] is the sensible auto-pick. For
46
+ * embedding: only real embedding models are returned (may be empty — akm
47
+ * self-embeds locally, so an empty list is fine and the role is auto-handled).
48
+ */
49
+ function buildModelOptions(roleId, verifiedProviders, providerState) {
50
+ const options = [];
51
+ for (const p of verifiedProviders) {
52
+ const st = providerState[p.id];
53
+ if (!st) continue;
54
+ const defaultModel = roleId === "embedding" ? p.embModel : p.llmModel;
55
+ const models = st.models.length > 0 ? st.models : [];
56
+ const matchedDefault = defaultModel ? models.find((m) => m === defaultModel || baseModelId(m) === baseModelId(defaultModel)) : void 0;
57
+ for (const m of models) {
58
+ if (roleId !== "embedding" && isEmbeddingModelId(m)) continue;
59
+ const dims = roleId === "embedding" ? KNOWN_EMBEDDING_MODEL_DIMS[m] ?? KNOWN_EMBEDDING_MODEL_DIMS[baseModelId(m)] ?? (m === matchedDefault ? p.embDims : 0) ?? 0 : 0;
60
+ options.push({
61
+ id: m,
62
+ connId: p.id,
63
+ providerName: p.name,
64
+ baseUrl: st.baseUrl || p.baseUrl,
65
+ isDefault: m === matchedDefault,
66
+ dims
67
+ });
68
+ }
69
+ }
70
+ if (roleId === "embedding") return options.filter((o) => o.isDefault || o.dims > 0);
71
+ return options.sort((a, b) => (LOCAL_PROVIDER_IDS.has(a.connId) ? 1 : 0) - (LOCAL_PROVIDER_IDS.has(b.connId) ? 1 : 0) || (b.isDefault ? 1 : 0) - (a.isDefault ? 1 : 0) || scoreModelForRole(roleId, b.id) - scoreModelForRole(roleId, a.id));
72
+ }
73
+ /**
74
+ * Resolve which voice engine to use for one side (TTS or STT).
75
+ *
76
+ * - An explicit engine in `side` wins unconditionally.
77
+ * - No explicit engine + bundled voice enabled → openpalm-voice.
78
+ * - No explicit engine + bundled voice off → fallback engine (e.g. 'browser-tts').
79
+ *
80
+ * Pass fallbackEngine='' for the "persisted" form (nothing saved when untouched).
81
+ * Pass a concrete fallback for the "displayed" form so the UI shows the real default.
82
+ */
83
+ function resolveVoiceSide(side, enableVoice, fallbackEngine) {
84
+ if (side.engine) return side;
85
+ if (enableVoice) return { engine: "openpalm-voice" };
86
+ return { engine: fallbackEngine };
87
+ }
88
+ function isPortalEnabled(portalSelection, chId, locked) {
89
+ if (locked) return true;
90
+ const sel = portalSelection[chId];
91
+ if (typeof sel === "object" && sel !== null) return sel.enabled;
92
+ return !!sel;
93
+ }
94
+ function getCredValue(portalSelection, chId, key) {
95
+ const sel = portalSelection[chId];
96
+ if (typeof sel === "object" && sel !== null) return String(sel[key] ?? "");
97
+ return "";
98
+ }
99
+ /** 32-hex-char (128-bit) random password used as the OP_UI_LOGIN_PASSWORD default. */
100
+ function generatePassword() {
101
+ const arr = new Uint8Array(16);
102
+ crypto.getRandomValues(arr);
103
+ return Array.from(arr, (b) => b.toString(16).padStart(2, "0")).join("");
104
+ }
105
+ /**
106
+ * Collapse the wizard's `portalSelection` state into the enabled-portals config
107
+ * consumed by the install payload. Locked portals (e.g. the API endpoint) are
108
+ * always `true`; toggled portals with credentials become `{ enabled, ...creds }`;
109
+ * a plain-boolean selection becomes `true`. Disabled portals are omitted.
110
+ */
111
+ function buildPortalsConfig(portalSelection) {
112
+ const result = {};
113
+ for (const ch of PORTALS) {
114
+ const sel = portalSelection[ch.id];
115
+ if (ch.locked) result[ch.id] = true;
116
+ else if (typeof sel === "object" && sel !== null) {
117
+ if (sel.enabled) {
118
+ const entry = { enabled: true };
119
+ if (ch.credentials) for (const cred of ch.credentials) {
120
+ const v = sel[cred.key];
121
+ if (v) entry[cred.key] = v;
122
+ }
123
+ result[ch.id] = entry;
124
+ }
125
+ } else if (sel) result[ch.id] = true;
126
+ }
127
+ return result;
128
+ }
129
+ /**
130
+ * Build the list of verified providers used to assemble capabilities/models.
131
+ *
132
+ * When OpenCode is available: start from the verified OpenCode providers
133
+ * (inheriting llmModel/embModel/embDims from the static fallback for local
134
+ * providers), then append any verified static providers not already in the
135
+ * OpenCode list (e.g. Ollama added by the wizard's "Include Ollama" toggle).
136
+ * When OpenCode is unavailable: just the verified static providers.
137
+ */
138
+ function buildVerifiedProviders(opencodeAvailable, opencodeProviders, providerState) {
139
+ if (opencodeAvailable) {
140
+ const fromOpenCode = opencodeProviders.filter((p) => providerState[p.id]?.verified).map((p) => {
141
+ const st = providerState[p.id];
142
+ const fallback = PROVIDERS.find((fp) => fp.id === p.id);
143
+ return {
144
+ id: p.id,
145
+ name: p.name ?? p.id,
146
+ kind: "cloud",
147
+ group: "",
148
+ order: 0,
149
+ icon: "",
150
+ desc: "",
151
+ baseUrl: st?.baseUrl ?? "",
152
+ llmModel: fallback?.llmModel ?? "",
153
+ embModel: fallback?.embModel ?? "",
154
+ embDims: fallback?.embDims ?? 0
155
+ };
156
+ });
157
+ const openCodeIds = new Set(fromOpenCode.map((p) => p.id));
158
+ const fromStatic = PROVIDERS.filter((p) => !openCodeIds.has(p.id) && providerState[p.id]?.verified).map((p) => {
159
+ const st = providerState[p.id];
160
+ return {
161
+ id: p.id,
162
+ name: p.name,
163
+ kind: p.kind,
164
+ group: p.group,
165
+ order: p.order,
166
+ icon: p.icon,
167
+ desc: p.desc,
168
+ baseUrl: st?.baseUrl ?? p.baseUrl,
169
+ llmModel: p.llmModel,
170
+ embModel: p.embModel,
171
+ embDims: p.embDims
172
+ };
173
+ });
174
+ return [...fromOpenCode, ...fromStatic];
175
+ }
176
+ return PROVIDERS.filter((p) => providerState[p.id]?.verified);
177
+ }
178
+ /**
179
+ * Fill any unset chat ('llm') / 'small' role with the best-ranked option from
180
+ * the verified providers. Embedding is never auto-selected — akm self-embeds
181
+ * locally, so the wizard leaves it unset unless the user picks one explicitly.
182
+ * Returns a NEW selection object; already-set roles are preserved untouched.
183
+ */
184
+ function computeAutoModelSelection(current, verifiedProviders, providerState) {
185
+ const next = { ...current };
186
+ for (const roleId of [
187
+ "llm",
188
+ "embedding",
189
+ "small"
190
+ ]) {
191
+ if (next[roleId]) continue;
192
+ if (roleId === "embedding") continue;
193
+ const options = buildModelOptions(roleId, verifiedProviders, providerState);
194
+ if (options.length === 0) continue;
195
+ const best = options[0];
196
+ next[roleId] = {
197
+ connId: best.connId,
198
+ model: best.id,
199
+ dims: best.dims
200
+ };
201
+ }
202
+ return next;
203
+ }
204
+ /**
205
+ * Resolve an imported host preference (e.g. "github-copilot/gpt-5.4") to a
206
+ * concrete selection using a 4-tier match against the role's options:
207
+ * 1. exact full id ("openai/gpt-4o")
208
+ * 2. provider-hint + model-name-part
209
+ * 3. model-name-part alone
210
+ * 4. offline fallback: provider verified but model list not yet loaded —
211
+ * trust the host preference directly rather than dropping it (#5).
212
+ * Returns undefined when nothing matches (or no preference given).
213
+ */
214
+ function resolvePreferredModelSelection(roleId, preferredModel, verifiedProviders, providerState) {
215
+ if (!preferredModel) return void 0;
216
+ const slashIdx = preferredModel.indexOf("/");
217
+ const providerHint = slashIdx > 0 ? preferredModel.slice(0, slashIdx) : "";
218
+ const modelIdPart = slashIdx > 0 ? preferredModel.slice(slashIdx + 1) : preferredModel;
219
+ const options = buildModelOptions(roleId, verifiedProviders, providerState);
220
+ const exactFull = options.find((o) => o.id === preferredModel);
221
+ if (exactFull) return {
222
+ connId: exactFull.connId,
223
+ model: exactFull.id,
224
+ dims: exactFull.dims
225
+ };
226
+ const providerMatch = providerHint ? options.find((o) => o.connId === providerHint && o.id === modelIdPart) : void 0;
227
+ if (providerMatch) return {
228
+ connId: providerMatch.connId,
229
+ model: providerMatch.id,
230
+ dims: providerMatch.dims
231
+ };
232
+ const nameMatch = options.find((o) => o.id === modelIdPart);
233
+ if (nameMatch) return {
234
+ connId: nameMatch.connId,
235
+ model: nameMatch.id,
236
+ dims: nameMatch.dims
237
+ };
238
+ if (providerHint && verifiedProviders.some((p) => p.id === providerHint)) return {
239
+ connId: providerHint,
240
+ model: modelIdPart,
241
+ dims: 0
242
+ };
243
+ }
244
+ //#endregion
245
+ //#region src/lib/setup/payload.ts
246
+ /** Serialize one voice side, or undefined when not chosen / a "skip-" sentinel. */
247
+ function voicePayload(v) {
248
+ if (!v.engine || v.engine.startsWith("skip-")) return void 0;
249
+ const out = {
250
+ enabled: true,
251
+ engine: v.engine
252
+ };
253
+ if (v.provider) out.provider = v.provider;
254
+ if (v.baseURL) out.baseURL = v.baseURL;
255
+ if (v.model) out.model = v.model;
256
+ if (v.voice) out.voice = v.voice;
257
+ if (v.language) out.language = v.language;
258
+ if (v.apiKey) out.apiKey = v.apiKey;
259
+ return out;
260
+ }
261
+ /**
262
+ * Build the install payload for /api/setup/complete from resolved wizard state.
263
+ *
264
+ * Pure — no reactivity, no fetch. Mirrors the former `payload` $derived exactly:
265
+ * - capabilities: verified providers referenced by the selected llm/emb/small.
266
+ * - addons: in-stack Ollama (suppressed when a host runtime is running), the
267
+ * bundled voice addon (when either side targets openpalm-voice), and portals.
268
+ * - llm/embedding go directly to akm config; voice sides only when explicit.
269
+ */
270
+ function buildSetupPayload(input) {
271
+ const { modelSelection, verifiedProviders, providerState, ollamaEnabled, hostLocalLlmRunning, persistedVoiceTts, persistedVoiceStt, selectedVoiceProfile, selectedOllamaProfile, portalSelection, uiLoginPassword, imageTag, hostAkmEnabled } = input;
272
+ const llm = modelSelection.llm;
273
+ const emb = modelSelection.embedding;
274
+ const small = modelSelection.small;
275
+ const capabilityProviderIds = {};
276
+ if (llm) capabilityProviderIds[llm.connId] = true;
277
+ if (emb) capabilityProviderIds[emb.connId] = true;
278
+ if (small?.model) capabilityProviderIds[small.connId] = true;
279
+ const capabilities = verifiedProviders.filter((p) => capabilityProviderIds[p.id]).map((p) => {
280
+ const st = providerState[p.id];
281
+ return {
282
+ id: p.id,
283
+ name: p.name,
284
+ provider: p.id,
285
+ baseUrl: st?.baseUrl ?? p.baseUrl,
286
+ apiKey: st?.apiKey ?? ""
287
+ };
288
+ });
289
+ const llmConnId = llm?.connId ?? "";
290
+ const embConnId = emb?.connId ?? "";
291
+ const llmCap = capabilities.find((c) => c.id === llmConnId);
292
+ const embCap = capabilities.find((c) => c.id === embConnId);
293
+ const llmProvider = llmCap?.provider ?? "";
294
+ const embProvider = embCap?.provider ?? "";
295
+ const addons = {};
296
+ if (ollamaEnabled && !hostLocalLlmRunning) addons.ollama = true;
297
+ if (persistedVoiceTts.engine === "openpalm-voice" || persistedVoiceStt.engine === "openpalm-voice") addons.voice = true;
298
+ const portalCredentials = {};
299
+ const portalsConfig = buildPortalsConfig(portalSelection);
300
+ for (const chId of Object.keys(portalsConfig)) {
301
+ const chVal = portalsConfig[chId];
302
+ if (chVal === true) addons[chId] = true;
303
+ else if (typeof chVal === "object" && chVal !== null) {
304
+ addons[chId] = true;
305
+ const creds = {};
306
+ for (const key of Object.keys(chVal)) if (key !== "enabled" && chVal[key]) creds[key] = String(chVal[key]);
307
+ if (Object.keys(creds).length > 0) portalCredentials[chId] = creds;
308
+ }
309
+ }
310
+ const result = {
311
+ version: 2,
312
+ addons,
313
+ security: { uiLoginPassword },
314
+ connections: capabilities
315
+ };
316
+ if (llmProvider && llm?.model) result.llm = {
317
+ provider: llmProvider,
318
+ model: llm.model,
319
+ baseUrl: llmCap?.baseUrl ?? ""
320
+ };
321
+ if (embProvider && emb?.model) result.embedding = {
322
+ provider: embProvider,
323
+ model: emb.model,
324
+ dims: emb.dims ?? 1536,
325
+ baseUrl: embCap?.baseUrl ?? ""
326
+ };
327
+ const ttsCap = voicePayload(persistedVoiceTts);
328
+ if (ttsCap) result.tts = ttsCap;
329
+ const sttCap = voicePayload(persistedVoiceStt);
330
+ if (sttCap) result.stt = sttCap;
331
+ if ((persistedVoiceTts.engine === "openpalm-voice" || persistedVoiceStt.engine === "openpalm-voice") && selectedVoiceProfile) result.voiceProfile = selectedVoiceProfile;
332
+ if (ollamaEnabled && selectedOllamaProfile) result.ollamaProfile = selectedOllamaProfile;
333
+ if (Object.keys(portalCredentials).length > 0) result.portalCredentials = portalCredentials;
334
+ if (imageTag.trim()) result.imageTag = imageTag.trim();
335
+ if (hostAkmEnabled) result.hostAkm = true;
336
+ return result;
337
+ }
338
+ /**
339
+ * Parse the current-config response into a PartialSetupState for rerun pre-fill.
340
+ *
341
+ * The inverse of buildSetupPayload: keeps the two directions from drifting on
342
+ * field semantics (llm/embedding/voice engines/profiles/addons/portals). Mirrors
343
+ * the former inline rerun parser in setup/+page.svelte. Pure — no side effects.
344
+ */
345
+ function parseSetupConfig(data) {
346
+ const result = {
347
+ enabledAddons: [],
348
+ portalCredentials: {}
349
+ };
350
+ if (typeof data.hostAkm === "boolean") result.hostAkmEnabled = data.hostAkm;
351
+ if (data.llm?.provider && data.llm?.model) result.llm = {
352
+ connId: data.llm.provider,
353
+ model: data.llm.model
354
+ };
355
+ if (data.embedding?.provider && data.embedding?.model) result.embedding = {
356
+ connId: data.embedding.provider,
357
+ model: data.embedding.model,
358
+ dims: data.embedding.dims
359
+ };
360
+ if (data.voice?.tts) {
361
+ const storedTts = data.voice.tts;
362
+ result.voiceTts = storedTts.engine ? {
363
+ ...storedTts,
364
+ engine: storedTts.engine
365
+ } : { engine: "" };
366
+ }
367
+ if (data.voice?.stt) {
368
+ const storedStt = data.voice.stt;
369
+ result.voiceStt = storedStt.engine ? {
370
+ ...storedStt,
371
+ engine: storedStt.engine
372
+ } : { engine: "" };
373
+ }
374
+ if (data.voice?.selectedProfile && typeof data.voice.selectedProfile === "string") result.selectedVoiceProfile = data.voice.selectedProfile;
375
+ const imp = data.importedModelPreferences;
376
+ if (imp?.model) result.importedLlmModel = imp.model;
377
+ if (imp?.small_model) result.importedSmallModel = imp.small_model;
378
+ const enabled = Array.isArray(data.enabledAddons) ? data.enabledAddons : [];
379
+ result.enabledAddons = enabled;
380
+ if (enabled.includes("ollama")) result.ollamaEnabled = true;
381
+ if (data.ollama?.selectedProfile && typeof data.ollama.selectedProfile === "string") result.selectedOllamaProfile = data.ollama.selectedProfile;
382
+ result.portalCredentials = data.portalCredentials ?? {};
383
+ return result;
384
+ }
385
+ //#endregion
386
+ //#region src/lib/setup-api.ts
387
+ var SETUP_BASE = "/api/setup";
388
+ async function setupRequest(method, path, body, signal) {
389
+ const init = { method };
390
+ if (body !== void 0) {
391
+ init.headers = { "Content-Type": "application/json" };
392
+ init.body = JSON.stringify(body);
393
+ }
394
+ if (signal) init.signal = signal;
395
+ return fetch(`${SETUP_BASE}${path}`, init);
396
+ }
397
+ /** GET /voice-profiles — null when the response was not ok. */
398
+ async function fetchVoiceProfiles() {
399
+ const res = await setupRequest("GET", "/voice-profiles");
400
+ if (!res.ok) return null;
401
+ return await res.json();
402
+ }
403
+ /** GET /ollama-profiles — null when the response was not ok. */
404
+ async function fetchOllamaProfiles() {
405
+ const res = await setupRequest("GET", "/ollama-profiles");
406
+ if (!res.ok) return null;
407
+ return await res.json();
408
+ }
409
+ /** GET /recommend — null when the response was not ok. */
410
+ async function fetchRecommendation() {
411
+ const res = await setupRequest("GET", "/recommend");
412
+ if (!res.ok) return null;
413
+ return await res.json();
414
+ }
415
+ /** POST /opencode/ensure — null when the response was not ok. */
416
+ async function ensureOpenCode() {
417
+ const res = await setupRequest("POST", "/opencode/ensure");
418
+ if (!res.ok) return null;
419
+ return await res.json();
420
+ }
421
+ /** GET /opencode/status — null when the response was not ok. */
422
+ async function fetchOpenCodeStatus() {
423
+ const res = await setupRequest("GET", "/opencode/status");
424
+ if (!res.ok) return null;
425
+ return await res.json();
426
+ }
427
+ /** GET /opencode/providers — null when the response was not ok. */
428
+ async function fetchOpenCodeProviders() {
429
+ const res = await setupRequest("GET", "/opencode/providers");
430
+ if (!res.ok) return null;
431
+ return await res.json();
432
+ }
433
+ /** GET /detect-providers — null when the response was not ok. */
434
+ async function fetchDetectedProviders() {
435
+ const res = await setupRequest("GET", "/detect-providers");
436
+ if (!res.ok) return null;
437
+ return await res.json();
438
+ }
439
+ /**
440
+ * POST /models/:provider — list models for a provider connection.
441
+ * Throws with the server's `error` (or an HTTP fallback) on a non-ok response
442
+ * OR a 200 body with status === 'recoverable_error'.
443
+ */
444
+ async function fetchProviderModels(provider, input) {
445
+ const res = await setupRequest("POST", `/models/${encodeURIComponent(provider)}`, {
446
+ apiKey: input.apiKey ?? "",
447
+ baseUrl: input.baseUrl ?? ""
448
+ });
449
+ const data = await res.json();
450
+ if (!res.ok || data.status === "recoverable_error") throw new Error(data.error ?? `Failed to fetch models (HTTP ${res.status})`);
451
+ return data;
452
+ }
453
+ /** POST /opencode/provider/:id/oauth/authorize — throws the server message on non-ok. */
454
+ async function authorizeOpenCodeOAuth(providerId, methodIndex) {
455
+ const res = await setupRequest("POST", `/opencode/provider/${encodeURIComponent(providerId)}/oauth/authorize`, { method: methodIndex });
456
+ const data = await res.json();
457
+ if (!res.ok) throw new Error(data.message ?? "OAuth failed");
458
+ return data;
459
+ }
460
+ /**
461
+ * POST /opencode/provider/:id/oauth/callback — the long-poll callback (caller
462
+ * supplies the combined abort/timeout signal). Returns { ok, data }; `data` is
463
+ * null when the body couldn't be parsed. Network/abort errors propagate so the
464
+ * caller can distinguish user-cancel from timeout.
465
+ */
466
+ async function pollOpenCodeOAuthCallback(providerId, methodIndex, signal) {
467
+ const res = await setupRequest("POST", `/opencode/provider/${encodeURIComponent(providerId)}/oauth/callback`, { method: methodIndex }, signal);
468
+ const data = await res.json().catch(() => null);
469
+ return {
470
+ ok: res.ok,
471
+ data
472
+ };
473
+ }
474
+ /** POST /complete — returns { ok, data }; `data` is {} when the body can't parse. */
475
+ async function completeSetup(payload) {
476
+ const res = await setupRequest("POST", "/complete", payload);
477
+ const data = await res.json().catch(() => ({}));
478
+ return {
479
+ ok: res.ok,
480
+ data
481
+ };
482
+ }
483
+ /** GET /deploy-status — returns { ok, data }; `data` is null when not ok. */
484
+ async function fetchDeployStatus() {
485
+ const res = await setupRequest("GET", "/deploy-status");
486
+ if (!res.ok) return {
487
+ ok: false,
488
+ data: null
489
+ };
490
+ return {
491
+ ok: true,
492
+ data: await res.json()
493
+ };
494
+ }
495
+ /** POST /retry-deploy — returns { ok, data }; `data` is {} when the body can't parse. */
496
+ async function retryDeploy() {
497
+ const res = await setupRequest("POST", "/retry-deploy");
498
+ const data = await res.json().catch(() => ({}));
499
+ return {
500
+ ok: res.ok,
501
+ data
502
+ };
503
+ }
504
+ /** GET /host-status — null when the response was not ok. */
505
+ async function fetchHostStatus() {
506
+ const res = await setupRequest("GET", "/host-status");
507
+ if (!res.ok) return null;
508
+ return await res.json();
509
+ }
510
+ /** POST /import-host — returns { ok, data }; `data` is null when the body can't parse. */
511
+ async function importHost() {
512
+ const res = await setupRequest("POST", "/import-host");
513
+ const data = await res.json().catch(() => null);
514
+ return {
515
+ ok: res.ok,
516
+ data
517
+ };
518
+ }
519
+ /** GET /current-config — null when the response was not ok. */
520
+ async function fetchCurrentConfig() {
521
+ const res = await setupRequest("GET", "/current-config");
522
+ if (!res.ok) return null;
523
+ return await res.json();
524
+ }
525
+ /** GET /status — parses the body regardless of HTTP status (matches the mount check). */
526
+ async function fetchSetupStatus() {
527
+ return await (await setupRequest("GET", "/status")).json();
528
+ }
529
+ //#endregion
530
+ //#region src/lib/setup/setup-state.svelte.ts
531
+ var INITIAL = {
532
+ currentStep: 0,
533
+ maxVisitedStep: 0,
534
+ showDeploy: false,
535
+ systemCheckPassed: false,
536
+ modelMode: "cloud",
537
+ voiceEnabled: false,
538
+ uiLoginPassword: "",
539
+ step0Error: "",
540
+ autoModeImporting: false,
541
+ gpuDetected: false,
542
+ providerState: {},
543
+ detectedHostProviders: [],
544
+ detectedProviders: [],
545
+ opencodeAvailable: false,
546
+ opencodeProviders: [],
547
+ opencodeAuth: {},
548
+ hostProviderCount: 0,
549
+ allowEmptyInstall: false,
550
+ recommendation: null,
551
+ recommendationAlert: "",
552
+ recommendationApplied: false,
553
+ detectedGpuVramMb: 0,
554
+ detectedGpuVendor: "",
555
+ detectedGpuName: "",
556
+ modelSelection: {},
557
+ voiceTts: { engine: "" },
558
+ voiceStt: { engine: "" },
559
+ voiceProfiles: [],
560
+ selectedVoiceProfile: "",
561
+ importedLlmModel: void 0,
562
+ importedSmallModel: void 0,
563
+ portalSelection: {
564
+ discord: {
565
+ enabled: false,
566
+ botToken: "",
567
+ applicationId: ""
568
+ },
569
+ slack: {
570
+ enabled: false,
571
+ slackBotToken: "",
572
+ slackAppToken: ""
573
+ }
574
+ },
575
+ ollamaEnabled: false,
576
+ ollamaProfiles: [],
577
+ selectedOllamaProfile: "",
578
+ imageTag: "",
579
+ hostAkmEnabled: false,
580
+ installError: "",
581
+ installing: false,
582
+ emptyAiAck: false,
583
+ deployData: {},
584
+ deployDone: false,
585
+ deployHasWarnings: false,
586
+ deployError: null,
587
+ deployPollErrors: 0,
588
+ savedCloudLlm: void 0,
589
+ detectedCloudConn: "",
590
+ hostImportTriggered: false,
591
+ hostImporting: false,
592
+ hostImportError: "",
593
+ isRerun: false
594
+ };
595
+ var SetupState = class {
596
+ currentStep = INITIAL.currentStep;
597
+ maxVisitedStep = INITIAL.maxVisitedStep;
598
+ showDeploy = INITIAL.showDeploy;
599
+ systemCheckPassed = INITIAL.systemCheckPassed;
600
+ modelMode = INITIAL.modelMode;
601
+ voiceEnabled = INITIAL.voiceEnabled;
602
+ uiLoginPassword = INITIAL.uiLoginPassword;
603
+ step0Error = INITIAL.step0Error;
604
+ autoModeImporting = INITIAL.autoModeImporting;
605
+ gpuDetected = INITIAL.gpuDetected;
606
+ providerState = INITIAL.providerState;
607
+ detectedHostProviders = INITIAL.detectedHostProviders;
608
+ detectedProviders = INITIAL.detectedProviders;
609
+ opencodeAvailable = INITIAL.opencodeAvailable;
610
+ opencodeProviders = INITIAL.opencodeProviders;
611
+ opencodeAuth = INITIAL.opencodeAuth;
612
+ hostProviderCount = INITIAL.hostProviderCount;
613
+ allowEmptyInstall = INITIAL.allowEmptyInstall;
614
+ recommendation = INITIAL.recommendation;
615
+ recommendationAlert = INITIAL.recommendationAlert;
616
+ recommendationApplied = INITIAL.recommendationApplied;
617
+ detectedGpuVramMb = INITIAL.detectedGpuVramMb;
618
+ detectedGpuVendor = INITIAL.detectedGpuVendor;
619
+ detectedGpuName = INITIAL.detectedGpuName;
620
+ /** Generation counter per provider — discard stale verify results */
621
+ verifyGeneration = {};
622
+ /** AbortControllers for in-flight OAuth long-poll requests */
623
+ oauthAbortControllers = {};
624
+ modelSelection = INITIAL.modelSelection;
625
+ voiceTts = INITIAL.voiceTts;
626
+ voiceStt = INITIAL.voiceStt;
627
+ voiceProfiles = INITIAL.voiceProfiles;
628
+ selectedVoiceProfile = INITIAL.selectedVoiceProfile;
629
+ importedLlmModel = INITIAL.importedLlmModel;
630
+ importedSmallModel = INITIAL.importedSmallModel;
631
+ portalSelection = INITIAL.portalSelection;
632
+ ollamaEnabled = INITIAL.ollamaEnabled;
633
+ ollamaProfiles = INITIAL.ollamaProfiles;
634
+ selectedOllamaProfile = INITIAL.selectedOllamaProfile;
635
+ imageTag = INITIAL.imageTag;
636
+ hostAkmEnabled = INITIAL.hostAkmEnabled;
637
+ installError = INITIAL.installError;
638
+ installing = INITIAL.installing;
639
+ emptyAiAck = INITIAL.emptyAiAck;
640
+ deployData = INITIAL.deployData;
641
+ deployDone = INITIAL.deployDone;
642
+ deployHasWarnings = INITIAL.deployHasWarnings;
643
+ deployError = INITIAL.deployError;
644
+ deployPollErrors = INITIAL.deployPollErrors;
645
+ deployTimer = null;
646
+ savedCloudLlm = INITIAL.savedCloudLlm;
647
+ detectedCloudConn = INITIAL.detectedCloudConn;
648
+ hostImportTriggered = INITIAL.hostImportTriggered;
649
+ hostImporting = INITIAL.hostImporting;
650
+ hostImportError = INITIAL.hostImportError;
651
+ isRerun = INITIAL.isRerun;
652
+ constructor() {
653
+ Object.assign(this, structuredClone(INITIAL));
654
+ }
655
+ #hostLocalLlmRunning = derived(() => this.providerState.ollama?.ollamaMode === "running" || this.detectedHostProviders.some((p) => p.provider === "ollama" || p.provider === "lmstudio"));
656
+ get hostLocalLlmRunning() {
657
+ return this.#hostLocalLlmRunning();
658
+ }
659
+ set hostLocalLlmRunning($$value) {
660
+ return this.#hostLocalLlmRunning($$value);
661
+ }
662
+ #verifiedCount = derived(() => {
663
+ return (this.opencodeAvailable ? this.opencodeProviders.map((p) => p.id) : PROVIDERS.map((p) => p.id)).filter((id) => this.providerState[id]?.verified).length;
664
+ });
665
+ get verifiedCount() {
666
+ return this.#verifiedCount();
667
+ }
668
+ set verifiedCount($$value) {
669
+ return this.#verifiedCount($$value);
670
+ }
671
+ #hasUsableAI = derived(() => !!this.modelSelection.llm?.model);
672
+ get hasUsableAI() {
673
+ return this.#hasUsableAI();
674
+ }
675
+ set hasUsableAI($$value) {
676
+ return this.#hasUsableAI($$value);
677
+ }
678
+ #verifiedProviders = derived(() => buildVerifiedProviders(this.opencodeAvailable, this.opencodeProviders, this.providerState));
679
+ get verifiedProviders() {
680
+ return this.#verifiedProviders();
681
+ }
682
+ set verifiedProviders($$value) {
683
+ return this.#verifiedProviders($$value);
684
+ }
685
+ #canComplete = derived(() => !!this.modelSelection.llm?.model || this.allowEmptyInstall);
686
+ get canComplete() {
687
+ return this.#canComplete();
688
+ }
689
+ set canComplete($$value) {
690
+ return this.#canComplete($$value);
691
+ }
692
+ #hasOpenAI = derived(() => PROVIDERS.some((p) => p.id === "openai" && this.providerState[p.id]?.verified));
693
+ get hasOpenAI() {
694
+ return this.#hasOpenAI();
695
+ }
696
+ set hasOpenAI($$value) {
697
+ return this.#hasOpenAI($$value);
698
+ }
699
+ #voiceDefaults = derived(() => this.hasOpenAI ? {
700
+ tts: "openai-tts",
701
+ stt: "openai-stt"
702
+ } : {
703
+ tts: "browser-tts",
704
+ stt: "browser-stt"
705
+ });
706
+ get voiceDefaults() {
707
+ return this.#voiceDefaults();
708
+ }
709
+ set voiceDefaults($$value) {
710
+ return this.#voiceDefaults($$value);
711
+ }
712
+ #enableVoice = derived(() => this.voiceTts.engine === "openpalm-voice" || this.voiceStt.engine === "openpalm-voice");
713
+ get enableVoice() {
714
+ return this.#enableVoice();
715
+ }
716
+ set enableVoice($$value) {
717
+ return this.#enableVoice($$value);
718
+ }
719
+ #displayedVoiceTts = derived(() => resolveVoiceSide(this.voiceTts, this.enableVoice, this.voiceDefaults.tts));
720
+ get displayedVoiceTts() {
721
+ return this.#displayedVoiceTts();
722
+ }
723
+ set displayedVoiceTts($$value) {
724
+ return this.#displayedVoiceTts($$value);
725
+ }
726
+ #displayedVoiceStt = derived(() => resolveVoiceSide(this.voiceStt, this.enableVoice, this.voiceDefaults.stt));
727
+ get displayedVoiceStt() {
728
+ return this.#displayedVoiceStt();
729
+ }
730
+ set displayedVoiceStt($$value) {
731
+ return this.#displayedVoiceStt($$value);
732
+ }
733
+ #persistedVoiceTts = derived(() => resolveVoiceSide(this.voiceTts, this.enableVoice, ""));
734
+ get persistedVoiceTts() {
735
+ return this.#persistedVoiceTts();
736
+ }
737
+ set persistedVoiceTts($$value) {
738
+ return this.#persistedVoiceTts($$value);
739
+ }
740
+ #persistedVoiceStt = derived(() => resolveVoiceSide(this.voiceStt, this.enableVoice, ""));
741
+ get persistedVoiceStt() {
742
+ return this.#persistedVoiceStt();
743
+ }
744
+ set persistedVoiceStt($$value) {
745
+ return this.#persistedVoiceStt($$value);
746
+ }
747
+ #payload = derived(() => buildSetupPayload({
748
+ modelSelection: this.modelSelection,
749
+ verifiedProviders: this.verifiedProviders,
750
+ providerState: this.providerState,
751
+ ollamaEnabled: this.ollamaEnabled,
752
+ hostLocalLlmRunning: this.hostLocalLlmRunning,
753
+ persistedVoiceTts: this.persistedVoiceTts,
754
+ persistedVoiceStt: this.persistedVoiceStt,
755
+ selectedVoiceProfile: this.selectedVoiceProfile,
756
+ selectedOllamaProfile: this.selectedOllamaProfile,
757
+ portalSelection: this.portalSelection,
758
+ uiLoginPassword: this.uiLoginPassword,
759
+ imageTag: this.imageTag,
760
+ hostAkmEnabled: this.hostAkmEnabled
761
+ }));
762
+ get payload() {
763
+ return this.#payload();
764
+ }
765
+ set payload($$value) {
766
+ return this.#payload($$value);
767
+ }
768
+ async loadVoiceProfiles() {
769
+ try {
770
+ const data = await fetchVoiceProfiles();
771
+ if (!data) return;
772
+ if (!Array.isArray(data.profiles)) return;
773
+ this.voiceProfiles = data.profiles;
774
+ const fallback = selectAddonProfileId(data.profiles, "voice", this.gpuDetected);
775
+ if (fallback) this.selectedVoiceProfile = fallback;
776
+ if (this.gpuDetected && this.selectedVoiceProfile !== addonProfileId("voice", "cuda")) {
777
+ const cuda = this.voiceProfiles.find((p) => p.id === addonProfileId("voice", "cuda") && p.available !== false);
778
+ if (cuda) this.selectedVoiceProfile = cuda.id;
779
+ }
780
+ } catch {}
781
+ }
782
+ async loadOllamaProfiles() {
783
+ try {
784
+ const data = await fetchOllamaProfiles();
785
+ if (!data) return;
786
+ if (!Array.isArray(data.profiles)) return;
787
+ this.ollamaProfiles = data.profiles;
788
+ const fallback = this.gpuDetected ? data.profiles.find((p) => p.id === addonProfileId("ollama", "cuda") && p.available !== false) ?? data.profiles.find((p) => p.default && p.available !== false) ?? data.profiles.find((p) => p.available !== false) : data.profiles.find((p) => p.id === addonProfileId("ollama", "cpu") && p.available !== false) ?? data.profiles.find((p) => p.default && p.available !== false) ?? data.profiles.find((p) => p.available !== false);
789
+ if (data.selectedProfile && typeof data.selectedProfile === "string") this.selectedOllamaProfile = data.selectedProfile;
790
+ else if (fallback) this.selectedOllamaProfile = fallback.id;
791
+ } catch {}
792
+ }
793
+ initProviderState() {
794
+ const state = {};
795
+ for (const p of PROVIDERS) state[p.id] = {
796
+ selected: false,
797
+ verified: false,
798
+ verifying: false,
799
+ error: false,
800
+ apiKey: "",
801
+ baseUrl: p.baseUrl ?? "",
802
+ models: [],
803
+ ollamaMode: null
804
+ };
805
+ this.providerState = state;
806
+ }
807
+ enableRecommendedOllama(variant) {
808
+ this.ollamaEnabled = true;
809
+ const st = this.providerState.ollama;
810
+ if (st) {
811
+ st.selected = true;
812
+ st.verified = true;
813
+ st.ollamaMode = "instack";
814
+ st.baseUrl = "http://ollama:11434";
815
+ if (st.models.length === 0) st.models = [OLLAMA_DEFAULT_CHAT_MODEL];
816
+ }
817
+ this.selectedOllamaProfile = selectAddonProfileId(this.ollamaProfiles, "ollama", this.gpuDetected, variant) ?? addonProfileId("ollama", variant ?? (this.gpuDetected ? "cuda" : "cpu"));
818
+ }
819
+ handleConnectModeChange(mode) {
820
+ this.modelMode = mode;
821
+ if (mode === "local") {
822
+ if (this.modelSelection.llm && !LOCAL_PROVIDER_IDS.has(this.modelSelection.llm.connId)) this.savedCloudLlm = this.modelSelection.llm;
823
+ if (!this.hostLocalLlmRunning) this.enableRecommendedOllama();
824
+ const localOpt = this.getModelOptionsForRole("llm").find((o) => LOCAL_PROVIDER_IDS.has(o.connId));
825
+ this.modelSelection.llm = localOpt ? {
826
+ connId: localOpt.connId,
827
+ model: localOpt.id,
828
+ dims: localOpt.dims
829
+ } : {
830
+ connId: "ollama",
831
+ model: OLLAMA_DEFAULT_CHAT_MODEL,
832
+ dims: 0
833
+ };
834
+ } else if (mode === "cloud") {
835
+ if (this.savedCloudLlm) this.modelSelection.llm = this.savedCloudLlm;
836
+ }
837
+ }
838
+ async fetchAndApplyRecommendation() {
839
+ if (this.recommendationApplied) return;
840
+ let rec;
841
+ if (this.recommendation) rec = this.recommendation;
842
+ else try {
843
+ const data = await fetchRecommendation();
844
+ if (!data) return;
845
+ if (!data.ok || !data.recommendation) return;
846
+ rec = data.recommendation;
847
+ if (Array.isArray(data.hostProviders)) this.detectedHostProviders = data.hostProviders;
848
+ if (data.gpu) {
849
+ this.detectedGpuVramMb = data.gpu.vramMb ?? 0;
850
+ this.detectedGpuVendor = data.gpu.vendor ?? "";
851
+ this.detectedGpuName = data.gpu.name ?? "";
852
+ }
853
+ } catch (e) {
854
+ console.warn("fetchAndApplyRecommendation failed", e);
855
+ return;
856
+ }
857
+ this.recommendationApplied = true;
858
+ this.recommendation = rec;
859
+ switch (rec.action) {
860
+ case "use-cloud":
861
+ this.recommendationAlert = "";
862
+ break;
863
+ case "use-host-providers":
864
+ this.recommendationAlert = rec.alert;
865
+ if (!this.hostImportTriggered) {
866
+ this.hostImportTriggered = true;
867
+ await this.handleHostImport();
868
+ }
869
+ break;
870
+ case "enable-ollama":
871
+ this.recommendationAlert = rec.alert;
872
+ this.enableRecommendedOllama(rec.profileVariant);
873
+ break;
874
+ case "connect-manually":
875
+ this.recommendationAlert = rec.alert;
876
+ break;
877
+ }
878
+ }
879
+ handleEnableVoiceChange(v) {
880
+ if (v) {
881
+ if (this.voiceTts.engine !== "openpalm-voice") this.voiceTts = { engine: "openpalm-voice" };
882
+ if (this.voiceStt.engine !== "openpalm-voice") this.voiceStt = { engine: "openpalm-voice" };
883
+ if (!this.selectedVoiceProfile) {
884
+ const match = selectAddonProfileId(this.voiceProfiles, "voice", this.gpuDetected);
885
+ if (match) this.selectedVoiceProfile = match;
886
+ }
887
+ } else {
888
+ if (this.voiceTts.engine === "openpalm-voice") this.voiceTts = { engine: "" };
889
+ if (this.voiceStt.engine === "openpalm-voice") this.voiceStt = { engine: "" };
890
+ }
891
+ }
892
+ goToStep(n) {
893
+ if (n < 0 || n > 3) return;
894
+ if (n > 0 && !this.systemCheckPassed) return;
895
+ this.currentStep = n;
896
+ if (n > this.maxVisitedStep) this.maxVisitedStep = n;
897
+ this.showDeploy = false;
898
+ if (n === 1 && !this.isRerun) {
899
+ this.fetchAndApplyRecommendation();
900
+ this.applyImportedModelPreferences();
901
+ this.autoSelectModels();
902
+ }
903
+ }
904
+ autoSelectModels() {
905
+ const next = computeAutoModelSelection(this.modelSelection, this.verifiedProviders, this.providerState);
906
+ for (const roleId of ["llm", "small"]) if (!this.modelSelection[roleId] && next[roleId]) this.modelSelection[roleId] = next[roleId];
907
+ }
908
+ getModelOptionsForRole(roleId) {
909
+ return buildModelOptions(roleId, this.verifiedProviders, this.providerState);
910
+ }
911
+ applyImportedOpenCodeModelSelections(selectedModels) {
912
+ if (!selectedModels) return;
913
+ if (selectedModels.llm) this.importedLlmModel = selectedModels.llm;
914
+ if (selectedModels.small) this.importedSmallModel = selectedModels.small;
915
+ this.applyImportedModelPreferences();
916
+ }
917
+ applyImportedModelPreferences() {
918
+ if (this.importedLlmModel) {
919
+ const llmSelection = resolvePreferredModelSelection("llm", this.importedLlmModel, this.verifiedProviders, this.providerState);
920
+ if (llmSelection) this.modelSelection.llm = llmSelection;
921
+ }
922
+ if (this.importedSmallModel) {
923
+ const smallSelection = resolvePreferredModelSelection("small", this.importedSmallModel, this.verifiedProviders, this.providerState);
924
+ if (smallSelection) this.modelSelection.small = smallSelection;
925
+ }
926
+ }
927
+ async checkOpenCodeAndInit() {
928
+ try {
929
+ if ((await ensureOpenCode())?.ok) {
930
+ this.opencodeAvailable = true;
931
+ await this.loadOpenCodeProviders();
932
+ return;
933
+ }
934
+ } catch {}
935
+ try {
936
+ if ((await fetchOpenCodeStatus())?.available) {
937
+ this.opencodeAvailable = true;
938
+ await this.loadOpenCodeProviders();
939
+ }
940
+ } catch {}
941
+ }
942
+ async loadOpenCodeProviders() {
943
+ const data = await fetchOpenCodeProviders();
944
+ if (!data) return;
945
+ if (!data.available || !Array.isArray(data.providers)) return;
946
+ const providers = data.providers;
947
+ const auth = data.auth ?? {};
948
+ const connected = new Set(Array.isArray(data.connected) ? data.connected : []);
949
+ const existingIds = new Set(providers.map((p) => p.id));
950
+ for (const lp of LOCAL_PROVIDERS) if (!existingIds.has(lp.id)) providers.push(lp);
951
+ this.opencodeProviders = providers;
952
+ this.opencodeAuth = auth;
953
+ const newState = { ...this.providerState };
954
+ for (const ocp of providers) {
955
+ if (!newState[ocp.id]) newState[ocp.id] = {
956
+ selected: false,
957
+ verified: false,
958
+ verifying: false,
959
+ error: false,
960
+ apiKey: "",
961
+ baseUrl: ocp.localUrl ?? "",
962
+ models: [],
963
+ ollamaMode: null
964
+ };
965
+ const modelIds = Object.keys(ocp.models ?? {});
966
+ if (modelIds.length > 0 && newState[ocp.id].models.length === 0) newState[ocp.id].models = modelIds;
967
+ if (connected.has(ocp.id)) newState[ocp.id].verified = true;
968
+ }
969
+ this.providerState = newState;
970
+ this.applyImportedOpenCodeModelSelections(data.selectedModels);
971
+ }
972
+ async detectProviders() {
973
+ try {
974
+ const data = await fetchDetectedProviders();
975
+ if (data) {
976
+ this.detectedProviders = data.providers ?? [];
977
+ for (const dp of this.detectedProviders) {
978
+ if (!dp.available) continue;
979
+ const st = this.providerState[dp.provider];
980
+ if (st) {
981
+ st.baseUrl = dp.url;
982
+ if (!st.selected) {
983
+ st.selected = true;
984
+ if (dp.provider === "ollama") st.ollamaMode = "running";
985
+ }
986
+ this.verifyProvider(dp.provider);
987
+ }
988
+ }
989
+ }
990
+ } catch {
991
+ this.detectedProviders = [];
992
+ }
993
+ }
994
+ async verifyProvider(id) {
995
+ const p = PROVIDERS.find((x) => x.id === id);
996
+ if (!p) return;
997
+ const st = this.providerState[id];
998
+ if (!st) return;
999
+ if (id === "ollama" && st.ollamaMode === "instack") {
1000
+ st.verified = true;
1001
+ st.error = false;
1002
+ return;
1003
+ }
1004
+ const gen = (this.verifyGeneration[id] ?? 0) + 1;
1005
+ this.verifyGeneration[id] = gen;
1006
+ st.verifying = true;
1007
+ st.error = false;
1008
+ const baseUrl = (st.baseUrl || p.baseUrl).trim();
1009
+ const apiKey = (st.apiKey ?? "").trim();
1010
+ try {
1011
+ const result = await fetchProviderModels(id, {
1012
+ baseUrl,
1013
+ apiKey
1014
+ });
1015
+ if (this.verifyGeneration[id] !== gen) return;
1016
+ st.verified = true;
1017
+ st.error = false;
1018
+ st.models = result.models ?? [];
1019
+ } catch (e) {
1020
+ if (this.verifyGeneration[id] !== gen) return;
1021
+ st.verified = false;
1022
+ st.error = true;
1023
+ st.errorMessage = e instanceof Error ? e.message : "";
1024
+ st.models = [];
1025
+ }
1026
+ st.verifying = false;
1027
+ }
1028
+ async startOpenCodeOAuth(providerId, methodIndex) {
1029
+ const st = this.providerState[providerId];
1030
+ if (!st) return;
1031
+ st.verifying = true;
1032
+ st.error = false;
1033
+ try {
1034
+ const oauthRes = await authorizeOpenCodeOAuth(providerId, methodIndex);
1035
+ st.oauthPolling = true;
1036
+ st.oauthUrl = oauthRes.url ?? "";
1037
+ st.oauthInstructions = oauthRes.instructions ?? "";
1038
+ if (oauthRes.url && oauthRes.method === "auto") window.open(oauthRes.url, "_blank");
1039
+ await this.pollOpenCodeOAuth(providerId, methodIndex);
1040
+ } catch (e) {
1041
+ st.verifying = false;
1042
+ st.error = true;
1043
+ st.errorMessage = e instanceof Error ? e.message : "OAuth failed";
1044
+ st.oauthPolling = false;
1045
+ }
1046
+ }
1047
+ async pollOpenCodeOAuth(providerId, methodIndex) {
1048
+ const st = this.providerState[providerId];
1049
+ const ac = new AbortController();
1050
+ this.oauthAbortControllers[providerId] = ac;
1051
+ const timeoutSignal = AbortSignal.timeout(10 * 6e4);
1052
+ const combinedSignal = AbortSignal.any ? AbortSignal.any([ac.signal, timeoutSignal]) : ac.signal;
1053
+ try {
1054
+ const { ok, data } = await pollOpenCodeOAuthCallback(providerId, methodIndex, combinedSignal);
1055
+ if (ok && data?.ok) {
1056
+ st.verified = true;
1057
+ st.error = false;
1058
+ } else {
1059
+ st.error = true;
1060
+ st.errorMessage = data?.message ?? "Authorization failed";
1061
+ }
1062
+ } catch (e) {
1063
+ if (e instanceof Error && e.name === "AbortError" && ac.signal.aborted) return;
1064
+ if (e instanceof Error && e.name === "AbortError") {
1065
+ st.error = true;
1066
+ st.errorMessage = "Authorization timed out. Try again.";
1067
+ } else {
1068
+ st.error = true;
1069
+ st.errorMessage = e instanceof Error ? e.message : "Authorization failed";
1070
+ }
1071
+ } finally {
1072
+ delete this.oauthAbortControllers[providerId];
1073
+ st.oauthPolling = false;
1074
+ st.verifying = false;
1075
+ }
1076
+ }
1077
+ cancelOAuth(id) {
1078
+ const ac = this.oauthAbortControllers[id];
1079
+ if (ac) {
1080
+ ac.abort();
1081
+ delete this.oauthAbortControllers[id];
1082
+ }
1083
+ const st = this.providerState[id];
1084
+ if (st) {
1085
+ st.oauthPolling = false;
1086
+ st.verifying = false;
1087
+ }
1088
+ }
1089
+ async handleInstall() {
1090
+ if (this.installing) return;
1091
+ this.installError = "";
1092
+ if (!!!this.payload.llm && !this.isRerun && !this.emptyAiAck) {
1093
+ if (!window.confirm("No AI is set up here. You can connect this app to an assistant running on another computer, or add a provider later from your dashboard.\n\nInstall now?")) return;
1094
+ this.emptyAiAck = true;
1095
+ }
1096
+ this.installing = true;
1097
+ if ((this.persistedVoiceTts.engine === "openpalm-voice" || this.persistedVoiceStt.engine === "openpalm-voice") && !this.selectedVoiceProfile) this.selectedVoiceProfile = selectAddonProfileId(this.voiceProfiles, "voice", this.gpuDetected) ?? addonProfileId("voice", "cpu");
1098
+ if (this.ollamaEnabled && !this.selectedOllamaProfile) this.selectedOllamaProfile = addonProfileId("ollama", this.gpuDetected ? "cuda" : "cpu");
1099
+ try {
1100
+ const { ok, data } = await completeSetup(this.payload);
1101
+ if (!ok || !data.ok) {
1102
+ this.installError = data.message ?? data.error ?? "Install failed.";
1103
+ this.installing = false;
1104
+ this.showDeploy = false;
1105
+ return;
1106
+ }
1107
+ this.showDeploy = true;
1108
+ this.startDeployPolling();
1109
+ } catch (e) {
1110
+ this.installError = `Network error: ${e instanceof Error ? e.message : "unable to reach server."}`;
1111
+ this.installing = false;
1112
+ }
1113
+ }
1114
+ startDeployPolling() {
1115
+ this.stopDeployPolling();
1116
+ this.pollDeployStatus();
1117
+ this.deployTimer = setInterval(() => {
1118
+ this.pollDeployStatus();
1119
+ }, 2500);
1120
+ }
1121
+ stopDeployPolling() {
1122
+ if (this.deployTimer) {
1123
+ clearInterval(this.deployTimer);
1124
+ this.deployTimer = null;
1125
+ }
1126
+ }
1127
+ async pollDeployStatus() {
1128
+ try {
1129
+ const { ok, data } = await fetchDeployStatus();
1130
+ if (!ok || !data) {
1131
+ this.deployPollErrors++;
1132
+ if (this.deployPollErrors >= 5) {
1133
+ this.stopDeployPolling();
1134
+ this.deployError = "Lost contact with the installer. Services may still be starting in the background.";
1135
+ }
1136
+ return;
1137
+ }
1138
+ this.deployPollErrors = 0;
1139
+ this.deployData = data;
1140
+ if (data.deployError) {
1141
+ this.stopDeployPolling();
1142
+ this.deployError = data.deployError;
1143
+ } else if (data.setupComplete && data.deployStatus && data.deployStatus.length > 0) {
1144
+ const rows = data.deployStatus;
1145
+ const allRunning = rows.every((s) => s.status === "running");
1146
+ const onlyWarningsLeft = !data.deploying && rows.every((s) => s.status === "running" || s.status === "warning") && rows.some((s) => s.status === "warning");
1147
+ if (allRunning) {
1148
+ this.stopDeployPolling();
1149
+ this.deployDone = true;
1150
+ } else if (onlyWarningsLeft) {
1151
+ this.stopDeployPolling();
1152
+ this.deployHasWarnings = true;
1153
+ this.deployDone = true;
1154
+ }
1155
+ } else if (data.setupComplete && !data.deploying && (!data.deployStatus || data.deployStatus.length === 0)) {
1156
+ this.stopDeployPolling();
1157
+ this.deployDone = true;
1158
+ }
1159
+ } catch (err) {
1160
+ this.deployPollErrors++;
1161
+ if (this.deployPollErrors >= 5) {
1162
+ this.stopDeployPolling();
1163
+ this.deployError = err instanceof Error ? `Lost contact with the installer: ${err.message}` : "Lost contact with the installer.";
1164
+ }
1165
+ }
1166
+ }
1167
+ handlePortalToggle(id) {
1168
+ const sel = this.portalSelection[id];
1169
+ if (typeof sel === "object" && sel !== null) sel.enabled = !sel.enabled;
1170
+ else this.portalSelection[id] = !sel;
1171
+ }
1172
+ handleCredentialChange(chId, credKey, value) {
1173
+ const sel = this.portalSelection[chId];
1174
+ if (typeof sel === "object" && sel !== null) sel[credKey] = value;
1175
+ }
1176
+ async handleDeployRetry() {
1177
+ this.installing = false;
1178
+ this.deployError = null;
1179
+ this.deployDone = false;
1180
+ this.deployHasWarnings = false;
1181
+ this.deployData = {};
1182
+ this.deployPollErrors = 0;
1183
+ const { ok, data } = await retryDeploy();
1184
+ if (!ok || data?.ok === false) {
1185
+ this.deployError = data?.message ?? "Retry failed.";
1186
+ return;
1187
+ }
1188
+ this.installing = true;
1189
+ this.pollDeployStatus();
1190
+ }
1191
+ handleDeployBack() {
1192
+ this.installing = false;
1193
+ this.deployError = null;
1194
+ this.deployDone = false;
1195
+ this.deployHasWarnings = false;
1196
+ this.deployData = {};
1197
+ this.deployPollErrors = 0;
1198
+ this.showDeploy = false;
1199
+ this.currentStep = 3;
1200
+ }
1201
+ handleSystemCheckPass() {
1202
+ this.systemCheckPassed = true;
1203
+ this.goToStep(1);
1204
+ }
1205
+ handleGpuDetected() {
1206
+ this.gpuDetected = true;
1207
+ if (this.voiceProfiles.length > 0 && this.selectedVoiceProfile !== addonProfileId("voice", "cuda")) {
1208
+ const cuda = this.voiceProfiles.find((p) => p.id === addonProfileId("voice", "cuda") && p.available !== false);
1209
+ if (cuda) this.selectedVoiceProfile = cuda.id;
1210
+ }
1211
+ }
1212
+ async loadHostStatus() {
1213
+ try {
1214
+ const data = await fetchHostStatus();
1215
+ if (data) {
1216
+ this.hostProviderCount = Math.max(data.providerCount ?? 0, data.credentialCount ?? 0);
1217
+ if (data.imageTag && !this.imageTag) this.imageTag = data.imageTag;
1218
+ if (typeof data.hostAkmAvailable === "boolean") {
1219
+ if (!this.isRerun) this.hostAkmEnabled = data.hostAkmAvailable;
1220
+ }
1221
+ if (data.modelPreferences?.model) this.importedLlmModel = data.modelPreferences.model;
1222
+ if (data.modelPreferences?.small_model) this.importedSmallModel = data.modelPreferences.small_model;
1223
+ if (this.hostProviderCount > 0 && !this.hostImportTriggered && (this.currentStep === 1 || this.isRerun)) {
1224
+ this.hostImportTriggered = true;
1225
+ this.handleHostImport();
1226
+ }
1227
+ }
1228
+ } catch (e) {
1229
+ console.warn("loadHostStatus failed", e);
1230
+ }
1231
+ }
1232
+ markProviderVerifiedFromImport(id) {
1233
+ let st = this.providerState[id];
1234
+ if (!st) {
1235
+ st = {
1236
+ selected: true,
1237
+ verified: true,
1238
+ verifying: false,
1239
+ error: false,
1240
+ apiKey: "",
1241
+ baseUrl: "",
1242
+ models: [],
1243
+ ollamaMode: null
1244
+ };
1245
+ this.providerState[id] = st;
1246
+ return;
1247
+ }
1248
+ st.verified = true;
1249
+ st.error = false;
1250
+ }
1251
+ async handleHostImport() {
1252
+ this.hostImporting = true;
1253
+ this.hostImportError = "";
1254
+ try {
1255
+ const { ok, data } = await importHost();
1256
+ if (!ok || !data?.ok) {
1257
+ this.hostImportError = data?.error ?? `Couldn't import providers from this computer. You can sign in or add a provider manually instead.`;
1258
+ this.hostImporting = false;
1259
+ return;
1260
+ }
1261
+ const importedIds = data.importedProviders ?? data.pushedProviders ?? [];
1262
+ for (const id of importedIds) this.markProviderVerifiedFromImport(id);
1263
+ if (this.opencodeAvailable) try {
1264
+ await this.loadOpenCodeProviders();
1265
+ } catch (e) {
1266
+ console.warn("handleHostImport: reloading OpenCode providers failed", e);
1267
+ }
1268
+ this.applyImportedModelPreferences();
1269
+ await Promise.allSettled(Object.keys(this.providerState).filter((id) => !this.providerState[id].verified && PROVIDERS.some((p) => p.id === id)).map((id) => this.verifyProvider(id)));
1270
+ this.applyImportedModelPreferences();
1271
+ this.autoSelectModels();
1272
+ this.hostImporting = false;
1273
+ if (!this.isRerun) this.goToStep(1);
1274
+ } catch (e) {
1275
+ this.hostImportError = "Network error importing providers from this computer: " + (e instanceof Error ? e.message : "unable to reach the server.");
1276
+ this.hostImporting = false;
1277
+ }
1278
+ }
1279
+ /**
1280
+ * Restore EVERY wizard field to the same default the original
1281
+ * component-scoped `$state` had on a fresh mount. Because `setupState` is a
1282
+ * module singleton, a second SPA entry to /setup (client-side pushState nav —
1283
+ * no full reload, so the module is not re-initialized) would otherwise reopen
1284
+ * a STALE wizard (stale step, bypassed system check, stale selections). This
1285
+ * runs at the START of `init()` (which fires once per mount) so every mount
1286
+ * begins clean; the rerun-prefill and in-flight-deploy pickup in `init()`
1287
+ * then re-apply the appropriate non-default state AFTER this reset.
1288
+ *
1289
+ * NOT to be called mid-flow — only at mount, where there is no in-flight work
1290
+ * to clobber (any prior mount's polling/OAuth was already torn down by
1291
+ * `dispose()` on unmount; this also defensively tears it down again).
1292
+ */
1293
+ reset() {
1294
+ this.stopDeployPolling();
1295
+ for (const id of Object.keys(this.oauthAbortControllers)) {
1296
+ try {
1297
+ this.oauthAbortControllers[id].abort();
1298
+ } catch {}
1299
+ delete this.oauthAbortControllers[id];
1300
+ }
1301
+ this.verifyGeneration = {};
1302
+ Object.assign(this, structuredClone(INITIAL));
1303
+ }
1304
+ init() {
1305
+ this.reset();
1306
+ this.initProviderState();
1307
+ const params = new URLSearchParams(window.location.search);
1308
+ this.isRerun = params.get("rerun") === "1";
1309
+ if (this.isRerun) {
1310
+ this.systemCheckPassed = true;
1311
+ this.maxVisitedStep = 3;
1312
+ this.uiLoginPassword = generatePassword();
1313
+ fetchCurrentConfig().then((data) => {
1314
+ if (!data) return;
1315
+ const parsed = parseSetupConfig(data);
1316
+ if (parsed.hostAkmEnabled !== void 0) this.hostAkmEnabled = parsed.hostAkmEnabled;
1317
+ if (parsed.llm) this.modelSelection.llm = parsed.llm;
1318
+ if (parsed.embedding) this.modelSelection.embedding = parsed.embedding;
1319
+ if (parsed.voiceTts) this.voiceTts = parsed.voiceTts;
1320
+ if (parsed.voiceStt) this.voiceStt = parsed.voiceStt;
1321
+ if (parsed.selectedVoiceProfile) this.selectedVoiceProfile = parsed.selectedVoiceProfile;
1322
+ if (parsed.importedLlmModel) this.importedLlmModel = parsed.importedLlmModel;
1323
+ if (parsed.importedSmallModel) this.importedSmallModel = parsed.importedSmallModel;
1324
+ if (parsed.ollamaEnabled) this.ollamaEnabled = true;
1325
+ if (parsed.selectedOllamaProfile) this.selectedOllamaProfile = parsed.selectedOllamaProfile;
1326
+ for (const chId of ["discord", "slack"]) {
1327
+ const sel = this.portalSelection[chId];
1328
+ if (typeof sel === "object" && sel !== null) {
1329
+ if (parsed.enabledAddons.includes(chId)) sel.enabled = true;
1330
+ const c = parsed.portalCredentials[chId];
1331
+ if (c && typeof c === "object") Object.assign(sel, c);
1332
+ }
1333
+ }
1334
+ }).catch((e) => {
1335
+ console.error("[setup] failed to load existing config:", e);
1336
+ });
1337
+ } else {
1338
+ this.uiLoginPassword = generatePassword();
1339
+ fetchSetupStatus().then((data) => {
1340
+ if (data.setupComplete) window.location.href = "/";
1341
+ }).catch((e) => {
1342
+ console.error("[setup] failed to check setup status:", e);
1343
+ });
1344
+ }
1345
+ fetchDeployStatus().then(({ ok, data }) => {
1346
+ if (!ok || !data) return;
1347
+ if (data.deploying || data.deployError) {
1348
+ this.deployData = data;
1349
+ this.showDeploy = true;
1350
+ this.startDeployPolling();
1351
+ }
1352
+ }).catch((e) => {
1353
+ console.error("[setup] failed to fetch deploy status:", e);
1354
+ });
1355
+ this.loadHostStatus();
1356
+ this.loadVoiceProfiles();
1357
+ this.loadOllamaProfiles();
1358
+ this.checkOpenCodeAndInit().then(() => this.detectProviders()).catch((e) => {
1359
+ console.error("[setup] provider detection failed:", e);
1360
+ });
1361
+ }
1362
+ dispose() {
1363
+ this.stopDeployPolling();
1364
+ for (const id of Object.keys(this.oauthAbortControllers)) {
1365
+ try {
1366
+ this.oauthAbortControllers[id].abort();
1367
+ } catch {}
1368
+ delete this.oauthAbortControllers[id];
1369
+ }
1370
+ }
1371
+ };
1372
+ var setupState = new SetupState();
1373
+ //#endregion
1374
+ //#region ../ui-kit/src/lib/components/common/FriendlyError.svelte
1375
+ function FriendlyError($$renderer, $$props) {
1376
+ $$renderer.component(($$renderer) => {
1377
+ /** Render compactly without the technical-details disclosure (inline forms). */
1378
+ let { error, role = "alert", compact = false } = $$props;
1379
+ if (error) {
1380
+ $$renderer.push("<!--[0-->");
1381
+ $$renderer.push(`<div class="friendly-error svelte-jyx78z"${attr("role", role)}><div class="friendly-error-header svelte-jyx78z">`);
1382
+ IconAlert($$renderer, { size: 18 });
1383
+ $$renderer.push(`<!----> <strong class="friendly-error-title svelte-jyx78z">${escape_html(error.title)}</strong></div> `);
1384
+ if (error.body) {
1385
+ $$renderer.push("<!--[0-->");
1386
+ $$renderer.push(`<p class="friendly-error-body svelte-jyx78z">${escape_html(error.body)}</p>`);
1387
+ } else $$renderer.push("<!--[-1-->");
1388
+ $$renderer.push(`<!--]--> `);
1389
+ if (error.hint) {
1390
+ $$renderer.push("<!--[0-->");
1391
+ $$renderer.push(`<p class="friendly-error-hint svelte-jyx78z">${escape_html(error.hint)}</p>`);
1392
+ } else $$renderer.push("<!--[-1-->");
1393
+ $$renderer.push(`<!--]--> `);
1394
+ if (error.links && error.links.length > 0) {
1395
+ $$renderer.push("<!--[0-->");
1396
+ $$renderer.push(`<div class="friendly-error-links svelte-jyx78z"><!--[-->`);
1397
+ const each_array = ensure_array_like(error.links);
1398
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1399
+ let link = each_array[$$index];
1400
+ $$renderer.push(`<a${attr("href", link.href)} target="_blank" rel="noopener noreferrer" class="friendly-error-link svelte-jyx78z">${escape_html(link.label)} →</a>`);
1401
+ }
1402
+ $$renderer.push(`<!--]--></div>`);
1403
+ } else $$renderer.push("<!--[-1-->");
1404
+ $$renderer.push(`<!--]--> `);
1405
+ if (!compact && error.raw && error.raw !== error.body) {
1406
+ $$renderer.push("<!--[0-->");
1407
+ $$renderer.push(`<details class="friendly-error-details svelte-jyx78z"><summary class="svelte-jyx78z">Technical details</summary> <pre class="svelte-jyx78z">${escape_html(error.raw)}</pre></details>`);
1408
+ } else $$renderer.push("<!--[-1-->");
1409
+ $$renderer.push(`<!--]--></div>`);
1410
+ } else $$renderer.push("<!--[-1-->");
1411
+ $$renderer.push(`<!--]-->`);
1412
+ });
1413
+ }
1414
+ //#endregion
1415
+ //#region src/lib/client/error-messages.ts
1416
+ var DOCKER_LINK = {
1417
+ label: "Docker setup",
1418
+ href: "https://docs.docker.com/get-docker/"
1419
+ };
1420
+ function rawText(raw) {
1421
+ if (!raw) return "";
1422
+ if (raw instanceof Error) return raw.message;
1423
+ if (typeof raw === "string") return raw;
1424
+ try {
1425
+ return JSON.stringify(raw);
1426
+ } catch {
1427
+ return String(raw);
1428
+ }
1429
+ }
1430
+ function friendlyError(raw, context = "generic", opts = {}) {
1431
+ const text = rawText(raw);
1432
+ const lower = text.toLowerCase();
1433
+ const providerLabel = opts.providerName ? `${opts.providerName} didn't accept that key` : "API key rejected";
1434
+ if (/\b(401|403|unauthorized|forbidden|invalid.?api.?key)\b/i.test(text)) return {
1435
+ title: providerLabel,
1436
+ body: "The provider rejected the API key.",
1437
+ hint: "Common causes: extra spaces, wrong account, or the key was revoked. Double-check the key and that it has access to the model you selected. Most providers show the key in their dashboard.",
1438
+ raw: text
1439
+ };
1440
+ if (/\b(ENOTFOUND|ECONNREFUSED|getaddrinfo|EAI_AGAIN|EHOSTUNREACH)\b/i.test(text)) return {
1441
+ title: "Couldn't reach the host",
1442
+ body: text,
1443
+ hint: "Confirm the URL is correct and the service is online. For local providers (Ollama, LM Studio) make sure the server is running on this machine.",
1444
+ raw: text
1445
+ };
1446
+ if (/(timeout|timed out|AbortError|ETIMEDOUT)/i.test(text)) return {
1447
+ title: "Request timed out",
1448
+ body: "The provider didn't respond in time.",
1449
+ hint: "It may be slow or temporarily down. Try again in a moment.",
1450
+ raw: text
1451
+ };
1452
+ if (lower.includes("docker") || lower.includes("compose") || lower.includes("daemon")) return {
1453
+ title: "Docker isn't available",
1454
+ body: "OpenPalm needs Docker (with Compose v2) installed and running.",
1455
+ hint: "Start Docker Desktop (macOS/Windows) or the docker daemon (Linux), then retry.",
1456
+ links: [DOCKER_LINK],
1457
+ raw: text
1458
+ };
1459
+ if (/EADDRINUSE/i.test(text) || /port.*in.?use/i.test(lower)) return {
1460
+ title: "A required port is already in use",
1461
+ body: text,
1462
+ hint: "Another program is using one of OpenPalm's default ports. Quit the conflicting app, or change OpenPalm's port from the Admin Dashboard after setup.",
1463
+ raw: text
1464
+ };
1465
+ if (/EACCES|EPERM|permission denied/i.test(text)) return {
1466
+ title: "Permission denied",
1467
+ body: text,
1468
+ hint: "OpenPalm couldn't write to its data directory. Check that ~/.openpalm/ is writable by your user.",
1469
+ raw: text
1470
+ };
1471
+ switch (context) {
1472
+ case "provider-verify":
1473
+ case "model-fetch": return {
1474
+ title: "Couldn't connect to the provider",
1475
+ body: text || "Verification failed.",
1476
+ hint: "Check the API key and base URL, then click Verify again.",
1477
+ raw: text
1478
+ };
1479
+ case "setup-complete": return {
1480
+ title: "Setup couldn't finish",
1481
+ body: text || "Writing configuration failed.",
1482
+ hint: "Check the technical details below, then retry. If the issue persists, the admin dashboard logs may help.",
1483
+ raw: text
1484
+ };
1485
+ case "deploy":
1486
+ case "deploy-poll": return {
1487
+ title: "Deployment ran into a problem",
1488
+ body: text || "One or more services failed to start.",
1489
+ hint: "Image pulls can take several minutes on first install. Retry to attempt again; check Docker logs if it keeps failing.",
1490
+ raw: text
1491
+ };
1492
+ case "system-check": return {
1493
+ title: "System check failed",
1494
+ body: text || "A required dependency is missing.",
1495
+ hint: "Resolve the failing check above, then click Retry.",
1496
+ raw: text
1497
+ };
1498
+ case "portal": return {
1499
+ title: "Portal credential issue",
1500
+ body: text || "A required field is missing or invalid.",
1501
+ hint: "Confirm the bot token and other required fields are correct.",
1502
+ raw: text
1503
+ };
1504
+ case "port-conflict": return {
1505
+ title: "A required port is already in use",
1506
+ body: text || "Another process is using one of OpenPalm's ports.",
1507
+ hint: "Another program is using one of OpenPalm's default ports. Quit the conflicting app, or change OpenPalm's port from the Admin Dashboard after setup.",
1508
+ raw: text
1509
+ };
1510
+ default: return {
1511
+ title: "Something went wrong",
1512
+ body: text || "An unexpected error occurred.",
1513
+ hint: "Try again. If the problem persists, check the admin dashboard logs.",
1514
+ raw: text
1515
+ };
1516
+ }
1517
+ }
1518
+ //#endregion
1519
+ //#region src/routes/setup/steps/SystemCheckStep.svelte
1520
+ function SystemCheckStep($$renderer, $$props) {
1521
+ $$renderer.component(($$renderer) => {
1522
+ let loading = true;
1523
+ let result = null;
1524
+ $$renderer.push(`<h2>System Check</h2> <p class="step-description">Let's make sure your machine has everything OpenPalm needs.</p> `);
1525
+ $$renderer.push("<!--[-1-->");
1526
+ $$renderer.push(`<!--]--> <div class="syscheck-list svelte-1txhq2p" aria-live="polite"><div${attr_class("syscheck-row svelte-1txhq2p", void 0, {
1527
+ "syscheck-row--ok": void 0,
1528
+ "syscheck-row--fail": result
1529
+ })}><div class="syscheck-icon svelte-1txhq2p">`);
1530
+ $$renderer.push("<!--[0-->");
1531
+ Spinner($$renderer, { size: 16 });
1532
+ $$renderer.push(`<!--]--></div> <div class="syscheck-body svelte-1txhq2p"><div class="syscheck-title svelte-1txhq2p">Docker is installed and running</div> `);
1533
+ $$renderer.push("<!--[-1-->");
1534
+ $$renderer.push(`<!--]--></div></div> <div${attr_class("syscheck-row svelte-1txhq2p", void 0, {
1535
+ "syscheck-row--ok": void 0,
1536
+ "syscheck-row--fail": result
1537
+ })}><div class="syscheck-icon svelte-1txhq2p">`);
1538
+ $$renderer.push("<!--[0-->");
1539
+ Spinner($$renderer, { size: 16 });
1540
+ $$renderer.push(`<!--]--></div> <div class="syscheck-body svelte-1txhq2p"><div class="syscheck-title svelte-1txhq2p">Docker can run multi-container apps</div> `);
1541
+ $$renderer.push("<!--[-1-->");
1542
+ $$renderer.push(`<!--]--></div></div> `);
1543
+ $$renderer.push("<!--[-1-->");
1544
+ $$renderer.push(`<!--]--> `);
1545
+ $$renderer.push("<!--[-1-->");
1546
+ $$renderer.push(`<!--]--> `);
1547
+ $$renderer.push("<!--[-1-->");
1548
+ $$renderer.push(`<!--]--></div> <div class="step-actions"><button class="btn btn-secondary" id="btn-syscheck-retry"${attr("disabled", loading, true)}>${escape_html("Checking…")}</button> <button class="btn btn-primary" id="btn-syscheck-next"${attr("disabled", loading, true)}>Continue</button></div>`);
1549
+ });
1550
+ }
1551
+ //#endregion
1552
+ //#region src/routes/setup/steps/ProviderOAuthList.svelte
1553
+ function ProviderOAuthList($$renderer, $$props) {
1554
+ $$renderer.component(($$renderer) => {
1555
+ /**
1556
+ * ProviderOAuthList — OAuth provider list for CloudAttachPanel.
1557
+ *
1558
+ * Renders a compact vertical list of OAuth-capable providers,
1559
+ * filtered through WIZARD_EXCLUDED_PROVIDERS (no Anthropic).
1560
+ *
1561
+ * Takes NO props: reads the setup-state store directly (opencodeProviders /
1562
+ * opencodeAuth / providerState) and calls its OAuth methods
1563
+ * (startOpenCodeOAuth / cancelOAuth), mirroring Screen1ModelsStep / ReviewStep.
1564
+ */
1565
+ const s = setupState;
1566
+ const opencodeProviders = derived(() => s.opencodeProviders);
1567
+ const opencodeAuth = derived(() => s.opencodeAuth);
1568
+ const providerState = derived(() => s.providerState);
1569
+ const RECOGNIZABLE_FIRST = [
1570
+ "openai",
1571
+ "google",
1572
+ "github-copilot",
1573
+ "groq",
1574
+ "mistral",
1575
+ "huggingface"
1576
+ ];
1577
+ const filteredProviders = derived(() => opencodeProviders().filter((p) => {
1578
+ if (WIZARD_EXCLUDED_PROVIDERS.has(p.id)) return false;
1579
+ if (providerState()[p.id]?.verified) return false;
1580
+ return (opencodeAuth()[p.id] ?? []).some((m) => m.type === "oauth");
1581
+ }).sort((a, b) => {
1582
+ const ia = RECOGNIZABLE_FIRST.indexOf(a.id);
1583
+ const ib = RECOGNIZABLE_FIRST.indexOf(b.id);
1584
+ return (ia === -1 ? 99 : ia) - (ib === -1 ? 99 : ib);
1585
+ }));
1586
+ const OAUTH_CAP = 4;
1587
+ const visibleOauth = derived(() => filteredProviders().slice(0, OAUTH_CAP));
1588
+ const hiddenOauthCount = derived(() => Math.max(0, filteredProviders().length - OAUTH_CAP));
1589
+ function getState(id) {
1590
+ return providerState()[id] ?? {
1591
+ selected: false,
1592
+ verified: false,
1593
+ verifying: false,
1594
+ error: false,
1595
+ apiKey: "",
1596
+ baseUrl: "",
1597
+ models: [],
1598
+ ollamaMode: null
1599
+ };
1600
+ }
1601
+ function oauthMethodIndex(id) {
1602
+ return (opencodeAuth()[id] ?? []).findIndex((m) => m.type === "oauth");
1603
+ }
1604
+ $$renderer.push(`<div class="oauth-list svelte-1kgjxt0" role="list">`);
1605
+ if (filteredProviders().length === 0) {
1606
+ $$renderer.push("<!--[0-->");
1607
+ $$renderer.push(`<p class="oauth-empty svelte-1kgjxt0">Nothing more to add — you're all connected.</p>`);
1608
+ } else {
1609
+ $$renderer.push("<!--[-1-->");
1610
+ $$renderer.push(`<!--[-->`);
1611
+ const each_array = ensure_array_like(visibleOauth());
1612
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1613
+ let provider = each_array[$$index];
1614
+ const st = getState(provider.id);
1615
+ oauthMethodIndex(provider.id);
1616
+ $$renderer.push(`<div class="oauth-row svelte-1kgjxt0" role="listitem"${attr("data-provider", provider.id)}><span class="oauth-name svelte-1kgjxt0">${escape_html(provider.name)}</span> `);
1617
+ if (st.verified) {
1618
+ $$renderer.push("<!--[0-->");
1619
+ $$renderer.push(`<span class="oauth-status oauth-status--ok svelte-1kgjxt0"${attr("aria-label", `${stringify(provider.name)} connected`)}>Connected ✓</span>`);
1620
+ } else if (st.oauthPolling) {
1621
+ $$renderer.push("<!--[1-->");
1622
+ $$renderer.push(`<div class="oauth-polling svelte-1kgjxt0">`);
1623
+ if (st.oauthUrl) {
1624
+ $$renderer.push("<!--[0-->");
1625
+ $$renderer.push(`<a${attr("href", st.oauthUrl)} target="_blank" rel="noopener" class="oauth-open-link svelte-1kgjxt0">Open authorization page →</a>`);
1626
+ } else $$renderer.push("<!--[-1-->");
1627
+ $$renderer.push(`<!--]--> `);
1628
+ if (st.oauthInstructions) {
1629
+ $$renderer.push("<!--[0-->");
1630
+ $$renderer.push(`<p class="oauth-instructions svelte-1kgjxt0">${escape_html(st.oauthInstructions)}</p>`);
1631
+ } else $$renderer.push("<!--[-1-->");
1632
+ $$renderer.push(`<!--]--> <div class="oauth-waiting svelte-1kgjxt0">`);
1633
+ Spinner($$renderer, {});
1634
+ $$renderer.push(`<!----> Waiting for authorization…</div> <button type="button" class="btn-oauth-cancel svelte-1kgjxt0">Cancel</button></div>`);
1635
+ } else {
1636
+ $$renderer.push("<!--[-1-->");
1637
+ $$renderer.push(`<button type="button" class="btn btn-secondary btn-sm"${attr("disabled", st.verifying, true)}>${escape_html(st.verifying ? "Signing in…" : "Sign in")}</button>`);
1638
+ }
1639
+ $$renderer.push(`<!--]--> `);
1640
+ if (st.error && !st.oauthPolling) {
1641
+ $$renderer.push("<!--[0-->");
1642
+ $$renderer.push(`<span class="oauth-error svelte-1kgjxt0" role="alert">${escape_html(st.errorMessage ?? "Authorization failed")}</span>`);
1643
+ } else $$renderer.push("<!--[-1-->");
1644
+ $$renderer.push(`<!--]--></div>`);
1645
+ }
1646
+ $$renderer.push(`<!--]--> `);
1647
+ if (hiddenOauthCount() > 0) {
1648
+ $$renderer.push("<!--[0-->");
1649
+ $$renderer.push(`<button type="button" class="oauth-more svelte-1kgjxt0">${escape_html(`Show ${hiddenOauthCount()} more services`)}</button>`);
1650
+ } else $$renderer.push("<!--[-1-->");
1651
+ $$renderer.push(`<!--]-->`);
1652
+ }
1653
+ $$renderer.push(`<!--]--></div>`);
1654
+ });
1655
+ }
1656
+ //#endregion
1657
+ //#region src/routes/setup/steps/CloudAttachPanel.svelte
1658
+ function CloudAttachPanel($$renderer) {
1659
+ /**
1660
+ * CloudAttachPanel — the simplest possible "connect your AI" step.
1661
+ *
1662
+ * Two states only, no jargon:
1663
+ * - An AI account was found on this computer → one "Use this account" button.
1664
+ * - Otherwise (or "use a different account") → sign-in buttons.
1665
+ *
1666
+ * Deliberately NO provider count/list, NO "other options", and NO custom
1667
+ * endpoint / API-key fields — those are power-user concerns that live in the
1668
+ * admin dashboard after setup, not in first-run.
1669
+ */
1670
+ const s = setupState;
1671
+ const cloudProviders = [];
1672
+ const hostImporting = derived(() => s.hostImporting);
1673
+ const verifiedCount = derived(() => s.verifiedCount);
1674
+ const hasFoundAccount = derived(() => cloudProviders.length > 0);
1675
+ const connected = derived(() => verifiedCount() > 0);
1676
+ let signInInstead = false;
1677
+ const showSignIn = derived(() => !hasFoundAccount() || signInInstead);
1678
+ $$renderer.push(`<div class="cloud-attach svelte-v318we">`);
1679
+ if (!showSignIn()) {
1680
+ $$renderer.push("<!--[0-->");
1681
+ if (connected()) {
1682
+ $$renderer.push("<!--[0-->");
1683
+ $$renderer.push(`<p class="connected svelte-v318we" role="status"><span class="check svelte-v318we" aria-hidden="true">✓</span> Connected your AI account.</p> <button type="button" class="account-link svelte-v318we">Use a different account</button>`);
1684
+ } else if (hostImporting()) {
1685
+ $$renderer.push("<!--[1-->");
1686
+ $$renderer.push(`<p class="connecting svelte-v318we" role="status">`);
1687
+ Spinner($$renderer, {});
1688
+ $$renderer.push(`<!----> Connecting your AI account…</p>`);
1689
+ } else {
1690
+ $$renderer.push("<!--[-1-->");
1691
+ $$renderer.push(`<p class="lead svelte-v318we">We found an AI account on this computer.</p> <button type="button" class="btn-connect svelte-v318we" id="btn-host-import">Use this account</button> <button type="button" class="account-link svelte-v318we">Use a different account</button>`);
1692
+ }
1693
+ $$renderer.push(`<!--]-->`);
1694
+ } else {
1695
+ $$renderer.push("<!--[-1-->");
1696
+ $$renderer.push(`<p class="lead svelte-v318we">Sign in to your AI service:</p> `);
1697
+ ProviderOAuthList($$renderer);
1698
+ $$renderer.push(`<!----> `);
1699
+ if (hasFoundAccount()) {
1700
+ $$renderer.push("<!--[0-->");
1701
+ $$renderer.push(`<button type="button" class="account-link svelte-v318we">Use the account on this computer instead</button>`);
1702
+ } else $$renderer.push("<!--[-1-->");
1703
+ $$renderer.push(`<!--]-->`);
1704
+ }
1705
+ $$renderer.push(`<!--]--></div>`);
1706
+ }
1707
+ //#endregion
1708
+ //#region src/routes/setup/steps/LocalModelsStatus.svelte
1709
+ function LocalModelsStatus($$renderer, $$props) {
1710
+ $$renderer.component(($$renderer) => {
1711
+ /**
1712
+ * LocalModelsStatus — shows the local model runtime state for Screen 1.
1713
+ *
1714
+ * Takes NO props: reads the setup-state store directly (detected host runtimes,
1715
+ * GPU info, in-stack Ollama selection) and calls its recommendation re-check,
1716
+ * mirroring Screen1ModelsStep / ReviewStep.
1717
+ */
1718
+ const s = setupState;
1719
+ const hostProviders = derived(() => s.detectedHostProviders);
1720
+ const gpuVramMb = derived(() => s.detectedGpuVramMb);
1721
+ const gpuVendor = derived(() => s.detectedGpuVendor);
1722
+ const gpuName = derived(() => s.detectedGpuName);
1723
+ const ollamaEnabled = derived(() => s.ollamaEnabled);
1724
+ const selectedOllamaProfile = derived(() => s.selectedOllamaProfile);
1725
+ const isAppleSilicon = derived(() => gpuVendor() === "apple");
1726
+ const hasRunningRuntime = derived(() => hostProviders().length > 0);
1727
+ const gpuGb = derived(() => Math.round(gpuVramMb() / 1024));
1728
+ const profileLabel = derived(() => selectedOllamaProfile().endsWith("cuda") ? "CUDA" : selectedOllamaProfile().endsWith("rocm") ? "ROCm" : "CPU");
1729
+ function runtimeLabel(provider) {
1730
+ if (provider === "ollama") return "Ollama";
1731
+ if (provider === "lmstudio") return "LM Studio";
1732
+ if (provider === "model-runner") return "Docker Model Runner";
1733
+ return provider;
1734
+ }
1735
+ $$renderer.push(`<div class="local-models-status svelte-1fl6n4z">`);
1736
+ if (hasRunningRuntime()) {
1737
+ $$renderer.push("<!--[0-->");
1738
+ $$renderer.push(`<div class="status-row status-row--running svelte-1fl6n4z" role="status"><span class="status-icon svelte-1fl6n4z" aria-hidden="true">●</span> <span class="status-text svelte-1fl6n4z">Using ${escape_html(hostProviders().map((p) => runtimeLabel(p.provider)).join(", "))} already running on your machine.</span></div>`);
1739
+ } else if (isAppleSilicon()) {
1740
+ $$renderer.push("<!--[1-->");
1741
+ $$renderer.push(`<div class="status-callout status-callout--apple svelte-1fl6n4z" role="note"><div class="callout-icon svelte-1fl6n4z" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg></div> <div class="callout-body svelte-1fl6n4z"><p class="callout-title svelte-1fl6n4z">Apple Silicon detected</p> <p class="callout-desc svelte-1fl6n4z">For best performance, install <a href="https://ollama.com/download" target="_blank" rel="noopener" class="svelte-1fl6n4z">Ollama for macOS</a> and leave it running before continuing. Once Ollama is running, click Re-check to continue.</p> <button class="btn-recheck svelte-1fl6n4z" type="button" id="btn-local-recheck">Re-check</button></div></div>`);
1742
+ } else if (ollamaEnabled() && gpuVramMb() >= 8192) {
1743
+ $$renderer.push("<!--[2-->");
1744
+ $$renderer.push(`<div class="status-row status-row--will-install svelte-1fl6n4z" role="status"><span class="status-icon svelte-1fl6n4z" aria-hidden="true">◎</span> <span class="status-text svelte-1fl6n4z">Will install Ollama in the stack `);
1745
+ if (gpuName()) {
1746
+ $$renderer.push("<!--[0-->");
1747
+ $$renderer.push(`(GPU: ${escape_html(gpuName())}, ${escape_html(gpuGb())} GB, profile: ${escape_html(profileLabel())})`);
1748
+ } else $$renderer.push("<!--[-1-->");
1749
+ $$renderer.push(`<!--]-->.
1750
+ First pull downloads ~4–8 GB.</span></div>`);
1751
+ } else if (ollamaEnabled()) {
1752
+ $$renderer.push("<!--[3-->");
1753
+ $$renderer.push(`<div class="status-row status-row--will-install svelte-1fl6n4z" role="status"><span class="status-icon svelte-1fl6n4z" aria-hidden="true">◎</span> <span class="status-text svelte-1fl6n4z">Will install Ollama in the stack (CPU mode). First pull downloads ~4–8 GB.</span></div>`);
1754
+ } else $$renderer.push("<!--[-1-->");
1755
+ $$renderer.push(`<!--]--></div>`);
1756
+ });
1757
+ }
1758
+ //#endregion
1759
+ //#region src/routes/setup/steps/Screen1ModelsStep.svelte
1760
+ function Screen1ModelsStep($$renderer, $$props) {
1761
+ $$renderer.component(($$renderer) => {
1762
+ /**
1763
+ * Screen1ModelsStep — "Connect your AI brain"
1764
+ *
1765
+ * Redesigned flat RadioRow layout (spec: /tmp/wiz/connect-redesign.html).
1766
+ * Three primary choices in a hairline-divided list:
1767
+ * 1. Detected cloud service (shown only when verifiedCount > 0 or llmProvider set)
1768
+ * 2. Run on this computer (local AI — co-equal primary option)
1769
+ * 3. Sign in to a cloud service (expands ProviderOAuthList inline)
1770
+ *
1771
+ * Takes NO props: this step reads the setup-state store
1772
+ * ($lib/setup/setup-state.svelte.ts) directly for its reactive inputs
1773
+ * (providerState, verifiedCount, detected GPU/host info, model selection, …)
1774
+ * and calls the store's methods for actions (handleConnectModeChange,
1775
+ * handleHostImport, startOpenCodeOAuth/cancelOAuth, fetchAndApplyRecommendation,
1776
+ * goToStep, allowEmptyInstall). Local aliases near the top of the script map
1777
+ * those store members to the names the template uses.
1778
+ */
1779
+ const MIN_LOCAL_GPU_VRAM_MB = 8192;
1780
+ const s = setupState;
1781
+ const detectionLoading = derived(() => s.autoModeImporting);
1782
+ const systemCheckError = derived(() => s.systemCheckPassed ? "" : s.step0Error || "");
1783
+ const gpuVramMb = derived(() => s.detectedGpuVramMb);
1784
+ const gpuVendor = derived(() => s.detectedGpuVendor);
1785
+ const hostProviders = derived(() => s.detectedHostProviders);
1786
+ const opencodeProviders = derived(() => s.opencodeProviders);
1787
+ const hostImporting = derived(() => s.hostImporting);
1788
+ const verifiedCount = derived(() => s.verifiedCount);
1789
+ const allowEmptyInstall = derived(() => s.allowEmptyInstall);
1790
+ const llmModel = derived(() => s.modelSelection.llm?.model ?? "");
1791
+ const llmProvider = derived(() => s.modelSelection.llm?.connId ?? "");
1792
+ const detectedCloudConn = derived(() => s.detectedCloudConn);
1793
+ const localAvailable = derived(() => gpuVramMb() >= MIN_LOCAL_GPU_VRAM_MB || gpuVendor() === "apple" || hostProviders().length > 0);
1794
+ function friendlyServiceLabel(connId) {
1795
+ if (FRIENDLY_PROVIDER_NAMES[connId]) return FRIENDLY_PROVIDER_NAMES[connId];
1796
+ const fromProviders = opencodeProviders().find((p) => p.id === connId)?.name;
1797
+ if (fromProviders) return fromProviders;
1798
+ return connId;
1799
+ }
1800
+ const detectedConn = derived(() => detectedCloudConn() || (llmProvider() && !LOCAL_PROVIDER_IDS.has(llmProvider()) ? llmProvider() : ""));
1801
+ const detectedServiceLabel = derived(() => detectedConn() ? friendlyServiceLabel(detectedConn()) : "");
1802
+ const detectedIsLocal = derived(() => LOCAL_PROVIDER_IDS.has(llmProvider()));
1803
+ const showDetectedRow = derived(() => !!detectedConn() && verifiedCount() > 0);
1804
+ let selectedRow = run(() => showDetectedRow() ? "detected" : detectedIsLocal() && llmProvider() ? "local" : null);
1805
+ const showLocalPanel = derived(() => selectedRow === "local");
1806
+ const showSignInPanel = derived(() => selectedRow === "cloud");
1807
+ const cloudRowTitle = derived(() => showDetectedRow() ? "Sign in to a different service" : "Sign in to a cloud AI service");
1808
+ const cloudRowSub = derived(() => showDetectedRow() ? "Google Gemini, GitHub Copilot, and others" : "OpenAI, Google Gemini, GitHub Copilot, and others");
1809
+ $$renderer.push(`<div data-testid="step-models" class="screen-models svelte-z6usuj">`);
1810
+ if (systemCheckError()) {
1811
+ $$renderer.push("<!--[0-->");
1812
+ $$renderer.push(`<div class="s1-alert s1-alert--error svelte-z6usuj" role="alert"><span class="s1-alert-text svelte-z6usuj">${escape_html(systemCheckError())}</span> <button type="button" class="s1-alert-btn svelte-z6usuj" id="btn-syscheck-retry">Retry</button></div>`);
1813
+ } else $$renderer.push("<!--[-1-->");
1814
+ $$renderer.push(`<!--]--> `);
1815
+ if (detectionLoading() || hostImporting()) {
1816
+ $$renderer.push("<!--[0-->");
1817
+ $$renderer.push(`<div class="s1-shimmer svelte-z6usuj" aria-busy="true" aria-label="Detecting AI services…"><span class="s1-shimmer-bar svelte-z6usuj"></span> <span class="s1-shimmer-bar s1-shimmer-bar--short svelte-z6usuj"></span> <span class="s1-shimmer-bar s1-shimmer-bar--shorter svelte-z6usuj"></span></div>`);
1818
+ } else {
1819
+ $$renderer.push("<!--[-1-->");
1820
+ if (verifiedCount() > 0 && showDetectedRow()) {
1821
+ $$renderer.push("<!--[0-->");
1822
+ $$renderer.push(`<div class="s1-detected-banner svelte-z6usuj" role="status"><div class="s1-detected-check svelte-z6usuj" aria-hidden="true">✓</div> <div class="s1-detected-text svelte-z6usuj"><div class="s1-detected-title svelte-z6usuj">${escape_html(detectedServiceLabel())} is already connected — you're good to go</div> <div class="s1-detected-sub svelte-z6usuj">We found your account on this computer. Just continue, or choose something different below.</div></div></div>`);
1823
+ } else $$renderer.push("<!--[-1-->");
1824
+ $$renderer.push(`<!--]--> <div class="s1-choice-list svelte-z6usuj" role="radiogroup" aria-label="Which AI should your assistant use">`);
1825
+ if (showDetectedRow()) {
1826
+ $$renderer.push("<!--[0-->");
1827
+ $$renderer.push(`<button type="button"${attr_class("s1-choice-row svelte-z6usuj", void 0, { "s1-choice-row--selected": selectedRow === "detected" })} role="radio"${attr("aria-checked", selectedRow === "detected")}><div class="s1-radio-dot svelte-z6usuj"><div class="s1-radio-dot-inner svelte-z6usuj"></div></div> <div class="s1-choice-body svelte-z6usuj"><div class="s1-choice-title svelte-z6usuj">${escape_html(detectedServiceLabel())}</div> <div class="s1-choice-sub svelte-z6usuj">Use your existing ${escape_html(detectedServiceLabel())} subscription</div></div> <span class="s1-badge-recommended svelte-z6usuj">Recommended</span></button>`);
1828
+ } else $$renderer.push("<!--[-1-->");
1829
+ $$renderer.push(`<!--]--> <button type="button"${attr_class("s1-choice-row svelte-z6usuj", void 0, {
1830
+ "s1-choice-row--selected": selectedRow === "local",
1831
+ "s1-choice-row--unavailable": !localAvailable()
1832
+ })} role="radio"${attr("aria-checked", selectedRow === "local")}${attr("disabled", !localAvailable(), true)}><div class="s1-radio-dot svelte-z6usuj"><div class="s1-radio-dot-inner svelte-z6usuj"></div></div> <div class="s1-choice-icon svelte-z6usuj" aria-hidden="true"><svg viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.4" class="svelte-z6usuj"><rect x="1.5" y="2.5" width="15" height="10" rx="1.5" class="svelte-z6usuj"></rect><path d="M5.5 15.5h7M9 12.5v3" stroke-linecap="round" class="svelte-z6usuj"></path><circle cx="9" cy="7.5" r="2.5" class="svelte-z6usuj"></circle></svg></div> <div class="s1-choice-body svelte-z6usuj"><div class="s1-choice-title svelte-z6usuj">Run on this computer</div> <div class="s1-choice-sub svelte-z6usuj">`);
1833
+ if (localAvailable()) {
1834
+ $$renderer.push("<!--[0-->");
1835
+ $$renderer.push(`Private &amp; free — no account needed, no data leaves your machine`);
1836
+ } else {
1837
+ $$renderer.push("<!--[-1-->");
1838
+ $$renderer.push(`Needs a more capable computer — requires 8 GB+ graphics card or Apple Silicon`);
1839
+ }
1840
+ $$renderer.push(`<!--]--></div></div></button> `);
1841
+ if (showLocalPanel()) {
1842
+ $$renderer.push("<!--[0-->");
1843
+ $$renderer.push(`<div class="s1-local-panel svelte-z6usuj" aria-live="polite">`);
1844
+ LocalModelsStatus($$renderer);
1845
+ $$renderer.push(`<!----></div>`);
1846
+ } else $$renderer.push("<!--[-1-->");
1847
+ $$renderer.push(`<!--]--> <button type="button"${attr_class("s1-choice-row svelte-z6usuj", void 0, { "s1-choice-row--selected": selectedRow === "cloud" })} role="radio"${attr("aria-checked", selectedRow === "cloud")}><div class="s1-radio-dot svelte-z6usuj"><div class="s1-radio-dot-inner svelte-z6usuj"></div></div> <div class="s1-choice-body svelte-z6usuj"><div class="s1-choice-title svelte-z6usuj">${escape_html(cloudRowTitle())}</div> <div class="s1-choice-sub svelte-z6usuj">${escape_html(cloudRowSub())}</div></div></button> `);
1848
+ if (showSignInPanel()) {
1849
+ $$renderer.push("<!--[0-->");
1850
+ $$renderer.push(`<div class="s1-signin-panel svelte-z6usuj" aria-live="polite">`);
1851
+ CloudAttachPanel($$renderer);
1852
+ $$renderer.push(`<!----></div>`);
1853
+ } else $$renderer.push("<!--[-1-->");
1854
+ $$renderer.push(`<!--]--></div> `);
1855
+ if (!llmModel() && !allowEmptyInstall()) {
1856
+ $$renderer.push("<!--[0-->");
1857
+ $$renderer.push(`<div class="s1-empty-install-row svelte-z6usuj"><p class="s1-empty-install-hint svelte-z6usuj">No AI here? You can still continue — connect this app to an assistant
1858
+ running on another computer, or add a provider later from your dashboard.</p> <button type="button" class="s1-btn-empty-install svelte-z6usuj">I'll set this up later</button></div>`);
1859
+ } else $$renderer.push("<!--[-1-->");
1860
+ $$renderer.push(`<!--]-->`);
1861
+ }
1862
+ $$renderer.push(`<!--]--></div>`);
1863
+ });
1864
+ }
1865
+ //#endregion
1866
+ //#region src/routes/setup/steps/Screen2ExtrasStep.svelte
1867
+ function Screen2ExtrasStep($$renderer, $$props) {
1868
+ $$renderer.component(($$renderer) => {
1869
+ /**
1870
+ * Screen2ExtrasStep — "Optional extras"
1871
+ *
1872
+ * Flat hairline-row layout (spec: /tmp/wiz/extras-finish-redesign.html).
1873
+ * Three rows with inline accordion expansion (no modal, no bordered cards,
1874
+ * no sub-section headings):
1875
+ * 1. Voice — bundled openpalm-voice; toggle drives onvoiceenabledchange + engine defaults
1876
+ * 2. Discord — botToken + applicationId credential fields
1877
+ * 3. Slack — slackBotToken + slackAppToken credential fields
1878
+ *
1879
+ * Takes NO props: this step reads the setup-state store
1880
+ * ($lib/setup/setup-state.svelte.ts) directly for modelMode / voiceEnabled /
1881
+ * displayed voice engines / hasOpenAI / portalSelection, and writes back
1882
+ * through the store (handleEnableVoiceChange, voice engine setters,
1883
+ * handlePortalToggle, handleCredentialChange). Local aliases near the top of
1884
+ * the script map those store members to the names the template uses.
1885
+ */
1886
+ const s = setupState;
1887
+ const voiceEnabled = derived(() => s.voiceEnabled);
1888
+ const portalSelection = derived(() => s.portalSelection);
1889
+ function isPortalEnabled$2(chId, locked) {
1890
+ return isPortalEnabled(portalSelection(), chId, locked);
1891
+ }
1892
+ function getCredValue$1(chId, key) {
1893
+ return getCredValue(portalSelection(), chId, key);
1894
+ }
1895
+ const configurablePortals = derived(() => PORTALS.filter((ch) => !ch.locked));
1896
+ const discordCh = derived(() => configurablePortals().find((ch) => ch.id === "discord"));
1897
+ const slackCh = derived(() => configurablePortals().find((ch) => ch.id === "slack"));
1898
+ const discordOn = derived(() => isPortalEnabled$2("discord"));
1899
+ const slackOn = derived(() => isPortalEnabled$2("slack"));
1900
+ $$renderer.push(`<div data-testid="step-extras" class="addon-list svelte-85kisn" role="list"><div class="addon-row svelte-85kisn" role="listitem"><div class="addon-row-header svelte-85kisn"><div class="addon-icon voice-icon svelte-85kisn" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="#3b82f6" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" class="svelte-85kisn"><rect x="9" y="3" width="6" height="11" rx="3"></rect><path d="M5 11a7 7 0 0014 0M12 18v3"></path></svg></div> <div class="addon-body svelte-85kisn"><div class="addon-title svelte-85kisn">Voice</div> <div class="addon-sub svelte-85kisn">Talk to your assistant and hear it reply</div></div> <div class="toggle-wrap svelte-85kisn"><label class="toggle svelte-85kisn" aria-label="Enable Voice"><input type="checkbox"${attr("checked", voiceEnabled(), true)} class="svelte-85kisn"/> <div class="toggle-track svelte-85kisn"></div> <div class="toggle-thumb svelte-85kisn"></div></label></div></div> <div${attr_class("addon-panel svelte-85kisn", void 0, { "open": voiceEnabled() })} aria-live="polite"><div class="addon-panel-inner svelte-85kisn"><p class="panel-question svelte-85kisn">How should your assistant speak?</p> <div class="voice-option svelte-85kisn"><div class="voice-option-dot svelte-85kisn"><div class="voice-option-dot-inner svelte-85kisn"></div></div> <div><div class="voice-option-text svelte-85kisn">Built-in voice — free, runs on this computer</div> <div class="voice-option-sub svelte-85kisn">No internet needed. Sounds natural, works out of the box.</div></div></div></div></div></div> `);
1901
+ if (discordCh()) {
1902
+ $$renderer.push("<!--[0-->");
1903
+ $$renderer.push(`<div class="addon-row svelte-85kisn" role="listitem"><div class="addon-row-header svelte-85kisn"><div class="addon-icon discord-icon svelte-85kisn" aria-hidden="true"><svg viewBox="0 0 24 24" fill="#5865f2" class="svelte-85kisn"><path d="M19 5.3A16 16 0 0015 4l-.2.4a14 14 0 00-4 0L10.5 4a16 16 0 00-4 1.3C4 9 3.3 12.6 3.6 16.2A16 16 0 008.5 18.7c.4-.5.8-1.1 1-1.7a9 9 0 01-1.6-.8l.4-.3a11 11 0 009.4 0l.4.3a9 9 0 01-1.6.8c.3.6.6 1.2 1 1.7a16 16 0 004.9-2.5c.4-4.2-.7-7.8-2.4-10.9zM9 14c-.8 0-1.4-.7-1.4-1.6S8.2 10.8 9 10.8s1.4.7 1.4 1.6S9.8 14 9 14zm6 0c-.8 0-1.4-.7-1.4-1.6s.6-1.6 1.4-1.6 1.4.7 1.4 1.6S15.8 14 15 14z"></path></svg></div> <div class="addon-body svelte-85kisn"><div class="addon-title svelte-85kisn">Discord</div> <div class="addon-sub svelte-85kisn">Reach your assistant from a Discord server</div></div> <div class="toggle-wrap svelte-85kisn"><label class="toggle svelte-85kisn" aria-label="Enable Discord"><input type="checkbox"${attr("checked", discordOn(), true)} class="svelte-85kisn"/> <div class="toggle-track svelte-85kisn"></div> <div class="toggle-thumb svelte-85kisn"></div></label></div></div> <div${attr_class("addon-panel svelte-85kisn", void 0, { "open": discordOn() })} aria-live="polite"><div class="addon-panel-inner svelte-85kisn"><div class="field-group svelte-85kisn"><div><label class="field-label svelte-85kisn" for="cred-discord-botToken">Bot token</label> <input class="field-input svelte-85kisn" type="password" id="cred-discord-botToken" placeholder="Paste your bot token here" autocomplete="off"${attr("value", getCredValue$1("discord", "botToken"))}/> <p class="field-help svelte-85kisn"><a href="https://discord.com/developers/docs/quick-start/getting-started" target="_blank" rel="noopener" class="svelte-85kisn">How to create a Discord bot and get your token →</a></p></div> <div><label class="field-label svelte-85kisn" for="cred-discord-applicationId">Application ID</label> <input class="field-input svelte-85kisn" type="text" id="cred-discord-applicationId" placeholder="Your app's numeric ID" autocomplete="off"${attr("value", getCredValue$1("discord", "applicationId"))}/> <p class="field-help svelte-85kisn">Found in the Discord Developer Portal under your application's General Information page.</p></div></div></div></div></div>`);
1904
+ } else $$renderer.push("<!--[-1-->");
1905
+ $$renderer.push(`<!--]--> `);
1906
+ if (slackCh()) {
1907
+ $$renderer.push("<!--[0-->");
1908
+ $$renderer.push(`<div class="addon-row svelte-85kisn" role="listitem"><div class="addon-row-header svelte-85kisn"><div class="addon-icon slack-icon svelte-85kisn" aria-hidden="true"><svg viewBox="0 0 24 24" class="svelte-85kisn"><path fill="#36C5F0" d="M9 13.5a2 2 0 11-2-2h2v2z"></path><path fill="#2EB67D" d="M10.5 9a2 2 0 112 2H10.5v-2z"></path><path fill="#ECB22E" d="M15 10.5a2 2 0 112 2h-2v-2z"></path><path fill="#E01E5A" d="M13.5 15a2 2 0 11-2 2v-2h2z"></path></svg></div> <div class="addon-body svelte-85kisn"><div class="addon-title svelte-85kisn">Slack</div> <div class="addon-sub svelte-85kisn">Reach your assistant from a Slack workspace</div></div> <div class="toggle-wrap svelte-85kisn"><label class="toggle svelte-85kisn" aria-label="Enable Slack"><input type="checkbox"${attr("checked", slackOn(), true)} class="svelte-85kisn"/> <div class="toggle-track svelte-85kisn"></div> <div class="toggle-thumb svelte-85kisn"></div></label></div></div> <div${attr_class("addon-panel svelte-85kisn", void 0, { "open": slackOn() })} aria-live="polite"><div class="addon-panel-inner svelte-85kisn"><div class="field-group svelte-85kisn"><div><label class="field-label svelte-85kisn" for="cred-slack-slackBotToken">Bot token</label> <input class="field-input svelte-85kisn" type="password" id="cred-slack-slackBotToken" placeholder="xoxb-…" autocomplete="off"${attr("value", getCredValue$1("slack", "slackBotToken"))}/></div> <div><label class="field-label svelte-85kisn" for="cred-slack-slackAppToken">App-level token</label> <input class="field-input svelte-85kisn" type="password" id="cred-slack-slackAppToken" placeholder="xapp-…" autocomplete="off"${attr("value", getCredValue$1("slack", "slackAppToken"))}/> <p class="field-help svelte-85kisn"><a href="https://api.slack.com/quickstart" target="_blank" rel="noopener" class="svelte-85kisn">How to create a Slack app and get your tokens →</a></p></div></div></div></div></div>`);
1909
+ } else $$renderer.push("<!--[-1-->");
1910
+ $$renderer.push(`<!--]--></div>`);
1911
+ });
1912
+ }
1913
+ //#endregion
1914
+ //#region src/routes/setup/steps/ReviewStep.svelte
1915
+ function ReviewStep($$renderer, $$props) {
1916
+ $$renderer.component(($$renderer) => {
1917
+ const s = setupState;
1918
+ const verifiedProviders = derived(() => s.verifiedProviders);
1919
+ const modelSelection = derived(() => s.modelSelection);
1920
+ const activeTts = derived(() => s.voiceEnabled ? s.displayedVoiceTts.engine : "");
1921
+ const activeStt = derived(() => s.voiceEnabled ? s.displayedVoiceStt.engine : "");
1922
+ const portalSelection = derived(() => s.portalSelection);
1923
+ const ollamaEnabled = derived(() => s.ollamaEnabled);
1924
+ const hostProviderLabel = derived(() => s.detectedHostProviders.length > 0 ? s.detectedHostProviders[0].provider : "");
1925
+ const installError = derived(() => s.installError);
1926
+ const isRerun = derived(() => s.isRerun);
1927
+ const systemCheckPassed = derived(() => s.systemCheckPassed);
1928
+ function isPortalEnabled$1(chId, locked) {
1929
+ return isPortalEnabled(portalSelection(), chId, locked);
1930
+ }
1931
+ const aiLabel = derived(() => {
1932
+ const connId = modelSelection().llm?.connId;
1933
+ if (!connId) return "";
1934
+ return friendlyProviderName(connId, { localLabel: "Runs on this computer" });
1935
+ });
1936
+ const voiceActive = derived(() => !!(activeTts() && !activeTts().startsWith("skip-")) || !!(activeStt() && !activeStt().startsWith("skip-")));
1937
+ const activePortals = derived(() => PORTALS.filter((ch) => !ch.locked && isPortalEnabled$1(ch.id, ch.locked)));
1938
+ let passwordCopied = false;
1939
+ if (verifiedProviders().length === 0) {
1940
+ $$renderer.push("<!--[0-->");
1941
+ $$renderer.push(`<div class="review-note svelte-1q74f52">No AI set up here yet — that's fine. After install you can connect this app to an
1942
+ assistant running on another computer, or add a provider, anytime from your dashboard.</div>`);
1943
+ } else $$renderer.push("<!--[-1-->");
1944
+ $$renderer.push(`<!--]--> `);
1945
+ if (!isRerun()) {
1946
+ $$renderer.push("<!--[0-->");
1947
+ $$renderer.push(`<div class="password-block svelte-1q74f52"><p class="password-label svelte-1q74f52">Sign-in password</p> <div class="password-row svelte-1q74f52">`);
1948
+ $$renderer.push("<!--[-1-->");
1949
+ $$renderer.push(`<span class="password-value password-value--dots svelte-1q74f52" aria-label="Sign-in password">••••••••••••••••</span>`);
1950
+ $$renderer.push(`<!--]--> <div class="password-actions svelte-1q74f52"><button type="button" class="btn-icon svelte-1q74f52"${attr("aria-label", "Show password")}${attr("title", "Show")}>`);
1951
+ $$renderer.push("<!--[-1-->");
1952
+ $$renderer.push(`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M1 8s2.5-5 7-5 7 5 7 5-2.5 5-7 5-7-5-7-5z"></path><circle cx="8" cy="8" r="2"></circle></svg>`);
1953
+ $$renderer.push(`<!--]--></button> <button type="button"${attr_class("btn-icon svelte-1q74f52", void 0, { "btn-icon--copied": passwordCopied })}${attr("aria-label", "Copy password")} title="Copy">`);
1954
+ $$renderer.push("<!--[-1-->");
1955
+ $$renderer.push(`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="5" width="8" height="8" rx="1.5"></rect><path d="M3 11V3h8"></path></svg>`);
1956
+ $$renderer.push(`<!--]--></button></div></div> <p class="password-note svelte-1q74f52">Already saved on this computer — keep a copy somewhere safe just in case.</p></div>`);
1957
+ } else {
1958
+ $$renderer.push("<!--[-1-->");
1959
+ $$renderer.push(`<div class="password-block svelte-1q74f52"><p class="password-label svelte-1q74f52">Sign-in password</p> <div class="password-row svelte-1q74f52"><span class="password-value password-value--dots svelte-1q74f52" aria-label="Sign-in password">••••••••</span> <div class="password-actions svelte-1q74f52"><span class="rerun-note svelte-1q74f52">Previously set — not changed.</span></div></div></div>`);
1960
+ }
1961
+ $$renderer.push(`<!--]--> <div class="summary-list svelte-1q74f52" aria-label="What's set up"><p class="summary-section-label svelte-1q74f52">What's being set up</p> `);
1962
+ if (aiLabel()) {
1963
+ $$renderer.push("<!--[0-->");
1964
+ $$renderer.push(`<div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true">`);
1965
+ IconAgent($$renderer, { size: 16 });
1966
+ $$renderer.push(`<!----></span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">AI</div> <div class="summary-val svelte-1q74f52">${escape_html(aiLabel())}</div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div>`);
1967
+ } else if (verifiedProviders().length > 0) {
1968
+ $$renderer.push("<!--[1-->");
1969
+ $$renderer.push(`<div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true">`);
1970
+ IconAgent($$renderer, { size: 16 });
1971
+ $$renderer.push(`<!----></span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">AI</div> <div class="summary-val svelte-1q74f52">${escape_html(friendlyProviderName(verifiedProviders()[0].id))}</div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div>`);
1972
+ } else if (ollamaEnabled()) {
1973
+ $$renderer.push("<!--[2-->");
1974
+ $$renderer.push(`<div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true">`);
1975
+ IconAgent($$renderer, { size: 16 });
1976
+ $$renderer.push(`<!----></span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">AI</div> <div class="summary-val svelte-1q74f52">Runs on this computer</div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div>`);
1977
+ } else if (hostProviderLabel()) {
1978
+ $$renderer.push("<!--[3-->");
1979
+ $$renderer.push(`<div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true">`);
1980
+ IconAgent($$renderer, { size: 16 });
1981
+ $$renderer.push(`<!----></span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">AI</div> <div class="summary-val svelte-1q74f52">${escape_html(friendlyProviderName(hostProviderLabel()))}</div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div>`);
1982
+ } else $$renderer.push("<!--[-1-->");
1983
+ $$renderer.push(`<!--]--> `);
1984
+ if (voiceActive()) {
1985
+ $$renderer.push("<!--[0-->");
1986
+ $$renderer.push(`<div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true">`);
1987
+ IconMic($$renderer, { size: 16 });
1988
+ $$renderer.push(`<!----></span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">Voice</div> <div class="summary-val svelte-1q74f52">On — built-in voice</div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div>`);
1989
+ } else $$renderer.push("<!--[-1-->");
1990
+ $$renderer.push(`<!--]--> <!--[-->`);
1991
+ const each_array = ensure_array_like(activePortals());
1992
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1993
+ let ch = each_array[$$index];
1994
+ $$renderer.push(`<div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true">${escape_html(ch.icon)}</span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">Chat app</div> <div class="summary-val svelte-1q74f52">${escape_html(ch.name)}</div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div>`);
1995
+ }
1996
+ $$renderer.push(`<!--]--></div> `);
1997
+ if (installError()) {
1998
+ $$renderer.push("<!--[0-->");
1999
+ FriendlyError($$renderer, { error: friendlyError(installError(), "setup-complete") });
2000
+ } else $$renderer.push("<!--[-1-->");
2001
+ $$renderer.push(`<!--]--> `);
2002
+ if (!systemCheckPassed()) {
2003
+ $$renderer.push("<!--[0-->");
2004
+ $$renderer.push(`<div class="review-warning svelte-1q74f52" role="alert">⚠ System check has not passed yet — Install is disabled until Docker is confirmed available.</div>`);
2005
+ } else $$renderer.push("<!--[-1-->");
2006
+ $$renderer.push(`<!--]--> <div class="review-save-row svelte-1q74f52"><button type="button" class="btn-save svelte-1q74f52" aria-label="Save configuration as JSON file">Save configuration</button></div>`);
2007
+ });
2008
+ }
2009
+ //#endregion
2010
+ //#region src/routes/setup/steps/DeployStep.svelte
2011
+ function DeployStep($$renderer, $$props) {
2012
+ $$renderer.component(($$renderer) => {
2013
+ /** Non-fatal: install used cached images because the registry pull failed. */
2014
+ /** Terminal state reached with non-running rows that are all warnings. */
2015
+ let { deployData, deployDone, deployHasWarnings = false, deployError} = $$props;
2016
+ const warningRows = derived(() => (deployData.deployStatus ?? []).filter((s) => s.status === "warning"));
2017
+ const isElectron = typeof window !== "undefined" && !!window.openpalm;
2018
+ const windowPort = typeof window !== "undefined" ? Number(window.location.port) || 3880 : 3880;
2019
+ const adminPort = derived(() => deployData.ports?.admin ?? windowPort);
2020
+ const assistantPort = derived(() => deployData.ports?.assistant ?? 3800);
2021
+ const serviceLinks = derived(() => ({
2022
+ assistant: {
2023
+ port: assistantPort(),
2024
+ label: "Assistant (OpenCode)",
2025
+ path: ""
2026
+ },
2027
+ admin: {
2028
+ port: adminPort(),
2029
+ label: "Admin Dashboard",
2030
+ path: "/host"
2031
+ }
2032
+ }));
2033
+ const services = derived(() => deployData.deployStatus ?? []);
2034
+ const total = derived(() => services().length);
2035
+ const running = derived(() => services().filter((s) => s.status === "running").length);
2036
+ const pct = derived(() => total() > 0 ? Math.round(running() / total() * 100) : 0);
2037
+ const phase = derived(() => deployData.phase ?? "writing-config");
2038
+ const voiceEnabled = derived(() => services().some((s) => /^voice(-cuda|-rocm)?$/.test(s.service ?? "")));
2039
+ const deployTitle = derived(() => {
2040
+ if (deployDone) return deployHasWarnings ? "Setup Complete (with warnings)" : "Setup Complete";
2041
+ if (deployError) return "Deployment Issue";
2042
+ switch (phase()) {
2043
+ case "writing-config": return "Preparing Configuration…";
2044
+ case "pulling-images": return voiceEnabled() ? "Downloading Images (incl. Voice ~2.4 GB)…" : "Downloading Images…";
2045
+ case "starting": return "Starting Services…";
2046
+ case "starting-voice": return "Starting Voice Addon…";
2047
+ case "ready": return "Setup Complete";
2048
+ }
2049
+ return "Deploying…";
2050
+ });
2051
+ const deploySubtitle = derived(() => {
2052
+ if (deployDone) return deployHasWarnings ? "Setup is complete. Some services are still warming up in the background — they will be ready shortly." : "Your OpenPalm stack is up and running.";
2053
+ if (deployError) return "Setup could not finish starting the stack.";
2054
+ switch (phase()) {
2055
+ case "writing-config": return "Writing config files and validating settings.";
2056
+ case "pulling-images": return voiceEnabled() ? "Downloading container images. The voice model (~2.4 GB) is the largest — on a typical home connection this step can take 10–30 minutes. The wizard will wait — keep this tab open." : "Downloading container images — first install can take 3–8 minutes depending on connection.";
2057
+ case "starting": return `${running()} of ${total()} services running.`;
2058
+ case "starting-voice": return "Pulling the voice image (~2.4 GB) and warming up Kokoro + Whisper models. First launch can take 5–30 minutes on slow connections — the wizard will wait.";
2059
+ case "ready": return "All services are up.";
2060
+ }
2061
+ return "Writing configuration and starting services.";
2062
+ });
2063
+ const noStartMode = derived(() => deployDone && services().length === 0);
2064
+ $$renderer.push(`<div class="deploy-header"><h2 id="deploy-title">${escape_html(deployTitle())}</h2> <p class="step-description" id="deploy-subtitle">${escape_html(deploySubtitle())}</p></div> <div class="deploy-progress-summary"><div class="deploy-progress-meta"><span class="deploy-progress-label">Progress</span> <span${attr_class(`deploy-progress-value ${deployError ? "deploy-progress-value--error" : ""}`)} id="deploy-progress-value">`);
2065
+ if (deployError) {
2066
+ $$renderer.push("<!--[0-->");
2067
+ $$renderer.push(`Error`);
2068
+ } else if (deployDone) {
2069
+ $$renderer.push("<!--[1-->");
2070
+ $$renderer.push(`${escape_html(services().length > 0 ? "100%" : "")}`);
2071
+ } else {
2072
+ $$renderer.push("<!--[-1-->");
2073
+ $$renderer.push(`${escape_html(pct())}%`);
2074
+ }
2075
+ $$renderer.push(`<!--]--></span></div> <div class="deploy-progress-bar"><div class="deploy-progress-fill" id="deploy-progress-fill"${attr_style(`width:${stringify(deployDone && services().length > 0 ? 100 : deployDone ? 0 : pct())}%`)}></div></div></div> <div class="deploy-services" id="deploy-services"><!--[-->`);
2076
+ const each_array = ensure_array_like(services());
2077
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
2078
+ let svc = each_array[$$index];
2079
+ $$renderer.push(`<div class="deploy-service-row"><div class="deploy-service-indicator">`);
2080
+ if (svc.status === "running") {
2081
+ $$renderer.push("<!--[0-->");
2082
+ $$renderer.push(`<span class="deploy-check"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--s-moss)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg></span>`);
2083
+ } else if (svc.status === "error" || svc.status === "warning") {
2084
+ $$renderer.push("<!--[1-->");
2085
+ $$renderer.push(`<span class="deploy-warning"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--s-ink-2)" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round"><path d="M12 9v4"></path><path d="M12 17h.01"></path><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path></svg></span>`);
2086
+ } else {
2087
+ $$renderer.push("<!--[-1-->");
2088
+ $$renderer.push(`<span class="deploy-spinner">`);
2089
+ Spinner($$renderer, {});
2090
+ $$renderer.push(`<!----></span>`);
2091
+ }
2092
+ $$renderer.push(`<!--]--></div> <div class="deploy-service-info"><span class="deploy-service-name">${escape_html(svc.service || svc.label || "")}</span> <span class="deploy-service-status">${escape_html(svc.label || svc.status)}</span></div> <div class="deploy-service-bar"><div${attr_class(`deploy-bar-fill ${svc.status === "running" ? "complete" : svc.status === "ready" ? "ready" : svc.status === "warning" ? "warning" : svc.status === "error" ? "stopped" : "indeterminate"}`, "svelte-1orw49v")}></div></div></div>`);
2093
+ }
2094
+ $$renderer.push(`<!--]--></div> `);
2095
+ if (deployError) {
2096
+ $$renderer.push("<!--[0-->");
2097
+ $$renderer.push(`<div id="deploy-failure">`);
2098
+ FriendlyError($$renderer, { error: friendlyError(deployError, "deploy") });
2099
+ $$renderer.push(`<!----></div>`);
2100
+ } else $$renderer.push("<!--[-1-->");
2101
+ $$renderer.push(`<!--]--> `);
2102
+ if (!deployDone && !deployError) {
2103
+ $$renderer.push("<!--[0-->");
2104
+ $$renderer.push(`<aside class="deploy-tips" id="deploy-tips"><div class="deploy-tips-header"><span class="deploy-tips-kicker">Tips</span> <h3>${escape_html(voiceEnabled() ? "First install may take 10–30 minutes" : "First startup takes a few minutes")}</h3></div> <ul>`);
2105
+ if (voiceEnabled()) {
2106
+ $$renderer.push("<!--[0-->");
2107
+ $$renderer.push(`<li>The OpenPalm Voice image is ~2.4 GB — the largest piece by far. Download speed depends on your internet connection.</li> <li>The wizard waits as long as the download takes. Progress bars below show each service's state.</li>`);
2108
+ } else {
2109
+ $$renderer.push("<!--[-1-->");
2110
+ $$renderer.push(`<li>Container images are being downloaded for the first time.</li>`);
2111
+ }
2112
+ $$renderer.push(`<!--]--> <li>The admin console will be available once all services are healthy.</li> `);
2113
+ if (isElectron) {
2114
+ $$renderer.push("<!--[0-->");
2115
+ $$renderer.push(`<li>You can leave this window — we'll let you know when it's ready.</li>`);
2116
+ } else {
2117
+ $$renderer.push("<!--[-1-->");
2118
+ $$renderer.push(`<li><strong>Keep this tab open while installation runs.</strong></li>`);
2119
+ }
2120
+ $$renderer.push(`<!--]--></ul></aside>`);
2121
+ } else $$renderer.push("<!--[-1-->");
2122
+ $$renderer.push(`<!--]--> `);
2123
+ if (deployDone) {
2124
+ $$renderer.push("<!--[0-->");
2125
+ $$renderer.push(`<div class="done-state" id="deploy-done"><div class="done-icon"><svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="var(--s-moss)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg></div> <h2>${escape_html(deployHasWarnings ? "Setup Complete (with warnings)" : "Setup Complete")}</h2> `);
2126
+ if (noStartMode()) {
2127
+ $$renderer.push("<!--[0-->");
2128
+ $$renderer.push(`<p class="done-subtitle">Configuration saved. Run 'openpalm start' to start services.</p>`);
2129
+ } else {
2130
+ $$renderer.push("<!--[-1-->");
2131
+ $$renderer.push(`<p class="done-subtitle">${escape_html(deployHasWarnings ? "Setup is complete. Some services are still warming up in the background." : "Your OpenPalm stack is up and running.")}</p> `);
2132
+ if (deployHasWarnings && warningRows().length > 0) {
2133
+ $$renderer.push("<!--[0-->");
2134
+ $$renderer.push(`<div class="deploy-warnings-note svelte-1orw49v" role="status" id="deploy-warnings-note">Still warming up: ${escape_html(warningRows().map((s) => s.label || s.service).join(", "))}. You can finish setup now — these will be ready shortly.</div>`);
2135
+ } else $$renderer.push("<!--[-1-->");
2136
+ $$renderer.push(`<!--]--> `);
2137
+ if (deployData.imageWarning) {
2138
+ $$renderer.push("<!--[0-->");
2139
+ $$renderer.push(`<div class="feedback feedback--warning" role="status" id="deploy-image-warning" style="margin-top:12px"><span>⚠ ${escape_html(deployData.imageWarning)}</span></div>`);
2140
+ } else $$renderer.push("<!--[-1-->");
2141
+ $$renderer.push(`<!--]--> `);
2142
+ if (!isElectron) {
2143
+ $$renderer.push("<!--[0-->");
2144
+ $$renderer.push(`<p class="done-close-hint svelte-1orw49v">Setup is complete. You can safely close this tab now.</p>`);
2145
+ } else $$renderer.push("<!--[-1-->");
2146
+ $$renderer.push(`<!--]--> <ul class="service-list" id="deploy-service-list"><!--[-->`);
2147
+ const each_array_1 = ensure_array_like(services());
2148
+ for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
2149
+ let svc = each_array_1[$$index_1];
2150
+ const name = svc.service || svc.label || "";
2151
+ const linkInfo = serviceLinks()[name];
2152
+ const isWarming = svc.status === "warning";
2153
+ $$renderer.push(`<li>`);
2154
+ if (linkInfo) {
2155
+ $$renderer.push("<!--[0-->");
2156
+ const url = "http://127.0.0.1:" + linkInfo.port + linkInfo.path;
2157
+ $$renderer.push(`<span class="deploy-svc-name">${escape_html(linkInfo.label)}</span> <a${attr("href", url)} target="_blank" rel="noopener" class="deploy-svc-link">${escape_html(url)}</a> <span class="deploy-svc-status">${escape_html(isWarming ? svc.label || "⚠ Warming up" : "✓ Running")}</span>`);
2158
+ } else {
2159
+ $$renderer.push("<!--[-1-->");
2160
+ $$renderer.push(`<span class="deploy-svc-name">${escape_html(name)}</span> <span class="deploy-svc-status">${escape_html(isWarming ? svc.label || "⚠ Warming up" : "✓ Running")}</span>`);
2161
+ }
2162
+ $$renderer.push(`<!--]--></li>`);
2163
+ }
2164
+ $$renderer.push(`<!--]--></ul> <div class="done-links"><a${attr("href", resolve("/chat"))} class="btn btn-primary">Open Chat</a> <a${attr("href", `http://127.0.0.1:${stringify(assistantPort())}`)} target="_blank" rel="noopener" class="btn btn-secondary">OpenCode UI</a> <a${attr("href", resolve("/host"))} class="btn btn-secondary">Admin Dashboard</a></div>`);
2165
+ }
2166
+ $$renderer.push(`<!--]--></div>`);
2167
+ } else $$renderer.push("<!--[-1-->");
2168
+ $$renderer.push(`<!--]--> `);
2169
+ if (deployError) {
2170
+ $$renderer.push("<!--[0-->");
2171
+ $$renderer.push(`<div class="step-actions" id="deploy-error-actions"><button class="btn btn-secondary" id="btn-deploy-back">Back to Review</button> <button class="btn btn-primary" id="btn-deploy-retry">Retry</button></div>`);
2172
+ } else $$renderer.push("<!--[-1-->");
2173
+ $$renderer.push(`<!--]-->`);
2174
+ });
2175
+ }
2176
+ //#endregion
2177
+ //#region src/routes/setup/+page.svelte
2178
+ function _page($$renderer, $$props) {
2179
+ $$renderer.component(($$renderer) => {
2180
+ const s = setupState;
2181
+ head("g40i6i", $$renderer, ($$renderer) => {
2182
+ $$renderer.title(($$renderer) => {
2183
+ $$renderer.push(`<title>OpenPalm Setup</title>`);
2184
+ });
2185
+ });
2186
+ $$renderer.push(`<main class="setup-page" aria-label="Setup wizard">`);
2187
+ if (s.isRerun) {
2188
+ $$renderer.push("<!--[0-->");
2189
+ $$renderer.push(`<div class="rerun-banner"><span>Updating existing installation</span> <a${attr("href", resolve("/"))} class="rerun-back-link">← Back to Admin</a></div>`);
2190
+ } else $$renderer.push("<!--[-1-->");
2191
+ $$renderer.push(`<!--]--> `);
2192
+ if (s.currentStep === 0 && !s.showDeploy) {
2193
+ $$renderer.push("<!--[0-->");
2194
+ $$renderer.push(`<div style="display:none" aria-hidden="true"><section class="step-content step-content--hidden" id="step-0" data-testid="step-system-check">`);
2195
+ SystemCheckStep($$renderer);
2196
+ $$renderer.push(`<!----></section></div>`);
2197
+ } else $$renderer.push("<!--[-1-->");
2198
+ $$renderer.push(`<!--]--> `);
2199
+ if (s.showDeploy) {
2200
+ $$renderer.push("<!--[0-->");
2201
+ $$renderer.push(`<div style="flex:1; padding: 32px; overflow-y: auto;">`);
2202
+ DeployStep($$renderer, {
2203
+ deployData: s.deployData,
2204
+ deployDone: s.deployDone,
2205
+ deployHasWarnings: s.deployHasWarnings,
2206
+ deployError: s.deployError});
2207
+ $$renderer.push(`<!----></div>`);
2208
+ } else if (s.currentStep >= 1) {
2209
+ $$renderer.push("<!--[1-->");
2210
+ $$renderer.push(`<header class="wiz-topbar"><div class="wiz-wordmark">`);
2211
+ IconLogo($$renderer, { size: 30 });
2212
+ $$renderer.push(`<!----> <b>OpenPalm</b><span>setup</span></div> <nav class="wiz-ticker" aria-label="Setup steps"><!--[-->`);
2213
+ const each_array = ensure_array_like([
2214
+ {
2215
+ n: 1,
2216
+ label: "Connect"
2217
+ },
2218
+ {
2219
+ n: 2,
2220
+ label: "Add-ons"
2221
+ },
2222
+ {
2223
+ n: 3,
2224
+ label: "Finish"
2225
+ }
2226
+ ]);
2227
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
2228
+ let tick = each_array[$$index];
2229
+ $$renderer.push(`<div${attr_class("wiz-tick", void 0, {
2230
+ "wiz-tick--active": s.currentStep === tick.n,
2231
+ "wiz-tick--done": s.currentStep > tick.n
2232
+ })}${attr("aria-current", s.currentStep === tick.n ? "step" : void 0)}>`);
2233
+ if (s.currentStep > tick.n) {
2234
+ $$renderer.push("<!--[0-->");
2235
+ $$renderer.push(`<svg viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><path d="M2 6l3 3 5-5"></path></svg>`);
2236
+ } else {
2237
+ $$renderer.push("<!--[-1-->");
2238
+ $$renderer.push(`<span class="wiz-tick-num">${escape_html(tick.n)}</span>`);
2239
+ }
2240
+ $$renderer.push(`<!--]--> ${escape_html(tick.label)}</div>`);
2241
+ }
2242
+ $$renderer.push(`<!--]--></nav></header> <div class="wiz-stage"><div class="wiz-content"><div class="wiz-content-scroll"><div class="wiz-eyebrow">`);
2243
+ if (s.currentStep === 1) {
2244
+ $$renderer.push("<!--[0-->");
2245
+ $$renderer.push(`STEP 1 · Connect`);
2246
+ } else if (s.currentStep === 2) {
2247
+ $$renderer.push("<!--[1-->");
2248
+ $$renderer.push(`STEP 2 · Add-ons`);
2249
+ } else if (s.currentStep === 3) {
2250
+ $$renderer.push("<!--[2-->");
2251
+ $$renderer.push(`STEP 3 · Finish`);
2252
+ } else $$renderer.push("<!--[-1-->");
2253
+ $$renderer.push(`<!--]--></div> <h1 class="wiz-title">`);
2254
+ if (s.currentStep === 1) {
2255
+ $$renderer.push("<!--[0-->");
2256
+ $$renderer.push(`Connect your <span class="accent">AI brain</span>`);
2257
+ } else if (s.currentStep === 2) {
2258
+ $$renderer.push("<!--[1-->");
2259
+ $$renderer.push(`Optional <span class="accent">extras</span>`);
2260
+ } else if (s.currentStep === 3) {
2261
+ $$renderer.push("<!--[2-->");
2262
+ $$renderer.push(`You're all <span class="accent">set</span>`);
2263
+ } else $$renderer.push("<!--[-1-->");
2264
+ $$renderer.push(`<!--]--></h1> <p class="wiz-lede">`);
2265
+ if (s.currentStep === 1) {
2266
+ $$renderer.push("<!--[0-->");
2267
+ if (s.hasUsableAI) {
2268
+ $$renderer.push("<!--[0-->");
2269
+ $$renderer.push(`We found an AI service already set up. Just continue, or choose something different.`);
2270
+ } else {
2271
+ $$renderer.push("<!--[-1-->");
2272
+ $$renderer.push(`Your assistant needs a source of intelligence. Pick one and you're set — you can add more later.`);
2273
+ }
2274
+ $$renderer.push(`<!--]-->`);
2275
+ } else if (s.currentStep === 2) {
2276
+ $$renderer.push("<!--[1-->");
2277
+ $$renderer.push(`All optional — turn on only what you want now. You can add or remove anything later from your dashboard.`);
2278
+ } else if (s.currentStep === 3) {
2279
+ $$renderer.push("<!--[2-->");
2280
+ $$renderer.push(`OpenPalm is ready to install. Save the password you'll use to sign in.`);
2281
+ } else $$renderer.push("<!--[-1-->");
2282
+ $$renderer.push(`<!--]--></p> `);
2283
+ if (s.recommendationAlert && s.currentStep === 1) {
2284
+ $$renderer.push("<!--[0-->");
2285
+ $$renderer.push(`<div class="feedback feedback--warning" role="alert" data-testid="recommendation-alert"><span>${escape_html(s.recommendationAlert)}</span></div>`);
2286
+ } else $$renderer.push("<!--[-1-->");
2287
+ $$renderer.push(`<!--]--> `);
2288
+ if (s.hostImportError && s.currentStep === 1) {
2289
+ $$renderer.push("<!--[0-->");
2290
+ $$renderer.push(`<div class="feedback feedback--error" role="alert" data-testid="host-import-error"><span>${escape_html(s.hostImportError)}</span></div>`);
2291
+ } else $$renderer.push("<!--[-1-->");
2292
+ $$renderer.push(`<!--]--> `);
2293
+ if (s.currentStep === 1) {
2294
+ $$renderer.push("<!--[0-->");
2295
+ $$renderer.push(`<section class="step-content" id="step-1">`);
2296
+ Screen1ModelsStep($$renderer);
2297
+ $$renderer.push(`<!----></section>`);
2298
+ } else if (s.currentStep === 2) {
2299
+ $$renderer.push("<!--[1-->");
2300
+ $$renderer.push(`<section class="step-content" id="step-2">`);
2301
+ Screen2ExtrasStep($$renderer);
2302
+ $$renderer.push(`<!----></section>`);
2303
+ } else if (s.currentStep === 3) {
2304
+ $$renderer.push("<!--[2-->");
2305
+ $$renderer.push(`<section class="step-content" id="step-3" data-testid="step-review">`);
2306
+ ReviewStep($$renderer);
2307
+ $$renderer.push(`<!----></section>`);
2308
+ } else $$renderer.push("<!--[-1-->");
2309
+ $$renderer.push(`<!--]--></div> <footer class="wiz-footer"><div class="wiz-footer-left">`);
2310
+ if (s.currentStep > 1) {
2311
+ $$renderer.push("<!--[0-->");
2312
+ $$renderer.push(`<button class="btn btn-secondary" aria-label="Back">Back</button>`);
2313
+ } else {
2314
+ $$renderer.push("<!--[-1-->");
2315
+ $$renderer.push(`<div></div>`);
2316
+ }
2317
+ $$renderer.push(`<!--]--></div> <div class="wiz-footer-right">`);
2318
+ if (s.currentStep === 1) {
2319
+ $$renderer.push("<!--[0-->");
2320
+ $$renderer.push(`<button class="btn btn-primary" id="btn-screen1-next"${attr("disabled", !s.canComplete, true)}>`);
2321
+ if (s.modelSelection.llm?.connId && !LOCAL_PROVIDER_IDS.has(s.modelSelection.llm.connId)) {
2322
+ $$renderer.push("<!--[0-->");
2323
+ $$renderer.push(`Use ${escape_html(friendlyProviderName(s.modelSelection.llm.connId, { extraProviders: s.opencodeProviders }))} — Continue`);
2324
+ } else if (s.ollamaEnabled || s.detectedHostProviders.length > 0 || s.modelSelection.llm?.connId && LOCAL_PROVIDER_IDS.has(s.modelSelection.llm.connId)) {
2325
+ $$renderer.push("<!--[1-->");
2326
+ $$renderer.push(`Use local AI — Continue`);
2327
+ } else {
2328
+ $$renderer.push("<!--[-1-->");
2329
+ $$renderer.push(`Continue`);
2330
+ }
2331
+ $$renderer.push(`<!--]--></button>`);
2332
+ } else if (s.currentStep === 2) {
2333
+ $$renderer.push("<!--[1-->");
2334
+ $$renderer.push(`<button class="btn btn-primary" id="btn-screen2-next">Continue</button>`);
2335
+ } else if (s.currentStep === 3) {
2336
+ $$renderer.push("<!--[2-->");
2337
+ $$renderer.push(`<button class="btn btn-primary" id="btn-install"${attr("disabled", !s.canComplete || s.installing, true)}>`);
2338
+ if (s.installing) {
2339
+ $$renderer.push("<!--[0-->");
2340
+ $$renderer.push(`Installing...`);
2341
+ } else {
2342
+ $$renderer.push("<!--[-1-->");
2343
+ $$renderer.push(`${escape_html(s.isRerun ? "Update" : "Install")}`);
2344
+ }
2345
+ $$renderer.push(`<!--]--></button>`);
2346
+ } else $$renderer.push("<!--[-1-->");
2347
+ $$renderer.push(`<!--]--></div></footer></div> <aside class="wiz-aside" aria-label="Setup guide"><div class="wiz-aside-top"><img class="wiz-mascot" src="/wizard-128.png" alt="OpenPalm setup guide"/> <div><b class="wiz-greet-name">`);
2348
+ if (s.currentStep === 1) {
2349
+ $$renderer.push("<!--[0-->");
2350
+ if (s.hasUsableAI) {
2351
+ $$renderer.push("<!--[0-->");
2352
+ $$renderer.push(`You're almost done!`);
2353
+ } else if (s.modelMode === "local" || s.ollamaEnabled || s.detectedHostProviders.length > 0) {
2354
+ $$renderer.push("<!--[1-->");
2355
+ $$renderer.push(`Great choice.`);
2356
+ } else {
2357
+ $$renderer.push("<!--[-1-->");
2358
+ $$renderer.push(`Pick what works for you.`);
2359
+ }
2360
+ $$renderer.push(`<!--]-->`);
2361
+ } else if (s.currentStep === 2) {
2362
+ $$renderer.push("<!--[1-->");
2363
+ $$renderer.push(`While you're here…`);
2364
+ } else if (s.currentStep === 3) {
2365
+ $$renderer.push("<!--[2-->");
2366
+ $$renderer.push(`You're ready.`);
2367
+ } else $$renderer.push("<!--[-1-->");
2368
+ $$renderer.push(`<!--]--></b> <span class="wiz-greet-sub">`);
2369
+ if (s.currentStep === 1) {
2370
+ $$renderer.push("<!--[0-->");
2371
+ $$renderer.push(`Your setup guide`);
2372
+ } else if (s.currentStep === 2) {
2373
+ $$renderer.push("<!--[1-->");
2374
+ $$renderer.push(`A few optional extras`);
2375
+ } else if (s.currentStep === 3) {
2376
+ $$renderer.push("<!--[2-->");
2377
+ $$renderer.push(`Everything's in order`);
2378
+ } else $$renderer.push("<!--[-1-->");
2379
+ $$renderer.push(`<!--]--></span></div></div> <p class="wiz-guide-lede">`);
2380
+ if (s.currentStep === 1) {
2381
+ $$renderer.push("<!--[0-->");
2382
+ if (s.hasUsableAI) {
2383
+ $$renderer.push("<!--[0-->");
2384
+ $$renderer.push(`We found an AI account on this computer. Just hit <strong>Continue</strong> and your assistant will use it automatically.`);
2385
+ } else if (s.modelMode === "local" || s.ollamaEnabled || s.detectedHostProviders.length > 0) {
2386
+ $$renderer.push("<!--[1-->");
2387
+ $$renderer.push(`Running AI locally means your conversations never leave your machine. Perfect for privacy.`);
2388
+ } else {
2389
+ $$renderer.push("<!--[-1-->");
2390
+ $$renderer.push(`Sign in once and you're set. A browser tab will open for you to log in — come back here when you're done, it connects automatically.`);
2391
+ }
2392
+ $$renderer.push(`<!--]-->`);
2393
+ } else if (s.currentStep === 2) {
2394
+ $$renderer.push("<!--[1-->");
2395
+ $$renderer.push(`All of this is optional. Skip this whole step if you want — your assistant works fine without any of these. You can turn them on whenever you're ready from the dashboard.`);
2396
+ } else if (s.currentStep === 3) {
2397
+ $$renderer.push("<!--[2-->");
2398
+ $$renderer.push(`You're ready. Click <strong>Install OpenPalm</strong> and it'll start up in the background. The first launch pulls a few files — this takes a minute or two. When it's done, open your browser, sign in with that password, and you're good to go. Everything can be changed later from the dashboard.`);
2399
+ } else $$renderer.push("<!--[-1-->");
2400
+ $$renderer.push(`<!--]--></p> <div class="wiz-guide-bullets">`);
2401
+ if (s.currentStep === 1) {
2402
+ $$renderer.push("<!--[0-->");
2403
+ if (s.hasUsableAI) {
2404
+ $$renderer.push("<!--[0-->");
2405
+ $$renderer.push(`<div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M9 12l2 2 4-4"></path><circle cx="12" cy="12" r="9"></circle></svg></div> <div>Your existing connection is ready to use. No extra setup needed — just continue to the next step.</div></div> <div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M12 3l1.5 4.5H18l-3.75 2.7 1.5 4.5L12 12l-3.75 2.7 1.5-4.5L6 7.5h4.5z"></path></svg></div> <div>Want to use something different? Select another option from the list — you can switch any time from the dashboard.</div></div>`);
2406
+ } else {
2407
+ $$renderer.push("<!--[-1-->");
2408
+ $$renderer.push(`<div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><circle cx="12" cy="8" r="4"></circle><path d="M4 20c0-4 3.6-7 8-7s8 3 8 7"></path></svg></div> <div><strong>Cloud services</strong> like ChatGPT are fast and easy — you just sign in.</div></div> <div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><rect x="3" y="4" width="18" height="12" rx="2"></rect><path d="M8 20h8M12 16v4"></path></svg></div> <div><strong>Running locally</strong> keeps everything on your computer — private, free, no internet needed.</div></div>`);
2409
+ }
2410
+ $$renderer.push(`<!--]-->`);
2411
+ } else if (s.currentStep === 2) {
2412
+ $$renderer.push("<!--[1-->");
2413
+ $$renderer.push(`<div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><rect x="9" y="3" width="6" height="11" rx="3"></rect><path d="M5 11a7 7 0 0014 0M12 18v3"></path></svg></div> <div>Voice runs locally — free, no internet needed. A small model downloads the first time you use it.</div></div> <div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><circle cx="12" cy="12" r="9"></circle><path d="M12 8v4l3 3"></path></svg></div> <div>Setup help: <a href="https://discord.com/developers/docs/quick-start/getting-started" target="_blank" rel="noopener">How to set up a Discord bot →</a></div></div> <div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M3 12h18M3 6h18M3 18h18"></path></svg></div> <div><a href="https://api.slack.com/quickstart" target="_blank" rel="noopener">How to set up a Slack app →</a></div></div>`);
2414
+ } else if (s.currentStep === 3) {
2415
+ $$renderer.push("<!--[2-->");
2416
+ $$renderer.push(`<div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><rect x="3" y="11" width="18" height="10" rx="2"></rect><path d="M7 11V7a5 5 0 0110 0v4"></path></svg></div> <div>Your sign-in password is already saved on this computer — keep a copy somewhere safe just in case.</div></div> <div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M9 12l2 2 4-4"></path><circle cx="12" cy="12" r="9"></circle></svg></div> <div>Everything can be changed from the dashboard after install — providers, voice, portals, and more.</div></div>`);
2417
+ } else $$renderer.push("<!--[-1-->");
2418
+ $$renderer.push(`<!--]--></div> <div class="wiz-guide-privacy"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M8 1.5L2 4v4c0 3.3 2.5 5.8 6 6.5 3.5-.7 6-3.2 6-6.5V4L8 1.5z"></path></svg> <span>It's your own assistant, running right here on your computer.</span></div></aside></div>`);
2419
+ } else $$renderer.push("<!--[-1-->");
2420
+ $$renderer.push(`<!--]--></main>`);
2421
+ });
2422
+ }
2423
+
2424
+ export { _page as default };
2425
+ //# sourceMappingURL=_page.svelte-BXeh8wzh.js.map