@openpalm/ui 0.11.5-rc.2 → 0.11.5-rc.5

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 (365) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/4.Cg0DWfRJ.css +1 -0
  3. package/build/client/_app/immutable/assets/4.Cg0DWfRJ.css.br +0 -0
  4. package/build/client/_app/immutable/assets/4.Cg0DWfRJ.css.gz +0 -0
  5. package/build/client/_app/immutable/chunks/B0yFRekZ.js +3 -0
  6. package/build/client/_app/immutable/chunks/B0yFRekZ.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/B0yFRekZ.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/B6TDOH9N.js +5 -0
  9. package/build/client/_app/immutable/chunks/B6TDOH9N.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/B6TDOH9N.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{Dd6EPzlG.js → BAaXfhM-.js} +1 -1
  12. package/build/client/_app/immutable/chunks/BAaXfhM-.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/BAaXfhM-.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{DNTZUJo4.js → BKYOLYrG.js} +4 -4
  15. package/build/client/_app/immutable/chunks/BKYOLYrG.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/BKYOLYrG.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{DAn-iPjx.js → B_FOicoS.js} +1 -1
  18. package/build/client/_app/immutable/chunks/B_FOicoS.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/B_FOicoS.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/Bc91qquS.js +1 -0
  21. package/build/client/_app/immutable/chunks/Bc91qquS.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/Bc91qquS.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{Z2W9flFH.js → C0etjiv9.js} +2 -2
  24. package/build/client/_app/immutable/chunks/C0etjiv9.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/C0etjiv9.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/CDYZd3Dt.js +1 -0
  27. package/build/client/_app/immutable/chunks/CDYZd3Dt.js.br +1 -0
  28. package/build/client/_app/immutable/chunks/CDYZd3Dt.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/{Cu0zcwlV.js → CghSfF6U.js} +1 -1
  30. package/build/client/_app/immutable/chunks/CghSfF6U.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/CghSfF6U.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/DTZmSm97.js +1 -0
  33. package/build/client/_app/immutable/chunks/DTZmSm97.js.br +2 -0
  34. package/build/client/_app/immutable/chunks/DTZmSm97.js.gz +0 -0
  35. package/build/client/_app/immutable/entry/{app.LopPl7G5.js → app.CIC2xFmj.js} +2 -2
  36. package/build/client/_app/immutable/entry/app.CIC2xFmj.js.br +0 -0
  37. package/build/client/_app/immutable/entry/app.CIC2xFmj.js.gz +0 -0
  38. package/build/client/_app/immutable/entry/start.PCdanKMO.js +1 -0
  39. package/build/client/_app/immutable/entry/start.PCdanKMO.js.br +0 -0
  40. package/build/client/_app/immutable/entry/start.PCdanKMO.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/{0.n1Zne31Q.js → 0.CmaZoW6Y.js} +1 -1
  42. package/build/client/_app/immutable/nodes/0.CmaZoW6Y.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/0.CmaZoW6Y.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/{1.viUd6sTI.js → 1.BhQMYP2N.js} +1 -1
  45. package/build/client/_app/immutable/nodes/1.BhQMYP2N.js.br +3 -0
  46. package/build/client/_app/immutable/nodes/1.BhQMYP2N.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/2.C-MzgTuq.js +1 -0
  48. package/build/client/_app/immutable/nodes/2.C-MzgTuq.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/2.C-MzgTuq.js.gz +0 -0
  50. package/build/client/_app/immutable/nodes/3.DXmMKZyn.js +1 -0
  51. package/build/client/_app/immutable/nodes/3.DXmMKZyn.js.br +0 -0
  52. package/build/client/_app/immutable/nodes/3.DXmMKZyn.js.gz +0 -0
  53. package/build/client/_app/immutable/nodes/4.B9yFE6HR.js +19 -0
  54. package/build/client/_app/immutable/nodes/4.B9yFE6HR.js.br +0 -0
  55. package/build/client/_app/immutable/nodes/4.B9yFE6HR.js.gz +0 -0
  56. package/build/client/_app/immutable/nodes/{5.OYZYGgdQ.js → 5.BeNqQzJI.js} +2 -2
  57. package/build/client/_app/immutable/nodes/5.BeNqQzJI.js.br +0 -0
  58. package/build/client/_app/immutable/nodes/5.BeNqQzJI.js.gz +0 -0
  59. package/build/client/_app/immutable/nodes/{6.D4Oy0UwK.js → 6.t6Qb5QFT.js} +1 -1
  60. package/build/client/_app/immutable/nodes/6.t6Qb5QFT.js.br +0 -0
  61. package/build/client/_app/immutable/nodes/6.t6Qb5QFT.js.gz +0 -0
  62. package/build/client/_app/immutable/nodes/{7.BvvIQZgW.js → 7.D4yXtdUW.js} +1 -1
  63. package/build/client/_app/immutable/nodes/7.D4yXtdUW.js.br +0 -0
  64. package/build/client/_app/immutable/nodes/7.D4yXtdUW.js.gz +0 -0
  65. package/build/client/_app/immutable/nodes/{8.BypRBgKA.js → 8.CaUTWkJ5.js} +1 -1
  66. package/build/client/_app/immutable/nodes/8.CaUTWkJ5.js.br +0 -0
  67. package/build/client/_app/immutable/nodes/8.CaUTWkJ5.js.gz +0 -0
  68. package/build/client/_app/immutable/nodes/{9.Cvhy8NSW.js → 9.B1IAKpfH.js} +1 -1
  69. package/build/client/_app/immutable/nodes/9.B1IAKpfH.js.br +0 -0
  70. package/build/client/_app/immutable/nodes/9.B1IAKpfH.js.gz +0 -0
  71. package/build/client/_app/version.json +1 -1
  72. package/build/client/_app/version.json.br +1 -1
  73. package/build/client/_app/version.json.gz +0 -0
  74. package/build/server/chunks/{0-DYSdORF4.js → 0-C0Wm0uh4.js} +2 -2
  75. package/build/server/chunks/{0-DYSdORF4.js.map → 0-C0Wm0uh4.js.map} +1 -1
  76. package/build/server/chunks/1-BO1FboQo.js +9 -0
  77. package/build/server/chunks/{1-DriLpuch.js.map → 1-BO1FboQo.js.map} +1 -1
  78. package/build/server/chunks/{2-CTCIjKJp.js → 2-wNOz2qR7.js} +2 -2
  79. package/build/server/chunks/{2-CTCIjKJp.js.map → 2-wNOz2qR7.js.map} +1 -1
  80. package/build/server/chunks/{3-PAUGKR-M.js → 3-CMcVVZ5t.js} +2 -2
  81. package/build/server/chunks/{3-PAUGKR-M.js.map → 3-CMcVVZ5t.js.map} +1 -1
  82. package/build/server/chunks/4-Cy42KZEq.js +9 -0
  83. package/build/server/chunks/{4-ipq2Fo20.js.map → 4-Cy42KZEq.js.map} +1 -1
  84. package/build/server/chunks/5-wTAacz_u.js +9 -0
  85. package/build/server/chunks/{5-CaAZ_pnW.js.map → 5-wTAacz_u.js.map} +1 -1
  86. package/build/server/chunks/6-CwuJSZNK.js +9 -0
  87. package/build/server/chunks/{6-Djkq9gPL.js.map → 6-CwuJSZNK.js.map} +1 -1
  88. package/build/server/chunks/7-BhucvAxb.js +9 -0
  89. package/build/server/chunks/{7-Bw1DwzQC.js.map → 7-BhucvAxb.js.map} +1 -1
  90. package/build/server/chunks/{8-CrXn8AWD.js → 8-BbmPm5QQ.js} +3 -3
  91. package/build/server/chunks/{8-CrXn8AWD.js.map → 8-BbmPm5QQ.js.map} +1 -1
  92. package/build/server/chunks/{9-yLwdBbDq.js → 9-BCmr-315.js} +2 -2
  93. package/build/server/chunks/{9-yLwdBbDq.js.map → 9-BCmr-315.js.map} +1 -1
  94. package/build/server/chunks/{ChatMessage-jkPoi0IR.js → ChatMessage-DV_A9qbU.js} +2 -2
  95. package/build/server/chunks/{ChatMessage-jkPoi0IR.js.map → ChatMessage-DV_A9qbU.js.map} +1 -1
  96. package/build/server/chunks/{Navbar-C72vlTUN.js → Navbar-Djg-dawo.js} +39 -3
  97. package/build/server/chunks/Navbar-Djg-dawo.js.map +1 -0
  98. package/build/server/chunks/{_page.svelte-DRU3ay4a.js → _page.svelte-0Fseybo3.js} +3 -3
  99. package/build/server/chunks/{_page.svelte-DRU3ay4a.js.map → _page.svelte-0Fseybo3.js.map} +1 -1
  100. package/build/server/chunks/{_page.svelte-BBHjv6FS.js → _page.svelte-C41AgWxR.js} +5 -5
  101. package/build/server/chunks/{_page.svelte-BBHjv6FS.js.map → _page.svelte-C41AgWxR.js.map} +1 -1
  102. package/build/server/chunks/{_page.svelte-CtyxfG3i.js → _page.svelte-CF0NIwNQ.js} +5 -5
  103. package/build/server/chunks/{_page.svelte-CtyxfG3i.js.map → _page.svelte-CF0NIwNQ.js.map} +1 -1
  104. package/build/server/chunks/{_page.svelte-DzrHD3Dp.js → _page.svelte-DHges4Pl.js} +6 -6
  105. package/build/server/chunks/{_page.svelte-DzrHD3Dp.js.map → _page.svelte-DHges4Pl.js.map} +1 -1
  106. package/build/server/chunks/{_page.svelte-C6_O57B-.js → _page.svelte-GBRvAIuJ.js} +96 -19
  107. package/build/server/chunks/_page.svelte-GBRvAIuJ.js.map +1 -0
  108. package/build/server/chunks/{_server.ts-CqKt78Pt.js → _server.ts-1QDB0bka.js} +4 -4
  109. package/build/server/chunks/{_server.ts-CqKt78Pt.js.map → _server.ts-1QDB0bka.js.map} +1 -1
  110. package/build/server/chunks/{_server.ts-DWuaJT7_.js → _server.ts-8gRao4pC.js} +4 -4
  111. package/build/server/chunks/{_server.ts-DWuaJT7_.js.map → _server.ts-8gRao4pC.js.map} +1 -1
  112. package/build/server/chunks/{_server.ts-D13Et6Nm.js → _server.ts-9P7a99w7.js} +4 -4
  113. package/build/server/chunks/{_server.ts-D13Et6Nm.js.map → _server.ts-9P7a99w7.js.map} +1 -1
  114. package/build/server/chunks/{_server.ts-CBEORQmf.js → _server.ts-AOvZbE_q.js} +5 -5
  115. package/build/server/chunks/{_server.ts-CBEORQmf.js.map → _server.ts-AOvZbE_q.js.map} +1 -1
  116. package/build/server/chunks/{_server.ts-BaUBfxz3.js → _server.ts-B35VhBNb.js} +4 -4
  117. package/build/server/chunks/{_server.ts-BaUBfxz3.js.map → _server.ts-B35VhBNb.js.map} +1 -1
  118. package/build/server/chunks/{_server.ts-dXPW3qhK.js → _server.ts-B3OHtJvn.js} +5 -5
  119. package/build/server/chunks/{_server.ts-dXPW3qhK.js.map → _server.ts-B3OHtJvn.js.map} +1 -1
  120. package/build/server/chunks/{_server.ts-D7mVp5wx.js → _server.ts-BCLgKgV5.js} +4 -4
  121. package/build/server/chunks/{_server.ts-D7mVp5wx.js.map → _server.ts-BCLgKgV5.js.map} +1 -1
  122. package/build/server/chunks/{_server.ts-NLmps3nz.js → _server.ts-BCtRrhpo.js} +4 -4
  123. package/build/server/chunks/{_server.ts-NLmps3nz.js.map → _server.ts-BCtRrhpo.js.map} +1 -1
  124. package/build/server/chunks/{_server.ts-DXWUvegr.js → _server.ts-BEir1hXE.js} +4 -4
  125. package/build/server/chunks/{_server.ts-DXWUvegr.js.map → _server.ts-BEir1hXE.js.map} +1 -1
  126. package/build/server/chunks/{_server.ts-DUJMugN3.js → _server.ts-BGhuGAqU.js} +4 -4
  127. package/build/server/chunks/{_server.ts-DUJMugN3.js.map → _server.ts-BGhuGAqU.js.map} +1 -1
  128. package/build/server/chunks/{_server.ts-BZU8fpG9.js → _server.ts-BMpV32HH.js} +4 -4
  129. package/build/server/chunks/{_server.ts-BZU8fpG9.js.map → _server.ts-BMpV32HH.js.map} +1 -1
  130. package/build/server/chunks/{_server.ts-BWz851yG.js → _server.ts-BNfKymFO.js} +4 -4
  131. package/build/server/chunks/{_server.ts-BWz851yG.js.map → _server.ts-BNfKymFO.js.map} +1 -1
  132. package/build/server/chunks/{_server.ts-rjMXs5w6.js → _server.ts-BPRY2j_2.js} +4 -4
  133. package/build/server/chunks/{_server.ts-rjMXs5w6.js.map → _server.ts-BPRY2j_2.js.map} +1 -1
  134. package/build/server/chunks/{_server.ts-BhS7lUNN.js → _server.ts-BPu3WMA2.js} +4 -4
  135. package/build/server/chunks/{_server.ts-BhS7lUNN.js.map → _server.ts-BPu3WMA2.js.map} +1 -1
  136. package/build/server/chunks/{_server.ts-zHhiafCS.js → _server.ts-BTD23brV.js} +4 -4
  137. package/build/server/chunks/{_server.ts-zHhiafCS.js.map → _server.ts-BTD23brV.js.map} +1 -1
  138. package/build/server/chunks/{_server.ts-Cln7YA08.js → _server.ts-BUexy9Bs.js} +4 -4
  139. package/build/server/chunks/{_server.ts-Cln7YA08.js.map → _server.ts-BUexy9Bs.js.map} +1 -1
  140. package/build/server/chunks/{_server.ts-DzWfvYWd.js → _server.ts-BWuDPAZI.js} +2 -2
  141. package/build/server/chunks/{_server.ts-DzWfvYWd.js.map → _server.ts-BWuDPAZI.js.map} +1 -1
  142. package/build/server/chunks/{_server.ts-IsQCU7Zw.js → _server.ts-B_A1pH6i.js} +4 -4
  143. package/build/server/chunks/{_server.ts-IsQCU7Zw.js.map → _server.ts-B_A1pH6i.js.map} +1 -1
  144. package/build/server/chunks/{_server.ts-DzNUAWRG.js → _server.ts-BbpEaFjU.js} +4 -4
  145. package/build/server/chunks/{_server.ts-DzNUAWRG.js.map → _server.ts-BbpEaFjU.js.map} +1 -1
  146. package/build/server/chunks/{_server.ts-9sR9fd3C.js → _server.ts-BiiFhOLE.js} +5 -5
  147. package/build/server/chunks/{_server.ts-9sR9fd3C.js.map → _server.ts-BiiFhOLE.js.map} +1 -1
  148. package/build/server/chunks/{_server.ts-BDtgFSkw.js → _server.ts-Bq99b7U6.js} +4 -4
  149. package/build/server/chunks/{_server.ts-BDtgFSkw.js.map → _server.ts-Bq99b7U6.js.map} +1 -1
  150. package/build/server/chunks/{_server.ts-C2din2_5.js → _server.ts-BvCT6Mjh.js} +4 -4
  151. package/build/server/chunks/{_server.ts-C2din2_5.js.map → _server.ts-BvCT6Mjh.js.map} +1 -1
  152. package/build/server/chunks/{_server.ts-9Qea4tbm.js → _server.ts-Bw7wH5nP.js} +4 -4
  153. package/build/server/chunks/{_server.ts-9Qea4tbm.js.map → _server.ts-Bw7wH5nP.js.map} +1 -1
  154. package/build/server/chunks/{_server.ts-DUqQgjZv.js → _server.ts-C3Y82EbX.js} +4 -4
  155. package/build/server/chunks/{_server.ts-DUqQgjZv.js.map → _server.ts-C3Y82EbX.js.map} +1 -1
  156. package/build/server/chunks/{_server.ts-CF9SWt4o.js → _server.ts-C58ziWGi.js} +4 -4
  157. package/build/server/chunks/{_server.ts-CF9SWt4o.js.map → _server.ts-C58ziWGi.js.map} +1 -1
  158. package/build/server/chunks/{_server.ts-B-boVJcF.js → _server.ts-C8NNR7lm.js} +4 -4
  159. package/build/server/chunks/{_server.ts-B-boVJcF.js.map → _server.ts-C8NNR7lm.js.map} +1 -1
  160. package/build/server/chunks/{_server.ts-DMh6Tg2b.js → _server.ts-CHvr_s0m.js} +4 -4
  161. package/build/server/chunks/{_server.ts-DMh6Tg2b.js.map → _server.ts-CHvr_s0m.js.map} +1 -1
  162. package/build/server/chunks/{_server.ts-nTzGdtnW.js → _server.ts-CPKa2U2F.js} +4 -4
  163. package/build/server/chunks/{_server.ts-nTzGdtnW.js.map → _server.ts-CPKa2U2F.js.map} +1 -1
  164. package/build/server/chunks/{_server.ts-D9kpjwUe.js → _server.ts-CQmJIAUn.js} +4 -4
  165. package/build/server/chunks/{_server.ts-D9kpjwUe.js.map → _server.ts-CQmJIAUn.js.map} +1 -1
  166. package/build/server/chunks/{_server.ts-CU1zUqIs.js → _server.ts-CSzLOBbB.js} +5 -5
  167. package/build/server/chunks/{_server.ts-CU1zUqIs.js.map → _server.ts-CSzLOBbB.js.map} +1 -1
  168. package/build/server/chunks/_server.ts-CWWHoyPz.js +48 -0
  169. package/build/server/chunks/_server.ts-CWWHoyPz.js.map +1 -0
  170. package/build/server/chunks/{_server.ts-ILHo2l5u.js → _server.ts-CakB2g2B.js} +3 -3
  171. package/build/server/chunks/{_server.ts-ILHo2l5u.js.map → _server.ts-CakB2g2B.js.map} +1 -1
  172. package/build/server/chunks/{_server.ts-CPdyvrte.js → _server.ts-CbB7X8WD.js} +6 -6
  173. package/build/server/chunks/{_server.ts-CPdyvrte.js.map → _server.ts-CbB7X8WD.js.map} +1 -1
  174. package/build/server/chunks/{_server.ts-CbKiZYKJ.js → _server.ts-Ch5VrU5z.js} +4 -4
  175. package/build/server/chunks/{_server.ts-CbKiZYKJ.js.map → _server.ts-Ch5VrU5z.js.map} +1 -1
  176. package/build/server/chunks/{_server.ts-owfxHChR.js → _server.ts-CmcgtPlf.js} +5 -5
  177. package/build/server/chunks/{_server.ts-owfxHChR.js.map → _server.ts-CmcgtPlf.js.map} +1 -1
  178. package/build/server/chunks/{_server.ts-CWmKP3RO.js → _server.ts-Cu3yIoGR.js} +18 -5
  179. package/build/server/chunks/{_server.ts-CWmKP3RO.js.map → _server.ts-Cu3yIoGR.js.map} +1 -1
  180. package/build/server/chunks/{_server.ts-agyoOrvg.js → _server.ts-CuEcjgfs.js} +4 -4
  181. package/build/server/chunks/{_server.ts-agyoOrvg.js.map → _server.ts-CuEcjgfs.js.map} +1 -1
  182. package/build/server/chunks/{_server.ts-DTDGaSBp.js → _server.ts-CyTEh-kp.js} +6 -6
  183. package/build/server/chunks/{_server.ts-DTDGaSBp.js.map → _server.ts-CyTEh-kp.js.map} +1 -1
  184. package/build/server/chunks/{_server.ts-xI2x8ziC.js → _server.ts-CyxjwCIW.js} +4 -4
  185. package/build/server/chunks/{_server.ts-xI2x8ziC.js.map → _server.ts-CyxjwCIW.js.map} +1 -1
  186. package/build/server/chunks/{_server.ts-DPgmVByY.js → _server.ts-CzHLF3XJ.js} +2 -2
  187. package/build/server/chunks/{_server.ts-DPgmVByY.js.map → _server.ts-CzHLF3XJ.js.map} +1 -1
  188. package/build/server/chunks/{_server.ts-Bn_yGKDn.js → _server.ts-CzcX98RF.js} +5 -5
  189. package/build/server/chunks/{_server.ts-Bn_yGKDn.js.map → _server.ts-CzcX98RF.js.map} +1 -1
  190. package/build/server/chunks/{_server.ts-BipzCnqX.js → _server.ts-D4hS029K.js} +6 -6
  191. package/build/server/chunks/{_server.ts-BipzCnqX.js.map → _server.ts-D4hS029K.js.map} +1 -1
  192. package/build/server/chunks/{_server.ts-DjY1Wxwi.js → _server.ts-D5KmG8Iz.js} +2 -2
  193. package/build/server/chunks/{_server.ts-DjY1Wxwi.js.map → _server.ts-D5KmG8Iz.js.map} +1 -1
  194. package/build/server/chunks/{_server.ts-C2xwF6p0.js → _server.ts-D6bq6_Fp.js} +6 -6
  195. package/build/server/chunks/{_server.ts-C2xwF6p0.js.map → _server.ts-D6bq6_Fp.js.map} +1 -1
  196. package/build/server/chunks/{_server.ts-CfMgNVBt.js → _server.ts-DEL6C5fs.js} +4 -4
  197. package/build/server/chunks/{_server.ts-CfMgNVBt.js.map → _server.ts-DEL6C5fs.js.map} +1 -1
  198. package/build/server/chunks/{_server.ts-BybgwfUH.js → _server.ts-DLMyOePt.js} +4 -4
  199. package/build/server/chunks/_server.ts-DLMyOePt.js.map +1 -0
  200. package/build/server/chunks/{_server.ts-CffocV9v.js → _server.ts-DLkvAnm7.js} +4 -4
  201. package/build/server/chunks/{_server.ts-CffocV9v.js.map → _server.ts-DLkvAnm7.js.map} +1 -1
  202. package/build/server/chunks/{_server.ts-CZ1QyKiP.js → _server.ts-DTVKXoI5.js} +4 -4
  203. package/build/server/chunks/{_server.ts-CZ1QyKiP.js.map → _server.ts-DTVKXoI5.js.map} +1 -1
  204. package/build/server/chunks/{_server.ts-QG_Io1nH.js → _server.ts-DZ7Ko_32.js} +4 -4
  205. package/build/server/chunks/{_server.ts-QG_Io1nH.js.map → _server.ts-DZ7Ko_32.js.map} +1 -1
  206. package/build/server/chunks/{_server.ts-DEpPzJ18.js → _server.ts-DZY0Qpnk.js} +4 -4
  207. package/build/server/chunks/{_server.ts-DEpPzJ18.js.map → _server.ts-DZY0Qpnk.js.map} +1 -1
  208. package/build/server/chunks/{_server.ts-1UmhXPK8.js → _server.ts-DcW9CTcB.js} +4 -4
  209. package/build/server/chunks/{_server.ts-1UmhXPK8.js.map → _server.ts-DcW9CTcB.js.map} +1 -1
  210. package/build/server/chunks/{_server.ts-BXz3inxG.js → _server.ts-Df17RBWC.js} +5 -5
  211. package/build/server/chunks/{_server.ts-BXz3inxG.js.map → _server.ts-Df17RBWC.js.map} +1 -1
  212. package/build/server/chunks/{_server.ts-DaKMiVFv.js → _server.ts-Dh9SJATt.js} +4 -4
  213. package/build/server/chunks/{_server.ts-DaKMiVFv.js.map → _server.ts-Dh9SJATt.js.map} +1 -1
  214. package/build/server/chunks/{_server.ts-Dhr817vY.js → _server.ts-DlDgeWtr.js} +4 -4
  215. package/build/server/chunks/{_server.ts-Dhr817vY.js.map → _server.ts-DlDgeWtr.js.map} +1 -1
  216. package/build/server/chunks/{_server.ts-DueRmcvI.js → _server.ts-Dmtbp8AT.js} +5 -5
  217. package/build/server/chunks/{_server.ts-DueRmcvI.js.map → _server.ts-Dmtbp8AT.js.map} +1 -1
  218. package/build/server/chunks/{_server.ts-FJA0FE83.js → _server.ts-Dnq1yxVI.js} +6 -6
  219. package/build/server/chunks/{_server.ts-FJA0FE83.js.map → _server.ts-Dnq1yxVI.js.map} +1 -1
  220. package/build/server/chunks/{_server.ts-DHjryCBX.js → _server.ts-DolRZ_5Z.js} +4 -4
  221. package/build/server/chunks/{_server.ts-DHjryCBX.js.map → _server.ts-DolRZ_5Z.js.map} +1 -1
  222. package/build/server/chunks/{_server.ts-CPTHGxCn.js → _server.ts-DrccDqL8.js} +4 -4
  223. package/build/server/chunks/{_server.ts-CPTHGxCn.js.map → _server.ts-DrccDqL8.js.map} +1 -1
  224. package/build/server/chunks/{_server.ts-CfOeqfql.js → _server.ts-Drxntihb.js} +5 -5
  225. package/build/server/chunks/{_server.ts-CfOeqfql.js.map → _server.ts-Drxntihb.js.map} +1 -1
  226. package/build/server/chunks/{_server.ts-DOiOnglY.js → _server.ts-Du4lTXoC.js} +5 -5
  227. package/build/server/chunks/{_server.ts-DOiOnglY.js.map → _server.ts-Du4lTXoC.js.map} +1 -1
  228. package/build/server/chunks/{_server.ts-DhJ3EQ1-.js → _server.ts-Dvo786k1.js} +5 -5
  229. package/build/server/chunks/{_server.ts-DhJ3EQ1-.js.map → _server.ts-Dvo786k1.js.map} +1 -1
  230. package/build/server/chunks/{_server.ts-DC8UQBex.js → _server.ts-DxE9zbbG.js} +4 -4
  231. package/build/server/chunks/{_server.ts-DC8UQBex.js.map → _server.ts-DxE9zbbG.js.map} +1 -1
  232. package/build/server/chunks/{_server.ts-DEFxa6iW.js → _server.ts-DzVt4tZV.js} +4 -4
  233. package/build/server/chunks/{_server.ts-DEFxa6iW.js.map → _server.ts-DzVt4tZV.js.map} +1 -1
  234. package/build/server/chunks/{_server.ts-BIdpky_N.js → _server.ts-GnnvjDGL.js} +4 -4
  235. package/build/server/chunks/{_server.ts-BIdpky_N.js.map → _server.ts-GnnvjDGL.js.map} +1 -1
  236. package/build/server/chunks/{_server.ts-rTKNgtmO.js → _server.ts-H1fnqBYP.js} +4 -4
  237. package/build/server/chunks/{_server.ts-rTKNgtmO.js.map → _server.ts-H1fnqBYP.js.map} +1 -1
  238. package/build/server/chunks/{_server.ts-CRr08SwC.js → _server.ts-OVberUvp.js} +6 -6
  239. package/build/server/chunks/{_server.ts-CRr08SwC.js.map → _server.ts-OVberUvp.js.map} +1 -1
  240. package/build/server/chunks/{_server.ts-NsPlw6SY.js → _server.ts-Oh6upxFv.js} +4 -4
  241. package/build/server/chunks/{_server.ts-NsPlw6SY.js.map → _server.ts-Oh6upxFv.js.map} +1 -1
  242. package/build/server/chunks/{_server.ts-COna958t.js → _server.ts-TkRG9AFn.js} +4 -4
  243. package/build/server/chunks/{_server.ts-COna958t.js.map → _server.ts-TkRG9AFn.js.map} +1 -1
  244. package/build/server/chunks/{_server.ts-MNKeYGnJ.js → _server.ts-UwHoFWx1.js} +2 -2
  245. package/build/server/chunks/{_server.ts-MNKeYGnJ.js.map → _server.ts-UwHoFWx1.js.map} +1 -1
  246. package/build/server/chunks/{_server.ts-DEKm5x2n.js → _server.ts-XArez5bY.js} +2 -2
  247. package/build/server/chunks/{_server.ts-DEKm5x2n.js.map → _server.ts-XArez5bY.js.map} +1 -1
  248. package/build/server/chunks/{_server.ts-CYQK3G4x.js → _server.ts-ZfDsuW2E.js} +5 -5
  249. package/build/server/chunks/{_server.ts-CYQK3G4x.js.map → _server.ts-ZfDsuW2E.js.map} +1 -1
  250. package/build/server/chunks/{_server.ts-DYdXyLLa.js → _server.ts-chaYrNFx.js} +5 -5
  251. package/build/server/chunks/{_server.ts-DYdXyLLa.js.map → _server.ts-chaYrNFx.js.map} +1 -1
  252. package/build/server/chunks/{_server.ts-C9PqkEga.js → _server.ts-lZxRvx5G.js} +4 -4
  253. package/build/server/chunks/{_server.ts-C9PqkEga.js.map → _server.ts-lZxRvx5G.js.map} +1 -1
  254. package/build/server/chunks/{_server.ts-DcKEI2Ff.js → _server.ts-v7meNBSR.js} +4 -4
  255. package/build/server/chunks/{_server.ts-DcKEI2Ff.js.map → _server.ts-v7meNBSR.js.map} +1 -1
  256. package/build/server/chunks/{_server.ts-CO62Q41P.js → _server.ts-vSoEzokn.js} +4 -4
  257. package/build/server/chunks/{_server.ts-CO62Q41P.js.map → _server.ts-vSoEzokn.js.map} +1 -1
  258. package/build/server/chunks/{_server.ts-B3CTgC7e.js → _server.ts-x3-1Iy5T.js} +4 -4
  259. package/build/server/chunks/{_server.ts-B3CTgC7e.js.map → _server.ts-x3-1Iy5T.js.map} +1 -1
  260. package/build/server/chunks/{_server.ts-vrMFfkPv.js → _server.ts-z9JFYptL.js} +4 -4
  261. package/build/server/chunks/{_server.ts-vrMFfkPv.js.map → _server.ts-z9JFYptL.js.map} +1 -1
  262. package/build/server/chunks/{addon-helpers-DFEyMJhA.js → addon-helpers-o7ish5mE.js} +3 -3
  263. package/build/server/chunks/{addon-helpers-DFEyMJhA.js.map → addon-helpers-o7ish5mE.js.map} +1 -1
  264. package/build/server/chunks/{akm-CxqalIXt.js → akm-W9nWVWkP.js} +2 -2
  265. package/build/server/chunks/{akm-CxqalIXt.js.map → akm-W9nWVWkP.js.map} +1 -1
  266. package/build/server/chunks/{client-DsJcfz5L.js → client-BxrkCo8A.js} +2 -2
  267. package/build/server/chunks/{client-DsJcfz5L.js.map → client-BxrkCo8A.js.map} +1 -1
  268. package/build/server/chunks/{config-gWehiHgc.js → config-DHWE6_Oh.js} +2 -2
  269. package/build/server/chunks/{config-gWehiHgc.js.map → config-DHWE6_Oh.js.map} +1 -1
  270. package/build/server/chunks/{docker-7X4MmyTh.js → docker-DTmz3vyS.js} +2 -2
  271. package/build/server/chunks/{docker-7X4MmyTh.js.map → docker-DTmz3vyS.js.map} +1 -1
  272. package/build/server/chunks/{endpoints-CtFzewjq.js → endpoints-DeqIjeS-.js} +19 -6
  273. package/build/server/chunks/endpoints-DeqIjeS-.js.map +1 -0
  274. package/build/server/chunks/{environment-WkaY56eW.js → environment-eUM4Nrm3.js} +2 -2
  275. package/build/server/chunks/{environment-WkaY56eW.js.map → environment-eUM4Nrm3.js.map} +1 -1
  276. package/build/server/chunks/{error.svelte-wQDMzENS.js → error.svelte-C1YZdXu0.js} +4 -4
  277. package/build/server/chunks/{error.svelte-wQDMzENS.js.map → error.svelte-C1YZdXu0.js.map} +1 -1
  278. package/build/server/chunks/{helpers-DHqjUGTB.js → helpers-BxClonOR.js} +3 -3
  279. package/build/server/chunks/{helpers-DHqjUGTB.js.map → helpers-BxClonOR.js.map} +1 -1
  280. package/build/server/chunks/{hooks.server-BT9BE8vm.js → hooks.server-BbqU1Xkl.js} +6 -6
  281. package/build/server/chunks/hooks.server-BbqU1Xkl.js.map +1 -0
  282. package/build/server/chunks/{http-oyGIz0mI.js → http-B4lcqCl2.js} +2 -2
  283. package/build/server/chunks/{http-oyGIz0mI.js.map → http-B4lcqCl2.js.map} +1 -1
  284. package/build/server/chunks/{internal-BxZRZr_z.js → internal-BqydNqHi.js} +3 -3
  285. package/build/server/chunks/{internal-BxZRZr_z.js.map → internal-BqydNqHi.js.map} +1 -1
  286. package/build/server/chunks/{session-cookie-xaN0BnnT.js → session-cookie-BhONF37G.js} +2 -2
  287. package/build/server/chunks/{session-cookie-xaN0BnnT.js.map → session-cookie-BhONF37G.js.map} +1 -1
  288. package/build/server/chunks/{setup-deploy-LcTBIlO0.js → setup-deploy-XJpbNV-N.js} +2 -2
  289. package/build/server/chunks/{setup-deploy-LcTBIlO0.js.map → setup-deploy-XJpbNV-N.js.map} +1 -1
  290. package/build/server/chunks/{src-Bqr11v--.js → src-DGGmhx-_.js} +494 -128
  291. package/build/server/chunks/src-DGGmhx-_.js.map +1 -0
  292. package/build/server/chunks/{state-Cp7JnmAS.js → state-Dd9gBPIF.js} +2 -2
  293. package/build/server/chunks/{state-Cp7JnmAS.js.map → state-Dd9gBPIF.js.map} +1 -1
  294. package/build/server/chunks/theme-state.svelte-_CMr5Hu9.js.map +1 -1
  295. package/build/server/index.js +2 -2
  296. package/build/server/manifest.js +94 -87
  297. package/build/server/manifest.js.map +1 -1
  298. package/package.json +3 -2
  299. package/build/client/_app/immutable/assets/4.Dplzd8Dq.css +0 -1
  300. package/build/client/_app/immutable/assets/4.Dplzd8Dq.css.br +0 -0
  301. package/build/client/_app/immutable/assets/4.Dplzd8Dq.css.gz +0 -0
  302. package/build/client/_app/immutable/chunks/B29IM9zg.js +0 -1
  303. package/build/client/_app/immutable/chunks/B29IM9zg.js.br +0 -0
  304. package/build/client/_app/immutable/chunks/B29IM9zg.js.gz +0 -0
  305. package/build/client/_app/immutable/chunks/BZzNcvj6.js +0 -1
  306. package/build/client/_app/immutable/chunks/BZzNcvj6.js.br +0 -2
  307. package/build/client/_app/immutable/chunks/BZzNcvj6.js.gz +0 -0
  308. package/build/client/_app/immutable/chunks/Cu0zcwlV.js.br +0 -0
  309. package/build/client/_app/immutable/chunks/Cu0zcwlV.js.gz +0 -0
  310. package/build/client/_app/immutable/chunks/Cue0EpfJ.js +0 -3
  311. package/build/client/_app/immutable/chunks/Cue0EpfJ.js.br +0 -0
  312. package/build/client/_app/immutable/chunks/Cue0EpfJ.js.gz +0 -0
  313. package/build/client/_app/immutable/chunks/DAn-iPjx.js.br +0 -0
  314. package/build/client/_app/immutable/chunks/DAn-iPjx.js.gz +0 -0
  315. package/build/client/_app/immutable/chunks/DNTZUJo4.js.br +0 -0
  316. package/build/client/_app/immutable/chunks/DNTZUJo4.js.gz +0 -0
  317. package/build/client/_app/immutable/chunks/Dd6EPzlG.js.br +0 -0
  318. package/build/client/_app/immutable/chunks/Dd6EPzlG.js.gz +0 -0
  319. package/build/client/_app/immutable/chunks/DhD65Brz.js +0 -1
  320. package/build/client/_app/immutable/chunks/DhD65Brz.js.br +0 -1
  321. package/build/client/_app/immutable/chunks/DhD65Brz.js.gz +0 -0
  322. package/build/client/_app/immutable/chunks/Z2W9flFH.js.br +0 -0
  323. package/build/client/_app/immutable/chunks/Z2W9flFH.js.gz +0 -0
  324. package/build/client/_app/immutable/chunks/pnb2UBxa.js +0 -5
  325. package/build/client/_app/immutable/chunks/pnb2UBxa.js.br +0 -0
  326. package/build/client/_app/immutable/chunks/pnb2UBxa.js.gz +0 -0
  327. package/build/client/_app/immutable/entry/app.LopPl7G5.js.br +0 -0
  328. package/build/client/_app/immutable/entry/app.LopPl7G5.js.gz +0 -0
  329. package/build/client/_app/immutable/entry/start.Cg5Afe6E.js +0 -1
  330. package/build/client/_app/immutable/entry/start.Cg5Afe6E.js.br +0 -1
  331. package/build/client/_app/immutable/entry/start.Cg5Afe6E.js.gz +0 -0
  332. package/build/client/_app/immutable/nodes/0.n1Zne31Q.js.br +0 -0
  333. package/build/client/_app/immutable/nodes/0.n1Zne31Q.js.gz +0 -0
  334. package/build/client/_app/immutable/nodes/1.viUd6sTI.js.br +0 -3
  335. package/build/client/_app/immutable/nodes/1.viUd6sTI.js.gz +0 -0
  336. package/build/client/_app/immutable/nodes/2.DsX_M4-Z.js +0 -1
  337. package/build/client/_app/immutable/nodes/2.DsX_M4-Z.js.br +0 -0
  338. package/build/client/_app/immutable/nodes/2.DsX_M4-Z.js.gz +0 -0
  339. package/build/client/_app/immutable/nodes/3.DVc7iZMv.js +0 -1
  340. package/build/client/_app/immutable/nodes/3.DVc7iZMv.js.br +0 -0
  341. package/build/client/_app/immutable/nodes/3.DVc7iZMv.js.gz +0 -0
  342. package/build/client/_app/immutable/nodes/4.CsYXQz3Y.js +0 -19
  343. package/build/client/_app/immutable/nodes/4.CsYXQz3Y.js.br +0 -0
  344. package/build/client/_app/immutable/nodes/4.CsYXQz3Y.js.gz +0 -0
  345. package/build/client/_app/immutable/nodes/5.OYZYGgdQ.js.br +0 -0
  346. package/build/client/_app/immutable/nodes/5.OYZYGgdQ.js.gz +0 -0
  347. package/build/client/_app/immutable/nodes/6.D4Oy0UwK.js.br +0 -0
  348. package/build/client/_app/immutable/nodes/6.D4Oy0UwK.js.gz +0 -0
  349. package/build/client/_app/immutable/nodes/7.BvvIQZgW.js.br +0 -0
  350. package/build/client/_app/immutable/nodes/7.BvvIQZgW.js.gz +0 -0
  351. package/build/client/_app/immutable/nodes/8.BypRBgKA.js.br +0 -0
  352. package/build/client/_app/immutable/nodes/8.BypRBgKA.js.gz +0 -0
  353. package/build/client/_app/immutable/nodes/9.Cvhy8NSW.js.br +0 -0
  354. package/build/client/_app/immutable/nodes/9.Cvhy8NSW.js.gz +0 -0
  355. package/build/server/chunks/1-DriLpuch.js +0 -9
  356. package/build/server/chunks/4-ipq2Fo20.js +0 -9
  357. package/build/server/chunks/5-CaAZ_pnW.js +0 -9
  358. package/build/server/chunks/6-Djkq9gPL.js +0 -9
  359. package/build/server/chunks/7-Bw1DwzQC.js +0 -9
  360. package/build/server/chunks/Navbar-C72vlTUN.js.map +0 -1
  361. package/build/server/chunks/_page.svelte-C6_O57B-.js.map +0 -1
  362. package/build/server/chunks/_server.ts-BybgwfUH.js.map +0 -1
  363. package/build/server/chunks/endpoints-CtFzewjq.js.map +0 -1
  364. package/build/server/chunks/hooks.server-BT9BE8vm.js.map +0 -1
  365. package/build/server/chunks/src-Bqr11v--.js.map +0 -1
