@openpalm/ui 0.11.5-rc.3 → 0.11.5-rc.7

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 (391) 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/assets/7.BzioASK3.css +1 -0
  6. package/build/client/_app/immutable/assets/7.BzioASK3.css.br +0 -0
  7. package/build/client/_app/immutable/assets/7.BzioASK3.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/ChatMessage.nPUEFb-s.css +1 -0
  9. package/build/client/_app/immutable/assets/ChatMessage.nPUEFb-s.css.br +0 -0
  10. package/build/client/_app/immutable/assets/ChatMessage.nPUEFb-s.css.gz +0 -0
  11. package/build/client/_app/immutable/chunks/B0yFRekZ.js +3 -0
  12. package/build/client/_app/immutable/chunks/B0yFRekZ.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/B0yFRekZ.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{BQ0vnNWj.js → BAaXfhM-.js} +1 -1
  15. package/build/client/_app/immutable/chunks/BAaXfhM-.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/BAaXfhM-.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/BTrxgLOM.js +1 -0
  18. package/build/client/_app/immutable/chunks/BTrxgLOM.js.br +2 -0
  19. package/build/client/_app/immutable/chunks/BTrxgLOM.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{irujFCsS.js → B_FOicoS.js} +1 -1
  21. package/build/client/_app/immutable/chunks/B_FOicoS.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/B_FOicoS.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/CDYZd3Dt.js +1 -0
  24. package/build/client/_app/immutable/chunks/CDYZd3Dt.js.br +1 -0
  25. package/build/client/_app/immutable/chunks/CDYZd3Dt.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/CVWppHrm.js +16 -0
  27. package/build/client/_app/immutable/chunks/CVWppHrm.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/CVWppHrm.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/DYcHS_qY.js +5 -0
  30. package/build/client/_app/immutable/chunks/DYcHS_qY.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/DYcHS_qY.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/{CDS1U3lf.js → HsxQhp5A.js} +2 -2
  33. package/build/client/_app/immutable/chunks/HsxQhp5A.js.br +0 -0
  34. package/build/client/_app/immutable/chunks/HsxQhp5A.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/{BTsRblfw.js → hgikw-Qd.js} +1 -1
  36. package/build/client/_app/immutable/chunks/hgikw-Qd.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/hgikw-Qd.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/xtI7_jDL.js +1 -0
  39. package/build/client/_app/immutable/chunks/xtI7_jDL.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/xtI7_jDL.js.gz +0 -0
  41. package/build/client/_app/immutable/entry/app.DtY5C9pR.js +2 -0
  42. package/build/client/_app/immutable/entry/app.DtY5C9pR.js.br +0 -0
  43. package/build/client/_app/immutable/entry/app.DtY5C9pR.js.gz +0 -0
  44. package/build/client/_app/immutable/entry/start.CmS1dlrE.js +1 -0
  45. package/build/client/_app/immutable/entry/start.CmS1dlrE.js.br +0 -0
  46. package/build/client/_app/immutable/entry/start.CmS1dlrE.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/0.CeRyHcWC.js +1 -0
  48. package/build/client/_app/immutable/nodes/0.CeRyHcWC.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/0.CeRyHcWC.js.gz +0 -0
  50. package/build/client/_app/immutable/nodes/1.BIqfJFCb.js +1 -0
  51. package/build/client/_app/immutable/nodes/1.BIqfJFCb.js.br +1 -1
  52. package/build/client/_app/immutable/nodes/1.BIqfJFCb.js.gz +0 -0
  53. package/build/client/_app/immutable/nodes/2.C-MzgTuq.js +1 -0
  54. package/build/client/_app/immutable/nodes/2.C-MzgTuq.js.br +0 -0
  55. package/build/client/_app/immutable/nodes/2.C-MzgTuq.js.gz +0 -0
  56. package/build/client/_app/immutable/nodes/3.DXmMKZyn.js +1 -0
  57. package/build/client/_app/immutable/nodes/3.DXmMKZyn.js.br +0 -0
  58. package/build/client/_app/immutable/nodes/3.DXmMKZyn.js.gz +0 -0
  59. package/build/client/_app/immutable/nodes/4.h8N33vpx.js +19 -0
  60. package/build/client/_app/immutable/nodes/4.h8N33vpx.js.br +0 -0
  61. package/build/client/_app/immutable/nodes/4.h8N33vpx.js.gz +0 -0
  62. package/build/client/_app/immutable/nodes/5.B2qtGelf.js +4 -0
  63. package/build/client/_app/immutable/nodes/5.B2qtGelf.js.br +0 -0
  64. package/build/client/_app/immutable/nodes/5.B2qtGelf.js.gz +0 -0
  65. package/build/client/_app/immutable/nodes/6.DrYb30Cc.js +1 -0
  66. package/build/client/_app/immutable/nodes/6.DrYb30Cc.js.br +0 -0
  67. package/build/client/_app/immutable/nodes/6.DrYb30Cc.js.gz +0 -0
  68. package/build/client/_app/immutable/nodes/7.CrDhK7am.js +1 -0
  69. package/build/client/_app/immutable/nodes/7.CrDhK7am.js.br +0 -0
  70. package/build/client/_app/immutable/nodes/7.CrDhK7am.js.gz +0 -0
  71. package/build/client/_app/immutable/nodes/8.CKAtL-gx.js +1 -0
  72. package/build/client/_app/immutable/nodes/8.CKAtL-gx.js.br +0 -0
  73. package/build/client/_app/immutable/nodes/8.CKAtL-gx.js.gz +0 -0
  74. package/build/client/_app/immutable/nodes/9.B1IAKpfH.js +5 -0
  75. package/build/client/_app/immutable/nodes/9.B1IAKpfH.js.br +0 -0
  76. package/build/client/_app/immutable/nodes/9.B1IAKpfH.js.gz +0 -0
  77. package/build/client/_app/version.json +1 -1
  78. package/build/client/_app/version.json.br +1 -1
  79. package/build/client/_app/version.json.gz +0 -0
  80. package/build/server/chunks/0-sfmVs00_.js +9 -0
  81. package/build/server/chunks/{0-BGsPZcaQ.js.map → 0-sfmVs00_.js.map} +1 -1
  82. package/build/server/chunks/1-BQlukPTN.js +9 -0
  83. package/build/server/chunks/{1-Daoybjaw.js.map → 1-BQlukPTN.js.map} +1 -1
  84. package/build/server/chunks/{2-DQWoUtW1.js → 2-wNOz2qR7.js} +2 -2
  85. package/build/server/chunks/{2-DQWoUtW1.js.map → 2-wNOz2qR7.js.map} +1 -1
  86. package/build/server/chunks/{3-COIGgysA.js → 3-CMcVVZ5t.js} +2 -2
  87. package/build/server/chunks/{3-COIGgysA.js.map → 3-CMcVVZ5t.js.map} +1 -1
  88. package/build/server/chunks/4-C79a4Yto.js +9 -0
  89. package/build/server/chunks/4-C79a4Yto.js.map +1 -0
  90. package/build/server/chunks/5-D7eeN25a.js +9 -0
  91. package/build/server/chunks/{5-BfmhtNP9.js.map → 5-D7eeN25a.js.map} +1 -1
  92. package/build/server/chunks/6-Dg79fiQc.js +9 -0
  93. package/build/server/chunks/{6-AcylLX8-.js.map → 6-Dg79fiQc.js.map} +1 -1
  94. package/build/server/chunks/7-DTavGKhw.js +9 -0
  95. package/build/server/chunks/7-DTavGKhw.js.map +1 -0
  96. package/build/server/chunks/{8-DMgWQQBm.js → 8-B0FQ5gh5.js} +3 -3
  97. package/build/server/chunks/{8-DMgWQQBm.js.map → 8-B0FQ5gh5.js.map} +1 -1
  98. package/build/server/chunks/{9-CGVsBC0_.js → 9-BCmr-315.js} +2 -2
  99. package/build/server/chunks/{9-CGVsBC0_.js.map → 9-BCmr-315.js.map} +1 -1
  100. package/build/server/chunks/{_page.svelte-C0eMsRDk.js → ChatMessage-CzW3dV57.js} +73 -105
  101. package/build/server/chunks/ChatMessage-CzW3dV57.js.map +1 -0
  102. package/build/server/chunks/{Navbar-C9kE6wR-.js → Navbar-EBUPxUnS.js} +670 -142
  103. package/build/server/chunks/Navbar-EBUPxUnS.js.map +1 -0
  104. package/build/server/chunks/{_layout.svelte-DCfzq18z.js → _layout.svelte-e5vEwOWj.js} +2 -2
  105. package/build/server/chunks/{_layout.svelte-DCfzq18z.js.map → _layout.svelte-e5vEwOWj.js.map} +1 -1
  106. package/build/server/chunks/_page.svelte-CScIJqid.js +252 -0
  107. package/build/server/chunks/_page.svelte-CScIJqid.js.map +1 -0
  108. package/build/server/chunks/{_page.svelte-Dl3WoXNo.js → _page.svelte-CXGT7iVI.js} +251 -15
  109. package/build/server/chunks/_page.svelte-CXGT7iVI.js.map +1 -0
  110. package/build/server/chunks/{_page.svelte-B3FJ13Ci.js → _page.svelte-Dc9YczvY.js} +6 -6
  111. package/build/server/chunks/{_page.svelte-B3FJ13Ci.js.map → _page.svelte-Dc9YczvY.js.map} +1 -1
  112. package/build/server/chunks/{_page.svelte-Dnt12F6c.js → _page.svelte-Dq0B2wTX.js} +9 -7
  113. package/build/server/chunks/_page.svelte-Dq0B2wTX.js.map +1 -0
  114. package/build/server/chunks/{_page.svelte-BA7DptUV.js → _page.svelte-Du_FGvId.js} +3 -3
  115. package/build/server/chunks/{_page.svelte-BA7DptUV.js.map → _page.svelte-Du_FGvId.js.map} +1 -1
  116. package/build/server/chunks/{_server.ts-CVxiERfc.js → _server.ts--ajZwgpx.js} +4 -4
  117. package/build/server/chunks/{_server.ts-CVxiERfc.js.map → _server.ts--ajZwgpx.js.map} +1 -1
  118. package/build/server/chunks/{_server.ts-Gbkg-oto.js → _server.ts-B-YtpFZv.js} +4 -4
  119. package/build/server/chunks/{_server.ts-Gbkg-oto.js.map → _server.ts-B-YtpFZv.js.map} +1 -1
  120. package/build/server/chunks/{_server.ts-CbOKfJ3v.js → _server.ts-B3n_KrVi.js} +6 -6
  121. package/build/server/chunks/{_server.ts-CbOKfJ3v.js.map → _server.ts-B3n_KrVi.js.map} +1 -1
  122. package/build/server/chunks/{_server.ts-D3QPUpDc.js → _server.ts-B8JGa5NB.js} +4 -4
  123. package/build/server/chunks/{_server.ts-D3QPUpDc.js.map → _server.ts-B8JGa5NB.js.map} +1 -1
  124. package/build/server/chunks/{_server.ts-DsTUwnu1.js → _server.ts-B8vW8q3-.js} +4 -4
  125. package/build/server/chunks/{_server.ts-DsTUwnu1.js.map → _server.ts-B8vW8q3-.js.map} +1 -1
  126. package/build/server/chunks/{_server.ts-CreuvDch.js → _server.ts-BCivjDa1.js} +4 -4
  127. package/build/server/chunks/{_server.ts-CreuvDch.js.map → _server.ts-BCivjDa1.js.map} +1 -1
  128. package/build/server/chunks/{_server.ts-BGqa6Laa.js → _server.ts-BGMXMZ3f.js} +4 -4
  129. package/build/server/chunks/_server.ts-BGMXMZ3f.js.map +1 -0
  130. package/build/server/chunks/{_server.ts-B8YF9aVx.js → _server.ts-BG_3Aam5.js} +4 -4
  131. package/build/server/chunks/{_server.ts-B8YF9aVx.js.map → _server.ts-BG_3Aam5.js.map} +1 -1
  132. package/build/server/chunks/{_server.ts-CqH3nv-S.js → _server.ts-BQlauqG7.js} +5 -5
  133. package/build/server/chunks/{_server.ts-CqH3nv-S.js.map → _server.ts-BQlauqG7.js.map} +1 -1
  134. package/build/server/chunks/{_server.ts-Dd4Mh0JV.js → _server.ts-BQtDb5rW.js} +4 -4
  135. package/build/server/chunks/{_server.ts-Dd4Mh0JV.js.map → _server.ts-BQtDb5rW.js.map} +1 -1
  136. package/build/server/chunks/{_server.ts-BdLKHRnY.js → _server.ts-BTFsY3ns.js} +6 -6
  137. package/build/server/chunks/{_server.ts-BdLKHRnY.js.map → _server.ts-BTFsY3ns.js.map} +1 -1
  138. package/build/server/chunks/{_server.ts-3JO3CKsE.js → _server.ts-BUuhZLQW.js} +4 -4
  139. package/build/server/chunks/{_server.ts-3JO3CKsE.js.map → _server.ts-BUuhZLQW.js.map} +1 -1
  140. package/build/server/chunks/{_server.ts-D8cp-Em3.js → _server.ts-BYHQLzIU.js} +4 -4
  141. package/build/server/chunks/{_server.ts-D8cp-Em3.js.map → _server.ts-BYHQLzIU.js.map} +1 -1
  142. package/build/server/chunks/{_server.ts-DzIilMO5.js → _server.ts-BYNejrbv.js} +2 -2
  143. package/build/server/chunks/{_server.ts-DzIilMO5.js.map → _server.ts-BYNejrbv.js.map} +1 -1
  144. package/build/server/chunks/{_server.ts-CdB1K2M6.js → _server.ts-BZNECWdo.js} +2 -2
  145. package/build/server/chunks/{_server.ts-CdB1K2M6.js.map → _server.ts-BZNECWdo.js.map} +1 -1
  146. package/build/server/chunks/{_server.ts-B31I037d.js → _server.ts-Bd95fWI2.js} +6 -6
  147. package/build/server/chunks/{_server.ts-B31I037d.js.map → _server.ts-Bd95fWI2.js.map} +1 -1
  148. package/build/server/chunks/{_server.ts-SLlbT28g.js → _server.ts-BdyV0_Is.js} +2 -2
  149. package/build/server/chunks/{_server.ts-SLlbT28g.js.map → _server.ts-BdyV0_Is.js.map} +1 -1
  150. package/build/server/chunks/{_server.ts-CH8uRkxq.js → _server.ts-BfXe8M8I.js} +4 -4
  151. package/build/server/chunks/{_server.ts-CH8uRkxq.js.map → _server.ts-BfXe8M8I.js.map} +1 -1
  152. package/build/server/chunks/{_server.ts-B8EZxkK3.js → _server.ts-BglWcbgl.js} +5 -5
  153. package/build/server/chunks/{_server.ts-B8EZxkK3.js.map → _server.ts-BglWcbgl.js.map} +1 -1
  154. package/build/server/chunks/{_server.ts-BvbnbZsl.js → _server.ts-BhduAFwe.js} +4 -4
  155. package/build/server/chunks/{_server.ts-BvbnbZsl.js.map → _server.ts-BhduAFwe.js.map} +1 -1
  156. package/build/server/chunks/{_server.ts-C8BrkC8T.js → _server.ts-Bi7Kdi9Z.js} +5 -5
  157. package/build/server/chunks/{_server.ts-C8BrkC8T.js.map → _server.ts-Bi7Kdi9Z.js.map} +1 -1
  158. package/build/server/chunks/{_server.ts-pQ9okj_b.js → _server.ts-BnCNI_5v.js} +6 -6
  159. package/build/server/chunks/{_server.ts-pQ9okj_b.js.map → _server.ts-BnCNI_5v.js.map} +1 -1
  160. package/build/server/chunks/{_server.ts-CtltE_T-.js → _server.ts-Bttq5XEc.js} +2 -2
  161. package/build/server/chunks/{_server.ts-CtltE_T-.js.map → _server.ts-Bttq5XEc.js.map} +1 -1
  162. package/build/server/chunks/{_server.ts-CpJ08_Lw.js → _server.ts-C0gphQE8.js} +4 -4
  163. package/build/server/chunks/{_server.ts-CpJ08_Lw.js.map → _server.ts-C0gphQE8.js.map} +1 -1
  164. package/build/server/chunks/{_server.ts-DL9hlvL8.js → _server.ts-C0p_epYa.js} +4 -4
  165. package/build/server/chunks/{_server.ts-DL9hlvL8.js.map → _server.ts-C0p_epYa.js.map} +1 -1
  166. package/build/server/chunks/{_server.ts-CXI7k8hl.js → _server.ts-CBW-iSGY.js} +4 -4
  167. package/build/server/chunks/{_server.ts-CXI7k8hl.js.map → _server.ts-CBW-iSGY.js.map} +1 -1
  168. package/build/server/chunks/{_server.ts-BhRtn8Xn.js → _server.ts-CBYhHA1_.js} +4 -4
  169. package/build/server/chunks/{_server.ts-BhRtn8Xn.js.map → _server.ts-CBYhHA1_.js.map} +1 -1
  170. package/build/server/chunks/{_server.ts-CX2sHcZR.js → _server.ts-CFjN9JNk.js} +4 -4
  171. package/build/server/chunks/{_server.ts-CX2sHcZR.js.map → _server.ts-CFjN9JNk.js.map} +1 -1
  172. package/build/server/chunks/{_server.ts-CIEz-ybk.js → _server.ts-CHd9_WPs.js} +4 -4
  173. package/build/server/chunks/{_server.ts-CIEz-ybk.js.map → _server.ts-CHd9_WPs.js.map} +1 -1
  174. package/build/server/chunks/{_server.ts-4HorMS2R.js → _server.ts-CKqIuso7.js} +4 -4
  175. package/build/server/chunks/{_server.ts-4HorMS2R.js.map → _server.ts-CKqIuso7.js.map} +1 -1
  176. package/build/server/chunks/{_server.ts-DLVGDzlE.js → _server.ts-CObmPmDw.js} +4 -4
  177. package/build/server/chunks/{_server.ts-DLVGDzlE.js.map → _server.ts-CObmPmDw.js.map} +1 -1
  178. package/build/server/chunks/{_server.ts-MGn-MXr5.js → _server.ts-CQn6OWsw.js} +4 -4
  179. package/build/server/chunks/{_server.ts-MGn-MXr5.js.map → _server.ts-CQn6OWsw.js.map} +1 -1
  180. package/build/server/chunks/{_server.ts-BWtTOsFi.js → _server.ts-CQucsScY.js} +4 -4
  181. package/build/server/chunks/{_server.ts-BWtTOsFi.js.map → _server.ts-CQucsScY.js.map} +1 -1
  182. package/build/server/chunks/{_server.ts-B3ntDGZM.js → _server.ts-CZMBEF_P.js} +5 -5
  183. package/build/server/chunks/{_server.ts-B3ntDGZM.js.map → _server.ts-CZMBEF_P.js.map} +1 -1
  184. package/build/server/chunks/_server.ts-Cay6JJmu.js +205 -0
  185. package/build/server/chunks/_server.ts-Cay6JJmu.js.map +1 -0
  186. package/build/server/chunks/_server.ts-Cdq-yzqP.js +627 -0
  187. package/build/server/chunks/_server.ts-Cdq-yzqP.js.map +1 -0
  188. package/build/server/chunks/{_server.ts-1mdOjWEN.js → _server.ts-Ch8LouSG.js} +5 -5
  189. package/build/server/chunks/{_server.ts-1mdOjWEN.js.map → _server.ts-Ch8LouSG.js.map} +1 -1
  190. package/build/server/chunks/{_server.ts-B1Jl9Grz.js → _server.ts-Cmi0m_Ec.js} +4 -4
  191. package/build/server/chunks/{_server.ts-B1Jl9Grz.js.map → _server.ts-Cmi0m_Ec.js.map} +1 -1
  192. package/build/server/chunks/{_server.ts-Bq4Oko-2.js → _server.ts-CmshKmzd.js} +4 -4
  193. package/build/server/chunks/{_server.ts-Bq4Oko-2.js.map → _server.ts-CmshKmzd.js.map} +1 -1
  194. package/build/server/chunks/{_server.ts-C7K7bv8w.js → _server.ts-CoIWXJLt.js} +5 -5
  195. package/build/server/chunks/{_server.ts-C7K7bv8w.js.map → _server.ts-CoIWXJLt.js.map} +1 -1
  196. package/build/server/chunks/{_server.ts-E5YqcwqQ.js → _server.ts-CqviakL3.js} +4 -4
  197. package/build/server/chunks/{_server.ts-E5YqcwqQ.js.map → _server.ts-CqviakL3.js.map} +1 -1
  198. package/build/server/chunks/_server.ts-CrK5Xjnh.js +86 -0
  199. package/build/server/chunks/_server.ts-CrK5Xjnh.js.map +1 -0
  200. package/build/server/chunks/{_server.ts-BLUm8wAq.js → _server.ts-CsUJia-4.js} +4 -4
  201. package/build/server/chunks/{_server.ts-BLUm8wAq.js.map → _server.ts-CsUJia-4.js.map} +1 -1
  202. package/build/server/chunks/{_server.ts-BY7nR9Ev.js → _server.ts-CtqksBun.js} +4 -4
  203. package/build/server/chunks/{_server.ts-BY7nR9Ev.js.map → _server.ts-CtqksBun.js.map} +1 -1
  204. package/build/server/chunks/{_server.ts-IzD0bafW.js → _server.ts-CuFSHsdA.js} +5 -5
  205. package/build/server/chunks/{_server.ts-IzD0bafW.js.map → _server.ts-CuFSHsdA.js.map} +1 -1
  206. package/build/server/chunks/{_server.ts-CzoE8edN.js → _server.ts-CvBgeFp9.js} +5 -5
  207. package/build/server/chunks/{_server.ts-CzoE8edN.js.map → _server.ts-CvBgeFp9.js.map} +1 -1
  208. package/build/server/chunks/{_server.ts-DY3ZDXdA.js → _server.ts-CxOokd6P.js} +4 -4
  209. package/build/server/chunks/{_server.ts-DY3ZDXdA.js.map → _server.ts-CxOokd6P.js.map} +1 -1
  210. package/build/server/chunks/{_server.ts-Bu_7eQaL.js → _server.ts-CxpkPdkw.js} +5 -5
  211. package/build/server/chunks/{_server.ts-Bu_7eQaL.js.map → _server.ts-CxpkPdkw.js.map} +1 -1
  212. package/build/server/chunks/{_server.ts-BUIWPYRF.js → _server.ts-D-hh_BTK.js} +4 -4
  213. package/build/server/chunks/{_server.ts-BUIWPYRF.js.map → _server.ts-D-hh_BTK.js.map} +1 -1
  214. package/build/server/chunks/{_server.ts-D-Vwef5C.js → _server.ts-D064BG7i.js} +4 -4
  215. package/build/server/chunks/{_server.ts-D-Vwef5C.js.map → _server.ts-D064BG7i.js.map} +1 -1
  216. package/build/server/chunks/{_server.ts-DVRyf5BI.js → _server.ts-D0fThJEL.js} +4 -4
  217. package/build/server/chunks/{_server.ts-DVRyf5BI.js.map → _server.ts-D0fThJEL.js.map} +1 -1
  218. package/build/server/chunks/{_server.ts-CExwMomX.js → _server.ts-D4QpYVnk.js} +4 -4
  219. package/build/server/chunks/{_server.ts-CExwMomX.js.map → _server.ts-D4QpYVnk.js.map} +1 -1
  220. package/build/server/chunks/{_server.ts-DHBX6Ary.js → _server.ts-DABvBtNg.js} +5 -5
  221. package/build/server/chunks/{_server.ts-DHBX6Ary.js.map → _server.ts-DABvBtNg.js.map} +1 -1
  222. package/build/server/chunks/{_server.ts-BHmCir74.js → _server.ts-DBD7W3nM.js} +4 -4
  223. package/build/server/chunks/{_server.ts-BHmCir74.js.map → _server.ts-DBD7W3nM.js.map} +1 -1
  224. package/build/server/chunks/{_server.ts-C_EnHMEu.js → _server.ts-DDhNa_X1.js} +4 -4
  225. package/build/server/chunks/{_server.ts-C_EnHMEu.js.map → _server.ts-DDhNa_X1.js.map} +1 -1
  226. package/build/server/chunks/{_server.ts-Dc9XEMmF.js → _server.ts-DFBxMXVv.js} +4 -4
  227. package/build/server/chunks/{_server.ts-Dc9XEMmF.js.map → _server.ts-DFBxMXVv.js.map} +1 -1
  228. package/build/server/chunks/{_server.ts-DlwXpopR.js → _server.ts-DLS_wObr.js} +3 -3
  229. package/build/server/chunks/{_server.ts-DlwXpopR.js.map → _server.ts-DLS_wObr.js.map} +1 -1
  230. package/build/server/chunks/{_server.ts-Lzz9ashZ.js → _server.ts-DTlXzoMP.js} +4 -4
  231. package/build/server/chunks/{_server.ts-Lzz9ashZ.js.map → _server.ts-DTlXzoMP.js.map} +1 -1
  232. package/build/server/chunks/{_server.ts-Do5L_4tt.js → _server.ts-Dicprv7A.js} +4 -4
  233. package/build/server/chunks/{_server.ts-Do5L_4tt.js.map → _server.ts-Dicprv7A.js.map} +1 -1
  234. package/build/server/chunks/{_server.ts-CD-Cddqe.js → _server.ts-DooshvGc.js} +5 -5
  235. package/build/server/chunks/{_server.ts-CD-Cddqe.js.map → _server.ts-DooshvGc.js.map} +1 -1
  236. package/build/server/chunks/{_server.ts-j5xF-dJX.js → _server.ts-DpnQQsEi.js} +4 -4
  237. package/build/server/chunks/{_server.ts-j5xF-dJX.js.map → _server.ts-DpnQQsEi.js.map} +1 -1
  238. package/build/server/chunks/{_server.ts-CXmwf1pu.js → _server.ts-DqnxZoKV.js} +2 -2
  239. package/build/server/chunks/{_server.ts-CXmwf1pu.js.map → _server.ts-DqnxZoKV.js.map} +1 -1
  240. package/build/server/chunks/{_server.ts-DPC8qYUD.js → _server.ts-DwH287WQ.js} +4 -4
  241. package/build/server/chunks/{_server.ts-DPC8qYUD.js.map → _server.ts-DwH287WQ.js.map} +1 -1
  242. package/build/server/chunks/{_server.ts-CHQmAGEC.js → _server.ts-SA9d0x_K.js} +5 -5
  243. package/build/server/chunks/{_server.ts-CHQmAGEC.js.map → _server.ts-SA9d0x_K.js.map} +1 -1
  244. package/build/server/chunks/{_server.ts-C4pf3VKi.js → _server.ts-TS_ttjdr.js} +4 -4
  245. package/build/server/chunks/{_server.ts-C4pf3VKi.js.map → _server.ts-TS_ttjdr.js.map} +1 -1
  246. package/build/server/chunks/{_server.ts-BEjyvkVV.js → _server.ts-VtDFzmOm.js} +4 -4
  247. package/build/server/chunks/{_server.ts-BEjyvkVV.js.map → _server.ts-VtDFzmOm.js.map} +1 -1
  248. package/build/server/chunks/_server.ts-Y57oqscW.js +48 -0
  249. package/build/server/chunks/_server.ts-Y57oqscW.js.map +1 -0
  250. package/build/server/chunks/{_server.ts-CeeR1W32.js → _server.ts-YHGTRtDD.js} +4 -4
  251. package/build/server/chunks/{_server.ts-CeeR1W32.js.map → _server.ts-YHGTRtDD.js.map} +1 -1
  252. package/build/server/chunks/{_server.ts-CciSVwzg.js → _server.ts-Zu8ZTux3.js} +5 -5
  253. package/build/server/chunks/{_server.ts-CciSVwzg.js.map → _server.ts-Zu8ZTux3.js.map} +1 -1
  254. package/build/server/chunks/{_server.ts-CNLz6iJ7.js → _server.ts-_lxrLHOI.js} +4 -4
  255. package/build/server/chunks/{_server.ts-CNLz6iJ7.js.map → _server.ts-_lxrLHOI.js.map} +1 -1
  256. package/build/server/chunks/{_server.ts-BTvZB-WH.js → _server.ts-dBLS5OxC.js} +4 -4
  257. package/build/server/chunks/{_server.ts-BTvZB-WH.js.map → _server.ts-dBLS5OxC.js.map} +1 -1
  258. package/build/server/chunks/{_server.ts-ykNeG8km.js → _server.ts-jUybF0F9.js} +4 -4
  259. package/build/server/chunks/{_server.ts-ykNeG8km.js.map → _server.ts-jUybF0F9.js.map} +1 -1
  260. package/build/server/chunks/{_server.ts-C8zFV8J3.js → _server.ts-mFCCnU2f.js} +4 -4
  261. package/build/server/chunks/{_server.ts-C8zFV8J3.js.map → _server.ts-mFCCnU2f.js.map} +1 -1
  262. package/build/server/chunks/{_server.ts-yWBMi6sn.js → _server.ts-nOJLfmaj.js} +6 -6
  263. package/build/server/chunks/{_server.ts-yWBMi6sn.js.map → _server.ts-nOJLfmaj.js.map} +1 -1
  264. package/build/server/chunks/{_server.ts-DAW24-9-.js → _server.ts-pJgm08Ns.js} +4 -4
  265. package/build/server/chunks/{_server.ts-DAW24-9-.js.map → _server.ts-pJgm08Ns.js.map} +1 -1
  266. package/build/server/chunks/{_server.ts-BNJn20vV.js → _server.ts-vuXd3nrT.js} +4 -4
  267. package/build/server/chunks/{_server.ts-BNJn20vV.js.map → _server.ts-vuXd3nrT.js.map} +1 -1
  268. package/build/server/chunks/{_server.ts-QvBpEIYu.js → _server.ts-wKN3c9Bs.js} +4 -4
  269. package/build/server/chunks/{_server.ts-QvBpEIYu.js.map → _server.ts-wKN3c9Bs.js.map} +1 -1
  270. package/build/server/chunks/{addon-helpers-DBJL8kvq.js → addon-helpers-D3GJCulD.js} +3 -3
  271. package/build/server/chunks/{addon-helpers-DBJL8kvq.js.map → addon-helpers-D3GJCulD.js.map} +1 -1
  272. package/build/server/chunks/{akm-hO0p79ZE.js → akm-B_BIZJJv.js} +2 -2
  273. package/build/server/chunks/{akm-hO0p79ZE.js.map → akm-B_BIZJJv.js.map} +1 -1
  274. package/build/server/chunks/{client-DchoQXpW.js → client-DuNIsVic.js} +2 -2
  275. package/build/server/chunks/{client-DchoQXpW.js.map → client-DuNIsVic.js.map} +1 -1
  276. package/build/server/chunks/{config-5vfdWPGq.js → config-UnF5M7J6.js} +2 -2
  277. package/build/server/chunks/{config-5vfdWPGq.js.map → config-UnF5M7J6.js.map} +1 -1
  278. package/build/server/chunks/{docker-DYeytgDI.js → docker-DmrYwY_e.js} +2 -2
  279. package/build/server/chunks/{docker-DYeytgDI.js.map → docker-DmrYwY_e.js.map} +1 -1
  280. package/build/server/chunks/{endpoints-pIoXJCW6.js → endpoints-D6uoesB9.js} +19 -6
  281. package/build/server/chunks/endpoints-D6uoesB9.js.map +1 -0
  282. package/build/server/chunks/{environment-B0PbsX5P.js → environment-C9HyCxX9.js} +2 -2
  283. package/build/server/chunks/{environment-B0PbsX5P.js.map → environment-C9HyCxX9.js.map} +1 -1
  284. package/build/server/chunks/{error.svelte-Cmr7gpdL.js → error.svelte-BajT8v3i.js} +4 -4
  285. package/build/server/chunks/{error.svelte-Cmr7gpdL.js.map → error.svelte-BajT8v3i.js.map} +1 -1
  286. package/build/server/chunks/{helpers-CVirrNSz.js → helpers-zCNRvZpT.js} +3 -3
  287. package/build/server/chunks/{helpers-CVirrNSz.js.map → helpers-zCNRvZpT.js.map} +1 -1
  288. package/build/server/chunks/{hooks.server-pc-TSpQy.js → hooks.server-BKK-8Ct6.js} +6 -6
  289. package/build/server/chunks/hooks.server-BKK-8Ct6.js.map +1 -0
  290. package/build/server/chunks/{http-DGsfa0DV.js → http-Cm-sRzTa.js} +2 -2
  291. package/build/server/chunks/{http-DGsfa0DV.js.map → http-Cm-sRzTa.js.map} +1 -1
  292. package/build/server/chunks/{internal-DriC3vi3.js → internal-LXD6a4Om.js} +3 -3
  293. package/build/server/chunks/{internal-DriC3vi3.js.map → internal-LXD6a4Om.js.map} +1 -1
  294. package/build/server/chunks/{session-cookie-DEuOwtHY.js → session-cookie-CoF3FU_0.js} +2 -2
  295. package/build/server/chunks/{session-cookie-DEuOwtHY.js.map → session-cookie-CoF3FU_0.js.map} +1 -1
  296. package/build/server/chunks/{setup-deploy-D4bnmfpV.js → setup-deploy-CVYxUJZD.js} +2 -2
  297. package/build/server/chunks/{setup-deploy-D4bnmfpV.js.map → setup-deploy-CVYxUJZD.js.map} +1 -1
  298. package/build/server/chunks/{src-CyeWH4Df.js → src-efp8mb8-.js} +567 -81
  299. package/build/server/chunks/src-efp8mb8-.js.map +1 -0
  300. package/build/server/chunks/{state-BcUnjLg5.js → state-z9dl5k8n.js} +2 -2
  301. package/build/server/chunks/{state-BcUnjLg5.js.map → state-z9dl5k8n.js.map} +1 -1
  302. package/build/server/chunks/{theme-state.svelte-CeABRes-.js → theme-state.svelte-BNtUaCD7.js} +119 -20
  303. package/build/server/chunks/theme-state.svelte-BNtUaCD7.js.map +1 -0
  304. package/build/server/index.js +2 -2
  305. package/build/server/manifest.js +106 -85
  306. package/build/server/manifest.js.map +1 -1
  307. package/package.json +3 -2
  308. package/build/client/_app/immutable/assets/4.BFLRjZM9.css +0 -1
  309. package/build/client/_app/immutable/assets/4.BFLRjZM9.css.br +0 -0
  310. package/build/client/_app/immutable/assets/4.BFLRjZM9.css.gz +0 -0
  311. package/build/client/_app/immutable/assets/7.DKl0e2Fb.css +0 -1
  312. package/build/client/_app/immutable/assets/7.DKl0e2Fb.css.br +0 -0
  313. package/build/client/_app/immutable/assets/7.DKl0e2Fb.css.gz +0 -0
  314. package/build/client/_app/immutable/chunks/0swOyi-5.js +0 -3
  315. package/build/client/_app/immutable/chunks/0swOyi-5.js.br +0 -0
  316. package/build/client/_app/immutable/chunks/0swOyi-5.js.gz +0 -0
  317. package/build/client/_app/immutable/chunks/B4LSIsxy.js +0 -1
  318. package/build/client/_app/immutable/chunks/B4LSIsxy.js.br +0 -2
  319. package/build/client/_app/immutable/chunks/B4LSIsxy.js.gz +0 -0
  320. package/build/client/_app/immutable/chunks/BQ0vnNWj.js.br +0 -1
  321. package/build/client/_app/immutable/chunks/BQ0vnNWj.js.gz +0 -0
  322. package/build/client/_app/immutable/chunks/BTsRblfw.js.br +0 -0
  323. package/build/client/_app/immutable/chunks/BTsRblfw.js.gz +0 -0
  324. package/build/client/_app/immutable/chunks/Bmfn2m9N.js +0 -1
  325. package/build/client/_app/immutable/chunks/Bmfn2m9N.js.br +0 -1
  326. package/build/client/_app/immutable/chunks/Bmfn2m9N.js.gz +0 -0
  327. package/build/client/_app/immutable/chunks/C-9oV3QK.js +0 -1
  328. package/build/client/_app/immutable/chunks/C-9oV3QK.js.br +0 -0
  329. package/build/client/_app/immutable/chunks/C-9oV3QK.js.gz +0 -0
  330. package/build/client/_app/immutable/chunks/CDS1U3lf.js.br +0 -0
  331. package/build/client/_app/immutable/chunks/CDS1U3lf.js.gz +0 -0
  332. package/build/client/_app/immutable/chunks/TM1MyO6b.js +0 -5
  333. package/build/client/_app/immutable/chunks/TM1MyO6b.js.br +0 -0
  334. package/build/client/_app/immutable/chunks/TM1MyO6b.js.gz +0 -0
  335. package/build/client/_app/immutable/chunks/irujFCsS.js.br +0 -0
  336. package/build/client/_app/immutable/chunks/irujFCsS.js.gz +0 -0
  337. package/build/client/_app/immutable/entry/app.j4FjlmJV.js +0 -2
  338. package/build/client/_app/immutable/entry/app.j4FjlmJV.js.br +0 -0
  339. package/build/client/_app/immutable/entry/app.j4FjlmJV.js.gz +0 -0
  340. package/build/client/_app/immutable/entry/start.BG0VgQz3.js +0 -1
  341. package/build/client/_app/immutable/entry/start.BG0VgQz3.js.br +0 -1
  342. package/build/client/_app/immutable/entry/start.BG0VgQz3.js.gz +0 -0
  343. package/build/client/_app/immutable/nodes/0.C7eQ_ow9.js +0 -1
  344. package/build/client/_app/immutable/nodes/0.C7eQ_ow9.js.br +0 -0
  345. package/build/client/_app/immutable/nodes/0.C7eQ_ow9.js.gz +0 -0
  346. package/build/client/_app/immutable/nodes/1.DOderKqv.js +0 -1
  347. package/build/client/_app/immutable/nodes/1.DOderKqv.js.br +0 -1
  348. package/build/client/_app/immutable/nodes/1.DOderKqv.js.gz +0 -0
  349. package/build/client/_app/immutable/nodes/2.B-8ehRO1.js +0 -1
  350. package/build/client/_app/immutable/nodes/2.B-8ehRO1.js.br +0 -0
  351. package/build/client/_app/immutable/nodes/2.B-8ehRO1.js.gz +0 -0
  352. package/build/client/_app/immutable/nodes/3.B_FXzjZB.js +0 -1
  353. package/build/client/_app/immutable/nodes/3.B_FXzjZB.js.br +0 -0
  354. package/build/client/_app/immutable/nodes/3.B_FXzjZB.js.gz +0 -0
  355. package/build/client/_app/immutable/nodes/4.CL9pbPfw.js +0 -19
  356. package/build/client/_app/immutable/nodes/4.CL9pbPfw.js.br +0 -0
  357. package/build/client/_app/immutable/nodes/4.CL9pbPfw.js.gz +0 -0
  358. package/build/client/_app/immutable/nodes/5.By0afU0Y.js +0 -4
  359. package/build/client/_app/immutable/nodes/5.By0afU0Y.js.br +0 -0
  360. package/build/client/_app/immutable/nodes/5.By0afU0Y.js.gz +0 -0
  361. package/build/client/_app/immutable/nodes/6.BnWmdf6t.js +0 -1
  362. package/build/client/_app/immutable/nodes/6.BnWmdf6t.js.br +0 -0
  363. package/build/client/_app/immutable/nodes/6.BnWmdf6t.js.gz +0 -0
  364. package/build/client/_app/immutable/nodes/7.RAc8_3qJ.js +0 -15
  365. package/build/client/_app/immutable/nodes/7.RAc8_3qJ.js.br +0 -0
  366. package/build/client/_app/immutable/nodes/7.RAc8_3qJ.js.gz +0 -0
  367. package/build/client/_app/immutable/nodes/8.Dytsowyk.js +0 -1
  368. package/build/client/_app/immutable/nodes/8.Dytsowyk.js.br +0 -0
  369. package/build/client/_app/immutable/nodes/8.Dytsowyk.js.gz +0 -0
  370. package/build/client/_app/immutable/nodes/9.CFQabEMi.js +0 -5
  371. package/build/client/_app/immutable/nodes/9.CFQabEMi.js.br +0 -0
  372. package/build/client/_app/immutable/nodes/9.CFQabEMi.js.gz +0 -0
  373. package/build/server/chunks/0-BGsPZcaQ.js +0 -9
  374. package/build/server/chunks/1-Daoybjaw.js +0 -9
  375. package/build/server/chunks/4-Lm1O6Rmh.js +0 -9
  376. package/build/server/chunks/4-Lm1O6Rmh.js.map +0 -1
  377. package/build/server/chunks/5-BfmhtNP9.js +0 -9
  378. package/build/server/chunks/6-AcylLX8-.js +0 -9
  379. package/build/server/chunks/7-BT0zxD9E.js +0 -9
  380. package/build/server/chunks/7-BT0zxD9E.js.map +0 -1
  381. package/build/server/chunks/Navbar-C9kE6wR-.js.map +0 -1
  382. package/build/server/chunks/_page.svelte-C0eMsRDk.js.map +0 -1
  383. package/build/server/chunks/_page.svelte-Dl3WoXNo.js.map +0 -1
  384. package/build/server/chunks/_page.svelte-Dnt12F6c.js.map +0 -1
  385. package/build/server/chunks/_server.ts-B79PxL9c.js +0 -91
  386. package/build/server/chunks/_server.ts-B79PxL9c.js.map +0 -1
  387. package/build/server/chunks/_server.ts-BGqa6Laa.js.map +0 -1
  388. package/build/server/chunks/endpoints-pIoXJCW6.js.map +0 -1
  389. package/build/server/chunks/hooks.server-pc-TSpQy.js.map +0 -1
  390. package/build/server/chunks/src-CyeWH4Df.js.map +0 -1
  391. package/build/server/chunks/theme-state.svelte-CeABRes-.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,87 @@ 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
