@openpalm/ui 0.11.1 → 0.11.2-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/9.CK_nuPTW.css +1 -0
  3. package/build/client/_app/immutable/assets/9.CK_nuPTW.css.br +0 -0
  4. package/build/client/_app/immutable/assets/9.CK_nuPTW.css.gz +0 -0
  5. package/build/client/_app/immutable/chunks/7Y-z2Cs4.js +3 -0
  6. package/build/client/_app/immutable/chunks/7Y-z2Cs4.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/7Y-z2Cs4.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{C5xMso3V.js → BbsmUDEz.js} +1 -1
  9. package/build/client/_app/immutable/chunks/BbsmUDEz.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/BbsmUDEz.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{s4upGypb.js → BxIEEPV3.js} +1 -1
  12. package/build/client/_app/immutable/chunks/BxIEEPV3.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/BxIEEPV3.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/DBtofX2R.js +1 -0
  15. package/build/client/_app/immutable/chunks/DBtofX2R.js.br +2 -0
  16. package/build/client/_app/immutable/chunks/DBtofX2R.js.gz +0 -0
  17. package/build/client/_app/immutable/entry/{app.BhaNzXRa.js → app.DamaMvOo.js} +2 -2
  18. package/build/client/_app/immutable/entry/app.DamaMvOo.js.br +0 -0
  19. package/build/client/_app/immutable/entry/app.DamaMvOo.js.gz +0 -0
  20. package/build/client/_app/immutable/entry/start.CiFTF0Id.js +1 -0
  21. package/build/client/_app/immutable/entry/start.CiFTF0Id.js.br +0 -0
  22. package/build/client/_app/immutable/entry/start.CiFTF0Id.js.gz +0 -0
  23. package/build/client/_app/immutable/nodes/{1.B8IsMtPo.js → 1.D_t9eVLg.js} +1 -1
  24. package/build/client/_app/immutable/nodes/{1.B8IsMtPo.js.br → 1.D_t9eVLg.js.br} +1 -1
  25. package/build/client/_app/immutable/nodes/1.D_t9eVLg.js.gz +0 -0
  26. package/build/client/_app/immutable/nodes/{4.Jf5TbLTF.js → 4.rszAmyBN.js} +1 -1
  27. package/build/client/_app/immutable/nodes/4.rszAmyBN.js.br +0 -0
  28. package/build/client/_app/immutable/nodes/{4.Jf5TbLTF.js.gz → 4.rszAmyBN.js.gz} +0 -0
  29. package/build/client/_app/immutable/nodes/{5.BXOM2W9q.js → 5.B5KOuICr.js} +1 -1
  30. package/build/client/_app/immutable/nodes/5.B5KOuICr.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/5.B5KOuICr.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{6.fVxTNYsE.js → 6.Bw69iLts.js} +1 -1
  33. package/build/client/_app/immutable/nodes/6.Bw69iLts.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/6.Bw69iLts.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{7.E4FAL2cc.js → 7.ockxnYPK.js} +1 -1
  36. package/build/client/_app/immutable/nodes/7.ockxnYPK.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/7.ockxnYPK.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/{8.By5-pJpM.js → 8.Bt2Nswbt.js} +1 -1
  39. package/build/client/_app/immutable/nodes/8.Bt2Nswbt.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/8.Bt2Nswbt.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/9.pk1c6xm-.js +4 -0
  42. package/build/client/_app/immutable/nodes/9.pk1c6xm-.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/9.pk1c6xm-.js.gz +0 -0
  44. package/build/client/_app/version.json +1 -1
  45. package/build/client/_app/version.json.br +1 -1
  46. package/build/client/_app/version.json.gz +0 -0
  47. package/build/client/setup/wizard.css +10 -17
  48. package/build/client/setup/wizard.css.br +0 -0
  49. package/build/client/setup/wizard.css.gz +0 -0
  50. package/build/server/chunks/1-BTD70sT7.js +9 -0
  51. package/build/server/chunks/{1-DiEYpQIN.js.map → 1-BTD70sT7.js.map} +1 -1
  52. package/build/server/chunks/4-CubOOlWA.js +9 -0
  53. package/build/server/chunks/{4-pHqpXb3H.js.map → 4-CubOOlWA.js.map} +1 -1
  54. package/build/server/chunks/5-C5D5O8w1.js +9 -0
  55. package/build/server/chunks/{5-D48D_0uX.js.map → 5-C5D5O8w1.js.map} +1 -1
  56. package/build/server/chunks/{6-CQ5NktVc.js → 6-DCNMSRHJ.js} +3 -3
  57. package/build/server/chunks/{6-CQ5NktVc.js.map → 6-DCNMSRHJ.js.map} +1 -1
  58. package/build/server/chunks/7-jdfP4oIc.js +9 -0
  59. package/build/server/chunks/{7-Cbs2uIrU.js.map → 7-jdfP4oIc.js.map} +1 -1
  60. package/build/server/chunks/{8-Cp8CGb0N.js → 8-Dd434AgX.js} +3 -3
  61. package/build/server/chunks/{8-Cp8CGb0N.js.map → 8-Dd434AgX.js.map} +1 -1
  62. package/build/server/chunks/{9-BKnkc58p.js → 9-Dj1CAYUs.js} +4 -4
  63. package/build/server/chunks/{9-BKnkc58p.js.map → 9-Dj1CAYUs.js.map} +1 -1
  64. package/build/server/chunks/{Navbar-PVEly3CX.js → Navbar-Bbr28xK9.js} +3 -3
  65. package/build/server/chunks/{Navbar-PVEly3CX.js.map → Navbar-Bbr28xK9.js.map} +1 -1
  66. package/build/server/chunks/{_page.svelte-DadWXVrr.js → _page.svelte-4qKAK6Tb.js} +5 -5
  67. package/build/server/chunks/{_page.svelte-DadWXVrr.js.map → _page.svelte-4qKAK6Tb.js.map} +1 -1
  68. package/build/server/chunks/{_page.svelte-CDCe-J7o.js → _page.svelte-B0M8mXzs.js} +3 -1
  69. package/build/server/chunks/_page.svelte-B0M8mXzs.js.map +1 -0
  70. package/build/server/chunks/{_page.svelte-CF6Wb9iE.js → _page.svelte-D-uhfsj5.js} +6 -6
  71. package/build/server/chunks/{_page.svelte-CF6Wb9iE.js.map → _page.svelte-D-uhfsj5.js.map} +1 -1
  72. package/build/server/chunks/{_page.svelte-B1SlSu-R.js → _page.svelte-D7VlbGXj.js} +5 -5
  73. package/build/server/chunks/{_page.svelte-B1SlSu-R.js.map → _page.svelte-D7VlbGXj.js.map} +1 -1
  74. package/build/server/chunks/{_page.svelte-BY2APmQv.js → _page.svelte-Dfe5FJdv.js} +5 -5
  75. package/build/server/chunks/{_page.svelte-BY2APmQv.js.map → _page.svelte-Dfe5FJdv.js.map} +1 -1
  76. package/build/server/chunks/{_page.svelte-DtrBTed5.js → _page.svelte-fkfNgz2M.js} +3 -3
  77. package/build/server/chunks/{_page.svelte-DtrBTed5.js.map → _page.svelte-fkfNgz2M.js.map} +1 -1
  78. package/build/server/chunks/{_server.ts-CxJxINit.js → _server.ts--N8krQnw.js} +4 -4
  79. package/build/server/chunks/{_server.ts-CxJxINit.js.map → _server.ts--N8krQnw.js.map} +1 -1
  80. package/build/server/chunks/{_server.ts-DwB3oRpy.js → _server.ts-67vw7faX.js} +4 -4
  81. package/build/server/chunks/{_server.ts-DwB3oRpy.js.map → _server.ts-67vw7faX.js.map} +1 -1
  82. package/build/server/chunks/{_server.ts-C-9V_-cK.js → _server.ts-B1J6gmcu.js} +4 -4
  83. package/build/server/chunks/{_server.ts-C-9V_-cK.js.map → _server.ts-B1J6gmcu.js.map} +1 -1
  84. package/build/server/chunks/{_server.ts-B2vBBz6Q.js → _server.ts-B3uS0ABl.js} +4 -4
  85. package/build/server/chunks/{_server.ts-B2vBBz6Q.js.map → _server.ts-B3uS0ABl.js.map} +1 -1
  86. package/build/server/chunks/{_server.ts-Bh_r4-Vs.js → _server.ts-B4p_jHqU.js} +38 -27
  87. package/build/server/chunks/_server.ts-B4p_jHqU.js.map +1 -0
  88. package/build/server/chunks/{_server.ts-zHkS9Tnj.js → _server.ts-B7ST2I1g.js} +2 -2
  89. package/build/server/chunks/{_server.ts-zHkS9Tnj.js.map → _server.ts-B7ST2I1g.js.map} +1 -1
  90. package/build/server/chunks/{_server.ts-oqC79KoF.js → _server.ts-BAlnprxv.js} +4 -4
  91. package/build/server/chunks/{_server.ts-oqC79KoF.js.map → _server.ts-BAlnprxv.js.map} +1 -1
  92. package/build/server/chunks/{_server.ts-D7vymw_o.js → _server.ts-BAmfRgDu.js} +4 -4
  93. package/build/server/chunks/{_server.ts-D7vymw_o.js.map → _server.ts-BAmfRgDu.js.map} +1 -1
  94. package/build/server/chunks/{_server.ts-CbZzxQR_.js → _server.ts-BC7_zqMR.js} +4 -4
  95. package/build/server/chunks/{_server.ts-CbZzxQR_.js.map → _server.ts-BC7_zqMR.js.map} +1 -1
  96. package/build/server/chunks/{_server.ts-MtHT_432.js → _server.ts-BDGqI5pR.js} +4 -4
  97. package/build/server/chunks/{_server.ts-MtHT_432.js.map → _server.ts-BDGqI5pR.js.map} +1 -1
  98. package/build/server/chunks/{_server.ts-D68iKpcP.js → _server.ts-BGBkyRka.js} +4 -4
  99. package/build/server/chunks/{_server.ts-D68iKpcP.js.map → _server.ts-BGBkyRka.js.map} +1 -1
  100. package/build/server/chunks/{_server.ts-D2HqJdkr.js → _server.ts-BJYAW2v_.js} +4 -4
  101. package/build/server/chunks/{_server.ts-D2HqJdkr.js.map → _server.ts-BJYAW2v_.js.map} +1 -1
  102. package/build/server/chunks/{_server.ts-BnWc1lOg.js → _server.ts-BLWYsGx3.js} +4 -4
  103. package/build/server/chunks/{_server.ts-BnWc1lOg.js.map → _server.ts-BLWYsGx3.js.map} +1 -1
  104. package/build/server/chunks/{_server.ts-Om-m3OOe.js → _server.ts-BTwVVUpt.js} +4 -4
  105. package/build/server/chunks/{_server.ts-Om-m3OOe.js.map → _server.ts-BTwVVUpt.js.map} +1 -1
  106. package/build/server/chunks/{_server.ts-CqkM3R41.js → _server.ts-BXQH4Qlt.js} +4 -4
  107. package/build/server/chunks/{_server.ts-CqkM3R41.js.map → _server.ts-BXQH4Qlt.js.map} +1 -1
  108. package/build/server/chunks/{_server.ts-__ul4l8J.js → _server.ts-BZV8kPh-.js} +4 -4
  109. package/build/server/chunks/_server.ts-BZV8kPh-.js.map +1 -0
  110. package/build/server/chunks/{_server.ts-D4Vu3KCM.js → _server.ts-Bb62UkjI.js} +4 -4
  111. package/build/server/chunks/{_server.ts-D4Vu3KCM.js.map → _server.ts-Bb62UkjI.js.map} +1 -1
  112. package/build/server/chunks/{_server.ts-Cm9oppJJ.js → _server.ts-BimilJxw.js} +4 -4
  113. package/build/server/chunks/{_server.ts-Cm9oppJJ.js.map → _server.ts-BimilJxw.js.map} +1 -1
  114. package/build/server/chunks/{_server.ts-Bl-41j0D.js → _server.ts-BjsoTMxt.js} +4 -4
  115. package/build/server/chunks/{_server.ts-Bl-41j0D.js.map → _server.ts-BjsoTMxt.js.map} +1 -1
  116. package/build/server/chunks/{_server.ts-BoQ46bw9.js → _server.ts-Bkz7Vyl7.js} +5 -5
  117. package/build/server/chunks/{_server.ts-BoQ46bw9.js.map → _server.ts-Bkz7Vyl7.js.map} +1 -1
  118. package/build/server/chunks/{_server.ts-MNOR6YaX.js → _server.ts-BtIfXnk8.js} +4 -4
  119. package/build/server/chunks/{_server.ts-MNOR6YaX.js.map → _server.ts-BtIfXnk8.js.map} +1 -1
  120. package/build/server/chunks/{_server.ts-B0CeVe_2.js → _server.ts-C2jZDeoI.js} +4 -4
  121. package/build/server/chunks/{_server.ts-B0CeVe_2.js.map → _server.ts-C2jZDeoI.js.map} +1 -1
  122. package/build/server/chunks/{_server.ts-DL9CCFsk.js → _server.ts-C3UA92-P.js} +4 -4
  123. package/build/server/chunks/{_server.ts-DL9CCFsk.js.map → _server.ts-C3UA92-P.js.map} +1 -1
  124. package/build/server/chunks/{_server.ts-B8pCRdwo.js → _server.ts-CAycEHO4.js} +4 -4
  125. package/build/server/chunks/{_server.ts-B8pCRdwo.js.map → _server.ts-CAycEHO4.js.map} +1 -1
  126. package/build/server/chunks/{_server.ts-COMRHDN4.js → _server.ts-CBYvFEVS.js} +14 -6
  127. package/build/server/chunks/_server.ts-CBYvFEVS.js.map +1 -0
  128. package/build/server/chunks/{_server.ts-D2DzSUG5.js → _server.ts-CKkuDSSM.js} +4 -4
  129. package/build/server/chunks/{_server.ts-D2DzSUG5.js.map → _server.ts-CKkuDSSM.js.map} +1 -1
  130. package/build/server/chunks/{_server.ts-BMHPNIdu.js → _server.ts-CRUfNiEL.js} +4 -4
  131. package/build/server/chunks/{_server.ts-BMHPNIdu.js.map → _server.ts-CRUfNiEL.js.map} +1 -1
  132. package/build/server/chunks/{_server.ts-Dnh6b7-J.js → _server.ts-CRgQ6JvE.js} +4 -4
  133. package/build/server/chunks/{_server.ts-Dnh6b7-J.js.map → _server.ts-CRgQ6JvE.js.map} +1 -1
  134. package/build/server/chunks/{_server.ts-BN3w-iUI.js → _server.ts-CVnGEGgz.js} +4 -4
  135. package/build/server/chunks/{_server.ts-BN3w-iUI.js.map → _server.ts-CVnGEGgz.js.map} +1 -1
  136. package/build/server/chunks/{_server.ts-CKNmPEUu.js → _server.ts-C_o9u8JZ.js} +4 -4
  137. package/build/server/chunks/{_server.ts-CKNmPEUu.js.map → _server.ts-C_o9u8JZ.js.map} +1 -1
  138. package/build/server/chunks/{_server.ts-Big7vXEo.js → _server.ts-CaIBfM3d.js} +4 -4
  139. package/build/server/chunks/{_server.ts-Big7vXEo.js.map → _server.ts-CaIBfM3d.js.map} +1 -1
  140. package/build/server/chunks/{_server.ts-31Wp0zcV.js → _server.ts-CcLqY7mC.js} +4 -4
  141. package/build/server/chunks/{_server.ts-31Wp0zcV.js.map → _server.ts-CcLqY7mC.js.map} +1 -1
  142. package/build/server/chunks/{_server.ts-DUmy4wsR.js → _server.ts-CgkGvTF0.js} +5 -5
  143. package/build/server/chunks/{_server.ts-DUmy4wsR.js.map → _server.ts-CgkGvTF0.js.map} +1 -1
  144. package/build/server/chunks/{_server.ts-DxGR3bmq.js → _server.ts-Co5auLt6.js} +4 -4
  145. package/build/server/chunks/{_server.ts-DxGR3bmq.js.map → _server.ts-Co5auLt6.js.map} +1 -1
  146. package/build/server/chunks/{_server.ts-yvQ-qjyI.js → _server.ts-CpO4xFnt.js} +4 -4
  147. package/build/server/chunks/{_server.ts-yvQ-qjyI.js.map → _server.ts-CpO4xFnt.js.map} +1 -1
  148. package/build/server/chunks/{_server.ts-D1bJgR3K.js → _server.ts-Cw-3n_ep.js} +4 -4
  149. package/build/server/chunks/{_server.ts-D1bJgR3K.js.map → _server.ts-Cw-3n_ep.js.map} +1 -1
  150. package/build/server/chunks/{_server.ts-BLePivrN.js → _server.ts-D20tceEK.js} +6 -6
  151. package/build/server/chunks/{_server.ts-BLePivrN.js.map → _server.ts-D20tceEK.js.map} +1 -1
  152. package/build/server/chunks/{_server.ts-DzbC2VQR.js → _server.ts-D39hF3fC.js} +2 -2
  153. package/build/server/chunks/{_server.ts-DzbC2VQR.js.map → _server.ts-D39hF3fC.js.map} +1 -1
  154. package/build/server/chunks/{_server.ts-BwgtyrgF.js → _server.ts-D3isWFzo.js} +5 -5
  155. package/build/server/chunks/{_server.ts-BwgtyrgF.js.map → _server.ts-D3isWFzo.js.map} +1 -1
  156. package/build/server/chunks/{_server.ts-URUUrX13.js → _server.ts-D9xZdloN.js} +10 -5
  157. package/build/server/chunks/_server.ts-D9xZdloN.js.map +1 -0
  158. package/build/server/chunks/{_server.ts-DgQDDDEz.js → _server.ts-DCg7u0gt.js} +4 -4
  159. package/build/server/chunks/{_server.ts-DgQDDDEz.js.map → _server.ts-DCg7u0gt.js.map} +1 -1
  160. package/build/server/chunks/{_server.ts-DlzI77bJ.js → _server.ts-DDNv0MDu.js} +4 -4
  161. package/build/server/chunks/{_server.ts-DlzI77bJ.js.map → _server.ts-DDNv0MDu.js.map} +1 -1
  162. package/build/server/chunks/{_server.ts-CU1go_Ga.js → _server.ts-DEB9v5s4.js} +4 -4
  163. package/build/server/chunks/{_server.ts-CU1go_Ga.js.map → _server.ts-DEB9v5s4.js.map} +1 -1
  164. package/build/server/chunks/{_server.ts-Bde_Pi6A.js → _server.ts-DFBCN73l.js} +5 -5
  165. package/build/server/chunks/{_server.ts-Bde_Pi6A.js.map → _server.ts-DFBCN73l.js.map} +1 -1
  166. package/build/server/chunks/{_server.ts-BDBz43vs.js → _server.ts-DS6wkfxg.js} +4 -4
  167. package/build/server/chunks/{_server.ts-BDBz43vs.js.map → _server.ts-DS6wkfxg.js.map} +1 -1
  168. package/build/server/chunks/{_server.ts-DgZ2d-BT.js → _server.ts-DSUpiCQo.js} +4 -4
  169. package/build/server/chunks/{_server.ts-DgZ2d-BT.js.map → _server.ts-DSUpiCQo.js.map} +1 -1
  170. package/build/server/chunks/{_server.ts-8c17N53a.js → _server.ts-DUa6bwDM.js} +4 -4
  171. package/build/server/chunks/{_server.ts-8c17N53a.js.map → _server.ts-DUa6bwDM.js.map} +1 -1
  172. package/build/server/chunks/{_server.ts-BdEX6joM.js → _server.ts-DVdrht9C.js} +4 -4
  173. package/build/server/chunks/{_server.ts-BdEX6joM.js.map → _server.ts-DVdrht9C.js.map} +1 -1
  174. package/build/server/chunks/{_server.ts-DfFo95a7.js → _server.ts-DXBrPiAj.js} +4 -4
  175. package/build/server/chunks/{_server.ts-DfFo95a7.js.map → _server.ts-DXBrPiAj.js.map} +1 -1
  176. package/build/server/chunks/{_server.ts-Cszg5Fas.js → _server.ts-DYuZIg9l.js} +4 -4
  177. package/build/server/chunks/{_server.ts-Cszg5Fas.js.map → _server.ts-DYuZIg9l.js.map} +1 -1
  178. package/build/server/chunks/{_server.ts-BYUfQeRr.js → _server.ts-DZyh2rB9.js} +5 -5
  179. package/build/server/chunks/{_server.ts-BYUfQeRr.js.map → _server.ts-DZyh2rB9.js.map} +1 -1
  180. package/build/server/chunks/{_server.ts-C1GoICVF.js → _server.ts-Dbqne9eY.js} +6 -6
  181. package/build/server/chunks/{_server.ts-C1GoICVF.js.map → _server.ts-Dbqne9eY.js.map} +1 -1
  182. package/build/server/chunks/{_server.ts-Dfx9HNlr.js → _server.ts-DguLVMDx.js} +5 -5
  183. package/build/server/chunks/{_server.ts-Dfx9HNlr.js.map → _server.ts-DguLVMDx.js.map} +1 -1
  184. package/build/server/chunks/{_server.ts-DSBUjxDK.js → _server.ts-DhXmrQhc.js} +4 -4
  185. package/build/server/chunks/{_server.ts-DSBUjxDK.js.map → _server.ts-DhXmrQhc.js.map} +1 -1
  186. package/build/server/chunks/{_server.ts-CmMcnrpu.js → _server.ts-DniIPBxO.js} +2 -2
  187. package/build/server/chunks/{_server.ts-CmMcnrpu.js.map → _server.ts-DniIPBxO.js.map} +1 -1
  188. package/build/server/chunks/{_server.ts-DTJuIcDg.js → _server.ts-DrZeLUaT.js} +4 -4
  189. package/build/server/chunks/{_server.ts-DTJuIcDg.js.map → _server.ts-DrZeLUaT.js.map} +1 -1
  190. package/build/server/chunks/{_server.ts-GxTTkaRQ.js → _server.ts-DteVoyg4.js} +4 -4
  191. package/build/server/chunks/{_server.ts-GxTTkaRQ.js.map → _server.ts-DteVoyg4.js.map} +1 -1
  192. package/build/server/chunks/{_server.ts-C-xID91b.js → _server.ts-Dw7_J4x-.js} +4 -4
  193. package/build/server/chunks/{_server.ts-C-xID91b.js.map → _server.ts-Dw7_J4x-.js.map} +1 -1
  194. package/build/server/chunks/{_server.ts-DnBzi352.js → _server.ts-Dw9IUnbc.js} +4 -4
  195. package/build/server/chunks/{_server.ts-DnBzi352.js.map → _server.ts-Dw9IUnbc.js.map} +1 -1
  196. package/build/server/chunks/{_server.ts-C25PdnDT.js → _server.ts-KOGE5rzJ.js} +2 -2
  197. package/build/server/chunks/{_server.ts-C25PdnDT.js.map → _server.ts-KOGE5rzJ.js.map} +1 -1
  198. package/build/server/chunks/{_server.ts-DijnYBzX.js → _server.ts-MJxff6j1.js} +4 -4
  199. package/build/server/chunks/{_server.ts-DijnYBzX.js.map → _server.ts-MJxff6j1.js.map} +1 -1
  200. package/build/server/chunks/{_server.ts-BBsksu6b.js → _server.ts-SFkX7VFb.js} +6 -6
  201. package/build/server/chunks/{_server.ts-BBsksu6b.js.map → _server.ts-SFkX7VFb.js.map} +1 -1
  202. package/build/server/chunks/{_server.ts-D-9t8-nD.js → _server.ts-cFNIAAvs.js} +3 -3
  203. package/build/server/chunks/{_server.ts-D-9t8-nD.js.map → _server.ts-cFNIAAvs.js.map} +1 -1
  204. package/build/server/chunks/{_server.ts-D2QOo_fa.js → _server.ts-fRYbSpUy.js} +4 -4
  205. package/build/server/chunks/{_server.ts-D2QOo_fa.js.map → _server.ts-fRYbSpUy.js.map} +1 -1
  206. package/build/server/chunks/{_server.ts-w34_y9d_.js → _server.ts-kVbBWaDD.js} +4 -4
  207. package/build/server/chunks/{_server.ts-w34_y9d_.js.map → _server.ts-kVbBWaDD.js.map} +1 -1
  208. package/build/server/chunks/{_server.ts-B3uweiKb.js → _server.ts-oLxKZF14.js} +6 -6
  209. package/build/server/chunks/{_server.ts-B3uweiKb.js.map → _server.ts-oLxKZF14.js.map} +1 -1
  210. package/build/server/chunks/{_server.ts-DSlYMYYk.js → _server.ts-rGaZfdIc.js} +4 -4
  211. package/build/server/chunks/{_server.ts-DSlYMYYk.js.map → _server.ts-rGaZfdIc.js.map} +1 -1
  212. package/build/server/chunks/{_server.ts-Dvh0Hoso.js → _server.ts-rP8pYqeQ.js} +4 -4
  213. package/build/server/chunks/{_server.ts-Dvh0Hoso.js.map → _server.ts-rP8pYqeQ.js.map} +1 -1
  214. package/build/server/chunks/{_server.ts-By47s5kb.js → _server.ts-swRf_u3E.js} +5 -5
  215. package/build/server/chunks/{_server.ts-By47s5kb.js.map → _server.ts-swRf_u3E.js.map} +1 -1
  216. package/build/server/chunks/{_server.ts-K4R4Q6b_.js → _server.ts-upBZRwnP.js} +5 -5
  217. package/build/server/chunks/{_server.ts-K4R4Q6b_.js.map → _server.ts-upBZRwnP.js.map} +1 -1
  218. package/build/server/chunks/{_server.ts-CCwIt_KL.js → _server.ts-vr1wDdjl.js} +4 -4
  219. package/build/server/chunks/{_server.ts-CCwIt_KL.js.map → _server.ts-vr1wDdjl.js.map} +1 -1
  220. package/build/server/chunks/{addon-helpers-CZyPj8WN.js → addon-helpers-DU7K-Jl-.js} +2 -2
  221. package/build/server/chunks/{addon-helpers-CZyPj8WN.js.map → addon-helpers-DU7K-Jl-.js.map} +1 -1
  222. package/build/server/chunks/{client-CiyZ88m2.js → client-DlIaBp3l.js} +2 -2
  223. package/build/server/chunks/{client-CiyZ88m2.js.map → client-DlIaBp3l.js.map} +1 -1
  224. package/build/server/chunks/{config-BKCgm_AV.js → config-DuMmS4Kk.js} +2 -2
  225. package/build/server/chunks/{config-BKCgm_AV.js.map → config-DuMmS4Kk.js.map} +1 -1
  226. package/build/server/chunks/{docker-8AuF7CwZ.js → docker-YA68OZn5.js} +2 -2
  227. package/build/server/chunks/{docker-8AuF7CwZ.js.map → docker-YA68OZn5.js.map} +1 -1
  228. package/build/server/chunks/{endpoints-DaDle7pk.js → endpoints-CGm4oVfk.js} +2 -2
  229. package/build/server/chunks/{endpoints-DaDle7pk.js.map → endpoints-CGm4oVfk.js.map} +1 -1
  230. package/build/server/chunks/{environment-Cp1uhq6U.js → environment-WrKoCzje.js} +2 -2
  231. package/build/server/chunks/{environment-Cp1uhq6U.js.map → environment-WrKoCzje.js.map} +1 -1
  232. package/build/server/chunks/{error.svelte-m6KMTHAJ.js → error.svelte-D4IIBHJA.js} +4 -4
  233. package/build/server/chunks/{error.svelte-m6KMTHAJ.js.map → error.svelte-D4IIBHJA.js.map} +1 -1
  234. package/build/server/chunks/{helpers-BACi22nU.js → helpers-h_Fq1SBb.js} +3 -3
  235. package/build/server/chunks/{helpers-BACi22nU.js.map → helpers-h_Fq1SBb.js.map} +1 -1
  236. package/build/server/chunks/{hooks.server-BdyM6mgJ.js → hooks.server-SbPoC8s4.js} +5 -5
  237. package/build/server/chunks/{hooks.server-BdyM6mgJ.js.map → hooks.server-SbPoC8s4.js.map} +1 -1
  238. package/build/server/chunks/{http-B8eIxVUs.js → http-DbpsBgUe.js} +2 -2
  239. package/build/server/chunks/{http-B8eIxVUs.js.map → http-DbpsBgUe.js.map} +1 -1
  240. package/build/server/chunks/{internal-BxEwVWRz.js → internal-DtdC4O8s.js} +3 -3
  241. package/build/server/chunks/{internal-BxEwVWRz.js.map → internal-DtdC4O8s.js.map} +1 -1
  242. package/build/server/chunks/{session-cookie-CFbH9CoY.js → session-cookie-C61HbJV5.js} +2 -2
  243. package/build/server/chunks/{session-cookie-CFbH9CoY.js.map → session-cookie-C61HbJV5.js.map} +1 -1
  244. package/build/server/chunks/{setup-deploy-Ck_d_qcE.js → setup-deploy-D0Om28m3.js} +19 -30
  245. package/build/server/chunks/setup-deploy-D0Om28m3.js.map +1 -0
  246. package/build/server/chunks/{src-CQbie-rx.js → src-DJv-Q_k2.js} +134 -21
  247. package/build/server/chunks/src-DJv-Q_k2.js.map +1 -0
  248. package/build/server/chunks/{state-oN2SUx4y.js → state-DGpfeO6d.js} +2 -2
  249. package/build/server/chunks/{state-oN2SUx4y.js.map → state-DGpfeO6d.js.map} +1 -1
  250. package/build/server/index.js +2 -2
  251. package/build/server/manifest.js +79 -79
  252. package/build/server/manifest.js.map +1 -1
  253. package/package.json +2 -2
  254. package/build/client/_app/immutable/assets/9.Bg2RXe3B.css +0 -1
  255. package/build/client/_app/immutable/assets/9.Bg2RXe3B.css.br +0 -0
  256. package/build/client/_app/immutable/assets/9.Bg2RXe3B.css.gz +0 -0
  257. package/build/client/_app/immutable/chunks/BsFaG4Si.js +0 -1
  258. package/build/client/_app/immutable/chunks/BsFaG4Si.js.br +0 -2
  259. package/build/client/_app/immutable/chunks/BsFaG4Si.js.gz +0 -0
  260. package/build/client/_app/immutable/chunks/C5xMso3V.js.br +0 -0
  261. package/build/client/_app/immutable/chunks/C5xMso3V.js.gz +0 -0
  262. package/build/client/_app/immutable/chunks/DPsWof9T.js +0 -3
  263. package/build/client/_app/immutable/chunks/DPsWof9T.js.br +0 -0
  264. package/build/client/_app/immutable/chunks/DPsWof9T.js.gz +0 -0
  265. package/build/client/_app/immutable/chunks/s4upGypb.js.br +0 -0
  266. package/build/client/_app/immutable/chunks/s4upGypb.js.gz +0 -0
  267. package/build/client/_app/immutable/entry/app.BhaNzXRa.js.br +0 -0
  268. package/build/client/_app/immutable/entry/app.BhaNzXRa.js.gz +0 -0
  269. package/build/client/_app/immutable/entry/start.mqdezZzO.js +0 -1
  270. package/build/client/_app/immutable/entry/start.mqdezZzO.js.br +0 -0
  271. package/build/client/_app/immutable/entry/start.mqdezZzO.js.gz +0 -0
  272. package/build/client/_app/immutable/nodes/1.B8IsMtPo.js.gz +0 -0
  273. package/build/client/_app/immutable/nodes/4.Jf5TbLTF.js.br +0 -0
  274. package/build/client/_app/immutable/nodes/5.BXOM2W9q.js.br +0 -0
  275. package/build/client/_app/immutable/nodes/5.BXOM2W9q.js.gz +0 -0
  276. package/build/client/_app/immutable/nodes/6.fVxTNYsE.js.br +0 -0
  277. package/build/client/_app/immutable/nodes/6.fVxTNYsE.js.gz +0 -0
  278. package/build/client/_app/immutable/nodes/7.E4FAL2cc.js.br +0 -0
  279. package/build/client/_app/immutable/nodes/7.E4FAL2cc.js.gz +0 -0
  280. package/build/client/_app/immutable/nodes/8.By5-pJpM.js.br +0 -0
  281. package/build/client/_app/immutable/nodes/8.By5-pJpM.js.gz +0 -0
  282. package/build/client/_app/immutable/nodes/9.HfUnLyFj.js +0 -2
  283. package/build/client/_app/immutable/nodes/9.HfUnLyFj.js.br +0 -0
  284. package/build/client/_app/immutable/nodes/9.HfUnLyFj.js.gz +0 -0
  285. package/build/server/chunks/1-DiEYpQIN.js +0 -9
  286. package/build/server/chunks/4-pHqpXb3H.js +0 -9
  287. package/build/server/chunks/5-D48D_0uX.js +0 -9
  288. package/build/server/chunks/7-Cbs2uIrU.js +0 -9
  289. package/build/server/chunks/_page.svelte-CDCe-J7o.js.map +0 -1
  290. package/build/server/chunks/_server.ts-Bh_r4-Vs.js.map +0 -1
  291. package/build/server/chunks/_server.ts-COMRHDN4.js.map +0 -1
  292. package/build/server/chunks/_server.ts-URUUrX13.js.map +0 -1
  293. package/build/server/chunks/_server.ts-__ul4l8J.js.map +0 -1
  294. package/build/server/chunks/setup-deploy-Ck_d_qcE.js.map +0 -1
  295. package/build/server/chunks/src-CQbie-rx.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"session-cookie-CFbH9CoY.js","sources":["../../../.svelte-kit/adapter-node/chunks/session-cookie.js"],"sourcesContent":["import { h as SESSION_TTL_SECONDS } from \"./helpers.js\";\n//#region src/lib/server/session-cookie.ts\n/**\n* Single source of truth for the `op_session` cookie's Set-Cookie attributes.\n*\n* Every issuer (login, session, setup/complete) and the sliding-renewal path in\n* hooks.server.ts builds the cookie through these helpers so the attributes can\n* never drift apart. Logout uses `clearSessionCookie()` with the SAME path so\n* the browser actually drops the cookie.\n*\n* Attribute rationale:\n* - HttpOnly — the cookie is the only credential the browser holds; XSS\n* must not be able to read it.\n* - SameSite=Lax — the cookie must ride along on top-level GET navigations\n* (typing the admin URL, following a bookmark) so a valid\n* session loads admin with no prompt. SameSite=Strict drops\n* the cookie on cross-site top-level GETs (e.g. opening the\n* console from a link in another app on the LAN), which\n* would force a needless re-prompt. State-mutating requests\n* are independently CSRF-guarded by the Origin check\n* (SEC-2) in hooks.server.ts, so Lax is safe here.\n* - Secure — set ONLY when the request arrived over HTTPS. LAN installs\n* are commonly plain HTTP; hardcoding Secure would make the\n* browser refuse to send the cookie and break login entirely\n* on those deployments. We honour `x-forwarded-proto` first\n* (reverse-proxy TLS termination) then the request URL.\n* - Path=/ — valid for the whole app; matched by the clear on logout.\n* - Max-Age — 7 days, in lockstep with the in-store session TTL.\n*/\nvar SESSION_COOKIE_NAME = \"op_session\";\n/** True when the request reached us over HTTPS (direct or via TLS-terminating proxy). */\nfunction isSecureRequest(request) {\n\tconst forwarded = request.headers.get(\"x-forwarded-proto\");\n\tif (forwarded) return forwarded.split(\",\")[0].trim().toLowerCase() === \"https\";\n\ttry {\n\t\treturn new URL(request.url).protocol === \"https:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n/**\n* Build the `Set-Cookie` value that issues/renews the session cookie.\n* `secure` is derived from the request so LAN-over-HTTP installs still work.\n*/\nfunction sessionCookieHeader(token, request) {\n\tconst parts = [\n\t\t`${SESSION_COOKIE_NAME}=${token}`,\n\t\t\"HttpOnly\",\n\t\t\"SameSite=Lax\",\n\t\t\"Path=/\",\n\t\t`Max-Age=${SESSION_TTL_SECONDS}`\n\t];\n\tif (isSecureRequest(request)) parts.push(\"Secure\");\n\treturn parts.join(\"; \");\n}\n/**\n* Build the `Set-Cookie` value that clears the session cookie (logout).\n* Must mirror name/path/attributes of the issued cookie so the browser deletes it.\n*/\nfunction clearSessionCookieHeader(request) {\n\tconst parts = [\n\t\t`${SESSION_COOKIE_NAME}=`,\n\t\t\"HttpOnly\",\n\t\t\"SameSite=Lax\",\n\t\t\"Path=/\",\n\t\t\"Max-Age=0\"\n\t];\n\tif (isSecureRequest(request)) parts.push(\"Secure\");\n\treturn parts.join(\"; \");\n}\n//#endregion\nexport { clearSessionCookieHeader as n, sessionCookieHeader as r, SESSION_COOKIE_NAME as t };\n"],"names":[],"mappings":";;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,mBAAmB,GAAG;AAC1B;AACA,SAAS,eAAe,CAAC,OAAO,EAAE;AAClC,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC3D,CAAC,IAAI,SAAS,EAAE,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO;AAC/E,CAAC,IAAI;AACL,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ;AACnD,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,KAAK;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7C,CAAC,MAAM,KAAK,GAAG;AACf,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACnC,EAAE,UAAU;AACZ,EAAE,cAAc;AAChB,EAAE,QAAQ;AACV,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AACjC,EAAE;AACF,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA,SAAS,wBAAwB,CAAC,OAAO,EAAE;AAC3C,CAAC,MAAM,KAAK,GAAG;AACf,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAC3B,EAAE,UAAU;AACZ,EAAE,cAAc;AAChB,EAAE,QAAQ;AACV,EAAE;AACF,EAAE;AACF,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB;;;;"}
