@openpalm/ui 0.12.12 → 0.12.14-rc.1

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 (461) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/0.DtDICMHP.css +1 -0
  3. package/build/client/_app/immutable/assets/0.DtDICMHP.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.DtDICMHP.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/10.CGVnLoQr.css +1 -0
  6. package/build/client/_app/immutable/assets/10.CGVnLoQr.css.br +0 -0
  7. package/build/client/_app/immutable/assets/10.CGVnLoQr.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/4.BsRZqXxs.css +1 -0
  9. package/build/client/_app/immutable/assets/4.BsRZqXxs.css.br +0 -0
  10. package/build/client/_app/immutable/assets/4.BsRZqXxs.css.gz +0 -0
  11. package/build/client/_app/immutable/assets/5.B9kVBENv.css +1 -0
  12. package/build/client/_app/immutable/assets/5.B9kVBENv.css.br +0 -0
  13. package/build/client/_app/immutable/assets/5.B9kVBENv.css.gz +0 -0
  14. package/build/client/_app/immutable/assets/6.BXlLAfIE.css +1 -0
  15. package/build/client/_app/immutable/assets/6.BXlLAfIE.css.br +0 -0
  16. package/build/client/_app/immutable/assets/6.BXlLAfIE.css.gz +0 -0
  17. package/build/client/_app/immutable/assets/7.CoIJT74K.css +1 -0
  18. package/build/client/_app/immutable/assets/7.CoIJT74K.css.br +0 -0
  19. package/build/client/_app/immutable/assets/7.CoIJT74K.css.gz +0 -0
  20. package/build/client/_app/immutable/assets/8.CRX_TWKQ.css +1 -0
  21. package/build/client/_app/immutable/assets/8.CRX_TWKQ.css.br +0 -0
  22. package/build/client/_app/immutable/assets/8.CRX_TWKQ.css.gz +0 -0
  23. package/build/client/_app/immutable/assets/9.B1PKAJhx.css +1 -0
  24. package/build/client/_app/immutable/assets/9.B1PKAJhx.css.br +0 -0
  25. package/build/client/_app/immutable/assets/9.B1PKAJhx.css.gz +0 -0
  26. package/build/client/_app/immutable/assets/ChatMessage.CWTi1Kjo.css +1 -0
  27. package/build/client/_app/immutable/assets/ChatMessage.CWTi1Kjo.css.br +0 -0
  28. package/build/client/_app/immutable/assets/ChatMessage.CWTi1Kjo.css.gz +0 -0
  29. package/build/client/_app/immutable/assets/Navbar.DprsYQ5V.css +1 -0
  30. package/build/client/_app/immutable/assets/Navbar.DprsYQ5V.css.br +0 -0
  31. package/build/client/_app/immutable/assets/Navbar.DprsYQ5V.css.gz +0 -0
  32. package/build/client/_app/immutable/assets/SessionList.Bu2Ms4Fb.css +1 -0
  33. package/build/client/_app/immutable/assets/SessionList.Bu2Ms4Fb.css.br +4 -0
  34. package/build/client/_app/immutable/assets/SessionList.Bu2Ms4Fb.css.gz +0 -0
  35. package/build/client/_app/immutable/assets/Spinner.CCwieGti.css +1 -0
  36. package/build/client/_app/immutable/assets/Spinner.CCwieGti.css.br +0 -0
  37. package/build/client/_app/immutable/assets/Spinner.CCwieGti.css.gz +0 -0
  38. package/build/client/_app/immutable/chunks/B0nndsj2.js +1 -0
  39. package/build/client/_app/immutable/chunks/B0nndsj2.js.br +2 -0
  40. package/build/client/_app/immutable/chunks/B0nndsj2.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/C8DbTCsH.js +5 -0
  42. package/build/client/_app/immutable/chunks/C8DbTCsH.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/C8DbTCsH.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/CKjCR-mV.js +1 -0
  45. package/build/client/_app/immutable/chunks/CKjCR-mV.js.br +0 -0
  46. package/build/client/_app/immutable/chunks/CKjCR-mV.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/Cf2zVFU2.js +14 -0
  48. package/build/client/_app/immutable/chunks/Cf2zVFU2.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/Cf2zVFU2.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/{BUmnu6gG.js → Cqhjb6e3.js} +2 -2
  51. package/build/client/_app/immutable/chunks/Cqhjb6e3.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/Cqhjb6e3.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/H3uliuvu.js +1 -0
  54. package/build/client/_app/immutable/chunks/H3uliuvu.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/H3uliuvu.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/{auSI7Wdb.js → wZGKwx2i.js} +1 -1
  57. package/build/client/_app/immutable/chunks/wZGKwx2i.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/wZGKwx2i.js.gz +0 -0
  59. package/build/client/_app/immutable/entry/{app.DsQiW1Iw.js → app.DB4ePX1v.js} +2 -2
  60. package/build/client/_app/immutable/entry/app.DB4ePX1v.js.br +0 -0
  61. package/build/client/_app/immutable/entry/app.DB4ePX1v.js.gz +0 -0
  62. package/build/client/_app/immutable/entry/start.49FkL53I.js +1 -0
  63. package/build/client/_app/immutable/entry/start.49FkL53I.js.br +0 -0
  64. package/build/client/_app/immutable/entry/start.49FkL53I.js.gz +0 -0
  65. package/build/client/_app/immutable/nodes/{0.6LuHgRwe.js → 0.Bj2o7JLe.js} +1 -1
  66. package/build/client/_app/immutable/nodes/0.Bj2o7JLe.js.br +0 -0
  67. package/build/client/_app/immutable/nodes/0.Bj2o7JLe.js.gz +0 -0
  68. package/build/client/_app/immutable/nodes/{1.DnRffqy6.js → 1.krAx2-bw.js} +1 -1
  69. package/build/client/_app/immutable/nodes/1.krAx2-bw.js.br +2 -0
  70. package/build/client/_app/immutable/nodes/1.krAx2-bw.js.gz +0 -0
  71. package/build/client/_app/immutable/nodes/4.D6ae8dax.js +131 -0
  72. package/build/client/_app/immutable/nodes/4.D6ae8dax.js.br +0 -0
  73. package/build/client/_app/immutable/nodes/4.D6ae8dax.js.gz +0 -0
  74. package/build/client/_app/immutable/nodes/{5.CnQ0zkJ5.js → 5.sNp704_T.js} +1 -1
  75. package/build/client/_app/immutable/nodes/5.sNp704_T.js.br +0 -0
  76. package/build/client/_app/immutable/nodes/5.sNp704_T.js.gz +0 -0
  77. package/build/client/_app/immutable/nodes/6.BlMKRFTZ.js +1 -0
  78. package/build/client/_app/immutable/nodes/6.BlMKRFTZ.js.br +0 -0
  79. package/build/client/_app/immutable/nodes/6.BlMKRFTZ.js.gz +0 -0
  80. package/build/client/_app/immutable/nodes/7.LYSFmauM.js +1 -0
  81. package/build/client/_app/immutable/nodes/7.LYSFmauM.js.br +0 -0
  82. package/build/client/_app/immutable/nodes/7.LYSFmauM.js.gz +0 -0
  83. package/build/client/_app/immutable/nodes/8.DYb_WDEB.js +1 -0
  84. package/build/client/_app/immutable/nodes/8.DYb_WDEB.js.br +0 -0
  85. package/build/client/_app/immutable/nodes/8.DYb_WDEB.js.gz +0 -0
  86. package/build/client/_app/immutable/nodes/9.By6OD0XG.js +6 -0
  87. package/build/client/_app/immutable/nodes/9.By6OD0XG.js.br +0 -0
  88. package/build/client/_app/immutable/nodes/9.By6OD0XG.js.gz +0 -0
  89. package/build/client/_app/version.json +1 -1
  90. package/build/client/_app/version.json.br +1 -2
  91. package/build/client/_app/version.json.gz +0 -0
  92. package/build/server/chunks/{0-pjhEnsU9.js → 0-CpYMRQ5i.js} +4 -4
  93. package/build/server/chunks/{0-pjhEnsU9.js.map → 0-CpYMRQ5i.js.map} +1 -1
  94. package/build/server/chunks/1-DB4i2jhd.js +9 -0
  95. package/build/server/chunks/{1-s4KrrHyU.js.map → 1-DB4i2jhd.js.map} +1 -1
  96. package/build/server/chunks/{10-BsKSeayN.js → 10-j08j2VIZ.js} +7 -7
  97. package/build/server/chunks/10-j08j2VIZ.js.map +1 -0
  98. package/build/server/chunks/4-C4gVV-QY.js +9 -0
  99. package/build/server/chunks/4-C4gVV-QY.js.map +1 -0
  100. package/build/server/chunks/5-DsawgZBH.js +9 -0
  101. package/build/server/chunks/5-DsawgZBH.js.map +1 -0
  102. package/build/server/chunks/6-DUwwcldC.js +9 -0
  103. package/build/server/chunks/6-DUwwcldC.js.map +1 -0
  104. package/build/server/chunks/7-DHPMYUVs.js +9 -0
  105. package/build/server/chunks/7-DHPMYUVs.js.map +1 -0
  106. package/build/server/chunks/{8-CdAURkyt.js → 8-B2WmTTah.js} +4 -4
  107. package/build/server/chunks/{8-CdAURkyt.js.map → 8-B2WmTTah.js.map} +1 -1
  108. package/build/server/chunks/{9-R739z6lx.js → 9-BhL47FUJ.js} +3 -3
  109. package/build/server/chunks/9-BhL47FUJ.js.map +1 -0
  110. package/build/server/chunks/{ChatMessage-nFk7W8JO.js → ChatMessage-ClLIqnwB.js} +25 -81
  111. package/build/server/chunks/ChatMessage-ClLIqnwB.js.map +1 -0
  112. package/build/server/chunks/Navbar-K3AsG60E.js +341 -0
  113. package/build/server/chunks/Navbar-K3AsG60E.js.map +1 -0
  114. package/build/server/chunks/{Navbar-CqHAp9Qh.js → SessionList-CWKGPQSI.js} +5 -341
  115. package/build/server/chunks/SessionList-CWKGPQSI.js.map +1 -0
  116. package/build/server/chunks/{_layout.svelte-CFKjimed.js → _layout.svelte-oFWL-MU8.js} +2 -2
  117. package/build/server/chunks/{_layout.svelte-CFKjimed.js.map → _layout.svelte-oFWL-MU8.js.map} +1 -1
  118. package/build/server/chunks/_page.svelte-1xNXhM9d.js +40 -0
  119. package/build/server/chunks/_page.svelte-1xNXhM9d.js.map +1 -0
  120. package/build/server/chunks/{_page.svelte-z0vjeg3m.js → _page.svelte-BcYrJ6UQ.js} +8 -7
  121. package/build/server/chunks/_page.svelte-BcYrJ6UQ.js.map +1 -0
  122. package/build/server/chunks/_page.svelte-CigItPjU.js.map +1 -1
  123. package/build/server/chunks/{_page.svelte-CmqaniiZ.js → _page.svelte-DR9NaaO2.js} +354 -573
  124. package/build/server/chunks/_page.svelte-DR9NaaO2.js.map +1 -0
  125. package/build/server/chunks/_page.svelte-DhtWda2j.js +210 -0
  126. package/build/server/chunks/_page.svelte-DhtWda2j.js.map +1 -0
  127. package/build/server/chunks/{_page.svelte-Ehsb0X1T.js → _page.svelte-tb5kthho.js} +7 -6
  128. package/build/server/chunks/_page.svelte-tb5kthho.js.map +1 -0
  129. package/build/server/chunks/{_server.ts-D1kQ_j_2.js → _server.ts-8m9-a6Du.js} +5 -5
  130. package/build/server/chunks/{_server.ts-D1kQ_j_2.js.map → _server.ts-8m9-a6Du.js.map} +1 -1
  131. package/build/server/chunks/{_server.ts-aBL-bZNn.js → _server.ts-B4bNwc-X.js} +6 -6
  132. package/build/server/chunks/{_server.ts-aBL-bZNn.js.map → _server.ts-B4bNwc-X.js.map} +1 -1
  133. package/build/server/chunks/_server.ts-B5sjbudp.js +112 -0
  134. package/build/server/chunks/_server.ts-B5sjbudp.js.map +1 -0
  135. package/build/server/chunks/{_server.ts-CbHCQlkY.js → _server.ts-B9DDGhVm.js} +5 -5
  136. package/build/server/chunks/{_server.ts-CbHCQlkY.js.map → _server.ts-B9DDGhVm.js.map} +1 -1
  137. package/build/server/chunks/{_server.ts-DmGUn9K1.js → _server.ts-BHHw6XEU.js} +5 -5
  138. package/build/server/chunks/{_server.ts-DmGUn9K1.js.map → _server.ts-BHHw6XEU.js.map} +1 -1
  139. package/build/server/chunks/{_server.ts-6S_K8mGO.js → _server.ts-BHTNSYN2.js} +5 -5
  140. package/build/server/chunks/{_server.ts-6S_K8mGO.js.map → _server.ts-BHTNSYN2.js.map} +1 -1
  141. package/build/server/chunks/{_server.ts-5Yiwno6d.js → _server.ts-BNzWN9rK.js} +5 -5
  142. package/build/server/chunks/{_server.ts-5Yiwno6d.js.map → _server.ts-BNzWN9rK.js.map} +1 -1
  143. package/build/server/chunks/{_server.ts-Hi6ffAhl.js → _server.ts-BQb1b6_J.js} +6 -6
  144. package/build/server/chunks/{_server.ts-Hi6ffAhl.js.map → _server.ts-BQb1b6_J.js.map} +1 -1
  145. package/build/server/chunks/{_server.ts-DALbFCuy.js → _server.ts-BReADRGG.js} +2 -2
  146. package/build/server/chunks/{_server.ts-DALbFCuy.js.map → _server.ts-BReADRGG.js.map} +1 -1
  147. package/build/server/chunks/{_server.ts-BZ4T51Sp.js → _server.ts-BV3MjhcW.js} +5 -5
  148. package/build/server/chunks/{_server.ts-BZ4T51Sp.js.map → _server.ts-BV3MjhcW.js.map} +1 -1
  149. package/build/server/chunks/{_server.ts-Dz-fCCYT.js → _server.ts-Bh3U19_G.js} +5 -5
  150. package/build/server/chunks/{_server.ts-Dz-fCCYT.js.map → _server.ts-Bh3U19_G.js.map} +1 -1
  151. package/build/server/chunks/{_server.ts-CBYbeZKo.js → _server.ts-BikPHSq7.js} +5 -5
  152. package/build/server/chunks/{_server.ts-CBYbeZKo.js.map → _server.ts-BikPHSq7.js.map} +1 -1
  153. package/build/server/chunks/{_server.ts-B4U33TSS.js → _server.ts-Bm2jdhoU.js} +5 -5
  154. package/build/server/chunks/{_server.ts-B4U33TSS.js.map → _server.ts-Bm2jdhoU.js.map} +1 -1
  155. package/build/server/chunks/{_server.ts-DY7BHiev.js → _server.ts-BmSWIDHI.js} +5 -5
  156. package/build/server/chunks/{_server.ts-DY7BHiev.js.map → _server.ts-BmSWIDHI.js.map} +1 -1
  157. package/build/server/chunks/{_server.ts-DLbTplBn.js → _server.ts-Brn_xbH_.js} +5 -5
  158. package/build/server/chunks/{_server.ts-DLbTplBn.js.map → _server.ts-Brn_xbH_.js.map} +1 -1
  159. package/build/server/chunks/{_server.ts-77-UZ7q6.js → _server.ts-BupTjwGl.js} +6 -6
  160. package/build/server/chunks/{_server.ts-77-UZ7q6.js.map → _server.ts-BupTjwGl.js.map} +1 -1
  161. package/build/server/chunks/{_server.ts-Dy396KQ2.js → _server.ts-BwB-gqZS.js} +5 -5
  162. package/build/server/chunks/{_server.ts-Dy396KQ2.js.map → _server.ts-BwB-gqZS.js.map} +1 -1
  163. package/build/server/chunks/{_server.ts-DhKn_mC3.js → _server.ts-C6OPqMJ6.js} +5 -5
  164. package/build/server/chunks/{_server.ts-DhKn_mC3.js.map → _server.ts-C6OPqMJ6.js.map} +1 -1
  165. package/build/server/chunks/{_server.ts-Bfg_O-Jd.js → _server.ts-CA6JWfHi.js} +6 -6
  166. package/build/server/chunks/{_server.ts-Bfg_O-Jd.js.map → _server.ts-CA6JWfHi.js.map} +1 -1
  167. package/build/server/chunks/{_server.ts-ynDn6nif.js → _server.ts-CAik4Rk8.js} +5 -5
  168. package/build/server/chunks/{_server.ts-ynDn6nif.js.map → _server.ts-CAik4Rk8.js.map} +1 -1
  169. package/build/server/chunks/{_server.ts-DYy0jKI8.js → _server.ts-CEwIUyXG.js} +5 -5
  170. package/build/server/chunks/{_server.ts-DYy0jKI8.js.map → _server.ts-CEwIUyXG.js.map} +1 -1
  171. package/build/server/chunks/{_server.ts-BEt2_iG4.js → _server.ts-CGfrnHzF.js} +5 -5
  172. package/build/server/chunks/{_server.ts-BEt2_iG4.js.map → _server.ts-CGfrnHzF.js.map} +1 -1
  173. package/build/server/chunks/{_server.ts-Dgq8tX6T.js → _server.ts-CRQ2HFvy.js} +2 -2
  174. package/build/server/chunks/{_server.ts-Dgq8tX6T.js.map → _server.ts-CRQ2HFvy.js.map} +1 -1
  175. package/build/server/chunks/{_server.ts-CL74nB_X.js → _server.ts-CV77figq.js} +5 -5
  176. package/build/server/chunks/{_server.ts-CL74nB_X.js.map → _server.ts-CV77figq.js.map} +1 -1
  177. package/build/server/chunks/{_server.ts-mD4FWHNQ.js → _server.ts-CYJWdCjY.js} +5 -5
  178. package/build/server/chunks/{_server.ts-mD4FWHNQ.js.map → _server.ts-CYJWdCjY.js.map} +1 -1
  179. package/build/server/chunks/{_server.ts-C9KhKEr6.js → _server.ts-CZzCPiOv.js} +5 -5
  180. package/build/server/chunks/{_server.ts-C9KhKEr6.js.map → _server.ts-CZzCPiOv.js.map} +1 -1
  181. package/build/server/chunks/{_server.ts-DdIvxjIl.js → _server.ts-Cdk7JuyR.js} +5 -5
  182. package/build/server/chunks/{_server.ts-DdIvxjIl.js.map → _server.ts-Cdk7JuyR.js.map} +1 -1
  183. package/build/server/chunks/{_server.ts-CxHSDY6c.js → _server.ts-Cf9fgj1t.js} +5 -5
  184. package/build/server/chunks/{_server.ts-CxHSDY6c.js.map → _server.ts-Cf9fgj1t.js.map} +1 -1
  185. package/build/server/chunks/{_server.ts-CG17acEX.js → _server.ts-CfCZx3nr.js} +38 -17
  186. package/build/server/chunks/_server.ts-CfCZx3nr.js.map +1 -0
  187. package/build/server/chunks/{_server.ts-Byjf_Yk3.js → _server.ts-ChNpsWsn.js} +4 -4
  188. package/build/server/chunks/{_server.ts-Byjf_Yk3.js.map → _server.ts-ChNpsWsn.js.map} +1 -1
  189. package/build/server/chunks/{_server.ts-CRJ6wZDZ.js → _server.ts-Chp1D1NJ.js} +6 -6
  190. package/build/server/chunks/{_server.ts-CRJ6wZDZ.js.map → _server.ts-Chp1D1NJ.js.map} +1 -1
  191. package/build/server/chunks/{_server.ts-D1j4Npph.js → _server.ts-Ci1hQ0Lw.js} +7 -7
  192. package/build/server/chunks/{_server.ts-D1j4Npph.js.map → _server.ts-Ci1hQ0Lw.js.map} +1 -1
  193. package/build/server/chunks/{_server.ts-CZJM-wYv.js → _server.ts-Coh90s05.js} +5 -5
  194. package/build/server/chunks/{_server.ts-CZJM-wYv.js.map → _server.ts-Coh90s05.js.map} +1 -1
  195. package/build/server/chunks/{_server.ts-B4NR0V_b.js → _server.ts-Csik9Itg.js} +8 -8
  196. package/build/server/chunks/{_server.ts-B4NR0V_b.js.map → _server.ts-Csik9Itg.js.map} +1 -1
  197. package/build/server/chunks/{_server.ts-BSx9Bn4-.js → _server.ts-CwPniqM1.js} +5 -5
  198. package/build/server/chunks/{_server.ts-BSx9Bn4-.js.map → _server.ts-CwPniqM1.js.map} +1 -1
  199. package/build/server/chunks/{_server.ts-Bfp5h_w-.js → _server.ts-Cx9mT4VH.js} +5 -5
  200. package/build/server/chunks/{_server.ts-Bfp5h_w-.js.map → _server.ts-Cx9mT4VH.js.map} +1 -1
  201. package/build/server/chunks/{_server.ts-DjDeeV6L.js → _server.ts-CyS5S3cz.js} +7 -7
  202. package/build/server/chunks/{_server.ts-DjDeeV6L.js.map → _server.ts-CyS5S3cz.js.map} +1 -1
  203. package/build/server/chunks/{_server.ts-BOhzCsMs.js → _server.ts-CydNfw4_.js} +6 -6
  204. package/build/server/chunks/{_server.ts-BOhzCsMs.js.map → _server.ts-CydNfw4_.js.map} +1 -1
  205. package/build/server/chunks/{_server.ts-B6d5y3_a.js → _server.ts-D-Uq5EMc.js} +5 -5
  206. package/build/server/chunks/_server.ts-D-Uq5EMc.js.map +1 -0
  207. package/build/server/chunks/{_server.ts-CsWOQwa4.js → _server.ts-D5-6rgyM.js} +11 -6
  208. package/build/server/chunks/_server.ts-D5-6rgyM.js.map +1 -0
  209. package/build/server/chunks/{_server.ts-CWYMIWeQ.js → _server.ts-D55bp3Nl.js} +5 -5
  210. package/build/server/chunks/{_server.ts-CWYMIWeQ.js.map → _server.ts-D55bp3Nl.js.map} +1 -1
  211. package/build/server/chunks/{_server.ts-DfUwiIFc.js → _server.ts-D5YBOr-I.js} +5 -5
  212. package/build/server/chunks/{_server.ts-DfUwiIFc.js.map → _server.ts-D5YBOr-I.js.map} +1 -1
  213. package/build/server/chunks/{_server.ts-Dx9IVMZK.js → _server.ts-D8S0Gcdh.js} +5 -5
  214. package/build/server/chunks/{_server.ts-Dx9IVMZK.js.map → _server.ts-D8S0Gcdh.js.map} +1 -1
  215. package/build/server/chunks/{_server.ts-DCezeO9D.js → _server.ts-DBbAbCGV.js} +7 -7
  216. package/build/server/chunks/{_server.ts-DCezeO9D.js.map → _server.ts-DBbAbCGV.js.map} +1 -1
  217. package/build/server/chunks/{_server.ts-C2DDlJQE.js → _server.ts-DCnRFcD0.js} +6 -6
  218. package/build/server/chunks/{_server.ts-C2DDlJQE.js.map → _server.ts-DCnRFcD0.js.map} +1 -1
  219. package/build/server/chunks/{_server.ts-BT6D3gEn.js → _server.ts-DENNVt9M.js} +5 -5
  220. package/build/server/chunks/{_server.ts-BT6D3gEn.js.map → _server.ts-DENNVt9M.js.map} +1 -1
  221. package/build/server/chunks/{_server.ts-DJmx3la_.js → _server.ts-DFREWo8G.js} +5 -5
  222. package/build/server/chunks/{_server.ts-DJmx3la_.js.map → _server.ts-DFREWo8G.js.map} +1 -1
  223. package/build/server/chunks/{_server.ts-CrR1vz-U.js → _server.ts-DH3OWMVH.js} +5 -5
  224. package/build/server/chunks/{_server.ts-CrR1vz-U.js.map → _server.ts-DH3OWMVH.js.map} +1 -1
  225. package/build/server/chunks/{_server.ts-B2bPdmtl.js → _server.ts-DIHrw0cC.js} +5 -5
  226. package/build/server/chunks/{_server.ts-B2bPdmtl.js.map → _server.ts-DIHrw0cC.js.map} +1 -1
  227. package/build/server/chunks/{_server.ts-EahvV4Vt.js → _server.ts-DNqPBo2x.js} +5 -5
  228. package/build/server/chunks/{_server.ts-EahvV4Vt.js.map → _server.ts-DNqPBo2x.js.map} +1 -1
  229. package/build/server/chunks/{_server.ts-7K5ENa0R.js → _server.ts-DNtz1QNP.js} +6 -6
  230. package/build/server/chunks/{_server.ts-7K5ENa0R.js.map → _server.ts-DNtz1QNP.js.map} +1 -1
  231. package/build/server/chunks/{_server.ts-fH2ffIS9.js → _server.ts-DOY-rvQD.js} +5 -5
  232. package/build/server/chunks/{_server.ts-fH2ffIS9.js.map → _server.ts-DOY-rvQD.js.map} +1 -1
  233. package/build/server/chunks/{_server.ts-CSrUQMls.js → _server.ts-DUtFnW4R.js} +5 -5
  234. package/build/server/chunks/{_server.ts-CSrUQMls.js.map → _server.ts-DUtFnW4R.js.map} +1 -1
  235. package/build/server/chunks/{_server.ts-WPiWUEa6.js → _server.ts-DYWQOfJg.js} +5 -5
  236. package/build/server/chunks/{_server.ts-WPiWUEa6.js.map → _server.ts-DYWQOfJg.js.map} +1 -1
  237. package/build/server/chunks/_server.ts-DbNkU76w.js +47 -0
  238. package/build/server/chunks/_server.ts-DbNkU76w.js.map +1 -0
  239. package/build/server/chunks/{_server.ts-B-p2EWpY.js → _server.ts-Dcjeu0RD.js} +5 -5
  240. package/build/server/chunks/{_server.ts-B-p2EWpY.js.map → _server.ts-Dcjeu0RD.js.map} +1 -1
  241. package/build/server/chunks/{_server.ts-BvIDZNQ4.js → _server.ts-Dco1E-Da.js} +5 -5
  242. package/build/server/chunks/{_server.ts-BvIDZNQ4.js.map → _server.ts-Dco1E-Da.js.map} +1 -1
  243. package/build/server/chunks/{_server.ts-CGPLKrl6.js → _server.ts-Dgbf4dFy.js} +5 -5
  244. package/build/server/chunks/{_server.ts-CGPLKrl6.js.map → _server.ts-Dgbf4dFy.js.map} +1 -1
  245. package/build/server/chunks/{_server.ts-DR8rM7PH.js → _server.ts-DjzmTCJe.js} +5 -5
  246. package/build/server/chunks/{_server.ts-DR8rM7PH.js.map → _server.ts-DjzmTCJe.js.map} +1 -1
  247. package/build/server/chunks/{_server.ts-BE4_j8Dq.js → _server.ts-Do00EgQ0.js} +5 -5
  248. package/build/server/chunks/{_server.ts-BE4_j8Dq.js.map → _server.ts-Do00EgQ0.js.map} +1 -1
  249. package/build/server/chunks/{_server.ts-BNScUI9e.js → _server.ts-DoFf_top.js} +2 -2
  250. package/build/server/chunks/{_server.ts-BNScUI9e.js.map → _server.ts-DoFf_top.js.map} +1 -1
  251. package/build/server/chunks/{_server.ts-CSSXRijy.js → _server.ts-DtIh7JmA.js} +5 -5
  252. package/build/server/chunks/{_server.ts-CSSXRijy.js.map → _server.ts-DtIh7JmA.js.map} +1 -1
  253. package/build/server/chunks/{_server.ts-B-uMrGCn.js → _server.ts-DuvgTAhi.js} +5 -5
  254. package/build/server/chunks/{_server.ts-B-uMrGCn.js.map → _server.ts-DuvgTAhi.js.map} +1 -1
  255. package/build/server/chunks/{_server.ts-C9zraUpK.js → _server.ts-DwSmGFWo.js} +5 -5
  256. package/build/server/chunks/{_server.ts-C9zraUpK.js.map → _server.ts-DwSmGFWo.js.map} +1 -1
  257. package/build/server/chunks/{_server.ts-BlLOBvFJ.js → _server.ts-Dy4awv21.js} +2 -2
  258. package/build/server/chunks/{_server.ts-BlLOBvFJ.js.map → _server.ts-Dy4awv21.js.map} +1 -1
  259. package/build/server/chunks/{_server.ts-Bz9vYKcZ.js → _server.ts-DzBYcUNP.js} +5 -5
  260. package/build/server/chunks/{_server.ts-Bz9vYKcZ.js.map → _server.ts-DzBYcUNP.js.map} +1 -1
  261. package/build/server/chunks/{_server.ts-BYGu7b1P.js → _server.ts-DzLrbljj.js} +5 -5
  262. package/build/server/chunks/{_server.ts-BYGu7b1P.js.map → _server.ts-DzLrbljj.js.map} +1 -1
  263. package/build/server/chunks/{_server.ts-DyxP5SI8.js → _server.ts-E0LKVKqn.js} +5 -5
  264. package/build/server/chunks/{_server.ts-DyxP5SI8.js.map → _server.ts-E0LKVKqn.js.map} +1 -1
  265. package/build/server/chunks/{_server.ts-B127b-gL.js → _server.ts-KFIVweQ1.js} +6 -6
  266. package/build/server/chunks/{_server.ts-B127b-gL.js.map → _server.ts-KFIVweQ1.js.map} +1 -1
  267. package/build/server/chunks/{_server.ts-BybDdchW.js → _server.ts-KsWTwPeQ.js} +5 -5
  268. package/build/server/chunks/{_server.ts-BybDdchW.js.map → _server.ts-KsWTwPeQ.js.map} +1 -1
  269. package/build/server/chunks/{_server.ts-CM8mCJr2.js → _server.ts-QPhNhWsE.js} +5 -5
  270. package/build/server/chunks/{_server.ts-CM8mCJr2.js.map → _server.ts-QPhNhWsE.js.map} +1 -1
  271. package/build/server/chunks/{_server.ts-B1CU5CUW.js → _server.ts-RnSrIgoc.js} +7 -7
  272. package/build/server/chunks/{_server.ts-B1CU5CUW.js.map → _server.ts-RnSrIgoc.js.map} +1 -1
  273. package/build/server/chunks/{_server.ts-BkFpq5kl.js → _server.ts-S-AzjmxN.js} +6 -6
  274. package/build/server/chunks/{_server.ts-BkFpq5kl.js.map → _server.ts-S-AzjmxN.js.map} +1 -1
  275. package/build/server/chunks/_server.ts-X10vIa8R.js +64 -0
  276. package/build/server/chunks/_server.ts-X10vIa8R.js.map +1 -0
  277. package/build/server/chunks/{_server.ts-CzvJLf02.js → _server.ts-XY5ZysCx.js} +2 -2
  278. package/build/server/chunks/{_server.ts-CzvJLf02.js.map → _server.ts-XY5ZysCx.js.map} +1 -1
  279. package/build/server/chunks/{_server.ts-Be_Ms27u.js → _server.ts-Xl36hhJh.js} +6 -6
  280. package/build/server/chunks/{_server.ts-Be_Ms27u.js.map → _server.ts-Xl36hhJh.js.map} +1 -1
  281. package/build/server/chunks/{_server.ts-4bwCw9CG.js → _server.ts-Z395KDPV.js} +6 -6
  282. package/build/server/chunks/{_server.ts-4bwCw9CG.js.map → _server.ts-Z395KDPV.js.map} +1 -1
  283. package/build/server/chunks/{_server.ts-DnlADeFs.js → _server.ts-huFJtCZs.js} +6 -6
  284. package/build/server/chunks/{_server.ts-DnlADeFs.js.map → _server.ts-huFJtCZs.js.map} +1 -1
  285. package/build/server/chunks/{_server.ts-qAVlgCgS.js → _server.ts-i0tcUGUm.js} +5 -5
  286. package/build/server/chunks/{_server.ts-qAVlgCgS.js.map → _server.ts-i0tcUGUm.js.map} +1 -1
  287. package/build/server/chunks/{_server.ts-B-kfO_bH.js → _server.ts-jFQ6Wf5I.js} +7 -7
  288. package/build/server/chunks/{_server.ts-B-kfO_bH.js.map → _server.ts-jFQ6Wf5I.js.map} +1 -1
  289. package/build/server/chunks/{_server.ts-Cqxa9z0t.js → _server.ts-lie-h2LF.js} +4 -4
  290. package/build/server/chunks/{_server.ts-Cqxa9z0t.js.map → _server.ts-lie-h2LF.js.map} +1 -1
  291. package/build/server/chunks/{_server.ts-DTbiXJEw.js → _server.ts-nYNqmJ4M.js} +5 -5
  292. package/build/server/chunks/{_server.ts-DTbiXJEw.js.map → _server.ts-nYNqmJ4M.js.map} +1 -1
  293. package/build/server/chunks/{_server.ts-CefiPTY7.js → _server.ts-q0n79-Wn.js} +7 -7
  294. package/build/server/chunks/{_server.ts-CefiPTY7.js.map → _server.ts-q0n79-Wn.js.map} +1 -1
  295. package/build/server/chunks/{_server.ts-DugFVaf4.js → _server.ts-rnssX7fi.js} +5 -5
  296. package/build/server/chunks/{_server.ts-DugFVaf4.js.map → _server.ts-rnssX7fi.js.map} +1 -1
  297. package/build/server/chunks/{_server.ts-BNE9aLNq.js → _server.ts-tdQgM_h4.js} +5 -5
  298. package/build/server/chunks/{_server.ts-BNE9aLNq.js.map → _server.ts-tdQgM_h4.js.map} +1 -1
  299. package/build/server/chunks/{_server.ts-BjT0bTpr.js → _server.ts-xGkSNfpX.js} +5 -5
  300. package/build/server/chunks/_server.ts-xGkSNfpX.js.map +1 -0
  301. package/build/server/chunks/{addon-helpers-E9toOeAN.js → addon-helpers-DQ4Sw0eL.js} +3 -3
  302. package/build/server/chunks/{addon-helpers-E9toOeAN.js.map → addon-helpers-DQ4Sw0eL.js.map} +1 -1
  303. package/build/server/chunks/{akm-Iqapnq_M.js → akm-CzkR6h7k.js} +2 -2
  304. package/build/server/chunks/{akm-Iqapnq_M.js.map → akm-CzkR6h7k.js.map} +1 -1
  305. package/build/server/chunks/{catalog-kcWyiPep.js → catalog-CqhyP3nH.js} +5 -5
  306. package/build/server/chunks/{catalog-kcWyiPep.js.map → catalog-CqhyP3nH.js.map} +1 -1
  307. package/build/server/chunks/{client-COlNBMpO.js → client-DnRnUa51.js} +2 -2
  308. package/build/server/chunks/{client-COlNBMpO.js.map → client-DnRnUa51.js.map} +1 -1
  309. package/build/server/chunks/{config-osYhwi1d.js → config-sOJVdbXV.js} +2 -2
  310. package/build/server/chunks/{config-osYhwi1d.js.map → config-sOJVdbXV.js.map} +1 -1
  311. package/build/server/chunks/{docker-Cwz7g9Fp.js → docker-Kvd81Syx.js} +2 -2
  312. package/build/server/chunks/{docker-Cwz7g9Fp.js.map → docker-Kvd81Syx.js.map} +1 -1
  313. package/build/server/chunks/{endpoints-C2sfguhT.js → endpoints-jOpkf70B.js} +2 -2
  314. package/build/server/chunks/{endpoints-C2sfguhT.js.map → endpoints-jOpkf70B.js.map} +1 -1
  315. package/build/server/chunks/{environment-Dgk7Zpzu.js → environment-C4mqyQco.js} +2 -2
  316. package/build/server/chunks/{environment-Dgk7Zpzu.js.map → environment-C4mqyQco.js.map} +1 -1
  317. package/build/server/chunks/{error.svelte-B3E2hBuW.js → error.svelte-BsAseuKj.js} +4 -4
  318. package/build/server/chunks/{error.svelte-B3E2hBuW.js.map → error.svelte-BsAseuKj.js.map} +1 -1
  319. package/build/server/chunks/{helpers-DL0rlFJr.js → helpers-CdFbX3Gv.js} +3 -3
  320. package/build/server/chunks/{helpers-DL0rlFJr.js.map → helpers-CdFbX3Gv.js.map} +1 -1
  321. package/build/server/chunks/{hooks.server-BVNQXwcy.js → hooks.server-BxMMvOvG.js} +7 -7
  322. package/build/server/chunks/hooks.server-BxMMvOvG.js.map +1 -0
  323. package/build/server/chunks/{http-D2p_SepQ.js → http-CHHnc6an.js} +2 -2
  324. package/build/server/chunks/{http-D2p_SepQ.js.map → http-CHHnc6an.js.map} +1 -1
  325. package/build/server/chunks/{internal-D1Iu5LHn.js → internal-DtzAdxjF.js} +3 -3
  326. package/build/server/chunks/{internal-D1Iu5LHn.js.map → internal-DtzAdxjF.js.map} +1 -1
  327. package/build/server/chunks/{migration-status-BV4S8Q7v.js → migration-status-CElXKl1J.js} +2 -2
  328. package/build/server/chunks/{migration-status-BV4S8Q7v.js.map → migration-status-CElXKl1J.js.map} +1 -1
  329. package/build/server/chunks/{session-cookie-DTiNx7Rk.js → session-cookie-CpL6ZNVl.js} +2 -2
  330. package/build/server/chunks/{session-cookie-DTiNx7Rk.js.map → session-cookie-CpL6ZNVl.js.map} +1 -1
  331. package/build/server/chunks/{setup-deploy-CyDh3qyw.js → setup-deploy-n5x1ZBl3.js} +2 -2
  332. package/build/server/chunks/{setup-deploy-CyDh3qyw.js.map → setup-deploy-n5x1ZBl3.js.map} +1 -1
  333. package/build/server/chunks/{src-BGtbBgcg.js → src-DUEmEQ8J.js} +245 -15
  334. package/build/server/chunks/src-DUEmEQ8J.js.map +1 -0
  335. package/build/server/chunks/{state-yBCk2V-E.js → state-DTvf_DJR.js} +2 -2
  336. package/build/server/chunks/{state-yBCk2V-E.js.map → state-DTvf_DJR.js.map} +1 -1
  337. package/build/server/chunks/{state2-BvcX1tGj.js → state2-DZ2pu1L6.js} +2 -2
  338. package/build/server/chunks/{state2-BvcX1tGj.js.map → state2-DZ2pu1L6.js.map} +1 -1
  339. package/build/server/chunks/{theme-state.svelte-8qSluhfu.js → theme-state.svelte-BsNoJAjT.js} +38 -22
  340. package/build/server/chunks/theme-state.svelte-BsNoJAjT.js.map +1 -0
  341. package/build/server/chunks/version-cache-CSnmLqxQ.js +54 -0
  342. package/build/server/chunks/version-cache-CSnmLqxQ.js.map +1 -0
  343. package/build/server/index.js +2 -2
  344. package/build/server/manifest.js +102 -95
  345. package/build/server/manifest.js.map +1 -1
  346. package/package.json +2 -2
  347. package/build/client/_app/immutable/assets/0.03HRqLzj.css +0 -1
  348. package/build/client/_app/immutable/assets/0.03HRqLzj.css.br +0 -0
  349. package/build/client/_app/immutable/assets/0.03HRqLzj.css.gz +0 -0
  350. package/build/client/_app/immutable/assets/10.C4zN9dGC.css +0 -1
  351. package/build/client/_app/immutable/assets/10.C4zN9dGC.css.br +0 -0
  352. package/build/client/_app/immutable/assets/10.C4zN9dGC.css.gz +0 -0
  353. package/build/client/_app/immutable/assets/4.C4HBo3yQ.css +0 -1
  354. package/build/client/_app/immutable/assets/4.C4HBo3yQ.css.br +0 -0
  355. package/build/client/_app/immutable/assets/4.C4HBo3yQ.css.gz +0 -0
  356. package/build/client/_app/immutable/assets/5.Cj0Mk9Gn.css +0 -1
  357. package/build/client/_app/immutable/assets/5.Cj0Mk9Gn.css.br +0 -0
  358. package/build/client/_app/immutable/assets/5.Cj0Mk9Gn.css.gz +0 -0
  359. package/build/client/_app/immutable/assets/6.C9M6ETTz.css +0 -1
  360. package/build/client/_app/immutable/assets/6.C9M6ETTz.css.br +0 -2
  361. package/build/client/_app/immutable/assets/6.C9M6ETTz.css.gz +0 -0
  362. package/build/client/_app/immutable/assets/7.CIARtob0.css +0 -1
  363. package/build/client/_app/immutable/assets/7.CIARtob0.css.br +0 -0
  364. package/build/client/_app/immutable/assets/7.CIARtob0.css.gz +0 -0
  365. package/build/client/_app/immutable/assets/8.CY2RMSue.css +0 -1
  366. package/build/client/_app/immutable/assets/8.CY2RMSue.css.br +0 -4
  367. package/build/client/_app/immutable/assets/8.CY2RMSue.css.gz +0 -0
  368. package/build/client/_app/immutable/assets/9.CkiNtsHc.css +0 -1
  369. package/build/client/_app/immutable/assets/9.CkiNtsHc.css.br +0 -0
  370. package/build/client/_app/immutable/assets/9.CkiNtsHc.css.gz +0 -0
  371. package/build/client/_app/immutable/assets/ChatMessage.Dvo0uBBZ.css +0 -1
  372. package/build/client/_app/immutable/assets/ChatMessage.Dvo0uBBZ.css.br +0 -0
  373. package/build/client/_app/immutable/assets/ChatMessage.Dvo0uBBZ.css.gz +0 -0
  374. package/build/client/_app/immutable/assets/Navbar.8KmI3SWX.css +0 -1
  375. package/build/client/_app/immutable/assets/Navbar.8KmI3SWX.css.br +0 -0
  376. package/build/client/_app/immutable/assets/Navbar.8KmI3SWX.css.gz +0 -0
  377. package/build/client/_app/immutable/assets/Spinner.BtzHSsat.css +0 -1
  378. package/build/client/_app/immutable/assets/Spinner.BtzHSsat.css.br +0 -2
  379. package/build/client/_app/immutable/assets/Spinner.BtzHSsat.css.gz +0 -0
  380. package/build/client/_app/immutable/chunks/BUmnu6gG.js.br +0 -0
  381. package/build/client/_app/immutable/chunks/BUmnu6gG.js.gz +0 -0
  382. package/build/client/_app/immutable/chunks/Buy0D9D-.js +0 -1
  383. package/build/client/_app/immutable/chunks/Buy0D9D-.js.br +0 -0
  384. package/build/client/_app/immutable/chunks/Buy0D9D-.js.gz +0 -0
  385. package/build/client/_app/immutable/chunks/CTyb4jX-.js +0 -5
  386. package/build/client/_app/immutable/chunks/CTyb4jX-.js.br +0 -0
  387. package/build/client/_app/immutable/chunks/CTyb4jX-.js.gz +0 -0
  388. package/build/client/_app/immutable/chunks/CgKtEGfl.js +0 -1
  389. package/build/client/_app/immutable/chunks/CgKtEGfl.js.br +0 -0
  390. package/build/client/_app/immutable/chunks/CgKtEGfl.js.gz +0 -0
  391. package/build/client/_app/immutable/chunks/CzrNiLaD.js +0 -1
  392. package/build/client/_app/immutable/chunks/CzrNiLaD.js.br +0 -2
  393. package/build/client/_app/immutable/chunks/CzrNiLaD.js.gz +0 -0
  394. package/build/client/_app/immutable/chunks/Ej9QUT4P.js +0 -16
  395. package/build/client/_app/immutable/chunks/Ej9QUT4P.js.br +0 -0
  396. package/build/client/_app/immutable/chunks/Ej9QUT4P.js.gz +0 -0
  397. package/build/client/_app/immutable/chunks/auSI7Wdb.js.br +0 -0
  398. package/build/client/_app/immutable/chunks/auSI7Wdb.js.gz +0 -0
  399. package/build/client/_app/immutable/entry/app.DsQiW1Iw.js.br +0 -0
  400. package/build/client/_app/immutable/entry/app.DsQiW1Iw.js.gz +0 -0
  401. package/build/client/_app/immutable/entry/start.DcWR1XKk.js +0 -1
  402. package/build/client/_app/immutable/entry/start.DcWR1XKk.js.br +0 -1
  403. package/build/client/_app/immutable/entry/start.DcWR1XKk.js.gz +0 -0
  404. package/build/client/_app/immutable/nodes/0.6LuHgRwe.js.br +0 -0
  405. package/build/client/_app/immutable/nodes/0.6LuHgRwe.js.gz +0 -0
  406. package/build/client/_app/immutable/nodes/1.DnRffqy6.js.br +0 -0
  407. package/build/client/_app/immutable/nodes/1.DnRffqy6.js.gz +0 -0
  408. package/build/client/_app/immutable/nodes/4.X-buCxyA.js +0 -133
  409. package/build/client/_app/immutable/nodes/4.X-buCxyA.js.br +0 -0
  410. package/build/client/_app/immutable/nodes/4.X-buCxyA.js.gz +0 -0
  411. package/build/client/_app/immutable/nodes/5.CnQ0zkJ5.js.br +0 -0
  412. package/build/client/_app/immutable/nodes/5.CnQ0zkJ5.js.gz +0 -0
  413. package/build/client/_app/immutable/nodes/6.BaOjUVsQ.js +0 -1
  414. package/build/client/_app/immutable/nodes/6.BaOjUVsQ.js.br +0 -0
  415. package/build/client/_app/immutable/nodes/6.BaOjUVsQ.js.gz +0 -0
  416. package/build/client/_app/immutable/nodes/7.Dy-QUnwV.js +0 -2
  417. package/build/client/_app/immutable/nodes/7.Dy-QUnwV.js.br +0 -0
  418. package/build/client/_app/immutable/nodes/7.Dy-QUnwV.js.gz +0 -0
  419. package/build/client/_app/immutable/nodes/8.B3kiJaWi.js +0 -1
  420. package/build/client/_app/immutable/nodes/8.B3kiJaWi.js.br +0 -0
  421. package/build/client/_app/immutable/nodes/8.B3kiJaWi.js.gz +0 -0
  422. package/build/client/_app/immutable/nodes/9.OQRL7WC0.js +0 -6
  423. package/build/client/_app/immutable/nodes/9.OQRL7WC0.js.br +0 -0
  424. package/build/client/_app/immutable/nodes/9.OQRL7WC0.js.gz +0 -0
  425. package/build/server/chunks/1-s4KrrHyU.js +0 -9
  426. package/build/server/chunks/10-BsKSeayN.js.map +0 -1
  427. package/build/server/chunks/4-DXcZ-YeU.js +0 -9
  428. package/build/server/chunks/4-DXcZ-YeU.js.map +0 -1
  429. package/build/server/chunks/5-CxWHKz_5.js +0 -9
  430. package/build/server/chunks/5-CxWHKz_5.js.map +0 -1
  431. package/build/server/chunks/6-C2va3-p8.js +0 -9
  432. package/build/server/chunks/6-C2va3-p8.js.map +0 -1
  433. package/build/server/chunks/7-ZC2-wAze.js +0 -9
  434. package/build/server/chunks/7-ZC2-wAze.js.map +0 -1
  435. package/build/server/chunks/9-R739z6lx.js.map +0 -1
  436. package/build/server/chunks/ChatMessage-nFk7W8JO.js.map +0 -1
  437. package/build/server/chunks/Navbar-CqHAp9Qh.js.map +0 -1
  438. package/build/server/chunks/_page.svelte-CQ8Ang1b.js +0 -257
  439. package/build/server/chunks/_page.svelte-CQ8Ang1b.js.map +0 -1
  440. package/build/server/chunks/_page.svelte-CmB5uGqK.js +0 -37
  441. package/build/server/chunks/_page.svelte-CmB5uGqK.js.map +0 -1
  442. package/build/server/chunks/_page.svelte-CmqaniiZ.js.map +0 -1
  443. package/build/server/chunks/_page.svelte-Ehsb0X1T.js.map +0 -1
  444. package/build/server/chunks/_page.svelte-z0vjeg3m.js.map +0 -1
  445. package/build/server/chunks/_server.ts-B6d5y3_a.js.map +0 -1
  446. package/build/server/chunks/_server.ts-BbzNUN06.js +0 -79
  447. package/build/server/chunks/_server.ts-BbzNUN06.js.map +0 -1
  448. package/build/server/chunks/_server.ts-BjT0bTpr.js.map +0 -1
  449. package/build/server/chunks/_server.ts-CDOOK4kq.js +0 -85
  450. package/build/server/chunks/_server.ts-CDOOK4kq.js.map +0 -1
  451. package/build/server/chunks/_server.ts-CG17acEX.js.map +0 -1
  452. package/build/server/chunks/_server.ts-CsWOQwa4.js.map +0 -1
  453. package/build/server/chunks/hooks.server-BVNQXwcy.js.map +0 -1
  454. package/build/server/chunks/src-BGtbBgcg.js.map +0 -1
  455. package/build/server/chunks/theme-state.svelte-8qSluhfu.js.map +0 -1
  456. /package/build/client/_app/immutable/chunks/{Oz5B_hgH.js → 9fMyFnaz.js} +0 -0
  457. /package/build/client/_app/immutable/chunks/{Oz5B_hgH.js.br → 9fMyFnaz.js.br} +0 -0
  458. /package/build/client/_app/immutable/chunks/{Oz5B_hgH.js.gz → 9fMyFnaz.js.gz} +0 -0
  459. /package/build/client/_app/immutable/nodes/{10.BzTAm6YU.js → 10.D8Hw0nH7.js} +0 -0
  460. /package/build/client/_app/immutable/nodes/{10.BzTAm6YU.js.br → 10.D8Hw0nH7.js.br} +0 -0
  461. /package/build/client/_app/immutable/nodes/{10.BzTAm6YU.js.gz → 10.D8Hw0nH7.js.gz} +0 -0