+ /**
7390
+ * Build the stack.env image-tag entries for a platform release.
7391
+ *
7392
+ * `tag` is the platform version-of-record (the assistant tag). Per-image
7393
+ * overrides let guardian/channel ride an older published tag when a release
7394
+ * shipped only a subset of images (#477). OP_IMAGE_TAG stays as the compose
7395
+ * fallback for pre-per-image installs.
7396
+ */
7397
+ function buildPlatformImageTagEnv(tag, perImage) {
7398
+ return {
7399
+ OP_IMAGE_TAG: tag,
7400
+ OP_ASSISTANT_IMAGE_TAG: perImage?.OP_ASSISTANT_IMAGE_TAG ?? tag,
7401
+ OP_GUARDIAN_IMAGE_TAG: perImage?.OP_GUARDIAN_IMAGE_TAG ?? tag,
7402
+ OP_CHANNEL_IMAGE_TAG: perImage?.OP_CHANNEL_IMAGE_TAG ?? tag
7403
+ };
7404
+ }
7405
+ //#endregion
7406
+ //#region ../lib/src/control-plane/versioning.ts
7407
+ var SEMVER_RE = /^v?\d+\.\d+\.\d+(?:[-+].*)?$/;
7408
+ function isComparableSemver(version) {
7409
+ return !!version && SEMVER_RE.test(version.trim());
7410
+ }
7411
+ function parseComparableVersion(version) {
7412
+ const clean = version.trim().replace(/^v/, "").split("+")[0];
7413
+ const dashIdx = clean.indexOf("-");
7414
+ const main = dashIdx === -1 ? clean : clean.slice(0, dashIdx);
7415
+ const prerelease = dashIdx === -1 ? null : clean.slice(dashIdx + 1);
7416
+ const [major = 0, minor = 0, patch = 0] = main.split(".").map(Number);
7417
+ return {
7418
+ major,
7419
+ minor,
7420
+ patch,
7421
+ prerelease
7422
+ };
7423
+ }
7424
+ function comparePrerelease(a, b) {
7425
+ const aParts = a.split(".");
7426
+ const bParts = b.split(".");
7427
+ for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
7428
+ if (i >= aParts.length) return -1;
7429
+ if (i >= bParts.length) return 1;
7430
+ const aNum = Number(aParts[i]);
7431
+ const bNum = Number(bParts[i]);
7432
+ const aIsNum = !Number.isNaN(aNum);
7433
+ const bIsNum = !Number.isNaN(bNum);
7434
+ if (aIsNum && bIsNum) {
7435
+ if (aNum !== bNum) return aNum > bNum ? 1 : -1;
7436
+ continue;
7437
+ }
7438
+ if (aIsNum !== bIsNum) return aIsNum ? -1 : 1;
7439
+ if (aParts[i] !== bParts[i]) return aParts[i] > bParts[i] ? 1 : -1;
7440
+ }
7441
+ return 0;
7442
+ }
7443
+ function compareComparableVersions(a, b) {
7444
+ const aParsed = parseComparableVersion(a);
7445
+ const bParsed = parseComparableVersion(b);
7446
+ if (aParsed.major !== bParsed.major) return aParsed.major > bParsed.major ? 1 : -1;
7447
+ if (aParsed.minor !== bParsed.minor) return aParsed.minor > bParsed.minor ? 1 : -1;
7448
+ if (aParsed.patch !== bParsed.patch) return aParsed.patch > bParsed.patch ? 1 : -1;
7449
+ if (aParsed.prerelease === null && bParsed.prerelease !== null) return 1;
7450
+ if (aParsed.prerelease !== null && bParsed.prerelease === null) return -1;
7451
+ if (aParsed.prerelease !== null && bParsed.prerelease !== null) return comparePrerelease(aParsed.prerelease, bParsed.prerelease);
7452
+ return 0;
7453
+ }
7454
+ function majorVersionOf(version) {
7455
+ if (!isComparableSemver(version)) return null;
7456
+ return parseComparableVersion(version).major;
7457
+ }
7458
+ function isSameMajorVersion(a, b) {
7459
+ const aMajor = majorVersionOf(a);
7460
+ const bMajor = majorVersionOf(b);
7461
+ return aMajor !== null && bMajor !== null && aMajor === bMajor;
7462
+ }
7463
+ //#endregion
7381
7464
  //#region ../lib/src/control-plane/migrations.ts
