@openpalm/ui 0.12.11 → 0.12.13

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 (359) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/4.C2tVeZVh.css +1 -0
  3. package/build/client/_app/immutable/assets/4.C2tVeZVh.css.br +0 -0
  4. package/build/client/_app/immutable/assets/4.C2tVeZVh.css.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{vShalCpq.js → B7vwJqoj.js} +1 -1
  6. package/build/client/_app/immutable/chunks/B7vwJqoj.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/B7vwJqoj.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/CpzMlkvh.js +1 -0
  9. package/build/client/_app/immutable/chunks/CpzMlkvh.js.br +2 -0
  10. package/build/client/_app/immutable/chunks/CpzMlkvh.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{D2kpcjIW.js → Cub6afmL.js} +1 -1
  12. package/build/client/_app/immutable/chunks/Cub6afmL.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/Cub6afmL.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/D2dFPcAY.js +3 -0
  15. package/build/client/_app/immutable/chunks/D2dFPcAY.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/D2dFPcAY.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{B-sorx18.js → DMSxHu0j.js} +2 -2
  18. package/build/client/_app/immutable/chunks/DMSxHu0j.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/DMSxHu0j.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/i-u-oQAW.js +1 -0
  21. package/build/client/_app/immutable/chunks/i-u-oQAW.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/i-u-oQAW.js.gz +0 -0
  23. package/build/client/_app/immutable/entry/{app.ByrueOmB.js → app.CGwa9uv7.js} +2 -2
  24. package/build/client/_app/immutable/entry/app.CGwa9uv7.js.br +0 -0
  25. package/build/client/_app/immutable/entry/app.CGwa9uv7.js.gz +0 -0
  26. package/build/client/_app/immutable/entry/start.CPRDHuTW.js +1 -0
  27. package/build/client/_app/immutable/entry/start.CPRDHuTW.js.br +0 -0
  28. package/build/client/_app/immutable/entry/start.CPRDHuTW.js.gz +0 -0
  29. package/build/client/_app/immutable/nodes/{0.6LuHgRwe.js → 0.DOxwxXh1.js} +1 -1
  30. package/build/client/_app/immutable/nodes/0.DOxwxXh1.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/0.DOxwxXh1.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{1.DjtG_D8w.js → 1.ALcLv429.js} +1 -1
  33. package/build/client/_app/immutable/nodes/1.ALcLv429.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/1.ALcLv429.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/4._U3pMj5x.js +133 -0
  36. package/build/client/_app/immutable/nodes/4._U3pMj5x.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/4._U3pMj5x.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/{5.Gwr8UAQM.js → 5.CUEzVL3V.js} +1 -1
  39. package/build/client/_app/immutable/nodes/5.CUEzVL3V.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/5.CUEzVL3V.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/{6.D3jTTLhO.js → 6.BL78XiLU.js} +1 -1
  42. package/build/client/_app/immutable/nodes/6.BL78XiLU.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/6.BL78XiLU.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/{7.BAsevRLv.js → 7.F5ztMZTo.js} +1 -1
  45. package/build/client/_app/immutable/nodes/7.F5ztMZTo.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/7.F5ztMZTo.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/{8.Df9ktODJ.js → 8.xcsOM3k5.js} +1 -1
  48. package/build/client/_app/immutable/nodes/8.xcsOM3k5.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/8.xcsOM3k5.js.gz +0 -0
  50. package/build/client/_app/version.json +1 -1
  51. package/build/client/_app/version.json.br +1 -1
  52. package/build/client/_app/version.json.gz +0 -0
  53. package/build/server/chunks/{0-pjhEnsU9.js → 0-BKHhl45d.js} +3 -3
  54. package/build/server/chunks/{0-pjhEnsU9.js.map → 0-BKHhl45d.js.map} +1 -1
  55. package/build/server/chunks/1-2o6Ed2yp.js +9 -0
  56. package/build/server/chunks/{1-C6FeFdMq.js.map → 1-2o6Ed2yp.js.map} +1 -1
  57. package/build/server/chunks/{10-dDPv2EXM.js → 10-sMfnW6s_.js} +5 -5
  58. package/build/server/chunks/10-sMfnW6s_.js.map +1 -0
  59. package/build/server/chunks/4-D6BCA1En.js +9 -0
  60. package/build/server/chunks/{4-DU6tKPKM.js.map → 4-D6BCA1En.js.map} +1 -1
  61. package/build/server/chunks/5-FSdT4QNL.js +9 -0
  62. package/build/server/chunks/{5-DsanV5i-.js.map → 5-FSdT4QNL.js.map} +1 -1
  63. package/build/server/chunks/6-C0ETgtOo.js +9 -0
  64. package/build/server/chunks/{6-BsuTHqJ7.js.map → 6-C0ETgtOo.js.map} +1 -1
  65. package/build/server/chunks/7-BcFrRC7r.js +9 -0
  66. package/build/server/chunks/{7-D7OLEPBt.js.map → 7-BcFrRC7r.js.map} +1 -1
  67. package/build/server/chunks/{8-D4un8Wgv.js → 8-CGnXBMny.js} +3 -3
  68. package/build/server/chunks/{8-D4un8Wgv.js.map → 8-CGnXBMny.js.map} +1 -1
  69. package/build/server/chunks/{ChatMessage-D8BaN8A9.js → ChatMessage-BEFlmHur.js} +2 -2
  70. package/build/server/chunks/{ChatMessage-D8BaN8A9.js.map → ChatMessage-BEFlmHur.js.map} +1 -1
  71. package/build/server/chunks/{Navbar-Dhb8B-b0.js → Navbar-y0AyDpcy.js} +4 -4
  72. package/build/server/chunks/{Navbar-Dhb8B-b0.js.map → Navbar-y0AyDpcy.js.map} +1 -1
  73. package/build/server/chunks/{_layout.svelte-CFKjimed.js → _layout.svelte-oFWL-MU8.js} +2 -2
  74. package/build/server/chunks/{_layout.svelte-CFKjimed.js.map → _layout.svelte-oFWL-MU8.js.map} +1 -1
  75. package/build/server/chunks/{_page.svelte-DDPHWd78.js → _page.svelte-Cqzbf_9r.js} +6 -6
  76. package/build/server/chunks/{_page.svelte-DDPHWd78.js.map → _page.svelte-Cqzbf_9r.js.map} +1 -1
  77. package/build/server/chunks/{_page.svelte-RacdBHko.js → _page.svelte-DCeKtm_e.js} +3 -3
  78. package/build/server/chunks/{_page.svelte-RacdBHko.js.map → _page.svelte-DCeKtm_e.js.map} +1 -1
  79. package/build/server/chunks/{_page.svelte-DlYG76L7.js → _page.svelte-DM3jnL7B.js} +179 -176
  80. package/build/server/chunks/_page.svelte-DM3jnL7B.js.map +1 -0
  81. package/build/server/chunks/{_page.svelte-DXgMisrO.js → _page.svelte-DbVLfUMo.js} +6 -6
  82. package/build/server/chunks/{_page.svelte-DXgMisrO.js.map → _page.svelte-DbVLfUMo.js.map} +1 -1
  83. package/build/server/chunks/{_page.svelte-Cte2R_w-.js → _page.svelte-LjsOqqWX.js} +7 -7
  84. package/build/server/chunks/{_page.svelte-Cte2R_w-.js.map → _page.svelte-LjsOqqWX.js.map} +1 -1
  85. package/build/server/chunks/{_server.ts-DRoP-Wv6.js → _server.ts--pU-mhOv.js} +5 -5
  86. package/build/server/chunks/{_server.ts-DRoP-Wv6.js.map → _server.ts--pU-mhOv.js.map} +1 -1
  87. package/build/server/chunks/{_server.ts-C7E_JtbD.js → _server.ts-0OeQ0WW1.js} +5 -5
  88. package/build/server/chunks/{_server.ts-C7E_JtbD.js.map → _server.ts-0OeQ0WW1.js.map} +1 -1
  89. package/build/server/chunks/{_server.ts-Bxb-p7E3.js → _server.ts-5CMhF-We.js} +5 -5
  90. package/build/server/chunks/{_server.ts-Bxb-p7E3.js.map → _server.ts-5CMhF-We.js.map} +1 -1
  91. package/build/server/chunks/{_server.ts-CKJbhB_h.js → _server.ts-B01UNM7i.js} +6 -6
  92. package/build/server/chunks/{_server.ts-CKJbhB_h.js.map → _server.ts-B01UNM7i.js.map} +1 -1
  93. package/build/server/chunks/{_server.ts-e5XtUvMC.js → _server.ts-B20Y2eS7.js} +6 -6
  94. package/build/server/chunks/{_server.ts-e5XtUvMC.js.map → _server.ts-B20Y2eS7.js.map} +1 -1
  95. package/build/server/chunks/{_server.ts-0NV6JC1q.js → _server.ts-B3Uljj7c.js} +5 -5
  96. package/build/server/chunks/{_server.ts-0NV6JC1q.js.map → _server.ts-B3Uljj7c.js.map} +1 -1
  97. package/build/server/chunks/_server.ts-BDRFGcRb.js +64 -0
  98. package/build/server/chunks/_server.ts-BDRFGcRb.js.map +1 -0
  99. package/build/server/chunks/{_server.ts-C1aLT5Oq.js → _server.ts-BDu6FWnC.js} +6 -6
  100. package/build/server/chunks/{_server.ts-C1aLT5Oq.js.map → _server.ts-BDu6FWnC.js.map} +1 -1
  101. package/build/server/chunks/{_server.ts-Cd9JwMMp.js → _server.ts-BE9SHXNP.js} +6 -6
  102. package/build/server/chunks/_server.ts-BE9SHXNP.js.map +1 -0
  103. package/build/server/chunks/{_server.ts-BBSxI0YB.js → _server.ts-BFejqrWf.js} +5 -5
  104. package/build/server/chunks/{_server.ts-BBSxI0YB.js.map → _server.ts-BFejqrWf.js.map} +1 -1
  105. package/build/server/chunks/{_server.ts-CYsRQTaO.js → _server.ts-BMfR4Lye.js} +5 -5
  106. package/build/server/chunks/{_server.ts-CYsRQTaO.js.map → _server.ts-BMfR4Lye.js.map} +1 -1
  107. package/build/server/chunks/{_server.ts-fQQXFe9M.js → _server.ts-BNF5idzW.js} +5 -5
  108. package/build/server/chunks/{_server.ts-fQQXFe9M.js.map → _server.ts-BNF5idzW.js.map} +1 -1
  109. package/build/server/chunks/{_server.ts-CGjfDzXX.js → _server.ts-BObiJ5Qo.js} +8 -8
  110. package/build/server/chunks/{_server.ts-CGjfDzXX.js.map → _server.ts-BObiJ5Qo.js.map} +1 -1
  111. package/build/server/chunks/{_server.ts-CGitsTJS.js → _server.ts-BSe6G25o.js} +5 -5
  112. package/build/server/chunks/_server.ts-BSe6G25o.js.map +1 -0
  113. package/build/server/chunks/{_server.ts-D5KbK1EO.js → _server.ts-BWRYvzwI.js} +5 -5
  114. package/build/server/chunks/{_server.ts-D5KbK1EO.js.map → _server.ts-BWRYvzwI.js.map} +1 -1
  115. package/build/server/chunks/{_server.ts-DuGAEea3.js → _server.ts-B_HnVdK_.js} +2 -2
  116. package/build/server/chunks/{_server.ts-DuGAEea3.js.map → _server.ts-B_HnVdK_.js.map} +1 -1
  117. package/build/server/chunks/{_server.ts-5Ws42wvy.js → _server.ts-Ba5LpOKk.js} +7 -7
  118. package/build/server/chunks/{_server.ts-5Ws42wvy.js.map → _server.ts-Ba5LpOKk.js.map} +1 -1
  119. package/build/server/chunks/{_server.ts-DQcYv35V.js → _server.ts-BcyD4FAK.js} +5 -5
  120. package/build/server/chunks/{_server.ts-DQcYv35V.js.map → _server.ts-BcyD4FAK.js.map} +1 -1
  121. package/build/server/chunks/{_server.ts-CBMkCJyi.js → _server.ts-BjzyHPaP.js} +5 -5
  122. package/build/server/chunks/{_server.ts-CBMkCJyi.js.map → _server.ts-BjzyHPaP.js.map} +1 -1
  123. package/build/server/chunks/{_server.ts-DzR4Osb4.js → _server.ts-BlD-xqHX.js} +6 -6
  124. package/build/server/chunks/{_server.ts-DzR4Osb4.js.map → _server.ts-BlD-xqHX.js.map} +1 -1
  125. package/build/server/chunks/{_server.ts-Br9fO2us.js → _server.ts-Bn2hwPxs.js} +6 -6
  126. package/build/server/chunks/{_server.ts-Br9fO2us.js.map → _server.ts-Bn2hwPxs.js.map} +1 -1
  127. package/build/server/chunks/{_server.ts-BgOid65q.js → _server.ts-BoxRUogb.js} +5 -5
  128. package/build/server/chunks/{_server.ts-BgOid65q.js.map → _server.ts-BoxRUogb.js.map} +1 -1
  129. package/build/server/chunks/{_server.ts-FsMdP1jm.js → _server.ts-Bs20Z2x5.js} +4 -4
  130. package/build/server/chunks/{_server.ts-FsMdP1jm.js.map → _server.ts-Bs20Z2x5.js.map} +1 -1
  131. package/build/server/chunks/{_server.ts-D6VySx_-.js → _server.ts-BxudLrGe.js} +5 -5
  132. package/build/server/chunks/{_server.ts-D6VySx_-.js.map → _server.ts-BxudLrGe.js.map} +1 -1
  133. package/build/server/chunks/{_server.ts-Bw7iK0pF.js → _server.ts-Bz06ow3I.js} +11 -6
  134. package/build/server/chunks/_server.ts-Bz06ow3I.js.map +1 -0
  135. package/build/server/chunks/{_server.ts-Cx4HqW-Z.js → _server.ts-C0v2G2ly.js} +2 -2
  136. package/build/server/chunks/{_server.ts-Cx4HqW-Z.js.map → _server.ts-C0v2G2ly.js.map} +1 -1
  137. package/build/server/chunks/{_server.ts-DhQzFUF4.js → _server.ts-C4OpgCAn.js} +6 -6
  138. package/build/server/chunks/{_server.ts-DhQzFUF4.js.map → _server.ts-C4OpgCAn.js.map} +1 -1
  139. package/build/server/chunks/{_server.ts-B-qcLr8p.js → _server.ts-C5SDazDN.js} +5 -5
  140. package/build/server/chunks/{_server.ts-B-qcLr8p.js.map → _server.ts-C5SDazDN.js.map} +1 -1
  141. package/build/server/chunks/{_server.ts-CJ7kiprZ.js → _server.ts-C60smtiA.js} +6 -6
  142. package/build/server/chunks/{_server.ts-CJ7kiprZ.js.map → _server.ts-C60smtiA.js.map} +1 -1
  143. package/build/server/chunks/{_server.ts-BmmrJu7p.js → _server.ts-C7C_JnLA.js} +5 -5
  144. package/build/server/chunks/{_server.ts-BmmrJu7p.js.map → _server.ts-C7C_JnLA.js.map} +1 -1
  145. package/build/server/chunks/{_server.ts-B0fcbzv5.js → _server.ts-C8itNTqQ.js} +5 -5
  146. package/build/server/chunks/{_server.ts-B0fcbzv5.js.map → _server.ts-C8itNTqQ.js.map} +1 -1
  147. package/build/server/chunks/_server.ts-CC7pljaX.js +47 -0
  148. package/build/server/chunks/_server.ts-CC7pljaX.js.map +1 -0
  149. package/build/server/chunks/{_server.ts-DVx3AhsD.js → _server.ts-CDcL1v18.js} +5 -5
  150. package/build/server/chunks/{_server.ts-DVx3AhsD.js.map → _server.ts-CDcL1v18.js.map} +1 -1
  151. package/build/server/chunks/_server.ts-CEarW7QY.js +112 -0
  152. package/build/server/chunks/_server.ts-CEarW7QY.js.map +1 -0
  153. package/build/server/chunks/{_server.ts-BJoXNNdu.js → _server.ts-CG2B5rlx.js} +5 -5
  154. package/build/server/chunks/{_server.ts-BJoXNNdu.js.map → _server.ts-CG2B5rlx.js.map} +1 -1
  155. package/build/server/chunks/{_server.ts-Bc7A8rzZ.js → _server.ts-CGqpENOm.js} +6 -6
  156. package/build/server/chunks/{_server.ts-Bc7A8rzZ.js.map → _server.ts-CGqpENOm.js.map} +1 -1
  157. package/build/server/chunks/{_server.ts-DtWJo82n.js → _server.ts-CIhtd-Uh.js} +5 -5
  158. package/build/server/chunks/{_server.ts-DtWJo82n.js.map → _server.ts-CIhtd-Uh.js.map} +1 -1
  159. package/build/server/chunks/{_server.ts-DNA0OVFL.js → _server.ts-CLGLoOX4.js} +38 -17
  160. package/build/server/chunks/_server.ts-CLGLoOX4.js.map +1 -0
  161. package/build/server/chunks/{_server.ts-PMhO6XFZ.js → _server.ts-CMuzkwXb.js} +5 -5
  162. package/build/server/chunks/{_server.ts-PMhO6XFZ.js.map → _server.ts-CMuzkwXb.js.map} +1 -1
  163. package/build/server/chunks/{_server.ts-BXuVu79G.js → _server.ts-CPQlueaR.js} +5 -5
  164. package/build/server/chunks/{_server.ts-BXuVu79G.js.map → _server.ts-CPQlueaR.js.map} +1 -1
  165. package/build/server/chunks/{_server.ts-BF8CUHqs.js → _server.ts-CPoU3qb9.js} +5 -5
  166. package/build/server/chunks/{_server.ts-BF8CUHqs.js.map → _server.ts-CPoU3qb9.js.map} +1 -1
  167. package/build/server/chunks/{_server.ts-CVjHePJ7.js → _server.ts-CV4ZTrHb.js} +6 -6
  168. package/build/server/chunks/{_server.ts-CVjHePJ7.js.map → _server.ts-CV4ZTrHb.js.map} +1 -1
  169. package/build/server/chunks/{_server.ts-pxzUffWW.js → _server.ts-CWMMcZva.js} +5 -5
  170. package/build/server/chunks/{_server.ts-pxzUffWW.js.map → _server.ts-CWMMcZva.js.map} +1 -1
  171. package/build/server/chunks/{_server.ts-CuKWH2Y0.js → _server.ts-CecMDzNO.js} +7 -7
  172. package/build/server/chunks/{_server.ts-CuKWH2Y0.js.map → _server.ts-CecMDzNO.js.map} +1 -1
  173. package/build/server/chunks/{_server.ts-cEqTNUtc.js → _server.ts-CigEk1M2.js} +5 -5
  174. package/build/server/chunks/{_server.ts-cEqTNUtc.js.map → _server.ts-CigEk1M2.js.map} +1 -1
  175. package/build/server/chunks/{_server.ts-ChKSe-AA.js → _server.ts-ClFngQ5g.js} +5 -5
  176. package/build/server/chunks/{_server.ts-ChKSe-AA.js.map → _server.ts-ClFngQ5g.js.map} +1 -1
  177. package/build/server/chunks/{_server.ts-MRFc0kGZ.js → _server.ts-CnMD6tM7.js} +5 -5
  178. package/build/server/chunks/{_server.ts-MRFc0kGZ.js.map → _server.ts-CnMD6tM7.js.map} +1 -1
  179. package/build/server/chunks/{_server.ts-LI1xk-ix.js → _server.ts-CsUb-Aja.js} +5 -5
  180. package/build/server/chunks/{_server.ts-LI1xk-ix.js.map → _server.ts-CsUb-Aja.js.map} +1 -1
  181. package/build/server/chunks/{_server.ts-DZW-Wp42.js → _server.ts-CswJoelP.js} +5 -5
  182. package/build/server/chunks/{_server.ts-DZW-Wp42.js.map → _server.ts-CswJoelP.js.map} +1 -1
  183. package/build/server/chunks/{_server.ts-C-KIZoZe.js → _server.ts-Cvr-yLEl.js} +7 -7
  184. package/build/server/chunks/{_server.ts-C-KIZoZe.js.map → _server.ts-Cvr-yLEl.js.map} +1 -1
  185. package/build/server/chunks/{_server.ts-BP_OtQ4W.js → _server.ts-D-By2JBW.js} +5 -5
  186. package/build/server/chunks/{_server.ts-BP_OtQ4W.js.map → _server.ts-D-By2JBW.js.map} +1 -1
  187. package/build/server/chunks/{_server.ts-DM6lThdl.js → _server.ts-D264FNyX.js} +5 -5
  188. package/build/server/chunks/{_server.ts-DM6lThdl.js.map → _server.ts-D264FNyX.js.map} +1 -1
  189. package/build/server/chunks/{_server.ts-BgXeptFK.js → _server.ts-D2qIIqBN.js} +5 -5
  190. package/build/server/chunks/{_server.ts-BgXeptFK.js.map → _server.ts-D2qIIqBN.js.map} +1 -1
  191. package/build/server/chunks/{_server.ts-BqJARU1X.js → _server.ts-D4KazeVl.js} +5 -5
  192. package/build/server/chunks/{_server.ts-BqJARU1X.js.map → _server.ts-D4KazeVl.js.map} +1 -1
  193. package/build/server/chunks/{_server.ts-CvrHMIWH.js → _server.ts-D4Z6LeT3.js} +2 -2
  194. package/build/server/chunks/{_server.ts-CvrHMIWH.js.map → _server.ts-D4Z6LeT3.js.map} +1 -1
  195. package/build/server/chunks/{_server.ts-vHDbBa3o.js → _server.ts-D6vZvzLt.js} +5 -5
  196. package/build/server/chunks/{_server.ts-vHDbBa3o.js.map → _server.ts-D6vZvzLt.js.map} +1 -1
  197. package/build/server/chunks/{_server.ts-3_HeE_vF.js → _server.ts-D7IC_Y32.js} +7 -7
  198. package/build/server/chunks/{_server.ts-3_HeE_vF.js.map → _server.ts-D7IC_Y32.js.map} +1 -1
  199. package/build/server/chunks/{_server.ts-BwdITGWm.js → _server.ts-D89NvzFz.js} +7 -7
  200. package/build/server/chunks/{_server.ts-BwdITGWm.js.map → _server.ts-D89NvzFz.js.map} +1 -1
  201. package/build/server/chunks/{_server.ts-pS7C2ggX.js → _server.ts-D8kr1zcQ.js} +5 -5
  202. package/build/server/chunks/{_server.ts-pS7C2ggX.js.map → _server.ts-D8kr1zcQ.js.map} +1 -1
  203. package/build/server/chunks/{_server.ts-D7-rYtEc.js → _server.ts-DBIVm5KK.js} +5 -5
  204. package/build/server/chunks/{_server.ts-D7-rYtEc.js.map → _server.ts-DBIVm5KK.js.map} +1 -1
  205. package/build/server/chunks/{_server.ts-SjllsJLQ.js → _server.ts-DEgOzmt-.js} +5 -5
  206. package/build/server/chunks/{_server.ts-SjllsJLQ.js.map → _server.ts-DEgOzmt-.js.map} +1 -1
  207. package/build/server/chunks/{_server.ts-DYDU5INq.js → _server.ts-DFpIzR83.js} +6 -6
  208. package/build/server/chunks/{_server.ts-DYDU5INq.js.map → _server.ts-DFpIzR83.js.map} +1 -1
  209. package/build/server/chunks/{_server.ts-Ci1Rfx8E.js → _server.ts-DJdI0sh1.js} +6 -6
  210. package/build/server/chunks/{_server.ts-Ci1Rfx8E.js.map → _server.ts-DJdI0sh1.js.map} +1 -1
  211. package/build/server/chunks/{_server.ts-C4093Qyv.js → _server.ts-DM9CM7r4.js} +6 -6
  212. package/build/server/chunks/{_server.ts-C4093Qyv.js.map → _server.ts-DM9CM7r4.js.map} +1 -1
  213. package/build/server/chunks/{_server.ts-DoIwXWVY.js → _server.ts-DMCXKECk.js} +4 -4
  214. package/build/server/chunks/{_server.ts-DoIwXWVY.js.map → _server.ts-DMCXKECk.js.map} +1 -1
  215. package/build/server/chunks/{_server.ts-CFHMk0p8.js → _server.ts-DMPk4tQR.js} +5 -5
  216. package/build/server/chunks/{_server.ts-CFHMk0p8.js.map → _server.ts-DMPk4tQR.js.map} +1 -1
  217. package/build/server/chunks/{_server.ts-BKvWzuAS.js → _server.ts-DOHQRR39.js} +5 -5
  218. package/build/server/chunks/{_server.ts-BKvWzuAS.js.map → _server.ts-DOHQRR39.js.map} +1 -1
  219. package/build/server/chunks/{_server.ts-C5bLLzu2.js → _server.ts-DTlf1C5O.js} +5 -5
  220. package/build/server/chunks/{_server.ts-C5bLLzu2.js.map → _server.ts-DTlf1C5O.js.map} +1 -1
  221. package/build/server/chunks/{_server.ts-DQUyafq3.js → _server.ts-Di-AKVeN.js} +5 -5
  222. package/build/server/chunks/{_server.ts-DQUyafq3.js.map → _server.ts-Di-AKVeN.js.map} +1 -1
  223. package/build/server/chunks/{_server.ts-490ZXI8p.js → _server.ts-Dl9rmY33.js} +2 -2
  224. package/build/server/chunks/{_server.ts-490ZXI8p.js.map → _server.ts-Dl9rmY33.js.map} +1 -1
  225. package/build/server/chunks/{_server.ts-UNA9HWlS.js → _server.ts-Dn4hPbO5.js} +5 -5
  226. package/build/server/chunks/{_server.ts-UNA9HWlS.js.map → _server.ts-Dn4hPbO5.js.map} +1 -1
  227. package/build/server/chunks/{_server.ts-DjN6yXTz.js → _server.ts-DohkVO-9.js} +5 -5
  228. package/build/server/chunks/{_server.ts-DjN6yXTz.js.map → _server.ts-DohkVO-9.js.map} +1 -1
  229. package/build/server/chunks/{_server.ts-Dw6QQ2RH.js → _server.ts-DvVFuoZA.js} +6 -6
  230. package/build/server/chunks/{_server.ts-Dw6QQ2RH.js.map → _server.ts-DvVFuoZA.js.map} +1 -1
  231. package/build/server/chunks/{_server.ts-C1xh49dQ.js → _server.ts-DyXpT2n9.js} +5 -5
  232. package/build/server/chunks/{_server.ts-C1xh49dQ.js.map → _server.ts-DyXpT2n9.js.map} +1 -1
  233. package/build/server/chunks/{_server.ts-CtQpR-mK.js → _server.ts-JejNP4uV.js} +5 -5
  234. package/build/server/chunks/{_server.ts-CtQpR-mK.js.map → _server.ts-JejNP4uV.js.map} +1 -1
  235. package/build/server/chunks/{_server.ts--DpjQMoc.js → _server.ts-Oh_Zqa_M.js} +5 -5
  236. package/build/server/chunks/{_server.ts--DpjQMoc.js.map → _server.ts-Oh_Zqa_M.js.map} +1 -1
  237. package/build/server/chunks/{_server.ts-CimqxW93.js → _server.ts-QdNUZ6_w.js} +7 -7
  238. package/build/server/chunks/{_server.ts-CimqxW93.js.map → _server.ts-QdNUZ6_w.js.map} +1 -1
  239. package/build/server/chunks/{_server.ts-B1Mv6wb7.js → _server.ts-SFtKmPEN.js} +5 -5
  240. package/build/server/chunks/{_server.ts-B1Mv6wb7.js.map → _server.ts-SFtKmPEN.js.map} +1 -1
  241. package/build/server/chunks/{_server.ts-VVG0ZLLE.js → _server.ts-YBAOIJxB.js} +5 -5
  242. package/build/server/chunks/{_server.ts-VVG0ZLLE.js.map → _server.ts-YBAOIJxB.js.map} +1 -1
  243. package/build/server/chunks/{_server.ts-CTt3Xlpt.js → _server.ts-beFmwPmw.js} +5 -5
  244. package/build/server/chunks/{_server.ts-CTt3Xlpt.js.map → _server.ts-beFmwPmw.js.map} +1 -1
  245. package/build/server/chunks/{_server.ts-Cdox4kyp.js → _server.ts-c_lwcz9M.js} +5 -5
  246. package/build/server/chunks/{_server.ts-Cdox4kyp.js.map → _server.ts-c_lwcz9M.js.map} +1 -1
  247. package/build/server/chunks/{_server.ts-WcxeSgme.js → _server.ts-dD2FwqWw.js} +5 -5
  248. package/build/server/chunks/_server.ts-dD2FwqWw.js.map +1 -0
  249. package/build/server/chunks/{_server.ts-B1m6hKUq.js → _server.ts-gdEb-KvS.js} +5 -5
  250. package/build/server/chunks/{_server.ts-B1m6hKUq.js.map → _server.ts-gdEb-KvS.js.map} +1 -1
  251. package/build/server/chunks/{_server.ts-YZjskwCt.js → _server.ts-mz0P4bQg.js} +5 -5
  252. package/build/server/chunks/{_server.ts-YZjskwCt.js.map → _server.ts-mz0P4bQg.js.map} +1 -1
  253. package/build/server/chunks/{_server.ts-D_-EfIES.js → _server.ts-qsfPaqQe.js} +5 -5
  254. package/build/server/chunks/{_server.ts-D_-EfIES.js.map → _server.ts-qsfPaqQe.js.map} +1 -1
  255. package/build/server/chunks/{_server.ts-BiivXvhc.js → _server.ts-xb_1w1kf.js} +2 -2
  256. package/build/server/chunks/{_server.ts-BiivXvhc.js.map → _server.ts-xb_1w1kf.js.map} +1 -1
  257. package/build/server/chunks/{addon-helpers-C0azaujt.js → addon-helpers-CtXSmg5a.js} +3 -3
  258. package/build/server/chunks/{addon-helpers-C0azaujt.js.map → addon-helpers-CtXSmg5a.js.map} +1 -1
  259. package/build/server/chunks/{akm-BzlkftXb.js → akm-BRiRim0P.js} +2 -2
  260. package/build/server/chunks/{akm-BzlkftXb.js.map → akm-BRiRim0P.js.map} +1 -1
  261. package/build/server/chunks/{catalog-BjcS-9RD.js → catalog-DEv1nsOT.js} +5 -5
  262. package/build/server/chunks/{catalog-BjcS-9RD.js.map → catalog-DEv1nsOT.js.map} +1 -1
  263. package/build/server/chunks/{client-B8iuur7b.js → client-BVhtM1mG.js} +2 -2
  264. package/build/server/chunks/{client-B8iuur7b.js.map → client-BVhtM1mG.js.map} +1 -1
  265. package/build/server/chunks/{config-36DEvVZH.js → config-CO8OSXtU.js} +2 -2
  266. package/build/server/chunks/{config-36DEvVZH.js.map → config-CO8OSXtU.js.map} +1 -1
  267. package/build/server/chunks/{docker-Xky8KsOe.js → docker-CTjWsP_Q.js} +2 -2
  268. package/build/server/chunks/{docker-Xky8KsOe.js.map → docker-CTjWsP_Q.js.map} +1 -1
  269. package/build/server/chunks/{endpoints-DIQ-qrrL.js → endpoints-UdQGgKsR.js} +2 -2
  270. package/build/server/chunks/{endpoints-DIQ-qrrL.js.map → endpoints-UdQGgKsR.js.map} +1 -1
  271. package/build/server/chunks/{environment-B7NymDAL.js → environment-DedKcJdc.js} +2 -2
  272. package/build/server/chunks/{environment-B7NymDAL.js.map → environment-DedKcJdc.js.map} +1 -1
  273. package/build/server/chunks/{error.svelte-BQiDKgW2.js → error.svelte-C6ZvgK-0.js} +4 -4
  274. package/build/server/chunks/{error.svelte-BQiDKgW2.js.map → error.svelte-C6ZvgK-0.js.map} +1 -1
  275. package/build/server/chunks/{helpers-TBhHA7BL.js → helpers-kzwksNq1.js} +3 -3
  276. package/build/server/chunks/{helpers-TBhHA7BL.js.map → helpers-kzwksNq1.js.map} +1 -1
  277. package/build/server/chunks/{hooks.server-UooxK5Hq.js → hooks.server-BjQOtOyj.js} +7 -7
  278. package/build/server/chunks/hooks.server-BjQOtOyj.js.map +1 -0
  279. package/build/server/chunks/{http-D1XmiUzn.js → http-D8YVIqJa.js} +2 -2
  280. package/build/server/chunks/{http-D1XmiUzn.js.map → http-D8YVIqJa.js.map} +1 -1
  281. package/build/server/chunks/{internal-DYjrNs__.js → internal-DQFuMtuQ.js} +3 -3
  282. package/build/server/chunks/{internal-DYjrNs__.js.map → internal-DQFuMtuQ.js.map} +1 -1
  283. package/build/server/chunks/{migration-status-cTKFvPYd.js → migration-status-a9KsTKSo.js} +2 -2
  284. package/build/server/chunks/{migration-status-cTKFvPYd.js.map → migration-status-a9KsTKSo.js.map} +1 -1
  285. package/build/server/chunks/{session-cookie-BJaAqVXS.js → session-cookie-CHgIES2p.js} +2 -2
  286. package/build/server/chunks/{session-cookie-BJaAqVXS.js.map → session-cookie-CHgIES2p.js.map} +1 -1
  287. package/build/server/chunks/{setup-deploy-BcxKW3xV.js → setup-deploy-B--th9ts.js} +2 -2
  288. package/build/server/chunks/{setup-deploy-BcxKW3xV.js.map → setup-deploy-B--th9ts.js.map} +1 -1
  289. package/build/server/chunks/{src-BrowG4c5.js → src-CidJbygh.js} +245 -18
  290. package/build/server/chunks/src-CidJbygh.js.map +1 -0
  291. package/build/server/chunks/{state-uRAQa1hp.js → state-fxN45gBp.js} +2 -2
  292. package/build/server/chunks/{state-uRAQa1hp.js.map → state-fxN45gBp.js.map} +1 -1
  293. package/build/server/chunks/{state2-C0_95QUq.js → state2-boKye0ZJ.js} +2 -2
  294. package/build/server/chunks/{state2-C0_95QUq.js.map → state2-boKye0ZJ.js.map} +1 -1
  295. package/build/server/chunks/{theme-state.svelte-8qSluhfu.js → theme-state.svelte-BsNoJAjT.js} +38 -22
  296. package/build/server/chunks/theme-state.svelte-BsNoJAjT.js.map +1 -0
  297. package/build/server/chunks/version-cache-CSnmLqxQ.js +54 -0
  298. package/build/server/chunks/version-cache-CSnmLqxQ.js.map +1 -0
  299. package/build/server/index.js +2 -2
  300. package/build/server/manifest.js +101 -94
  301. package/build/server/manifest.js.map +1 -1
  302. package/package.json +2 -2
  303. package/build/client/_app/immutable/assets/4.yeuiN53z.css +0 -1
  304. package/build/client/_app/immutable/assets/4.yeuiN53z.css.br +0 -0
  305. package/build/client/_app/immutable/assets/4.yeuiN53z.css.gz +0 -0
  306. package/build/client/_app/immutable/chunks/B-sorx18.js.br +0 -0
  307. package/build/client/_app/immutable/chunks/B-sorx18.js.gz +0 -0
  308. package/build/client/_app/immutable/chunks/CLrfghFK.js +0 -1
  309. package/build/client/_app/immutable/chunks/CLrfghFK.js.br +0 -2
  310. package/build/client/_app/immutable/chunks/CLrfghFK.js.gz +0 -0
  311. package/build/client/_app/immutable/chunks/CgKtEGfl.js +0 -1
  312. package/build/client/_app/immutable/chunks/CgKtEGfl.js.br +0 -0
  313. package/build/client/_app/immutable/chunks/CgKtEGfl.js.gz +0 -0
  314. package/build/client/_app/immutable/chunks/D2kpcjIW.js.br +0 -0
  315. package/build/client/_app/immutable/chunks/D2kpcjIW.js.gz +0 -0
  316. package/build/client/_app/immutable/chunks/Dky5K2LB.js +0 -3
  317. package/build/client/_app/immutable/chunks/Dky5K2LB.js.br +0 -0
  318. package/build/client/_app/immutable/chunks/Dky5K2LB.js.gz +0 -0
  319. package/build/client/_app/immutable/chunks/vShalCpq.js.br +0 -0
  320. package/build/client/_app/immutable/chunks/vShalCpq.js.gz +0 -0
  321. package/build/client/_app/immutable/entry/app.ByrueOmB.js.br +0 -0
  322. package/build/client/_app/immutable/entry/app.ByrueOmB.js.gz +0 -0
  323. package/build/client/_app/immutable/entry/start.CX3vfWZX.js +0 -1
  324. package/build/client/_app/immutable/entry/start.CX3vfWZX.js.br +0 -0
  325. package/build/client/_app/immutable/entry/start.CX3vfWZX.js.gz +0 -0
  326. package/build/client/_app/immutable/nodes/0.6LuHgRwe.js.br +0 -0
  327. package/build/client/_app/immutable/nodes/0.6LuHgRwe.js.gz +0 -0
  328. package/build/client/_app/immutable/nodes/1.DjtG_D8w.js.br +0 -2
  329. package/build/client/_app/immutable/nodes/1.DjtG_D8w.js.gz +0 -0
  330. package/build/client/_app/immutable/nodes/4.Q3NQORNR.js +0 -133
  331. package/build/client/_app/immutable/nodes/4.Q3NQORNR.js.br +0 -0
  332. package/build/client/_app/immutable/nodes/4.Q3NQORNR.js.gz +0 -0
  333. package/build/client/_app/immutable/nodes/5.Gwr8UAQM.js.br +0 -0
  334. package/build/client/_app/immutable/nodes/5.Gwr8UAQM.js.gz +0 -0
  335. package/build/client/_app/immutable/nodes/6.D3jTTLhO.js.br +0 -0
  336. package/build/client/_app/immutable/nodes/6.D3jTTLhO.js.gz +0 -0
  337. package/build/client/_app/immutable/nodes/7.BAsevRLv.js.br +0 -0
  338. package/build/client/_app/immutable/nodes/7.BAsevRLv.js.gz +0 -0
  339. package/build/client/_app/immutable/nodes/8.Df9ktODJ.js.br +0 -0
  340. package/build/client/_app/immutable/nodes/8.Df9ktODJ.js.gz +0 -0
  341. package/build/server/chunks/1-C6FeFdMq.js +0 -9
  342. package/build/server/chunks/10-dDPv2EXM.js.map +0 -1
  343. package/build/server/chunks/4-DU6tKPKM.js +0 -9
  344. package/build/server/chunks/5-DsanV5i-.js +0 -9
  345. package/build/server/chunks/6-BsuTHqJ7.js +0 -9
  346. package/build/server/chunks/7-D7OLEPBt.js +0 -9
  347. package/build/server/chunks/_page.svelte-DlYG76L7.js.map +0 -1
  348. package/build/server/chunks/_server.ts-BhmcyUI0.js +0 -85
  349. package/build/server/chunks/_server.ts-BhmcyUI0.js.map +0 -1
  350. package/build/server/chunks/_server.ts-Bw7iK0pF.js.map +0 -1
  351. package/build/server/chunks/_server.ts-CGitsTJS.js.map +0 -1
  352. package/build/server/chunks/_server.ts-Cd9JwMMp.js.map +0 -1
  353. package/build/server/chunks/_server.ts-DNA0OVFL.js.map +0 -1
  354. package/build/server/chunks/_server.ts-KsnGg8eu.js +0 -79
  355. package/build/server/chunks/_server.ts-KsnGg8eu.js.map +0 -1
  356. package/build/server/chunks/_server.ts-WcxeSgme.js.map +0 -1
  357. package/build/server/chunks/hooks.server-UooxK5Hq.js.map +0 -1
  358. package/build/server/chunks/src-BrowG4c5.js.map +0 -1
  359. package/build/server/chunks/theme-state.svelte-8qSluhfu.js.map +0 -1