1
+ {"version":3,"file":"session-cookie-C61HbJV5.js","sources":["../../../.svelte-kit/adapter-node/chunks/session-cookie.js"],"sourcesContent":["import { h as SESSION_TTL_SECONDS } from \"./helpers.js\";\n//#region src/lib/server/session-cookie.ts\n/**\n* Single source of truth for the `op_session` cookie's Set-Cookie attributes.\n*\n* Every issuer (login, session, setup/complete) and the sliding-renewal path in\n* hooks.server.ts builds the cookie through these helpers so the attributes can\n* never drift apart. Logout uses `clearSessionCookie()` with the SAME path so\n* the browser actually drops the cookie.\n*\n* Attribute rationale:\n* - HttpOnly — the cookie is the only credential the browser holds; XSS\n* must not be able to read it.\n* - SameSite=Lax — the cookie must ride along on top-level GET navigations\n* (typing the admin URL, following a bookmark) so a valid\n* session loads admin with no prompt. SameSite=Strict drops\n* the cookie on cross-site top-level GETs (e.g. opening the\n* console from a link in another app on the LAN), which\n* would force a needless re-prompt. State-mutating requests\n* are independently CSRF-guarded by the Origin check\n* (SEC-2) in hooks.server.ts, so Lax is safe here.\n* - Secure — set ONLY when the request arrived over HTTPS. LAN installs\n* are commonly plain HTTP; hardcoding Secure would make the\n* browser refuse to send the cookie and break login entirely\n* on those deployments. We honour `x-forwarded-proto` first\n* (reverse-proxy TLS termination) then the request URL.\n* - Path=/ — valid for the whole app; matched by the clear on logout.\n* - Max-Age — 7 days, in lockstep with the in-store session TTL.\n*/\nvar SESSION_COOKIE_NAME = \"op_session\";\n/** True when the request reached us over HTTPS (direct or via TLS-terminating proxy). */\nfunction isSecureRequest(request) {\n\tconst forwarded = request.headers.get(\"x-forwarded-proto\");\n\tif (forwarded) return forwarded.split(\",\")[0].trim().toLowerCase() === \"https\";\n\ttry {\n\t\treturn new URL(request.url).protocol === \"https:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n/**\n* Build the `Set-Cookie` value that issues/renews the session cookie.\n* `secure` is derived from the request so LAN-over-HTTP installs still work.\n*/\nfunction sessionCookieHeader(token, request) {\n\tconst parts = [\n\t\t`${SESSION_COOKIE_NAME}=${token}`,\n\t\t\"HttpOnly\",\n\t\t\"SameSite=Lax\",\n\t\t\"Path=/\",\n\t\t`Max-Age=${SESSION_TTL_SECONDS}`\n\t];\n\tif (isSecureRequest(request)) parts.push(\"Secure\");\n\treturn parts.join(\"; \");\n}\n/**\n* Build the `Set-Cookie` value that clears the session cookie (logout).\n* Must mirror name/path/attributes of the issued cookie so the browser deletes it.\n*/\nfunction clearSessionCookieHeader(request) {\n\tconst parts = [\n\t\t`${SESSION_COOKIE_NAME}=`,\n\t\t\"HttpOnly\",\n\t\t\"SameSite=Lax\",\n\t\t\"Path=/\",\n\t\t\"Max-Age=0\"\n\t];\n\tif (isSecureRequest(request)) parts.push(\"Secure\");\n\treturn parts.join(\"; \");\n}\n//#endregion\nexport { clearSessionCookieHeader as n, sessionCookieHeader as r, SESSION_COOKIE_NAME as t };\n"],"names":[],"mappings":";;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,mBAAmB,GAAG;AAC1B;AACA,SAAS,eAAe,CAAC,OAAO,EAAE;AAClC,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC3D,CAAC,IAAI,SAAS,EAAE,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO;AAC/E,CAAC,IAAI;AACL,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ;AACnD,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,KAAK;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7C,CAAC,MAAM,KAAK,GAAG;AACf,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACnC,EAAE,UAAU;AACZ,EAAE,cAAc;AAChB,EAAE,QAAQ;AACV,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AACjC,EAAE;AACF,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA,SAAS,wBAAwB,CAAC,OAAO,EAAE;AAC3C,CAAC,MAAM,KAAK,GAAG;AACf,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAC3B,EAAE,UAAU;AACZ,EAAE,cAAc;AAChB,EAAE,QAAQ;AACV,EAAE;AACF,EAAE;AACF,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB;;;;"}
@@ -1,4 +1,4 @@
1
- import { c as applyInstall, a4 as listEnabledAddonIds, U as getAddonProfileSelection, as as setAddonProfileSelection, a as addonProfileId, l as buildManagedServices, k as buildComposeOptions, o as composeDown, s as composePull, x as composeUp, a2 as isSetupComplete, ap as resolveStackDir, y as createLogger, a8 as parseEnvFile, r as composePs, V as getAddonProfiles, am as resolveComposeProjectName } from './src-CQbie-rx.js';
1
+ import { c as applyInstall, a5 as listEnabledAddonIds, V as getAddonProfileSelection, at as setAddonProfileSelection, a as addonProfileId, l as buildManagedServices, k as buildComposeOptions, o as composeDown, s as composePull, x as composeUp, a3 as isSetupComplete, aq as resolveStackDir, y as createLogger, E as detectExistingProject, a9 as parseEnvFile, r as composePs, W as getAddonProfiles, an as resolveComposeProjectName } from './src-DJv-Q_k2.js';
2
2
  import { existsSync, readFileSync, writeFileSync, renameSync } from 'node:fs';
