@openpalm/ui 0.11.2-rc.1 → 0.11.2-rc.3

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 (291) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/chunks/BlN3ZnFx.js +1 -0
  3. package/build/client/_app/immutable/chunks/BlN3ZnFx.js.br +2 -0
  4. package/build/client/_app/immutable/chunks/BlN3ZnFx.js.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{BbsmUDEz.js → BwYwOgL0.js} +1 -1
  6. package/build/client/_app/immutable/chunks/BwYwOgL0.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/BwYwOgL0.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{BxIEEPV3.js → CtJ15aFE.js} +1 -1
  9. package/build/client/_app/immutable/chunks/CtJ15aFE.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/CtJ15aFE.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/irujFCsS.js +1 -0
  12. package/build/client/_app/immutable/chunks/irujFCsS.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/irujFCsS.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{7Y-z2Cs4.js → m3raSwuG.js} +2 -2
  15. package/build/client/_app/immutable/chunks/m3raSwuG.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/m3raSwuG.js.gz +0 -0
  17. package/build/client/_app/immutable/entry/{app.DamaMvOo.js → app.fUaI2Rdo.js} +2 -2
  18. package/build/client/_app/immutable/entry/app.fUaI2Rdo.js.br +0 -0
  19. package/build/client/_app/immutable/entry/app.fUaI2Rdo.js.gz +0 -0
  20. package/build/client/_app/immutable/entry/start.BG6N_rOt.js +1 -0
  21. package/build/client/_app/immutable/entry/start.BG6N_rOt.js.br +0 -0
  22. package/build/client/_app/immutable/entry/start.BG6N_rOt.js.gz +0 -0
  23. package/build/client/_app/immutable/nodes/{1.D_t9eVLg.js → 1.BeBAXMiv.js} +1 -1
  24. package/build/client/_app/immutable/nodes/1.BeBAXMiv.js.br +1 -0
  25. package/build/client/_app/immutable/nodes/1.BeBAXMiv.js.gz +0 -0
  26. package/build/client/_app/immutable/nodes/{4.rszAmyBN.js → 4.CB9FU9Zm.js} +1 -1
  27. package/build/client/_app/immutable/nodes/4.CB9FU9Zm.js.br +0 -0
  28. package/build/client/_app/immutable/nodes/4.CB9FU9Zm.js.gz +0 -0
  29. package/build/client/_app/immutable/nodes/{5.B5KOuICr.js → 5.DelM-dx-.js} +1 -1
  30. package/build/client/_app/immutable/nodes/5.DelM-dx-.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/5.DelM-dx-.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{6.Bw69iLts.js → 6.DYi42DKV.js} +1 -1
  33. package/build/client/_app/immutable/nodes/6.DYi42DKV.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/6.DYi42DKV.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{7.ockxnYPK.js → 7.D5MYpjxc.js} +1 -1
  36. package/build/client/_app/immutable/nodes/7.D5MYpjxc.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/7.D5MYpjxc.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/{8.Bt2Nswbt.js → 8.BU_Xoiqy.js} +1 -1
  39. package/build/client/_app/immutable/nodes/8.BU_Xoiqy.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/8.BU_Xoiqy.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/9.DKf5O9Bu.js +5 -0
  42. package/build/client/_app/immutable/nodes/9.DKf5O9Bu.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/9.DKf5O9Bu.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/server/chunks/1-23p5SROZ.js +9 -0
  48. package/build/server/chunks/{1-BTD70sT7.js.map → 1-23p5SROZ.js.map} +1 -1
  49. package/build/server/chunks/4-CuMCCnXO.js +9 -0
  50. package/build/server/chunks/{4-CubOOlWA.js.map → 4-CuMCCnXO.js.map} +1 -1
  51. package/build/server/chunks/5-tS9KZizI.js +9 -0
  52. package/build/server/chunks/{5-C5D5O8w1.js.map → 5-tS9KZizI.js.map} +1 -1
  53. package/build/server/chunks/{6-DCNMSRHJ.js → 6-CA1-Hqsr.js} +3 -3
  54. package/build/server/chunks/{6-DCNMSRHJ.js.map → 6-CA1-Hqsr.js.map} +1 -1
  55. package/build/server/chunks/7-CV_8QMrU.js +9 -0
  56. package/build/server/chunks/{7-jdfP4oIc.js.map → 7-CV_8QMrU.js.map} +1 -1
  57. package/build/server/chunks/{8-Dd434AgX.js → 8-D2EzFser.js} +3 -3
  58. package/build/server/chunks/{8-Dd434AgX.js.map → 8-D2EzFser.js.map} +1 -1
  59. package/build/server/chunks/{9-Dj1CAYUs.js → 9-BvZnD9GJ.js} +2 -2
  60. package/build/server/chunks/{9-Dj1CAYUs.js.map → 9-BvZnD9GJ.js.map} +1 -1
  61. package/build/server/chunks/{Navbar-Bbr28xK9.js → Navbar-Dm7pkDhZ.js} +3 -3
  62. package/build/server/chunks/{Navbar-Bbr28xK9.js.map → Navbar-Dm7pkDhZ.js.map} +1 -1
  63. package/build/server/chunks/VoiceProfileSelector-CbOV_v5A.js.map +1 -1
  64. package/build/server/chunks/_page.svelte-B0M8mXzs.js.map +1 -1
  65. package/build/server/chunks/{_page.svelte-D-uhfsj5.js → _page.svelte-CYUINSKQ.js} +6 -6
  66. package/build/server/chunks/{_page.svelte-D-uhfsj5.js.map → _page.svelte-CYUINSKQ.js.map} +1 -1
  67. package/build/server/chunks/{_page.svelte-D7VlbGXj.js → _page.svelte-CrclcTXV.js} +5 -5
  68. package/build/server/chunks/{_page.svelte-D7VlbGXj.js.map → _page.svelte-CrclcTXV.js.map} +1 -1
  69. package/build/server/chunks/{_page.svelte-Dfe5FJdv.js → _page.svelte-DPqiqjFF.js} +5 -5
  70. package/build/server/chunks/{_page.svelte-Dfe5FJdv.js.map → _page.svelte-DPqiqjFF.js.map} +1 -1
  71. package/build/server/chunks/{_page.svelte-4qKAK6Tb.js → _page.svelte-DVLQpkdr.js} +5 -5
  72. package/build/server/chunks/{_page.svelte-4qKAK6Tb.js.map → _page.svelte-DVLQpkdr.js.map} +1 -1
  73. package/build/server/chunks/{_page.svelte-fkfNgz2M.js → _page.svelte-Dvp-f5ix.js} +3 -3
  74. package/build/server/chunks/{_page.svelte-fkfNgz2M.js.map → _page.svelte-Dvp-f5ix.js.map} +1 -1
  75. package/build/server/chunks/{_server.ts-BAmfRgDu.js → _server.ts--Tudx42m.js} +4 -4
  76. package/build/server/chunks/{_server.ts-BAmfRgDu.js.map → _server.ts--Tudx42m.js.map} +1 -1
  77. package/build/server/chunks/{_server.ts-C3UA92-P.js → _server.ts-B7LzOane.js} +4 -4
  78. package/build/server/chunks/{_server.ts-C3UA92-P.js.map → _server.ts-B7LzOane.js.map} +1 -1
  79. package/build/server/chunks/{_server.ts-oLxKZF14.js → _server.ts-B9yc2ML4.js} +6 -6
  80. package/build/server/chunks/{_server.ts-oLxKZF14.js.map → _server.ts-B9yc2ML4.js.map} +1 -1
  81. package/build/server/chunks/{_server.ts--N8krQnw.js → _server.ts-BAjDXL3K.js} +4 -4
  82. package/build/server/chunks/{_server.ts--N8krQnw.js.map → _server.ts-BAjDXL3K.js.map} +1 -1
  83. package/build/server/chunks/{_server.ts-D3isWFzo.js → _server.ts-BBWA8_9x.js} +5 -5
  84. package/build/server/chunks/{_server.ts-D3isWFzo.js.map → _server.ts-BBWA8_9x.js.map} +1 -1
  85. package/build/server/chunks/{_server.ts-BjsoTMxt.js → _server.ts-BGbMzbjh.js} +4 -4
  86. package/build/server/chunks/{_server.ts-BjsoTMxt.js.map → _server.ts-BGbMzbjh.js.map} +1 -1
  87. package/build/server/chunks/{_server.ts-Bkz7Vyl7.js → _server.ts-BJkQZiVJ.js} +5 -5
  88. package/build/server/chunks/{_server.ts-Bkz7Vyl7.js.map → _server.ts-BJkQZiVJ.js.map} +1 -1
  89. package/build/server/chunks/{_server.ts-CpO4xFnt.js → _server.ts-BK2dZlWy.js} +4 -4
  90. package/build/server/chunks/{_server.ts-CpO4xFnt.js.map → _server.ts-BK2dZlWy.js.map} +1 -1
  91. package/build/server/chunks/{_server.ts-rP8pYqeQ.js → _server.ts-BNo_nEnF.js} +4 -4
  92. package/build/server/chunks/{_server.ts-rP8pYqeQ.js.map → _server.ts-BNo_nEnF.js.map} +1 -1
  93. package/build/server/chunks/{_server.ts-CRUfNiEL.js → _server.ts-BU2Csa8a.js} +4 -4
  94. package/build/server/chunks/{_server.ts-CRUfNiEL.js.map → _server.ts-BU2Csa8a.js.map} +1 -1
  95. package/build/server/chunks/{_server.ts-DYuZIg9l.js → _server.ts-BXsAwlao.js} +4 -4
  96. package/build/server/chunks/{_server.ts-DYuZIg9l.js.map → _server.ts-BXsAwlao.js.map} +1 -1
  97. package/build/server/chunks/{_server.ts-upBZRwnP.js → _server.ts-Be6Kl9rP.js} +5 -5
  98. package/build/server/chunks/{_server.ts-upBZRwnP.js.map → _server.ts-Be6Kl9rP.js.map} +1 -1
  99. package/build/server/chunks/{_server.ts-DCg7u0gt.js → _server.ts-Bis7rnjz.js} +4 -4
  100. package/build/server/chunks/{_server.ts-DCg7u0gt.js.map → _server.ts-Bis7rnjz.js.map} +1 -1
  101. package/build/server/chunks/{_server.ts-CAycEHO4.js → _server.ts-BrgZnEle.js} +9 -7
  102. package/build/server/chunks/_server.ts-BrgZnEle.js.map +1 -0
  103. package/build/server/chunks/{_server.ts-swRf_u3E.js → _server.ts-Brt3m5KU.js} +5 -5
  104. package/build/server/chunks/{_server.ts-swRf_u3E.js.map → _server.ts-Brt3m5KU.js.map} +1 -1
  105. package/build/server/chunks/{_server.ts-BZV8kPh-.js → _server.ts-BwxOKYTk.js} +4 -4
  106. package/build/server/chunks/{_server.ts-BZV8kPh-.js.map → _server.ts-BwxOKYTk.js.map} +1 -1
  107. package/build/server/chunks/{_server.ts-CcLqY7mC.js → _server.ts-Bx6eOsLl.js} +4 -4
  108. package/build/server/chunks/{_server.ts-CcLqY7mC.js.map → _server.ts-Bx6eOsLl.js.map} +1 -1
  109. package/build/server/chunks/{_server.ts-DguLVMDx.js → _server.ts-C0OF4qqE.js} +5 -5
  110. package/build/server/chunks/{_server.ts-DguLVMDx.js.map → _server.ts-C0OF4qqE.js.map} +1 -1
  111. package/build/server/chunks/{_server.ts-D9xZdloN.js → _server.ts-C2PQ26X3.js} +2 -2
  112. package/build/server/chunks/{_server.ts-D9xZdloN.js.map → _server.ts-C2PQ26X3.js.map} +1 -1
  113. package/build/server/chunks/{_server.ts-MJxff6j1.js → _server.ts-C5AnpFOz.js} +4 -4
  114. package/build/server/chunks/{_server.ts-MJxff6j1.js.map → _server.ts-C5AnpFOz.js.map} +1 -1
  115. package/build/server/chunks/{_server.ts-BJYAW2v_.js → _server.ts-C5NB5xZE.js} +4 -4
  116. package/build/server/chunks/{_server.ts-BJYAW2v_.js.map → _server.ts-C5NB5xZE.js.map} +1 -1
  117. package/build/server/chunks/{_server.ts-kVbBWaDD.js → _server.ts-C9iX3nUS.js} +27 -5
  118. package/build/server/chunks/_server.ts-C9iX3nUS.js.map +1 -0
  119. package/build/server/chunks/{_server.ts-BTwVVUpt.js → _server.ts-CAeDaD7e.js} +4 -4
  120. package/build/server/chunks/{_server.ts-BTwVVUpt.js.map → _server.ts-CAeDaD7e.js.map} +1 -1
  121. package/build/server/chunks/{_server.ts-B7ST2I1g.js → _server.ts-CEmds0rX.js} +2 -2
  122. package/build/server/chunks/{_server.ts-B7ST2I1g.js.map → _server.ts-CEmds0rX.js.map} +1 -1
  123. package/build/server/chunks/{_server.ts-KOGE5rzJ.js → _server.ts-CFEdmX9O.js} +2 -2
  124. package/build/server/chunks/{_server.ts-KOGE5rzJ.js.map → _server.ts-CFEdmX9O.js.map} +1 -1
  125. package/build/server/chunks/{_server.ts-cFNIAAvs.js → _server.ts-CHQUBWgz.js} +3 -3
  126. package/build/server/chunks/{_server.ts-cFNIAAvs.js.map → _server.ts-CHQUBWgz.js.map} +1 -1
  127. package/build/server/chunks/{_server.ts-DrZeLUaT.js → _server.ts-CNEr2nOA.js} +4 -4
  128. package/build/server/chunks/{_server.ts-DrZeLUaT.js.map → _server.ts-CNEr2nOA.js.map} +1 -1
  129. package/build/server/chunks/{_server.ts-C_o9u8JZ.js → _server.ts-CQTfOG8q.js} +4 -4
  130. package/build/server/chunks/{_server.ts-C_o9u8JZ.js.map → _server.ts-CQTfOG8q.js.map} +1 -1
  131. package/build/server/chunks/{_server.ts-D20tceEK.js → _server.ts-CR6PWQ9E.js} +6 -6
  132. package/build/server/chunks/{_server.ts-D20tceEK.js.map → _server.ts-CR6PWQ9E.js.map} +1 -1
  133. package/build/server/chunks/{_server.ts-D39hF3fC.js → _server.ts-CVu6RERr.js} +2 -2
  134. package/build/server/chunks/{_server.ts-D39hF3fC.js.map → _server.ts-CVu6RERr.js.map} +1 -1
  135. package/build/server/chunks/{_server.ts-DUa6bwDM.js → _server.ts-CZBiMENq.js} +4 -4
  136. package/build/server/chunks/{_server.ts-DUa6bwDM.js.map → _server.ts-CZBiMENq.js.map} +1 -1
  137. package/build/server/chunks/{_server.ts-DZyh2rB9.js → _server.ts-CaoSYMPb.js} +5 -5
  138. package/build/server/chunks/{_server.ts-DZyh2rB9.js.map → _server.ts-CaoSYMPb.js.map} +1 -1
  139. package/build/server/chunks/{_server.ts-BimilJxw.js → _server.ts-Cg7kX2II.js} +4 -4
  140. package/build/server/chunks/{_server.ts-BimilJxw.js.map → _server.ts-Cg7kX2II.js.map} +1 -1
  141. package/build/server/chunks/{_server.ts-Cw-3n_ep.js → _server.ts-Cj3hl-ah.js} +4 -4
  142. package/build/server/chunks/{_server.ts-Cw-3n_ep.js.map → _server.ts-Cj3hl-ah.js.map} +1 -1
  143. package/build/server/chunks/{_server.ts-BGBkyRka.js → _server.ts-ClMHQppV.js} +4 -4
  144. package/build/server/chunks/{_server.ts-BGBkyRka.js.map → _server.ts-ClMHQppV.js.map} +1 -1
  145. package/build/server/chunks/{_server.ts-67vw7faX.js → _server.ts-Co2WE64Q.js} +4 -4
  146. package/build/server/chunks/{_server.ts-67vw7faX.js.map → _server.ts-Co2WE64Q.js.map} +1 -1
  147. package/build/server/chunks/{_server.ts-Dw9IUnbc.js → _server.ts-CuGJmNj0.js} +4 -4
  148. package/build/server/chunks/{_server.ts-Dw9IUnbc.js.map → _server.ts-CuGJmNj0.js.map} +1 -1
  149. package/build/server/chunks/{_server.ts-rGaZfdIc.js → _server.ts-CuS_hbXP.js} +4 -4
  150. package/build/server/chunks/{_server.ts-rGaZfdIc.js.map → _server.ts-CuS_hbXP.js.map} +1 -1
  151. package/build/server/chunks/{_server.ts-BAlnprxv.js → _server.ts-CxrjaV2H.js} +4 -4
  152. package/build/server/chunks/{_server.ts-BAlnprxv.js.map → _server.ts-CxrjaV2H.js.map} +1 -1
  153. package/build/server/chunks/{_server.ts-Dbqne9eY.js → _server.ts-D0rMsi8N.js} +6 -6
  154. package/build/server/chunks/{_server.ts-Dbqne9eY.js.map → _server.ts-D0rMsi8N.js.map} +1 -1
  155. package/build/server/chunks/{_server.ts-SFkX7VFb.js → _server.ts-D4BdBHKt.js} +6 -6
  156. package/build/server/chunks/{_server.ts-SFkX7VFb.js.map → _server.ts-D4BdBHKt.js.map} +1 -1
  157. package/build/server/chunks/{_server.ts-BDGqI5pR.js → _server.ts-D6qUkf_W.js} +4 -4
  158. package/build/server/chunks/{_server.ts-BDGqI5pR.js.map → _server.ts-D6qUkf_W.js.map} +1 -1
  159. package/build/server/chunks/{_server.ts-CgkGvTF0.js → _server.ts-D80lQ1GO.js} +5 -5
  160. package/build/server/chunks/{_server.ts-CgkGvTF0.js.map → _server.ts-D80lQ1GO.js.map} +1 -1
  161. package/build/server/chunks/{_server.ts-DhXmrQhc.js → _server.ts-D82YBUWk.js} +4 -4
  162. package/build/server/chunks/{_server.ts-DhXmrQhc.js.map → _server.ts-D82YBUWk.js.map} +1 -1
  163. package/build/server/chunks/{_server.ts-B1J6gmcu.js → _server.ts-D9l9ppd4.js} +4 -4
  164. package/build/server/chunks/{_server.ts-B1J6gmcu.js.map → _server.ts-D9l9ppd4.js.map} +1 -1
  165. package/build/server/chunks/{_server.ts-DniIPBxO.js → _server.ts-DHs1td1E.js} +2 -2
  166. package/build/server/chunks/{_server.ts-DniIPBxO.js.map → _server.ts-DHs1td1E.js.map} +1 -1
  167. package/build/server/chunks/{_server.ts-DXBrPiAj.js → _server.ts-DM7Geg4p.js} +4 -4
  168. package/build/server/chunks/{_server.ts-DXBrPiAj.js.map → _server.ts-DM7Geg4p.js.map} +1 -1
  169. package/build/server/chunks/{_server.ts-B3uS0ABl.js → _server.ts-DOJDSjcf.js} +4 -4
  170. package/build/server/chunks/{_server.ts-B3uS0ABl.js.map → _server.ts-DOJDSjcf.js.map} +1 -1
  171. package/build/server/chunks/{_server.ts-B4p_jHqU.js → _server.ts-DRG78qQW.js} +24 -8
  172. package/build/server/chunks/_server.ts-DRG78qQW.js.map +1 -0
  173. package/build/server/chunks/{_server.ts-DVdrht9C.js → _server.ts-DSRF_ctF.js} +4 -4
  174. package/build/server/chunks/{_server.ts-DVdrht9C.js.map → _server.ts-DSRF_ctF.js.map} +1 -1
  175. package/build/server/chunks/{_server.ts-fRYbSpUy.js → _server.ts-DV9SyClz.js} +4 -4
  176. package/build/server/chunks/{_server.ts-fRYbSpUy.js.map → _server.ts-DV9SyClz.js.map} +1 -1
  177. package/build/server/chunks/{_server.ts-Co5auLt6.js → _server.ts-DaG6LOEN.js} +4 -4
  178. package/build/server/chunks/{_server.ts-Co5auLt6.js.map → _server.ts-DaG6LOEN.js.map} +1 -1
  179. package/build/server/chunks/{_server.ts-BtIfXnk8.js → _server.ts-Dg-7OAks.js} +4 -4
  180. package/build/server/chunks/{_server.ts-BtIfXnk8.js.map → _server.ts-Dg-7OAks.js.map} +1 -1
  181. package/build/server/chunks/{_server.ts-vr1wDdjl.js → _server.ts-Dks6ByeB.js} +4 -4
  182. package/build/server/chunks/{_server.ts-vr1wDdjl.js.map → _server.ts-Dks6ByeB.js.map} +1 -1
  183. package/build/server/chunks/{_server.ts-CRgQ6JvE.js → _server.ts-DlwUat_3.js} +4 -4
  184. package/build/server/chunks/{_server.ts-CRgQ6JvE.js.map → _server.ts-DlwUat_3.js.map} +1 -1
  185. package/build/server/chunks/{_server.ts-CVnGEGgz.js → _server.ts-DqoC6tG4.js} +4 -4
  186. package/build/server/chunks/{_server.ts-CVnGEGgz.js.map → _server.ts-DqoC6tG4.js.map} +1 -1
  187. package/build/server/chunks/{_server.ts-Dw7_J4x-.js → _server.ts-Dv1fYg8u.js} +4 -4
  188. package/build/server/chunks/{_server.ts-Dw7_J4x-.js.map → _server.ts-Dv1fYg8u.js.map} +1 -1
  189. package/build/server/chunks/{_server.ts-DS6wkfxg.js → _server.ts-DyZduXuM.js} +4 -4
  190. package/build/server/chunks/{_server.ts-DS6wkfxg.js.map → _server.ts-DyZduXuM.js.map} +1 -1
  191. package/build/server/chunks/{_server.ts-CBYvFEVS.js → _server.ts-GRF0jIBP.js} +6 -6
  192. package/build/server/chunks/{_server.ts-CBYvFEVS.js.map → _server.ts-GRF0jIBP.js.map} +1 -1
  193. package/build/server/chunks/{_server.ts-Bb62UkjI.js → _server.ts-LTTzMy5r.js} +4 -4
  194. package/build/server/chunks/{_server.ts-Bb62UkjI.js.map → _server.ts-LTTzMy5r.js.map} +1 -1
  195. package/build/server/chunks/{_server.ts-C2jZDeoI.js → _server.ts-LlVUPkA-.js} +4 -4
  196. package/build/server/chunks/{_server.ts-C2jZDeoI.js.map → _server.ts-LlVUPkA-.js.map} +1 -1
  197. package/build/server/chunks/{_server.ts-DteVoyg4.js → _server.ts-SfA_h18s.js} +4 -4
  198. package/build/server/chunks/{_server.ts-DteVoyg4.js.map → _server.ts-SfA_h18s.js.map} +1 -1
  199. package/build/server/chunks/{_server.ts-DSUpiCQo.js → _server.ts-U4d8V13c.js} +4 -4
  200. package/build/server/chunks/{_server.ts-DSUpiCQo.js.map → _server.ts-U4d8V13c.js.map} +1 -1
  201. package/build/server/chunks/{_server.ts-DEB9v5s4.js → _server.ts-fal-vBAP.js} +4 -4
  202. package/build/server/chunks/{_server.ts-DEB9v5s4.js.map → _server.ts-fal-vBAP.js.map} +1 -1
  203. package/build/server/chunks/{_server.ts-CKkuDSSM.js → _server.ts-jlpvDebn.js} +4 -4
  204. package/build/server/chunks/{_server.ts-CKkuDSSM.js.map → _server.ts-jlpvDebn.js.map} +1 -1
  205. package/build/server/chunks/{_server.ts-DDNv0MDu.js → _server.ts-lsR99Q_m.js} +4 -4
  206. package/build/server/chunks/{_server.ts-DDNv0MDu.js.map → _server.ts-lsR99Q_m.js.map} +1 -1
  207. package/build/server/chunks/{_server.ts-BXQH4Qlt.js → _server.ts-rQO3-6HN.js} +4 -4
  208. package/build/server/chunks/{_server.ts-BXQH4Qlt.js.map → _server.ts-rQO3-6HN.js.map} +1 -1
  209. package/build/server/chunks/{_server.ts-BC7_zqMR.js → _server.ts-tKTOoUMC.js} +4 -4
  210. package/build/server/chunks/{_server.ts-BC7_zqMR.js.map → _server.ts-tKTOoUMC.js.map} +1 -1
  211. package/build/server/chunks/{_server.ts-DFBCN73l.js → _server.ts-thmtguqf.js} +5 -5
  212. package/build/server/chunks/{_server.ts-DFBCN73l.js.map → _server.ts-thmtguqf.js.map} +1 -1
  213. package/build/server/chunks/{_server.ts-BLWYsGx3.js → _server.ts-uBQ8YoZW.js} +4 -4
  214. package/build/server/chunks/{_server.ts-BLWYsGx3.js.map → _server.ts-uBQ8YoZW.js.map} +1 -1
  215. package/build/server/chunks/{_server.ts-CaIBfM3d.js → _server.ts-y50mKW5c.js} +4 -4
  216. package/build/server/chunks/{_server.ts-CaIBfM3d.js.map → _server.ts-y50mKW5c.js.map} +1 -1
  217. package/build/server/chunks/{addon-helpers-DU7K-Jl-.js → addon-helpers-Dunj8c6A.js} +2 -2
  218. package/build/server/chunks/{addon-helpers-DU7K-Jl-.js.map → addon-helpers-Dunj8c6A.js.map} +1 -1
  219. package/build/server/chunks/{client-DlIaBp3l.js → client-DMo7Z7Jc.js} +2 -2
  220. package/build/server/chunks/{client-DlIaBp3l.js.map → client-DMo7Z7Jc.js.map} +1 -1
  221. package/build/server/chunks/{config-DuMmS4Kk.js → config-DSa36Eo6.js} +2 -2
  222. package/build/server/chunks/{config-DuMmS4Kk.js.map → config-DSa36Eo6.js.map} +1 -1
  223. package/build/server/chunks/{docker-YA68OZn5.js → docker-BwaLWWJt.js} +2 -2
  224. package/build/server/chunks/{docker-YA68OZn5.js.map → docker-BwaLWWJt.js.map} +1 -1
  225. package/build/server/chunks/{endpoints-CGm4oVfk.js → endpoints-CBqzuY3J.js} +2 -2
  226. package/build/server/chunks/{endpoints-CGm4oVfk.js.map → endpoints-CBqzuY3J.js.map} +1 -1
  227. package/build/server/chunks/{environment-WrKoCzje.js → environment-D3mzrTn2.js} +2 -2
  228. package/build/server/chunks/{environment-WrKoCzje.js.map → environment-D3mzrTn2.js.map} +1 -1
  229. package/build/server/chunks/{error.svelte-D4IIBHJA.js → error.svelte-CuqBgWI4.js} +4 -4
  230. package/build/server/chunks/{error.svelte-D4IIBHJA.js.map → error.svelte-CuqBgWI4.js.map} +1 -1
  231. package/build/server/chunks/{helpers-h_Fq1SBb.js → helpers-jeU7hTwa.js} +3 -3
  232. package/build/server/chunks/{helpers-h_Fq1SBb.js.map → helpers-jeU7hTwa.js.map} +1 -1
  233. package/build/server/chunks/{hooks.server-SbPoC8s4.js → hooks.server-CJIxI-By.js} +5 -5
  234. package/build/server/chunks/{hooks.server-SbPoC8s4.js.map → hooks.server-CJIxI-By.js.map} +1 -1
  235. package/build/server/chunks/{http-DbpsBgUe.js → http-D0MPlwlW.js} +2 -2
  236. package/build/server/chunks/{http-DbpsBgUe.js.map → http-D0MPlwlW.js.map} +1 -1
  237. package/build/server/chunks/{internal-DtdC4O8s.js → internal-S5ECTKiA.js} +3 -3
  238. package/build/server/chunks/{internal-DtdC4O8s.js.map → internal-S5ECTKiA.js.map} +1 -1
  239. package/build/server/chunks/{session-cookie-C61HbJV5.js → session-cookie-DUBC6gaA.js} +2 -2
  240. package/build/server/chunks/{session-cookie-C61HbJV5.js.map → session-cookie-DUBC6gaA.js.map} +1 -1
  241. package/build/server/chunks/{setup-deploy-D0Om28m3.js → setup-deploy-DnfUIlT1.js} +4 -3
  242. package/build/server/chunks/setup-deploy-DnfUIlT1.js.map +1 -0
  243. package/build/server/chunks/{src-DJv-Q_k2.js → src-Bg3Hw0f8.js} +231 -85
  244. package/build/server/chunks/src-Bg3Hw0f8.js.map +1 -0
  245. package/build/server/chunks/{state-DGpfeO6d.js → state-BGEr-v7Z.js} +2 -2
  246. package/build/server/chunks/{state-DGpfeO6d.js.map → state-BGEr-v7Z.js.map} +1 -1
  247. package/build/server/index.js +2 -2
  248. package/build/server/manifest.js +79 -79
  249. package/build/server/manifest.js.map +1 -1
  250. package/package.json +2 -2
  251. package/build/client/_app/immutable/chunks/7Y-z2Cs4.js.br +0 -0
  252. package/build/client/_app/immutable/chunks/7Y-z2Cs4.js.gz +0 -0
  253. package/build/client/_app/immutable/chunks/BbsmUDEz.js.br +0 -0
  254. package/build/client/_app/immutable/chunks/BbsmUDEz.js.gz +0 -0
  255. package/build/client/_app/immutable/chunks/BxIEEPV3.js.br +0 -0
  256. package/build/client/_app/immutable/chunks/BxIEEPV3.js.gz +0 -0
  257. package/build/client/_app/immutable/chunks/DBtofX2R.js +0 -1
  258. package/build/client/_app/immutable/chunks/DBtofX2R.js.br +0 -2
  259. package/build/client/_app/immutable/chunks/DBtofX2R.js.gz +0 -0
  260. package/build/client/_app/immutable/chunks/jhtvkF_A.js +0 -1
  261. package/build/client/_app/immutable/chunks/jhtvkF_A.js.br +0 -0
  262. package/build/client/_app/immutable/chunks/jhtvkF_A.js.gz +0 -0
  263. package/build/client/_app/immutable/entry/app.DamaMvOo.js.br +0 -0
  264. package/build/client/_app/immutable/entry/app.DamaMvOo.js.gz +0 -0
  265. package/build/client/_app/immutable/entry/start.CiFTF0Id.js +0 -1
  266. package/build/client/_app/immutable/entry/start.CiFTF0Id.js.br +0 -0
  267. package/build/client/_app/immutable/entry/start.CiFTF0Id.js.gz +0 -0
  268. package/build/client/_app/immutable/nodes/1.D_t9eVLg.js.br +0 -1
  269. package/build/client/_app/immutable/nodes/1.D_t9eVLg.js.gz +0 -0
  270. package/build/client/_app/immutable/nodes/4.rszAmyBN.js.br +0 -0
  271. package/build/client/_app/immutable/nodes/4.rszAmyBN.js.gz +0 -0
  272. package/build/client/_app/immutable/nodes/5.B5KOuICr.js.br +0 -0
  273. package/build/client/_app/immutable/nodes/5.B5KOuICr.js.gz +0 -0
  274. package/build/client/_app/immutable/nodes/6.Bw69iLts.js.br +0 -0
  275. package/build/client/_app/immutable/nodes/6.Bw69iLts.js.gz +0 -0
  276. package/build/client/_app/immutable/nodes/7.ockxnYPK.js.br +0 -0
  277. package/build/client/_app/immutable/nodes/7.ockxnYPK.js.gz +0 -0
  278. package/build/client/_app/immutable/nodes/8.Bt2Nswbt.js.br +0 -0
  279. package/build/client/_app/immutable/nodes/8.Bt2Nswbt.js.gz +0 -0
  280. package/build/client/_app/immutable/nodes/9.pk1c6xm-.js +0 -4
  281. package/build/client/_app/immutable/nodes/9.pk1c6xm-.js.br +0 -0
  282. package/build/client/_app/immutable/nodes/9.pk1c6xm-.js.gz +0 -0
  283. package/build/server/chunks/1-BTD70sT7.js +0 -9
  284. package/build/server/chunks/4-CubOOlWA.js +0 -9
  285. package/build/server/chunks/5-C5D5O8w1.js +0 -9
  286. package/build/server/chunks/7-jdfP4oIc.js +0 -9
  287. package/build/server/chunks/_server.ts-B4p_jHqU.js.map +0 -1
  288. package/build/server/chunks/_server.ts-CAycEHO4.js.map +0 -1
  289. package/build/server/chunks/_server.ts-kVbBWaDD.js.map +0 -1
  290. package/build/server/chunks/setup-deploy-D0Om28m3.js.map +0 -1
  291. package/build/server/chunks/src-DJv-Q_k2.js.map +0 -1