@@ -1,203 +1,17 @@
1
- import { v as version } from './environment-Dgk7Zpzu.js';
2
- import { E as head, r as escape_html, o as derived, p as ensure_array_like, e as attr_class, d as attr, a8 as stringify, F as html, g as bind_props } from './dev-B6xUe35c.js';
3
- import { o as onDestroy, g as goto } from './client-COlNBMpO.js';
1
+ import { v as version } from './environment-C4mqyQco.js';
2
+ import { E as head, o as derived, p as ensure_array_like, e as attr_class, d as attr, r as escape_html, a8 as stringify, F as html, g as bind_props } from './dev-B6xUe35c.js';
3
+ import { o as onDestroy, g as goto } from './client-DnRnUa51.js';
4
4
  import { r as require_dist } from './dist-DOFcG0Zp.js';
5
- import { g as fetchContainers, f as fetchAutomations, B as voiceState, b as buildHeaders, j as fetchServiceLogs, a as detectAkmEmbedding, y as testAkmEmbedding, n as notifications, p as previewMigration, A as upgradeStack, e as downloadUiVersion, u as setStackVersion, D as DowngradeConfirmationRequiredError, i as fetchReleases, k as fetchUiVersions } from './theme-state.svelte-8qSluhfu.js';
6
- import { N as Navbar, f as formatTime, D as Drawer, e as endpointsService } from './Navbar-CqHAp9Qh.js';
5
+ import { g as fetchContainers, f as fetchAutomations, C as voiceState, b as buildHeaders, j as fetchServiceLogs, a as detectAkmEmbedding, z as testAkmEmbedding, p as notifications, B as upgradeStack, e as downloadUiVersion, v as setUnitImageTag, D as DowngradeConfirmationRequiredError, l as fetchVersions, n as invalidateVersionCache, i as fetchReleases, k as fetchUiVersions } from './theme-state.svelte-BsNoJAjT.js';
6
+ import { g as formatTime, f as endpointsService } from './SessionList-CWKGPQSI.js';
7
+ import { N as Navbar, D as Drawer } from './Navbar-K3AsG60E.js';
7
8
  import { S as Spinner } from './Spinner-Bk6e83RX.js';