@@ -1,17 +1,17 @@
1
- import { v as version } from './environment-B7NymDAL.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-B8iuur7b.js';
1
+ import { v as version } from './environment-DedKcJdc.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-BVhtM1mG.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-Dhb8B-b0.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 { N as Navbar, f as formatTime, D as Drawer, e as endpointsService } from './Navbar-y0AyDpcy.js';
7
7
  import { S as Spinner } from './Spinner-Bk6e83RX.js';
8
- import { T as ToolStrip, C as ChatMessage } from './ChatMessage-D8BaN8A9.js';
8
+ import { T as ToolStrip, C as ChatMessage } from './ChatMessage-BEFlmHur.js';
9
9
  import './provider-constants-DPrj3yBX.js';
10
- import './internal-DYjrNs__.js';
10
+ import './internal-DQFuMtuQ.js';
11
11
  import './utils-BSRjJDrZ.js';
12
12
  import 'node:module';
13
13
  import './chunk-CLZ62Ad-.js';
14
- import './state2-C0_95QUq.js';
14
+ import './state2-boKye0ZJ.js';
15
15
 
16
16
  var TTS_OPTIONS = [
17
17
  {
@@ -621,8 +621,9 @@ function latestForChannel(current, candidates) {
621
621
  function UpdatesTab($$renderer, $$props) {
622
622
  $$renderer.component(($$renderer) => {
623
623
  /** 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". */
624
+ * ollama as applicable) + the tag it actually runs. Each carries its own
625
+ * best-effort latest tag (latestVersion) from Docker Hub so the rows
626
+ * compare per-unit, not against a single shared tag. */
626
627
  /** Desktop (Electron) app version — null when not running in Electron. */
627
628
  /** Newer desktop version from the app's GitHub update check, if any. */
628
629
  /** Download URL for the newer desktop release. */
@@ -631,14 +632,22 @@ function UpdatesTab($$renderer, $$props) {
631
632
  /** Running @openpalm/ui version (the build currently serving this page). */
632
633
  /** Supervisor is respawning the UI server against the new build; the page
633
634
  * will auto-reload once it's back up (design §6.2). */
635
+ /** Per-unit available Docker Hub tags for the per-unit version pickers,
636
+ * keyed by service id (assistant/guardian/portal/voice). Bare semver,
637
+ * v-prefixed as Docker Hub returns them; the UI strips the v for display. */
634
638
  /** Running control-plane version (PLATFORM_VERSION). The dropdown is already
635
639
  * 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;
640
+ * and for the active-channel indicator. */
641
+ /** Latest published @openpalm/lib on npm the "is the platform itself up to
642
+ * date?" signal, separate from the container image latest tags. */
643
+ /** Latest published assistant image tag from Docker Hub (bare semver, no
644
+ * v-prefix). Backward-compat signal; the per-unit rows use each service's
645
+ * own latestVersion. */
646
+ /** Per-unit image pin: the unit currently being installed (null when idle).
647
+ * Any unit install disables the others so two pins can't race on stack.env. */
648
+ /** #501 per-unit downgrade confirmation: set when pinning a unit to an older
649
+ * tag; the UI shows a plain warning + confirm, then re-applies. */
650
+ 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
651
  function uiVersionLabel(v) {
643
652
  const tags = [];
644
653
  if (v.distTag) tags.push(v.distTag);
@@ -654,17 +663,40 @@ function UpdatesTab($$renderer, $$props) {
654
663
  version: v.version,
655
664
  prerelease: v.prerelease
656
665
  })));
657
- function serviceStatus(version) {
658
- const target = latestImageTag ?? platformVersion;
666
+ function serviceStatus(version, latestVersion) {
667
+ const target = latestVersion ?? latestImageTag ?? platformVersion;
659
668
  if (!isSemver(version) || !isSemver(target)) return "unknown";
660
669
  return compareVersions(version, target) < 0 ? "update" : "current";
661
670
  }
662
671
  const serviceRows = derived(() => services.map((s) => ({
663
672
  ...s,
664
- status: serviceStatus(s.version)
673
+ status: serviceStatus(s.version, s.latestVersion)
665
674
  })));
666
675
  const stackVersion = derived(() => serviceRows().find((s) => s.id === "assistant")?.version ?? currentImageTag);
667
676
  const servicesBehind = derived(() => serviceRows().some((s) => s.status === "update"));
677
+ const SERVICE_ID_TO_UNIT = {
678
+ assistant: "assistant",
679
+ guardian: "guardian",
680
+ portal: "portals",
681
+ voice: "voice"
682
+ };
683
+ let selectedUnitTags = {};
684
+ function unitSelectedTag(unit) {
685
+ return selectedUnitTags[unit] ?? "latest";
686
+ }
687
+ function setUnitSelectedTag(unit, tag) {
688
+ selectedUnitTags[unit] = tag;
689
+ }
690
+ function unitTagList(serviceId) {
691
+ return unitTags[serviceId] ?? [];
692
+ }
693
+ const unitRows = derived(() => serviceRows().map((s) => {
694
+ return {
695
+ service: s,
696
+ unit: SERVICE_ID_TO_UNIT[s.id] ?? s.id,
697
+ tags: unitTagList(s.id)
698
+ };
699
+ }));
668
700
  const appLatest = derived(() => electronLatestVersion ?? latestForChannel(electronVersion, releaseCandidates()));
669
701
  const appStatus = derived(() => inElectron ? updateStatus(electronVersion, appLatest()) : "unknown");
670
702
  const appDownloadUrl = derived(() => electronLatestUrl ?? RELEASES_URL);
@@ -680,7 +712,7 @@ function UpdatesTab($$renderer, $$props) {
680
712
  function statusTitle(s) {
681
713
  return s === "current" ? "Up to date" : s === "update" ? "Update available" : "Update status unknown";
682
714
  }
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…" : "");
715
+ 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…" : "");
684
716
  $$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> `);
685
717
  if (activeChannel() !== "unknown") {
686
718
  $$renderer.push("<!--[0-->");
@@ -694,7 +726,7 @@ function UpdatesTab($$renderer, $$props) {
694
726
  }
695
727
  $$renderer.push(`<!--]--></p>`);
696
728
  } 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">`);
729
+ $$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
730
  if (releasesLoading || uiVersionsLoading) {
699
731
  $$renderer.push("<!--[0-->");
700
732
  Spinner($$renderer, {});
@@ -758,7 +790,7 @@ function UpdatesTab($$renderer, $$props) {
758
790
  $$renderer.push(`<!----> Updating…`);
759
791
  } else {
760
792
  $$renderer.push("<!--[-1-->");
761
- $$renderer.push(`Update to ${escape_html(formatVersionForDisplay(latestImageTag ?? platformVersion))}`);
793
+ $$renderer.push(`Update to ${escape_html(formatVersionForDisplay(s.latestVersion ?? latestImageTag ?? platformVersion))}`);
762
794
  }
763
795
  $$renderer.push(`<!--]--></button>`);
764
796
  } else $$renderer.push("<!--[-1-->");
@@ -813,112 +845,84 @@ function UpdatesTab($$renderer, $$props) {
813
845
  }
814
846
  $$renderer.push(`<!--]-->`);
815
847
  } else $$renderer.push("<!--[-1-->");
816
- $$renderer.push(`<!--]--></dd></div></dl> <details class="advanced svelte-7mkeya"><summary class="svelte-7mkeya">Version control</summary> <div class="advanced-body svelte-7mkeya"><div class="version-section svelte-7mkeya"><h4 class="version-section-heading svelte-7mkeya">Stack version</h4> <label class="version-label svelte-7mkeya" for="stack-version-select">Install a specific version</label> <p class="version-running-note svelte-7mkeya">Install an exact version e.g. to roll back, or to pin to a specific tested release.
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 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: ""
848
+ $$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.
849
+ Each unit is released independently.</p></div> <!--[-->`);
850
+ const each_array_1 = ensure_array_like(unitRows());
851
+ for (let $$index_2 = 0, $$length = each_array_1.length; $$index_2 < $$length; $$index_2++) {
852
+ let row = each_array_1[$$index_2];
853
+ $$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> `);
854
+ if (statusEmoji(row.service.status)) {
855
+ $$renderer.push("<!--[0-->");
856
+ $$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>`);
857
+ } else $$renderer.push("<!--[-1-->");
858
+ $$renderer.push(`<!--]--></span></div> <div class="version-input-row svelte-7mkeya">`);
859
+ if (releasesLoading) {
860
+ $$renderer.push("<!--[0-->");
861
+ $$renderer.push(`<div class="version-select-skeleton svelte-7mkeya"></div>`);
862
+ } else if (row.tags.length > 0) {
863
+ $$renderer.push("<!--[1-->");
864
+ $$renderer.select({
865
+ id: `unit-version-select-${stringify(row.unit)}`,
866
+ class: "version-select",
867
+ "aria-label": `${stringify(row.service.label)} version to install`,
868
+ value: unitSelectedTag(row.unit),
869
+ onchange: (e) => setUnitSelectedTag(row.unit, e.currentTarget.value),
870
+ disabled: unitInstallLoading !== null || anyDangerousLoading
839
871
  }, ($$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
872
  $$renderer.option({
847
- value: r.tag,
873
+ value: "latest",
848
874
  class: ""
849
875
  }, ($$renderer) => {
850
- $$renderer.push(`${escape_html(r.tag)}${escape_html(r.prerelease ? " (pre-release)" : "")}`);
876
+ $$renderer.push(`latest`);
851
877
  }, "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">Explicit version control: installs the chosen version and restarts services (about a minute offline). Use this to roll back or pin a release.</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>`);
878
+ $$renderer.push(`<!--[-->`);
879
+ const each_array_2 = ensure_array_like(row.tags);
880
+ for (let $$index_1 = 0, $$length = each_array_2.length; $$index_1 < $$length; $$index_1++) {
881
+ let tag = each_array_2[$$index_1];
882
+ $$renderer.option({
883
+ value: tag,
884
+ class: ""
885
+ }, ($$renderer) => {
886
+ $$renderer.push(`${escape_html(tag)}`);
887
+ }, "svelte-7mkeya");
888
+ }
889
+ $$renderer.push(`<!--]-->`);
890
+ }, "svelte-7mkeya");
884
891
  } else {
885
892
  $$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>`);
893
- }
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>`);
893
+ $$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)}/>`);
899
894
  }
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) {
895
+ $$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)}>`);
896
+ if (unitInstallLoading === row.unit) {
909
897
  $$renderer.push("<!--[0-->");
910
898
  Spinner($$renderer, {});
911
- $$renderer.push(`<!----> Downgrading…`);
899
+ $$renderer.push(`<!----> Installing…`);
912
900
  } else {
913
901
  $$renderer.push("<!--[-1-->");
914
- $$renderer.push(`Downgrade anyway`);
902
+ $$renderer.push(`Install &amp; restart`);
915
903
  }
916
- $$renderer.push(`<!--]--></button></div></div>`);
917
- } else $$renderer.push("<!--[-1-->");
918
- $$renderer.push(`<!--]--></div> `);
904
+ $$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> `);
905
+ if (unitDowngradePrompt && unitDowngradePrompt.unit === row.unit) {
906
+ $$renderer.push("<!--[0-->");
907
+ $$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)}.
908
+ Release migrations don't run backward; your data may not be compatible with the older
909
+ 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)}>`);
910
+ if (unitInstallLoading === row.unit) {
911
+ $$renderer.push("<!--[0-->");
912
+ Spinner($$renderer, {});
913
+ $$renderer.push(`<!----> Downgrading…`);
914
+ } else {
915
+ $$renderer.push("<!--[-1-->");
916
+ $$renderer.push(`Downgrade anyway`);
917
+ }
918
+ $$renderer.push(`<!--]--></button></div></div>`);
919
+ } else $$renderer.push("<!--[-1-->");
920
+ $$renderer.push(`<!--]--></div>`);
921
+ }
922
+ $$renderer.push(`<!--]--></section> `);
919
923
  if (inElectron) {
920
924
  $$renderer.push("<!--[0-->");
921
- $$renderer.push(`<div class="version-divider svelte-7mkeya"></div> <div class="version-section svelte-7mkeya"><h4 class="version-section-heading svelte-7mkeya">Admin interface version</h4> <label class="version-label svelte-7mkeya" for="ui-version-select">Install a specific version</label> <div class="version-input-row svelte-7mkeya">`);
925
+ $$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">`);
922
926
  if (uiVersionsLoading) {
923
927
  $$renderer.push("<!--[0-->");
924
928
  $$renderer.push(`<div class="version-select-skeleton svelte-7mkeya"></div>`);
@@ -933,9 +937,9 @@ function UpdatesTab($$renderer, $$props) {
933
937
  disabled: uiDownloadLoading
934
938
  }, ($$renderer) => {
935
939
  $$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];
940
+ const each_array_3 = ensure_array_like(uiVersions);
941
+ for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
942
+ let v = each_array_3[$$index_3];
939
943
  $$renderer.option({
940
944
  value: v.version,
941
945
  class: ""
@@ -971,9 +975,9 @@ function UpdatesTab($$renderer, $$props) {
971
975
  $$renderer.push("<!--[-1-->");
972
976
  $$renderer.push(`<p class="version-hint svelte-7mkeya">Downloads and replaces the admin interface. Takes effect after restart.</p>`);
973
977
  }
974
- $$renderer.push(`<!--]--></div>`);
978
+ $$renderer.push(`<!--]--></div></section>`);
975
979
  } else $$renderer.push("<!--[-1-->");
976
- $$renderer.push(`<!--]--></div></details> `);
980
+ $$renderer.push(`<!--]--> `);
977
981
  if (inElectron) {
978
982
  $$renderer.push("<!--[0-->");
979
983
  $$renderer.push(`<section class="desktop-settings svelte-7mkeya" aria-labelledby="desktop-settings-title"><h3 id="desktop-settings-title" class="desktop-settings-title svelte-7mkeya">Desktop settings</h3> <div class="desktop-setting-row svelte-7mkeya"><div class="version-label svelte-7mkeya">Launch on login</div> <label class="desktop-toggle svelte-7mkeya"><input type="checkbox"${attr("checked", launchOnLoginEnabled, true)}${attr("disabled", true, true)} class="svelte-7mkeya"/> <span class="svelte-7mkeya">Start OpenPalm automatically when you sign in on this device.</span></label> <p class="version-hint svelte-7mkeya">`);
@@ -3681,22 +3685,21 @@ function _page($$renderer, $$props) {
3681
3685
  let electronLatestVersion = null;
3682
3686
  let electronLatestUrl = null;
3683
3687
  let harnessUpdateAvailable = false;
3684
- let tagChangeLoading = false;
3685
- let migratePreviewLoading = false;
3686
- let migratePreview = null;
3687
- let downgradePrompt = null;
3688
+ let unitInstallLoading = null;
3689
+ let unitDowngradePrompt = null;
3688
3690
  let uiDownloadLoading = false;
3689
3691
  let uiDownloadReady = false;
3690
3692
  let uiDownloadRestarting = false;
3691
- let selectedImageTag = "latest";
3692
3693
  let selectedUiTag = "";
3693
3694
  let releases = [];
3695
+ let unitTags = {};
3694
3696
  let releasesLoading = false;
3695
3697
  let platformVersion = "";
3698
+ let platformLatest = null;
3696
3699
  let latestImageTag = null;
3697
3700
  let uiVersions = [];
3698
3701
  let uiVersionsLoading = false;
3699
- const updateAvailable = derived(() => false);
3702
+ const updateAvailable = derived(() => services.some((s) => isSemver(s.version) && isSemver(s.latestVersion ?? null) && compareVersions(s.version, s.latestVersion) < 0));
3700
3703
  onDestroy(() => {
3701
3704
  });
3702
3705
  let anyDangerousLoading = derived(() => upgradeLoading);
@@ -3771,6 +3774,22 @@ function _page($$renderer, $$props) {
3771
3774
  }
3772
3775
  automationsLoading = false;
3773
3776
  }
3777
+ async function loadVersions() {
3778
+ try {
3779
+ const data = await fetchVersions();
3780
+ currentImageTag = data.imageTag;
3781
+ services = data.services;
3782
+ inElectron = data.inElectron;
3783
+ electronVersion = data.electronVersion;
3784
+ electronLatestVersion = data.electronLatestVersion;
3785
+ electronLatestUrl = data.electronLatestUrl;
3786
+ harnessUpdateAvailable = data.harnessUpdateAvailable;
3787
+ platformVersion = data.platformVersion;
3788
+ platformLatest = data.platformLatest ?? null;
3789
+ latestImageTag = data.latestImageTag ?? null;
3790
+ unitTags = data.unitTags ?? {};
3791
+ } catch {}
3792
+ }
3774
3793
  async function loadReleases() {
3775
3794
  releasesLoading = true;
3776
3795
  uiVersionsLoading = true;
@@ -3786,6 +3805,16 @@ function _page($$renderer, $$props) {
3786
3805
  releasesLoading = false;
3787
3806
  uiVersionsLoading = false;
3788
3807
  }
3808
+ /** "Check for updates" button: invalidate server-side caches, then re-fetch
3809
+ * versions (Docker Hub tags + npm platform latest) + releases (GitHub app
3810
+ * releases) + UI versions (npm @openpalm/ui) in parallel. The invalidate
3811
+ * call runs first so the GETs see a cold cache and hit the upstreams once. */
3812
+ async function handleRefreshReleases() {
3813
+ releasesLoading = true;
3814
+ uiVersionsLoading = true;
3815
+ await invalidateVersionCache();
3816
+ await Promise.all([loadVersions(), loadReleases()]);
3817
+ }
3789
3818
  async function handleUpgradeStack() {
3790
3819
  if (anyDangerousLoading()) return;
3791
3820
  upgradeLoading = true;
@@ -3803,55 +3832,36 @@ function _page($$renderer, $$props) {
3803
3832
  }
3804
3833
  upgradeLoading = false;
3805
3834
  }
3806
- async function handleSetImageTag(tag, confirmDowngrade = false) {
3807
- if (tagChangeLoading) return;
3808
- tagChangeLoading = true;
3835
+ async function handleSetUnitImageTag(unit, tag, confirmDowngrade = false) {
3836
+ if (unitInstallLoading !== null) return;
3837
+ unitInstallLoading = unit;
3809
3838
  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"}.`;
3839
+ const result = await setUnitImageTag(unit, tag, { confirmDowngrade });
3840
+ operationResult = `${unit} image tag set to ${result.imageTag}. Restarted: ${result.restarted.join(", ") || "none"}.`;
3814
3841
  operationResultType = "success";
3815
- downgradePrompt = null;
3816
- migratePreview = null;
3842
+ unitDowngradePrompt = null;
3843
+ await loadVersions();
3817
3844
  } catch (e) {
3818
- if (e instanceof DowngradeConfirmationRequiredError) downgradePrompt = {
3845
+ if (e instanceof DowngradeConfirmationRequiredError) unitDowngradePrompt = {
3846
+ unit,
3819
3847
  tag,
3820
3848
  currentVersion: e.currentVersion,
3821
3849
  targetVersion: e.targetVersion,
3822
3850
  message: e.message
3823
3851
  };
3824
3852
  else {
3825
- operationResult = `Failed to apply image tag: ${e.message ?? e}`;
3853
+ operationResult = `Failed to apply ${unit} image tag: ${e.message ?? e}`;
3826
3854
  operationResultType = "error";
3827
3855
  }
3828
3856
  }
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;
3857
+ unitInstallLoading = null;
3848
3858
  }
3849
- function handleConfirmDowngrade() {
3850
- if (!downgradePrompt) return;
3851
- handleSetImageTag(downgradePrompt.tag, true);
3859
+ function handleConfirmUnitDowngrade() {
3860
+ if (!unitDowngradePrompt) return;
3861
+ handleSetUnitImageTag(unitDowngradePrompt.unit, unitDowngradePrompt.tag, true);
3852
3862
  }
3853
- function handleCancelDowngrade() {
3854
- downgradePrompt = null;
3863
+ function handleCancelUnitDowngrade() {
3864
+ unitDowngradePrompt = null;
3855
3865
  }
3856
3866
  async function handleDownloadUiVersion(tag) {
3857
3867
  if (uiDownloadLoading) return;
@@ -3914,7 +3924,7 @@ function _page($$renderer, $$props) {
3914
3924
  $$renderer.push(`<!----> `);
3915
3925
  if (updateAvailable() && activeTab !== "updates") {
3916
3926
  $$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>`);
3927
+ $$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
3928
  } else $$renderer.push("<!--[-1-->");
3919
3929
  $$renderer.push(`<!--]--> `);
3920
3930
  TabBar($$renderer, {
@@ -3936,8 +3946,6 @@ function _page($$renderer, $$props) {
3936
3946
  UpdatesTab($$renderer, {
3937
3947
  currentImageTag,
3938
3948
  services,
3939
- selectedImageTag,
3940
- tagChangeLoading,
3941
3949
  anyDangerousLoading: anyDangerousLoading(),
3942
3950
  tokenStored: true,
3943
3951
  upgradeLoading,
@@ -3954,28 +3962,23 @@ function _page($$renderer, $$props) {
3954
3962
  uiDownloadReady,
3955
3963
  uiDownloadRestarting,
3956
3964
  releases,
3965
+ unitTags,
3957
3966
  releasesLoading,
3958
3967
  platformVersion,
3968
+ platformLatest,
3959
3969
  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
- },
3970
+ unitInstallLoading,
3971
+ unitDowngradePrompt,
3972
+ onSetUnitImageTag: (unit, tag) => handleSetUnitImageTag(unit, tag),
3973
+ onConfirmUnitDowngrade: handleConfirmUnitDowngrade,
3974
+ onCancelUnitDowngrade: handleCancelUnitDowngrade,
3972
3975
  onUpgradeStack: handleUpgradeStack,
3973
3976
  onSelectedUiTagChange: (t) => {
3974
3977
  selectedUiTag = t;
3975
3978
  },
3976
3979
  onDownloadUiVersion: handleDownloadUiVersion,
3977
3980
  onRestartApp: handleRestartApp,
3978
- onRefreshReleases: loadReleases
3981
+ onRefreshReleases: handleRefreshReleases
3979
3982
  });
3980
3983
  } else if (activeTab === "recovery") {
3981
3984
  $$renderer.push("<!--[2-->");
@@ -4033,4 +4036,4 @@ function _page($$renderer, $$props) {
4033
4036
  }
4034
4037
 
4035
4038
  export { _page as default };
4036
- //# sourceMappingURL=_page.svelte-DlYG76L7.js.map
4039
+ //# sourceMappingURL=_page.svelte-DM3jnL7B.js.map