@@ -181,6 +181,8 @@ function backupOpenPalmHome(homeDir) {
181
181
  }
182
182
  return copiedAny ? backupDir : null;
183
183
  }
184
+ var package_default = {
185
+ version: "0.11.5-rc.5"};
184
186
  //#endregion
185
187
  //#region ../../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js
186
188
  var require_identity = /* @__PURE__ */ __commonJSMin(((exports) => {
@@ -7378,6 +7380,79 @@ function mergeEnvContent(content, updates, options = {}) {
7378
7380
  return lines.join("\n");
7379
7381
  }
7380
7382
  //#endregion
7383
+ //#region ../lib/src/control-plane/image-tags.ts
7384
+ var PLATFORM_IMAGE_TAG_KEYS = [
7385
+ "OP_ASSISTANT_IMAGE_TAG",
7386
+ "OP_GUARDIAN_IMAGE_TAG",
7387
+ "OP_CHANNEL_IMAGE_TAG"
7388
+ ];
7389
+ function buildPlatformImageTagEnv(tag) {
7390
+ return {
7391
+ OP_IMAGE_TAG: tag,
7392
+ OP_ASSISTANT_IMAGE_TAG: tag,
7393
+ OP_GUARDIAN_IMAGE_TAG: tag,
7394
+ OP_CHANNEL_IMAGE_TAG: tag
7395
+ };
7396
+ }
7397
+ //#endregion
7398
+ //#region ../lib/src/control-plane/versioning.ts
7399
+ var SEMVER_RE = /^v?\d+\.\d+\.\d+(?:[-+].*)?$/;
7400
+ function isComparableSemver(version) {
7401
+ return !!version && SEMVER_RE.test(version.trim());
7402
+ }
7403
+ function parseComparableVersion(version) {
7404
+ const clean = version.trim().replace(/^v/, "").split("+")[0];
7405
+ const dashIdx = clean.indexOf("-");
7406
+ const main = dashIdx === -1 ? clean : clean.slice(0, dashIdx);
7407
+ const prerelease = dashIdx === -1 ? null : clean.slice(dashIdx + 1);
7408
+ const [major = 0, minor = 0, patch = 0] = main.split(".").map(Number);
7409
+ return {
7410
+ major,
7411
+ minor,
7412
+ patch,
7413
+ prerelease
7414
+ };
7415
+ }
7416
+ function comparePrerelease(a, b) {
7417
+ const aParts = a.split(".");
7418
+ const bParts = b.split(".");
7419
+ for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
7420
+ if (i >= aParts.length) return -1;
7421
+ if (i >= bParts.length) return 1;
7422
+ const aNum = Number(aParts[i]);
7423
+ const bNum = Number(bParts[i]);
7424
+ const aIsNum = !Number.isNaN(aNum);
7425
+ const bIsNum = !Number.isNaN(bNum);
7426
+ if (aIsNum && bIsNum) {
7427
+ if (aNum !== bNum) return aNum > bNum ? 1 : -1;
7428
+ continue;
7429
+ }
7430
+ if (aIsNum !== bIsNum) return aIsNum ? -1 : 1;
7431
+ if (aParts[i] !== bParts[i]) return aParts[i] > bParts[i] ? 1 : -1;
7432
+ }
7433
+ return 0;
7434
+ }
7435
+ function compareComparableVersions(a, b) {
7436
+ const aParsed = parseComparableVersion(a);
7437
+ const bParsed = parseComparableVersion(b);
7438
+ if (aParsed.major !== bParsed.major) return aParsed.major > bParsed.major ? 1 : -1;
7439
+ if (aParsed.minor !== bParsed.minor) return aParsed.minor > bParsed.minor ? 1 : -1;
7440
+ if (aParsed.patch !== bParsed.patch) return aParsed.patch > bParsed.patch ? 1 : -1;
7441
+ if (aParsed.prerelease === null && bParsed.prerelease !== null) return 1;
7442
+ if (aParsed.prerelease !== null && bParsed.prerelease === null) return -1;
7443
+ if (aParsed.prerelease !== null && bParsed.prerelease !== null) return comparePrerelease(aParsed.prerelease, bParsed.prerelease);
7444
+ return 0;
7445
+ }
7446
+ function majorVersionOf(version) {
7447
+ if (!isComparableSemver(version)) return null;
7448
+ return parseComparableVersion(version).major;
7449
+ }
7450
+ function isSameMajorVersion(a, b) {
7451
+ const aMajor = majorVersionOf(a);
7452
+ const bMajor = majorVersionOf(b);
7453
+ return aMajor !== null && bMajor !== null && aMajor === bMajor;
7454
+ }
7455
+ //#endregion
7381
7456
  //#region ../lib/src/control-plane/migrations.ts
7382
7457
  /**
7383
7458
  * On-disk layout migration harness.
@@ -7412,6 +7487,17 @@ var MigrationError = class extends Error {
7412
7487
  this.name = "MigrationError";
7413
7488
  }
7414
7489
  };
7490
+ var RELEASE_VERSION_KEY = "OP_RELEASE_VERSION";
7491
+ var CURRENT_RELEASE_VERSION = `v${package_default.version}`;
7492
+ function selectPendingReleaseMigrations(releaseFrom, targetVersion) {
7493
+ if (!isComparableSemver(targetVersion)) return [];
7494
+ return RELEASE_MIGRATIONS.filter((migration) => {
7495
+ if (!isComparableSemver(migration.version)) return false;
7496
+ if (compareComparableVersions(migration.version, targetVersion) > 0) return false;
7497
+ if (releaseFrom === null || !isComparableSemver(releaseFrom)) return true;
7498
+ return compareComparableVersions(migration.version, releaseFrom) > 0;
7499
+ }).sort((a, b) => compareComparableVersions(a.version, b.version));
7500
+ }
7415
7501
  function stackEnvFile(stashDir) {
7416
7502
  return join(stashDir, "env", "stack.env");
7417
7503
  }
@@ -7435,6 +7521,26 @@ function stampLayoutVersion(stashDir, version) {
7435
7521
  if (!existsSync(envPath)) return;
7436
7522
  writeFileSync(envPath, upsertEnvValue(readFileSync(envPath, "utf-8"), LAYOUT_VERSION_KEY, String(version)));
7437
7523
  }
7524
+ function readReleaseVersion(stashDir) {
7525
+ const envPath = stackEnvFile(stashDir);
7526
+ if (!existsSync(envPath)) return null;
7527
+ let imageTagFallback = null;
7528
+ for (const line of readFileSync(envPath, "utf-8").split("\n")) {
7529
+ const releaseMatch = line.match(/^OP_RELEASE_VERSION=(.+)\s*$/);
7530
+ if (releaseMatch) return releaseMatch[1].trim();
7531
+ const imageTagMatch = line.match(/^OP_IMAGE_TAG=(.+)\s*$/);
7532
+ if (imageTagMatch && !imageTagFallback) imageTagFallback = imageTagMatch[1].trim();
7533
+ }
7534
+ return imageTagFallback;
7535
+ }
7536
+ function stampReleaseVersion(stashDir, version) {
7537
+ const envPath = stackEnvFile(stashDir);
7538
+ if (!existsSync(envPath)) return;
7539
+ writeFileSync(envPath, upsertEnvValue(readFileSync(envPath, "utf-8"), RELEASE_VERSION_KEY, version));
7540
+ }
7541
+ function upsertMany(content, values) {
7542
+ return Object.entries(values).reduce((next, [key, value]) => upsertEnvValue(next, key, value), content);
7543
+ }
7438
7544
  function ensureDir(ctx, dir) {
7439
7545
  if (ctx.dryRun) {
7440
7546
  ctx.log(`[dry-run] mkdir ${rel(ctx, dir)}`);
@@ -7476,6 +7582,20 @@ function writeFile600(ctx, path, content) {
7476
7582
  chmodSync(path, 384);
7477
7583
  } catch {}
7478
7584
  }
7585
+ function seedPerImageTagVars(ctx) {
7586
+ const envPath = stackEnvFile(ctx.stashDir);
7587
+ if (!existsSync(envPath)) return;
7588
+ const current = readFileSync(envPath, "utf-8");
7589
+ const imageTag = current.match(/^OP_IMAGE_TAG=(.+)$/m)?.[1]?.trim();
7590
+ if (!imageTag) return;
7591
+ if (PLATFORM_IMAGE_TAG_KEYS.filter((key) => !new RegExp(`^${key}=`, "m").test(current)).length === 0) return;
7592
+ if (ctx.dryRun) {
7593
+ ctx.log(`[dry-run] seed per-image tag vars from OP_IMAGE_TAG=${imageTag}`);
7594
+ return;
7595
+ }
7596
+ writeFile600(ctx, envPath, upsertMany(current, buildPlatformImageTagEnv(imageTag)));
7597
+ ctx.log(`seeded per-image tag vars from OP_IMAGE_TAG=${imageTag}`);
7598
+ }
7479
7599
  var SECRET_KEY_RE = /(_API_KEY|_TOKEN|_SECRET|_PASSWORD)$/;
7480
7600
  var CONFIG_KEY_RE = /^(OP_CAP_|SYSTEM_LLM_|EMBEDDING_)/;
7481
7601
  function migrate010to011(ctx) {
@@ -7631,6 +7751,19 @@ var MIGRATIONS = [{
7631
7751
  if (!existsSync(stackEnvFile(ctx.stashDir))) throw new Error("post-migration check failed: knowledge/env/stack.env is missing");
7632
7752
  }
7633
7753
  }];
7754
+ var RELEASE_MIGRATIONS = [{
7755
+ version: CURRENT_RELEASE_VERSION,
7756
+ describe: "seed per-image platform tags from OP_IMAGE_TAG",
7757
+ apply: seedPerImageTagVars,
7758
+ verify(ctx) {
7759
+ if (ctx.dryRun) return;
7760
+ const envPath = stackEnvFile(ctx.stashDir);
7761
+ if (!existsSync(envPath)) return;
7762
+ const content = readFileSync(envPath, "utf-8");
7763
+ if (!/^OP_IMAGE_TAG=/m.test(content)) return;
7764
+ for (const key of PLATFORM_IMAGE_TAG_KEYS) if (!new RegExp(`^${key}=`, "m").test(content)) throw new Error(`post-migration check failed: ${key} is missing`);
7765
+ }
7766
+ }];
7634
7767
  var RECOVERY_GUIDANCE = "Your original files were left untouched and a full backup was taken first. To recover, restore the backup (see docs/operations/backup-restore.md) or run the standalone migrator with --dry-run (scripts/migrate-0.10-to-0.11.sh / .ps1). Full guide: docs/operations/upgrade-0.10-to-0.11.md";
7635
7768
  /**
7636
7769
  * Ensure the home directory is migrated to the current layout. Safe to call at
@@ -7653,24 +7786,25 @@ function ensureMigrated(opts = {}) {
7653
7786
  notes: []
7654
7787
  };
7655
7788
  const from = readLayoutVersion(ctxBase);
7789
+ const releaseFrom = readReleaseVersion(stashDir);
7656
7790
  const empty = {
7657
7791
  migrated: false,
7658
7792
  from,
7659
7793
  to: from,
7660
7794
  applied: [],
7661
7795
  backupDir: null,
7662
- notes: []
7796
+ notes: [],
7797
+ releaseFrom,
7798
+ releaseTo: CURRENT_RELEASE_VERSION,
7799
+ releaseApplied: []
7663
7800
  };
7664
- if (from >= 1) {
7665
- if (!dryRun) stampLayoutVersion(stashDir, 1);
7666
- return {
7667
- ...empty,
7668
- to: 1
7669
- };
7670
- }
7671
7801
  const pending = MIGRATIONS.filter((m) => m.from >= from && m.to <= 1).sort((a, b) => a.from - b.from);
7672
- if (pending.length === 0) {
7673
- if (!dryRun) stampLayoutVersion(stashDir, 1);
7802
+ const pendingRelease = selectPendingReleaseMigrations(releaseFrom, CURRENT_RELEASE_VERSION);
7803
+ if (pending.length === 0 && pendingRelease.length === 0) {
7804
+ if (!dryRun) {
7805
+ stampLayoutVersion(stashDir, 1);
7806
+ stampReleaseVersion(stashDir, CURRENT_RELEASE_VERSION);
7807
+ }
7674
7808
  return {
7675
7809
  ...empty,
7676
7810
  to: 1
@@ -7697,6 +7831,7 @@ function ensureMigrated(opts = {}) {
7697
7831
  log(`Backup: ${backupDir}`);
7698
7832
  }
7699
7833
  const applied = [];
7834
+ const releaseApplied = [];
7700
7835
  const notes = [];
7701
7836
  for (const m of pending) {
7702
7837
  const ctx = {
@@ -7708,13 +7843,107 @@ function ensureMigrated(opts = {}) {
7708
7843
  m.verify(ctx);
7709
7844
  applied.push(`${m.from}->${m.to}`);
7710
7845
  }
7711
- if (!dryRun) stampLayoutVersion(stashDir, 1);
7846
+ for (const migration of pendingRelease) {
7847
+ const ctx = {
7848
+ ...ctxBase,
7849
+ notes
7850
+ };
7851
+ log(`Migrating release ${releaseFrom ?? "unknown"} → ${migration.version}: ${migration.describe}`);
7852
+ migration.apply(ctx);
7853
+ migration.verify(ctx);
7854
+ releaseApplied.push(migration.version);
7855
+ }
7856
+ if (!dryRun) {
7857
+ stampLayoutVersion(stashDir, 1);
7858
+ stampReleaseVersion(stashDir, CURRENT_RELEASE_VERSION);
7859
+ }
7712
7860
  return {
7713
7861
  migrated: true,
7714
7862
  from,
7715
7863
  to: 1,
7716
7864
  applied,
7717
7865
  backupDir,
7866
+ notes,
7867
+ releaseFrom,
7868
+ releaseTo: CURRENT_RELEASE_VERSION,
7869
+ releaseApplied
7870
+ };
7871
+ } catch (e) {
7872
+ if (e instanceof MigrationError) throw e;
7873
+ throw new MigrationError(`Migration failed: ${e instanceof Error ? e.message : String(e)}`, RECOVERY_GUIDANCE, backupDir);
7874
+ } finally {
7875
+ releaseInstallLock(lock);
7876
+ }
7877
+ }
7878
+ function ensureReleaseMigrated(opts) {
7879
+ const homeDir = opts.homeDir ?? resolveOpenPalmHome();
7880
+ const dryRun = opts.dryRun ?? false;
7881
+ const log = opts.log ?? (() => {});
7882
+ const stashDir = resolveStashDir();
7883
+ const targetVersion = opts.targetVersion.trim();
7884
+ const releaseFrom = readReleaseVersion(stashDir);
7885
+ const pendingRelease = selectPendingReleaseMigrations(releaseFrom, targetVersion);
7886
+ const empty = {
7887
+ migrated: false,
7888
+ from: releaseFrom,
7889
+ to: targetVersion,
7890
+ applied: [],
7891
+ backupDir: null,
7892
+ notes: []
7893
+ };
7894
+ if (pendingRelease.length === 0) {
7895
+ if (!dryRun && releaseFrom !== targetVersion) stampReleaseVersion(stashDir, targetVersion);
7896
+ return empty;
7897
+ }
7898
+ const ctxBase = {
7899
+ homeDir,
7900
+ dataDir: resolveDataDir(),
7901
+ stackDir: resolveStackDir(),
7902
+ stashDir,
7903
+ configDir: resolveConfigDir(),
7904
+ dryRun,
7905
+ log,
7906
+ notes: []
7907
+ };
7908
+ let lock = null;
7909
+ let backupDir = null;
7910
+ try {
7911
+ if (!dryRun) {
7912
+ try {
7913
+ mkdirSync(ctxBase.dataDir, { recursive: true });
7914
+ } catch (e) {
7915
+ throw new MigrationError(`Could not prepare the data directory: ${e instanceof Error ? e.message : String(e)}`, RECOVERY_GUIDANCE, null);
7916
+ }
7917
+ lock = acquireInstallLock(ctxBase.dataDir);
7918
+ if (!lock) throw new MigrationError("Another install/upgrade is in progress.", RECOVERY_GUIDANCE, null);
7919
+ log("Taking a full backup before migrating…");
7920
+ try {
7921
+ backupDir = backupOpenPalmHome(homeDir);
7922
+ } catch (e) {
7923
+ throw new MigrationError(`Could not create a safety backup; upgrade aborted (no changes made): ${e instanceof Error ? e.message : String(e)}`, RECOVERY_GUIDANCE, null);
7924
+ }
7925
+ if (!backupDir) throw new MigrationError("Could not create a safety backup; upgrade aborted (no changes made).", RECOVERY_GUIDANCE, null);
7926
+ log(`Backup: ${backupDir}`);
7927
+ }
7928
+ const applied = [];
7929
+ const notes = [];
7930
+ for (const migration of pendingRelease) {
7931
+ const ctx = {
7932
+ ...ctxBase,
7933
+ notes
7934
+ };
7935
+ log(`Migrating release ${releaseFrom ?? "unknown"} → ${migration.version}: ${migration.describe}`);
7936
+ migration.apply(ctx);
7937
+ migration.verify(ctx);
7938
+ applied.push(migration.version);
7939
+ }
7940
+ if (!dryRun) stampReleaseVersion(stashDir, targetVersion);
7941
+ return {
7942
+ migrated: true,
7943
+ from: releaseFrom,
7944
+ to: targetVersion,
7945
+ applied,
7946
+ backupDir,
7718
7947
  notes
7719
7948
  };
7720
7949
  } catch (e) {
@@ -10683,64 +10912,6 @@ var yo = (s) => {
10683
10912
  s.mtimeCache || (s.mtimeCache = /* @__PURE__ */ new Map()), s.filter = t ? (e, i) => t(e, i) && !((s.mtimeCache?.get(e) ?? i.mtime ?? 0) > (i.mtime ?? 0)) : (e, i) => !((s.mtimeCache?.get(e) ?? i.mtime ?? 0) > (i.mtime ?? 0));
10684
10913
  };