8
- import { T as ToolStrip, C as ChatMessage } from './ChatMessage-nFk7W8JO.js';
9
- import './provider-constants-DPrj3yBX.js';
10
- import './internal-D1Iu5LHn.js';
9
+ import { C as ChatMessage } from './ChatMessage-ClLIqnwB.js';
10
+ import './internal-DtzAdxjF.js';
11
11
  import './utils-BSRjJDrZ.js';
12
12
  import 'node:module';
13
13
  import './chunk-CLZ62Ad-.js';
14
- import './state2-BvcX1tGj.js';
15
-
16
- var TTS_OPTIONS = [
17
- {
18
- id: "openpalm-voice",
19
- name: "Built-in voice",
20
- type: "local",
21
- recommended: true,
22
- desc: "Free — runs on this computer. Downloads once when you turn it on."
23
- },
24
- {
25
- id: "openai-tts",
26
- name: "OpenAI voices",
27
- type: "cloud",
28
- desc: "Uses your OpenAI account."
29
- },
30
- {
31
- id: "elevenlabs-tts",
32
- name: "ElevenLabs",
33
- type: "cloud",
34
- desc: "High-quality voices. Needs an ElevenLabs account."
35
- },
36
- {
37
- id: "browser-tts",
38
- name: "Your web browser",
39
- type: "builtin",
40
- desc: "Free, no setup needed."
41
- },
42
- {
43
- id: "skip-tts",
44
- name: "Skip for now",
45
- type: "skip",
46
- desc: "Add voice later from the dashboard."
47
- }
48
- ];
49
- var STT_OPTIONS = [
50
- {
51
- id: "openpalm-voice",
52
- name: "Built-in voice",
53
- type: "local",
54
- recommended: true,
55
- desc: "Free — runs on this computer. Downloads once when you turn it on."
56
- },
57
- {
58
- id: "openai-stt",
59
- name: "OpenAI",
60
- type: "cloud",
61
- desc: "Uses your OpenAI account."
62
- },
63
- {
64
- id: "browser-stt",
65
- name: "Your web browser",
66
- type: "builtin",
67
- desc: "Free, no setup needed."
68
- },
69
- {
70
- id: "skip-stt",
71
- name: "Skip for now",
72
- type: "skip",
73
- desc: "Add later from the dashboard."
74
- }
75
- ];
76
- /**
77
- * Per-engine configuration fields. Empty `fields` means "no extra settings".
78
- * `provider` is written to stack.env as OP_TTS_PROVIDER / OP_STT_PROVIDER
79
- * so the voice channel can resolve the runtime URL.
80
- *
81
- * Shared between the setup wizard's VoiceStep and the admin Capabilities tab.
82
- */
83
- var BASE_URL_FIELD = (placeholder, hint) => ({
84
- key: "baseURL",
85
- label: "Endpoint URL",
86
- placeholder,
87
- hint
88
- });
89
- var TTS_ENGINES = {
90
- "openpalm-voice": {
91
- id: "openpalm-voice",
92
- provider: "openpalm-voice",
93
- fields: []
94
- },
95
- "openai-tts": {
96
- id: "openai-tts",
97
- provider: "openai",
98
- fields: [
99
- BASE_URL_FIELD("https://api.openai.com/v1", "Leave empty to use the default OpenAI endpoint. Override for proxies / Azure-compat."),
100
- {
101
- key: "model",
102
- label: "Model",
103
- options: [
104
- "tts-1",
105
- "tts-1-hd",
106
- "gpt-4o-mini-tts"
107
- ]
108
- },
109
- {
110
- key: "voice",
111
- label: "Voice",
112
- options: [
113
- "alloy",
114
- "echo",
115
- "fable",
116
- "onyx",
117
- "nova",
118
- "shimmer"
119
- ]
120
- }
121
- ]
122
- },
123
- "elevenlabs-tts": {
124
- id: "elevenlabs-tts",
125
- provider: "elevenlabs",
126
- fields: [
127
- {
128
- key: "apiKey",
129
- label: "API Key",
130
- placeholder: "sk_...",
131
- hint: "Your ElevenLabs API key from elevenlabs.io."
132
- },
133
- {
134
- key: "voice",
135
- label: "Voice ID",
136
- placeholder: "EXAVITQu4vr4xnSDxMaL",
137
- hint: "ElevenLabs voice ID (from your Voice Library)."
138
- },
139
- {
140
- key: "model",
141
- label: "Model",
142
- options: [
143
- "eleven_multilingual_v2",
144
- "eleven_turbo_v2_5",
145
- "eleven_flash_v2_5"
146
- ]
147
- }
148
- ]
149
- },
150
- "browser-tts": {
151
- id: "browser-tts",
152
- fields: []
153
- },
154
- "skip-tts": {
155
- id: "skip-tts",
156
- fields: []
157
- }
158
- };
159
- var STT_ENGINES = {
160
- "openpalm-voice": {
161
- id: "openpalm-voice",
162
- provider: "openpalm-voice",
163
- fields: []
164
- },
165
- "openai-stt": {
166
- id: "openai-stt",
167
- provider: "openai",
168
- fields: [
169
- BASE_URL_FIELD("https://api.openai.com/v1", "Leave empty to use the default OpenAI endpoint."),
170
- {
171
- key: "model",
172
- label: "Model",
173
- options: [
174
- "whisper-1",
175
- "gpt-4o-mini-transcribe",
176
- "gpt-4o-transcribe"
177
- ]
178
- },
179
- {
180
- key: "language",
181
- label: "Language",
182
- placeholder: "en",
183
- hint: "A language code like `en` or `fr`, or leave blank to detect automatically."
184
- }
185
- ]
186
- },
187
- "browser-stt": {
188
- id: "browser-stt",
189
- fields: [{
190
- key: "language",
191
- label: "Language",
192
- placeholder: "en-US",
193
- hint: "A language code like `en` or `fr`, or leave blank to detect automatically."
194
- }]
195
- },
196
- "skip-stt": {
197
- id: "skip-stt",
198
- fields: []
199
- }
200
- };
14
+ import './state2-DZ2pu1L6.js';
201
15
 