3
3
 
4
4
  //#region src/lib/server/setup-deploy.ts
@@ -187,35 +187,20 @@ async function pollContainerHealth(composeOpts, services, timeoutMs) {
187
187
  * project belong to a DIFFERENT OP_HOME than the one we're about to deploy.
188
188
  * Without this, two stacks (e.g. dev and host) that share the default
189
189
  * "openpalm" project name will silently clobber each other.
190
+ *
191
+ * Detection logic lives in lib (detectExistingProject) so the CLI and UI
192
+ * share the same ours-vs-foreign decision (CLAUDE.md: control-plane logic
193
+ * in lib). An existing OURS project is fine — startDeploy's down + force-recreate
194
+ * reconciles it. Only a FOREIGN project produces a refusal.
190
195
  */
191
196
  async function checkProjectNameCollision(state) {
192
- const { execFile } = await import('node:child_process');
193
- return new Promise((resolve) => {
194
- execFile("docker", [
195
- "ps",
196
- "-q",
197
- "--filter",
198
- `label=com.docker.compose.project=${projectNameForState(state)}`
199
- ], (err, stdout) => {
200
- if (err) return resolve(null);
201
- const ids = stdout.toString().trim().split(/\s+/).filter(Boolean);
202
- if (ids.length === 0) return resolve(null);
203
- execFile("docker", [
204
- "inspect",
205
- "--format",
206
- "{{ index .Config.Labels \"com.docker.compose.project.working_dir\" }}",
207
- ids[0]
208
- ], (err2, stdout2) => {
209
- if (err2) return resolve(null);
210
- const runningHome = stdout2.toString().trim();
211
- if (runningHome && runningHome !== state.homeDir) {
212
- resolve(`Refusing to deploy: docker project "${projectNameForState(state)}" is already running with OP_HOME=${runningHome}, but this deploy would use OP_HOME=${state.homeDir}. Set OP_PROJECT_NAME to a distinct value in stack.env, or stop the existing stack first.`);
213
- return;
214
- }
215
- resolve(null);
216
- });
217
- });
197
+ const projectName = projectNameForState(state);
198
+ const existing = await detectExistingProject({
199
+ projectName,
200
+ expectedWorkingDir: state.homeDir
218
201
  });
202
+ if (existing.exists && !existing.isOurs) return `Refusing to deploy: docker project "${projectName}" is already running from ${existing.workingDir || "another OpenPalm install"}, but this deploy would use OP_HOME=${state.homeDir}. Set OP_PROJECT_NAME to a distinct value in stack.env, or stop the existing stack first.`;
203
+ return null;
219
204
  }
220
205
  /** Kick off a background Docker Compose deploy. Returns immediately. */
221
206
  function startDeploy(state) {
@@ -316,7 +301,11 @@ function startDeploy(state) {
316
301
  status: "pending",
317
302
  label: "Starting..."
318
303
  }));
319
- const result = await composeUp(composeOpts);
304
+ const result = await composeUp({
305
+ ...composeOpts,
306
+ forceRecreate: true,
307
+ removeOrphans: true
308
+ });
320
309
  if (!result.ok) {
321
310
  const msg = mapDockerError(result.stderr ?? "compose up failed");
322
311
  _state.deployStatus = _state.deployStatus.map((e) => ({
@@ -511,7 +500,7 @@ async function bringUpVoiceIfEnabled(state, composeOpts) {
511
500
  if (!healthy) {
512
501
  _state.deployStatus = _state.deployStatus.map((e) => profileServices.includes(e.service) ? {
513
502
  ...e,
514
- status: "error",
503
+ status: "warning",
515
504
  label: "Voice is still warming up. You can finish setup; check the Voice tab in admin."
516
505
  } : e);
517
506
  logger.warn("voice: container did not become healthy in time", { timeoutMs: VOICE_HEALTH_TIMEOUT_MS });
@@ -526,4 +515,4 @@ async function bringUpVoiceIfEnabled(state, composeOpts) {
526
515
  }
527
516
 
528
517
  export { getDeployState as g, resetDeployState as r, startDeploy as s };
529
- //# sourceMappingURL=setup-deploy-Ck_d_qcE.js.map
518
+ //# sourceMappingURL=setup-deploy-D0Om28m3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-deploy-D0Om28m3.js","sources":["../../../.svelte-kit/adapter-node/chunks/setup-deploy.js"],"sourcesContent":["import { C as buildManagedServices, E as buildComposeOptions, It as resolveStackDir, M as composePs, N as composePull, Nt as parseEnvFile, R as composeUp, Rt as createLogger, V as resolveComposeProjectName, Z as isSetupComplete, at as getAddonProfileSelection, ft as setAddonProfileSelection, k as composeDown, ot as getAddonProfiles, pt as addonProfileId, ut as listEnabledAddonIds, y as applyInstall, z as detectExistingProject } from \"./src.js\";\nimport { existsSync, readFileSync, renameSync, writeFileSync } from \"node:fs\";\n//#region src/lib/server/setup-deploy.ts\n/**\n* In-process deploy state for the setup wizard.\n*\n* Tracks Docker Compose deploy progress during first-time setup.\n* State lives in this module so the polling endpoint can read it\n* without a database or filesystem dependency.\n*/\nvar logger = createLogger(\"admin:setup-deploy\");\nfunction projectNameForState(state) {\n\treturn resolveComposeProjectName(parseEnvFile(`${state.stashDir}/env/stack.env`));\n}\nfunction projectNameForComposeOptions(composeOpts) {\n\treturn resolveComposeProjectName(Object.assign({}, ...(composeOpts.envFiles ?? []).map((f) => parseEnvFile(f))));\n}\nvar _state = {\n\tdeploying: false,\n\tsetupComplete: false,\n\tdeployStatus: [],\n\tdeployError: null,\n\tphase: \"writing-config\"\n};\nfunction getDeployState() {\n\tif (!_state.setupComplete && !_state.deploying && isSetupComplete(resolveStackDir())) _state.setupComplete = true;\n\treturn {\n\t\t..._state,\n\t\tdeployStatus: [..._state.deployStatus]\n\t};\n}\nfunction resetDeployState() {\n\t_state = {\n\t\tdeploying: false,\n\t\tsetupComplete: false,\n\t\tdeployStatus: [],\n\t\tdeployError: null,\n\t\tphase: \"writing-config\"\n\t};\n}\n/**\n* Resolve the effective OP_IMAGE_TAG for a deploy.\n* Reads exclusively from stack.env files — by the time startDeploy() runs,\n* applyInstall() has already written the wizard's chosen tag to stack.env.\n* Process env is intentionally ignored so shell variables can never silently\n* override what the user configured in the wizard.\n*/\nfunction resolveImageTag(composeOpts) {\n\tfor (const envFile of composeOpts.envFiles ?? []) {\n\t\tif (!existsSync(envFile)) continue;\n\t\tconst parsed = parseEnvFile(envFile);\n\t\tif (parsed.OP_IMAGE_TAG) return parsed.OP_IMAGE_TAG;\n\t}\n\treturn \"\";\n}\n/**\n* Map opaque Docker/compose stderr text to a human-friendly error message.\n* If no pattern matches, the raw message is returned prefixed with a generic header.\n*/\nfunction mapDockerError(raw) {\n\tif (/cannot connect to the docker daemon|docker daemon is not running/i.test(raw)) return \"Docker Desktop appears to have stopped. Start Docker, then click Retry.\";\n\tconst portMatch = /bind: address already in use.*?:(\\d+)/i.exec(raw);\n\tif (portMatch) return `Port ${portMatch[1]} is already in use by another program. Free it (or quit the other app) and click Retry.`;\n\tif (/Cannot find specified .* file|no such file or directory/i.test(raw)) return \"A required configuration file is missing. Try re-running setup.\";\n\tif (/permission denied/i.test(raw)) return \"Permission denied. Check that ~/.openpalm and Docker have permission to write.\";\n\tif (/no space left on device|ENOSPC/i.test(raw)) return \"Your disk is full. Free up space and click Retry.\";\n\treturn `Deployment ran into a problem: ${raw}`;\n}\n/**\n* Atomic-merge OP_SETUP_COMPLETE=true into stack.env. Called only after every\n* container has reported healthy — until then the wizard must remain\n* resumable, so the flag is intentionally not written by performSetup.\n*/\nfunction markSetupComplete(state) {\n\tconst path = `${state.stashDir}/env/stack.env`;\n\tconst lines = (existsSync(path) ? readFileSync(path, \"utf-8\") : \"\").split(\"\\n\");\n\tlet replaced = false;\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst trimmed = lines[i].trimStart();\n\t\tconst eq = trimmed.indexOf(\"=\");\n\t\tif (eq > 0 && trimmed.slice(0, eq).trim() === \"OP_SETUP_COMPLETE\") {\n\t\t\tlines[i] = \"OP_SETUP_COMPLETE=true\";\n\t\t\treplaced = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!replaced) if (lines.length > 0 && lines[lines.length - 1] === \"\") {\n\t\tlines[lines.length - 1] = \"OP_SETUP_COMPLETE=true\";\n\t\tlines.push(\"\");\n\t} else lines.push(\"OP_SETUP_COMPLETE=true\");\n\tlet merged = lines.join(\"\\n\");\n\tif (!merged.endsWith(\"\\n\")) merged += \"\\n\";\n\tconst tmp = `${path}.tmp`;\n\twriteFileSync(tmp, merged, { mode: 384 });\n\trenameSync(tmp, path);\n}\n/**\n* Parse `docker compose ps --format json` output into a list of container states.\n* Compose outputs one JSON object per line (NDJSON), not a JSON array.\n*/\nfunction parseComposePsOutput(stdout) {\n\tconst results = [];\n\tfor (const line of stdout.split(\"\\n\")) {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) continue;\n\t\ttry {\n\t\t\tconst obj = JSON.parse(trimmed);\n\t\t\tresults.push({\n\t\t\t\tname: String(obj[\"Name\"] ?? obj[\"Service\"] ?? \"\"),\n\t\t\t\tstate: String(obj[\"State\"] ?? \"\"),\n\t\t\t\thealth: String(obj[\"Health\"] ?? \"\")\n\t\t\t});\n\t\t} catch {}\n\t}\n\treturn results;\n}\n/**\n* Poll container health for `services` until all are running (and healthy if\n* they declare a healthcheck). Updates `_state.deployStatus` with intermediate\n* labels as containers flip states.\n*\n* @returns null on success, or an error string if timeout fires with unhealthy services.\n*/\nasync function pollContainerHealth(composeOpts, services, timeoutMs) {\n\tconst deadline = Date.now() + timeoutMs;\n\tconst POLL_INTERVAL_MS = 2e3;\n\twhile (Date.now() < deadline) {\n\t\tawait new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));\n\t\tconst psResult = await composePs(composeOpts);\n\t\tif (!psResult.ok) {\n\t\t\tlogger.warn(\"composePs failed during health poll\", { stderr: psResult.stderr });\n\t\t\tcontinue;\n\t\t}\n\t\tconst containers = parseComposePsOutput(psResult.stdout);\n\t\t_state.deployStatus = _state.deployStatus.map((entry) => {\n\t\t\tconst found = containers.find((c) => c.name === entry.service || c.name.endsWith(`-${entry.service}-1`) || c.name.endsWith(`_${entry.service}_1`));\n\t\t\tif (!found) return {\n\t\t\t\t...entry,\n\t\t\t\tstatus: \"pending\",\n\t\t\t\tlabel: \"Starting...\"\n\t\t\t};\n\t\t\tif (found.state === \"running\") {\n\t\t\t\tconst health = found.health;\n\t\t\t\tif (health === \"unhealthy\") return {\n\t\t\t\t\t...entry,\n\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\tlabel: \"Unhealthy\"\n\t\t\t\t};\n\t\t\t\tif (health === \"starting\") return {\n\t\t\t\t\t...entry,\n\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\tlabel: \"Health check running...\"\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\t...entry,\n\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\tlabel: \"Running\"\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (found.state === \"exited\" || found.state === \"dead\") return {\n\t\t\t\t...entry,\n\t\t\t\tstatus: \"error\",\n\t\t\t\tlabel: `Exited (${found.state})`\n\t\t\t};\n\t\t\treturn {\n\t\t\t\t...entry,\n\t\t\t\tstatus: \"pending\",\n\t\t\t\tlabel: `Starting (${found.state})...`\n\t\t\t};\n\t\t});\n\t\tif (services.every((svc) => {\n\t\t\treturn _state.deployStatus.find((e) => e.service === svc)?.status === \"running\";\n\t\t})) return null;\n\t\tconst failed = _state.deployStatus.filter((e) => e.status === \"error\").map((e) => e.service);\n\t\tif (failed.length > 0) {\n\t\t\tconst projectName = projectNameForComposeOptions(composeOpts);\n\t\t\treturn `Services started but the following did not become healthy: ${failed.join(\", \")}. Check logs: docker compose -p ${projectName} logs ${failed.join(\" \")}.`;\n\t\t}\n\t}\n\tconst unhealthy = _state.deployStatus.filter((e) => e.status !== \"running\").map((e) => e.service);\n\tconst projectName = projectNameForComposeOptions(composeOpts);\n\treturn `Services started but some did not become healthy in time: ${unhealthy.join(\", \")}. Check logs: docker compose -p ${projectName} logs ${unhealthy.join(\" \")}.`;\n}\n/**\n* Pre-flight: refuse to deploy if existing containers in this compose\n* project belong to a DIFFERENT OP_HOME than the one we're about to deploy.\n* Without this, two stacks (e.g. dev and host) that share the default\n* \"openpalm\" project name will silently clobber each other.\n*\n* Detection logic lives in lib (detectExistingProject) so the CLI and UI\n* share the same ours-vs-foreign decision (CLAUDE.md: control-plane logic\n* in lib). An existing OURS project is fine — startDeploy's down + force-recreate\n* reconciles it. Only a FOREIGN project produces a refusal.\n*/\nasync function checkProjectNameCollision(state) {\n\tconst projectName = projectNameForState(state);\n\tconst existing = await detectExistingProject({\n\t\tprojectName,\n\t\texpectedWorkingDir: state.homeDir\n\t});\n\tif (existing.exists && !existing.isOurs) return `Refusing to deploy: docker project \"${projectName}\" is already running from ${existing.workingDir || \"another OpenPalm install\"}, but this deploy would use OP_HOME=${state.homeDir}. Set OP_PROJECT_NAME to a distinct value in stack.env, or stop the existing stack first.`;\n\treturn null;\n}\n/** Kick off a background Docker Compose deploy. Returns immediately. */\nfunction startDeploy(state) {\n\tif (_state.deploying) {\n\t\t_state.deployError = \"install_in_progress: A deploy is already running. Wait for it to finish.\";\n\t\tlogger.warn(\"deploy rejected: deploy already in progress\");\n\t\treturn;\n\t}\n\t_state.deploying = true;\n\t_state.deployError = null;\n\t_state.phase = \"writing-config\";\n\t(async () => {\n\t\ttry {\n\t\t\tconst collision = await checkProjectNameCollision(state);\n\t\t\tif (collision) {\n\t\t\t\tlogger.error(\"deploy aborted: project name collision\", { error: collision });\n\t\t\t\t_state.deployError = collision;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait applyInstall(state);\n\t\t\tif (listEnabledAddonIds(state.homeDir).includes(\"ollama\") && !getAddonProfileSelection(state.stackDir, \"ollama\")) try {\n\t\t\t\tsetAddonProfileSelection(state.stackDir, \"ollama\", addonProfileId(\"ollama\", \"cpu\"), state);\n\t\t\t} catch (err) {\n\t\t\t\tlogger.warn(\"ollama: failed to persist default profile selection (continuing)\", { error: err instanceof Error ? err.message : String(err) });\n\t\t\t}\n\t\t\tconst services = await buildManagedServices(state);\n\t\t\t_state.deployStatus = services.map((s) => ({\n\t\t\t\tservice: s,\n\t\t\t\tstatus: \"pending\",\n\t\t\t\tlabel: \"Waiting...\"\n\t\t\t}));\n\t\t\tconst composeOpts = buildComposeOptions(state);\n\t\t\ttry {\n\t\t\t\tconst downResult = await composeDown({\n\t\t\t\t\t...composeOpts,\n\t\t\t\t\tremoveVolumes: false\n\t\t\t\t});\n\t\t\t\tif (!downResult.ok) logger.info(\"pre-deploy compose down returned non-zero (likely nothing to remove)\", { stderr: downResult.stderr?.slice(0, 500) });\n\t\t\t} catch (err) {\n\t\t\t\tlogger.warn(\"pre-deploy compose down threw — continuing\", { error: err instanceof Error ? err.message : String(err) });\n\t\t\t}\n\t\t\t_state.phase = \"pulling-images\";\n\t\t\tconst imageTag = resolveImageTag(composeOpts);\n\t\t\tconst isDevTag = imageTag.startsWith(\"dev\");\n\t\t\tlet pullResult = null;\n\t\t\tif (!isDevTag) {\n\t\t\t\tconst pullDelaysMs = [\n\t\t\t\t\t0,\n\t\t\t\t\t5e3,\n\t\t\t\t\t15e3\n\t\t\t\t];\n\t\t\t\tfor (let attempt = 0; attempt < pullDelaysMs.length; attempt++) {\n\t\t\t\t\tif (pullDelaysMs[attempt] > 0) {\n\t\t\t\t\t\tlogger.info(\"retrying image pull\", {\n\t\t\t\t\t\t\tattempt: attempt + 1,\n\t\t\t\t\t\t\tdelayMs: pullDelaysMs[attempt]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, pullDelaysMs[attempt]));\n\t\t\t\t\t}\n\t\t\t\t\tpullResult = await composePull(composeOpts);\n\t\t\t\t\tif (pullResult.ok) break;\n\t\t\t\t\tconst stderr = pullResult.stderr ?? \"\";\n\t\t\t\t\tif (/manifest unknown|manifest for .* not found|unauthorized|authentication required|access denied/i.test(stderr)) {\n\t\t\t\t\t\tlogger.error(\"image pull failed with permanent error\", { stderr: stderr.slice(0, 500) });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tlogger.warn(\"image pull failed (transient?)\", {\n\t\t\t\t\t\tattempt: attempt + 1,\n\t\t\t\t\t\tstderr: stderr.slice(0, 500)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isDevTag || !pullResult || !pullResult.ok) if (await allServiceImagesPresent(composeOpts, services)) if (isDevTag) logger.info(\"dev image tag — skipping registry pull, all images present locally\", {\n\t\t\t\timageTag,\n\t\t\t\tservices\n\t\t\t});\n\t\t\telse logger.info(\"image pull failed but all images present locally — continuing\", {\n\t\t\t\tservices,\n\t\t\t\tstderrSlice: (pullResult?.stderr ?? \"\").slice(0, 200)\n\t\t\t});\n\t\t\telse {\n\t\t\t\tlet msg;\n\t\t\t\tif (isDevTag) {\n\t\t\t\t\tconst missing = await missingServiceImages(composeOpts, services);\n\t\t\t\t\tmsg = `Dev images not found locally (tag: ${imageTag}): ${missing.length > 0 ? missing.join(\", \") : \"one or more images\"}. Run \\`bun run dev:build\\` from the project root to build them, then retry setup.`;\n\t\t\t\t} else msg = mapDockerError(pullResult?.stderr?.trim() || \"Image pull failed\");\n\t\t\t\t_state.deployStatus = _state.deployStatus.map((e) => ({\n\t\t\t\t\t...e,\n\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\tlabel: \"Image pull failed\"\n\t\t\t\t}));\n\t\t\t\t_state.deployError = msg;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_state.phase = \"starting\";\n\t\t\t_state.deployStatus = _state.deployStatus.map((e) => ({\n\t\t\t\t...e,\n\t\t\t\tstatus: \"pending\",\n\t\t\t\tlabel: \"Starting...\"\n\t\t\t}));\n\t\t\tconst result = await composeUp({\n\t\t\t\t...composeOpts,\n\t\t\t\tforceRecreate: true,\n\t\t\t\tremoveOrphans: true\n\t\t\t});\n\t\t\tif (!result.ok) {\n\t\t\t\tconst msg = mapDockerError(result.stderr ?? \"compose up failed\");\n\t\t\t\t_state.deployStatus = _state.deployStatus.map((e) => ({\n\t\t\t\t\t...e,\n\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\tlabel: msg\n\t\t\t\t}));\n\t\t\t\t_state.deployError = msg;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst healthError = await pollContainerHealth(composeOpts, services, 5 * 6e4);\n\t\t\tif (healthError) {\n\t\t\t\t_state.deployError = healthError;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst voiceError = await bringUpVoiceIfEnabled(state, composeOpts);\n\t\t\tif (voiceError) {\n\t\t\t\t_state.deployError = voiceError;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tmarkSetupComplete(state);\n\t\t\t} catch (err) {\n\t\t\t\tlogger.error(\"failed to persist OP_SETUP_COMPLETE after healthy deploy\", { error: err instanceof Error ? err.message : String(err) });\n\t\t\t\t_state.deployError = \"Deployment succeeded but failed to mark setup complete. Try Retry; if it persists, check disk space and permissions on knowledge/env/stack.env.\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_state.setupComplete = true;\n\t\t\t_state.phase = \"ready\";\n\t\t} catch (err) {\n\t\t\tconst raw = String(err);\n\t\t\tconst msg = mapDockerError(raw);\n\t\t\tlogger.error(\"deploy failed\", { error: raw });\n\t\t\t_state.deployStatus = _state.deployStatus.map((e) => ({\n\t\t\t\t...e,\n\t\t\t\tstatus: \"error\",\n\t\t\t\tlabel: msg\n\t\t\t}));\n\t\t\t_state.deployError = msg;\n\t\t} finally {\n\t\t\t_state.deploying = false;\n\t\t}\n\t})();\n}\nvar VOICE_ADDON = \"voice\";\nvar VOICE_HEALTH_TIMEOUT_MS = 10 * 6e4;\n/**\n* Return the image names for services whose images are NOT present on the\n* local Docker daemon. Used to build actionable error messages.\n*/\nasync function missingServiceImages(composeOpts, services) {\n\tif (services.length === 0) return [];\n\tconst { execFile } = await import(\"node:child_process\");\n\tconst args = [\n\t\t\"compose\",\n\t\t...composeOpts.files.flatMap((f) => [\"-f\", f]),\n\t\t...(composeOpts.envFiles ?? []).filter((f) => existsSync(f)).flatMap((f) => [\"--env-file\", f]),\n\t\t...composeOpts.profiles.flatMap((p) => [\"--profile\", p]),\n\t\t\"config\",\n\t\t\"--format\",\n\t\t\"json\"\n\t];\n\tconst serviceConfig = (await new Promise((resolve) => {\n\t\texecFile(\"docker\", args, { timeout: 3e4 }, (err, stdout) => {\n\t\t\tif (err) return resolve({});\n\t\t\ttry {\n\t\t\t\tresolve(JSON.parse(stdout.toString()));\n\t\t\t} catch {\n\t\t\t\tresolve({});\n\t\t\t}\n\t\t});\n\t})).services ?? {};\n\tconst missing = [];\n\tfor (const svc of services) {\n\t\tconst image = serviceConfig[svc]?.image;\n\t\tif (!image) {\n\t\t\tmissing.push(`${svc} (image unknown)`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!await new Promise((resolve) => {\n\t\t\texecFile(\"docker\", [\n\t\t\t\t\"image\",\n\t\t\t\t\"inspect\",\n\t\t\t\timage\n\t\t\t], { timeout: 5e3 }, (err) => resolve(!err));\n\t\t})) missing.push(image);\n\t}\n\treturn missing;\n}\n/**\n* Resolve each service's image via `docker compose config` and verify\n* `docker image inspect` finds it locally. Lets the deploy proceed\n* after a registry-pull failure when the operator has the images\n* cached (e.g. dev mode with locally-built `:dev` tags). Returns false\n* on any service whose image we can't confirm is present, including\n* services with no resolvable image and any docker-side error.\n*/\nasync function allServiceImagesPresent(composeOpts, services) {\n\tif (services.length === 0) return false;\n\tconst { execFile } = await import(\"node:child_process\");\n\tconst args = [\n\t\t\"compose\",\n\t\t...composeOpts.files.flatMap((f) => [\"-f\", f]),\n\t\t...(composeOpts.envFiles ?? []).filter((f) => existsSync(f)).flatMap((f) => [\"--env-file\", f]),\n\t\t...composeOpts.profiles.flatMap((p) => [\"--profile\", p]),\n\t\t\"config\",\n\t\t\"--format\",\n\t\t\"json\"\n\t];\n\tconst serviceConfig = (await new Promise((resolve) => {\n\t\texecFile(\"docker\", args, { timeout: 3e4 }, (err, stdout) => {\n\t\t\tif (err) return resolve({});\n\t\t\ttry {\n\t\t\t\tresolve(JSON.parse(stdout.toString()));\n\t\t\t} catch {\n\t\t\t\tresolve({});\n\t\t\t}\n\t\t});\n\t})).services ?? {};\n\tfor (const svc of services) {\n\t\tconst image = serviceConfig[svc]?.image;\n\t\tif (!image) return false;\n\t\tif (!await new Promise((resolve) => {\n\t\t\texecFile(\"docker\", [\n\t\t\t\t\"image\",\n\t\t\t\t\"inspect\",\n\t\t\t\timage\n\t\t\t], { timeout: 5e3 }, (err) => {\n\t\t\t\tresolve(!err);\n\t\t\t});\n\t\t})) return false;\n\t}\n\treturn true;\n}\n/**\n* Pull + bring up the voice addon's chosen profile if\n* the addon is enabled. Runs after the core stack is healthy so the\n* deploy progress UI shows voice as a distinct phase (\"starting-voice\")\n* with its own status row.\n*\n* Returns null on success or a user-friendly error string on failure.\n* The caller surfaces the error via _state.deployError.\n*/\nasync function bringUpVoiceIfEnabled(state, composeOpts) {\n\tif (!listEnabledAddonIds(state.homeDir).includes(VOICE_ADDON)) return null;\n\tconst profiles = getAddonProfiles(state.homeDir, VOICE_ADDON);\n\tconst stored = getAddonProfileSelection(state.stackDir, VOICE_ADDON);\n\tconst profileId = stored ?? profiles.find((p) => p.id === addonProfileId(VOICE_ADDON, \"cpu\"))?.id ?? profiles[0]?.id ?? addonProfileId(VOICE_ADDON, \"cpu\");\n\tif (!stored) try {\n\t\tsetAddonProfileSelection(state.stackDir, VOICE_ADDON, profileId, state);\n\t} catch (err) {\n\t\tlogger.warn(\"voice: failed to persist profile selection (continuing)\", { error: err instanceof Error ? err.message : String(err) });\n\t}\n\tconst profileServices = profiles.find((p) => p.id === profileId)?.services ?? [];\n\tif (profileServices.length === 0) {\n\t\tlogger.warn(\"voice: no services found for chosen profile (skipping)\", { profileId });\n\t\treturn null;\n\t}\n\t_state.phase = \"starting-voice\";\n\t_state.deployStatus = [..._state.deployStatus, ...profileServices.map((svc) => ({\n\t\tservice: svc,\n\t\tstatus: \"pending\",\n\t\tlabel: \"Voice — starting container…\"\n\t}))];\n\tconst upResult = await composeUp({\n\t\t...composeOpts,\n\t\tservices: profileServices,\n\t\tprofiles: [profileId],\n\t\tforceRecreate: true\n\t});\n\tif (!upResult.ok) {\n\t\tconst msg = mapDockerError(upResult.stderr ?? \"Voice container failed to start\");\n\t\t_state.deployStatus = _state.deployStatus.map((e) => profileServices.includes(e.service) ? {\n\t\t\t...e,\n\t\t\tstatus: \"error\",\n\t\t\tlabel: msg\n\t\t} : e);\n\t\treturn `Voice addon: ${msg}`;\n\t}\n\tconst probeUrl = \"http://127.0.0.1:8880/health\";\n\tconst deadline = Date.now() + VOICE_HEALTH_TIMEOUT_MS;\n\tlet healthy = false;\n\twhile (Date.now() < deadline) {\n\t\ttry {\n\t\t\tif ((await fetch(probeUrl, { signal: AbortSignal.timeout(1500) })).ok) {\n\t\t\t\thealthy = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {}\n\t\tawait new Promise((r) => setTimeout(r, 2e3));\n\t}\n\tif (!healthy) {\n\t\t_state.deployStatus = _state.deployStatus.map((e) => profileServices.includes(e.service) ? {\n\t\t\t...e,\n\t\t\tstatus: \"warning\",\n\t\t\tlabel: \"Voice is still warming up. You can finish setup; check the Voice tab in admin.\"\n\t\t} : e);\n\t\tlogger.warn(\"voice: container did not become healthy in time\", { timeoutMs: VOICE_HEALTH_TIMEOUT_MS });\n\t\treturn null;\n\t}\n\t_state.deployStatus = _state.deployStatus.map((e) => profileServices.includes(e.service) ? {\n\t\t...e,\n\t\tstatus: \"running\",\n\t\tlabel: \"Voice — ready\"\n\t} : e);\n\treturn null;\n}\n//#endregion\nexport { resetDeployState as n, startDeploy as r, getDeployState as t };\n"],"names":[],"mappings":"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"}
@@ -12922,6 +12922,66 @@ function run$1(args, cwd, timeoutMs = 12e4, envOverrides) {
12922
12922
  function resolveComposeProjectName(envOverrides = {}) {
12923
12923
  return envOverrides.OP_PROJECT_NAME?.trim() || envOverrides.COMPOSE_PROJECT_NAME?.trim() || process.env.OP_PROJECT_NAME?.trim() || process.env.COMPOSE_PROJECT_NAME?.trim() || "openpalm";
12924
12924
  }
12925
+ /**
12926
+ * Decide whether a running compose project (identified by its
12927
+ * `com.docker.compose.project.working_dir` label) is OURS — i.e. was launched
12928
+ * from this install's working dir. An empty/unknown label can't prove foreign,
12929
+ * so it counts as ours (reconcile rather than wrongly refuse a redeploy).
12930
+ *
12931
+ * Pure decision split out from detectExistingProject so the ours-vs-foreign
12932
+ * rule is unit-testable without a Docker daemon.
12933
+ */
12934
+ function isProjectOurs(workingDirLabel, expectedWorkingDir) {
12935
+ const label = workingDirLabel.trim();
12936
+ return label === "" || label === expectedWorkingDir;
12937
+ }
12938
+ /**
12939
+ * Probe the Docker daemon for a running compose project that shares
12940
+ * `projectName`. Decides ours-vs-foreign by comparing the project's
12941
+ * `com.docker.compose.project.working_dir` label against `expectedWorkingDir`
12942
+ * (the install's OP_HOME / compose context).
12943
+ *
12944
+ * Returns `{ exists:false }` on any docker error (daemon down, no permission) —
12945
+ * detection is best-effort and never blocks the caller; a real failure surfaces
12946
+ * later through composeUp.
12947
+ */
12948
+ function detectExistingProject(opts) {
12949
+ const none = {
12950
+ exists: false,
12951
+ isOurs: false,
12952
+ workingDir: ""
12953
+ };
12954
+ return new Promise((resolve) => {
12955
+ execFile("docker", [
12956
+ "ps",
12957
+ "-q",
12958
+ "--filter",
12959
+ `label=com.docker.compose.project=${opts.projectName}`
12960
+ ], { timeout: 1e4 }, (err, stdout) => {
12961
+ if (err) return resolve(none);
12962
+ const ids = stdout.toString().trim().split(/\s+/).filter(Boolean);
12963
+ if (ids.length === 0) return resolve(none);
12964
+ execFile("docker", [
12965
+ "inspect",
12966
+ "--format",
12967
+ "{{ index .Config.Labels \"com.docker.compose.project.working_dir\" }}",
12968
+ ids[0]
12969
+ ], { timeout: 1e4 }, (err2, stdout2) => {
12970
+ if (err2) return resolve({
12971
+ exists: true,
12972
+ isOurs: false,
12973
+ workingDir: ""
12974
+ });
12975
+ const workingDir = stdout2.toString().trim();
12976
+ resolve({
12977
+ exists: true,
12978
+ isOurs: isProjectOurs(workingDir, opts.expectedWorkingDir),
12979
+ workingDir
12980
+ });
12981
+ });
12982
+ });
12983
+ });
12984
+ }
12925
12985
  /** Check if Docker is available */
12926
12986
  async function checkDocker() {
12927
12987
  return new Promise((resolve) => {
@@ -13027,7 +13087,20 @@ async function composeUp(options) {
13027
13087
  if (options.forceRecreate) args.push("--force-recreate");
13028
13088
  if (options.removeOrphans) args.push("--remove-orphans");
13029
13089
  if (options.services?.length) args.push(...options.services);
13030
- return run$1(args, void 0, 3e5, collectEnvOverrides(options.envFiles));
13090
+ return run$1(args, void 0, composeUpTimeoutMs(), collectEnvOverrides(options.envFiles));
13091
+ }
13092
+ /**
13093
+ * Timeout budget for `compose up`. A first install extracts multi-GB images
13094
+ * (voice CUDA ~7.6 GB) onto slow disks; the previous hard 5-minute cap
13095
+ * SIGTERM-killed the start mid-extraction and surfaced as an empty/opaque
13096
+ * error. Default 30 min, override with OP_COMPOSE_UP_TIMEOUT_MS. Kept bounded
13097
+ * (never removed) so a genuinely hung start still eventually fails.
13098
+ */
13099
+ function composeUpTimeoutMs() {
13100
+ const raw = process.env.OP_COMPOSE_UP_TIMEOUT_MS?.trim();
13101
+ const parsed = raw ? Number(raw) : NaN;
13102
+ if (Number.isFinite(parsed) && parsed > 0) return parsed;
13103
+ return 30 * 6e4;
13031
13104
  }
13032
13105
  /**
13033
13106
  * Run `docker compose down` to stop and remove containers.
@@ -13907,22 +13980,54 @@ function parseRocmSmi(stdout) {
13907
13980
  }
13908
13981
  return out;
13909
13982
  }
13910
- var GPU_PROBES = [{
13911
- vendor: "nvidia",
13912
- command: "nvidia-smi",
13913
- args: ["--query-gpu=name,memory.total", "--format=csv,noheader,nounits"],
13914
- parse: parseNvidiaSmi
13915
- }, {
13916
- vendor: "amd",
13917
- command: "rocm-smi",
13918
- args: [
13919
- "--showmeminfo",
13920
- "vram",
13921
- "--showproductname",
13922
- "--json"
13923
- ],
13924
- parse: parseRocmSmi
13925
- }];
13983
+ /**
13984
+ * Parse `sysctl -n hw.memsize hw.model` (two lines: total bytes, then model id)
13985
+ * into an Apple-Silicon GpuInfo. `hw.memsize` is UNIFIED memory shared between
13986
+ * CPU and GPU, carried here as vramMb for informational display only — callers
13987
+ * must NOT treat it like discrete VRAM (see setup-recommendation). Pure; never throws.
13988
+ */
13989
+ function parseAppleSilicon(stdout) {
13990
+ const lines = stdout.split("\n").map((l) => l.trim()).filter(Boolean);
13991
+ if (lines.length === 0) return [];
13992
+ const bytes = Number.parseInt(lines[0] ?? "", 10);
13993
+ if (!Number.isFinite(bytes) || bytes <= 0) return [];
13994
+ const vramMb = Math.round(bytes / (1024 * 1024));
13995
+ return [{
13996
+ vendor: "apple",
13997
+ name: `Apple Silicon (${lines[1] && lines[1].length > 0 ? lines[1] : "arm64"})`,
13998
+ vramMb
13999
+ }];
14000
+ }
14001
+ var GPU_PROBES = [
14002
+ {
14003
+ vendor: "nvidia",
14004
+ command: "nvidia-smi",
14005
+ args: ["--query-gpu=name,memory.total", "--format=csv,noheader,nounits"],
14006
+ parse: parseNvidiaSmi
14007
+ },
14008
+ {
14009
+ vendor: "amd",
14010
+ command: "rocm-smi",
14011
+ args: [
14012
+ "--showmeminfo",
14013
+ "vram",
14014
+ "--showproductname",
14015
+ "--json"
14016
+ ],
14017
+ parse: parseRocmSmi
14018
+ },
14019
+ {
14020
+ vendor: "apple",
14021
+ command: "sysctl",
14022
+ args: [
14023
+ "-n",
14024
+ "hw.memsize",
14025
+ "hw.model"
14026
+ ],
14027
+ parse: parseAppleSilicon,
14028
+ enabled: process.platform === "darwin" && process.arch === "arm64"
14029
+ }
14030
+ ];
13926
14031
  function run(command, args, timeoutMs = 3e3) {
13927
14032
  return new Promise((resolve) => {
13928
14033
  execFile(command, args, { timeout: timeoutMs }, (err, stdout) => {
@@ -13937,6 +14042,7 @@ function run(command, args, timeoutMs = 3e3) {
13937
14042
  async function detectGpu() {
13938
14043
  const found = [];
13939
14044
  await Promise.all(GPU_PROBES.map(async (probe) => {
14045
+ if (probe.enabled === false) return;
13940
14046
  const stdout = await run(probe.command, probe.args);
13941
14047
  if (stdout === null) return;
13942
14048
  try {
@@ -13955,6 +14061,7 @@ async function detectGpu() {
13955
14061
  var VENDOR_PROFILE_VARIANT = {
13956
14062
  nvidia: "cuda",
13957
14063
  amd: "rocm",
14064
+ apple: "cpu",
13958
14065
  unknown: "cpu"
13959
14066
  };
13960
14067
  function gpuToProfileVariant(gpu) {
@@ -13968,11 +14075,13 @@ var labelHostProviders = (h) => h.map((p) => p.provider).join(" and ");
13968
14075
  * Order (first match wins):
13969
14076
  * 1. cloud provider connected -> use it.
13970
14077
  * 2. host-local provider running -> add it, proceed.
13971
- * 3. capable GPU (>= threshold) -> enable in-stack Ollama.
13972
- * 4. otherwise -> ask the user to connect a provider.
14078
+ * 3. darwin + apple GPU -> guide to HOST Ollama (Metal); never in-stack.
14079
+ * 4. capable GPU (>= threshold) -> enable in-stack Ollama.
14080
+ * 5. otherwise -> ask the user to connect a provider.
13973
14081
  */
13974
14082
  function recommendSetup(input) {
13975
14083
  const { cloudProviders, hostProviders, gpu } = input;
14084
+ const platform = input.platform ?? process.platform;
13976
14085
  if (cloudProviders.length > 0) return {
13977
14086
  action: "use-cloud",
13978
14087
  cloudProviders
@@ -13982,6 +14091,10 @@ function recommendSetup(input) {
13982
14091
  hostProviders,
13983
14092
  alert: `No cloud AI provider was detected, but ${labelHostProviders(hostProviders)} ${hostProviders.length > 1 ? "are" : "is"} running on your computer — added automatically. Pick your models on the next step.`
13984
14093
  };
14094
+ if (platform === "darwin" && gpu && gpu.vendor === "apple") return {
14095
+ action: "connect-manually",
14096
+ alert: "No AI provider was detected. On macOS, fast local models need Ollama running natively (it uses your Apple Silicon / Metal GPU) — the bundled in-stack Ollama runs in Linux and cannot reach Metal. Install Ollama for macOS (https://ollama.com/download), or connect a provider on the next step."
14097
+ };
13985
14098
  if (gpu && gpu.vramMb >= 8192) return {
13986
14099
  action: "enable-ollama",
13987
14100
  profileVariant: gpuToProfileVariant(gpu),
@@ -14618,5 +14731,5 @@ function importHostOpenCode(state, options = {}) {
14618
14731
  };
14619
14732
  }
14620
14733
 
14621
- export { importHostOpenCode as $, AKM_USER_ENV_REF as A, createState as B, CORE_SERVICES as C, deleteUserEnvKey as D, detectGpu as E, detectHostOpenCode as F, detectLocalProviders as G, disableHostAkmSharing as H, enableHostAkmSharing as I, ensureAkmUserEnv as J, ensureHomeDirs as K, ensureMigrated as L, MigrationError as M, ensureOpenCodeConfig as N, ensureOpenCodeSystemConfig as O, PROVIDER_KEY_MAP as P, ensureSecrets as Q, executeAutomation as R, fetchProviderModels as S, getAddonProfileAvailability as T, getAddonProfileSelection as U, getAddonProfiles as V, getAddonServiceNames as W, getDockerEvents as X, getHostAkmSharingStatus as Y, getRegistryAddonConfig as Z, hostAkmStashPath as _, addonProfileId as a, isAllowedService as a0, isHostAkmAvailable as a1, isSetupComplete as a2, listAvailableAddonIds as a3, listEnabledAddonIds as a4, listSecretFiles as a5, loadAutomations as a6, parseComposeStderr as a7, parseEnvFile as a8, performSetup as a9, writeUserEnvKey as aA, writeVoiceVars as aB, performUpgrade as aa, readAutomationLogs as ab, readSecret as ac, readSecretFile as ad, readStackEnv as ae, readStackRuntimeEnv as af, readStackSecretEnv as ag, readTaskFile as ah, readUserEnvFile as ai, recommendSetup as aj, removeSecretFile as ak, removeTaskFile as al, resolveComposeProjectName as am, resolveDataDir as an, resolveRuntimeFiles as ao, resolveStackDir as ap, seedUiBuild as aq, setAddonEnabled as ar, setAddonProfileSelection as as, summarizeComposeStderr as at, validateProposedState as au, writeFileAtomic as av, writeRuntimeFiles as aw, writeSecretFile as ax, writeStackSecretEnv as ay, writeTaskFile 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, buildAkmEnv as j, buildComposeOptions as k, buildManagedServices as l, checkDocker as m, checkDockerCompose as n, composeDown as o, composeLogs as p, composePreflight as q, composePs as r, composePull as s, composeRestart as t, composeStart as u, composeStats as v, composeStop as w, composeUp as x, createLogger as y, createOpenCodeClient as z };
14622
- //# sourceMappingURL=src-CQbie-rx.js.map
14734
+ export { hostAkmStashPath as $, AKM_USER_ENV_REF as A, createState as B, CORE_SERVICES as C, deleteUserEnvKey as D, detectExistingProject as E, detectGpu as F, detectHostOpenCode as G, detectLocalProviders as H, disableHostAkmSharing as I, enableHostAkmSharing as J, ensureAkmUserEnv as K, ensureHomeDirs as L, MigrationError as M, ensureMigrated as N, ensureOpenCodeConfig as O, PROVIDER_KEY_MAP as P, ensureOpenCodeSystemConfig as Q, ensureSecrets as R, executeAutomation as S, fetchProviderModels as T, getAddonProfileAvailability as U, getAddonProfileSelection as V, getAddonProfiles as W, getAddonServiceNames as X, getDockerEvents as Y, getHostAkmSharingStatus as Z, getRegistryAddonConfig as _, addonProfileId as a, importHostOpenCode as a0, isAllowedService as a1, isHostAkmAvailable as a2, isSetupComplete as a3, listAvailableAddonIds as a4, listEnabledAddonIds as a5, listSecretFiles as a6, loadAutomations as a7, parseComposeStderr as a8, parseEnvFile as a9, writeTaskFile as aA, writeUserEnvKey as aB, writeVoiceVars as aC, performSetup as aa, performUpgrade as ab, readAutomationLogs as ac, readSecret as ad, readSecretFile as ae, readStackEnv as af, readStackRuntimeEnv as ag, readStackSecretEnv as ah, readTaskFile as ai, readUserEnvFile as aj, recommendSetup as ak, removeSecretFile as al, removeTaskFile as am, resolveComposeProjectName as an, resolveDataDir as ao, resolveRuntimeFiles as ap, resolveStackDir as aq, seedUiBuild as ar, setAddonEnabled as as, setAddonProfileSelection as at, summarizeComposeStderr as au, validateProposedState as av, writeFileAtomic as aw, writeRuntimeFiles as ax, writeSecretFile as ay, writeStackSecretEnv 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, buildAkmEnv as j, buildComposeOptions as k, buildManagedServices as l, checkDocker as m, checkDockerCompose as n, composeDown as o, composeLogs as p, composePreflight as q, composePs as r, composePull as s, composeRestart as t, composeStart as u, composeStats as v, composeStop as w, composeUp as x, createLogger as y, createOpenCodeClient as z };
14735
+ //# sourceMappingURL=src-DJv-Q_k2.js.map