10685
10914
  //#endregion
10686
- //#region ../lib/src/control-plane/versioning.ts
10687
- var SEMVER_RE = /^v?\d+\.\d+\.\d+(?:[-+].*)?$/;
10688
- function isComparableSemver(version) {
10689
- return !!version && SEMVER_RE.test(version.trim());
10690
- }
10691
- function parseComparableVersion(version) {
10692
- const clean = version.trim().replace(/^v/, "").split("+")[0];
10693
- const dashIdx = clean.indexOf("-");
10694
- const main = dashIdx === -1 ? clean : clean.slice(0, dashIdx);
10695
- const prerelease = dashIdx === -1 ? null : clean.slice(dashIdx + 1);
10696
- const [major = 0, minor = 0, patch = 0] = main.split(".").map(Number);
10697
- return {
10698
- major,
10699
- minor,
10700
- patch,
10701
- prerelease
10702
- };
10703
- }
10704
- function comparePrerelease(a, b) {
10705
- const aParts = a.split(".");
10706
- const bParts = b.split(".");
10707
- for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
10708
- if (i >= aParts.length) return -1;
10709
- if (i >= bParts.length) return 1;
10710
- const aNum = Number(aParts[i]);
10711
- const bNum = Number(bParts[i]);
10712
- const aIsNum = !Number.isNaN(aNum);
10713
- const bIsNum = !Number.isNaN(bNum);
10714
- if (aIsNum && bIsNum) {
10715
- if (aNum !== bNum) return aNum > bNum ? 1 : -1;
10716
- continue;
10717
- }
10718
- if (aIsNum !== bIsNum) return aIsNum ? -1 : 1;
10719
- if (aParts[i] !== bParts[i]) return aParts[i] > bParts[i] ? 1 : -1;
10720
- }
10721
- return 0;
10722
- }
10723
- function compareComparableVersions(a, b) {
10724
- const aParsed = parseComparableVersion(a);
10725
- const bParsed = parseComparableVersion(b);
10726
- if (aParsed.major !== bParsed.major) return aParsed.major > bParsed.major ? 1 : -1;
10727
- if (aParsed.minor !== bParsed.minor) return aParsed.minor > bParsed.minor ? 1 : -1;
10728
- if (aParsed.patch !== bParsed.patch) return aParsed.patch > bParsed.patch ? 1 : -1;
10729
- if (aParsed.prerelease === null && bParsed.prerelease !== null) return 1;
10730
- if (aParsed.prerelease !== null && bParsed.prerelease === null) return -1;
10731
- if (aParsed.prerelease !== null && bParsed.prerelease !== null) return comparePrerelease(aParsed.prerelease, bParsed.prerelease);
10732
- return 0;
10733
- }
10734
- function majorVersionOf(version) {
10735
- if (!isComparableSemver(version)) return null;
10736
- return parseComparableVersion(version).major;
10737
- }
10738
- function isSameMajorVersion(a, b) {
10739
- const aMajor = majorVersionOf(a);
10740
- const bMajor = majorVersionOf(b);
10741
- return aMajor !== null && bMajor !== null && aMajor === bMajor;
10742
- }
10743
- //#endregion
10744
10915
  //#region ../lib/src/control-plane/ui-assets.ts