202
16
  //#region src/lib/components/chrome/TabBar.svelte
203
17
  function TabBar($$renderer, $$props) {
@@ -621,8 +435,9 @@ function latestForChannel(current, candidates) {
621
435
  function UpdatesTab($$renderer, $$props) {
622
436
  $$renderer.component(($$renderer) => {
623
437
  /** Every configured stack piece (assistant, guardian, chat portal, voice,
624
- * ollama as applicable) + the tag it actually runs. Each is compared
625
- * against the control plane (platformVersion) to decide "behind". */
438
+ * ollama as applicable) + the tag it actually runs. Each carries its own
439
+ * best-effort latest tag (latestVersion) from Docker Hub so the rows
440
+ * compare per-unit, not against a single shared tag. */
626
441
  /** Desktop (Electron) app version — null when not running in Electron. */
627
442
  /** Newer desktop version from the app's GitHub update check, if any. */
628
443
  /** Download URL for the newer desktop release. */
@@ -631,14 +446,22 @@ function UpdatesTab($$renderer, $$props) {
631
446
  /** Running @openpalm/ui version (the build currently serving this page). */
632
447
  /** Supervisor is respawning the UI server against the new build; the page
633
448
  * will auto-reload once it's back up (design §6.2). */
449
+ /** Per-unit available Docker Hub tags for the per-unit version pickers,
450
+ * keyed by service id (assistant/guardian/portal/voice). Bare semver,
451
+ * v-prefixed as Docker Hub returns them; the UI strips the v for display. */
634
452
  /** Running control-plane version (PLATFORM_VERSION). The dropdown is already
635
453
  * filtered to tags ≤ this server-side (#492); used to label "you are on X"
636
- * and to keep the version picker from offering an unreachable newer tag. */
637
- /** Latest published platform version from Docker Hub (bare semver, no v-prefix).
638
- * Used for "update to X" labels so they reflect what the button actually does. */
639
- /** #497: preview the release migrations the selected tag would run. */
640
- /** #501: set when the selected tag is a downgrade and needs confirmation. */
641
- let { currentImageTag, services = [], selectedImageTag, tagChangeLoading, anyDangerousLoading, tokenStored, upgradeLoading, inElectron, electronVersion, electronLatestVersion, electronLatestUrl, harnessUpdateAvailable = false, uiVersion, uiVersions, uiVersionsLoading, selectedUiTag, uiDownloadLoading, uiDownloadReady, uiDownloadRestarting, releases, releasesLoading, platformVersion = "", latestImageTag = null, migratePreviewLoading = false, migratePreview = null, downgradePrompt = null, onSetImageTag, onPreviewMigration, onConfirmDowngrade, onCancelDowngrade, onSelectedImageTagChange, onUpgradeStack, onSelectedUiTagChange, onDownloadUiVersion, onRestartApp, onRefreshReleases } = $$props;
454
+ * and for the active-channel indicator. */
455
+ /** Latest published @openpalm/lib on npm the "is the platform itself up to
456
+ * date?" signal, separate from the container image latest tags. */
457
+ /** Latest published assistant image tag from Docker Hub (bare semver, no
458
+ * v-prefix). Backward-compat signal; the per-unit rows use each service's
459
+ * own latestVersion. */
460
+ /** Per-unit image pin: the unit currently being installed (null when idle).
461
+ * Any unit install disables the others so two pins can't race on stack.env. */
462
+ /** #501 per-unit downgrade confirmation: set when pinning a unit to an older
463
+ * tag; the UI shows a plain warning + confirm, then re-applies. */
464
+ let { currentImageTag, services = [], anyDangerousLoading, tokenStored, upgradeLoading, inElectron, electronVersion, electronLatestVersion, electronLatestUrl, harnessUpdateAvailable = false, uiVersion, uiVersions, uiVersionsLoading, selectedUiTag, uiDownloadLoading, uiDownloadReady, uiDownloadRestarting, releases, unitTags = {}, releasesLoading, platformVersion = "", platformLatest = null, latestImageTag = null, unitInstallLoading = null, unitDowngradePrompt = null, onSetUnitImageTag, onConfirmUnitDowngrade, onCancelUnitDowngrade, onUpgradeStack, onSelectedUiTagChange, onDownloadUiVersion, onRestartApp, onRefreshReleases } = $$props;
642
465
  function uiVersionLabel(v) {
643
466
  const tags = [];
644
467
  if (v.distTag) tags.push(v.distTag);
@@ -654,17 +477,40 @@ function UpdatesTab($$renderer, $$props) {
654
477
  version: v.version,
655
478
  prerelease: v.prerelease
656
479
  })));
657
- function serviceStatus(version) {
658
- const target = latestImageTag ?? platformVersion;
480
+ function serviceStatus(version, latestVersion) {
481
+ const target = latestVersion ?? latestImageTag ?? platformVersion;
659
482
  if (!isSemver(version) || !isSemver(target)) return "unknown";
660
483
  return compareVersions(version, target) < 0 ? "update" : "current";
661
484
  }
662
485
  const serviceRows = derived(() => services.map((s) => ({
663
486
  ...s,
664
- status: serviceStatus(s.version)
487
+ status: serviceStatus(s.version, s.latestVersion)
665
488
  })));
666
489
  const stackVersion = derived(() => serviceRows().find((s) => s.id === "assistant")?.version ?? currentImageTag);
667
490
  const servicesBehind = derived(() => serviceRows().some((s) => s.status === "update"));
491
+ const SERVICE_ID_TO_UNIT = {
492
+ assistant: "assistant",
493
+ guardian: "guardian",
494
+ portal: "portals",
495
+ voice: "voice"
496
+ };
497
+ let selectedUnitTags = {};
498
+ function unitSelectedTag(unit) {
499
+ return selectedUnitTags[unit] ?? "latest";
500
+ }
501
+ function setUnitSelectedTag(unit, tag) {
502
+ selectedUnitTags[unit] = tag;
503
+ }
504
+ function unitTagList(serviceId) {
505
+ return unitTags[serviceId] ?? [];
506
+ }
507
+ const unitRows = derived(() => serviceRows().map((s) => {
508
+ return {
509
+ service: s,
510
+ unit: SERVICE_ID_TO_UNIT[s.id] ?? s.id,
511
+ tags: unitTagList(s.id)
512
+ };
513
+ }));
668
514
  const appLatest = derived(() => electronLatestVersion ?? latestForChannel(electronVersion, releaseCandidates()));
669
515
  const appStatus = derived(() => inElectron ? updateStatus(electronVersion, appLatest()) : "unknown");
670
516
  const appDownloadUrl = derived(() => electronLatestUrl ?? RELEASES_URL);
@@ -680,8 +526,8 @@ function UpdatesTab($$renderer, $$props) {
680
526
  function statusTitle(s) {
681
527
  return s === "current" ? "Up to date" : s === "update" ? "Update available" : "Update status unknown";
682
528
  }
683
- const statusText = derived(() => upgradeLoading ? "Updating OpenPalm to the latest version…" : tagChangeLoading ? "Installing the selected version and restarting…" : uiDownloadLoading ? "Downloading the admin interface…" : releasesLoading || uiVersionsLoading ? "Checking for updates…" : "");
684
- $$renderer.push(`<div class="panel svelte-7mkeya" role="tabpanel"><div class="panel-header svelte-7mkeya"><div class="svelte-7mkeya"><h2 class="svelte-7mkeya">Check-up</h2> <p class="panel-subtitle svelte-7mkeya">Keep OpenPalm up to date. An update backs up your settings first, then briefly restarts your assistant.</p> `);
529
+ const statusText = derived(() => upgradeLoading ? "Updating OpenPalm to the latest version…" : unitInstallLoading !== null ? "Installing the selected version and restarting…" : uiDownloadLoading ? "Downloading the admin interface…" : releasesLoading || uiVersionsLoading ? "Checking for updates…" : "");
530
+ $$renderer.push(`<div class="panel svelte-7mkeya" role="tabpanel"><div class="panel-header svelte-7mkeya"><div class="svelte-7mkeya"><h2 class="svelte-7mkeya">Check-up</h2> <p class="panel-subtitle svelte-7mkeya">Keep OpenPalm up to date</p> `);
685
531
  if (activeChannel() !== "unknown") {
686
532
  $$renderer.push("<!--[0-->");
687
533
  $$renderer.push(`<p class="channel-indicator svelte-7mkeya">You're on the <strong class="svelte-7mkeya">${escape_html(activeChannel() === "prerelease" ? "prerelease" : "stable")}</strong> channel. `);
@@ -694,7 +540,7 @@ function UpdatesTab($$renderer, $$props) {
694
540
  }
695
541
  $$renderer.push(`<!--]--></p>`);
696
542
  } else $$renderer.push("<!--[-1-->");
697
- $$renderer.push(`<!--]--></div> <button class="btn btn-sm btn-secondary refresh-releases svelte-7mkeya"${attr("disabled", releasesLoading || uiVersionsLoading, true)}${attr("aria-busy", releasesLoading || uiVersionsLoading)} title="Check GitHub for newer versions">`);
543
+ $$renderer.push(`<!--]--></div> <button class="btn btn-sm btn-secondary refresh-releases svelte-7mkeya"${attr("disabled", releasesLoading || uiVersionsLoading, true)}${attr("aria-busy", releasesLoading || uiVersionsLoading)} title="Check for newer versions">`);
698
544
  if (releasesLoading || uiVersionsLoading) {
699
545
  $$renderer.push("<!--[0-->");
700
546
  Spinner($$renderer, {});
@@ -758,7 +604,7 @@ function UpdatesTab($$renderer, $$props) {
758
604
  $$renderer.push(`<!----> Updating…`);
759
605
  } else {
760
606
  $$renderer.push("<!--[-1-->");
761
- $$renderer.push(`Update to ${escape_html(formatVersionForDisplay(latestImageTag ?? platformVersion))}`);
607
+ $$renderer.push(`Update to ${escape_html(formatVersionForDisplay(s.latestVersion ?? latestImageTag ?? platformVersion))}`);
762
608
  }
763
609
  $$renderer.push(`<!--]--></button>`);
764
610
  } else $$renderer.push("<!--[-1-->");
@@ -813,109 +659,81 @@ function UpdatesTab($$renderer, $$props) {
813
659
  }
814
660
  $$renderer.push(`<!--]-->`);
815
661
  } else $$renderer.push("<!--[-1-->");
816
- $$renderer.push(`<!--]--></dd></div></dl> <section class="version-pin-section svelte-7mkeya" aria-labelledby="stack-pin-title"><div class="version-pin-header svelte-7mkeya"><h3 id="stack-pin-title" class="version-pin-title svelte-7mkeya">Stack images</h3> <p class="version-pin-subtitle svelte-7mkeya">Install a specific version — roll back to a known-good release or pin to a tested build.
817
- The list shows versions up to your current control plane `);
818
- if (platformVersion) {
819
- $$renderer.push("<!--[0-->");
820
- $$renderer.push(`(OpenPalm ${escape_html(formatVersionForDisplay(platformVersion))})`);
821
- } else $$renderer.push("<!--[-1-->");
822
- $$renderer.push(`<!--]-->.</p></div> <div class="version-section svelte-7mkeya"><label class="version-label svelte-7mkeya" for="stack-version-select">Version</label> <div class="version-input-row svelte-7mkeya">`);
823
- if (releasesLoading) {
824
- $$renderer.push("<!--[0-->");
825
- $$renderer.push(`<div class="version-select-skeleton svelte-7mkeya"></div>`);
826
- } else if (releases.length > 0) {
827
- $$renderer.push("<!--[1-->");
828
- $$renderer.select({
829
- id: "stack-version-select",
830
- class: "version-select",
831
- "aria-label": "OpenPalm version to install",
832
- value: selectedImageTag,
833
- onchange: (e) => onSelectedImageTagChange(e.currentTarget.value),
834
- disabled: tagChangeLoading || anyDangerousLoading
835
- }, ($$renderer) => {
836
- $$renderer.option({
837
- value: "latest",
838
- class: ""
662
+ $$renderer.push(`<!--]--></dd></div></dl> <section class="version-pin-section svelte-7mkeya" aria-labelledby="stack-pin-title"><div class="version-pin-header svelte-7mkeya"><h3 id="stack-pin-title" class="version-pin-title svelte-7mkeya">Stack images</h3> <p class="version-pin-subtitle svelte-7mkeya">Install a specific version per unit — roll a single image back to a known-good release or pin it to a tested build.
663
+ Each unit is released independently.</p></div> <!--[-->`);
664
+ const each_array_1 = ensure_array_like(unitRows());
665
+ for (let $$index_2 = 0, $$length = each_array_1.length; $$index_2 < $$length; $$index_2++) {
666
+ let row = each_array_1[$$index_2];
667
+ $$renderer.push(`<div class="version-section version-unit-row svelte-7mkeya"><div class="version-unit-head svelte-7mkeya"><label class="version-label svelte-7mkeya"${attr("for", `unit-version-select-${stringify(row.unit)}`)}>${escape_html(row.service.label)}</label> <span class="version-cell svelte-7mkeya"><code${attr_class(`version-value status-${stringify(row.service.status)}`, "svelte-7mkeya")}>${escape_html(formatVersionForDisplay(row.service.version) || "—")}</code> `);
668
+ if (statusEmoji(row.service.status)) {
669
+ $$renderer.push("<!--[0-->");
670
+ $$renderer.push(`<span class="status-emoji svelte-7mkeya" role="img"${attr("aria-label", statusTitle(row.service.status))}${attr("title", statusTitle(row.service.status))}>${escape_html(statusEmoji(row.service.status))}</span>`);
671
+ } else $$renderer.push("<!--[-1-->");
672
+ $$renderer.push(`<!--]--></span></div> <div class="version-input-row svelte-7mkeya">`);
673
+ if (releasesLoading) {
674
+ $$renderer.push("<!--[0-->");
675
+ $$renderer.push(`<div class="version-select-skeleton svelte-7mkeya"></div>`);
676
+ } else if (row.tags.length > 0) {
677
+ $$renderer.push("<!--[1-->");
678
+ $$renderer.select({
679
+ id: `unit-version-select-${stringify(row.unit)}`,
680
+ class: "version-select",
681
+ "aria-label": `${stringify(row.service.label)} version to install`,
682
+ value: unitSelectedTag(row.unit),
683
+ onchange: (e) => setUnitSelectedTag(row.unit, e.currentTarget.value),
684
+ disabled: unitInstallLoading !== null || anyDangerousLoading
839
685
  }, ($$renderer) => {
840
- $$renderer.push(`latest`);
841
- }, "svelte-7mkeya");
842
- $$renderer.push(`<!--[-->`);
843
- const each_array_1 = ensure_array_like(releases);
844
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
845
- let r = each_array_1[$$index_1];
846
686
  $$renderer.option({
847
- value: r.tag,
687
+ value: "latest",
848
688
  class: ""
849
689
  }, ($$renderer) => {
850
- $$renderer.push(`${escape_html(r.tag)}${escape_html(r.prerelease ? " (pre-release)" : "")}`);
690
+ $$renderer.push(`latest`);
851
691
  }, "svelte-7mkeya");
852
- }
853
- $$renderer.push(`<!--]-->`);
854
- }, "svelte-7mkeya");
855
- } else {
856
- $$renderer.push("<!--[-1-->");
857
- $$renderer.push(`<input id="stack-version-select" class="version-input svelte-7mkeya" type="text" aria-label="OpenPalm version to install" placeholder="e.g. 0.11.0 or latest"${attr("value", selectedImageTag)}${attr("disabled", tagChangeLoading || anyDangerousLoading, true)}/>`);
858
- }
859
- $$renderer.push(`<!--]--> <button class="btn btn-sm btn-secondary version-preview-btn svelte-7mkeya"${attr("disabled", !selectedImageTag.trim() || migratePreviewLoading || tagChangeLoading || anyDangerousLoading, true)}${attr("aria-busy", migratePreviewLoading)}>`);
860
- if (migratePreviewLoading) {
861
- $$renderer.push("<!--[0-->");
862
- Spinner($$renderer, {});
863
- $$renderer.push(`<!----> Checking…`);
864
- } else {
865
- $$renderer.push("<!--[-1-->");
866
- $$renderer.push(`Preview changes`);
867
- }
868
- $$renderer.push(`<!--]--></button> <button class="btn btn-sm btn-secondary svelte-7mkeya"${attr("disabled", !selectedImageTag.trim() || tagChangeLoading || anyDangerousLoading, true)}${attr("aria-busy", tagChangeLoading)}>`);
869
- if (tagChangeLoading) {
870
- $$renderer.push("<!--[0-->");
871
- Spinner($$renderer, {});
872
- $$renderer.push(`<!----> Installing…`);
873
- } else {
874
- $$renderer.push("<!--[-1-->");
875
- $$renderer.push(`Install &amp; restart`);
876
- }
877
- $$renderer.push(`<!--]--></button></div> <p class="version-hint svelte-7mkeya">Installs the chosen version and restarts services (about a minute offline).</p> `);
878
- if (migratePreview) {
879
- $$renderer.push("<!--[0-->");
880
- $$renderer.push(`<div class="migrate-preview svelte-7mkeya" role="status"><p class="migrate-preview-title svelte-7mkeya">What an update to ${escape_html(migratePreview.targetVersion)} would change to your files:</p> `);
881
- if (migratePreview.applied.length === 0) {
882
- $$renderer.push("<!--[0-->");
883
- $$renderer.push(`<p class="migrate-preview-empty svelte-7mkeya">Nothing — your files are already compatible. Only the images and version are updated.</p>`);
692
+ $$renderer.push(`<!--[-->`);
693
+ const each_array_2 = ensure_array_like(row.tags);
694
+ for (let $$index_1 = 0, $$length = each_array_2.length; $$index_1 < $$length; $$index_1++) {
695
+ let tag = each_array_2[$$index_1];
696
+ $$renderer.option({
697
+ value: tag,
698
+ class: ""
699
+ }, ($$renderer) => {
700
+ $$renderer.push(`${escape_html(tag)}`);
701
+ }, "svelte-7mkeya");
702
+ }
703
+ $$renderer.push(`<!--]-->`);
704
+ }, "svelte-7mkeya");
884
705
  } else {
885
706
  $$renderer.push("<!--[-1-->");
886
- $$renderer.push(`<ul class="migrate-preview-list svelte-7mkeya"><!--[-->`);
887
- const each_array_2 = ensure_array_like(migratePreview.lines);
888
- for (let i = 0, $$length = each_array_2.length; i < $$length; i++) {
889
- let line = each_array_2[i];
890
- $$renderer.push(`<li class="svelte-7mkeya">${escape_html(line)}</li>`);
891
- }
892
- $$renderer.push(`<!--]--></ul> <p class="version-hint svelte-7mkeya">These are copy-only, backup-first changes. Nothing is deleted. Your settings are backed up before anything is written.</p>`);
707
+ $$renderer.push(`<input${attr("id", `unit-version-select-${stringify(row.unit)}`)} class="version-input svelte-7mkeya" type="text"${attr("aria-label", `${stringify(row.service.label)} version to install`)} placeholder="e.g. 0.12.5 or latest"${attr("value", unitSelectedTag(row.unit))}${attr("disabled", unitInstallLoading !== null || anyDangerousLoading, true)}/>`);
893
708
  }
894
- $$renderer.push(`<!--]--> <!--[-->`);
895
- const each_array_3 = ensure_array_like(migratePreview.notes);
896
- for (let i = 0, $$length = each_array_3.length; i < $$length; i++) {
897
- let note = each_array_3[i];
898
- $$renderer.push(`<p class="migrate-preview-note svelte-7mkeya">Note: ${escape_html(note)}</p>`);
899
- }
900
- $$renderer.push(`<!--]--></div>`);
901
- } else $$renderer.push("<!--[-1-->");
902
- $$renderer.push(`<!--]--> `);
903
- if (downgradePrompt) {
904
- $$renderer.push("<!--[0-->");
905
- $$renderer.push(`<div class="downgrade-warning svelte-7mkeya" role="alertdialog" aria-label="Confirm downgrade"><p class="downgrade-warning-title svelte-7mkeya">This is a downgrade.</p> <p class="svelte-7mkeya">You're moving from ${escape_html(downgradePrompt.currentVersion)} back to ${escape_html(downgradePrompt.targetVersion)}.
906
- Release migrations don't run backward; your data may not be compatible with the older
907
- version — restore from a backup if needed.</p> <div class="downgrade-actions svelte-7mkeya"><button class="btn btn-sm btn-secondary svelte-7mkeya"${attr("disabled", tagChangeLoading, true)}>Cancel</button> <button class="btn btn-sm btn-danger svelte-7mkeya"${attr("disabled", tagChangeLoading, true)}${attr("aria-busy", tagChangeLoading)}>`);
908
- if (tagChangeLoading) {
709
+ $$renderer.push(`<!--]--> <button class="btn btn-sm btn-secondary svelte-7mkeya"${attr("disabled", !unitSelectedTag(row.unit).trim() || unitInstallLoading !== null || anyDangerousLoading, true)}${attr("aria-busy", unitInstallLoading === row.unit)}>`);
710
+ if (unitInstallLoading === row.unit) {
909
711
  $$renderer.push("<!--[0-->");
910
712
  Spinner($$renderer, {});
911
- $$renderer.push(`<!----> Downgrading…`);
713
+ $$renderer.push(`<!----> Installing…`);
912
714
  } else {
913
715
  $$renderer.push("<!--[-1-->");
914
- $$renderer.push(`Downgrade anyway`);
716
+ $$renderer.push(`Install &amp; restart`);
915
717
  }
916
- $$renderer.push(`<!--]--></button></div></div>`);
917
- } else $$renderer.push("<!--[-1-->");
918
- $$renderer.push(`<!--]--></div></section> `);
718
+ $$renderer.push(`<!--]--></button></div> <p class="version-hint svelte-7mkeya">Pins the ${escape_html(row.service.label.toLowerCase())} image and restarts services (about a minute offline).</p> `);
719
+ if (unitDowngradePrompt && unitDowngradePrompt.unit === row.unit) {
720
+ $$renderer.push("<!--[0-->");
721
+ $$renderer.push(`<div class="downgrade-warning svelte-7mkeya" role="alertdialog" aria-label="Confirm downgrade"><p class="downgrade-warning-title svelte-7mkeya">This is a downgrade.</p> <p class="svelte-7mkeya">You're moving ${escape_html(row.service.label)} from ${escape_html(unitDowngradePrompt.currentVersion)} back to ${escape_html(unitDowngradePrompt.targetVersion)}.
722
+ Release migrations don't run backward; your data may not be compatible with the older
723
+ version — restore from a backup if needed.</p> <div class="downgrade-actions svelte-7mkeya"><button class="btn btn-sm btn-secondary svelte-7mkeya"${attr("disabled", unitInstallLoading !== null, true)}>Cancel</button> <button class="btn btn-sm btn-danger svelte-7mkeya"${attr("disabled", unitInstallLoading !== null, true)}${attr("aria-busy", unitInstallLoading === row.unit)}>`);
724
+ if (unitInstallLoading === row.unit) {
725
+ $$renderer.push("<!--[0-->");
726
+ Spinner($$renderer, {});
727
+ $$renderer.push(`<!----> Downgrading…`);
728
+ } else {
729
+ $$renderer.push("<!--[-1-->");
730
+ $$renderer.push(`Downgrade anyway`);
731
+ }
732
+ $$renderer.push(`<!--]--></button></div></div>`);
733
+ } else $$renderer.push("<!--[-1-->");
734
+ $$renderer.push(`<!--]--></div>`);
735
+ }
736
+ $$renderer.push(`<!--]--></section> `);
919
737
  if (inElectron) {
920
738
  $$renderer.push("<!--[0-->");
921
739
  $$renderer.push(`<section class="version-pin-section svelte-7mkeya" aria-labelledby="ui-pin-title"><div class="version-pin-header svelte-7mkeya"><h3 id="ui-pin-title" class="version-pin-title svelte-7mkeya">Admin interface</h3> <p class="version-pin-subtitle svelte-7mkeya">Install a specific build of the admin interface — useful for testing a pre-release or rolling back after an update.</p></div> <div class="version-section svelte-7mkeya"><label class="version-label svelte-7mkeya" for="ui-version-select">Version</label> <div class="version-input-row svelte-7mkeya">`);
@@ -933,9 +751,9 @@ function UpdatesTab($$renderer, $$props) {
933
751
  disabled: uiDownloadLoading
934
752
  }, ($$renderer) => {
935
753
  $$renderer.push(`<!--[-->`);
936
- const each_array_4 = ensure_array_like(uiVersions);
937
- for (let $$index_4 = 0, $$length = each_array_4.length; $$index_4 < $$length; $$index_4++) {
938
- let v = each_array_4[$$index_4];
754
+ const each_array_3 = ensure_array_like(uiVersions);
755
+ for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
756
+ let v = each_array_3[$$index_3];
939
757
  $$renderer.option({
940
758
  value: v.version,
941
759
  class: ""
@@ -996,7 +814,7 @@ function UpdatesTab($$renderer, $$props) {
996
814
  //#region src/lib/components/admin/updates/RecoveryTab.svelte
997
815
  function RecoveryTab($$renderer, $$props) {
998
816
  $$renderer.component(($$renderer) => {
999
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Recovery</h2> <p class="panel-subtitle svelte-54nov7">Backups, lock recovery, and secret migration notices.</p></div></div> <div class="panel-body">`);
817
+ $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Recovery</h2> <p class="panel-subtitle">Backups · recovery · migration</p></div></div> <div class="panel-body">`);
1000
818
  $$renderer.push("<!--[-1-->");
1001
819
  $$renderer.push(`<!--]--> `);
1002
820
  $$renderer.push("<!--[-1-->");
@@ -1054,7 +872,7 @@ function AddonsTab($$renderer, $$props) {
1054
872
  let $$settled = true;
1055
873
  let $$inner_renderer;
1056
874
  function $$render_inner($$renderer) {
1057
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Addons</h2> <p class="panel-subtitle">Optional features you can enable or disable. Credentials are written to the stack config and applied when the addon container restarts.</p></div> <button class="btn btn-secondary btn-sm"${attr("disabled", loading, true)}>`);
875
+ $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Addons</h2> <p class="panel-subtitle">Optional features · capabilities</p></div> <button class="btn btn-secondary btn-sm"${attr("disabled", loading, true)}>`);
1058
876
  $$renderer.push("<!--[-1-->");
1059
877
  $$renderer.push(`<!--]--> Refresh</button></div> <div class="panel-body panel-body--flush">`);
1060
878
  if (addons.length === 0) {
@@ -1579,7 +1397,7 @@ function TaskDrawer($$renderer, $$props) {
1579
1397
  }
1580
1398
  $$renderer.push(`<!--]--></div></details></fieldset> <fieldset class="field-group svelte-m3wayn"${attr("disabled", saving, true)}><legend class="field-label svelte-m3wayn">Action type</legend> <div class="radio-row svelte-m3wayn"><label class="radio-label svelte-m3wayn"><input type="radio" name="tf-kind" value="command"${attr("checked", true, true)}/> Shell command</label> <label class="radio-label svelte-m3wayn"><input type="radio" name="tf-kind" value="prompt"${attr("checked", false, true)}/> Assistant prompt</label> <label class="radio-label svelte-m3wayn"><input type="radio" name="tf-kind" value="workflow"${attr("checked", false, true)}/> Workflow</label></div> `);
1581
1399
  $$renderer.push("<!--[0-->");
1582
- $$renderer.push(`<div class="field-group svelte-m3wayn" style="margin-top: var(--space-3)"><label class="field-label svelte-m3wayn" for="tf-cmd">Shell command</label> <input id="tf-cmd" class="field-input field-mono svelte-m3wayn" type="text" placeholder="echo hello" spellcheck="false"${attr("value", commandShell)}/> <span class="field-hint svelte-m3wayn">Runs as: <code class="svelte-m3wayn">sh -c "&lt;command>"</code></span></div>`);
1400
+ $$renderer.push(`<div class="field-group svelte-m3wayn" style="margin-top: var(--s-sp-3)"><label class="field-label svelte-m3wayn" for="tf-cmd">Shell command</label> <input id="tf-cmd" class="field-input field-mono svelte-m3wayn" type="text" placeholder="echo hello" spellcheck="false"${attr("value", commandShell)}/> <span class="field-hint svelte-m3wayn">Runs as: <code class="svelte-m3wayn">sh -c "&lt;command>"</code></span></div>`);
1583
1401
  $$renderer.push(`<!--]--></fieldset> `);
1584
1402
  if (Object.keys(draft.unknownKeys).length > 0) {
1585
1403
  $$renderer.push("<!--[0-->");
@@ -1667,7 +1485,7 @@ function AutomationsTab($$renderer, $$props) {
1667
1485
  default: return automation.action.type;
1668
1486
  }
1669
1487
  }
1670
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Routines</h2> <p class="panel-subtitle">Scheduled tasks from <code>~/.openpalm/knowledge/tasks/</code>. Run them now, edit them, or inspect the latest output.</p></div> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>New task</button> <button class="btn btn-secondary btn-sm"${attr("disabled", loading || false, true)}>`);
1488
+ $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Routines</h2> <p class="panel-subtitle">Scheduled tasks from knowledge/tasks/</p></div> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>New task</button> <button class="btn btn-secondary btn-sm"${attr("disabled", loading || false, true)}>`);
1671
1489
  if (loading) {
1672
1490
  $$renderer.push("<!--[0-->");
1673
1491
  Spinner($$renderer, {});
@@ -1830,7 +1648,7 @@ function ProvidersPanel($$renderer, $$props) {
1830
1648
  label: "Pi"
1831
1649
  }
1832
1650
  ];
1833
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Connections</h2> <p class="panel-subtitle">Sign in to AI providers. Credentials are stored in OpenCode's auth.json.</p></div> <div class="panel-header-actions"><button type="button" class="btn btn-secondary btn-sm"${attr("disabled", true, true)}${attr("title", "No host OpenCode installation detected")}>Import from host</button> <button type="button" class="btn btn-primary btn-sm">Add provider</button> <button class="btn btn-secondary btn-sm"${attr("disabled", loading, true)}>`);
1651
+ $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Connections</h2> <p class="panel-subtitle">AI providers · model defaults</p></div> <div class="panel-header-actions"><button type="button" class="btn btn-secondary btn-sm"${attr("disabled", true, true)}${attr("title", "No host OpenCode installation detected")}>Import from host</button> <button type="button" class="btn btn-primary btn-sm">Add provider</button> <button class="btn btn-secondary btn-sm"${attr("disabled", loading, true)}>`);
1834
1652
  {
1835
1653
  $$renderer.push("<!--[0-->");
1836
1654
  Spinner($$renderer, {});
@@ -2048,7 +1866,7 @@ function LogsTab($$renderer, $$props) {
2048
1866
  }, "svelte-coqj2u");
2049
1867
  $$renderer.push(`</div> `);
2050
1868
  $$renderer.push("<!--[0-->");
2051
- $$renderer.push(`<div class="control-group control-group--toggle svelte-coqj2u"><label class="toggle-label svelte-coqj2u"><input type="checkbox"${attr("checked", autoScroll, true)} class="svelte-coqj2u"/> <span>Auto-scroll</span></label></div>`);
1869
+ $$renderer.push(`<div class="control-group control-group--toggle svelte-coqj2u"><label class="toggle-label svelte-coqj2u"><input type="checkbox"${attr("checked", autoScroll, true)}/> <span>Auto-scroll</span></label></div>`);
2052
1870
  $$renderer.push(`<!--]--> <button class="btn btn-primary btn-sm"${attr("disabled", loading || false, true)}>`);
2053
1871
  if (loading) {
2054
1872
  $$renderer.push("<!--[0-->");
@@ -2104,11 +1922,9 @@ function SecretsTab($$renderer, $$props) {
2104
1922
  if (n < 1024) return `${n} B`;
2105
1923
  return `${(n / 1024).toFixed(1)} KB`;
2106
1924
  }
2107
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header svelte-epscb2"><h2>Secrets</h2> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>`);
1925
+ $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Secrets</h2> <p class="panel-subtitle">Encrypted key files under knowledge/secrets/</p></div> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>`);
2108
1926
  $$renderer.push("<!--[-1-->");
2109
- $$renderer.push(`<!--]--> Refresh</button></div></div> <p class="section-note svelte-epscb2">Files in the assistant's secrets directory (<code>/stash/secrets</code> → <code>knowledge/secrets</code>). These are mounted into the assistant and granted to
2110
- services via Docker secrets. Files are stored 0600. Editing here changes the live
2111
- file — restart affected services to pick up changes.</p> `);
1927
+ $$renderer.push(`<!--]--> Refresh</button></div></div> `);
2112
1928
  $$renderer.push("<!--[-1-->");
2113
1929
  $$renderer.push(`<!--]--> <div class="secrets-layout svelte-epscb2"><div class="secrets-list svelte-epscb2">`);
2114
1930
  if (files.length === 0 && true) {
@@ -2138,7 +1954,7 @@ function AssistantTab($$renderer, $$props) {
2138
1954
  let stackEnvPath = "knowledge/env/stack.env";
2139
1955
  let personaContent = "";
2140
1956
  let isDirty = derived(() => false);
2141
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header svelte-obkjlq"><div><h2>Assistant</h2> <p class="panel-subtitle svelte-obkjlq">Configure the Docker Compose project name in <code>${escape_html(stackEnvPath)}</code> and edit the assistant persona file mounted from <code>${escape_html(personaPath)}</code>.</p></div> <div class="panel-header-actions svelte-obkjlq"><button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>`);
1957
+ $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Assistant</h2> <p class="panel-subtitle">Persona · stack config</p></div> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>`);
2142
1958
  $$renderer.push("<!--[-1-->");
2143
1959
  $$renderer.push(`<!--]--> Refresh</button> `);
2144
1960
  if (isDirty()) {
@@ -2156,6 +1972,60 @@ function AssistantTab($$renderer, $$props) {
2156
1972
  });
2157
1973
  }
2158
1974
  //#endregion
1975
+ //#region src/lib/components/chat/ToolStrip.svelte
1976
+ function ToolStrip($$renderer, $$props) {
1977
+ $$renderer.component(($$renderer) => {
1978
+ let { items, muted = false, bordered = false, ariaLabel = "Assistant tool activity" } = $$props;
1979
+ let selectedToolId = null;
1980
+ function toolEmoji(tool, status) {
1981
+ const name = tool.toLowerCase();
1982
+ if (status === "error" || status === "failed") return "⚠️";
1983
+ if (name === "step") return status === "completed" ? "🧩" : "🔄";
1984
+ if (name.includes("bash") || name.includes("shell") || name.includes("command")) return "🛠️";
1985
+ if (name.includes("grep") || name.includes("search")) return "🔎";
1986
+ if (name.includes("read") || name.includes("file")) return "📄";
1987
+ if (name.includes("edit") || name.includes("write") || name.includes("patch")) return "✍️";
1988
+ if (name.includes("web") || name.includes("http") || name.includes("fetch")) return "🌐";
1989
+ if (name.includes("task") || name.includes("agent")) return "🤖";
1990
+ return status === "completed" ? "✅" : "⏳";
1991
+ }
1992
+ function timelineTitle(entry) {
1993
+ return entry.kind === "step" ? entry.title : entry.title || entry.tool;
1994
+ }
1995
+ function toolKindLabel(entry) {
1996
+ return entry.kind === "step" ? "Step" : "Tool";
1997
+ }
1998
+ function toolStatusLabel(status) {
1999
+ switch (status) {
2000
+ case "completed": return "completed";
2001
+ case "error":
2002
+ case "failed": return "failed";
2003
+ case "pending": return "queued";
2004
+ default: return "running";
2005
+ }
2006
+ }
2007
+ function toolAriaLabel(entry) {
2008
+ return `${toolKindLabel(entry)}: ${timelineTitle(entry)} (${toolStatusLabel(entry.status)})`;
2009
+ }
2010
+ if (items.length > 0) {
2011
+ $$renderer.push("<!--[0-->");
2012
+ $$renderer.push(`<div${attr_class("tool-strip svelte-icksz3", void 0, {
2013
+ "tool-strip-muted": muted,
2014
+ "tool-strip-bordered": bordered
2015
+ })}${attr("aria-label", ariaLabel)}><!--[-->`);
2016
+ const each_array = ensure_array_like(items);
2017
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
2018
+ let tool = each_array[$$index];
2019
+ $$renderer.push(`<button${attr_class("tool-emoji-btn svelte-icksz3", void 0, { "selected": selectedToolId === tool.id })} type="button"${attr("aria-label", toolAriaLabel(tool))}${attr("title", toolAriaLabel(tool))}><span class="tool-emoji svelte-icksz3" aria-hidden="true">${escape_html(toolEmoji(tool.tool, tool.status))}</span></button>`);
2020
+ }
2021
+ $$renderer.push(`<!--]--></div>`);
2022
+ } else $$renderer.push("<!--[-1-->");
2023
+ $$renderer.push(`<!--]--> `);
2024
+ $$renderer.push("<!--[-1-->");
2025
+ $$renderer.push(`<!--]-->`);
2026
+ });
2027
+ }
2028
+ //#endregion
2159
2029
  //#region src/lib/components/admin/activity/ActivityTab.svelte
2160
2030
  function ActivityTab($$renderer, $$props) {
2161
2031
  $$renderer.component(($$renderer) => {
@@ -2210,7 +2080,7 @@ function ActivityTab($$renderer, $$props) {
2210
2080
  events: sessionEventCounts[session.id] ?? 0
2211
2081
  })).sort((left, right) => right.events - left.events || right.updatedAt - left.updatedAt).slice(0, 8));
2212
2082
  onDestroy(() => {});
2213
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header svelte-z6w8je"><div><h2>Activity</h2> <p class="panel-subtitle svelte-z6w8je">Readable operator telemetry for the active assistant endpoint: what is blocked, what is failing, which sessions are busiest, and the recent history for a selected conversation.</p></div> <div class="panel-header-actions svelte-z6w8je"><button class="btn btn-secondary btn-sm"${attr("disabled", loading, true)}>`);
2083
+ $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Activity</h2> <p class="panel-subtitle">Operator telemetry · live</p></div> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"${attr("disabled", loading, true)}>`);
2214
2084
  $$renderer.push("<!--[-1-->");
2215
2085
  $$renderer.push(`<!--]--> Refresh</button></div></div> `);
2216
2086
  $$renderer.push("<!--[-1-->");
@@ -2275,13 +2145,13 @@ function ActivityTab($$renderer, $$props) {
2275
2145
  $$renderer.push(`<!--]--></div> <div class="subsection-head svelte-z6w8je"><h4 class="svelte-z6w8je">Event breakdown</h4> <span class="svelte-z6w8je">${escape_html(eventTypeRows().length)}</span></div> <div class="table-scroll svelte-z6w8je"><table class="data-table svelte-z6w8je"><thead><tr><th class="svelte-z6w8je">Type</th><th class="svelte-z6w8je">Total</th></tr></thead><tbody>`);
2276
2146
  if (eventTypeRows().length === 0) {
2277
2147
  $$renderer.push("<!--[0-->");
2278
- $$renderer.push(`<tr><td colspan="2" class="empty-cell svelte-z6w8je">No events observed yet.</td></tr>`);
2148
+ $$renderer.push(`<tr class="svelte-z6w8je"><td colspan="2" class="empty-cell svelte-z6w8je">No events observed yet.</td></tr>`);
2279
2149
  } else $$renderer.push("<!--[-1-->");
2280
2150
  $$renderer.push(`<!--]--><!--[-->`);
2281
2151
  const each_array_3 = ensure_array_like(eventTypeRows());
2282
2152
  for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
2283
2153
  let [type, count] = each_array_3[$$index_3];
2284
- $$renderer.push(`<tr><td class="mono svelte-z6w8je">${escape_html(type)}</td><td class="svelte-z6w8je">${escape_html(count)}</td></tr>`);
2154
+ $$renderer.push(`<tr class="svelte-z6w8je"><td class="mono svelte-z6w8je">${escape_html(type)}</td><td class="svelte-z6w8je">${escape_html(count)}</td></tr>`);
2285
2155
  }
2286
2156
  $$renderer.push(`<!--]--></tbody></table></div> <div class="subsection-head svelte-z6w8je"><h4 class="svelte-z6w8je">Most active sessions</h4> <span class="svelte-z6w8je">${escape_html(hotSessions().length)}</span></div> <div class="hot-session-list svelte-z6w8je">`);
2287
2157
  if (hotSessions().length === 0) {
@@ -2562,7 +2432,7 @@ function LlmProfileDrawer($$renderer, $$props) {
2562
2432
  $$settled = false;
2563
2433
  }
2564
2434
  });
2565
- $$renderer.push(`<!----></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-temperature">Temperature (0–2)</label> <input id="d-llm-temperature" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="0" max="2" step="0.1"${attr("value", draft.temperature)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-maxtokens">Max tokens</label> <input id="d-llm-maxtokens" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"${attr("value", draft.maxTokens)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-timeout">Timeout (ms)</label> <input id="d-llm-timeout" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"${attr("value", draft.timeoutMs)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-concurrency">Concurrency</label> <input id="d-llm-concurrency" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"${attr("value", draft.concurrency)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-contextlength">Context length</label> <input id="d-llm-contextlength" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"${attr("value", draft.contextLength)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-judgemodel">Judge model</label> <input id="d-llm-judgemodel" class="control-input svelte-1gmn25z" type="text" spellcheck="false" placeholder="gpt-4o"${attr("value", draft.judgeModel)}/></div></div> <label class="toggle-row svelte-1gmn25z" style="margin-top: var(--space-4)"><input type="checkbox"${attr("checked", draft.supportsJsonSchema, true)} class="svelte-1gmn25z"/> <span class="toggle-label svelte-1gmn25z">Supports JSON schema</span> <span class="toggle-hint svelte-1gmn25z">Use response_format: json_schema for structured output</span></label> <label class="toggle-row svelte-1gmn25z"><input type="checkbox"${attr("checked", draft.structuredOutput, true)} class="svelte-1gmn25z"/> <span class="toggle-label svelte-1gmn25z">Structured output capability</span> <span class="toggle-hint svelte-1gmn25z">capabilities.structuredOutput — model reliably returns valid structured JSON</span></label> <label class="toggle-row svelte-1gmn25z"><input type="checkbox"${attr("checked", draft.enableThinking, true)} class="svelte-1gmn25z"/> <span class="toggle-label svelte-1gmn25z">Enable thinking</span> <span class="toggle-hint svelte-1gmn25z">Allow extended/thinking tokens for reasoning models</span></label> <div class="control-group control-group--wide svelte-1gmn25z" style="margin-top: var(--space-4)"><label class="control-label svelte-1gmn25z" for="d-llm-extra">Extra params (JSON)</label> <textarea id="d-llm-extra" class="control-input svelte-1gmn25z" rows="3" spellcheck="false" placeholder="{ &quot;top_p&quot;: 0.9 }">`);
2435
+ $$renderer.push(`<!----></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-temperature">Temperature (0–2)</label> <input id="d-llm-temperature" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="0" max="2" step="0.1"${attr("value", draft.temperature)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-maxtokens">Max tokens</label> <input id="d-llm-maxtokens" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"${attr("value", draft.maxTokens)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-timeout">Timeout (ms)</label> <input id="d-llm-timeout" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"${attr("value", draft.timeoutMs)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-concurrency">Concurrency</label> <input id="d-llm-concurrency" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"${attr("value", draft.concurrency)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-contextlength">Context length</label> <input id="d-llm-contextlength" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"${attr("value", draft.contextLength)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-judgemodel">Judge model</label> <input id="d-llm-judgemodel" class="control-input svelte-1gmn25z" type="text" spellcheck="false" placeholder="gpt-4o"${attr("value", draft.judgeModel)}/></div></div> <label class="toggle-row svelte-1gmn25z" style="margin-top: var(--s-sp-4)"><input type="checkbox"${attr("checked", draft.supportsJsonSchema, true)} class="svelte-1gmn25z"/> <span class="toggle-label svelte-1gmn25z">Supports JSON schema</span> <span class="toggle-hint svelte-1gmn25z">Use response_format: json_schema for structured output</span></label> <label class="toggle-row svelte-1gmn25z"><input type="checkbox"${attr("checked", draft.structuredOutput, true)} class="svelte-1gmn25z"/> <span class="toggle-label svelte-1gmn25z">Structured output capability</span> <span class="toggle-hint svelte-1gmn25z">capabilities.structuredOutput — model reliably returns valid structured JSON</span></label> <label class="toggle-row svelte-1gmn25z"><input type="checkbox"${attr("checked", draft.enableThinking, true)} class="svelte-1gmn25z"/> <span class="toggle-label svelte-1gmn25z">Enable thinking</span> <span class="toggle-hint svelte-1gmn25z">Allow extended/thinking tokens for reasoning models</span></label> <div class="control-group control-group--wide svelte-1gmn25z" style="margin-top: var(--s-sp-4)"><label class="control-label svelte-1gmn25z" for="d-llm-extra">Extra params (JSON)</label> <textarea id="d-llm-extra" class="control-input svelte-1gmn25z" rows="3" spellcheck="false" placeholder="{ &quot;top_p&quot;: 0.9 }">`);
2566
2436
  const $$body = escape_html(draft.extraParams);
2567
2437
  if ($$body) $$renderer.push(`${$$body}`);
2568
2438
  $$renderer.push(`</textarea> <span class="feat-hint svelte-1gmn25z">Merged into the provider request body. Must be a JSON object.</span></div></div> <div class="drawer-footer svelte-1gmn25z"><button class="btn btn-secondary">Cancel</button> <button class="btn btn-primary">Apply</button></div></div>`);
@@ -2764,7 +2634,7 @@ function ImproveProfileDrawer($$renderer, $$props) {
2764
2634
  $$renderer.push(`Promote`);
2765
2635
  });
2766
2636
  }, "svelte-1ndbe78");