7382
7465
  /**
7383
7466
  * On-disk layout migration harness.
@@ -7412,6 +7495,17 @@ var MigrationError = class extends Error {
7412
7495
  this.name = "MigrationError";
7413
7496
  }
7414
7497
  };
7498
+ var RELEASE_VERSION_KEY = "OP_RELEASE_VERSION";
7499
+ var CURRENT_RELEASE_VERSION = `v${package_default.version}`;
7500
+ function selectPendingReleaseMigrations(releaseFrom, targetVersion) {
7501
+ if (!isComparableSemver(targetVersion)) return [];
7502
+ return RELEASE_MIGRATIONS.filter((migration) => {
7503
+ if (!isComparableSemver(migration.version)) return false;
7504
+ if (compareComparableVersions(migration.version, targetVersion) > 0) return false;
7505
+ if (releaseFrom === null || !isComparableSemver(releaseFrom)) return true;
7506
+ return compareComparableVersions(migration.version, releaseFrom) > 0;
7507
+ }).sort((a, b) => compareComparableVersions(a.version, b.version));
7508
+ }
7415
7509
  function stackEnvFile(stashDir) {
7416
7510
  return join(stashDir, "env", "stack.env");
7417
7511
  }
@@ -7435,6 +7529,26 @@ function stampLayoutVersion(stashDir, version) {
7435
7529
  if (!existsSync(envPath)) return;
7436
7530
  writeFileSync(envPath, upsertEnvValue(readFileSync(envPath, "utf-8"), LAYOUT_VERSION_KEY, String(version)));
7437
7531
  }
7532
+ function readReleaseVersion(stashDir) {
7533
+ const envPath = stackEnvFile(stashDir);
7534
+ if (!existsSync(envPath)) return null;
7535
+ let imageTagFallback = null;
7536
+ for (const line of readFileSync(envPath, "utf-8").split("\n")) {
7537
+ const releaseMatch = line.match(/^OP_RELEASE_VERSION=(.+)\s*$/);
7538
+ if (releaseMatch) return releaseMatch[1].trim();
7539
+ const imageTagMatch = line.match(/^OP_IMAGE_TAG=(.+)\s*$/);
7540
+ if (imageTagMatch && !imageTagFallback) imageTagFallback = imageTagMatch[1].trim();
7541
+ }
7542
+ return imageTagFallback;
7543
+ }
7544
+ function stampReleaseVersion(stashDir, version) {
7545
+ const envPath = stackEnvFile(stashDir);
7546
+ if (!existsSync(envPath)) return;
7547
+ writeFileSync(envPath, upsertEnvValue(readFileSync(envPath, "utf-8"), RELEASE_VERSION_KEY, version));
7548
+ }
7549
+ function upsertMany(content, values) {
7550
+ return Object.entries(values).reduce((next, [key, value]) => upsertEnvValue(next, key, value), content);
7551
+ }
7438
7552
  function ensureDir(ctx, dir) {
7439
7553
  if (ctx.dryRun) {
7440
7554
  ctx.log(`[dry-run] mkdir ${rel(ctx, dir)}`);
@@ -7476,6 +7590,20 @@ function writeFile600(ctx, path, content) {
7476
7590
  chmodSync(path, 384);
7477
7591
  } catch {}
7478
7592
  }
7593
+ function seedPerImageTagVars(ctx) {
7594
+ const envPath = stackEnvFile(ctx.stashDir);
7595
+ if (!existsSync(envPath)) return;
7596
+ const current = readFileSync(envPath, "utf-8");
7597
+ const imageTag = current.match(/^OP_IMAGE_TAG=(.+)$/m)?.[1]?.trim();
7598
+ if (!imageTag) return;
7599
+ if (PLATFORM_IMAGE_TAG_KEYS.filter((key) => !new RegExp(`^${key}=`, "m").test(current)).length === 0) return;
7600
+ if (ctx.dryRun) {
7601
+ ctx.log(`[dry-run] seed per-image tag vars from OP_IMAGE_TAG=${imageTag}`);
7602
+ return;
7603
+ }
7604
+ writeFile600(ctx, envPath, upsertMany(current, buildPlatformImageTagEnv(imageTag)));
7605
+ ctx.log(`seeded per-image tag vars from OP_IMAGE_TAG=${imageTag}`);
7606
+ }
7479
7607
  var SECRET_KEY_RE = /(_API_KEY|_TOKEN|_SECRET|_PASSWORD)$/;
7480
7608
  var CONFIG_KEY_RE = /^(OP_CAP_|SYSTEM_LLM_|EMBEDDING_)/;
7481
7609
  function migrate010to011(ctx) {
@@ -7631,6 +7759,19 @@ var MIGRATIONS = [{
7631
7759
  if (!existsSync(stackEnvFile(ctx.stashDir))) throw new Error("post-migration check failed: knowledge/env/stack.env is missing");
7632
7760
  }
7633
7761
  }];
7762
+ var RELEASE_MIGRATIONS = [{
7763
+ version: "v0.11.5-rc.1",
7764
+ describe: "seed per-image platform tags from OP_IMAGE_TAG",
7765
+ apply: seedPerImageTagVars,
7766
+ verify(ctx) {
7767
+ if (ctx.dryRun) return;
7768
+ const envPath = stackEnvFile(ctx.stashDir);
7769
+ if (!existsSync(envPath)) return;
7770
+ const content = readFileSync(envPath, "utf-8");
7771
+ if (!/^OP_IMAGE_TAG=/m.test(content)) return;
7772
+ 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`);
7773
+ }
7774
+ }];
7634
7775
  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
7776
  /**
7636
7777
  * Ensure the home directory is migrated to the current layout. Safe to call at
@@ -7653,24 +7794,25 @@ function ensureMigrated(opts = {}) {
7653
7794
  notes: []
7654
7795
  };
7655
7796
  const from = readLayoutVersion(ctxBase);
7797
+ const releaseFrom = readReleaseVersion(stashDir);
7656
7798
  const empty = {
7657
7799
  migrated: false,
7658
7800
  from,
7659
7801
  to: from,
7660
7802
  applied: [],
7661
7803
  backupDir: null,
7662
- notes: []
7804
+ notes: [],
7805
+ releaseFrom,
7806
+ releaseTo: CURRENT_RELEASE_VERSION,
7807
+ releaseApplied: []
7663
7808
  };
7664
- if (from >= 1) {
7665
- if (!dryRun) stampLayoutVersion(stashDir, 1);
7666
- return {
7667
- ...empty,
7668
- to: 1
7669
- };
7670
- }
7671
- 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);
7809
+ const pending = MIGRATIONS.filter((m) => m.from >= from && m.from < 1).sort((a, b) => a.from - b.from);
7810
+ const pendingRelease = selectPendingReleaseMigrations(releaseFrom, CURRENT_RELEASE_VERSION);
7811
+ if (pending.length === 0 && pendingRelease.length === 0) {
7812
+ if (!dryRun) {
7813
+ stampLayoutVersion(stashDir, 1);
7814
+ stampReleaseVersion(stashDir, CURRENT_RELEASE_VERSION);
7815
+ }
7674
7816
  return {
7675
7817
  ...empty,
7676
7818
  to: 1
@@ -7697,6 +7839,7 @@ function ensureMigrated(opts = {}) {
7697
7839
  log(`Backup: ${backupDir}`);
7698
7840
  }
7699
7841
  const applied = [];
7842
+ const releaseApplied = [];
7700
7843
  const notes = [];
7701
7844
  for (const m of pending) {
7702
7845
  const ctx = {
@@ -7708,13 +7851,107 @@ function ensureMigrated(opts = {}) {
7708
7851
  m.verify(ctx);
7709
7852
  applied.push(`${m.from}->${m.to}`);
7710
7853
  }
7711
- if (!dryRun) stampLayoutVersion(stashDir, 1);
7854
+ for (const migration of pendingRelease) {
7855
+ const ctx = {
7856
+ ...ctxBase,
7857
+ notes
7858
+ };
7859
+ log(`Migrating release ${releaseFrom ?? "unknown"} → ${migration.version}: ${migration.describe}`);
7860
+ migration.apply(ctx);
7861
+ migration.verify(ctx);
7862
+ releaseApplied.push(migration.version);
7863
+ }
7864
+ if (!dryRun) {
7865
+ stampLayoutVersion(stashDir, 1);
7866
+ stampReleaseVersion(stashDir, CURRENT_RELEASE_VERSION);
7867
+ }
7712
7868
  return {
7713
7869
  migrated: true,
7714
7870
  from,
7715
7871
  to: 1,
7716
7872
  applied,
7717
7873
  backupDir,
7874
+ notes,
7875
+ releaseFrom,
7876
+ releaseTo: CURRENT_RELEASE_VERSION,
7877
+ releaseApplied
7878
+ };
7879
+ } catch (e) {
7880
+ if (e instanceof MigrationError) throw e;
7881
+ throw new MigrationError(`Migration failed: ${e instanceof Error ? e.message : String(e)}`, RECOVERY_GUIDANCE, backupDir);
7882
+ } finally {
7883
+ releaseInstallLock(lock);
7884
+ }
7885
+ }
7886
+ function ensureReleaseMigrated(opts) {
7887
+ const homeDir = opts.homeDir ?? resolveOpenPalmHome();
7888
+ const dryRun = opts.dryRun ?? false;
7889
+ const log = opts.log ?? (() => {});
7890
+ const stashDir = resolveStashDir();
7891
+ const targetVersion = opts.targetVersion.trim();
7892
+ const releaseFrom = readReleaseVersion(stashDir);
7893
+ const pendingRelease = selectPendingReleaseMigrations(releaseFrom, targetVersion);
7894
+ const empty = {
7895
+ migrated: false,
7896
+ from: releaseFrom,
7897
+ to: targetVersion,
7898
+ applied: [],
7899
+ backupDir: null,
7900
+ notes: []
7901
+ };
7902
+ if (pendingRelease.length === 0) {
7903
+ if (!dryRun && releaseFrom !== targetVersion) stampReleaseVersion(stashDir, targetVersion);
7904
+ return empty;
7905
+ }
7906
+ const ctxBase = {
7907
+ homeDir,
7908
+ dataDir: resolveDataDir(),
7909
+ stackDir: resolveStackDir(),
7910
+ stashDir,
7911
+ configDir: resolveConfigDir(),
7912
+ dryRun,
7913
+ log,
7914
+ notes: []
7915
+ };
7916
+ let lock = null;
7917
+ let backupDir = null;
7918
+ try {
7919
+ if (!dryRun) {
7920
+ try {
7921
+ mkdirSync(ctxBase.dataDir, { recursive: true });
7922
+ } catch (e) {
7923
+ throw new MigrationError(`Could not prepare the data directory: ${e instanceof Error ? e.message : String(e)}`, RECOVERY_GUIDANCE, null);
7924
+ }
7925
+ lock = acquireInstallLock(ctxBase.dataDir);
7926
+ if (!lock) throw new MigrationError("Another install/upgrade is in progress.", RECOVERY_GUIDANCE, null);
7927
+ log("Taking a full backup before migrating…");
7928
+ try {
7929
+ backupDir = backupOpenPalmHome(homeDir);
7930
+ } catch (e) {
7931
+ throw new MigrationError(`Could not create a safety backup; upgrade aborted (no changes made): ${e instanceof Error ? e.message : String(e)}`, RECOVERY_GUIDANCE, null);
7932
+ }
7933
+ if (!backupDir) throw new MigrationError("Could not create a safety backup; upgrade aborted (no changes made).", RECOVERY_GUIDANCE, null);
7934
+ log(`Backup: ${backupDir}`);
7935
+ }
7936
+ const applied = [];
7937
+ const notes = [];
7938
+ for (const migration of pendingRelease) {
7939
+ const ctx = {
7940
+ ...ctxBase,
7941
+ notes
7942
+ };
7943
+ log(`Migrating release ${releaseFrom ?? "unknown"} → ${migration.version}: ${migration.describe}`);
7944
+ migration.apply(ctx);
7945
+ migration.verify(ctx);
7946
+ applied.push(migration.version);
7947
+ }
7948
+ if (!dryRun) stampReleaseVersion(stashDir, targetVersion);
7949
+ return {
7950
+ migrated: true,
7951
+ from: releaseFrom,
7952
+ to: targetVersion,
7953
+ applied,
7954
+ backupDir,
7718
7955
  notes
7719
7956
  };
7720
7957
  } catch (e) {
@@ -11419,7 +11656,7 @@ function generateFallbackSystemEnv(state) {
11419
11656
  "",
11420
11657
  "# ── Images ──────────────────────────────────────────────────────────",
11421
11658
  `OP_IMAGE_NAMESPACE=${process.env.OP_IMAGE_NAMESPACE ?? "openpalm"}`,
11422
- `OP_IMAGE_TAG=${DEFAULT_IMAGE_TAG}`,
11659
+ ...Object.entries(buildPlatformImageTagEnv(DEFAULT_IMAGE_TAG)).map(([key, value]) => `${key}=${value}`),
11423
11660
  "",
11424
11661
  "# ── Layout (on-disk schema version; managed by the migration harness) ──",
11425
11662
  `OP_LAYOUT_VERSION=1`,
@@ -12804,7 +13041,7 @@ function buildAkmEndpoint(provider, baseUrl, suffix) {
12804
13041
  */