10745
10916
  /**
10746
10917
  * Runtime asset seeding and resolution for the UI build and OP_HOME skeleton.
@@ -11477,7 +11648,7 @@ function generateFallbackSystemEnv(state) {
11477
11648
  "",
11478
11649
  "# ── Images ──────────────────────────────────────────────────────────",
11479
11650
  `OP_IMAGE_NAMESPACE=${process.env.OP_IMAGE_NAMESPACE ?? "openpalm"}`,
11480
- `OP_IMAGE_TAG=${DEFAULT_IMAGE_TAG}`,
11651
+ ...Object.entries(buildPlatformImageTagEnv(DEFAULT_IMAGE_TAG)).map(([key, value]) => `${key}=${value}`),
11481
11652
  "",
11482
11653
  "# ── Layout (on-disk schema version; managed by the migration harness) ──",
11483
11654
  `OP_LAYOUT_VERSION=1`,
@@ -13351,8 +13522,6 @@ async function validateProposedState(state) {
13351
13522
  warnings
13352
13523
  };
13353
13524
  }
13354
- var package_default = {
13355
- version: "0.11.5-rc.2"};
13356
13525
  //#endregion
13357
13526
  //#region ../lib/src/control-plane/compose-args.ts
13358
13527
  /**
@@ -13403,6 +13572,11 @@ function buildComposeOptions(state) {
13403
13572
  /** Lifecycle helpers — state factory, apply transitions, compose file list. */