2767
- $$renderer.push(`</label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Policy</span> <input class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="policy name/ref"${attr("value", proc.policy)}/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Max accepts per run</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1"${attr("value", proc.maxAcceptsPerRun)}/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Max diff lines</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1"${attr("value", proc.maxDiffLines)}/></label> <label class="adv-field adv-field--check svelte-1ndbe78"><input type="checkbox"${attr("checked", proc.rejectEmpty, true)}/> <span class="svelte-1ndbe78">Reject empty diffs</span></label> <div class="adv-field adv-field--wide svelte-1ndbe78"><span class="adv-sublabel svelte-1ndbe78">Judgment (overrides for the accept/reject decision)</span> <div class="proc-adv-grid svelte-1ndbe78"><label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Mode</span> `);
2637
+ $$renderer.push(`</label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Policy</span> <input class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="policy name/ref"${attr("value", proc.policy)}/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Max accepts per run</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1"${attr("value", proc.maxAcceptsPerRun)}/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Max diff lines</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1"${attr("value", proc.maxDiffLines)}/></label> <label class="adv-field adv-field--check svelte-1ndbe78"><input type="checkbox"${attr("checked", proc.rejectEmpty, true)} class="svelte-1ndbe78"/> <span class="svelte-1ndbe78">Reject empty diffs</span></label> <div class="adv-field adv-field--wide svelte-1ndbe78"><span class="adv-sublabel svelte-1ndbe78">Judgment (overrides for the accept/reject decision)</span> <div class="proc-adv-grid svelte-1ndbe78"><label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Mode</span> `);
2768
2638
  $$renderer.select({
2769
2639
  class: "control-input",
2770
2640
  value: proc.judgment.mode
@@ -3023,7 +2893,7 @@ function AkmTab($$renderer, $$props) {
3023
2893
  let $$settled = true;
3024
2894
  let $$inner_renderer;
3025
2895
  function $$render_inner($$renderer) {
3026
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header svelte-19wb2va"><h2 class="svelte-19wb2va">Knowledge</h2> <div class="panel-header-actions svelte-19wb2va"><button class="btn btn-secondary btn-sm"${attr("disabled", detectingEmbedding || testingEmbedding || false, true)}>`);
2896
+ $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><h2>Knowledge</h2> <div class="panel-header-actions svelte-19wb2va"><button class="btn btn-secondary btn-sm"${attr("disabled", detectingEmbedding || testingEmbedding || false, true)}>`);
3027
2897
  $$renderer.push("<!--[-1-->");
3028
2898
  $$renderer.push(`<!--]--> Refresh</button> <button class="btn btn-secondary btn-sm"${attr("disabled", detectingEmbedding || testingEmbedding || false, true)}>`);
3029
2899
  $$renderer.push("<!--[-1-->");
@@ -3257,139 +3127,6 @@ function HostSharingSection($$renderer, $$props) {
3257
3127
  });
3258
3128
  }
3259
3129
  //#endregion
3260
- //#region src/lib/components/voice/VoiceEngineSelector.svelte
3261
- function VoiceEngineSelector($$renderer, $$props) {
3262
- $$renderer.component(($$renderer) => {
3263
- let { kind, value, onchange, reachable, reachabilityEngineId, disabledEngines, hiddenEngines, engineOptions, engineConfigs } = $$props;
3264
- const allOptions = derived(() => engineOptions ?? (kind === "tts" ? TTS_OPTIONS : STT_OPTIONS));
3265
- const engines = derived(() => engineConfigs ?? (kind === "tts" ? TTS_ENGINES : STT_ENGINES));
3266
- const options = derived(() => hiddenEngines ? allOptions().filter((o) => !hiddenEngines.has(o.id)) : allOptions());
3267
- function updateField(key, val) {
3268
- const next = { ...value };
3269
- if (val) next[key] = val;
3270
- else delete next[key];
3271
- onchange(next);
3272
- }
3273
- $$renderer.push(`<div class="engine-list svelte-1e5u5jo" role="radiogroup"${attr("aria-label", `${kind === "tts" ? "Text-to-speech" : "Speech-to-text"} engine`)}><!--[-->`);
3274
- const each_array = ensure_array_like(options());
3275
- for (let $$index_2 = 0, $$length = each_array.length; $$index_2 < $$length; $$index_2++) {
3276
- let o = each_array[$$index_2];
3277
- const selected = value.engine === o.id;
3278
- const config = engines()[o.id];
3279
- const engineState = disabledEngines?.[o.id];
3280
- const isDisabled = engineState?.disabled ?? false;
3281
- $$renderer.push(`<button type="button"${attr_class("engine-card svelte-1e5u5jo", void 0, {
3282
- "engine-card--selected": selected,
3283
- "engine-card--disabled": isDisabled
3284
- })} role="radio"${attr("aria-checked", selected)}${attr("disabled", isDisabled, true)}><div class="engine-body svelte-1e5u5jo"><span class="engine-name svelte-1e5u5jo">${escape_html(o.name)}</span> <span class="engine-desc svelte-1e5u5jo">${escape_html(o.desc)}</span> `);
3285
- if (isDisabled && engineState?.reason) {
3286
- $$renderer.push("<!--[0-->");
3287
- $$renderer.push(`<span class="engine-subtitle svelte-1e5u5jo">${escape_html(engineState.reason)}</span>`);
3288
- } else $$renderer.push("<!--[-1-->");
3289
- $$renderer.push(`<!--]--> `);
3290
- if (o.id === (reachabilityEngineId ?? (kind === "tts" ? "openai-tts" : "openai-stt")) && reachable?.remoteConfigured) {
3291
- $$renderer.push("<!--[0-->");
3292
- $$renderer.push(`<span${attr_class("engine-reachability svelte-1e5u5jo", void 0, { "engine-reachability--ok": reachable.remoteReachable })}>${escape_html(reachable.remoteReachable ? "● Endpoint reachable" : "○ Endpoint not reachable")}</span>`);
3293
- } else $$renderer.push("<!--[-1-->");
3294
- $$renderer.push(`<!--]--></div> `);
3295
- if (o.recommended) {
3296
- $$renderer.push("<!--[0-->");
3297
- $$renderer.push(`<span class="badge badge-recommended">Recommended</span>`);
3298
- } else $$renderer.push("<!--[-1-->");
3299
- $$renderer.push(`<!--]--></button> `);
3300
- if (selected && config && config.fields.length > 0) {
3301
- $$renderer.push("<!--[0-->");
3302
- $$renderer.push(`<div class="engine-config svelte-1e5u5jo"><!--[-->`);
3303
- const each_array_1 = ensure_array_like(config.fields);
3304
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
3305
- let field = each_array_1[$$index_1];
3306
- $$renderer.push(`<div class="form-field"><label class="form-label"${attr("for", `voice-${stringify(kind)}-${stringify(field.key)}`)}>${escape_html(field.label)}</label> `);
3307
- if (field.options) {
3308
- $$renderer.push("<!--[0-->");
3309
- $$renderer.select({
3310
- id: `voice-${stringify(kind)}-${stringify(field.key)}`,
3311
- class: "form-input",
3312
- value: value[field.key] ?? "",
3313
- onchange: (e) => updateField(field.key, e.currentTarget.value)
3314
- }, ($$renderer) => {
3315
- $$renderer.option({ value: "" }, ($$renderer) => {
3316
- $$renderer.push(`— default —`);
3317
- });
3318
- $$renderer.push(`<!--[-->`);
3319
- const each_array_2 = ensure_array_like(field.options);
3320
- for (let $$index = 0, $$length = each_array_2.length; $$index < $$length; $$index++) {
3321
- let opt = each_array_2[$$index];
3322
- $$renderer.option({ value: opt }, ($$renderer) => {
3323
- $$renderer.push(`${escape_html(opt)}`);
3324
- });
3325
- }
3326
- $$renderer.push(`<!--]-->`);
3327
- });
3328
- } else {
3329
- $$renderer.push("<!--[-1-->");
3330
- $$renderer.push(`<input${attr("id", `voice-${stringify(kind)}-${stringify(field.key)}`)}${attr("type", field.key === "baseURL" ? "url" : field.key === "apiKey" ? "password" : "text")} class="form-input"${attr("value", value[field.key] ?? "")}${attr("placeholder", field.placeholder ?? "")} autocomplete="off"${attr("spellcheck", field.key === "baseURL" ? false : void 0)}/>`);
3331
- }
3332
- $$renderer.push(`<!--]--> `);
3333
- if (field.hint) {
3334
- $$renderer.push("<!--[0-->");
3335
- $$renderer.push(`<span class="field-hint svelte-1e5u5jo">${escape_html(field.hint)}</span>`);
3336
- } else $$renderer.push("<!--[-1-->");
3337
- $$renderer.push(`<!--]--></div>`);
3338
- }
3339
- $$renderer.push(`<!--]--></div>`);
3340
- } else $$renderer.push("<!--[-1-->");
3341
- $$renderer.push(`<!--]-->`);
3342
- }
3343
- $$renderer.push(`<!--]--></div>`);
3344
- });
3345
- }
3346
- //#endregion
3347
- //#region src/lib/components/voice/VoiceTtsSection.svelte
3348
- function VoiceTtsSection($$renderer, $$props) {
3349
- $$renderer.component(($$renderer) => {
3350
- let { value, onchange, engineOptions, engineConfigs, reachable, hiddenEngines, engineSelected, ttsAutoEnabled, busy } = $$props;
3351
- $$renderer.push(`<section class="engine-section svelte-1b9l1t7"><h3 class="engine-heading svelte-1b9l1t7">Text-to-Speech</h3> <p class="engine-subheading svelte-1b9l1t7">How your assistant speaks</p> `);
3352
- VoiceEngineSelector($$renderer, {
3353
- kind: "tts",
3354
- value,
3355
- onchange,
3356
- engineOptions,
3357
- engineConfigs,
3358
- reachable,
3359
- reachabilityEngineId: "remote",
3360
- hiddenEngines
3361
- });
3362
- $$renderer.push(`<!----> `);
3363
- if (engineSelected) {
3364
- $$renderer.push("<!--[0-->");
3365
- $$renderer.push(`<div class="tts-extras svelte-1b9l1t7"><div class="test-voice-row svelte-1b9l1t7"><button type="button" class="btn btn-secondary btn-sm"${attr("disabled", busy, true)}>`);
3366
- $$renderer.push("<!--[-1-->");
3367
- $$renderer.push(`<!--]--> Test voice</button> `);
3368
- $$renderer.push("<!--[-1-->");
3369
- $$renderer.push(`<!--]--></div> <label class="auto-speak-toggle svelte-1b9l1t7"><input type="checkbox"${attr("checked", ttsAutoEnabled, true)} class="svelte-1b9l1t7"/> <span>Speak assistant replies aloud automatically</span></label></div>`);
3370
- } else $$renderer.push("<!--[-1-->");
3371
- $$renderer.push(`<!--]--></section>`);
3372
- });
3373
- }
3374
- //#endregion
3375
- //#region src/lib/components/voice/VoiceSttSection.svelte
3376
- function VoiceSttSection($$renderer, $$props) {
3377
- let { value, onchange, engineOptions, engineConfigs, reachable, disabledEngines, hiddenEngines } = $$props;
3378
- $$renderer.push(`<section class="engine-section svelte-1qwlk8j"><h3 class="engine-heading svelte-1qwlk8j">Speech-to-Text</h3> <p class="engine-subheading svelte-1qwlk8j">How your assistant listens</p> `);
3379
- VoiceEngineSelector($$renderer, {
3380
- kind: "stt",
3381
- value,
3382
- onchange,
3383
- engineOptions,
3384
- engineConfigs,
3385
- reachable,
3386
- reachabilityEngineId: "remote",
3387
- disabledEngines,
3388
- hiddenEngines
3389
- });
3390
- $$renderer.push(`<!----></section>`);
3391
- }
3392
- //#endregion
3393
3130
  //#region src/lib/components/voice/VoiceProfileSelector.svelte
3394
3131
  function VoiceProfileSelector($$renderer, $$props) {
3395
3132
  $$renderer.component(($$renderer) => {
@@ -3574,78 +3311,123 @@ function VoiceTab($$renderer, $$props) {
3574
3311
  voice: "",
3575
3312
  language: ""
3576
3313
  });
3577
- let loading = false;
3578
3314
  let tts = EMPTY_SECTION();
3579
3315
  let stt = EMPTY_SECTION();
3580
- let availability = {
3581
- stt: {
3582
- remoteConfigured: false,
3583
- remoteReachable: false
3584
- },
3585
- tts: {
3586
- remoteConfigured: false,
3587
- remoteReachable: false
3588
- }
3589
- };
3590
3316
  let addonProfiles = [];
3591
3317
  let selectedProfile = "";
3592
3318
  const wantsOpenpalmVoice = derived(() => tts.engine === "openpalm-voice" || stt.engine === "openpalm-voice");
3593
- function sectionToValue(s) {
3594
- return {
3595
- engine: s.engine,
3596
- ...s.baseURL ? { baseURL: s.baseURL } : {},
3597
- ...s.model ? { model: s.model } : {},
3598
- ...s.voice ? { voice: s.voice } : {},
3599
- ...s.language ? { language: s.language } : {}
3600
- };
3601
- }
3602
- function applyTtsChange(v) {
3603
- tts.engine = v.engine || "";
3604
- tts.baseURL = v.baseURL ?? "";
3605
- tts.model = v.model ?? "";
3606
- tts.voice = v.voice ?? "";
3607
- }
3608
- function applySttChange(v) {
3609
- stt.engine = v.engine || "";
3610
- stt.baseURL = v.baseURL ?? "";
3611
- stt.model = v.model ?? "";
3612
- stt.language = v.language ?? "";
3613
- }
3614
- const sttDisabledEngines = derived(() => {
3615
- return {};
3616
- });
3617
- const ttsHiddenEngines = derived(() => new Set(["browser"]));
3618
- const sttHiddenEngines = derived(() => new Set(["browser"]));
3619
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header svelte-nokcxu"><h2 class="svelte-nokcxu">Voice</h2> <div class="panel-header-actions svelte-nokcxu"><button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>`);
3319
+ let browserSttAvailable = false;
3320
+ const browserSttDisabled = derived(() => browserSttAvailable);
3321
+ const browserSttDisabledReason = derived(() => voiceState.browserSttUnsupportedReason ?? "");
3322
+ $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Voice</h2> <p class="panel-subtitle">Speech-to-text · text-to-speech</p></div> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>`);
3620
3323
  $$renderer.push("<!--[-1-->");
3621
3324
  $$renderer.push(`<!--]--> Refresh</button> <button class="btn btn-primary btn-sm"${attr("disabled", false, true)}>`);
3622
3325
  $$renderer.push("<!--[-1-->");
3623
3326
  $$renderer.push(`<!--]--> Save</button></div></div> `);
3624
3327
  $$renderer.push("<!--[-1-->");
3625
- $$renderer.push(`<!--]--> <div class="panel-body svelte-nokcxu"><p class="section-desc svelte-nokcxu">Configure how the assistant listens and speaks. Choose an engine for each;
3626
- the in-app mic uses STT and the optional auto-speak toggle uses TTS.</p> `);
3627
- VoiceTtsSection($$renderer, {
3628
- value: sectionToValue(tts),
3629
- onchange: applyTtsChange,
3630
- engineOptions: ADMIN_TTS_OPTIONS,
3631
- engineConfigs: ADMIN_TTS_ENGINES,
3632
- reachable: availability.tts,
3633
- hiddenEngines: ttsHiddenEngines(),
3634
- engineSelected: !!tts.engine,
3635
- ttsAutoEnabled: voiceState.ttsAutoEnabled,
3636
- busy: loading
3637
- });
3638
- $$renderer.push(`<!----> `);
3639
- VoiceSttSection($$renderer, {
3640
- value: sectionToValue(stt),
3641
- onchange: applySttChange,
3642
- engineOptions: ADMIN_STT_OPTIONS,
3643
- engineConfigs: ADMIN_STT_ENGINES,
3644
- reachable: availability.stt,
3645
- disabledEngines: sttDisabledEngines(),
3646
- hiddenEngines: sttHiddenEngines()
3647
- });
3648
- $$renderer.push(`<!----> `);
3328
+ $$renderer.push(`<!--]--> <div class="panel-body svelte-nokcxu"><div class="voice-grid svelte-nokcxu"><div class="section-card svelte-nokcxu"><div class="sc-title svelte-nokcxu">Speech-to-text (STT)</div> <div class="field svelte-nokcxu"><label class="field-label svelte-nokcxu" for="stt-engine">Engine</label> `);
3329
+ $$renderer.select({
3330
+ id: "stt-engine",
3331
+ class: "field-select",
3332
+ value: stt.engine,
3333
+ onchange: (e) => {
3334
+ stt.engine = e.currentTarget.value;
3335
+ },
3336
+ disabled: false
3337
+ }, ($$renderer) => {
3338
+ $$renderer.option({ value: "" }, ($$renderer) => {
3339
+ $$renderer.push(`— select engine —`);
3340
+ });
3341
+ $$renderer.push(`<!--[-->`);
3342
+ const each_array = ensure_array_like(ADMIN_STT_OPTIONS);
3343
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
3344
+ let o = each_array[$$index];
3345
+ if (o.id !== "browser") {
3346
+ $$renderer.push("<!--[0-->");
3347
+ $$renderer.option({
3348
+ value: o.id,
3349
+ disabled: o.id === "browser" && browserSttDisabled()
3350
+ }, ($$renderer) => {
3351
+ $$renderer.push(`${escape_html(o.name)}`);
3352
+ });
3353
+ } else $$renderer.push("<!--[-1-->");
3354
+ $$renderer.push(`<!--]-->`);
3355
+ }
3356
+ $$renderer.push(`<!--]-->`);
3357
+ }, "svelte-nokcxu");
3358
+ $$renderer.push(` `);
3359
+ $$renderer.push("<!--[-1-->");
3360
+ $$renderer.push(`<!--]--></div> `);
3361
+ if (stt.engine) {
3362
+ $$renderer.push("<!--[0-->");
3363
+ $$renderer.push(`<!--[-->`);
3364
+ const each_array_1 = ensure_array_like(ADMIN_STT_ENGINES[stt.engine]?.fields ?? []);
3365
+ for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
3366
+ let field = each_array_1[$$index_1];
3367
+ $$renderer.push(`<div class="field svelte-nokcxu"><label class="field-label svelte-nokcxu"${attr("for", `stt-${stringify(field.key)}`)}>${escape_html(field.label)}</label> <input${attr("id", `stt-${stringify(field.key)}`)}${attr("type", field.key === "baseURL" ? "url" : "text")} class="field-input svelte-nokcxu"${attr("placeholder", field.placeholder ?? "")}${attr("value", field.key === "baseURL" ? stt.baseURL : field.key === "model" ? stt.model : stt.language)}${attr("disabled", false, true)} autocomplete="off"/> `);
3368
+ if (field.hint) {
3369
+ $$renderer.push("<!--[0-->");
3370
+ $$renderer.push(`<p class="field-hint svelte-nokcxu">${escape_html(field.hint)}</p>`);
3371
+ } else $$renderer.push("<!--[-1-->");
3372
+ $$renderer.push(`<!--]--></div>`);
3373
+ }
3374
+ $$renderer.push(`<!--]--> `);
3375
+ if (stt.engine === "browser" && browserSttDisabled()) {
3376
+ $$renderer.push("<!--[0-->");
3377
+ $$renderer.push(`<p class="field-hint field-hint--warn svelte-nokcxu">${escape_html(browserSttDisabledReason())}</p>`);
3378
+ } else $$renderer.push("<!--[-1-->");
3379
+ $$renderer.push(`<!--]-->`);
3380
+ } else $$renderer.push("<!--[-1-->");
3381
+ $$renderer.push(`<!--]--></div> <div class="section-card svelte-nokcxu"><div class="sc-title svelte-nokcxu">Text-to-speech (TTS)</div> <div class="field svelte-nokcxu"><label class="field-label svelte-nokcxu" for="tts-engine">Engine</label> `);
3382
+ $$renderer.select({
3383
+ id: "tts-engine",
3384
+ class: "field-select",
3385
+ value: tts.engine,
3386
+ onchange: (e) => {
3387
+ tts.engine = e.currentTarget.value;
3388
+ },
3389
+ disabled: false
3390
+ }, ($$renderer) => {
3391
+ $$renderer.option({ value: "" }, ($$renderer) => {
3392
+ $$renderer.push(`— select engine —`);
3393
+ });
3394
+ $$renderer.push(`<!--[-->`);
3395
+ const each_array_2 = ensure_array_like(ADMIN_TTS_OPTIONS);
3396
+ for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {
3397
+ let o = each_array_2[$$index_2];
3398
+ if (o.id !== "browser") {
3399
+ $$renderer.push("<!--[0-->");
3400
+ $$renderer.option({ value: o.id }, ($$renderer) => {
3401
+ $$renderer.push(`${escape_html(o.name)}`);
3402
+ });
3403
+ } else $$renderer.push("<!--[-1-->");
3404
+ $$renderer.push(`<!--]-->`);
3405
+ }
3406
+ $$renderer.push(`<!--]-->`);
3407
+ }, "svelte-nokcxu");
3408
+ $$renderer.push(` `);
3409
+ $$renderer.push("<!--[-1-->");
3410
+ $$renderer.push(`<!--]--></div> `);
3411
+ if (tts.engine) {
3412
+ $$renderer.push("<!--[0-->");
3413
+ $$renderer.push(`<!--[-->`);
3414
+ const each_array_3 = ensure_array_like(ADMIN_TTS_ENGINES[tts.engine]?.fields ?? []);
3415
+ for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
3416
+ let field = each_array_3[$$index_3];
3417
+ $$renderer.push(`<div class="field svelte-nokcxu"><label class="field-label svelte-nokcxu"${attr("for", `tts-${stringify(field.key)}`)}>${escape_html(field.label)}</label> <input${attr("id", `tts-${stringify(field.key)}`)}${attr("type", field.key === "baseURL" ? "url" : "text")} class="field-input svelte-nokcxu"${attr("placeholder", field.placeholder ?? "")}${attr("value", field.key === "baseURL" ? tts.baseURL : field.key === "model" ? tts.model : tts.voice)}${attr("disabled", false, true)} autocomplete="off"/> `);
3418
+ if (field.hint) {
3419
+ $$renderer.push("<!--[0-->");
3420
+ $$renderer.push(`<p class="field-hint svelte-nokcxu">${escape_html(field.hint)}</p>`);
3421
+ } else $$renderer.push("<!--[-1-->");
3422
+ $$renderer.push(`<!--]--></div>`);
3423
+ }
3424
+ $$renderer.push(`<!--]-->`);
3425
+ } else $$renderer.push("<!--[-1-->");
3426
+ $$renderer.push(`<!--]--> <div class="sc-foot svelte-nokcxu"><div class="test-row svelte-nokcxu"><button type="button" class="btn btn-secondary btn-sm"${attr("disabled", !tts.engine, true)}>`);
3427
+ $$renderer.push("<!--[-1-->");
3428
+ $$renderer.push(`<!--]--> Test speaker</button> `);
3429
+ $$renderer.push("<!--[-1-->");
3430
+ $$renderer.push(`<!--]--></div> <label class="auto-speak-toggle svelte-nokcxu"><input type="checkbox"${attr("checked", voiceState.ttsAutoEnabled, true)} class="svelte-nokcxu"/> <span>Speak replies automatically</span></label></div></div></div> `);
3649
3431
  if (wantsOpenpalmVoice() && addonProfiles.length > 0) {
3650
3432
  $$renderer.push("<!--[0-->");
3651
3433
  VoiceAddonProfileSection($$renderer, {
@@ -3681,22 +3463,21 @@ function _page($$renderer, $$props) {
3681
3463
  let electronLatestVersion = null;
3682
3464
  let electronLatestUrl = null;
3683
3465
  let harnessUpdateAvailable = false;
3684
- let tagChangeLoading = false;
3685
- let migratePreviewLoading = false;
3686
- let migratePreview = null;
3687
- let downgradePrompt = null;
3466
+ let unitInstallLoading = null;
3467
+ let unitDowngradePrompt = null;
3688
3468
  let uiDownloadLoading = false;
3689
3469
  let uiDownloadReady = false;
3690
3470
  let uiDownloadRestarting = false;
3691
- let selectedImageTag = "latest";
3692
3471
  let selectedUiTag = "";
3693
3472
  let releases = [];
3473
+ let unitTags = {};
3694
3474
  let releasesLoading = false;
3695
3475
  let platformVersion = "";
3476
+ let platformLatest = null;
3696
3477
  let latestImageTag = null;
3697
3478
  let uiVersions = [];
3698
3479
  let uiVersionsLoading = false;
3699
- const updateAvailable = derived(() => false);
3480
+ const updateAvailable = derived(() => services.some((s) => isSemver(s.version) && isSemver(s.latestVersion ?? null) && compareVersions(s.version, s.latestVersion) < 0));
3700
3481
  onDestroy(() => {
3701
3482
  });
3702
3483
  let anyDangerousLoading = derived(() => upgradeLoading);
@@ -3771,6 +3552,22 @@ function _page($$renderer, $$props) {
3771
3552
  }
3772
3553
  automationsLoading = false;
3773
3554
  }
3555
+ async function loadVersions() {
3556
+ try {
3557
+ const data = await fetchVersions();
3558
+ currentImageTag = data.imageTag;
3559
+ services = data.services;
3560
+ inElectron = data.inElectron;
3561
+ electronVersion = data.electronVersion;
3562
+ electronLatestVersion = data.electronLatestVersion;
3563
+ electronLatestUrl = data.electronLatestUrl;
3564
+ harnessUpdateAvailable = data.harnessUpdateAvailable;
3565
+ platformVersion = data.platformVersion;
3566
+ platformLatest = data.platformLatest ?? null;
3567
+ latestImageTag = data.latestImageTag ?? null;
3568
+ unitTags = data.unitTags ?? {};
3569
+ } catch {}
3570
+ }
3774
3571
  async function loadReleases() {
3775
3572
  releasesLoading = true;
3776
3573
  uiVersionsLoading = true;
@@ -3786,6 +3583,16 @@ function _page($$renderer, $$props) {
3786
3583
  releasesLoading = false;
3787
3584
  uiVersionsLoading = false;
3788
3585
  }
3586
+ /** "Check for updates" button: invalidate server-side caches, then re-fetch
3587
+ * versions (Docker Hub tags + npm platform latest) + releases (GitHub app
3588
+ * releases) + UI versions (npm @openpalm/ui) in parallel. The invalidate
3589
+ * call runs first so the GETs see a cold cache and hit the upstreams once. */
3590
+ async function handleRefreshReleases() {
3591
+ releasesLoading = true;
3592
+ uiVersionsLoading = true;
3593
+ await invalidateVersionCache();
3594
+ await Promise.all([loadVersions(), loadReleases()]);
3595
+ }
3789
3596
  async function handleUpgradeStack() {
3790
3597
  if (anyDangerousLoading()) return;
3791
3598
  upgradeLoading = true;
@@ -3803,55 +3610,36 @@ function _page($$renderer, $$props) {
3803
3610
  }
3804
3611
  upgradeLoading = false;
3805
3612
  }
3806
- async function handleSetImageTag(tag, confirmDowngrade = false) {
3807
- if (tagChangeLoading) return;
3808
- tagChangeLoading = true;
3613
+ async function handleSetUnitImageTag(unit, tag, confirmDowngrade = false) {
3614
+ if (unitInstallLoading !== null) return;
3615
+ unitInstallLoading = unit;
3809
3616
  try {
3810
- const result = await setStackVersion(tag, { confirmDowngrade });
3811
- currentImageTag = result.imageTag;
3812
- selectedImageTag = result.imageTag;
3813
- operationResult = `Image tag set to ${result.imageTag}. Restarted: ${result.restarted.join(", ") || "none"}.`;
3617
+ const result = await setUnitImageTag(unit, tag, { confirmDowngrade });
3618
+ operationResult = `${unit} image tag set to ${result.imageTag}. Restarted: ${result.restarted.join(", ") || "none"}.`;
3814
3619
  operationResultType = "success";
3815
- downgradePrompt = null;
3816
- migratePreview = null;
3620
+ unitDowngradePrompt = null;
3621
+ await loadVersions();
3817
3622
  } catch (e) {
3818
- if (e instanceof DowngradeConfirmationRequiredError) downgradePrompt = {
3623
+ if (e instanceof DowngradeConfirmationRequiredError) unitDowngradePrompt = {
3624
+ unit,
3819
3625
  tag,
3820
3626
  currentVersion: e.currentVersion,
3821
3627
  targetVersion: e.targetVersion,
3822
3628
  message: e.message
3823
3629
  };
3824
3630
  else {
3825
- operationResult = `Failed to apply image tag: ${e.message ?? e}`;
3631
+ operationResult = `Failed to apply ${unit} image tag: ${e.message ?? e}`;
3826
3632
  operationResultType = "error";
3827
3633
  }
3828
3634
  }
3829
- tagChangeLoading = false;
3830
- }
3831
- async function handlePreviewMigration(tag) {
3832
- if (migratePreviewLoading) return;
3833
- migratePreviewLoading = true;
3834
- migratePreview = null;
3835
- try {
3836
- const result = await previewMigration(tag);
3837
- migratePreview = {
3838
- targetVersion: result.targetVersion,
3839
- applied: result.applied,
3840
- lines: result.lines,
3841
- notes: result.notes
3842
- };
3843
- } catch (e) {
3844
- operationResult = `Failed to preview changes: ${e.message ?? e}`;
3845
- operationResultType = "error";
3846
- }
3847
- migratePreviewLoading = false;
3635
+ unitInstallLoading = null;
3848
3636
  }
3849
- function handleConfirmDowngrade() {
3850
- if (!downgradePrompt) return;
3851
- handleSetImageTag(downgradePrompt.tag, true);
3637
+ function handleConfirmUnitDowngrade() {
3638
+ if (!unitDowngradePrompt) return;
3639
+ handleSetUnitImageTag(unitDowngradePrompt.unit, unitDowngradePrompt.tag, true);
3852
3640
  }
3853
- function handleCancelDowngrade() {
3854
- downgradePrompt = null;
3641
+ function handleCancelUnitDowngrade() {
3642
+ unitDowngradePrompt = null;
3855
3643
  }
3856
3644
  async function handleDownloadUiVersion(tag) {
3857
3645
  if (uiDownloadLoading) return;
@@ -3914,7 +3702,7 @@ function _page($$renderer, $$props) {
3914
3702
  $$renderer.push(`<!----> `);
3915
3703
  if (updateAvailable() && activeTab !== "updates") {
3916
3704
  $$renderer.push("<!--[0-->");
3917
- $$renderer.push(`<div class="update-banner svelte-1jef3w8" role="status"><span class="update-banner-text svelte-1jef3w8">OpenPalm ${escape_html(formatVersionForDisplay(""))} is available.</span> <button class="update-banner-action svelte-1jef3w8">Review it</button></div>`);
3705
+ $$renderer.push(`<div class="update-banner svelte-1jef3w8" role="status"><span class="update-banner-text svelte-1jef3w8">An OpenPalm update is available.</span> <button class="update-banner-action svelte-1jef3w8">Review it</button></div>`);
3918
3706
  } else $$renderer.push("<!--[-1-->");
3919
3707
  $$renderer.push(`<!--]--> `);
3920
3708
  TabBar($$renderer, {
@@ -3936,8 +3724,6 @@ function _page($$renderer, $$props) {
3936
3724
  UpdatesTab($$renderer, {
3937
3725
  currentImageTag,
3938
3726
  services,
3939
- selectedImageTag,
3940
- tagChangeLoading,
3941
3727
  anyDangerousLoading: anyDangerousLoading(),
3942
3728
  tokenStored: true,
3943
3729
  upgradeLoading,
@@ -3954,28 +3740,23 @@ function _page($$renderer, $$props) {
3954
3740
  uiDownloadReady,
3955
3741
  uiDownloadRestarting,
3956
3742
  releases,
3743
+ unitTags,
3957
3744
  releasesLoading,
3958
3745
  platformVersion,
3746
+ platformLatest,
3959
3747
  latestImageTag,
3960
- migratePreviewLoading,
3961
- migratePreview,
3962
- downgradePrompt,
3963
- onSetImageTag: (t) => handleSetImageTag(t),
3964
- onPreviewMigration: handlePreviewMigration,
3965
- onConfirmDowngrade: handleConfirmDowngrade,
3966
- onCancelDowngrade: handleCancelDowngrade,
3967
- onSelectedImageTagChange: (t) => {
3968
- selectedImageTag = t;
3969
- migratePreview = null;
3970
- downgradePrompt = null;
3971
- },
3748
+ unitInstallLoading,
3749
+ unitDowngradePrompt,
3750
+ onSetUnitImageTag: (unit, tag) => handleSetUnitImageTag(unit, tag),
3751
+ onConfirmUnitDowngrade: handleConfirmUnitDowngrade,
3752
+ onCancelUnitDowngrade: handleCancelUnitDowngrade,
3972
3753
  onUpgradeStack: handleUpgradeStack,
3973
3754
  onSelectedUiTagChange: (t) => {
3974
3755
  selectedUiTag = t;
3975
3756
  },
3976
3757
  onDownloadUiVersion: handleDownloadUiVersion,
3977
3758
  onRestartApp: handleRestartApp,
3978
- onRefreshReleases: loadReleases
3759
+ onRefreshReleases: handleRefreshReleases
3979
3760
  });
3980
3761
  } else if (activeTab === "recovery") {
3981
3762
  $$renderer.push("<!--[2-->");
@@ -4033,4 +3814,4 @@ function _page($$renderer, $$props) {
4033
3814
  }
4034
3815
 
4035
3816
  export { _page as default };
4036
- //# sourceMappingURL=_page.svelte-CmqaniiZ.js.map
3817
+ //# sourceMappingURL=_page.svelte-DR9NaaO2.js.map