@@ -1,4 +0,0 @@
1
- import{$ as e,A as t,D as n,E as r,F as i,H as a,I as o,J as s,L as c,M as l,N as u,O as d,P as f,Q as p,T as m,U as h,V as g,X as _,Y as v,Z as y,_ as b,a as x,at as S,b as C,ct as w,d as T,et as E,f as D,it as O,j as k,k as A,lt as j,o as M,p as N,q as P,r as F,s as I,tt as L,u as R,v as z}from"../chunks/0swOyi-5.js";import"../chunks/xihTtKlq.js";import{t as B}from"../chunks/BQ0vnNWj.js";import{a as V,c as H,d as U,i as W,l as G,n as K,o as q,r as ee,s as te,t as J,u as ne}from"../chunks/jhtvkF_A.js";var Y={label:`Docker setup`,href:`https://docs.docker.com/get-docker/`};function re(e){if(!e)return``;if(e instanceof Error)return e.message;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function ie(e,t=`generic`,n={}){let r=re(e),i=r.toLowerCase(),a=n.providerName?`${n.providerName} didn't accept that key`:`API key rejected`;if(/\b(401|403|unauthorized|forbidden|invalid.?api.?key)\b/i.test(r))return{title:a,body:`The provider rejected the API key.`,hint:`Common causes: extra spaces, wrong account, or the key was revoked. Double-check the key and that it has access to the model you selected. Most providers show the key in their dashboard.`,raw:r};if(/\b(ENOTFOUND|ECONNREFUSED|getaddrinfo|EAI_AGAIN|EHOSTUNREACH)\b/i.test(r))return{title:`Couldn't reach the host`,body:r,hint:`Confirm the URL is correct and the service is online. For local providers (Ollama, LM Studio) make sure the server is running on this machine.`,raw:r};if(/(timeout|timed out|AbortError|ETIMEDOUT)/i.test(r))return{title:`Request timed out`,body:`The provider didn't respond in time.`,hint:`It may be slow or temporarily down. Try again in a moment.`,raw:r};if(i.includes(`docker`)||i.includes(`compose`)||i.includes(`daemon`))return{title:`Docker isn't available`,body:`OpenPalm needs Docker (with Compose v2) installed and running.`,hint:`Start Docker Desktop (macOS/Windows) or the docker daemon (Linux), then retry.`,links:[Y],raw:r};if(/EADDRINUSE/i.test(r)||/port.*in.?use/i.test(i))return{title:`A required port is already in use`,body:r,hint:`Another program is using one of OpenPalm's default ports. Quit the conflicting app, or change OpenPalm's port from the Admin Dashboard after setup.`,raw:r};if(/EACCES|EPERM|permission denied/i.test(r))return{title:`Permission denied`,body:r,hint:`OpenPalm couldn't write to its data directory. Check that ~/.openpalm/ is writable by your user.`,raw:r};switch(t){case`provider-verify`:case`model-fetch`:return{title:`Couldn't connect to the provider`,body:r||`Verification failed.`,hint:`Check the API key and base URL, then click Verify again.`,raw:r};case`setup-complete`:return{title:`Setup couldn't finish`,body:r||`Writing configuration failed.`,hint:`Check the technical details below, then retry. If the issue persists, the admin dashboard logs may help.`,raw:r};case`deploy`:case`deploy-poll`:return{title:`Deployment ran into a problem`,body:r||`One or more services failed to start.`,hint:`Image pulls can take several minutes on first install. Retry to attempt again; check Docker logs if it keeps failing.`,raw:r};case`system-check`:return{title:`System check failed`,body:r||`A required dependency is missing.`,hint:`Resolve the failing check above, then click Retry.`,raw:r};case`channel`:return{title:`Channel credential issue`,body:r||`A required field is missing or invalid.`,hint:`Confirm the bot token and other required fields are correct.`,raw:r};case`port-conflict`:return{title:`A required port is already in use`,body:r||`Another process is using one of OpenPalm's ports.`,hint:`Another program is using one of OpenPalm's default ports. Quit the conflicting app, or change OpenPalm's port from the Admin Dashboard after setup.`,raw:r};default:return{title:`Something went wrong`,body:r||`An unexpected error occurred.`,hint:`Try again. If the problem persists, check the admin dashboard logs.`,raw:r}}}var ae=k(`<div></div>`),X=k(`<span role="button"><span class="prog-lbl-text"> </span><span class="prog-lbl-num" aria-hidden="true"></span></span>`),oe=k(`<nav class="prog-bar" aria-label="Wizard steps"><div class="prog-segments"></div> <div class="prog-labels"></div></nav>`);function se(e,t){S(t,!0);var n=oe(),o=s(n);m(o,21,()=>H,r,(e,n,r)=>{var i=ae();a(()=>z(i,1,`prog-seg ${r<=t.currentStep?`on`:``}`)),A(e,i)}),j(o);var l=_(o,2);m(l,21,()=>H,r,(e,n,r)=>{var o=X(),l=s(o),u=s(l,!0);j(l);var f=_(l);f.textContent=r+1,j(o),a((e,i)=>{z(o,1,`prog-lbl ${r<=t.currentStep?`on`:``} ${r===t.currentStep?`active`:``}`),T(o,`tabindex`,e),T(o,`aria-current`,r===t.currentStep?`step`:void 0),T(o,`aria-disabled`,i),T(o,`aria-label`,`Go to step ${c(n)??``}`),d(u,c(n))},[()=>r<=t.maxVisitedStep&&t.canNavigateTo(r)?0:-1,()=>r<=t.maxVisitedStep&&t.canNavigateTo(r)?void 0:`true`]),i(`click`,o,()=>{r<=t.maxVisitedStep&&t.canNavigateTo(r)&&t.onnavigate(r)}),i(`keydown`,o,e=>{(e.key===`Enter`||e.key===` `)&&r<=t.maxVisitedStep&&t.canNavigateTo(r)&&t.onnavigate(r)}),A(e,o)}),j(l),j(n),A(e,n),O()}f([`click`,`keydown`]);var ce=k(`<p class="friendly-error-body svelte-iqsgzf"> </p>`),le=k(`<p class="friendly-error-hint svelte-iqsgzf"> </p>`),Z=k(`<a target="_blank" rel="noopener noreferrer" class="friendly-error-link svelte-iqsgzf"> </a>`),ue=k(`<div class="friendly-error-links svelte-iqsgzf"></div>`),Q=k(`<details class="friendly-error-details svelte-iqsgzf"><summary class="svelte-iqsgzf">Technical details</summary> <pre class="svelte-iqsgzf"> </pre></details>`),de=k(`<div class="friendly-error svelte-iqsgzf"><div class="friendly-error-header svelte-iqsgzf"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg> <strong class="friendly-error-title svelte-iqsgzf"> </strong></div> <!> <!> <!> <!></div>`);function fe(e,i){S(i,!0);let o=x(i,`role`,3,`alert`),l=x(i,`compact`,3,!1);var u=t(),f=v(u),p=e=>{var t=de(),u=s(t),f=_(s(u),2),p=s(f,!0);j(f),j(u);var h=_(u,2),g=e=>{var t=ce(),n=s(t,!0);j(t),a(()=>d(n,i.error.body)),A(e,t)};n(h,e=>{i.error.body&&e(g)});var v=_(h,2),y=e=>{var t=le(),n=s(t,!0);j(t),a(()=>d(n,i.error.hint)),A(e,t)};n(v,e=>{i.error.hint&&e(y)});var b=_(v,2),x=e=>{var t=ue();m(t,21,()=>i.error.links,r,(e,t)=>{var n=Z(),r=s(n);j(n),a(()=>{T(n,`href`,c(t).href),d(r,`${c(t).label??``} →`)}),A(e,n)}),j(t),A(e,t)};n(b,e=>{i.error.links&&i.error.links.length>0&&e(x)});var S=_(b,2),C=e=>{var t=Q(),n=_(s(t),2),r=s(n,!0);j(n),j(t),a(()=>d(r,i.error.raw)),A(e,t)};n(S,e=>{!l()&&i.error.raw&&i.error.raw!==i.error.body&&e(C)}),j(t),a(()=>{T(t,`role`,o()),d(p,i.error.title)}),A(e,t)};n(f,e=>{i.error&&e(p)}),A(e,u),O()}var pe=l(`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--color-success, #16a34a)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>`),me=l(`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--color-danger)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>`),he=k(`<div class="syscheck-meta svelte-1txhq2p"> </div>`),ge=k(`<div class="syscheck-hint svelte-1txhq2p"> </div> <a class="syscheck-link svelte-1txhq2p" target="_blank" rel="noopener noreferrer"> </a>`,1),_e=l(`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--color-success, #16a34a)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>`),ve=l(`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--color-danger)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>`),ye=k(`<div class="syscheck-meta svelte-1txhq2p"> </div>`),be=k('<div class="syscheck-hint svelte-1txhq2p">Compose v2 ships with Docker Desktop. Linux users may need to install the `docker-compose-plugin` package.</div> <a class="syscheck-link svelte-1txhq2p" href="https://docs.docker.com/compose/install/" target="_blank" rel="noopener noreferrer">Compose installation guide →</a>',1),xe=k(`<div class="syscheck-row syscheck-row--ok svelte-1txhq2p"><div class="syscheck-icon svelte-1txhq2p"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--color-success, #16a34a)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg></div> <div class="syscheck-body svelte-1txhq2p"><div class="syscheck-title svelte-1txhq2p">GPU detected</div> <div class="syscheck-meta svelte-1txhq2p"> </div></div></div>`),Se=k(`<div class="syscheck-row syscheck-row--info svelte-1txhq2p"><div class="syscheck-icon syscheck-icon--emoji svelte-1txhq2p" aria-hidden="true"> </div> <div class="syscheck-body svelte-1txhq2p"><div class="syscheck-title svelte-1txhq2p"> </div> <div class="syscheck-meta svelte-1txhq2p"> </div> <div class="syscheck-hint svelte-1txhq2p">We can use this automatically — pick your model on the Models step.</div></div></div>`),Ce=k(`<div><div class="syscheck-icon svelte-1txhq2p"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round"><path d="M12 9v4"></path><path d="M12 17h.01"></path><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path></svg></div> <div class="syscheck-body svelte-1txhq2p"><div class="syscheck-title svelte-1txhq2p"> </div> <div class="syscheck-hint svelte-1txhq2p"><!></div></div></div>`),we=k(`<h2>System Check</h2> <p class="step-description">Let's make sure your machine has everything OpenPalm needs.</p> <!> <div class="syscheck-list svelte-1txhq2p" aria-live="polite"><div><div class="syscheck-icon svelte-1txhq2p"><!></div> <div class="syscheck-body svelte-1txhq2p"><div class="syscheck-title svelte-1txhq2p">Docker is installed and running</div> <!></div></div> <div><div class="syscheck-icon svelte-1txhq2p"><!></div> <div class="syscheck-body svelte-1txhq2p"><div class="syscheck-title svelte-1txhq2p">Docker can run multi-container apps</div> <!></div></div> <!> <!> <!></div> <div class="step-actions"><button class="btn btn-secondary" id="btn-syscheck-retry"> </button> <button class="btn btn-primary" id="btn-syscheck-next">Continue</button></div>`,1);function Te(r,o){S(o,!0);let l={ollama:`Ollama`,lmstudio:`LM Studio`,"model-runner":`Docker Model Runner`},f={ollama:`🦙`,lmstudio:`🖥️`,"model-runner":`🐳`},h=x(o,`isRerun`,3,!1),g=e(!0),y=e(null),b=e(null),C=L(()=>h()?[]:c(y)?.ports.filter(e=>!e.available)??[]),E=L(()=>c(C).filter(e=>e.blocking)),D=L(()=>c(E).length>0),k=L(()=>!!c(y)?.docker.ok&&!!c(y)?.compose.ok&&!c(D));function M(e){return e===`darwin`?{label:`Install Docker Desktop for Mac`,href:`https://www.docker.com/products/docker-desktop/`}:e===`win32`?{label:`Install Docker Desktop for Windows`,href:`https://www.docker.com/products/docker-desktop/`}:{label:`Install Docker Engine for Linux`,href:`https://docs.docker.com/engine/install/`}}function N(e){return e===`darwin`||e===`win32`?`Open Docker Desktop and wait for it to finish starting, then click Retry.`:"Run `sudo systemctl start docker` (or your distro's equivalent), then click Retry."}async function P(){p(g,!0),p(b,null);try{let e=await fetch(`/api/setup/system-check`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();p(y,t,!0),t.docker.ok&&t.compose.ok&&o.onpass(),t.gpu&&o.ongpudetected?.(t.gpu)}catch(e){p(b,ie(e,`system-check`),!0),p(y,null)}finally{p(g,!1)}}F(()=>{P()});var I=we(),R=_(v(I),4),V=e=>{fe(e,{get error(){return c(b)}})};n(R,e=>{c(b)&&e(V)});var H=_(R,2),U=s(H);let W;var G=s(U),K=s(G),q=e=>{B(e,{size:16})},ee=e=>{A(e,pe())},te=e=>{A(e,me())};n(K,e=>{c(g)?e(q):c(y)?.docker.ok?e(ee,1):e(te,-1)}),j(G);var J=_(G,2),ne=_(s(J),2),Y=e=>{var t=he(),n=s(t);j(t),a(()=>d(n,`Docker server ${c(y).docker.version??``}`)),A(e,t)},re=e=>{var t=ge(),n=v(t),r=s(n,!0);j(n);var i=_(n,2),o=s(i);j(i),a((e,t,n)=>{d(r,e),T(i,`href`,t),d(o,`${n??``} →`)},[()=>c(y).docker.error?.includes(`not found`)||c(y).docker.error?.includes(`ENOENT`)?`Docker isn't installed yet.`:N(c(y).platform),()=>M(c(y).platform).href,()=>M(c(y).platform).label]),A(e,t)};n(ne,e=>{c(y)?.docker.ok&&c(y).docker.version?e(Y):c(y)&&!c(y).docker.ok&&e(re,1)}),j(J),j(U);var ae=_(U,2);let X;var oe=s(ae),se=s(oe),ce=e=>{B(e,{size:16})},le=e=>{A(e,_e())},Z=e=>{A(e,ve())};n(se,e=>{c(g)?e(ce):c(y)?.compose.ok?e(le,1):e(Z,-1)}),j(oe);var ue=_(oe,2),Q=_(s(ue),2),de=e=>{var t=ye(),n=s(t,!0);j(t),a(()=>d(n,c(y).compose.version)),A(e,t)},Te=e=>{var t=be();w(2),A(e,t)};n(Q,e=>{c(y)?.compose.ok&&c(y).compose.version?e(de):c(y)&&!c(y).compose.ok&&e(Te,1)}),j(ue),j(ae);var Ee=_(ae,2),De=e=>{var t=xe(),n=_(s(t),2),r=_(s(n),2),i=s(r,!0);j(r),j(n),j(t),a(()=>d(i,c(y).gpu)),A(e,t)};n(Ee,e=>{c(y)?.gpu&&e(De)});var Oe=_(Ee,2),ke=e=>{var n=t();m(v(n),17,()=>c(y).hostProviders,e=>e.provider,(e,t)=>{var n=Se(),r=s(n),i=s(r,!0);j(r);var o=_(r,2),u=s(o),p=s(u);j(u);var m=_(u,2),h=s(m,!0);j(m),w(2),j(o),j(n),a(()=>{d(i,f[c(t).provider]??`🔌`),d(p,`${l[c(t).provider]??c(t).provider??``} is running`),d(h,c(t).url)}),A(e,n)}),A(e,n)};n(Oe,e=>{c(y)?.hostProviders&&c(y).hostProviders.length>0&&e(ke)});var Ae=_(Oe,2),je=e=>{var t=Ce(),r=s(t),i=s(r);j(r);var o=_(r,2),l=s(o),f=s(l);j(l);var p=_(l,2),m=s(p),h=e=>{A(e,u(`Docker is not running — start Docker and click Retry to confirm.`))},g=e=>{A(e,u(`Another program is using this port. Quit it and click Retry.`))};n(m,e=>{c(y).portCheckReliable?e(g,-1):e(h)}),j(p),j(o),j(t),a(e=>{z(t,1,`syscheck-row ${c(D)?`syscheck-row--fail`:`syscheck-row--warn`}`,`svelte-1txhq2p`),T(i,`stroke`,c(D)?`var(--color-danger)`:`var(--color-warning)`),d(f,`Port conflict on ${e??``}`)},[()=>c(C).map(e=>e.port).join(`, `)]),A(e,t)};n(Ae,e=>{c(y)&&c(C).length>0&&e(je)}),j(H);var Me=_(H,2),Ne=s(Me),Pe=s(Ne,!0);j(Ne);var Fe=_(Ne,2);j(Me),a(()=>{W=z(U,1,`syscheck-row svelte-1txhq2p`,null,W,{"syscheck-row--ok":c(y)?.docker.ok,"syscheck-row--fail":c(y)&&!c(y).docker.ok}),X=z(ae,1,`syscheck-row svelte-1txhq2p`,null,X,{"syscheck-row--ok":c(y)?.compose.ok,"syscheck-row--fail":c(y)&&!c(y).compose.ok}),Ne.disabled=c(g),d(Pe,c(g)?`Checking…`:`Retry checks`),Fe.disabled=c(g)||!c(k)}),i(`click`,Ne,()=>P()),i(`click`,Fe,function(...e){o.onnext?.apply(this,e)}),A(r,I),O()}f([`click`]);var Ee=k(`<div class="feedback feedback--info welcome-detection svelte-1d9o2de" data-testid="recommendation-alert"><!> <span>Checking your system…</span></div>`),De=k(`<div class="feedback feedback--info welcome-detection svelte-1d9o2de" role="status" data-testid="recommendation-alert"><span class="welcome-detection-headline svelte-1d9o2de"> </span> <span class="welcome-detection-detail svelte-1d9o2de"> </span></div>`),Oe=k(`<div class="feedback feedback--error" id="step0-error" role="alert"><span> </span></div>`),ke=k(`<!> Importing providers…`,1),Ae=k(`<!> Detecting your system…`,1),je=k(`<div class="welcome-hero" id="welcome-hero"><div class="welcome-icon">👋</div> <h2>Welcome to OpenPalm</h2> <p class="welcome-subtitle">Your self-hosted AI assistant. Pick your providers, choose models, and you're up and running.</p> <!> <!> <div class="welcome-actions svelte-1d9o2de"><button class="btn btn-primary btn-lg svelte-1d9o2de" id="btn-use-defaults"><!></button> <button class="btn btn-secondary svelte-1d9o2de" id="btn-step0-next">Continue</button></div></div>`);function Me(e,t){S(t,!0);function r(e,t,n){let r=e.length;return r===0?`${t} a ${n} provider`:r===1?`${t} ${e[0]} ${n}`:r===2?`${t} ${e[0]} and ${e[1]} ${n}`:r===3?`${t} ${r} ${n} providers (${e[0]}, ${e[1]} +1 more)`:`${t} ${r} ${n} providers (${e[0]}, ${e[1]} +${r-2} more)`}let o=L(()=>{let e=t.recommendation;if(!e)return null;switch(e.action){case`enable-ollama`:return{headline:`Detected ${e.gpu.name} — recommended setup will run models locally with Ollama.`,detail:`No external account or API key needed.`};case`use-host-providers`:{let t=e.hostProviders.map(e=>e.provider);return{headline:`${r(t,`Found`,`running on your computer`)} — recommended setup will use ${t.length===1?`it`:`them`}.`,detail:`You can pick which models to use on the next step.`}}case`use-cloud`:{let t=e.cloudProviders;return{headline:t.length?`${r(t,`Detected`,`connected`)} — recommended setup will use ${t.length===1?`it`:`them`}.`:`Detected a connected provider — recommended setup will use it.`,detail:`You can pick which models to use on the next step.`}}case`connect-manually`:return{headline:`No AI provider or capable GPU detected.`,detail:`You'll connect a provider on the next step.`}}}),l=L(()=>t.recommendation?.action===`connect-manually`?`Connect a provider`:`Use recommended setup`);var f=je(),p=_(s(f),6),m=e=>{var t=Ee();B(s(t),{}),w(2),j(t),A(e,t)},h=e=>{var t=De(),n=s(t),r=s(n,!0);j(n);var i=_(n,2),l=s(i,!0);j(i),j(t),a(()=>{d(r,c(o).headline),d(l,c(o).detail)}),A(e,t)};n(p,e=>{!t.recommendationFetched&&!t.recommendation?e(m):c(o)&&e(h,1)});var g=_(p,2),y=e=>{var n=Oe(),r=s(n),i=s(r,!0);j(r),j(n),a(()=>d(i,t.errorMessage)),A(e,n)};n(g,e=>{t.errorMessage&&e(y)});var b=_(g,2),x=s(b),C=s(x),T=e=>{var t=ke();B(v(t),{}),w(),A(e,t)},E=e=>{var t=Ae();B(v(t),{}),w(),A(e,t)},D=e=>{var t=u();a(()=>d(t,c(l))),A(e,t)};n(C,e=>{t.autoModeImporting?e(T):t.detectionReady?e(D,-1):e(E,1)}),j(x);var k=_(x,2);j(b),j(f),a(()=>x.disabled=!t.detectionReady||t.autoModeImporting),i(`click`,x,function(...e){t.onusedefaults?.apply(this,e)}),i(`click`,k,function(...e){t.onnext?.apply(this,e)}),A(e,f),O()}f([`click`]);var Ne=k(`<div class="host-importing-state svelte-1iuc968"><div class="loading-state"><!>&nbsp;Importing providers from host OpenCode…</div></div>`),Pe=k(`<div class="host-status-warning svelte-1iuc968" role="alert"> </div>`),Fe=k(`<div class="host-import-choice svelte-1iuc968"><p class="host-import-desc svelte-1iuc968">We found OpenCode on this host with <strong> </strong> </p> <label class="host-radio svelte-1iuc968"><input type="radio" name="provider-source" value="import" class="svelte-1iuc968"/> <span><strong>Import from host OpenCode</strong> <em>(recommended)</em></span></label> <label class="host-radio svelte-1iuc968"><input type="radio" name="provider-source" value="manual" class="svelte-1iuc968"/> <span>Configure providers manually</span></label></div>`),Ie=k(`<div class="loading-state" id="conn-detecting"><!>&nbsp;Detecting local providers...</div>`),Le=k(`<span class="vs vs-ok">✓</span>`),Re=k(`<span class="vs vs-wait">⟳</span>`),ze=k(`<span class="vs vs-err">✗</span>`),Be=k(`<div class="feedback feedback--success"><span>Connected</span> <button class="auth-disconnect" type="button">Disconnect</button></div>`),Ve=k(`<div class="feedback feedback--error"><span> </span></div>`),He=k(`<div class="auth-row" style="margin-bottom:6px"><input type="password" placeholder="API key"/> <button class="auth-btn auth-btn-verify"> </button></div>`),Ue=k(`<div class="auth-row" style="margin-bottom:6px"><button class="auth-btn auth-btn-detect" style="width:100%"> </button></div>`),We=k(`<div class="auth-row"><input type="password"/> <button class="auth-btn auth-btn-verify"> </button></div>`),Ge=k(`<div class="auth-row" style="margin-bottom:6px"><input type="url" placeholder="https://your-server.example/v1"/></div> <div class="auth-row" style="margin-bottom:6px"><input type="password" placeholder="API key (optional)"/></div> <div class="auth-row"><button class="auth-btn auth-btn-verify"> </button></div>`,1),Ke=k(`<div class="auth-row"><input type="url"/> <button> </button></div>`),qe=k(`<div style="padding:4px 0;color:var(--color-text-secondary);font-size:var(--text-xs)">No authentication required</div> <button class="auth-btn auth-btn-detect">Mark as ready</button>`,1),Je=k(`<p style="margin-bottom:6px"><a target="_blank" rel="noopener" style="color:var(--color-accent)">Open authorization page →</a></p>`),Ye=k(`<p style="margin-bottom:6px;white-space:pre-wrap;font-size:var(--text-xs)"> </p>`),Xe=k(`<div style="text-align:center;padding:8px"><!> <!> <p><!> Waiting for authorization...</p> <button class="auth-btn" style="margin-top:6px">Cancel</button></div>`),Ze=k(`<!> <!> <!>`,1),Qe=k(`<div class="pcard-auth"><!></div>`),$e=k(`<div><div class="pcard-header" role="button" tabindex="0"><div class="pcard-info"><div class="pcard-name"> <!></div> <div class="pcard-desc"> <!></div></div> <div class="pcard-check" aria-hidden="true"> </div></div> <!></div>`),et=k(`<span class="vs vs-ok">✓</span>`),tt=k(`<span class="vs vs-wait">⟳</span>`),nt=k(`<span class="vs vs-err">✗</span>`),rt=k(`<div class="feedback feedback--success"><span>Connected</span> <button class="auth-disconnect" type="button">Disconnect</button></div>`),it=k(`<div class="feedback feedback--error"><span> </span></div>`),at=k(`<div class="auth-row" style="margin-bottom:6px"><input type="password" placeholder="API key"/> <button class="auth-btn auth-btn-verify"> </button></div>`),ot=k(`<div class="auth-row" style="margin-bottom:6px"><button class="auth-btn auth-btn-detect" style="width:100%"> </button></div>`),st=k(`<div class="auth-row"><input type="password"/> <button class="auth-btn auth-btn-verify"> </button></div>`),ct=k(`<div class="auth-row" style="margin-bottom:6px"><input type="url" placeholder="https://your-server.example/v1"/></div> <div class="auth-row" style="margin-bottom:6px"><input type="password" placeholder="API key (optional)"/></div> <div class="auth-row"><button class="auth-btn auth-btn-verify"> </button></div>`,1),lt=k(`<div class="auth-row"><input type="url"/> <button> </button></div>`),$=k(`<div style="padding:4px 0;color:var(--color-text-secondary);font-size:var(--text-xs)">No authentication required</div> <button class="auth-btn auth-btn-detect">Mark as ready</button>`,1),ut=k(`<p style="margin-bottom:6px"><a target="_blank" rel="noopener" style="color:var(--color-accent)">Open authorization page →</a></p>`),dt=k(`<p style="margin-bottom:6px;white-space:pre-wrap;font-size:var(--text-xs)"> </p>`),ft=k(`<div style="text-align:center;padding:8px"><!> <!> <p><!> Waiting for authorization...</p> <button class="auth-btn" style="margin-top:6px">Cancel</button></div>`),pt=k(`<!> <!> <!>`,1),mt=k(`<div class="pcard-auth"><!></div>`),ht=k(`<div><div class="pcard-header" role="button" tabindex="0"><div class="pcard-info"><div class="pcard-name"> <!></div> <div class="pcard-desc"> <!></div></div> <div class="pcard-check" aria-hidden="true"> </div></div> <!></div>`),gt=k(`<button class="btn-show-all-providers svelte-1iuc968" id="btn-show-all-providers"> </button>`),_t=k(`<div style="text-align:center;padding:24px;color:var(--color-text-secondary)"> </div>`),vt=k(`<div class="model-filter-row" style="margin-bottom:12px"><input type="text" class="model-filter-input" id="oc-provider-filter" autocomplete="off"/></div> <!> <!> <!> <!>`,1),yt=k(`<span class="vs vs-ok">✓</span>`),bt=k(`<span class="vs vs-wait">⟳</span>`),xt=k(`<span class="vs vs-err">✗</span>`),St=k(`<div class="ollama-mode-prompt"><p>Is Ollama already running on this machine?</p> <div class="ollama-mode-buttons"><button class="ollama-mode-btn ollama-mode-btn-detect">Yes, detect it</button> <button class="ollama-mode-btn ollama-mode-btn-stack">No, add to stack</button></div></div>`),Ct=k(`<div class="auth-row"><input type="url"/> <button> </button></div>`),wt=k(`<div class="feedback feedback--success"><span>Ollama will be added to your Docker stack with default models.</span> <button class="auth-disconnect" type="button">Disconnect</button></div>`),Tt=k(`<div class="ollama-mode-prompt"><p>Ollama runs as a container in your stack with recommended models pre-configured.</p> <button class="auth-btn auth-btn-detect" style="margin-top:4px">Enable Ollama</button></div>`),Et=k(`<div class="auth-row" style="margin-top:6px"><input type="password"/></div>`),Dt=k(`<div class="auth-row"><input type="url" placeholder="https://your-server.example/v1"/></div> <!> <div class="auth-row" style="margin-top:6px"><button> </button></div>`,1),Ot=k(`<div class="auth-row"><input type="password"/> <button> </button></div>`),kt=k(`<div class="auth-row"><input type="url"/> <button> </button></div>`),At=k(`<div class="feedback feedback--success"><span>Credentials verified</span> <button class="auth-disconnect" type="button">Disconnect</button></div>`),jt=k(`<div class="feedback feedback--error"><span> </span></div>`),Mt=k(`<div class="pcard-auth"><!> <!></div>`),Nt=k(`<div><div class="pcard-header" role="button" tabindex="0"><div class="pcard-icon"> </div> <div class="pcard-info"><div class="pcard-name"> <span> </span> <!></div> <div class="pcard-desc"> </div></div> <div class="pcard-check" aria-hidden="true"> </div></div> <!></div>`),Pt=k(`<div class="provider-group"><div class="provider-group-header"><h3 class="provider-group-label"> </h3> <span class="provider-group-desc"> </span></div> <div class="provider-group-cards"></div></div>`),Ft=k(`<!> <div class="provider-grid" id="provider-grid"><!></div>`,1),It=k(`<label class="allow-empty-row svelte-1iuc968"><input type="checkbox" id="allow-empty-install" class="svelte-1iuc968"/> <span>Install without an AI provider (assistant won't be able to chat until I add one from the dashboard)</span></label>`),Lt=k(`<span class="nav-info"> </span> <button class="btn btn-primary" id="btn-step1-next">Continue</button>`,1),Rt=k(`<b> </b> `,1),zt=k(`<span class="nav-info" id="provider-count-info"><!></span> <button class="btn btn-primary" id="btn-step1-next"><!></button>`,1),Bt=k(`<h2>Where should your models run?</h2> <p class="step-description">Select one or more providers. Click a card to configure it.</p> <!> <!> <!> <!> <div class="step-actions" id="step1-actions"><button class="btn btn-secondary" id="btn-step1-back">Back</button> <!></div>`,1);function Vt(o,l){S(l,!0);function f(e,t){if(!e)return`Connection failed`;let n=ie(e,`provider-verify`,t?{providerName:t}:{});return n.hint?`${n.title}. ${n.hint}`:n.title}let h=x(l,`hostImporting`,3,!1),g=x(l,`hostProviderCount`,3,0),y=x(l,`hostStatusWarning`,3,null),b=x(l,`allowEmptyInstall`,3,!1),C=x(l,`canProceed`,3,!1),E=e(null),k=L(()=>c(E)??(g()>0?`import`:`manual`));function M(e){l.onfilterchange(e.currentTarget.value)}let P=L(()=>{let e=l.ocFilterQuery.toLowerCase().trim(),t=l.opencodeProviders;return e&&(t=t.filter(t=>t.name.toLowerCase().includes(e)||t.id.toLowerCase().includes(e))),[...t].sort((e,t)=>{let n=+!!l.providerState[e.id]?.verified,r=+!!l.providerState[t.id]?.verified;return n===r?(e.name??e.id).localeCompare(t.name??t.id):r-n})}),F=new Set([`ollama`,`huggingface`,`openai`,`google`,`model-runner`,`lmstudio`]),I=e(!1),V=L(()=>c(P).filter(e=>l.providerState[e.id]?.verified||F.has(e.id))),H=L(()=>c(P).filter(e=>!l.providerState[e.id]?.verified&&!F.has(e.id))),U=L(()=>l.ocFilterQuery?c(P):c(V)),W=L(()=>l.ocFilterQuery?0:c(H).length);var G=t(),K=v(G),ee=e=>{var t=Ne(),n=s(t);B(s(n),{}),w(),j(n),j(t),A(e,t)},J=e=>{var o=Bt(),h=_(v(o),4),x=e=>{var t=Pe(),n=s(t);j(t),a(()=>d(n,`⚠ ${y()??``}`)),A(e,t)};n(h,e=>{y()&&e(x)});var S=_(h,2),O=e=>{var t=Fe(),n=s(t),r=_(s(n)),o=s(r,!0);j(r);var l=_(r);j(n);var u=_(n,2),f=s(u);R(f),w(2),j(u);var m=_(u,2),h=s(m);R(h),w(2),j(m),j(t),a(()=>{d(o,g()),d(l,` provider${g()===1?``:`s`} configured.`),D(f,c(k)===`import`),D(h,c(k)===`manual`)}),i(`change`,f,()=>{p(E,`import`)}),i(`change`,h,()=>{p(E,`manual`)}),A(e,t)};n(S,e=>{g()>0&&e(O)});var F=_(S,2),V=e=>{var o=Ft(),h=v(o),g=e=>{var t=Ie();B(s(t),{}),w(),j(t),A(e,t)};n(h,e=>{l.detecting&&e(g)});var y=_(h,2),b=s(y),x=e=>{var o=vt(),h=v(o),g=s(h);R(g),j(h);var y=_(h,2);m(y,17,()=>c(U),r,(e,o)=>{let p=L(()=>l.providerState[c(o).id]??{selected:!1,verified:!1,verifying:!1,error:!1,apiKey:``,baseUrl:``,models:[],ollamaMode:null}),h=L(()=>c(p).models&&c(p).models.length>0?c(p).models.length:Object.keys(c(o).models??{}).length),g=L(()=>l.opencodeAuth[c(o).id]??[]),y=L(()=>l.expandedProvider===c(o).id);var b=$e(),x=s(b),S=s(x),C=s(S),E=s(C),D=_(E),O=e=>{A(e,Le())},k=e=>{A(e,Re())},M=e=>{A(e,ze())};n(D,e=>{c(p).verified?e(O):c(p).verifying?e(k,1):c(p).error&&e(M,2)}),j(C);var P=_(C,2),F=s(P),I=_(F),V=e=>{var t=u();a(()=>d(t,`· ${c(g).length??``} auth method${c(g).length===1?``:`s`}`)),A(e,t)};n(I,e=>{c(g).length>0&&e(V)}),j(P),j(S);var H=_(S,2),U=s(H,!0);j(H),j(x);var W=_(x,2),G=e=>{var u=Qe(),h=s(u),y=e=>{var t=Be(),n=_(s(t),2);j(t),i(`click`,n,e=>{e.stopPropagation(),l.ondeselect(c(o).id)}),A(e,t)},b=e=>{var u=Ze(),h=v(u),y=e=>{var t=Ve(),n=s(t),r=s(n,!0);j(n),j(t),a(e=>d(r,e),[()=>f(c(p).errorMessage,c(o).name)]),A(e,t)};n(h,e=>{c(p).error&&e(y)});var b=_(h,2),x=e=>{var u=t();m(v(u),17,()=>c(g),r,(e,r,u)=>{var f=t(),m=v(f),h=e=>{var t=He(),n=s(t);R(n);var u=_(n,2),f=s(u,!0);j(u),j(t),a(()=>{N(n,c(p).apiKey??``),u.disabled=c(p).verifying,d(f,c(p).verifying?`Connecting...`:c(r).label)}),i(`input`,n,e=>{e.stopPropagation(),l.onapikey(c(o).id,e.currentTarget.value)}),i(`click`,n,e=>e.stopPropagation()),i(`click`,u,e=>{e.stopPropagation(),l.onverify(c(o).id)}),A(e,t)},g=e=>{var t=Ue(),n=s(t),f=s(n,!0);j(n),j(t),a(()=>{n.disabled=c(p).verifying,d(f,c(p).verifying?`Waiting...`:c(r).label)}),i(`click`,n,e=>{e.stopPropagation(),l.onoauthstart(c(o).id,u)}),A(e,t)};n(m,e=>{c(r).type===`api`?e(h):c(r).type===`oauth`&&e(g,1)}),A(e,f)}),A(e,u)},S=e=>{var t=We(),n=s(t);R(n);var r=_(n,2),u=s(r,!0);j(r),j(t),a(()=>{T(n,`placeholder`,(c(o).env??[])[0]),N(n,c(p).apiKey??``),r.disabled=c(p).verifying,d(u,c(p).verifying?`Connecting...`:`Connect`)}),i(`input`,n,e=>{e.stopPropagation(),l.onapikey(c(o).id,e.currentTarget.value)}),i(`click`,n,e=>e.stopPropagation()),i(`click`,r,e=>{e.stopPropagation(),l.onverify(c(o).id)}),A(e,t)},C=e=>{var t=Ge(),n=v(t),r=s(n);R(r),j(n);var u=_(n,2),f=s(u);R(f),j(u);var m=_(u,2),h=s(m),g=s(h,!0);j(h),j(m),a(()=>{N(r,c(p).baseUrl??``),N(f,c(p).apiKey??``),h.disabled=c(p).verifying,d(g,c(p).verifying?`Checking...`:`Connect`)}),i(`input`,r,e=>{e.stopPropagation(),l.onbaseurl(c(o).id,e.currentTarget.value)}),i(`click`,r,e=>e.stopPropagation()),i(`input`,f,e=>{e.stopPropagation(),l.onapikey(c(o).id,e.currentTarget.value)}),i(`click`,f,e=>e.stopPropagation()),i(`click`,h,e=>{e.stopPropagation(),l.onverify(c(o).id)}),A(e,t)},E=e=>{var t=Ke(),n=s(t);R(n);var r=_(n,2),u=s(r,!0);j(r),j(t),a(()=>{T(n,`placeholder`,c(o).localUrl),N(n,c(p).baseUrl||c(o).localUrl),z(r,1,`auth-btn ${c(p).verified?`auth-btn-detected`:`auth-btn-detect`}`),r.disabled=c(p).verifying,d(u,c(p).verifying?`Detecting...`:c(p).verified?`Connected ✓`:`Detect`)}),i(`input`,n,e=>{e.stopPropagation(),l.onbaseurl(c(o).id,e.currentTarget.value)}),i(`click`,n,e=>e.stopPropagation()),i(`click`,r,e=>{e.stopPropagation(),l.onverify(c(o).id)}),A(e,t)},D=e=>{var t=qe();i(`click`,_(v(t),2),e=>{e.stopPropagation(),l.onmarkready(c(o).id)}),A(e,t)};n(b,e=>{c(g).length>0?e(x):(c(o).env??[]).length>0?e(S,1):c(o).id===`openai-compatible`?e(C,2):c(o).localUrl?e(E,3):e(D,-1)});var O=_(b,2),k=e=>{var t=Xe(),r=s(t),u=e=>{var t=Je(),n=s(t);j(t),a(()=>T(n,`href`,c(p).oauthUrl)),A(e,t)};n(r,e=>{c(p).oauthUrl&&e(u)});var f=_(r,2),m=e=>{var t=Ye(),n=s(t,!0);j(t),a(()=>d(n,c(p).oauthInstructions)),A(e,t)};n(f,e=>{c(p).oauthInstructions&&e(m)});var h=_(f,2);B(s(h),{}),w(),j(h);var g=_(h,2);j(t),i(`click`,g,e=>{e.stopPropagation(),l.onoauthcancel(c(o).id)}),A(e,t)};n(O,e=>{c(p).oauthPolling&&e(k)}),A(e,u)};n(h,e=>{c(p).verified?e(y):e(b,-1)}),j(u),A(e,u)};n(W,e=>{c(y)&&e(G)}),j(b),a(()=>{z(b,1,`pcard ${c(p).verified?`selected verified`:c(y)?`selected`:``} ${c(y)?`wide`:``}`),T(b,`data-provider`,c(o).id),d(E,`${c(o).name??``} `),d(F,`${c(h)??``} model${c(h)===1?``:`s`} `),d(U,c(p).verified?`✓`:``)}),i(`click`,x,()=>l.ontoggleopencode(c(o).id)),i(`keydown`,x,e=>{(e.key===`Enter`||e.key===` `)&&l.ontoggleopencode(c(o).id)}),A(e,b)});var b=_(y,2),x=e=>{var o=t();m(v(o),17,()=>c(H),r,(e,o)=>{let p=L(()=>l.providerState[c(o).id]??{selected:!1,verified:!1,verifying:!1,error:!1,apiKey:``,baseUrl:``,models:[],ollamaMode:null}),h=L(()=>c(p).models&&c(p).models.length>0?c(p).models.length:Object.keys(c(o).models??{}).length),g=L(()=>l.opencodeAuth[c(o).id]??[]),y=L(()=>l.expandedProvider===c(o).id);var b=ht(),x=s(b),S=s(x),C=s(S),E=s(C),D=_(E),O=e=>{A(e,et())},k=e=>{A(e,tt())},M=e=>{A(e,nt())};n(D,e=>{c(p).verified?e(O):c(p).verifying?e(k,1):c(p).error&&e(M,2)}),j(C);var P=_(C,2),F=s(P),I=_(F),V=e=>{var t=u();a(()=>d(t,`· ${c(g).length??``} auth method${c(g).length===1?``:`s`}`)),A(e,t)};n(I,e=>{c(g).length>0&&e(V)}),j(P),j(S);var H=_(S,2),U=s(H,!0);j(H),j(x);var W=_(x,2),G=e=>{var u=mt(),h=s(u),y=e=>{var t=rt(),n=_(s(t),2);j(t),i(`click`,n,e=>{e.stopPropagation(),l.ondeselect(c(o).id)}),A(e,t)},b=e=>{var u=pt(),h=v(u),y=e=>{var t=it(),n=s(t),r=s(n,!0);j(n),j(t),a(e=>d(r,e),[()=>f(c(p).errorMessage,c(o).name)]),A(e,t)};n(h,e=>{c(p).error&&e(y)});var b=_(h,2),x=e=>{var u=t();m(v(u),17,()=>c(g),r,(e,r,u)=>{var f=t(),m=v(f),h=e=>{var t=at(),n=s(t);R(n);var u=_(n,2),f=s(u,!0);j(u),j(t),a(()=>{N(n,c(p).apiKey??``),u.disabled=c(p).verifying,d(f,c(p).verifying?`Connecting...`:c(r).label)}),i(`input`,n,e=>{e.stopPropagation(),l.onapikey(c(o).id,e.currentTarget.value)}),i(`click`,n,e=>e.stopPropagation()),i(`click`,u,e=>{e.stopPropagation(),l.onverify(c(o).id)}),A(e,t)},g=e=>{var t=ot(),n=s(t),f=s(n,!0);j(n),j(t),a(()=>{n.disabled=c(p).verifying,d(f,c(p).verifying?`Waiting...`:c(r).label)}),i(`click`,n,e=>{e.stopPropagation(),l.onoauthstart(c(o).id,u)}),A(e,t)};n(m,e=>{c(r).type===`api`?e(h):c(r).type===`oauth`&&e(g,1)}),A(e,f)}),A(e,u)},S=e=>{var t=st(),n=s(t);R(n);var r=_(n,2),u=s(r,!0);j(r),j(t),a(()=>{T(n,`placeholder`,(c(o).env??[])[0]),N(n,c(p).apiKey??``),r.disabled=c(p).verifying,d(u,c(p).verifying?`Connecting...`:`Connect`)}),i(`input`,n,e=>{e.stopPropagation(),l.onapikey(c(o).id,e.currentTarget.value)}),i(`click`,n,e=>e.stopPropagation()),i(`click`,r,e=>{e.stopPropagation(),l.onverify(c(o).id)}),A(e,t)},C=e=>{var t=ct(),n=v(t),r=s(n);R(r),j(n);var u=_(n,2),f=s(u);R(f),j(u);var m=_(u,2),h=s(m),g=s(h,!0);j(h),j(m),a(()=>{N(r,c(p).baseUrl??``),N(f,c(p).apiKey??``),h.disabled=c(p).verifying,d(g,c(p).verifying?`Checking...`:`Connect`)}),i(`input`,r,e=>{e.stopPropagation(),l.onbaseurl(c(o).id,e.currentTarget.value)}),i(`click`,r,e=>e.stopPropagation()),i(`input`,f,e=>{e.stopPropagation(),l.onapikey(c(o).id,e.currentTarget.value)}),i(`click`,f,e=>e.stopPropagation()),i(`click`,h,e=>{e.stopPropagation(),l.onverify(c(o).id)}),A(e,t)},E=e=>{var t=lt(),n=s(t);R(n);var r=_(n,2),u=s(r,!0);j(r),j(t),a(()=>{T(n,`placeholder`,c(o).localUrl),N(n,c(p).baseUrl||c(o).localUrl),z(r,1,`auth-btn ${c(p).verified?`auth-btn-detected`:`auth-btn-detect`}`),r.disabled=c(p).verifying,d(u,c(p).verifying?`Detecting...`:c(p).verified?`Connected ✓`:`Detect`)}),i(`input`,n,e=>{e.stopPropagation(),l.onbaseurl(c(o).id,e.currentTarget.value)}),i(`click`,n,e=>e.stopPropagation()),i(`click`,r,e=>{e.stopPropagation(),l.onverify(c(o).id)}),A(e,t)},D=e=>{var t=$();i(`click`,_(v(t),2),e=>{e.stopPropagation(),l.onmarkready(c(o).id)}),A(e,t)};n(b,e=>{c(g).length>0?e(x):(c(o).env??[]).length>0?e(S,1):c(o).id===`openai-compatible`?e(C,2):c(o).localUrl?e(E,3):e(D,-1)});var O=_(b,2),k=e=>{var t=ft(),r=s(t),u=e=>{var t=ut(),n=s(t);j(t),a(()=>T(n,`href`,c(p).oauthUrl)),A(e,t)};n(r,e=>{c(p).oauthUrl&&e(u)});var f=_(r,2),m=e=>{var t=dt(),n=s(t,!0);j(t),a(()=>d(n,c(p).oauthInstructions)),A(e,t)};n(f,e=>{c(p).oauthInstructions&&e(m)});var h=_(f,2);B(s(h),{}),w(),j(h);var g=_(h,2);j(t),i(`click`,g,e=>{e.stopPropagation(),l.onoauthcancel(c(o).id)}),A(e,t)};n(O,e=>{c(p).oauthPolling&&e(k)}),A(e,u)};n(h,e=>{c(p).verified?e(y):e(b,-1)}),j(u),A(e,u)};n(W,e=>{c(y)&&e(G)}),j(b),a(()=>{z(b,1,`pcard ${c(p).verified?`selected verified`:c(y)?`selected`:``} ${c(y)?`wide`:``}`),T(b,`data-provider`,c(o).id),d(E,`${c(o).name??``} `),d(F,`${c(h)??``} model${c(h)===1?``:`s`} `),d(U,c(p).verified?`✓`:``)}),i(`click`,x,()=>l.ontoggleopencode(c(o).id)),i(`keydown`,x,e=>{(e.key===`Enter`||e.key===` `)&&l.ontoggleopencode(c(o).id)}),A(e,b)}),A(e,o)};n(b,e=>{c(I)&&e(x)});var S=_(b,2),C=e=>{var t=gt(),n=s(t,!0);j(t),a(()=>d(n,c(I)?`Show fewer providers`:`Show all providers (${c(W)} more)`)),i(`click`,t,()=>p(I,!c(I))),A(e,t)};n(S,e=>{c(W)>0&&!l.ocFilterQuery&&e(C)});var E=_(S,2),D=e=>{var t=_t(),n=s(t);j(t),a(()=>d(n,`No providers match "${l.ocFilterQuery??``}"`)),A(e,t)};n(E,e=>{c(P).length===0&&l.ocFilterQuery&&e(D)}),a(()=>{T(g,`placeholder`,`Search ${l.opencodeProviders.length??``} providers…`),N(g,l.ocFilterQuery)}),i(`input`,g,M),A(e,o)},S=e=>{var o=t();m(v(o),17,()=>te,r,(e,o)=>{let u=L(()=>q.filter(e=>e.group===c(o).id).sort((e,t)=>e.order-t.order));var p=t(),h=v(p),g=e=>{var p=Pt(),h=s(p),g=s(h),y=s(g,!0);j(g);var b=_(g,2),x=s(b,!0);j(b),j(h);var S=_(h,2);m(S,21,()=>c(u),r,(e,r)=>{let o=L(()=>l.providerState[c(r).id]??{selected:!1,verified:!1,verifying:!1,error:!1,apiKey:``,baseUrl:``,models:[],ollamaMode:null}),u=L(()=>l.expandedProvider===c(r).id&&c(o).selected),p=L(()=>c(r).kind===`cloud`?`badge-neutral`:c(r).kind===`local`?`badge-success`:`badge-recommended`);var m=Nt(),h=s(m),g=s(h),y=s(g,!0);j(g);var b=_(g,2),x=s(b),S=s(x),C=_(S),w=s(C,!0);j(C);var E=_(C,2),D=e=>{A(e,yt())},O=e=>{A(e,bt())},k=e=>{A(e,xt())};n(E,e=>{c(o).verified?e(D):c(o).verifying?e(O,1):c(o).error&&e(k,2)}),j(x);var M=_(x,2),P=s(M,!0);j(M),j(b);var F=_(b,2),I=s(F,!0);j(F),j(h);var B=_(h,2),V=e=>{var u=Mt(),p=s(u),m=e=>{var u=t(),f=v(u),p=e=>{var t=St(),n=_(s(t),2),r=s(n),a=_(r,2);j(n),j(t),i(`click`,r,e=>{e.stopPropagation(),l.onollamamode(`running`)}),i(`click`,a,e=>{e.stopPropagation(),l.onollamamode(`instack`)}),A(e,t)},m=e=>{var t=Ct(),n=s(t);R(n);var u=_(n,2),f=s(u,!0);j(u),j(t),a(()=>{T(n,`placeholder`,c(r).baseUrl),N(n,c(o).baseUrl||c(r).baseUrl),z(u,1,`auth-btn ${c(o).verified?`auth-btn-detected`:`auth-btn-detect`}`),u.disabled=c(o).verifying,d(f,c(o).verifying?`Detecting...`:c(o).verified?`Connected ✓`:`Detect`)}),i(`input`,n,e=>{e.stopPropagation(),l.onbaseurl(c(r).id,e.currentTarget.value)}),i(`click`,n,e=>e.stopPropagation()),i(`click`,u,e=>{e.stopPropagation(),l.onverify(c(r).id)}),A(e,t)},h=e=>{var a=t(),u=v(a),d=e=>{var t=wt(),n=_(s(t),2);j(t),i(`click`,n,e=>{e.stopPropagation(),l.ondeselect(c(r).id)}),A(e,t)},f=e=>{var t=Tt(),n=_(s(t),2);j(t),i(`click`,n,e=>{e.stopPropagation(),l.onverify(c(r).id)}),A(e,t)};n(u,e=>{c(o).verified?e(d):e(f,-1)}),A(e,a)};n(f,e=>{c(o).ollamaMode?c(o).ollamaMode===`running`?e(m,1):e(h,-1):e(p)}),A(e,u)},h=e=>{var t=Dt(),u=v(t),f=s(u);R(f),j(u);var p=_(u,2),m=e=>{var t=Et(),n=s(t);R(n),j(t),a(()=>{T(n,`placeholder`,c(r).placeholder||`API key (optional)`),N(n,c(o).apiKey)}),i(`input`,n,e=>{e.stopPropagation(),l.onapikey(c(r).id,e.currentTarget.value)}),i(`click`,n,e=>e.stopPropagation()),A(e,t)};n(p,e=>{c(r).optionalKey&&e(m)});var h=_(p,2),g=s(h),y=s(g,!0);j(g),j(h),a(()=>{N(f,c(o).baseUrl||``),z(g,1,`auth-btn ${c(o).verified?`auth-btn-verified`:`auth-btn-verify`}`),g.disabled=c(o).verifying,d(y,c(o).verifying?`Checking...`:c(o).verified?`Connected ✓`:`Connect`)}),i(`input`,f,e=>{e.stopPropagation(),l.onbaseurl(c(r).id,e.currentTarget.value)}),i(`click`,f,e=>e.stopPropagation()),i(`click`,g,e=>{e.stopPropagation(),l.onverify(c(r).id)}),A(e,t)},g=e=>{var t=Ot(),n=s(t);R(n);var u=_(n,2),f=s(u,!0);j(u),j(t),a(()=>{T(n,`placeholder`,c(r).placeholder||`API key`),N(n,c(o).apiKey),z(u,1,`auth-btn ${c(o).verified?`auth-btn-verified`:`auth-btn-verify`}`),u.disabled=c(o).verifying,d(f,c(o).verifying?`Checking...`:c(o).verified?`Verified ✓`:`Verify`)}),i(`input`,n,e=>{e.stopPropagation(),l.onapikey(c(r).id,e.currentTarget.value)}),i(`click`,n,e=>e.stopPropagation()),i(`click`,u,e=>{e.stopPropagation(),l.onverify(c(r).id)}),A(e,t)},y=e=>{var t=kt(),n=s(t);R(n);var u=_(n,2),f=s(u,!0);j(u),j(t),a(()=>{T(n,`placeholder`,c(r).baseUrl||`http://localhost:8080`),N(n,c(o).baseUrl||c(r).baseUrl||``),z(u,1,`auth-btn ${c(o).verified?`auth-btn-detected`:`auth-btn-detect`}`),u.disabled=c(o).verifying,d(f,c(o).verifying?`Detecting...`:c(o).verified?`Connected ✓`:`Detect`)}),i(`input`,n,e=>{e.stopPropagation(),l.onbaseurl(c(r).id,e.currentTarget.value)}),i(`click`,n,e=>e.stopPropagation()),i(`click`,u,e=>{e.stopPropagation(),l.onverify(c(r).id)}),A(e,t)};n(p,e=>{c(r).id===`ollama`?e(m):c(r).needsUrl?e(h,1):c(r).needsKey?e(g,2):e(y,-1)});var b=_(p,2),x=e=>{var t=At(),n=_(s(t),2);j(t),i(`click`,n,e=>{e.stopPropagation(),l.ondeselect(c(r).id)}),A(e,t)},S=e=>{var t=jt(),n=s(t),i=s(n,!0);j(n),j(t),a(e=>d(i,e),[()=>f(c(o).errorMessage,c(r).name)||`Verification failed — check your `+(c(r).needsKey?`credentials`:`endpoint`)]),A(e,t)};n(b,e=>{c(o).verified&&c(r).id!==`ollama`?e(x):c(o).error&&e(S,1)}),j(u),A(e,u)};n(B,e=>{c(u)&&e(V)}),j(m),a(()=>{z(m,1,`pcard ${c(o).selected?`selected`:``} ${c(o).verified?`verified`:``} ${c(u)?`wide`:``}`),T(m,`data-provider`,c(r).id),T(h,`data-toggle-provider`,c(r).id),d(y,c(r).icon),d(S,`${c(r).name??``} `),z(C,1,`badge ${c(p)??``}`,`svelte-1iuc968`),d(w,c(r).kind),d(P,c(r).desc),d(I,c(o).selected?`✓`:``)}),i(`click`,h,()=>l.ontogglefallback(c(r).id)),i(`keydown`,h,e=>{(e.key===`Enter`||e.key===` `)&&l.ontogglefallback(c(r).id)}),A(e,m)}),j(S),j(p),a(()=>{d(y,c(o).label),d(x,c(o).desc)}),A(e,p)};n(h,e=>{c(u).length>0&&e(g)}),A(e,p)}),A(e,o)};n(b,e=>{l.opencodeAvailable?e(x):e(S,-1)}),j(y),A(e,o)};n(F,e=>{(!g()||c(k)===`manual`)&&e(V)});var G=_(F,2),K=e=>{var t=It(),n=s(t);R(n),w(2),j(t),a(()=>D(n,b())),i(`change`,n,e=>l.onallowemptyinstallchange?.(e.currentTarget.checked)),A(e,t)};n(G,e=>{l.verifiedCount===0&&(!g()||c(k)===`manual`)&&e(K)});var ee=_(G,2),J=s(ee),ne=_(J,2),Y=e=>{var t=Lt(),n=v(t),r=s(n);j(n);var o=_(n,2);a(()=>d(r,`Import ${g()??``} provider${g()===1?``:`s`} from host`)),i(`click`,o,function(...e){l.onhostimport?.apply(this,e)}),A(e,t)},re=e=>{var t=zt(),r=v(t),o=s(r),c=e=>{var t=Rt(),n=v(t),r=s(n,!0);j(n);var i=_(n);a(()=>{d(r,l.verifiedCount),d(i,` provider${l.verifiedCount>1?`s`:``} ready`)}),A(e,t)},f=e=>{A(e,u(`Installing without an AI provider`))},p=e=>{A(e,u(`Connect a provider to continue`))};n(o,e=>{l.verifiedCount>0?e(c):b()?e(f,1):e(p,-1)}),j(r);var m=_(r,2),h=s(m),g=e=>{A(e,u(`Choose Models`))},y=e=>{A(e,u(`Install without AI`))},x=e=>{A(e,u(`Choose Models`))};n(h,e=>{l.verifiedCount>0?e(g):b()?e(y,1):e(x,-1)}),j(m),a(()=>m.disabled=!C()),i(`click`,m,function(...e){l.onnext?.apply(this,e)}),A(e,t)};n(ne,e=>{c(k)===`import`&&g()>0?e(Y):e(re,-1)}),j(ee),i(`click`,J,function(...e){l.onback?.apply(this,e)}),A(e,o)};n(K,e=>{h()?e(ee):e(J,-1)}),A(o,G),O()}f([`change`,`input`,`click`,`keydown`]);var Ht=k(`<div class="feedback feedback--warning" style="margin-bottom:16px" role="status"><span>Installing without an AI provider — the assistant won't be able to chat until you add one from the dashboard. No model selection is needed.</span></div>`),Ut=k(`<div class="feedback feedback--error" style="margin-bottom:16px" role="alert"><span>Connect a provider on the previous step to choose a chat model.</span></div>`),Wt=k(`<span style="flex:1;font-size:var(--text-xs);color:var(--color-text-secondary);margin-left:8px"> </span> <span style="font-size:var(--text-xs);color:var(--color-text-secondary)">▶</span>`,1),Gt=k(`<span style="margin-left:auto;font-size:var(--text-xs);color:var(--color-text-secondary)">▼</span>`),Kt=k(`<div class="model-auto-note">Handled automatically — uses built-in local embeddings. No model needed.</div>`),qt=k(`<div role="button" tabindex="0"><div class="model-opt-dot"><div class="model-opt-dot-inner"></div></div> <div style="flex:1"><div class="model-opt-name">(same as chat model)</div> <div class="model-opt-meta">No separate small model</div></div> <span class="model-opt-badge model-opt-badge-auto">Default</span></div>`),Jt=k(`<div class="model-filter-row"><input type="text" class="model-filter-input" autocomplete="off"/></div>`),Yt=k(`<span class="model-opt-badge model-opt-badge-top">Top Pick</span>`),Xt=k(`<div role="button" tabindex="0"><div class="model-opt-dot"><div class="model-opt-dot-inner"></div></div> <div style="flex:1;min-width:0"><div class="model-opt-name"> </div> <div class="model-opt-meta"> </div></div> <!></div>`),Zt=k(`<div class="model-group-desc"> </div> <!> <!> <!> <!>`,1),Qt=k(`<div class="model-group"><div class="model-group-header" role="button" tabindex="0" style="cursor:pointer;user-select:none"><span class="model-group-title"> </span> <span> </span> <!></div> <!></div>`),$t=k(`<div class="feedback feedback--error" id="step2-error" role="alert"><span> </span></div>`),en=k(`<h2>Choose Your Models</h2> <p class="step-description">Pre-selected from your providers. Adjust if needed.</p> <!> <div id="model-groups"></div> <input type="hidden" id="llm-connection"/> <input type="hidden" id="llm-model"/> <input type="hidden" id="llm-small-model"/> <input type="hidden" id="emb-connection"/> <input type="hidden" id="emb-model"/> <input type="hidden" id="emb-dims"/> <!> <div class="step-actions"><button class="btn btn-secondary" id="btn-step2-back">Back</button> <button class="btn btn-primary" id="btn-step2-next"><!></button></div>`,1);function tn(o,l){S(l,!0);let f=x(l,`allowEmptyInstall`,3,!1),h=x(l,`canComplete`,3,!1),g=[{id:`llm`,label:`Chat Model`,tag:`required`,desc:`Conversations, reasoning, and code`},{id:`embedding`,label:`Memory Model`,tag:`optional`,desc:`Helps the assistant remember past conversations. Optional.`},{id:`small`,label:`Small Model`,tag:`optional`,desc:`Lightweight tasks like summarization`}],b=y({}),C=e(y(new Set));function E(e){c(C).has(e)?c(C).delete(e):c(C).add(e),p(C,new Set(c(C)),!0)}function D(e){let t=[];for(let n of l.verifiedProviders){let r=l.providerState[n.id],i=e.id===`embedding`?n.embModel:n.llmModel,a=r.models.length>0?r.models:[];i&&a.includes(i)&&t.push({id:i,connId:n.id,providerName:n.name,baseUrl:r.baseUrl||n.baseUrl,isDefault:!0,dims:e.id===`embedding`?W[i]??W[i.replace(/:.*$/,``)]??n.embDims??0:0});for(let o of a){if(o===i)continue;let a=e.id===`embedding`?W[o]??W[o.replace(/:.*$/,``)]??0:0;t.push({id:o,connId:n.id,providerName:n.name,baseUrl:r.baseUrl||n.baseUrl,isDefault:!1,dims:a})}}if(e.id===`embedding`)return t.filter(e=>e.isDefault||e.dims>0);if(e.id===`small`&&t.length===0){let e=l.verifiedProviders[0];if(e)for(let n of l.providerState[e.id].models)t.push({id:n,connId:e.id,providerName:e.name,baseUrl:l.providerState[e.id].baseUrl||e.baseUrl,isDefault:!1,dims:0})}return t}function k(e,t){let n=(b[e.id]??``).toLowerCase().trim();return n?t.filter(e=>e.id.toLowerCase().includes(n)||e.providerName.toLowerCase().includes(n)):t}function M(e,t,n,r){l.onselect(e,t,n,r),c(C).add(e),p(C,new Set(c(C)),!0)}var P=en(),F=_(v(P),4),I=e=>{var r=t(),i=v(r),a=e=>{A(e,Ht())},o=e=>{A(e,Ut())};n(i,e=>{f()?e(a):e(o,-1)}),A(e,r)};n(F,e=>{l.verifiedProviders.length===0&&e(I)});var B=_(F,2);m(B,21,()=>g,r,(e,o)=>{let u=L(()=>D(c(o))),f=L(()=>c(o).id===`embedding`&&c(u).length===0);var p=t(),h=v(p),g=e=>{let t=L(()=>c(u).length>6),p=L(()=>b[c(o).id]??``),h=L(()=>k(c(o),c(u)));var g=Qt(),y=s(g),x=s(y),S=s(x,!0);j(x);var D=_(x,2),O=s(D,!0);j(D);var P=_(D,2),F=e=>{let t=L(()=>l.modelSelection[c(o).id]);var n=Wt(),r=v(n),i=s(r,!0);j(r),w(2),a(()=>d(i,c(f)&&!c(t)?.model?`Automatic`:c(t)?.model??`(none)`)),A(e,n)},I=L(()=>c(C).has(c(o).id)),B=e=>{A(e,Gt())};n(P,e=>{c(I)?e(F):e(B,-1)}),j(y);var V=_(y,2),H=e=>{var g=Zt(),y=v(g),x=s(y,!0);j(y);var S=_(y,2),C=e=>{A(e,Kt())};n(S,e=>{c(f)&&e(C)});var w=_(S,2),E=e=>{let t=L(()=>!l.modelSelection.small?.model);var n=qt();a(()=>z(n,1,`model-opt ${c(t)?`on`:``}`)),i(`click`,n,()=>l.onselectnone(`small`)),i(`keydown`,n,e=>{(e.key===`Enter`||e.key===` `)&&l.onselectnone(`small`)}),A(e,n)};n(w,e=>{c(o).id===`small`&&e(E)});var D=_(w,2),O=e=>{var t=Jt(),n=s(t);R(n),j(t),a(()=>{T(n,`placeholder`,`Search ${c(u).length??``} models…`),N(n,c(p))}),i(`input`,n,e=>{b[c(o).id]=e.currentTarget.value}),A(e,t)};n(D,e=>{c(u).length>3&&e(O)}),m(_(D,2),17,()=>c(p)?c(h):c(u),r,(e,r,f)=>{let m=L(()=>c(u).findIndex(e=>e.isDefault)),h=L(()=>l.modelSelection[c(o).id]),g=L(()=>!!c(h)&&c(h).model===c(r).id&&c(h).connId===c(r).connId),v=L(()=>!c(p)&&c(t)&&f>=6&&!c(g)),y=L(()=>`via `+c(r).providerName+(c(r).dims>0?` · `+c(r).dims+`d`:``));var b=Xt(),x=_(s(b),2),S=s(x),C=s(S,!0);j(S);var w=_(S,2),E=s(w,!0);j(w),j(x);var D=_(x,2),O=e=>{A(e,Yt())};n(D,e=>{f===c(m)&&c(r).isDefault&&e(O)}),j(b),a(e=>{z(b,1,`model-opt ${c(g)?`on`:``} ${c(v)?`model-opt-filtered`:``}`),T(b,`data-model-select`,`${c(o).id??``}:${c(r).connId??``}:${c(r).id??``}:${c(r).dims??``}`),T(b,`data-model-name`,e),d(C,c(r).id),d(E,c(y))},[()=>c(r).id.toLowerCase()]),i(`click`,b,()=>M(c(o).id,c(r).connId,c(r).id,c(r).dims)),i(`keydown`,b,e=>{(e.key===`Enter`||e.key===` `)&&M(c(o).id,c(r).connId,c(r).id,c(r).dims)}),A(e,b)}),a(()=>d(x,c(o).desc)),A(e,g)},U=L(()=>!c(C).has(c(o).id));n(V,e=>{c(U)&&e(H)}),j(g),a(()=>{d(S,c(o).label),z(D,1,`model-group-tag ${c(o).tag===`required`?`model-group-tag-required`:`model-group-tag-optional`}`),d(O,c(o).tag)}),i(`click`,y,()=>E(c(o).id)),i(`keydown`,y,e=>{(e.key===`Enter`||e.key===` `)&&E(c(o).id)}),A(e,g)};n(h,e=>{(c(u).length>0||c(o).id===`small`||c(f))&&e(g)}),A(e,p)}),j(B);var V=_(B,2);R(V);var H=_(V,2);R(H);var U=_(H,2);R(U);var G=_(U,2);R(G);var K=_(G,2);R(K);var q=_(K,2);R(q);var ee=_(q,2),te=e=>{var t=$t(),n=s(t),r=s(n,!0);j(n),j(t),a(()=>d(r,l.errorMessage)),A(e,t)};n(ee,e=>{l.errorMessage&&e(te)});var J=_(ee,2),ne=s(J),Y=_(ne,2),re=s(Y),ie=e=>{A(e,u(`Skip for now`))},ae=e=>{A(e,u(`Voice Setup`))};n(re,e=>{l.verifiedProviders.length===0&&f()?e(ie):e(ae,-1)}),j(Y),j(J),a(e=>{N(V,l.modelSelection.llm?.connId??``),N(H,l.modelSelection.llm?.model??``),N(U,l.modelSelection.small?.model??``),N(G,l.modelSelection.embedding?.connId??``),N(K,l.modelSelection.embedding?.model??``),N(q,e),Y.disabled=!h()},[()=>String(l.modelSelection.embedding?.dims??1536)]),i(`click`,ne,function(...e){l.onback?.apply(this,e)}),i(`click`,Y,function(...e){l.onnext?.apply(this,e)}),A(o,P),O()}f([`click`,`keydown`,`input`]);var nn=k(`<div class="voice-unknown svelte-jxtfqg" role="alert">Your previous voice settings couldn't be loaded. Please pick an engine.</div>`),rn=k(`<div class="voice-download-notice svelte-jxtfqg" role="note"><strong class="svelte-jxtfqg">First install will download the OpenPalm Voice image.</strong> <ul class="svelte-jxtfqg"><li>CPU build: ~2.4 GB (5–15 min on a typical home connection)</li> <li>CUDA build: ~7.6 GB (15–45 min — chosen later from the admin tab)</li></ul> The wizard's final Install step will show a progress indicator and
2
- wait for the download to finish before completing.</div>`),an=k(`<div class="voice-summary-row svelte-jxtfqg"><span class="voice-summary-label svelte-jxtfqg">Voice Container</span> <span class="voice-summary-value svelte-jxtfqg"> </span></div>`),on=k(`<p class="voice-profile-inline-loading svelte-jxtfqg">Checking available hardware profiles…</p>`),sn=k(`<div class="voice-profile-inline svelte-jxtfqg"><div class="voice-profile-inline-title svelte-jxtfqg">Voice container profile</div> <!></div>`),cn=k(`<p class="voice-hint svelte-jxtfqg">OpenAI is available. You can use OpenAI TTS/STT or keep browser voice.</p>`),ln=k(`<p class="voice-hint svelte-jxtfqg">Kokoro and Whisper give higher quality. Browser voice works without extra setup.</p>`),un=k(`<h2>Voice Capabilities</h2> <p class="step-description">Browser voice is ready out of the box — no setup needed.</p> <!> <!> <div id="voice-summary" class="voice-summary svelte-jxtfqg"><div class="voice-summary-row svelte-jxtfqg"><span class="voice-summary-label svelte-jxtfqg">Text-to-Speech</span> <span class="voice-summary-value svelte-jxtfqg"> </span></div> <div class="voice-summary-row svelte-jxtfqg"><span class="voice-summary-label svelte-jxtfqg">Speech-to-Text</span> <span class="voice-summary-value svelte-jxtfqg"> </span></div> <!></div> <!> <details id="voice-configure-details" class="svelte-jxtfqg"><summary class="voice-configure-summary svelte-jxtfqg" id="voice-configure-toggle">Configure voice…</summary> <div id="voice-groups" style="margin-top:12px"><!> <div class="model-group"><div class="model-group-header"><span class="model-group-title">Text-to-Speech</span> <span class="model-group-tag model-group-tag-optional">Optional</span></div> <div class="model-group-desc">How your assistant speaks</div> <!></div> <div class="model-group"><div class="model-group-header"><span class="model-group-title">Speech-to-Text</span> <span class="model-group-tag model-group-tag-optional">Optional</span></div> <div class="model-group-desc">How your assistant hears you</div> <!></div></div></details> <div class="step-actions"><button class="btn btn-secondary" id="btn-step3-back">Back</button> <button class="btn btn-primary" id="btn-step3-next">Continue</button></div>`,1);function dn(t,r){S(r,!0);let o=x(r,`unknownTts`,3,!1),l=x(r,`unknownStt`,3,!1),u=x(r,`profiles`,19,()=>[]),f=x(r,`selectedVoiceProfile`,3,``),m=e(!1),h=L(()=>ne.find(e=>e.id===r.tts.engine)?.name??`Browser Built-in`),g=L(()=>G.find(e=>e.id===r.stt.engine)?.name??`Browser Built-in`),y=L(()=>r.tts.engine===`openpalm-voice`||r.stt.engine===`openpalm-voice`),b=L(()=>{if(!f())return``;let e=u().find(e=>e.id===f());return e?.label??e?.id??f()});var C=un(),w=_(v(C),4),T=e=>{A(e,nn())};n(w,e=>{(o()||l())&&e(T)});var E=_(w,2),D=e=>{A(e,rn())};n(E,e=>{c(y)&&e(D)});var k=_(E,2),N=s(k),P=_(s(N),2),F=s(P,!0);j(P),j(N);var I=_(N,2),R=_(s(I),2),z=s(R,!0);j(R),j(I);var B=_(I,2),V=e=>{var t=an(),n=_(s(t),2),r=s(n,!0);j(n),j(t),a(()=>d(r,c(b))),A(e,t)};n(B,e=>{c(y)&&c(b)&&e(V)}),j(k);var H=_(k,2),U=e=>{var t=sn(),i=_(s(t),2),a=e=>{J(e,{get profiles(){return u()},get selectedProfile(){return f()},get onchange(){return r.onprofilechange},showDescription:!1})},o=e=>{A(e,on())};n(i,e=>{u().length>0&&r.onprofilechange?e(a):e(o,-1)}),j(t),A(e,t)};n(H,e=>{c(y)&&e(U)});var W=_(H,2),q=_(s(W),2),ee=s(q),te=e=>{A(e,cn())},Y=e=>{A(e,ln())};n(ee,e=>{r.hasOpenAI?e(te):e(Y,-1)});var re=_(ee,2);K(_(s(re),4),{kind:`tts`,get value(){return r.tts},get onchange(){return r.onchangetts}}),j(re);var ie=_(re,2);K(_(s(ie),4),{kind:`stt`,get value(){return r.stt},get onchange(){return r.onchangestt}}),j(ie),j(q),j(W);var ae=_(W,2),X=s(ae),oe=_(X,2);j(ae),a(()=>{d(F,c(h)),d(z,c(g))}),M(`open`,`toggle`,W,e=>p(m,e),()=>c(m)),i(`click`,X,function(...e){r.onback?.apply(this,e)}),i(`click`,oe,function(...e){r.onnext?.apply(this,e)}),A(t,C),O()}f([`click`]);function fn(e,t,n){if(n)return!0;let r=e[t];return typeof r==`object`&&r?r.enabled:!!r}function pn(e,t,n){let r=e[t];return typeof r==`object`&&r?String(r[n]??``):``}var mn=k(`<span class="badge badge-success">Always on</span>`),hn=k(`<div class="toggle-track on locked"><div class="toggle-thumb"></div></div>`),gn=k(`<div><div class="toggle-thumb"></div></div>`),_n=k(`<span class="channel-cred-required">*</span>`),vn=k(`<div class="auth-row"><label class="channel-cred-label"> <!></label> <input/></div>`),yn=k(`<div class="pcard-auth"></div>`),bn=k(`<div><div class="toggle-card-header" role="button"><div class="toggle-card-icon"> </div> <div class="toggle-card-info"><div class="toggle-card-name"> <!></div> <div class="toggle-card-desc"> </div></div> <div class="toggle-card-switch"><!></div></div> <!></div>`),xn=k(`<div class="pcard-auth"><!></div>`),Sn=k(`<div class="pcard-auth"><!></div>`),Cn=k(`<input id="image-tag" class="form-input" type="text" placeholder="dev"/>`),wn=k(`<div class="options-section"><h3 class="options-section-title">Share knowledge with my host AKM</h3> <p class="options-section-desc">Adds a source entry to your personal <code>~/.config/akm/config.json</code> and mounts <code>~/akm</code> into the assistant as a secondary source. Your files' ownership is not changed and your primary stash is unchanged — your <code>~/akm</code> data and cache stay yours.</p> <div class="toggle-grid"><div><div class="toggle-card-header" role="button" tabindex="0"><div class="toggle-card-icon">🧠</div> <div class="toggle-card-info"><div class="toggle-card-name">Share knowledge with my host AKM (read + contribute)</div> <div class="toggle-card-desc">The assistant reads your personal knowledge and can contribute back. Each side keeps its own primary stash, database, and cache — only the knowledge files are shared.</div></div> <div class="toggle-card-switch"><div><div class="toggle-thumb"></div></div></div></div></div></div></div>`),Tn=k(`<div class="feedback feedback--error" role="alert"><span> </span></div>`),En=k(`<h2>Options</h2> <p class="step-description">Configure channels and deployment options.</p> <div class="options-section"><h3 class="options-section-title">Channels</h3> <p class="options-section-desc">Additional ways to reach your assistant.</p> <div class="toggle-grid" id="channels-grid"></div></div> <div class="options-section"><h3 class="options-section-title">Add-ons</h3> <p class="options-section-desc">Optional features to extend your assistant.</p> <div class="toggle-grid" id="addons-grid"><div><div class="toggle-card-header" role="button" tabindex="0"><div class="toggle-card-icon">🎙️</div> <div class="toggle-card-info"><div class="toggle-card-name">Voice</div> <div class="toggle-card-desc">Bundled text-to-speech and speech-to-text. Requires a one-time local model download.</div></div> <div class="toggle-card-switch"><div><div class="toggle-thumb"></div></div></div></div> <!></div> <div><div class="toggle-card-header svelte-1q1mmx4" role="button"><div class="toggle-card-icon">🦙</div> <div class="toggle-card-info"><div class="toggle-card-name">Ollama</div> <div class="toggle-card-desc"><!></div></div> <div class="toggle-card-switch"><div><div class="toggle-thumb"></div></div></div></div> <!></div></div></div> <details id="options-advanced-details" class="svelte-1q1mmx4"><summary class="options-advanced-summary svelte-1q1mmx4" id="options-advanced-toggle">Advanced settings</summary> <div class="options-section"><h3 class="options-section-title">Container Image</h3> <p class="options-section-desc">Tag or version of the OpenPalm images to deploy.</p> <!></div> <!></details> <!> <div class="step-actions"><button class="btn btn-secondary" id="btn-step4-back">Back</button> <button class="btn btn-primary" id="btn-step4-next">Review</button></div>`,1);function Dn(e,t){S(t,!0);let o=x(t,`hostLocalRunning`,3,!1);function l(e,n){return fn(t.channelSelection,e,n)}function f(e,n){return pn(t.channelSelection,e,n)}var p=En(),h=_(v(p),4),g=_(s(h),4);m(g,21,()=>ee,r,(e,o)=>{let u=L(()=>l(c(o).id,c(o).locked));var p=bn(),h=s(p),g=s(h),v=s(g,!0);j(g);var y=_(g,2),b=s(y),x=s(b),S=_(x),C=e=>{A(e,mn())};n(S,e=>{c(o).locked&&e(C)}),j(b);var w=_(b,2),E=s(w,!0);j(w),j(y);var D=_(y,2),O=s(D),k=e=>{A(e,hn())},M=e=>{var t=gn();a(()=>z(t,1,`toggle-track ${c(u)?`on`:``}`)),A(e,t)};n(O,e=>{c(o).locked?e(k):e(M,-1)}),j(D),j(h);var P=_(h,2),F=e=>{var l=yn();m(l,21,()=>c(o).credentials,r,(e,r)=>{let l=L(()=>c(r).secret===!1?`text`:`password`);var u=vn(),p=s(u),m=s(p),h=_(m),g=e=>{A(e,_n())};n(h,e=>{c(r).required&&e(g)}),j(p);var v=_(p,2);R(v),j(u),a(e=>{T(p,`for`,`cred-${c(o).id??``}-${c(r).key??``}`),d(m,`${c(r).label??``} `),T(v,`id`,`cred-${c(o).id??``}-${c(r).key??``}`),T(v,`type`,c(l)),T(v,`placeholder`,c(r).placeholder??``),N(v,e)},[()=>f(c(o).id,c(r).key)]),i(`input`,v,e=>{e.stopPropagation(),t.oncredentialchange(c(o).id,c(r).key,e.currentTarget.value)}),i(`click`,v,e=>e.stopPropagation()),A(e,u)}),j(l),A(e,l)};n(P,e=>{c(o).credentials&&c(u)&&e(F)}),j(p),a(()=>{z(p,1,`toggle-card ${c(u)?`on`:``} ${c(o).locked?`locked`:``} ${c(o).credentials&&c(u)?`wide`:``}`),T(p,`data-channel`,c(o).id),T(h,`tabindex`,c(o).locked?-1:0),d(v,c(o).icon),d(x,`${c(o).name??``} `),d(E,c(o).desc)}),i(`click`,h,()=>{c(o).locked||t.onchanneltoggle(c(o).id)}),i(`keydown`,h,e=>{!c(o).locked&&(e.key===`Enter`||e.key===` `)&&t.onchanneltoggle(c(o).id)}),A(e,p)}),j(g),j(h);var y=_(h,2),b=_(s(y),4),C=s(b),w=s(C),E=_(s(w),4),D=s(E);j(E),j(w);var k=_(w,2),M=e=>{var n=xn();J(s(n),{get profiles(){return t.voiceProfiles},get selectedProfile(){return t.selectedVoiceProfile},get onchange(){return t.onvoiceprofilechange},showDescription:!1}),j(n),A(e,n)};n(k,e=>{t.enableVoice&&t.voiceProfiles.length>0&&e(M)}),j(C);var P=_(C,2),F=s(P),I=_(s(F),2),B=_(s(I),2),V=s(B),H=e=>{A(e,u(`Ollama or LM Studio is already running on your computer — the bundled Ollama isn't needed.`))},W=e=>{A(e,u(`Run local AI models inside the stack. Downloads and serves models via Docker.`))};n(V,e=>{o()?e(H):e(W,-1)}),j(B),j(I);var G=_(I,2),K=s(G);j(G),j(F);var q=_(F,2),te=e=>{var n=Sn();J(s(n),{get profiles(){return t.ollamaProfiles},get selectedProfile(){return t.selectedOllamaProfile},get onchange(){return t.onollamaprofilechange},showDescription:!1}),j(n),A(e,n)};n(q,e=>{t.ollamaEnabled&&!o()&&t.ollamaProfiles.length>0&&e(te)}),j(P),j(b),j(y);var ne=_(y,2),Y=_(s(ne),2);U(_(s(Y),4),{label:`Image tag`,for:`image-tag`,hint:`Advanced — leave blank to use the default.`,children:(e,n)=>{var r=Cn();R(r),a(()=>N(r,t.imageTag)),i(`input`,r,e=>t.onimagtagchange(e.currentTarget.value)),A(e,r)},$$slots:{default:!0}}),j(Y);var re=_(Y,2),ie=e=>{var n=wn(),r=_(s(n),4),o=s(r),c=s(o),l=_(s(c),4),u=s(l);j(l),j(c),j(o),j(r),j(n),a(()=>{z(o,1,`toggle-card ${t.hostAkmEnabled?`on`:``}`),z(u,1,`toggle-track ${t.hostAkmEnabled?`on`:``}`)}),i(`click`,c,()=>t.onhostakmchange(!t.hostAkmEnabled)),i(`keydown`,c,e=>{(e.key===`Enter`||e.key===` `)&&t.onhostakmchange(!t.hostAkmEnabled)}),A(e,n)};n(re,e=>{t.hostAkmAvailable&&e(ie)}),j(ne);var ae=_(ne,2),X=e=>{var n=Tn(),r=s(n),i=s(r,!0);j(r),j(n),a(()=>d(i,t.errorMessage)),A(e,n)};n(ae,e=>{t.errorMessage&&e(X)});var oe=_(ae,2),se=s(oe),ce=_(se,2);j(oe),a(()=>{z(C,1,`toggle-card ${t.enableVoice?`on`:``} ${t.enableVoice&&t.voiceProfiles.length>0?`wide`:``}`),z(D,1,`toggle-track ${t.enableVoice?`on`:``}`),z(P,1,`toggle-card ${t.ollamaEnabled&&!o()?`on`:``} ${o()?`addon-disabled`:``} ${t.ollamaEnabled&&!o()&&t.ollamaProfiles.length>0?`wide`:``}`,`svelte-1q1mmx4`),T(F,`tabindex`,o()?-1:0),T(F,`aria-disabled`,o()?`true`:void 0),z(K,1,`toggle-track ${t.ollamaEnabled&&!o()?`on`:``}`)}),i(`click`,w,()=>t.onenablevoicechange(!t.enableVoice)),i(`keydown`,w,e=>{(e.key===`Enter`||e.key===` `)&&t.onenablevoicechange(!t.enableVoice)}),i(`click`,F,()=>{o()||t.onollamachange(!t.ollamaEnabled)}),i(`keydown`,F,e=>{!o()&&(e.key===`Enter`||e.key===` `)&&t.onollamachange(!t.ollamaEnabled)}),i(`click`,se,function(...e){t.onback?.apply(this,e)}),i(`click`,ce,function(...e){t.onnext?.apply(this,e)}),A(e,p),O()}f([`click`,`keydown`,`input`]);var On=k(`<div class="review-warning svelte-1q74f52" role="alert">⚠ No AI provider connected — your assistant won't be able to chat until you add one from the dashboard.</div>`),kn=k(`<input class="token-save-input svelte-1q74f52" type="password" readonly=""/>`),An=k(`<span class="token-save-box svelte-1q74f52"> </span>`),jn=k(`<div class="review-row review-row--alert svelte-1q74f52"><span class="review-row-label">UI Login Password</span> <span class="review-row-value"><!></span></div> <div class="review-row review-row--alert svelte-1q74f52"><span class="review-row-label"><span class="token-save-hint svelte-1q74f52">You'll need this to sign in. Also saved in <code class="svelte-1q74f52">stack.env</code>.</span></span> <span class="review-row-value"><button type="button" class="btn btn-secondary btn-sm"> </button></span></div>`,1),Mn=k(`<div class="review-row"><span class="review-row-label">UI Login Password</span> <span class="review-row-value"> </span></div>`),Nn=k(`<div class="review-row"><span class="review-row-label">Chat Model</span> <span class="review-row-value"> </span></div>`),Pn=k(`<div class="review-row"><span class="review-row-label">Small Model</span> <span class="review-row-value"> </span></div>`),Fn=k(`<div class="review-row"><span class="review-row-label">Memory Model</span> <span class="review-row-value"> </span></div> <div class="review-row" style="padding:4px 0"><span class="review-row-label">Embedding Dims</span> <span class="review-row-value"> </span></div>`,1),In=k(`<div class="review-row"><span class="review-row-label" style="padding-left:24px"> </span> <span class="review-row-value"> </span></div>`),Ln=k(`<div class="review-row"><span class="review-row-label"> </span> <span class="review-row-value review-row-value-ok">Enabled ✓</span></div> <!>`,1),Rn=k(`<div class="review-row"><span class="review-row-label">Voice Container</span> <span class="review-row-value"> </span></div>`),zn=k(`<div class="review-row"><span class="review-row-label">Ollama Profile</span> <span class="review-row-value"> </span></div>`),Bn=k(`<div class="review-row"><span class="review-row-label">Ollama In-Stack</span> <span class="review-row-value">Enabled</span></div> <!>`,1),Vn=k(`<div class="review-row"><span class="review-row-label"> </span> <span class="review-row-value review-row-value-ok">Connected ✓</span></div>`),Hn=k(`<!> Installing...`,1),Un=k(`<h2>Review &amp; Install</h2> <p class="step-description">Confirm your settings, then install.</p> <!> <div id="review-summary"><div class="review-card"><div class="review-card-title"><span>Account</span> <button class="review-edit-btn" type="button">Edit</button></div> <!></div> <div class="review-card"><div class="review-card-title"><span>Models</span> <button class="review-edit-btn" type="button">Edit</button></div> <!> <!> <!></div> <div class="review-card"><div class="review-card-title"><span>Channels</span> <button class="review-edit-btn" type="button">Edit</button></div> <!></div> <div class="review-card"><div class="review-card-title"><span>Voice</span> <button class="review-edit-btn" type="button">Edit</button></div> <div class="review-row"><span class="review-row-label">Text-to-Speech</span> <span class="review-row-value"> </span></div> <div class="review-row"><span class="review-row-label">Speech-to-Text</span> <span class="review-row-value"> </span></div> <!></div> <div class="review-card"><div class="review-card-title"><span>Options</span> <button class="review-edit-btn" type="button">Edit</button></div> <!></div> <div class="review-card"><div class="review-card-title"><span>Providers</span> <button class="review-edit-btn" type="button">Edit</button></div> <!></div></div> <!> <div class="step-actions" id="review-actions"><button type="button" class="btn btn-info">Save configuration</button> <button class="btn btn-secondary">Back</button> <button class="btn btn-primary" id="btn-install"><!></button></div>`,1);function Wn(l,f){S(f,!0);let h=x(f,`voiceProfileLabel`,3,``),g=x(f,`ollamaProfileLabel`,3,``),y=x(f,`isRerun`,3,!1);function b(e){return!e||e.length<8?`(not set)`:e.slice(0,4)+`...`+e.slice(-4)}function C(e,t){return fn(f.channelSelection,e,t)}function T(e,t){return pn(f.channelSelection,e,t)}let E=L(()=>ne.find(e=>e.id===f.activeTts)),D=L(()=>G.find(e=>e.id===f.activeStt)),k=L(()=>ee.filter(e=>C(e.id,e.locked)));function M(e){return q.find(t=>t.id===e)}let P=e(!1),F=e(!1),z=e(null);function V(e){let t=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`openpalm-setup.json`,r.click(),URL.revokeObjectURL(n)}async function H(){try{if(navigator.clipboard?.writeText){await navigator.clipboard.writeText(f.uiLoginPassword),p(P,!0),setTimeout(()=>{p(P,!1)},2e3);return}throw Error(`Clipboard API unavailable`)}catch{p(F,!0),c(z)&&(c(z).focus(),c(z).select())}}var U=Un(),W=_(v(U),4),K=e=>{A(e,On())};n(W,e=>{f.verifiedProviders.length===0&&e(K)});var te=_(W,2),J=s(te),Y=s(J),re=_(s(Y),2);j(Y);var ae=_(Y,2),X=e=>{var t=jn(),r=v(t),l=_(s(r),2),u=s(l),m=e=>{var t=kn();R(t),I(t,e=>p(z,e),()=>c(z)),a(()=>N(t,f.uiLoginPassword)),o(`focus`,t,e=>e.currentTarget.select()),A(e,t)},h=e=>{var t=An(),n=s(t);j(t),a(e=>d(n,`${e??``}*********`),[()=>f.uiLoginPassword.substring(0,2)]),A(e,t)};n(u,e=>{c(F)?e(m):e(h,-1)}),j(l),j(r);var g=_(r,2),y=_(s(g),2),b=s(y),x=s(b,!0);j(b),j(y),j(g),a(()=>d(x,c(P)?`Copied!`:`Copy password`)),i(`click`,b,()=>void H()),A(e,t)},oe=e=>{var t=Mn(),n=_(s(t),2),r=s(n,!0);j(n),j(t),a(e=>d(r,e),[()=>b(f.uiLoginPassword)]),A(e,t)};n(ae,e=>{y()?e(oe,-1):e(X)}),j(J);var se=_(J,2),ce=s(se),le=_(s(ce),2);j(ce);var Z=_(ce,2),ue=e=>{let t=L(()=>M(f.modelSelection.llm.connId));var n=Nn(),r=_(s(n),2),i=s(r);j(r),j(n),a(()=>d(i,`${f.modelSelection.llm.model??``}${c(t)?` (`+c(t).name+`)`:``}`)),A(e,n)};n(Z,e=>{f.modelSelection.llm&&e(ue)});var Q=_(Z,2),de=e=>{let t=L(()=>M(f.modelSelection.small.connId));var n=Pn(),r=_(s(n),2),i=s(r);j(r),j(n),a(()=>d(i,`${f.modelSelection.small.model??``}${c(t)?` (`+c(t).name+`)`:``}`)),A(e,n)};n(Q,e=>{f.modelSelection.small?.model&&e(de)});var pe=_(Q,2),me=e=>{let t=L(()=>M(f.modelSelection.embedding.connId));var n=Fn(),r=v(n),i=_(s(r),2),o=s(i);j(i),j(r);var l=_(r,2),u=_(s(l),2),p=s(u,!0);j(u),j(l),a(()=>{d(o,`${f.modelSelection.embedding.model??``}${c(t)?` (`+c(t).name+`)`:``}`),d(p,f.modelSelection.embedding.dims??1536)}),A(e,n)};n(pe,e=>{f.modelSelection.embedding&&e(me)}),j(se);var he=_(se,2),ge=s(he),_e=_(s(ge),2);j(ge),m(_(ge,2),17,()=>c(k),r,(e,i)=>{var o=Ln(),l=v(o),u=s(l),p=s(u);j(u),w(2),j(l);var h=_(l,2),g=e=>{let o=L(()=>f.channelSelection[c(i).id]);var l=t(),u=v(l),p=e=>{var o=t();m(v(o),17,()=>c(i).credentials,r,(e,r)=>{let o=L(()=>T(c(i).id,c(r).key));var l=t(),u=v(l),f=e=>{var t=In(),n=s(t),i=s(n,!0);j(n);var l=_(n,2),u=s(l,!0);j(l),j(t),a(e=>{d(i,c(r).label),d(u,e)},[()=>b(c(o))]),A(e,t)};n(u,e=>{c(o)&&e(f)}),A(e,l)}),A(e,o)};n(u,e=>{typeof c(o)==`object`&&c(o)!==null&&c(o).enabled&&e(p)}),A(e,l)};n(h,e=>{c(i).credentials&&e(g)}),a(()=>d(p,`${c(i).icon??``} ${c(i).name??``}`)),A(e,o)}),j(he);var ve=_(he,2),ye=s(ve),be=_(s(ye),2);j(ye);var xe=_(ye,2),Se=_(s(xe),2),Ce=s(Se,!0);j(Se),j(xe);var we=_(xe,2),Te=_(s(we),2),Ee=s(Te,!0);j(Te),j(we);var De=_(we,2),Oe=e=>{var t=Rn(),n=_(s(t),2),r=s(n,!0);j(n),j(t),a(()=>d(r,h())),A(e,t)};n(De,e=>{h()&&(f.activeTts===`openpalm-voice`||f.activeStt===`openpalm-voice`)&&e(Oe)}),j(ve);var ke=_(ve,2),Ae=s(ke),je=_(s(Ae),2);j(Ae);var Me=_(Ae,2),Ne=e=>{var t=Bn(),r=_(v(t),2),i=e=>{var t=zn(),n=_(s(t),2),r=s(n,!0);j(n),j(t),a(()=>d(r,g())),A(e,t)};n(r,e=>{g()&&e(i)}),A(e,t)};n(Me,e=>{f.ollamaEnabled&&e(Ne)}),j(ke);var Pe=_(ke,2),Fe=s(Pe),Ie=_(s(Fe),2);j(Fe),m(_(Fe,2),17,()=>f.verifiedProviders,r,(e,t)=>{var n=Vn(),r=s(n),i=s(r);j(r),w(2),j(n),a(()=>d(i,`${c(t).icon??``} ${c(t).name??``}`)),A(e,n)}),j(Pe),j(te);var Le=_(te,2),Re=e=>{{let t=L(()=>ie(f.installError,`setup-complete`));fe(e,{get error(){return c(t)}})}};n(Le,e=>{f.installError&&e(Re)});var ze=_(Le,2),Be=s(ze),Ve=_(Be,2),He=_(Ve,2),Ue=s(He),We=e=>{var t=Hn();B(v(t),{}),w(),A(e,t)},Ge=e=>{A(e,u(`Install`))};n(Ue,e=>{f.installing?e(We):e(Ge,-1)}),j(He),j(ze),a(()=>{d(Ce,c(E)?c(E).name:`Disabled`),d(Ee,c(D)?c(D).name:`Disabled`),He.disabled=f.installing}),i(`click`,re,()=>f.ongostepedit(1)),i(`click`,le,()=>f.ongostepedit(3)),i(`click`,_e,()=>f.ongostepedit(5)),i(`click`,be,()=>f.ongostepedit(4)),i(`click`,je,()=>f.ongostepedit(5)),i(`click`,Ie,()=>f.ongostepedit(2)),i(`click`,Be,()=>V(f.payload)),i(`click`,Ve,function(...e){f.onback?.apply(this,e)}),i(`click`,He,function(...e){f.oninstall?.apply(this,e)}),A(l,U),O()}f([`click`]);var Gn=k(`<span class="deploy-check"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--color-success)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg></span>`),Kn=k(`<span class="deploy-warning"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--color-warning)" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round"><path d="M12 9v4"></path><path d="M12 17h.01"></path><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path></svg></span>`),qn=k(`<span class="deploy-spinner"><!></span>`),Jn=k(`<div class="deploy-service-row"><div class="deploy-service-indicator"><!></div> <div class="deploy-service-info"><span class="deploy-service-name"> </span> <span class="deploy-service-status"> </span></div> <div class="deploy-service-bar"><div></div></div></div>`),Yn=k(`<div id="deploy-failure"><!></div>`),Xn=k(`<li>The OpenPalm Voice image is ~2.4 GB — the largest piece by far. Download speed depends on your internet connection.</li> <li>The wizard waits as long as the download takes. Progress bars below show each service's state.</li>`,1),Zn=k(`<li>Container images are being downloaded for the first time.</li>`),Qn=k(`<li>You can leave this window — we'll let you know when it's ready.</li>`),$n=k(`<li><strong>Keep this tab open while installation runs.</strong></li>`),er=k(`<aside class="deploy-tips" id="deploy-tips"><div class="deploy-tips-header"><span class="deploy-tips-kicker">Tips</span> <h3> </h3></div> <ul><!> <li>The admin console will be available once all services are healthy.</li> <!></ul></aside>`),tr=k(`<p class="done-subtitle">Configuration saved. Run 'openpalm start' to start services.</p>`),nr=k(`<div class="deploy-warnings-note svelte-1orw49v" role="status" id="deploy-warnings-note"> </div>`),rr=k(`<p class="done-close-hint svelte-1orw49v">Setup is complete. You can safely close this tab now.</p>`),ir=k(`<span class="deploy-svc-name"> </span> <a target="_blank" rel="noopener" class="deploy-svc-link"> </a> <span class="deploy-svc-status"> </span>`,1),ar=k(`<span class="deploy-svc-name"> </span> <span class="deploy-svc-status"> </span>`,1),or=k(`<li><!></li>`),sr=k(`<p class="done-subtitle"> </p> <!> <!> <ul class="service-list" id="deploy-service-list"></ul> <div class="done-links"><a href="/chat" class="btn btn-primary">Open Chat</a> <a target="_blank" rel="noopener" class="btn btn-secondary">OpenCode UI</a> <a href="/" class="btn btn-secondary">Admin Dashboard</a></div>`,1),cr=k(`<div class="done-state" id="deploy-done"><div class="done-icon"><svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="var(--color-success)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg></div> <h2> </h2> <!></div>`),lr=k(`<div class="step-actions" id="deploy-error-actions"><button class="btn btn-secondary" id="btn-deploy-back">Back to Review</button> <button class="btn btn-primary" id="btn-deploy-retry">Retry</button></div>`),ur=k(`<div class="deploy-header"><h2 id="deploy-title"> </h2> <p class="step-description" id="deploy-subtitle"> </p></div> <div class="deploy-progress-summary"><div class="deploy-progress-meta"><span class="deploy-progress-label">Progress</span> <span id="deploy-progress-value"><!></span></div> <div class="deploy-progress-bar"><div class="deploy-progress-fill" id="deploy-progress-fill"></div></div></div> <div class="deploy-services" id="deploy-services"></div> <!> <!> <!> <!>`,1);function dr(e,t){S(t,!0);let o=x(t,`deployHasWarnings`,3,!1),l=L(()=>(t.deployData.deployStatus??[]).filter(e=>e.status===`warning`)),f=typeof window<`u`&&!!window.openpalm,p=typeof window<`u`&&Number(window.location.port)||3880,h=L(()=>t.deployData.ports?.admin??p),g=L(()=>t.deployData.ports?.assistant??3800),y=L(()=>({assistant:{port:c(g),label:`Assistant (OpenCode)`,path:``},admin:{port:c(h),label:`Admin Dashboard`,path:``}})),C=L(()=>t.deployData.deployStatus??[]),E=L(()=>c(C).length),D=L(()=>c(C).filter(e=>e.status===`running`).length),k=L(()=>c(E)>0?Math.round(c(D)/c(E)*100):0),M=L(()=>t.deployData.phase??`writing-config`),N=L(()=>c(C).some(e=>/^voice(-cuda|-rocm)?$/.test(e.service??``))),P=L(()=>{if(t.deployDone)return o()?`Setup Complete (with warnings)`:`Setup Complete`;if(t.deployError)return`Deployment Issue`;switch(c(M)){case`writing-config`:return`Preparing Configuration…`;case`pulling-images`:return c(N)?`Downloading Images (incl. Voice ~2.4 GB)…`:`Downloading Images…`;case`starting`:return`Starting Services…`;case`starting-voice`:return`Starting Voice Addon…`;case`ready`:return`Setup Complete`}return`Deploying…`}),F=L(()=>{if(t.deployDone)return o()?`Setup is complete. Some services are still warming up in the background — they will be ready shortly.`:`Your OpenPalm stack is up and running.`;if(t.deployError)return`Setup could not finish starting the stack.`;switch(c(M)){case`writing-config`:return`Writing config files and validating settings.`;case`pulling-images`:return c(N)?`Downloading container images. The voice model (~2.4 GB) is the largest — on a typical home connection this step can take 10–30 minutes. The wizard will wait — keep this tab open.`:`Downloading container images — first install can take 3–8 minutes depending on connection.`;case`starting`:return`${c(D)} of ${c(E)} services running.`;case`starting-voice`:return`Pulling the voice image (~2.4 GB) and warming up Kokoro + Whisper models. First launch can take 5–30 minutes on slow connections — the wizard will wait.`;case`ready`:return`All services are up.`}return`Writing configuration and starting services.`}),I=L(()=>t.deployDone&&c(C).length===0);var R=ur(),V=v(R),H=s(V),U=s(H,!0);j(H);var W=_(H,2),G=s(W,!0);j(W),j(V);var K=_(V,2),q=s(K),ee=_(s(q),2),te=s(ee),J=e=>{A(e,u(`Error`))},ne=e=>{var t=u();a(()=>d(t,c(C).length>0?`100%`:``)),A(e,t)},Y=e=>{var t=u();a(()=>d(t,`${c(k)??``}%`)),A(e,t)};n(te,e=>{t.deployError?e(J):t.deployDone?e(ne,1):e(Y,-1)}),j(ee),j(q);var re=_(q,2),ae=s(re);j(re),j(K);var X=_(K,2);m(X,21,()=>c(C),r,(e,t)=>{var r=Jn(),i=s(r),o=s(i),l=e=>{A(e,Gn())},u=e=>{A(e,Kn())},f=e=>{var t=qn();B(s(t),{}),j(t),A(e,t)};n(o,e=>{c(t).status===`running`?e(l):c(t).status===`error`||c(t).status===`warning`?e(u,1):e(f,-1)}),j(i);var p=_(i,2),m=s(p),h=s(m,!0);j(m);var g=_(m,2),v=s(g,!0);j(g),j(p);var y=_(p,2),b=s(y);j(y),j(r),a(()=>{d(h,c(t).service||c(t).label||``),d(v,c(t).label||c(t).status),z(b,1,`deploy-bar-fill ${c(t).status===`running`?`complete`:c(t).status===`ready`?`ready`:c(t).status===`warning`?`warning`:c(t).status===`error`?`stopped`:`indeterminate`}`,`svelte-1orw49v`)}),A(e,r)}),j(X);var oe=_(X,2),se=e=>{var n=Yn(),r=s(n);{let e=L(()=>ie(t.deployError,`deploy`));fe(r,{get error(){return c(e)}})}j(n),A(e,n)};n(oe,e=>{t.deployError&&e(se)});var ce=_(oe,2),le=e=>{var t=er(),r=s(t),i=_(s(r),2),o=s(i,!0);j(i),j(r);var l=_(r,2),u=s(l),p=e=>{var t=Xn();w(2),A(e,t)},m=e=>{A(e,Zn())};n(u,e=>{c(N)?e(p):e(m,-1)});var h=_(u,4),g=e=>{A(e,Qn())},v=e=>{A(e,$n())};n(h,e=>{f?e(g):e(v,-1)}),j(l),j(t),a(()=>d(o,c(N)?`First install may take 10–30 minutes`:`First startup takes a few minutes`)),A(e,t)};n(ce,e=>{!t.deployDone&&!t.deployError&&e(le)});var Z=_(ce,2),ue=e=>{var t=cr(),i=_(s(t),2),u=s(i,!0);j(i);var p=_(i,2),h=e=>{A(e,tr())},b=e=>{var t=sr(),i=v(t),u=s(i,!0);j(i);var p=_(i,2),h=e=>{var t=nr(),n=s(t);j(t),a(e=>d(n,`Still warming up: ${e??``}. You can finish setup now — these will be ready shortly.`),[()=>c(l).map(e=>e.label||e.service).join(`, `)]),A(e,t)};n(p,e=>{o()&&c(l).length>0&&e(h)});var b=_(p,2),x=e=>{A(e,rr())};n(b,e=>{f||e(x)});var S=_(b,2);m(S,21,()=>c(C),r,(e,t)=>{let r=L(()=>c(t).service||c(t).label||``),i=L(()=>c(y)[c(r)]),o=L(()=>c(t).status===`warning`);var l=or(),u=s(l),f=e=>{let n=L(()=>`http://127.0.0.1:`+c(i).port+c(i).path);var r=ir(),l=v(r),u=s(l,!0);j(l);var f=_(l,2),p=s(f,!0);j(f);var m=_(f,2),h=s(m,!0);j(m),a(()=>{d(u,c(i).label),T(f,`href`,c(n)),d(p,c(n)),d(h,c(o)?c(t).label||`⚠ Warming up`:`✓ Running`)}),A(e,r)},p=e=>{var n=ar(),i=v(n),l=s(i,!0);j(i);var u=_(i,2),f=s(u,!0);j(u),a(()=>{d(l,c(r)),d(f,c(o)?c(t).label||`⚠ Warming up`:`✓ Running`)}),A(e,n)};n(u,e=>{c(i)?e(f):e(p,-1)}),j(l),A(e,l)}),j(S);var E=_(S,2),D=_(s(E),2);w(2),j(E),a(()=>{d(u,o()?`Setup is complete. Some services are still warming up in the background.`:`Your OpenPalm stack is up and running.`),T(D,`href`,`http://127.0.0.1:${c(g)??``}`)}),A(e,t)};n(p,e=>{c(I)?e(h):e(b,-1)}),j(t),a(()=>d(u,o()?`Setup Complete (with warnings)`:`Setup Complete`)),A(e,t)};n(Z,e=>{t.deployDone&&e(ue)});var Q=_(Z,2),de=e=>{var n=lr(),r=s(n),a=_(r,2);j(n),i(`click`,r,function(...e){t.onback?.apply(this,e)}),i(`click`,a,function(...e){t.onretry?.apply(this,e)}),A(e,n)};n(Q,e=>{t.deployError&&e(de)}),a(()=>{d(U,c(P)),d(G,c(F)),z(ee,1,`deploy-progress-value ${t.deployError?`deploy-progress-value--error`:``}`),b(ae,`width:${(t.deployDone&&c(C).length>0?100:t.deployDone?0:c(k))??``}%`)}),A(e,R),O()}f([`click`]);var fr=k(`<link rel="stylesheet" href="/setup/wizard.css"/>`),pr=k(`<div class="rerun-banner"><span>Updating existing installation</span> <a href="/" class="rerun-back-link">← Back to Admin</a></div>`),mr=k(`<div class="feedback feedback--warning" role="alert" data-testid="recommendation-alert"><span> </span></div>`),hr=k(`<section class="step-content" id="step-0" data-testid="step-system-check"><!></section>`),gr=k(`<section class="step-content" id="step-1" data-testid="step-welcome"><!></section>`),_r=k(`<section class="step-content" id="step-2" data-testid="step-capabilities"><!></section>`),vr=k(`<div class="feedback feedback--warning" role="alert"><span> </span></div>`),yr=k(`<section class="step-content" id="step-3" data-testid="step-models"><!> <!></section>`),br=k(`<section class="step-content" id="step-4" data-testid="step-voice"><!></section>`),xr=k(`<section class="step-content" id="step-5" data-testid="step-options"><!></section>`),Sr=k(`<section class="step-content" id="step-6" data-testid="step-review"><!></section>`),Cr=k(`<main class="setup-page" aria-label="Setup wizard"><div class="wizard-card"><!> <div class="wizard-header"><div class="hdr-logo">OP</div> <h1>OpenPalm <span class="hdr-suffix"> </span></h1></div> <div class="wizard-body"><!> <!> <!></div></div></main>`);function wr(t,r){S(r,!0);let i=e(0),o=e(0),l=e(!1),u=e(!1),f=e(``),m=e(``),v=e(!1),b=e(!1),x=e(!1),w=e(!1),T=e(y({})),D=e(y([])),k=L(()=>c(T).ollama?.ollamaMode===`running`||c(D).some(e=>e.provider===`ollama`||e.provider===`lmstudio`)),M=e(null),N=e(y([])),I=e(!1),R=e(!1),z=e(y([])),B=e(y({})),H=e(``),U=e(0),G=e(null),K=e(!1),te=e(null),J=e(``),ne=e(!1),Y=e(!1),re=e(!1),ie={},ae={},X=y({}),oe=e(``),ce=e(``),le=e(y({engine:``})),Z=e(y({engine:``})),ue=e(y([])),Q=e(``),de=e(void 0),fe=e(void 0),pe=y({discord:{enabled:!1,botToken:``,applicationId:``},slack:{enabled:!1,slackBotToken:``,slackAppToken:``}}),me=e(!1),he=e(y([])),ge=e(``),_e=e(``),ve=e(!1),ye=e(!1),be=e(``),xe=e(``),Se=e(!1),Ce=e(!1),we=e(y({})),Ee=e(!1),De=e(!1),Oe=e(null),ke=null,Ae=e(0),je=e(null),Ne=L(()=>(c(R)?c(z).map(e=>e.id):q.map(e=>e.id)).filter(e=>c(T)[e]?.verified).length),Pe=L(()=>{if(c(R)){let e=c(z).filter(e=>c(T)[e.id]?.verified).map(e=>{let t=c(T)[e.id],n=q.find(t=>t.id===e.id);return{id:e.id,name:e.name??e.id,kind:`cloud`,group:``,order:0,icon:``,desc:``,baseUrl:t?.baseUrl??``,llmModel:n?.llmModel??``,embModel:n?.embModel??``,embDims:n?.embDims??0}}),t=new Set(e.map(e=>e.id)),n=q.filter(e=>!t.has(e.id)&&c(T)[e.id]?.verified).map(e=>{let t=c(T)[e.id];return{id:e.id,name:e.name,kind:e.kind,group:e.group,order:e.order,icon:e.icon,desc:e.desc,baseUrl:t?.baseUrl??e.baseUrl,llmModel:e.llmModel,embModel:e.embModel,embDims:e.embDims}});return[...e,...n]}return q.filter(e=>c(T)[e.id]?.verified)}),Fe=L(()=>q.some(e=>e.id===`ollama`&&c(T)[e.id]?.verified)),Ie=L(()=>c(Pe).length>0),Le=L(()=>c(Ie)&&!!X.llm?.model||c(K));h(()=>{c(Ie)&&c(K)&&p(K,!1)});let Re=L(()=>q.some(e=>e.id===`openai`&&c(T)[e.id]?.verified)),ze=L(()=>c(Re)?{tts:`openai-tts`,stt:`openai-stt`}:{tts:`browser-tts`,stt:`browser-stt`}),Be=L(()=>c(le).engine?c(le):c(x)?{engine:`openpalm-voice`}:{engine:c(ze).tts}),Ve=L(()=>c(Z).engine?c(Z):c(x)?{engine:`openpalm-voice`}:{engine:c(ze).stt}),He=L(()=>c(le).engine?c(le):c(x)?{engine:`openpalm-voice`}:{engine:``}),Ue=L(()=>c(Z).engine?c(Z):c(x)?{engine:`openpalm-voice`}:{engine:``}),We=L(()=>{if(!c(Q))return``;let e=c(ue).find(e=>e.id===c(Q));return e?.label??e?.id??c(Q)}),Ge=L(()=>{if(!c(ge))return``;let e=c(he).find(e=>e.id===c(ge));return e?.label??e?.id??c(ge)});function Ke(e,t){return`addon.${e}.${t}`}let qe=L(()=>{let e=X.llm,t=X.embedding,n=X.small,r={};e&&(r[e.connId]=!0),t&&(r[t.connId]=!0),n?.model&&(r[n.connId]=!0);let i=c(Pe).filter(e=>r[e.id]).map(e=>{let t=c(T)[e.id];return{id:e.id,name:e.name,provider:e.id,baseUrl:t?.baseUrl??e.baseUrl,apiKey:t?.apiKey??``}}),a=e?.connId??``,o=t?.connId??``,s=i.find(e=>e.id===a),l=i.find(e=>e.id===o),u=s?.provider??``,d=l?.provider??``,p={};c(me)&&!c(k)&&(p.ollama=!0),(c(He).engine===`openpalm-voice`||c(Ue).engine===`openpalm-voice`)&&(p.voice=!0);let m={},h=Ye();for(let e of Object.keys(h)){let t=h[e];if(t===!0)p[e]=!0;else if(typeof t==`object`&&t){p[e]=!0;let n={};for(let e of Object.keys(t))e!==`enabled`&&t[e]&&(n[e]=String(t[e]));Object.keys(n).length>0&&(m[e]=n)}}let g={version:2,addons:p,security:{uiLoginPassword:c(f)},connections:i};u&&e?.model&&(g.llm={provider:u,model:e.model,baseUrl:s?.baseUrl??``}),d&&t?.model&&(g.embedding={provider:d,model:t.model,dims:t.dims??1536,baseUrl:l?.baseUrl??``});let _=e=>{if(!e.engine||e.engine.startsWith(`skip-`))return;let t={enabled:!0,engine:e.engine};return e.provider&&(t.provider=e.provider),e.baseURL&&(t.baseURL=e.baseURL),e.model&&(t.model=e.model),e.voice&&(t.voice=e.voice),e.language&&(t.language=e.language),t},v=_(c(He));v&&(g.tts=v);let y=_(c(Ue));return y&&(g.stt=y),(c(He).engine===`openpalm-voice`||c(Ue).engine===`openpalm-voice`)&&c(Q)&&(g.voiceProfile=c(Q)),c(me)&&c(ge)&&(g.ollamaProfile=c(ge)),Object.keys(m).length>0&&(g.channelCredentials=m),c(_e).trim()&&(g.imageTag=c(_e).trim()),c(ve)&&(g.hostAkm=!0),g});function Je(){let e=new Uint8Array(16);return crypto.getRandomValues(e),Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}function Ye(){let e={};for(let t of ee){let n=pe[t.id];if(t.locked)e[t.id]=!0;else if(typeof n==`object`&&n){if(n.enabled){let r={enabled:!0};if(t.credentials)for(let e of t.credentials){let t=n[e.key];t&&(r[e.key]=t)}e[t.id]=r}}else n&&(e[t.id]=!0)}return e}async function Xe(){try{let e=await fetch(`/api/setup/voice-profiles`);if(!e.ok)return;let t=await e.json();if(!Array.isArray(t.profiles))return;p(ue,t.profiles,!0);let n=c(w)?t.profiles.find(e=>e.id===Ke(`voice`,`cuda`)&&e.available!==!1)??t.profiles.find(e=>e.default&&e.available!==!1)??t.profiles.find(e=>e.available!==!1):t.profiles.find(e=>e.id===Ke(`voice`,`cpu`)&&e.available!==!1)??t.profiles.find(e=>e.default&&e.available!==!1)??t.profiles.find(e=>e.available!==!1);if(n&&p(Q,n.id,!0),c(w)&&c(Q)!==Ke(`voice`,`cuda`)){let e=c(ue).find(e=>e.id===Ke(`voice`,`cuda`)&&e.available!==!1);e&&p(Q,e.id,!0)}}catch{}}async function Ze(){try{let e=await fetch(`/api/setup/ollama-profiles`);if(!e.ok)return;let t=await e.json();if(!Array.isArray(t.profiles))return;p(he,t.profiles,!0);let n=c(w)?t.profiles.find(e=>e.id===Ke(`ollama`,`cuda`)&&e.available!==!1)??t.profiles.find(e=>e.default&&e.available!==!1)??t.profiles.find(e=>e.available!==!1):t.profiles.find(e=>e.id===Ke(`ollama`,`cpu`)&&e.available!==!1)??t.profiles.find(e=>e.default&&e.available!==!1)??t.profiles.find(e=>e.available!==!1);t.selectedProfile&&typeof t.selectedProfile==`string`?p(ge,t.selectedProfile,!0):n&&p(ge,n.id,!0)}catch{}}function Qe(){let e={};for(let t of q)e[t.id]={selected:!1,verified:!1,verifying:!1,error:!1,apiKey:``,baseUrl:t.baseUrl??``,models:[],ollamaMode:null};p(T,e,!0)}function $e(){return c(f).trim().length<8?(p(m,`UI login password must be at least 8 characters.`),!1):(p(m,``),!0)}function et(e){p(me,!0);let t=c(T).ollama;t&&(t.selected=!0,t.verified=!0,t.ollamaMode=`instack`,t.baseUrl=`http://ollama:11434`,t.models.length===0&&(t.models=[`qwen3:4b`]));let n=Ke(`ollama`,e??(c(w)?`cuda`:`cpu`));p(ge,(c(he).find(e=>e.id===n&&e.available!==!1)??c(he).find(e=>e.available!==!1))?.id??n,!0)}let tt=e(!1);async function nt(){if(!(c(tt)||c(te)))try{let e=await fetch(`/api/setup/recommend`);if(e.ok){let t=await e.json();t.ok&&t.recommendation&&p(te,t.recommendation,!0),t.ok&&Array.isArray(t.hostProviders)&&p(D,t.hostProviders,!0)}}catch{}finally{p(tt,!0)}}async function rt(){if(c(ne))return;let e;if(c(te))e=c(te);else try{let t=await fetch(`/api/setup/recommend`);if(!t.ok)return;let n=await t.json();if(!n.ok||!n.recommendation)return;e=n.recommendation}catch{return}switch(p(ne,!0),p(te,e,!0),e.action){case`use-cloud`:p(J,``);break;case`use-host-providers`:p(J,e.alert,!0),c(Ht)||(p(Ht,!0),await Kt());break;case`enable-ollama`:p(J,e.alert,!0),et(e.profileVariant);break;case`connect-manually`:p(J,e.alert,!0);break}}async function it(){if(c(Pe).length>=1){if(mt(),ut(),!X.llm?.model&&!c(K)){$(3);return}$(5);return}if(p(b,!0),await rt(),p(b,!1),c(te)?.action===`connect-manually`){$(2);return}if(mt(),ut(),!X.llm?.model&&!c(K)){$(3);return}$(5)}function at(e){if(p(x,e,!0),e){if(c(le).engine!==`openpalm-voice`&&p(le,{engine:`openpalm-voice`},!0),c(Z).engine!==`openpalm-voice`&&p(Z,{engine:`openpalm-voice`},!0),!c(Q)){let e=Ke(`voice`,c(w)?`cuda`:`cpu`),t=c(ue).find(t=>t.id===e&&t.available!==!1)??c(ue).find(e=>e.available!==!1);t&&p(Q,t.id,!0)}}else c(le).engine===`openpalm-voice`&&p(le,{engine:``},!0),c(Z).engine===`openpalm-voice`&&p(Z,{engine:``},!0)}function ot(e){if(e)et();else{p(me,!1);let e=c(T).ollama;e&&e.ollamaMode!==`running`&&(e.selected=!1,e.verified=!1)}}function st(){return c(K)?(p(oe,``),!0):c(Pe).length===0?(p(oe,`Connect a provider on the previous step to continue.`),!1):X.llm?.model?(p(oe,``),!0):(p(oe,`Select a chat model to continue.`),!1)}function ct(){let e=[];for(let t of ee){if(!t.credentials)continue;let n=pe[t.id];if(!(typeof n!=`object`||!n)&&n.enabled)for(let r of t.credentials)r.required&&!String(n[r.key]??``).trim()&&e.push(t.name+`: `+r.label+` is required.`)}return e.length>0?(p(be,e.join(` `),!0),!1):(p(be,``),!0)}function lt(e){return!(e>c(o))}function $(e){e<0||e>6||e>0&&!c(u)||(p(i,e,!0),e>c(o)&&p(o,e,!0),p(l,!1),e===1&&!c(qt)&&nt(),e===3&&(mt(),ut()),e===5&&c(Fe)&&p(me,c(T).ollama?.ollamaMode===`instack`),e===2&&!c(qt)&&rt())}function ut(){for(let e of[`llm`,`embedding`,`small`]){if(X[e]||e===`embedding`)continue;let t=dt(e);if(t.length===0)continue;let n=t.find(e=>e.isDefault)??t[0];X[e]={connId:n.connId,model:n.id,dims:n.dims}}}function dt(e){let t=[];for(let n of c(Pe)){let r=c(T)[n.id],i=e===`embedding`?n.embModel:n.llmModel,a=r.models.length>0?r.models:[];i&&a.includes(i)&&t.push({id:i,connId:n.id,isDefault:!0,dims:e===`embedding`?W[i]??W[i.replace(/:.*$/,``)]??n.embDims??0:0});for(let r of a){if(r===i)continue;let a=e===`embedding`?W[r]??W[r.replace(/:.*$/,``)]??0:0;t.push({id:r,connId:n.id,isDefault:!1,dims:a})}}return e===`embedding`?t.filter(e=>e.isDefault||e.dims>0):t}function ft(e,t){if(!t)return;let n=dt(e);if(n.length===0)return;let r=t.indexOf(`/`),i=r>0?t.slice(0,r):``,a=r>0?t.slice(r+1):t,o=n.find(e=>e.id===t);if(o)return{connId:o.connId,model:o.id,dims:o.dims};let s=i?n.find(e=>e.connId===i&&e.id===a):void 0;if(s)return{connId:s.connId,model:s.id,dims:s.dims};let c=n.find(e=>e.id===a);if(c)return{connId:c.connId,model:c.id,dims:c.dims}}function pt(e){e&&(e.llm&&p(de,e.llm,!0),e.small&&p(fe,e.small,!0),mt())}function mt(){if(c(de)){let e=ft(`llm`,c(de));e&&(X.llm=e)}if(c(fe)){let e=ft(`small`,c(fe));e&&(X.small=e)}}async function ht(){try{let e=await fetch(`/api/setup/opencode/ensure`,{method:`POST`});if(e.ok){let{ok:t}=await e.json();if(t){p(R,!0),await gt();return}}}catch{}try{let e=await fetch(`/api/setup/opencode/status`);e.ok&&(await e.json()).available&&(p(R,!0),await gt())}catch{}}async function gt(){let e=await fetch(`/api/setup/opencode/providers`);if(!e.ok)return;let t=await e.json();if(!t.available||!Array.isArray(t.providers))return;let n=t.providers,r=t.auth??{},i=new Set(Array.isArray(t.connected)?t.connected:[]),a=new Set(n.map(e=>e.id));for(let e of V)a.has(e.id)||n.push(e);p(z,n,!0),p(B,r,!0);let o={...c(T)};for(let e of n){o[e.id]||(o[e.id]={selected:!1,verified:!1,verifying:!1,error:!1,apiKey:``,baseUrl:e.localUrl??``,models:[],ollamaMode:null});let t=Object.keys(e.models??{});t.length>0&&o[e.id].models.length===0&&(o[e.id].models=t),i.has(e.id)&&(o[e.id].verified=!0)}p(T,o,!0),pt(t.selectedModels)}async function _t(){p(I,!0);try{let e=await fetch(`/api/setup/detect-providers`);if(e.ok){p(N,(await e.json()).providers??[],!0);for(let e of c(N)){if(!e.available)continue;let t=c(T)[e.provider];t&&(t.baseUrl=e.url,t.selected||(t.selected=!0,e.provider===`ollama`&&(t.ollamaMode=`running`)),yt(e.provider))}}}catch{p(N,[],!0)}p(I,!1)}async function vt(e,t,n){let r=`/api/setup/models/`+encodeURIComponent(e),i=await fetch(r,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({apiKey:n??``,baseUrl:t??``})}),a=await i.json();if(!i.ok||a.status===`recoverable_error`)throw Error(a.error??`Failed to fetch models (HTTP `+i.status+`)`);return a}async function yt(e){let t=q.find(t=>t.id===e);if(!t)return;let n=c(T)[e];if(!n)return;if(e===`ollama`&&n.ollamaMode===`instack`){n.verified=!0,n.error=!1;return}let r=(ie[e]??0)+1;ie[e]=r,n.verifying=!0,n.error=!1;let i=(n.baseUrl||t.baseUrl).trim(),a=(n.apiKey??``).trim();try{let t=await vt(e,i,a);if(ie[e]!==r)return;n.verified=!0,n.error=!1,n.models=t.models??[]}catch(t){if(ie[e]!==r)return;n.verified=!1,n.error=!0,n.errorMessage=t instanceof Error?t.message:``,n.models=[]}n.verifying=!1}async function bt(e){let t=c(T)[e];if(t?.apiKey){t.verifying=!0,t.error=!1;try{let n=await fetch(`/api/setup/opencode/auth/`+encodeURIComponent(e),{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:`api`,key:t.apiKey})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.message??`Failed to connect (HTTP `+n.status+`)`)}t.verified=!0,t.error=!1}catch(e){t.verified=!1,t.error=!0,t.errorMessage=e instanceof Error?e.message:`Connection failed`}t.verifying=!1}}async function xt(e,t){let n=c(T)[e];if(n){n.verifying=!0,n.error=!1;try{let r=await fetch(`/api/setup/opencode/provider/`+encodeURIComponent(e)+`/oauth/authorize`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({method:t})}),i=await r.json();if(!r.ok)throw Error(i.message??`OAuth failed`);n.oauthPolling=!0,n.oauthUrl=i.url??``,n.oauthInstructions=i.instructions??``,i.url&&i.method===`auto`&&window.open(i.url,`_blank`),await St(e,t)}catch(e){n.verifying=!1,n.error=!0,n.errorMessage=e instanceof Error?e.message:`OAuth failed`,n.oauthPolling=!1}}}async function St(e,t){let n=c(T)[e],r=new AbortController;ae[e]=r;let i=AbortSignal.timeout(10*6e4),a=AbortSignal.any?AbortSignal.any([r.signal,i]):r.signal;try{let r=await fetch(`/api/setup/opencode/provider/`+encodeURIComponent(e)+`/oauth/callback`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({method:t}),signal:a}),i=await r.json().catch(()=>null);r.ok&&i?.ok?(n.verified=!0,n.error=!1):(n.error=!0,n.errorMessage=i?.message??`Authorization failed`)}catch(e){if(e instanceof Error&&e.name===`AbortError`&&r.signal.aborted)return;e instanceof Error&&e.name===`AbortError`?(n.error=!0,n.errorMessage=`Authorization timed out. Try again.`):(n.error=!0,n.errorMessage=e instanceof Error?e.message:`Authorization failed`)}finally{delete ae[e],n.oauthPolling=!1,n.verifying=!1}}async function Ct(){if(!c(Se)){if(p(xe,``),!c(qe).llm&&!c(qt)&&!c(Ce)){if(!window.confirm(`No AI provider is configured. Your assistant won’t be able to chat until you add one from the dashboard.
3
-
4
- Install anyway?`))return;p(Ce,!0)}if(p(Se,!0),(c(He).engine===`openpalm-voice`||c(Ue).engine===`openpalm-voice`)&&!c(Q)){let e=Ke(`voice`,c(w)?`cuda`:`cpu`);p(Q,(c(ue).find(t=>t.id===e&&t.available!==!1)??c(ue).find(e=>e.id===Ke(`voice`,`cpu`)&&e.available!==!1)??c(ue).find(e=>e.available!==!1))?.id??Ke(`voice`,`cpu`),!0)}c(me)&&!c(ge)&&p(ge,Ke(`ollama`,c(w)?`cuda`:`cpu`),!0);try{let e=await fetch(`/api/setup/complete`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(c(qe))}),t=await e.json().catch(()=>({}));if(!e.ok||!t.ok){p(xe,t.message??t.error??`Install failed.`,!0),p(Se,!1),p(l,!1);return}p(l,!0),wt()}catch(e){p(xe,`Network error: `+(e instanceof Error?e.message:`unable to reach server.`)),p(Se,!1)}}}function wt(){Tt(),Et(),ke=setInterval(()=>{Et()},2500)}function Tt(){ke&&=(clearInterval(ke),null)}async function Et(){try{let e=await fetch(`/api/setup/deploy-status`);if(!e.ok){E(Ae),c(Ae)>=5&&(Tt(),p(Oe,`Lost contact with the installer. Services may still be starting in the background.`));return}let t=await e.json();if(p(Ae,0),t.deployStatus&&t.deployStatus.length>0&&p(je,t.deployStatus.map(e=>({service:e.service,status:e.status,label:e.label})),!0),p(we,t,!0),t.deployError)Tt(),p(Oe,t.deployError,!0);else if(t.setupComplete&&t.deployStatus&&t.deployStatus.length>0){let e=t.deployStatus,n=e.every(e=>e.status===`running`),r=!t.deploying&&e.every(e=>e.status===`running`||e.status===`warning`)&&e.some(e=>e.status===`warning`);n?(Tt(),p(Ee,!0)):r&&(Tt(),p(De,!0),p(Ee,!0))}else t.setupComplete&&!t.deploying&&(!t.deployStatus||t.deployStatus.length===0)&&(Tt(),p(Ee,!0))}catch(e){E(Ae),c(Ae)>=5&&(Tt(),p(Oe,e instanceof Error?`Lost contact with the installer: ${e.message}`:`Lost contact with the installer.`,!0))}}function Dt(e){let t=c(T)[e];if(t)if(t.selected)p(M,c(M)===e?null:e,!0);else{t.selected=!0,p(M,e,!0);let n=c(N).find(t=>t.provider===e&&t.available);n&&(t.baseUrl=n.url)}}function Ot(e){p(M,c(M)===e?null:e,!0)}function kt(e){let t=c(T)[e];t&&(t.selected=!1,t.verified=!1,t.verifying=!1,t.error=!1,t.apiKey=``,t.models=[],e===`ollama`&&(t.ollamaMode=null),c(M)===e&&p(M,null))}function At(e){let t=c(T)[e];t&&(t.verified=!0,t.error=!1)}function jt(e){if(c(R)){let t=c(T)[e];t&&!t.apiKey?yt(e):bt(e)}else yt(e)}function Mt(e,t){let n=c(T)[e];n&&(n.apiKey=t)}function Nt(e,t){let n=c(T)[e];n&&(n.baseUrl=t)}function Pt(e){let t=c(T).ollama;t&&(t.ollamaMode=e)}function Ft(e){let t=pe[e];typeof t==`object`&&t?t.enabled=!t.enabled:pe[e]=!t}function It(e,t,n){let r=pe[e];typeof r==`object`&&r&&(r[t]=n)}function Lt(e,t,n,r){X[e]={connId:t,model:n,dims:r},e===`embedding`&&(r<=0||r===void 0)?p(ce,`Unknown embedding model dimensions — set manually in akm config after install.`):e===`embedding`&&p(ce,``)}function Rt(e){delete X[e]}function zt(){p(Se,!1),p(Oe,null),p(Ee,!1),p(De,!1),p(we,{},!0),p(je,null),p(Ae,0),Ct()}function Bt(){p(Se,!1),p(Oe,null),p(Ee,!1),p(De,!1),p(we,{},!0),p(Ae,0),p(je,null),p(l,!1),p(i,6)}let Ht=e(!1),Ut=e(!1);async function Wt(){try{let e=await fetch(`/api/setup/host-status`);if(e.ok){let t=await e.json();p(U,Math.max(t.providerCount??0,t.credentialCount??0),!0),t.imageTag&&!c(_e)&&p(_e,t.imageTag,!0),typeof t.hostAkmAvailable==`boolean`&&p(ye,t.hostAkmAvailable,!0),p(G,t.warning??null,!0),t.modelPreferences?.model&&p(de,t.modelPreferences.model,!0),t.modelPreferences?.small_model&&p(fe,t.modelPreferences.small_model,!0),c(U)>0&&!c(Ht)&&(c(i)===2||c(qt))&&(p(Ht,!0),Kt())}}catch{}}function Gt(e){let t=c(T)[e];if(!t){t={selected:!0,verified:!0,verifying:!1,error:!1,apiKey:``,baseUrl:``,models:[],ollamaMode:null},c(T)[e]=t;return}t.verified=!0,t.error=!1}async function Kt(){p(Ut,!0),p(G,null);try{let e=await fetch(`/api/setup/import-host`,{method:`POST`}),t=await e.json().catch(()=>null);if(!e.ok||!t?.ok){p(Ut,!1),p(G,t?.error?`Couldn't import host providers: ${t.error}`:`Couldn't import providers from host OpenCode. Configure providers manually below.`,!0);return}let n=t.importedProviders??t.pushedProviders??[];for(let e of n)Gt(e);if(c(R))try{await gt()}catch{}mt();for(let e of Object.keys(c(T)))!c(T)[e].verified&&q.some(t=>t.id===e)&&yt(e);p(Ut,!1),c(qt)||$(3)}catch(e){p(Ut,!1),p(G,`Couldn't import providers from host OpenCode: ${e instanceof Error?e.message:`network error`}. Configure providers manually below.`)}}let qt=e(!1);F(()=>{Qe(),p(qt,new URLSearchParams(window.location.search).get(`rerun`)===`1`),c(qt)?(p(u,!0),p(o,6),p(f,Je(),!0),fetch(`/api/setup/current-config`).then(e=>e.ok?e.json():null).then(e=>{if(!e)return;if(e.imageTag&&p(_e,e.imageTag,!0),typeof e.hostAkm==`boolean`&&p(ve,e.hostAkm,!0),e.llm?.provider&&e.llm?.model&&(X.llm={connId:e.llm.provider,model:e.llm.model}),e.embedding?.provider&&e.embedding?.model&&(X.embedding={connId:e.embedding.provider,model:e.embedding.model,dims:e.embedding.dims}),e.voice?.tts){let t=e.voice.tts;t.engine?p(le,{...t,engine:t.engine},!0):(p(le,{engine:``},!0),p(Y,!0))}if(e.voice?.stt){let t=e.voice.stt;t.engine?p(Z,{...t,engine:t.engine},!0):(p(Z,{engine:``},!0),p(re,!0))}e.voice?.selectedProfile&&typeof e.voice.selectedProfile==`string`&&p(Q,e.voice.selectedProfile,!0);let t=Array.isArray(e.enabledAddons)?e.enabledAddons:[];t.includes(`ollama`)&&p(me,!0),e.ollama?.selectedProfile&&typeof e.ollama.selectedProfile==`string`&&p(ge,e.ollama.selectedProfile,!0);let n=e.channelCredentials??{};for(let e of[`discord`,`slack`]){let r=pe[e];if(typeof r==`object`&&r){t.includes(e)&&(r.enabled=!0);let i=n[e];i&&typeof i==`object`&&Object.assign(r,i)}}}).catch(e=>{console.error(`[setup] failed to load existing config:`,e)})):(p(f,Je(),!0),fetch(`/api/setup/status`).then(e=>e.json()).then(e=>{e.setupComplete&&(window.location.href=`/`)}).catch(e=>{console.error(`[setup] failed to check setup status:`,e)})),fetch(`/api/setup/deploy-status`).then(e=>e.ok?e.json():null).then(e=>{e&&(e.deploying||e.deployError)&&(p(we,e,!0),p(l,!0),wt())}).catch(e=>{console.error(`[setup] failed to fetch deploy status:`,e)}),Wt(),Xe(),Ze();let e=setTimeout(()=>{p(v,!0)},1e4);ht().then(()=>_t()).catch(e=>{console.error(`[setup] provider detection failed:`,e)}).finally(()=>{clearTimeout(e),p(v,!0)})});var Jt=Cr();C(`g40i6i`,e=>{var t=fr();g(()=>{P.title=`OpenPalm Setup`}),A(e,t)});var Yt=s(Jt),Xt=s(Yt),Zt=e=>{A(e,pr())};n(Xt,e=>{c(qt)&&e(Zt)});var Qt=_(Xt,2),$t=_(s(Qt),2),en=_(s($t)),nn=s(en,!0);j(en),j($t),j(Qt);var rn=_(Qt,2),an=s(rn),on=e=>{se(e,{get currentStep(){return c(i)},get maxVisitedStep(){return c(o)},onnavigate:$,canNavigateTo:lt})};n(an,e=>{c(l)||e(on)});var sn=_(an,2),cn=e=>{var t=mr(),n=s(t),r=s(n,!0);j(n),j(t),a(()=>d(r,c(J))),A(e,t)};n(sn,e=>{!c(l)&&c(J)&&(c(i)===2||c(i)===3)&&e(cn)});var ln=_(sn,2),un=e=>{dr(e,{get deployData(){return c(we)},get deployDone(){return c(Ee)},get deployHasWarnings(){return c(De)},get deployError(){return c(Oe)},onback:Bt,onretry:zt})},fn=e=>{var t=hr();Te(s(t),{get isRerun(){return c(qt)},onpass:()=>{p(u,!0)},onnext:()=>{p(u,!0),$(1)},ongpudetected:e=>{if(p(w,!0),c(ue).length>0&&c(Q)!==Ke(`voice`,`cuda`)){let e=c(ue).find(e=>e.id===Ke(`voice`,`cuda`)&&e.available!==!1);e&&p(Q,e.id,!0)}}}),j(t),A(e,t)},pn=e=>{var t=gr();Me(s(t),{get errorMessage(){return c(m)},get detectionReady(){return c(v)},get autoModeImporting(){return c(b)},get recommendation(){return c(te)},get recommendationFetched(){return c(tt)},onnext:()=>{$e()&&$(2)},onusedefaults:()=>{$e()&&it()}}),j(t),A(e,t)},mn=e=>{var t=_r(),n=s(t);{let e=L(()=>c(Ie)||c(K));Vt(n,{get hostImporting(){return c(Ut)},get opencodeAvailable(){return c(R)},get opencodeProviders(){return c(z)},get opencodeAuth(){return c(B)},get providerState(){return c(T)},get expandedProvider(){return c(M)},get detectedProviders(){return c(N)},get detecting(){return c(I)},get ocFilterQuery(){return c(H)},get verifiedCount(){return c(Ne)},get hostProviderCount(){return c(U)},get hostStatusWarning(){return c(G)},get allowEmptyInstall(){return c(K)},get canProceed(){return c(e)},onback:()=>$(1),onnext:()=>$(3),ontogglefallback:Dt,ontoggleopencode:Ot,onverify:jt,onapikey:Mt,onbaseurl:Nt,onollamamode:Pt,onoauthstart:xt,onoauthcancel:e=>{let t=ae[e];t&&(t.abort(),delete ae[e]);let n=c(T)[e];n&&(n.oauthPolling=!1,n.verifying=!1)},onmarkready:At,ondeselect:kt,onfilterchange:e=>p(H,e,!0),onhostimport:()=>void Kt(),onallowemptyinstallchange:e=>p(K,e,!0)})}j(t),A(e,t)},hn=e=>{var t=yr(),r=s(t),i=e=>{var t=vr(),n=s(t),r=s(n,!0);j(n),j(t),a(()=>d(r,c(ce))),A(e,t)};n(r,e=>{c(ce)&&e(i)}),tn(_(r,2),{get verifiedProviders(){return c(Pe)},get providerState(){return c(T)},get modelSelection(){return X},get allowEmptyInstall(){return c(K)},get canComplete(){return c(Le)},get errorMessage(){return c(oe)},onback:()=>$(2),onnext:()=>{st()&&$(4)},onselect:Lt,onselectnone:Rt}),j(t),A(e,t)},gn=e=>{var t=br();dn(s(t),{get tts(){return c(Be)},get stt(){return c(Ve)},get hasOpenAI(){return c(Re)},get unknownTts(){return c(Y)},get unknownStt(){return c(re)},get profiles(){return c(ue)},get selectedVoiceProfile(){return c(Q)},onback:()=>$(3),onnext:()=>$(5),onchangetts:e=>{p(le,e,!0),p(Y,!1),p(x,c(le).engine===`openpalm-voice`||c(Z).engine===`openpalm-voice`,!0)},onchangestt:e=>{p(Z,e,!0),p(re,!1),p(x,c(le).engine===`openpalm-voice`||c(Z).engine===`openpalm-voice`,!0)},onprofilechange:e=>{p(Q,e,!0)}}),j(t),A(e,t)},_n=e=>{var t=xr();Dn(s(t),{get channelSelection(){return pe},get imageTag(){return c(_e)},get hostAkmEnabled(){return c(ve)},get hostAkmAvailable(){return c(ye)},get enableVoice(){return c(x)},get voiceProfiles(){return c(ue)},get selectedVoiceProfile(){return c(Q)},get ollamaEnabled(){return c(me)},get ollamaProfiles(){return c(he)},get selectedOllamaProfile(){return c(ge)},get hostLocalRunning(){return c(k)},get errorMessage(){return c(be)},onback:()=>$(4),onnext:()=>{ct()&&$(6)},onchanneltoggle:Ft,oncredentialchange:It,onimagtagchange:e=>p(_e,e,!0),onhostakmchange:e=>p(ve,e,!0),onenablevoicechange:at,onvoiceprofilechange:e=>{p(Q,e,!0)},onollamachange:ot,onollamaprofilechange:e=>{p(ge,e,!0)}}),j(t),A(e,t)},vn=e=>{var t=Sr();Wn(s(t),{get uiLoginPassword(){return c(f)},get verifiedProviders(){return c(Pe)},get modelSelection(){return X},get activeTts(){return c(He).engine},get activeStt(){return c(Ue).engine},get voiceProfileLabel(){return c(We)},get ollamaProfileLabel(){return c(Ge)},get channelSelection(){return pe},get ollamaEnabled(){return c(me)},get payload(){return c(qe)},get installError(){return c(xe)},get installing(){return c(Se)},get isRerun(){return c(qt)},onback:()=>$(5),oninstall:Ct,ongostepedit:$}),j(t),A(e,t)};n(ln,e=>{c(l)?e(un):c(i)===0?e(fn,1):c(i)===1?e(pn,2):c(i)===2?e(mn,3):c(i)===3?e(hn,4):c(i)===4?e(gn,5):c(i)===5?e(_n,6):c(i)===6&&e(vn,7)}),j(rn),j(Yt),j(Jt),a(()=>d(nn,c(qt)?`Update Settings`:`Setup`)),A(t,Jt),O()}export{wr as component};
@@ -1,9 +0,0 @@
1
- const index = 1;
2
- let component_cache;
3
- const component = async () => component_cache ??= (await import('./error.svelte-D4IIBHJA.js')).default;
4
- const imports = ["_app/immutable/nodes/1.D_t9eVLg.js","_app/immutable/chunks/0swOyi-5.js","_app/immutable/chunks/BbsmUDEz.js","_app/immutable/chunks/7Y-z2Cs4.js","_app/immutable/chunks/CymRgjIC.js","_app/immutable/chunks/xihTtKlq.js"];
5
- const stylesheets = [];
6
- const fonts = [];
7
-
8
- export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=1-BTD70sT7.js.map
@@ -1,9 +0,0 @@
1
- const index = 4;
2
- let component_cache;
3
- const component = async () => component_cache ??= (await import('./_page.svelte-D-uhfsj5.js')).default;
4
- const imports = ["_app/immutable/nodes/4.rszAmyBN.js","_app/immutable/chunks/0swOyi-5.js","_app/immutable/chunks/7Y-z2Cs4.js","_app/immutable/chunks/CymRgjIC.js","_app/immutable/chunks/DBtofX2R.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/BBdT9Cjm.js","_app/immutable/chunks/BxIEEPV3.js","_app/immutable/chunks/BbsmUDEz.js","_app/immutable/chunks/BQ0vnNWj.js","_app/immutable/chunks/jhtvkF_A.js"];
5
- const stylesheets = ["_app/immutable/assets/Spinner.BtzHSsat.css","_app/immutable/assets/Navbar.Bnqciy-R.css","_app/immutable/assets/VoiceProfileSelector.rd8K9qqK.css","_app/immutable/assets/4.B_s_XYKm.css"];
6
- const fonts = [];
7
-
8
- export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=4-CubOOlWA.js.map
@@ -1,9 +0,0 @@
1
- const index = 5;
2
- let component_cache;
3
- const component = async () => component_cache ??= (await import('./_page.svelte-4qKAK6Tb.js')).default;
4
- const imports = ["_app/immutable/nodes/5.B5KOuICr.js","_app/immutable/chunks/0swOyi-5.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/BBdT9Cjm.js","_app/immutable/chunks/BxIEEPV3.js","_app/immutable/chunks/7Y-z2Cs4.js","_app/immutable/chunks/CymRgjIC.js","_app/immutable/chunks/DBtofX2R.js","_app/immutable/chunks/BbsmUDEz.js","_app/immutable/chunks/BQ0vnNWj.js"];
5
- const stylesheets = ["_app/immutable/assets/Spinner.BtzHSsat.css","_app/immutable/assets/Navbar.Bnqciy-R.css","_app/immutable/assets/5.Cj0Mk9Gn.css"];
6
- const fonts = [];
7
-
8
- export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=5-C5D5O8w1.js.map
@@ -1,9 +0,0 @@
1
- const index = 7;
2
- let component_cache;
3
- const component = async () => component_cache ??= (await import('./_page.svelte-D7VlbGXj.js')).default;
4
- const imports = ["_app/immutable/nodes/7.ockxnYPK.js","_app/immutable/chunks/0swOyi-5.js","_app/immutable/chunks/7Y-z2Cs4.js","_app/immutable/chunks/CymRgjIC.js","_app/immutable/chunks/DBtofX2R.js","_app/immutable/chunks/BbsmUDEz.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/BBdT9Cjm.js","_app/immutable/chunks/BxIEEPV3.js","_app/immutable/chunks/BQ0vnNWj.js"];
5
- const stylesheets = ["_app/immutable/assets/Spinner.BtzHSsat.css","_app/immutable/assets/Navbar.Bnqciy-R.css","_app/immutable/assets/7.DKl0e2Fb.css"];
6
- const fonts = [];
7
-
8
- export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=7-jdfP4oIc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts-B4p_jHqU.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/setup/import-host/_server.ts.js"],"sourcesContent":["import { r as json } from \"../../../../../chunks/exports.js\";\nimport { D as checkDocker, E as buildComposeOptions, kt as authJsonPath, n as importHostOpenCode, t as detectHostOpenCode } from \"../../../../../chunks/src.js\";\nimport { c as getState } from \"../../../../../chunks/endpoints.js\";\nimport { t as opencodeFetch } from \"../../../../../chunks/http.js\";\nimport { t as composeRestart } from \"../../../../../chunks/docker.js\";\nimport { existsSync, readFileSync } from \"node:fs\";\n//#region src/routes/api/setup/import-host/+server.ts\n/**\n* POST /api/setup/import-host\n*\n* Setup-phase equivalent of POST /admin/providers/import-host.\n* No admin auth required — the admin token hasn't been written yet during setup.\n*\n* Copies host OpenCode config + auth into OP_HOME and live-pushes credentials\n* to the running OpenCode subprocess so providers appear connected immediately.\n*/\nasync function pushAuthToOpenCode(authPath) {\n\tlet raw;\n\ttry {\n\t\traw = JSON.parse(readFileSync(authPath, \"utf-8\"));\n\t} catch (err) {\n\t\treturn {\n\t\t\tpushed: [],\n\t\t\terrors: [{\n\t\t\t\tprovider: \"*\",\n\t\t\t\terror: `Could not read auth.json: ${err instanceof Error ? err.message : String(err)}`\n\t\t\t}]\n\t\t};\n\t}\n\tif (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return {\n\t\tpushed: [],\n\t\terrors: [{\n\t\t\tprovider: \"*\",\n\t\t\terror: \"auth.json is not a JSON object\"\n\t\t}]\n\t};\n\tconst pushed = [];\n\tconst errors = [];\n\tfor (const [providerId, value] of Object.entries(raw)) try {\n\t\tawait opencodeFetch(`/auth/${encodeURIComponent(providerId)}`, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody: JSON.stringify(value)\n\t\t});\n\t\tpushed.push(providerId);\n\t} catch (err) {\n\t\terrors.push({\n\t\t\tprovider: providerId,\n\t\t\terror: err instanceof Error ? err.message : String(err)\n\t\t});\n\t}\n\treturn {\n\t\tpushed,\n\t\terrors\n\t};\n}\n/** Restart provider-consuming services so they re-read imported startup config. */\nasync function restartProviderConsumers(state) {\n\tconst services = [\"assistant\"];\n\tif (!(await checkDocker()).ok) return {\n\t\trestarted: [],\n\t\tfailed: services.map((s) => ({\n\t\t\tservice: s,\n\t\t\terror: \"docker unavailable\"\n\t\t}))\n\t};\n\tconst opts = buildComposeOptions(state);\n\tconst restarted = [];\n\tconst failed = [];\n\tfor (const service of services) try {\n\t\tconst r = await composeRestart([service], opts);\n\t\tif (r.ok) restarted.push(service);\n\t\telse failed.push({\n\t\t\tservice,\n\t\t\terror: r.stderr || `exit ${r.code}`\n\t\t});\n\t} catch (err) {\n\t\tfailed.push({\n\t\t\tservice,\n\t\t\terror: err instanceof Error ? err.message : String(err)\n\t\t});\n\t}\n\treturn {\n\t\trestarted,\n\t\tfailed\n\t};\n}\n/** Read the provider ids present in an auth.json, ignoring read/parse errors. */\nfunction providerIdsFromAuth(authPath) {\n\ttry {\n\t\tconst raw = JSON.parse(readFileSync(authPath, \"utf-8\"));\n\t\tif (raw && typeof raw === \"object\" && !Array.isArray(raw)) return Object.keys(raw);\n\t} catch {}\n\treturn [];\n}\nvar POST = async () => {\n\tconst state = getState();\n\tlet result;\n\ttry {\n\t\tresult = importHostOpenCode(state, { overwriteConflicts: false });\n\t} catch (err) {\n\t\treturn json({\n\t\t\tok: false,\n\t\t\terror: `Could not copy host OpenCode config: ${err instanceof Error ? err.message : String(err)}`\n\t\t}, { status: 500 });\n\t}\n\tconst hostStatus = detectHostOpenCode();\n\tconst importedAuthPath = authJsonPath(state);\n\tconst authPathToUse = existsSync(importedAuthPath) ? importedAuthPath : hostStatus.authPath ?? null;\n\tconst importedProviderIds = authPathToUse ? providerIdsFromAuth(authPathToUse) : [];\n\tlet pushResult = {\n\t\tpushed: [],\n\t\terrors: []\n\t};\n\tif (authPathToUse) pushResult = await pushAuthToOpenCode(authPathToUse);\n\tconst restart = await restartProviderConsumers(state);\n\treturn json({\n\t\tok: true,\n\t\timported: result.imported,\n\t\timportedProviders: importedProviderIds,\n\t\tconflicts: result.conflicts.length,\n\t\tlivePushed: pushResult.pushed.length,\n\t\tpushedProviders: pushResult.pushed,\n\t\terrors: pushResult.errors,\n\t\trestarted: restart.restarted,\n\t\trestartFailed: restart.failed\n\t});\n};\n//#endregion\nexport { POST };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts-CAycEHO4.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/setup/recommend/_server.ts.js"],"sourcesContent":["import { r as json } from \"../../../../../chunks/exports.js\";\nimport { It as resolveStackDir, Z as isSetupComplete, c as detectGpu, kt as authJsonPath, l as detectLocalProviders, s as recommendSetup, zt as PROVIDER_KEY_MAP } from \"../../../../../chunks/src.js\";\nimport { c as getState } from \"../../../../../chunks/endpoints.js\";\nimport { a as getOpenCodeClient, f as requireAdmin, o as getRequestId } from \"../../../../../chunks/helpers.js\";\nimport { existsSync, readFileSync } from \"node:fs\";\n//#region src/routes/api/setup/recommend/+server.ts\n/** Local providers are detected separately as host providers — exclude from \"cloud\". */\nvar LOCAL_PROVIDER_IDS = new Set([\n\t\"ollama\",\n\t\"lmstudio\",\n\t\"model-runner\",\n\t\"openai-compatible\"\n]);\n/** Providers that have credentials stored in OP_HOME auth.json (API key or OAuth). */\nfunction authJsonConnected() {\n\ttry {\n\t\tconst path = authJsonPath(getState());\n\t\tif (!existsSync(path)) return [];\n\t\tconst data = JSON.parse(readFileSync(path, \"utf-8\"));\n\t\treturn Object.keys(data ?? {});\n\t} catch {\n\t\treturn [];\n\t}\n}\n/** Fallback: providers whose API-key env var is present in the process env. */\nfunction envKeyConnected() {\n\tconst out = [];\n\tfor (const [provider, envVar] of Object.entries(PROVIDER_KEY_MAP)) if (process.env[envVar]) out.push(provider);\n\treturn out;\n}\n/** Cloud providers = OpenCode connected[] ∪ auth.json credentials, minus locals.\n* Falls back to env-key detection when OpenCode is unavailable. */\nasync function detectCloudProviders() {\n\tlet connected = [];\n\ttry {\n\t\tconst client = getOpenCodeClient();\n\t\tif (await client.isAvailable()) {\n\t\t\tconst catalog = await client.proxy(\"/provider\");\n\t\t\tconst raw = catalog.ok ? catalog.data : {};\n\t\t\tconnected = Array.from(new Set([...raw.connected ?? [], ...authJsonConnected()]));\n\t\t} else connected = Array.from(new Set([...authJsonConnected(), ...envKeyConnected()]));\n\t} catch {\n\t\tconnected = Array.from(new Set([...authJsonConnected(), ...envKeyConnected()]));\n\t}\n\treturn connected.filter((id) => !LOCAL_PROVIDER_IDS.has(id));\n}\nvar GET = async (event) => {\n\tif (isSetupComplete(resolveStackDir())) {\n\t\tconst authError = requireAdmin(event, getRequestId(event));\n\t\tif (authError) return authError;\n\t}\n\tconst [cloudProviders, gpu, localDetections] = await Promise.all([\n\t\tdetectCloudProviders(),\n\t\tdetectGpu(),\n\t\tdetectLocalProviders()\n\t]);\n\tconst hostProviders = localDetections.filter((p) => p.available).map((p) => ({\n\t\tprovider: p.provider,\n\t\turl: p.url\n\t}));\n\treturn json({\n\t\tok: true,\n\t\trecommendation: recommendSetup({\n\t\t\tcloudProviders,\n\t\t\thostProviders,\n\t\t\tgpu\n\t\t}),\n\t\tgpu,\n\t\tcloudProviders,\n\t\thostProviders\n\t});\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts-kVbBWaDD.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/setup/current-config/_server.ts.js"],"sourcesContent":["import { r as json } from \"../../../../../chunks/exports.js\";\nimport { at as getAddonProfileSelection, ot as getAddonProfiles, rt as annotateAddonProfileAvailability, ut as listEnabledAddonIds, xt as readStackSecretEnv, yt as readStackEnv } from \"../../../../../chunks/src.js\";\nimport { c as getState } from \"../../../../../chunks/endpoints.js\";\nimport { f as requireAdmin, o as getRequestId, s as getUiLoginPassword } from \"../../../../../chunks/helpers.js\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n//#region src/routes/api/setup/current-config/+server.ts\nfunction readAkmConfig(configDir) {\n\tconst path = join(configDir, \"akm\", \"config.json\");\n\tif (!existsSync(path)) return {};\n\ttry {\n\t\treturn JSON.parse(readFileSync(path, \"utf-8\"));\n\t} catch {\n\t\treturn {};\n\t}\n}\nfunction deriveBaseUrl(endpoint) {\n\tif (!endpoint) return \"\";\n\treturn endpoint.replace(/\\/chat\\/completions\\/?$/, \"\").replace(/\\/embeddings\\/?$/, \"\").replace(/\\/+$/, \"\");\n}\nvar GET = async (event) => {\n\tconst authError = requireAdmin(event, getRequestId(event));\n\tif (authError) return authError;\n\tconst state = getState();\n\tconst configured = getUiLoginPassword();\n\tconst env = readStackEnv(state.stackDir);\n\tconst secretEnv = readStackSecretEnv(state.stackDir);\n\tconst akm = readAkmConfig(state.configDir);\n\tconst voiceProfiles = await annotateAddonProfileAvailability(getAddonProfiles(state.homeDir, \"voice\"));\n\tconst selectedVoiceProfile = getAddonProfileSelection(state.stackDir, \"voice\");\n\tconst ollamaProfiles = await annotateAddonProfileAvailability(getAddonProfiles(state.homeDir, \"ollama\"));\n\tconst selectedOllamaProfile = getAddonProfileSelection(state.stackDir, \"ollama\");\n\tconst hostHome = process.env.HOME ?? process.env.USERPROFILE ?? \"\";\n\tconst hostAkm = !!hostHome && env.OP_AKM_STASH === `${hostHome}/akm` && env.OP_AKM_CONFIG === `${hostHome}/.config/akm`;\n\tconst meta = (envKey) => ({\n\t\tenvKey,\n\t\tpresent: Boolean(secretEnv[envKey])\n\t});\n\tconst discord = {};\n\tfor (const [field, envKey] of Object.entries({\n\t\tbotToken: \"DISCORD_BOT_TOKEN\",\n\t\tapplicationId: \"DISCORD_APPLICATION_ID\",\n\t\tregisterCommands: \"DISCORD_REGISTER_COMMANDS\",\n\t\tallowedGuilds: \"DISCORD_ALLOWED_GUILDS\",\n\t\tallowedRoles: \"DISCORD_ALLOWED_ROLES\",\n\t\tallowedUsers: \"DISCORD_ALLOWED_USERS\",\n\t\tblockedUsers: \"DISCORD_BLOCKED_USERS\"\n\t})) if (secretEnv[envKey]) discord[field] = meta(envKey);\n\tconst slack = {};\n\tfor (const [field, envKey] of Object.entries({\n\t\tslackBotToken: \"SLACK_BOT_TOKEN\",\n\t\tslackAppToken: \"SLACK_APP_TOKEN\",\n\t\tallowedChannels: \"SLACK_ALLOWED_CHANNELS\",\n\t\tallowedUsers: \"SLACK_ALLOWED_USERS\",\n\t\tblockedUsers: \"SLACK_BLOCKED_USERS\"\n\t})) if (secretEnv[envKey]) slack[field] = meta(envKey);\n\tconst channelCredentials = {};\n\tif (Object.keys(discord).length > 0) channelCredentials.discord = discord;\n\tif (Object.keys(slack).length > 0) channelCredentials.slack = slack;\n\treturn json({\n\t\tok: true,\n\t\thasPassword: typeof configured === \"string\" && configured.length > 0,\n\t\timageTag: env.OP_IMAGE_TAG ?? \"\",\n\t\thostAkm,\n\t\tllm: akm.llm ? {\n\t\t\tprovider: akm.llm.provider ?? \"\",\n\t\t\tmodel: akm.llm.model ?? \"\",\n\t\t\tbaseUrl: deriveBaseUrl(akm.llm.endpoint)\n\t\t} : null,\n\t\tembedding: akm.embedding ? {\n\t\t\tprovider: akm.embedding.provider ?? \"\",\n\t\t\tmodel: akm.embedding.model ?? \"\",\n\t\t\tdims: akm.embedding.dimension ?? 0,\n\t\t\tbaseUrl: deriveBaseUrl(akm.embedding.endpoint)\n\t\t} : null,\n\t\tvoice: {\n\t\t\ttts: {\n\t\t\t\tengine: env.OP_TTS_ENGINE ?? \"\",\n\t\t\t\tbaseURL: env.OP_TTS_BASE_URL ?? \"\",\n\t\t\t\tmodel: env.OP_TTS_MODEL ?? \"\",\n\t\t\t\tvoice: env.OP_TTS_VOICE ?? \"\"\n\t\t\t},\n\t\t\tstt: {\n\t\t\t\tengine: env.OP_STT_ENGINE ?? \"\",\n\t\t\t\tbaseURL: env.OP_STT_BASE_URL ?? \"\",\n\t\t\t\tmodel: env.OP_STT_MODEL ?? \"\",\n\t\t\t\tlanguage: env.OP_STT_LANGUAGE ?? \"\"\n\t\t\t},\n\t\t\tprofiles: voiceProfiles,\n\t\t\tselectedProfile: selectedVoiceProfile\n\t\t},\n\t\tollama: {\n\t\t\tprofiles: ollamaProfiles,\n\t\t\tselectedProfile: selectedOllamaProfile\n\t\t},\n\t\tenabledAddons: listEnabledAddonIds(state.homeDir),\n\t\tchannelCredentials\n\t});\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
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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"}