13404
13573
  var IMAGE_NAMESPACE_RE = /^[a-z0-9]+(?:[._-][a-z0-9]+)*$/;
13405
13574
  var SEMVER_TAG_RE = /^v\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/;
13575
+ var PLATFORM_IMAGE_NAMES = [
13576
+ "assistant",
13577
+ "guardian",
13578
+ "channel"
13579
+ ];
13406
13580
  function createState() {
13407
13581
  const homeDir = resolveOpenPalmHome();
13408
13582
  const configDir = resolveConfigDir();
@@ -13523,6 +13697,35 @@ function resolveImageNamespace(state) {
13523
13697
  if (!IMAGE_NAMESPACE_RE.test(namespace)) throw new Error(`Invalid image namespace in system.env: ${namespace}`);
13524
13698
  return namespace;
13525
13699
  }
13700
+ function resolveRequiredPlatformImages(state) {
13701
+ const required = new Set(["assistant"]);
13702
+ if (hasEnabledChannel(listEnabledAddonIds(state.homeDir))) {
13703
+ required.add("guardian");
13704
+ required.add("channel");
13705
+ }
13706
+ return PLATFORM_IMAGE_NAMES.filter((name) => required.has(name));
13707
+ }
13708
+ async function isDockerImageTagPublished(namespace, imageName, tag) {
13709
+ let response;
13710
+ try {
13711
+ response = await fetch(`https://registry.hub.docker.com/v2/repositories/${namespace}/${imageName}/tags/${tag}`, { headers: { Accept: "application/json" } });
13712
+ } catch (e) {
13713
+ throw new Error(`Failed to verify Docker image tag ${namespace}/${imageName}:${tag}: ${e instanceof Error ? e.message : String(e)}`);
13714
+ }
13715
+ if (response.status === 404) return false;
13716
+ if (!response.ok) throw new Error(`Docker tag verification failed for ${namespace}/${imageName}:${tag} (${response.status})`);
13717
+ return true;
13718
+ }
13719
+ async function ensurePlatformImagesPublished(state, namespace, tag) {
13720
+ if (namespace !== "openpalm") return;
13721
+ const requiredImages = resolveRequiredPlatformImages(state);
13722
+ const missing = (await Promise.all(requiredImages.map(async (imageName) => ({
13723
+ imageName,
13724
+ published: await isDockerImageTagPublished(namespace, imageName, tag)
13725
+ })))).filter((entry) => !entry.published).map((entry) => entry.imageName);
13726
+ if (missing.length === 0) return;
13727
+ throw new Error(`Refusing to update to ${namespace}/*:${tag}: missing published image tag(s) for ${missing.join(", ")}. This release is incomplete for the enabled services; stack.env was left unchanged.`);
13728
+ }
13526
13729
  /**
13527
13730
  * Resolve the newest published platform tag from the Docker registry.
13528
13731
  *
@@ -13558,11 +13761,12 @@ async function resolveLatestPlatformTagForCurrentMajor(namespace, currentTag) {
13558
13761
  if (!latestTag) throw new Error(`No usable Docker image tag found in major ${currentTag.replace(/^v/, "").split(".")[0]}`);
13559
13762
  return latestTag;
13560
13763
  }
13561
- async function updateStackEnvToLatestImageTag(state) {
13764
+ async function updateStackEnvToLatestImageTag(state, resolvedTag) {
13562
13765
  const systemEnvPath = `${state.stashDir}/env/stack.env`;
13563
13766
  const namespace = resolveImageNamespace(state);
13564
- const latestTag = await resolveLatestPlatformTagForCurrentMajor(namespace, resolvePlatformVersionPolicyBaseTag(state));
13565
- writeFileSync(systemEnvPath, mergeEnvContent(existsSync(systemEnvPath) ? readFileSync(systemEnvPath, "utf-8") : "", { OP_IMAGE_TAG: latestTag }, { uncomment: true }));
13767
+ const latestTag = resolvedTag ?? await resolveLatestPlatformTagForCurrentMajor(namespace, resolvePlatformVersionPolicyBaseTag(state));
13768
+ await ensurePlatformImagesPublished(state, namespace, latestTag);
13769
+ writeFileSync(systemEnvPath, mergeEnvContent(existsSync(systemEnvPath) ? readFileSync(systemEnvPath, "utf-8") : "", buildPlatformImageTagEnv(latestTag), { uncomment: true }));
13566
13770
  return {
13567
13771
  namespace,
13568
13772
  tag: latestTag
@@ -13582,75 +13786,89 @@ async function applyUpgrade(state, version) {
13582
13786
  releaseInstallLock(lock);
13583
13787
  }
13584
13788
  }
13585
- /**
13586
- * Full upgrade: resolve latest image tag, refresh assets, pull images,
13587
- * and recreate containers. Used by both the admin endpoint and CLI.
13588
- *
13589
- * Callers handle their own audit logging and admin self-recreation.
13590
- */
13591
- async function performUpgrade(state) {
13592
- const composeOpts = buildComposeOptions(state);
13789
+ async function withStackEnvRollback(state, run) {
13593
13790
  const stackEnvPath = `${state.stashDir}/env/stack.env`;
13594
13791
  let originalStackEnv = null;
13595
13792
  try {
13596
13793
  originalStackEnv = readFileSync(stackEnvPath, "utf-8");
13597
13794
  } catch {}
13598
- let imageTag;
13599
- let namespace;
13600
- let upgradeResult;
13601
13795
  try {
13602
- const tagResult = await updateStackEnvToLatestImageTag(state);
13603
- imageTag = tagResult.tag;
13604
- namespace = tagResult.namespace;
13605
- upgradeResult = await applyUpgrade(state, imageTag);
13796
+ return await run();
13606
13797
  } catch (e) {
13607
13798
  if (originalStackEnv !== null) try {
13608
13799
  writeFileSync(stackEnvPath, originalStackEnv);
13609
13800
  } catch {}
13610
13801
  throw e;
13611
13802
  }
13612
- const pullResult = await composePull(composeOpts);
13613
- if (!pullResult.ok) throw new Error(`Failed to pull images: ${pullResult.stderr}`);
13614
- const services = await buildManagedServices(state);
13615
- const upResult = await composeUp({
13616
- ...composeOpts,
13617
- services,
13618
- forceRecreate: true,
13619
- removeOrphans: true
13803
+ }
13804
+ /**
13805
+ * Full upgrade: resolve latest image tag, refresh assets, pull images,
13806
+ * and recreate containers. Used by both the admin endpoint and CLI.
13807
+ *
13808
+ * Callers handle their own audit logging and admin self-recreation.
13809
+ */
13810
+ async function performUpgrade(state) {
13811
+ return withStackEnvRollback(state, async () => {
13812
+ const composeOpts = buildComposeOptions(state);
13813
+ const namespace = resolveImageNamespace(state);
13814
+ const imageTag = await resolveLatestPlatformTagForCurrentMajor(namespace, resolvePlatformVersionPolicyBaseTag(state));
13815
+ await ensurePlatformImagesPublished(state, namespace, imageTag);
13816
+ ensureReleaseMigrated({
13817
+ homeDir: state.homeDir,
13818
+ targetVersion: imageTag
13819
+ });
13820
+ const { tag: confirmedImageTag } = await updateStackEnvToLatestImageTag(state, imageTag);
13821
+ const upgradeResult = await applyUpgrade(state, confirmedImageTag);
13822
+ const pullResult = await composePull(composeOpts);
13823
+ if (!pullResult.ok) throw new Error(`Failed to pull images: ${pullResult.stderr}`);
13824
+ const services = await buildManagedServices(state);
13825
+ const upResult = await composeUp({
13826
+ ...composeOpts,
13827
+ services,
13828
+ forceRecreate: true,
13829
+ removeOrphans: true
13830
+ });
13831
+ if (!upResult.ok) throw new Error(`Images pulled but failed to recreate containers: ${upResult.stderr}`);
13832
+ return {
13833
+ imageTag: confirmedImageTag,
13834
+ namespace,
13835
+ backupDir: upgradeResult.backupDir,
13836
+ assetsUpdated: upgradeResult.updated,
13837
+ restarted: upgradeResult.restarted
13838
+ };
13620
13839
  });
13621
- if (!upResult.ok) throw new Error(`Images pulled but failed to recreate containers: ${upResult.stderr}`);
13622
- return {
13623
- imageTag,
13624
- namespace,
13625
- backupDir: upgradeResult.backupDir,
13626
- assetsUpdated: upgradeResult.updated,
13627
- restarted: upgradeResult.restarted
13628
- };
13629
13840
  }
13630
13841
  /**
13631
13842
  * Set a specific image tag in stack.env then pull images and restart containers.
13632
13843
  * Used by the admin "set version" action — skips the auto-detect step in performUpgrade.
13633
13844
  */
13634
13845
  async function applyTagChange(state, tag) {
13635
- const namespace = resolveImageNamespace(state);
13636
- const requested = tag.trim();
13637
- let resolvedTag = requested;
13638
- if (requested === "" || requested.toLowerCase() === "latest") try {
13639
- resolvedTag = await resolveLatestPlatformTag(namespace);
13640
- } catch (e) {
13641
- const msg = e instanceof Error ? e.message : String(e);
13642
- throw new Error(`Cannot resolve "latest" to a concrete release: ${msg}. Check your network connection or select a specific version.`);
13643
- }
13644
- const stackEnvPath = `${state.stashDir}/env/stack.env`;
13645
- writeFileSync(stackEnvPath, mergeEnvContent(existsSync(stackEnvPath) ? readFileSync(stackEnvPath, "utf-8") : "", { OP_IMAGE_TAG: resolvedTag }, { uncomment: true }));
13646
- const upgradeResult = await applyUpgrade(state, resolvedTag);
13647
- return {
13648
- imageTag: resolvedTag,
13649
- namespace,
13650
- backupDir: upgradeResult.backupDir,
13651
- assetsUpdated: upgradeResult.updated,
13652
- restarted: upgradeResult.restarted
13653
- };
13846
+ return withStackEnvRollback(state, async () => {
13847
+ const namespace = resolveImageNamespace(state);
13848
+ const requested = tag.trim();
13849
+ let resolvedTag = requested;
13850
+ if (requested === "" || requested.toLowerCase() === "latest") try {
13851
+ resolvedTag = await resolveLatestPlatformTag(namespace);
13852
+ } catch (e) {
13853
+ const msg = e instanceof Error ? e.message : String(e);
13854
+ throw new Error(`Cannot resolve "latest" to a concrete release: ${msg}. Check your network connection or select a specific version.`);
13855
+ }
13856
+ await ensurePlatformImagesPublished(state, namespace, resolvedTag);
13857
+ ensureReleaseMigrated({
13858
+ homeDir: state.homeDir,
13859
+ targetVersion: resolvedTag
13860
+ });
13861
+ const stackEnvPath = `${state.stashDir}/env/stack.env`;
13862
+ writeFileSync(stackEnvPath, mergeEnvContent(existsSync(stackEnvPath) ? readFileSync(stackEnvPath, "utf-8") : "", buildPlatformImageTagEnv(resolvedTag), { uncomment: true }));
13863
+ const upgradeResult = await applyUpgrade(state, resolvedTag);
13864
+ return {
13865
+ imageTag: resolvedTag,
13866
+ namespace,
13867
+ backupDir: upgradeResult.backupDir,
13868
+ assetsUpdated: upgradeResult.updated,
13869
+ restarted: upgradeResult.restarted
13870
+ };
13871
+ });
13654
13872
  }
13655
13873
  function buildComposeFileList(state) {
13656
13874
  return discoverStackOverlays(state.stackDir, state.homeDir);
@@ -14780,7 +14998,7 @@ async function performSetup(input, opts) {
14780
14998
  try {
14781
14999
  const systemEnvForAkm = existsSync(`${state.stashDir}/env/stack.env`) ? readFileSync(`${state.stashDir}/env/stack.env`, "utf-8") : "";
14782
15000
  const akmUpdates = {};
14783
- akmUpdates.OP_IMAGE_TAG = imageTag && imageTag.trim() ? imageTag.trim() : DEFAULT_IMAGE_TAG;
15001
+ Object.assign(akmUpdates, buildPlatformImageTagEnv(imageTag && imageTag.trim() ? imageTag.trim() : DEFAULT_IMAGE_TAG));
14784
15002
  if (Object.keys(akmUpdates).length > 0) writeFileAtomic(`${state.stashDir}/env/stack.env`, mergeEnvContent(systemEnvForAkm, akmUpdates), 384);
14785
15003
  if (llm || embedding) {
14786
15004
  const akmConfigDir = join(state.configDir, "akm");
@@ -15041,6 +15259,154 @@ function importHostOpenCode(state, options = {}) {
15041
15259
  conflicts
15042
15260
  };
15043
15261
  }
15262
+ //#endregion
15263
+ //#region ../lib/src/control-plane/akm-stats.ts
15264
+ function asRecord(value) {
15265
+ return value && typeof value === "object" && !Array.isArray(value) ? value : null;
15266
+ }
15267
+ function asArray(value) {
15268
+ return Array.isArray(value) ? value : [];
15269
+ }
15270
+ function asString(value) {
15271
+ return typeof value === "string" && value.trim() ? value : null;
15272
+ }
15273
+ function asNumber(value) {
15274
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
15275
+ }
15276
+ function asBoolean(value) {
15277
+ return typeof value === "boolean" ? value : null;
15278
+ }
15279
+ function parseJsonObject(stdout) {
15280
+ try {
15281
+ return asRecord(JSON.parse(stdout));
15282
+ } catch {
15283
+ return null;
15284
+ }
15285
+ }
15286
+ function runAkmJsonCommand(state, args, timeoutMs, options = {}) {
15287
+ const akmEnv = buildAkmEnv(state);
15288
+ assertAkmEnvComplete(akmEnv);
15289
+ return new Promise((resolve) => {
15290
+ execFile("akm", [
15291
+ ...args,
15292
+ "--format",
15293
+ "json",
15294
+ "--quiet"
15295
+ ], {
15296
+ env: {
15297
+ ...process.env,
15298
+ ...akmEnv
15299
+ },
15300
+ timeout: timeoutMs,
15301
+ maxBuffer: 4 * 1024 * 1024
15302
+ }, (error, stdout, stderr) => {
15303
+ const execError = error;
15304
+ const exitCode = typeof execError?.code === "number" ? execError.code : null;
15305
+ const errorCode = typeof execError?.code === "string" ? execError.code : null;
15306
+ const allowed = exitCode !== null && (options.allowExitCodes ?? []).includes(exitCode);
15307
+ resolve({
15308
+ ok: !error || allowed,
15309
+ stdout: stdout?.toString() ?? "",
15310
+ stderr: stderr?.toString() ?? "",
15311
+ exitCode,
15312
+ errorCode
15313
+ });
15314
+ });
15315
+ });
15316
+ }
15317
+ function readAssetCount(info, type) {
15318
+ if (!info) return null;
15319
+ const candidates = [
15320
+ asRecord(info.assetCounts),
15321
+ asRecord(info.assetTypeCounts),
15322
+ asRecord(info.assetsByType),
15323
+ asRecord(info.counts)
15324
+ ];
15325
+ for (const candidate of candidates) {
15326
+ const value = asNumber(candidate?.[type]);
15327
+ if (value !== null) return value;
15328
+ }
15329
+ return null;
15330
+ }
15331
+ function advisoryMessage(value) {
15332
+ if (typeof value === "string" && value.trim()) return value.trim();
15333
+ const record = asRecord(value);
15334
+ if (!record) return null;
15335
+ return asString(record.message) ?? asString(record.name);
15336
+ }
15337
+ function parseAkmStats(healthStdout, infoStdout, proposalsStdout) {
15338
+ const health = parseJsonObject(healthStdout);
15339
+ const info = parseJsonObject(infoStdout);
15340
+ const proposalsPayload = parseJsonObject(proposalsStdout);
15341
+ if (!health && !info) return {
15342
+ available: false,
15343
+ reason: "AKM stats unavailable on this host."
15344
+ };
15345
+ const indexStats = asRecord(info?.indexStats);
15346
+ const improve = asRecord(health?.improve);
15347
+ const reflect = asRecord(improve?.reflect);
15348
+ const consolidation = asRecord(improve?.consolidation);
15349
+ const proposals = asArray(proposalsPayload?.proposals).map((entry) => asRecord(entry)).filter((entry) => entry !== null).map((entry) => ({
15350
+ ref: asString(entry.ref),
15351
+ generator: asString(entry.generator) ?? asString(entry.source),
15352
+ createdAt: asString(entry.createdAt),
15353
+ status: asString(entry.status)
15354
+ }));
15355
+ const rawStatus = asString(health?.status)?.toLowerCase();
15356
+ const status = rawStatus === "pass" || rawStatus === "ok" ? "pass" : rawStatus === "warn" ? "warn" : "unknown";
15357
+ return {
15358
+ available: true,
15359
+ version: asString(info?.version),
15360
+ health: {
15361
+ status,
15362
+ advisories: asArray(health?.advisories).map((entry) => advisoryMessage(entry)).filter((entry) => entry !== null)
15363
+ },
15364
+ index: {
15365
+ entryCount: asNumber(indexStats?.entryCount),
15366
+ lastBuiltAt: asString(indexStats?.lastBuiltAt),
15367
+ hasEmbeddings: asBoolean(indexStats?.hasEmbeddings),
15368
+ vecAvailable: asBoolean(indexStats?.vecAvailable)
15369
+ },
15370
+ assetCounts: {
15371
+ memory: readAssetCount(info, "memory"),
15372
+ skill: readAssetCount(info, "skill"),
15373
+ lesson: readAssetCount(info, "lesson")
15374
+ },
15375
+ improve: {
15376
+ invoked: asNumber(improve?.invoked),
15377
+ completed: asNumber(improve?.completed),
15378
+ skipped: asNumber(improve?.skipped),
15379
+ reflectOk: asNumber(reflect?.ok),
15380
+ reflectCooldown: asNumber(reflect?.cooldown),
15381
+ consolidation: {
15382
+ promoted: asNumber(consolidation?.promoted),
15383
+ merged: asNumber(consolidation?.merged),
15384
+ deleted: asNumber(consolidation?.deleted)
15385
+ }
15386
+ },
15387
+ proposals: {
15388
+ pending: proposals.length,
15389
+ items: proposals
15390
+ }
15391
+ };
15392
+ }
15393
+ async function getAkmStats(state) {
15394
+ const [healthResult, infoResult, proposalsResult] = await Promise.all([
15395
+ runAkmJsonCommand(state, ["health"], 8e3, { allowExitCodes: [4] }),
15396
+ runAkmJsonCommand(state, ["info"], 8e3),
15397
+ runAkmJsonCommand(state, [
15398
+ "proposal",
15399
+ "list",
15400
+ "--status",
15401
+ "pending"
15402
+ ], 12e3)
15403
+ ]);
15404
+ if (healthResult.errorCode === "ENOENT" || infoResult.errorCode === "ENOENT") return {
15405
+ available: false,
15406
+ reason: "The akm CLI is not installed on this host."
15407
+ };
15408
+ return parseAkmStats(healthResult.stdout, infoResult.stdout, proposalsResult.stdout);
15409
+ }
15044
15410
 
15045
- export { getRegistryAddonConfig as $, AKM_USER_ENV_REF as A, createOpenCodeClient as B, CORE_SERVICES as C, createState as D, deleteUserEnvKey as E, detectExistingProject as F, detectGpu as G, detectHostOpenCode as H, detectLocalProviders as I, disableHostAkmSharing as J, enableHostAkmSharing as K, ensureAkmUserEnv as L, MigrationError as M, ensureHomeDirs as N, ensureMigrated as O, PROVIDER_KEY_MAP as P, ensureOpenCodeConfig as Q, ensureOpenCodeSystemConfig as R, ensureSecrets as S, executeAutomation as T, fetchProviderModels as U, getAddonProfileAvailability as V, getAddonProfileSelection as W, getAddonProfiles as X, getAddonServiceNames as Y, getDockerEvents as Z, getHostAkmSharingStatus as _, addonProfileId as a, hostAkmStashPath as a0, importHostOpenCode as a1, isAllowedService as a2, isHostAkmAvailable as a3, isSetupComplete as a4, listAvailableAddonIds as a5, listEnabledAddonIds as a6, listSecretFiles as a7, loadAutomations as a8, lookupEmbeddingDims as a9, writeRuntimeFiles as aA, writeSecretFile as aB, writeStackSecretEnv as aC, writeTaskFile as aD, writeUserEnvKey as aE, writeVoiceVars as aF, parseComposeStderr as aa, parseEnvFile as ab, patchSecretsEnvFile as ac, performSetup as ad, performUpgrade as ae, readAutomationLogs as af, readSecret as ag, readSecretFile as ah, readStackEnv as ai, readStackRuntimeEnv as aj, readStackSecretEnv as ak, readTaskFile as al, readUserEnvFile as am, recommendSetup as an, removeSecretFile as ao, removeTaskFile as ap, resolveComposeProjectName as aq, resolveDataDir as ar, resolveRuntimeFiles as as, resolveStackDir as at, seedUiBuild as au, setAddonEnabled as av, setAddonProfileSelection as aw, summarizeComposeStderr as ax, validateProposedState as ay, writeFileAtomic as az, annotateAddonProfileAvailability as b, applyInstall as c, applyTagChange as d, applyUninstall as e, applyUpdate as f, assertSafeSecretFilename as g, assertSafeTaskFilename as h, authJsonPath as i, buildAkmEndpoint as j, buildAkmEnv as k, buildComposeOptions as l, buildManagedServices as m, checkDocker as n, checkDockerCompose as o, composeDown as p, composeLogs as q, composePreflight as r, composePs as s, composePull as t, composeRestart as u, composeStart as v, composeStats as w, composeStop as x, composeUp as y, createLogger as z };
15046
- //# sourceMappingURL=src-Bqr11v--.js.map
15411
+ export { getHostAkmSharingStatus as $, AKM_USER_ENV_REF as A, createOpenCodeClient as B, CORE_SERVICES as C, createState as D, deleteUserEnvKey as E, detectExistingProject as F, detectGpu as G, detectHostOpenCode as H, detectLocalProviders as I, disableHostAkmSharing as J, enableHostAkmSharing as K, ensureAkmUserEnv as L, MigrationError as M, ensureHomeDirs as N, ensureMigrated as O, PROVIDER_KEY_MAP as P, ensureOpenCodeConfig as Q, ensureOpenCodeSystemConfig as R, ensureSecrets as S, executeAutomation as T, fetchProviderModels as U, getAddonProfileAvailability as V, getAddonProfileSelection as W, getAddonProfiles as X, getAddonServiceNames as Y, getAkmStats as Z, getDockerEvents as _, addonProfileId as a, getRegistryAddonConfig as a0, hostAkmStashPath as a1, importHostOpenCode as a2, isAllowedService as a3, isHostAkmAvailable as a4, isSetupComplete as a5, listAvailableAddonIds as a6, listEnabledAddonIds as a7, listSecretFiles as a8, loadAutomations as a9, writeFileAtomic as aA, writeRuntimeFiles as aB, writeSecretFile as aC, writeStackSecretEnv as aD, writeTaskFile as aE, writeUserEnvKey as aF, writeVoiceVars as aG, lookupEmbeddingDims as aa, parseComposeStderr as ab, parseEnvFile as ac, patchSecretsEnvFile as ad, performSetup as ae, performUpgrade as af, readAutomationLogs as ag, readSecret as ah, readSecretFile as ai, readStackEnv as aj, readStackRuntimeEnv as ak, readStackSecretEnv as al, readTaskFile as am, readUserEnvFile as an, recommendSetup as ao, removeSecretFile as ap, removeTaskFile as aq, resolveComposeProjectName as ar, resolveDataDir as as, resolveRuntimeFiles as at, resolveStackDir as au, seedUiBuild as av, setAddonEnabled as aw, setAddonProfileSelection as ax, summarizeComposeStderr as ay, validateProposedState as az, annotateAddonProfileAvailability as b, applyInstall as c, applyTagChange as d, applyUninstall as e, applyUpdate as f, assertSafeSecretFilename as g, assertSafeTaskFilename as h, authJsonPath as i, buildAkmEndpoint as j, buildAkmEnv as k, buildComposeOptions as l, buildManagedServices as m, checkDocker as n, checkDockerCompose as o, composeDown as p, composeLogs as q, composePreflight as r, composePs as s, composePull as t, composeRestart as u, composeStart as v, composeStats as w, composeStop as x, composeUp as y, createLogger as z };
15412
+ //# sourceMappingURL=src-DGGmhx-_.js.map