12805
13042
  function writeFileAtomic(path, content, mode) {
12806
13043
  const tmp = `${path}.tmp`;
12807
- writeFileSync(tmp, content, { mode } );
13044
+ writeFileSync(tmp, content, mode !== void 0 ? { mode } : {});
12808
13045
  renameSync(tmp, path);
12809
13046
  }
12810
13047
  //#endregion
@@ -13343,6 +13580,11 @@ function buildComposeOptions(state) {
13343
13580
  /** Lifecycle helpers — state factory, apply transitions, compose file list. */
13344
13581
  var IMAGE_NAMESPACE_RE = /^[a-z0-9]+(?:[._-][a-z0-9]+)*$/;
13345
13582
  var SEMVER_TAG_RE = /^v\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/;
13583
+ var PLATFORM_IMAGE_NAMES = [
13584
+ "assistant",
13585
+ "guardian",
13586
+ "channel"
13587
+ ];
13346
13588
  function createState() {
13347
13589
  const homeDir = resolveOpenPalmHome();
13348
13590
  const configDir = resolveConfigDir();
@@ -13442,39 +13684,122 @@ function resolveNewestDockerTag(payload) {
13442
13684
  }
13443
13685
  return fallback;
13444
13686
  }
13687
+ function resolvePlatformVersionPolicyBaseTag(state) {
13688
+ const configured = parseEnvFile(`${state.stashDir}/env/stack.env`).OP_IMAGE_TAG?.trim();
13689
+ if (isComparableSemver(configured)) return configured;
13690
+ return `v${package_default.version}`;
13691
+ }
13692
+ function resolveNewestDockerTagForCurrentMajor(payload, currentTag) {
13693
+ const results = payload?.results;
13694
+ if (!Array.isArray(results)) return null;
13695
+ let best = null;
13696
+ for (const entry of results) {
13697
+ const name = typeof entry?.name === "string" ? entry.name.trim() : "";
13698
+ if (!isComparableSemver(name) || !isSameMajorVersion(name, currentTag)) continue;
13699
+ if (!best || compareComparableVersions(name, best) > 0) best = name;
13700
+ }
13701
+ return best;
13702
+ }
13445
13703
  function resolveImageNamespace(state) {
13446
13704
  const namespace = (parseEnvFile(`${state.stashDir}/env/stack.env`).OP_IMAGE_NAMESPACE ?? process.env.OP_IMAGE_NAMESPACE ?? "openpalm").trim().toLowerCase();
13447
13705
  if (!IMAGE_NAMESPACE_RE.test(namespace)) throw new Error(`Invalid image namespace in system.env: ${namespace}`);
13448
13706
  return namespace;
13449
13707
  }
13708
+ function resolveRequiredPlatformImages(state) {
13709
+ const required = new Set(["assistant"]);
13710
+ if (hasEnabledChannel(listEnabledAddonIds(state.homeDir))) {
13711
+ required.add("guardian");
13712
+ required.add("channel");
13713
+ }
13714
+ return PLATFORM_IMAGE_NAMES.filter((name) => required.has(name));
13715
+ }
13716
+ async function isDockerImageTagPublished(namespace, imageName, tag) {
13717
+ let response;
13718
+ try {
13719
+ response = await fetch(`https://registry.hub.docker.com/v2/repositories/${namespace}/${imageName}/tags/${tag}`, { headers: { Accept: "application/json" } });
13720
+ } catch (e) {
13721
+ throw new Error(`Failed to verify Docker image tag ${namespace}/${imageName}:${tag}: ${e instanceof Error ? e.message : String(e)}`);
13722
+ }
13723
+ if (response.status === 404) return false;
13724
+ if (!response.ok) throw new Error(`Docker tag verification failed for ${namespace}/${imageName}:${tag} (${response.status})`);
13725
+ return true;
13726
+ }
13727
+ async function fetchDockerTagsPayload(namespace, imageName) {
13728
+ let response;
13729
+ try {
13730
+ response = await fetch(`https://registry.hub.docker.com/v2/repositories/${namespace}/${imageName}/tags?page_size=25&ordering=last_updated`, { headers: { Accept: "application/json" } });
13731
+ } catch (e) {
13732
+ throw new Error(`Failed to query Docker tags: ${e instanceof Error ? e.message : String(e)}`);
13733
+ }
13734
+ if (!response.ok) throw new Error(`Docker tag lookup failed (${response.status})`);
13735
+ return response.json();
13736
+ }
13737
+ /** Newest comparable semver tag for an image that is <= ceilingTag in the same major. */
13738
+ function resolveNewestDockerTagAtOrBelow(payload, ceilingTag) {
13739
+ const results = payload?.results;
13740
+ if (!Array.isArray(results)) return null;
13741
+ let best = null;
13742
+ for (const entry of results) {
13743
+ const name = typeof entry?.name === "string" ? entry.name.trim() : "";
13744
+ if (!isComparableSemver(name) || !isSameMajorVersion(name, ceilingTag)) continue;
13745
+ if (compareComparableVersions(name, ceilingTag) > 0) continue;
13746
+ if (!best || compareComparableVersions(name, best) > 0) best = name;
13747
+ }
13748
+ return best;
13749
+ }
13750
+ /**
13751
+ * Resolve the per-image tag env for a target platform tag (#477).
13752
+ *
13753
+ * `assistant` is the version-of-record image and must be published at the
13754
+ * platform tag. Guardian/channel may lag: a release that ships only a subset
13755
+ * of images leaves them at an older tag, so each falls back to its newest
13756
+ * published tag <= the platform tag in the same major. Fail closed only when
13757
+ * a REQUIRED image (guardian/channel with a channel addon enabled) has no
13758
+ * usable tag at all.
13759
+ */
13760
+ async function resolvePlatformImageTags(state, namespace, platformTag) {
13761
+ if (namespace !== "openpalm") return buildPlatformImageTagEnv(platformTag);
13762
+ if (!await isDockerImageTagPublished(namespace, "assistant", platformTag)) throw new Error(`Refusing to update to ${namespace}/assistant:${platformTag}: tag is not published. stack.env was left unchanged.`);
13763
+ const required = new Set(resolveRequiredPlatformImages(state));
13764
+ const perImage = {};
13765
+ for (const imageName of ["guardian", "channel"]) {
13766
+ if (await isDockerImageTagPublished(namespace, imageName, platformTag)) continue;
13767
+ const fallbackTag = resolveNewestDockerTagAtOrBelow(await fetchDockerTagsPayload(namespace, imageName), platformTag);
13768
+ if (fallbackTag) {
13769
+ perImage[`OP_${imageName.toUpperCase()}_IMAGE_TAG`] = fallbackTag;
13770
+ continue;
13771
+ }
13772
+ if (required.has(imageName)) throw new Error(`Refusing to update to ${namespace}/*:${platformTag}: no published tag found for ${imageName} at or below ${platformTag}. This release is incomplete for the enabled services; stack.env was left unchanged.`);
13773
+ }
13774
+ return buildPlatformImageTagEnv(platformTag, perImage);
13775
+ }
13450
13776
  /**
13451
13777
  * Resolve the newest published platform tag from the Docker registry.
13452
13778
  *
13453
- * `assistant` is the version-of-record image: all platform images
13454
- * (assistant, guardian, channel, voice) are published in lockstep under the
13455
- * same OP_IMAGE_TAG, so its newest tag is the canonical platform version.
13779
+ * `assistant` is the version-of-record image: its newest tag is the canonical
13780
+ * platform version. Guardian/channel may lag behind it when a release shipped
13781
+ * only a subset of images see resolvePlatformImageTags.
13456
13782
  *
13457
13783
  * Used both to auto-detect during "Update now" and to resolve a requested
13458
13784
  * `latest` selection into a concrete release tag before fetching stack assets
13459
13785
  * (GitHub has no asset tree at a `latest` ref).
13460
13786
  */
13461
13787
  async function resolveLatestPlatformTag(namespace) {
13462
- let response;
13463
- try {
13464
- response = await fetch(`https://registry.hub.docker.com/v2/repositories/${namespace}/assistant/tags?page_size=25&ordering=last_updated`, { headers: { Accept: "application/json" } });
13465
- } catch (e) {
13466
- throw new Error(`Failed to query Docker tags: ${e instanceof Error ? e.message : String(e)}`);
13467
- }
13468
- if (!response.ok) throw new Error(`Docker tag lookup failed (${response.status})`);
13469
- const latestTag = resolveNewestDockerTag(await response.json());
13788
+ const latestTag = resolveNewestDockerTag(await fetchDockerTagsPayload(namespace, "assistant"));
13470
13789
  if (!latestTag) throw new Error("No usable Docker image tag found");
13471
13790
  return latestTag;
13472
13791
  }
13473
- async function updateStackEnvToLatestImageTag(state) {
13792
+ async function resolveLatestPlatformTagForCurrentMajor(namespace, currentTag) {
13793
+ const latestTag = resolveNewestDockerTagForCurrentMajor(await fetchDockerTagsPayload(namespace, "assistant"), currentTag);
13794
+ if (!latestTag) throw new Error(`No usable Docker image tag found in major ${currentTag.replace(/^v/, "").split(".")[0]}`);
13795
+ return latestTag;
13796
+ }
13797
+ async function updateStackEnvToLatestImageTag(state, resolvedTag) {
13474
13798
  const systemEnvPath = `${state.stashDir}/env/stack.env`;
13475
13799
  const namespace = resolveImageNamespace(state);
13476
- const latestTag = await resolveLatestPlatformTag(namespace);
13477
- writeFileSync(systemEnvPath, mergeEnvContent(existsSync(systemEnvPath) ? readFileSync(systemEnvPath, "utf-8") : "", { OP_IMAGE_TAG: latestTag }, { uncomment: true }));
13800
+ const latestTag = resolvedTag ?? await resolveLatestPlatformTagForCurrentMajor(namespace, resolvePlatformVersionPolicyBaseTag(state));
13801
+ const imageTagEnv = await resolvePlatformImageTags(state, namespace, latestTag);
13802
+ writeFileSync(systemEnvPath, mergeEnvContent(existsSync(systemEnvPath) ? readFileSync(systemEnvPath, "utf-8") : "", imageTagEnv, { uncomment: true }));
13478
13803
  return {
13479
13804
  namespace,
13480
13805
  tag: latestTag
@@ -13494,75 +13819,88 @@ async function applyUpgrade(state, version) {
13494
13819
  releaseInstallLock(lock);
13495
13820
  }
13496
13821
  }
13497
- /**
13498
- * Full upgrade: resolve latest image tag, refresh assets, pull images,
13499
- * and recreate containers. Used by both the admin endpoint and CLI.
13500
- *
13501
- * Callers handle their own audit logging and admin self-recreation.
13502
- */
13503
- async function performUpgrade(state) {
13504
- const composeOpts = buildComposeOptions(state);
13822
+ async function withStackEnvRollback(state, run) {
13505
13823
  const stackEnvPath = `${state.stashDir}/env/stack.env`;
13506
13824
  let originalStackEnv = null;
13507
13825
  try {
13508
13826
  originalStackEnv = readFileSync(stackEnvPath, "utf-8");
13509
13827
  } catch {}
13510
- let imageTag;
13511
- let namespace;
13512
- let upgradeResult;
13513
13828
  try {
13514
- const tagResult = await updateStackEnvToLatestImageTag(state);
13515
- imageTag = tagResult.tag;
13516
- namespace = tagResult.namespace;
13517
- upgradeResult = await applyUpgrade(state, imageTag);
13829
+ return await run();
13518
13830
  } catch (e) {
13519
13831
  if (originalStackEnv !== null) try {
13520
13832
  writeFileSync(stackEnvPath, originalStackEnv);
13521
13833
  } catch {}
13522
13834
  throw e;
13523
13835
  }
13524
- const pullResult = await composePull(composeOpts);
13525
- if (!pullResult.ok) throw new Error(`Failed to pull images: ${pullResult.stderr}`);
13526
- const services = await buildManagedServices(state);
13527
- const upResult = await composeUp({
13528
- ...composeOpts,
13529
- services,
13530
- forceRecreate: true,
13531
- removeOrphans: true
13836
+ }
13837
+ /**
13838
+ * Full upgrade: resolve latest image tag, refresh assets, pull images,
13839
+ * and recreate containers. Used by both the admin endpoint and CLI.
13840
+ *
13841
+ * Callers handle their own audit logging and admin self-recreation.
13842
+ */
13843
+ async function performUpgrade(state) {
13844
+ return withStackEnvRollback(state, async () => {
13845
+ const composeOpts = buildComposeOptions(state);
13846
+ const namespace = resolveImageNamespace(state);
13847
+ const imageTag = await resolveLatestPlatformTagForCurrentMajor(namespace, resolvePlatformVersionPolicyBaseTag(state));
13848
+ ensureReleaseMigrated({
13849
+ homeDir: state.homeDir,
13850
+ targetVersion: imageTag
13851
+ });
13852
+ const { tag: confirmedImageTag } = await updateStackEnvToLatestImageTag(state, imageTag);
13853
+ const upgradeResult = await applyUpgrade(state, confirmedImageTag);
13854
+ const pullResult = await composePull(composeOpts);
13855
+ if (!pullResult.ok) throw new Error(`Failed to pull images: ${pullResult.stderr}`);
13856
+ const services = await buildManagedServices(state);
13857
+ const upResult = await composeUp({
13858
+ ...composeOpts,
13859
+ services,
13860
+ forceRecreate: true,
13861
+ removeOrphans: true
13862
+ });
13863
+ if (!upResult.ok) throw new Error(`Images pulled but failed to recreate containers: ${upResult.stderr}`);
13864
+ return {
13865
+ imageTag: confirmedImageTag,
13866
+ namespace,
13867
+ backupDir: upgradeResult.backupDir,
13868
+ assetsUpdated: upgradeResult.updated,
13869
+ restarted: upgradeResult.restarted
13870
+ };
13532
13871
  });
13533
- if (!upResult.ok) throw new Error(`Images pulled but failed to recreate containers: ${upResult.stderr}`);
13534
- return {
13535
- imageTag,
13536
- namespace,
13537
- backupDir: upgradeResult.backupDir,
13538
- assetsUpdated: upgradeResult.updated,
13539
- restarted: upgradeResult.restarted
13540
- };
13541
13872
  }
13542
13873
  /**
13543
13874
  * Set a specific image tag in stack.env then pull images and restart containers.
13544
13875
  * Used by the admin "set version" action — skips the auto-detect step in performUpgrade.
13545
13876
  */
13546
13877
  async function applyTagChange(state, tag) {
13547
- const namespace = resolveImageNamespace(state);
13548
- const requested = tag.trim();
13549
- let resolvedTag = requested;
13550
- if (requested === "" || requested.toLowerCase() === "latest") try {
13551
- resolvedTag = await resolveLatestPlatformTag(namespace);
13552
- } catch (e) {
13553
- const msg = e instanceof Error ? e.message : String(e);
13554
- throw new Error(`Cannot resolve "latest" to a concrete release: ${msg}. Check your network connection or select a specific version.`);
13555
- }
13556
- const stackEnvPath = `${state.stashDir}/env/stack.env`;
13557
- writeFileSync(stackEnvPath, mergeEnvContent(existsSync(stackEnvPath) ? readFileSync(stackEnvPath, "utf-8") : "", { OP_IMAGE_TAG: resolvedTag }, { uncomment: true }));
13558
- const upgradeResult = await applyUpgrade(state, resolvedTag);
13559
- return {
13560
- imageTag: resolvedTag,
13561
- namespace,
13562
- backupDir: upgradeResult.backupDir,
13563
- assetsUpdated: upgradeResult.updated,
13564
- restarted: upgradeResult.restarted
13565
- };
13878
+ return withStackEnvRollback(state, async () => {
13879
+ const namespace = resolveImageNamespace(state);
13880
+ const requested = tag.trim();
13881
+ let resolvedTag = requested;
13882
+ if (requested === "" || requested.toLowerCase() === "latest") try {
13883
+ resolvedTag = await resolveLatestPlatformTag(namespace);
13884
+ } catch (e) {
13885
+ const msg = e instanceof Error ? e.message : String(e);
13886
+ throw new Error(`Cannot resolve "latest" to a concrete release: ${msg}. Check your network connection or select a specific version.`);
13887
+ }
13888
+ const imageTagEnv = await resolvePlatformImageTags(state, namespace, resolvedTag);
13889
+ ensureReleaseMigrated({
13890
+ homeDir: state.homeDir,
13891
+ targetVersion: resolvedTag
13892
+ });
13893
+ const stackEnvPath = `${state.stashDir}/env/stack.env`;
13894
+ writeFileSync(stackEnvPath, mergeEnvContent(existsSync(stackEnvPath) ? readFileSync(stackEnvPath, "utf-8") : "", imageTagEnv, { uncomment: true }));
13895
+ const upgradeResult = await applyUpgrade(state, resolvedTag);
13896
+ return {
13897
+ imageTag: resolvedTag,
13898
+ namespace,
13899
+ backupDir: upgradeResult.backupDir,
13900
+ assetsUpdated: upgradeResult.updated,
13901
+ restarted: upgradeResult.restarted
13902
+ };
13903
+ });
13566
13904
  }
13567
13905
  function buildComposeFileList(state) {
13568
13906
  return discoverStackOverlays(state.stackDir, state.homeDir);
@@ -14692,7 +15030,7 @@ async function performSetup(input, opts) {
14692
15030
  try {
14693
15031
  const systemEnvForAkm = existsSync(`${state.stashDir}/env/stack.env`) ? readFileSync(`${state.stashDir}/env/stack.env`, "utf-8") : "";
14694
15032
  const akmUpdates = {};
14695
- akmUpdates.OP_IMAGE_TAG = imageTag && imageTag.trim() ? imageTag.trim() : DEFAULT_IMAGE_TAG;
15033
+ Object.assign(akmUpdates, buildPlatformImageTagEnv(imageTag && imageTag.trim() ? imageTag.trim() : DEFAULT_IMAGE_TAG));
14696
15034
  if (Object.keys(akmUpdates).length > 0) writeFileAtomic(`${state.stashDir}/env/stack.env`, mergeEnvContent(systemEnvForAkm, akmUpdates), 384);
14697
15035
  if (llm || embedding) {
14698
15036
  const akmConfigDir = join(state.configDir, "akm");
@@ -14953,6 +15291,154 @@ function importHostOpenCode(state, options = {}) {
14953
15291
  conflicts
14954
15292
  };
14955
15293
  }
15294
+ //#endregion
15295
+ //#region ../lib/src/control-plane/akm-stats.ts
15296
+ function asRecord(value) {
15297
+ return value && typeof value === "object" && !Array.isArray(value) ? value : null;
15298
+ }
15299
+ function asArray(value) {
15300
+ return Array.isArray(value) ? value : [];
15301
+ }
15302
+ function asString(value) {
15303
+ return typeof value === "string" && value.trim() ? value : null;
15304
+ }
15305
+ function asNumber(value) {
15306
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
15307
+ }
15308
+ function asBoolean(value) {
15309
+ return typeof value === "boolean" ? value : null;
15310
+ }
15311
+ function parseJsonObject(stdout) {
15312
+ try {
15313
+ return asRecord(JSON.parse(stdout));
15314
+ } catch {
15315
+ return null;
15316
+ }
15317
+ }
15318
+ function runAkmJsonCommand(state, args, timeoutMs, options = {}) {
15319
+ const akmEnv = buildAkmEnv(state);
15320
+ assertAkmEnvComplete(akmEnv);
15321
+ return new Promise((resolve) => {
15322
+ execFile("akm", [
15323
+ ...args,
15324
+ "--format",
15325
+ "json",
15326
+ "--quiet"
15327
+ ], {
15328
+ env: {
15329
+ ...process.env,
15330
+ ...akmEnv
15331
+ },
15332
+ timeout: timeoutMs,
15333
+ maxBuffer: 4 * 1024 * 1024
15334
+ }, (error, stdout, stderr) => {
15335
+ const execError = error;
15336
+ const exitCode = typeof execError?.code === "number" ? execError.code : null;
15337
+ const errorCode = typeof execError?.code === "string" ? execError.code : null;
15338
+ const allowed = exitCode !== null && (options.allowExitCodes ?? []).includes(exitCode);
15339
+ resolve({
15340
+ ok: !error || allowed,
15341
+ stdout: stdout?.toString() ?? "",
15342
+ stderr: stderr?.toString() ?? "",
15343
+ exitCode,
15344
+ errorCode
15345
+ });
15346
+ });
15347
+ });
15348
+ }
15349
+ function readAssetCount(info, type) {
15350
+ if (!info) return null;
15351
+ const candidates = [
15352
+ asRecord(info.assetCounts),
15353
+ asRecord(info.assetTypeCounts),
15354
+ asRecord(info.assetsByType),
15355
+ asRecord(info.counts)
15356
+ ];
15357
+ for (const candidate of candidates) {
15358
+ const value = asNumber(candidate?.[type]);
15359
+ if (value !== null) return value;
15360
+ }
15361
+ return null;
15362
+ }
15363
+ function advisoryMessage(value) {
15364
+ if (typeof value === "string" && value.trim()) return value.trim();
15365
+ const record = asRecord(value);
15366
+ if (!record) return null;
15367
+ return asString(record.message) ?? asString(record.name);
15368
+ }
15369
+ function parseAkmStats(healthStdout, infoStdout, proposalsStdout) {
15370
+ const health = parseJsonObject(healthStdout);
15371
+ const info = parseJsonObject(infoStdout);
15372
+ const proposalsPayload = parseJsonObject(proposalsStdout);
15373
+ if (!health && !info) return {
15374
+ available: false,
15375
+ reason: "AKM stats unavailable on this host."
15376
+ };
15377
+ const indexStats = asRecord(info?.indexStats);
15378
+ const improve = asRecord(health?.improve);
15379
+ const reflect = asRecord(improve?.reflect);
15380
+ const consolidation = asRecord(improve?.consolidation);
15381
+ const proposals = asArray(proposalsPayload?.proposals).map((entry) => asRecord(entry)).filter((entry) => entry !== null).map((entry) => ({
15382
+ ref: asString(entry.ref),
15383
+ generator: asString(entry.generator) ?? asString(entry.source),
15384
+ createdAt: asString(entry.createdAt),
15385
+ status: asString(entry.status)
15386
+ }));
15387
+ const rawStatus = asString(health?.status)?.toLowerCase();
15388
+ const status = rawStatus === "pass" || rawStatus === "ok" ? "pass" : rawStatus === "warn" ? "warn" : "unknown";
15389
+ return {
15390
+ available: true,
15391
+ version: asString(info?.version),
15392
+ health: {
15393
+ status,
15394
+ advisories: asArray(health?.advisories).map((entry) => advisoryMessage(entry)).filter((entry) => entry !== null)
15395
+ },
15396
+ index: {
15397
+ entryCount: asNumber(indexStats?.entryCount),
15398
+ lastBuiltAt: asString(indexStats?.lastBuiltAt),
15399
+ hasEmbeddings: asBoolean(indexStats?.hasEmbeddings),
15400
+ vecAvailable: asBoolean(indexStats?.vecAvailable)
15401
+ },
15402
+ assetCounts: {
15403
+ memory: readAssetCount(info, "memory"),
15404
+ skill: readAssetCount(info, "skill"),
15405
+ lesson: readAssetCount(info, "lesson")
15406
+ },
15407
+ improve: {
15408
+ invoked: asNumber(improve?.invoked),
15409
+ completed: asNumber(improve?.completed),
15410
+ skipped: asNumber(improve?.skipped),
15411
+ reflectOk: asNumber(reflect?.ok),
15412
+ reflectCooldown: asNumber(reflect?.cooldown),
15413
+ consolidation: {
15414
+ promoted: asNumber(consolidation?.promoted),
15415
+ merged: asNumber(consolidation?.merged),
15416
+ deleted: asNumber(consolidation?.deleted)
15417
+ }
15418
+ },
15419
+ proposals: {
15420
+ pending: proposals.length,
15421
+ items: proposals
15422
+ }
15423
+ };
15424
+ }
15425
+ async function getAkmStats(state) {
15426
+ const [healthResult, infoResult, proposalsResult] = await Promise.all([
15427
+ runAkmJsonCommand(state, ["health"], 8e3, { allowExitCodes: [4] }),
15428
+ runAkmJsonCommand(state, ["info"], 8e3),
15429
+ runAkmJsonCommand(state, [
15430
+ "proposal",
15431
+ "list",
15432
+ "--status",
15433
+ "pending"
15434
+ ], 12e3)
15435
+ ]);
15436
+ if (healthResult.errorCode === "ENOENT" || infoResult.errorCode === "ENOENT") return {
15437
+ available: false,
15438
+ reason: "The akm CLI is not installed on this host."
15439
+ };
15440
+ return parseAkmStats(healthResult.stdout, infoResult.stdout, proposalsResult.stdout);
15441
+ }
14956
15442
 
14957
- 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, writeSecretFile as aA, writeStackSecretEnv as aB, writeTaskFile as aC, writeUserEnvKey as aD, writeVoiceVars as aE, parseComposeStderr as aa, parseEnvFile as ab, performSetup as ac, performUpgrade as ad, readAutomationLogs as ae, readSecret as af, readSecretFile as ag, readStackEnv as ah, readStackRuntimeEnv as ai, readStackSecretEnv as aj, readTaskFile as ak, readUserEnvFile as al, recommendSetup as am, removeSecretFile as an, removeTaskFile as ao, resolveComposeProjectName as ap, resolveDataDir as aq, resolveRuntimeFiles as ar, resolveStackDir as as, seedUiBuild as at, setAddonEnabled as au, setAddonProfileSelection as av, summarizeComposeStderr as aw, validateProposedState as ax, writeFileAtomic as ay, writeRuntimeFiles 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 };
14958
- //# sourceMappingURL=src-CyeWH4Df.js.map
15443
+ 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 };
15444
+ //# sourceMappingURL=src-efp8mb8-.js.map