@openpalm/ui 0.13.0-beta.7 → 0.13.0-beta.8

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 (433) hide show
  1. package/README.md +3 -2
  2. package/build/.openpalm-ui-version +1 -1
  3. package/build/client/_app/immutable/assets/7.DHMKw-HL.css +1 -0
  4. package/build/client/_app/immutable/assets/7.DHMKw-HL.css.br +0 -0
  5. package/build/client/_app/immutable/assets/7.DHMKw-HL.css.gz +0 -0
  6. package/build/client/_app/immutable/assets/9.CmCaAuiy.css +1 -0
  7. package/build/client/_app/immutable/assets/9.CmCaAuiy.css.br +0 -0
  8. package/build/client/_app/immutable/assets/9.CmCaAuiy.css.gz +0 -0
  9. package/build/client/_app/immutable/chunks/{BE_4J5sS.js → B9uMOgDZ.js} +2 -2
  10. package/build/client/_app/immutable/chunks/B9uMOgDZ.js.br +0 -0
  11. package/build/client/_app/immutable/chunks/B9uMOgDZ.js.gz +0 -0
  12. package/build/client/_app/immutable/chunks/BwKrb5qD.js +1 -0
  13. package/build/client/_app/immutable/chunks/BwKrb5qD.js.br +2 -0
  14. package/build/client/_app/immutable/chunks/BwKrb5qD.js.gz +0 -0
  15. package/build/client/_app/immutable/chunks/{mNzUu332.js → C092q_Hl.js} +1 -1
  16. package/build/client/_app/immutable/chunks/C092q_Hl.js.br +0 -0
  17. package/build/client/_app/immutable/chunks/C092q_Hl.js.gz +0 -0
  18. package/build/client/_app/immutable/chunks/C7g46Pjm.js +1 -0
  19. package/build/client/_app/immutable/chunks/C7g46Pjm.js.br +0 -0
  20. package/build/client/_app/immutable/chunks/C7g46Pjm.js.gz +0 -0
  21. package/build/client/_app/immutable/chunks/{CuKFR3Qo.js → CR3nChHO.js} +2 -2
  22. package/build/client/_app/immutable/chunks/CR3nChHO.js.br +0 -0
  23. package/build/client/_app/immutable/chunks/CR3nChHO.js.gz +0 -0
  24. package/build/client/_app/immutable/chunks/{Clt9pCG1.js → CXv_deBx.js} +1 -1
  25. package/build/client/_app/immutable/chunks/CXv_deBx.js.br +0 -0
  26. package/build/client/_app/immutable/chunks/CXv_deBx.js.gz +0 -0
  27. package/build/client/_app/immutable/chunks/D-DB6zTo.js +9 -0
  28. package/build/client/_app/immutable/chunks/D-DB6zTo.js.br +0 -0
  29. package/build/client/_app/immutable/chunks/D-DB6zTo.js.gz +0 -0
  30. package/build/client/_app/immutable/chunks/DDSqq1hR.js +1 -0
  31. package/build/client/_app/immutable/chunks/DDSqq1hR.js.br +0 -0
  32. package/build/client/_app/immutable/chunks/DDSqq1hR.js.gz +0 -0
  33. package/build/client/_app/immutable/chunks/d1cxvUgj.js +1 -0
  34. package/build/client/_app/immutable/chunks/d1cxvUgj.js.br +0 -0
  35. package/build/client/_app/immutable/chunks/d1cxvUgj.js.gz +0 -0
  36. package/build/client/_app/immutable/chunks/{BdIq5WIo.js → qrqTdjh7.js} +1 -1
  37. package/build/client/_app/immutable/chunks/qrqTdjh7.js.br +0 -0
  38. package/build/client/_app/immutable/chunks/qrqTdjh7.js.gz +0 -0
  39. package/build/client/_app/immutable/entry/{app.DKG33-gU.js → app.CXHi3StM.js} +2 -2
  40. package/build/client/_app/immutable/entry/app.CXHi3StM.js.br +0 -0
  41. package/build/client/_app/immutable/entry/app.CXHi3StM.js.gz +0 -0
  42. package/build/client/_app/immutable/entry/start.eS_-xLIC.js +1 -0
  43. package/build/client/_app/immutable/entry/start.eS_-xLIC.js.br +1 -0
  44. package/build/client/_app/immutable/entry/start.eS_-xLIC.js.gz +0 -0
  45. package/build/client/_app/immutable/nodes/{0.eA5H3idZ.js → 0.Bfv0aXoG.js} +1 -1
  46. package/build/client/_app/immutable/nodes/0.Bfv0aXoG.js.br +0 -0
  47. package/build/client/_app/immutable/nodes/0.Bfv0aXoG.js.gz +0 -0
  48. package/build/client/_app/immutable/nodes/{1.CvKFymDh.js → 1.B8Ebge5I.js} +1 -1
  49. package/build/client/_app/immutable/nodes/1.B8Ebge5I.js.br +0 -0
  50. package/build/client/_app/immutable/nodes/1.B8Ebge5I.js.gz +0 -0
  51. package/build/client/_app/immutable/nodes/{10.DFMf8WUQ.js → 10.Di4b61Rb.js} +1 -1
  52. package/build/client/_app/immutable/nodes/10.Di4b61Rb.js.br +0 -0
  53. package/build/client/_app/immutable/nodes/10.Di4b61Rb.js.gz +0 -0
  54. package/build/client/_app/immutable/nodes/11.CUlazdDv.js +8 -0
  55. package/build/client/_app/immutable/nodes/11.CUlazdDv.js.br +0 -0
  56. package/build/client/_app/immutable/nodes/11.CUlazdDv.js.gz +0 -0
  57. package/build/client/_app/immutable/nodes/4.DQOL0qY_.js +1 -0
  58. package/build/client/_app/immutable/nodes/4.DQOL0qY_.js.br +0 -0
  59. package/build/client/_app/immutable/nodes/4.DQOL0qY_.js.gz +0 -0
  60. package/build/client/_app/immutable/nodes/{5.bgdUYUlr.js → 5.BGqmDWpO.js} +1 -1
  61. package/build/client/_app/immutable/nodes/5.BGqmDWpO.js.br +0 -0
  62. package/build/client/_app/immutable/nodes/5.BGqmDWpO.js.gz +0 -0
  63. package/build/client/_app/immutable/nodes/6.Cf2kRGl-.js +2 -0
  64. package/build/client/_app/immutable/nodes/6.Cf2kRGl-.js.br +0 -0
  65. package/build/client/_app/immutable/nodes/6.Cf2kRGl-.js.gz +0 -0
  66. package/build/client/_app/immutable/nodes/7.CvaILUo5.js +16 -0
  67. package/build/client/_app/immutable/nodes/7.CvaILUo5.js.br +0 -0
  68. package/build/client/_app/immutable/nodes/7.CvaILUo5.js.gz +0 -0
  69. package/build/client/_app/immutable/nodes/9.DvOR66Q0.js +128 -0
  70. package/build/client/_app/immutable/nodes/9.DvOR66Q0.js.br +0 -0
  71. package/build/client/_app/immutable/nodes/9.DvOR66Q0.js.gz +0 -0
  72. package/build/client/_app/version.json +1 -1
  73. package/build/client/_app/version.json.br +1 -1
  74. package/build/client/_app/version.json.gz +0 -0
  75. package/build/server/chunks/{0-D9FIO-Bk.js → 0-D8UAPThv.js} +12 -6
  76. package/build/server/chunks/0-D8UAPThv.js.map +1 -0
  77. package/build/server/chunks/1-bS23Eg-d.js +9 -0
  78. package/build/server/chunks/{1-ItPJxTHP.js.map → 1-bS23Eg-d.js.map} +1 -1
  79. package/build/server/chunks/{10-B4fDiATl.js → 10-C5TUqG1t.js} +3 -3
  80. package/build/server/chunks/{10-B4fDiATl.js.map → 10-C5TUqG1t.js.map} +1 -1
  81. package/build/server/chunks/11-DSjZgp33.js +9 -0
  82. package/build/server/chunks/11-DSjZgp33.js.map +1 -0
  83. package/build/server/chunks/{3-DpC38K23.js → 3-D0iTJ9v2.js} +6 -6
  84. package/build/server/chunks/{3-DpC38K23.js.map → 3-D0iTJ9v2.js.map} +1 -1
  85. package/build/server/chunks/{4-DrJ64j1x.js → 4-CHJRF8qs.js} +3 -3
  86. package/build/server/chunks/{4-DrJ64j1x.js.map → 4-CHJRF8qs.js.map} +1 -1
  87. package/build/server/chunks/{5-BxzwX0rY.js → 5-CwCiwnFt.js} +3 -3
  88. package/build/server/chunks/{5-BxzwX0rY.js.map → 5-CwCiwnFt.js.map} +1 -1
  89. package/build/server/chunks/6-raswytzE.js +9 -0
  90. package/build/server/chunks/{6-DxXeT1e3.js.map → 6-raswytzE.js.map} +1 -1
  91. package/build/server/chunks/7-NC4-KlW9.js +9 -0
  92. package/build/server/chunks/7-NC4-KlW9.js.map +1 -0
  93. package/build/server/chunks/9-rIsHxfiY.js +9 -0
  94. package/build/server/chunks/9-rIsHxfiY.js.map +1 -0
  95. package/build/server/chunks/{ChatNavbar-CJYo_Hbc.js → ChatNavbar-DqdxDR5U.js} +9 -9
  96. package/build/server/chunks/{ChatNavbar-CJYo_Hbc.js.map → ChatNavbar-DqdxDR5U.js.map} +1 -1
  97. package/build/server/chunks/IconMic-CZN60P6B.js +10 -0
  98. package/build/server/chunks/IconMic-CZN60P6B.js.map +1 -0
  99. package/build/server/chunks/{IconServer-DkywyVFu.js → IconServer-BwcRjcsS.js} +4 -4
  100. package/build/server/chunks/{IconServer-DkywyVFu.js.map → IconServer-BwcRjcsS.js.map} +1 -1
  101. package/build/server/chunks/{IconSoundOn-DoAiK-qp.js → IconSoundOn-DTZuBn2-.js} +4 -4
  102. package/build/server/chunks/{IconSoundOn-DoAiK-qp.js.map → IconSoundOn-DTZuBn2-.js.map} +1 -1
  103. package/build/server/chunks/{IconStop-DKVpXPKq.js → IconStop-BxUfqTaV.js} +114 -847
  104. package/build/server/chunks/IconStop-BxUfqTaV.js.map +1 -0
  105. package/build/server/chunks/{QuestionCard-BCfoxMiS.js → QuestionCard-DOLuSSbI.js} +2 -2
  106. package/build/server/chunks/{QuestionCard-BCfoxMiS.js.map → QuestionCard-DOLuSSbI.js.map} +1 -1
  107. package/build/server/chunks/Spinner-2WZW6r_I.js +12 -0
  108. package/build/server/chunks/Spinner-2WZW6r_I.js.map +1 -0
  109. package/build/server/chunks/{_layout.svelte-DArOWGd3.js → _layout.svelte-CBBWJ3m3.js} +2 -3
  110. package/build/server/chunks/{_layout.svelte-DArOWGd3.js.map → _layout.svelte-CBBWJ3m3.js.map} +1 -1
  111. package/build/server/chunks/{_page.svelte-S90xJHRa.js → _page.svelte-CYzntFY4.js} +10 -10
  112. package/build/server/chunks/{_page.svelte-S90xJHRa.js.map → _page.svelte-CYzntFY4.js.map} +1 -1
  113. package/build/server/chunks/{_page.svelte-CGEtuNmS.js → _page.svelte-CysG6Te2.js} +13 -13
  114. package/build/server/chunks/_page.svelte-CysG6Te2.js.map +1 -0
  115. package/build/server/chunks/{_page.svelte-Dpf94Jor.js → _page.svelte-D-_cPU8e.js} +3 -3
  116. package/build/server/chunks/{_page.svelte-Dpf94Jor.js.map → _page.svelte-D-_cPU8e.js.map} +1 -1
  117. package/build/server/chunks/{_page.svelte-qxgG6hsh.js → _page.svelte-D4hOWjfm.js} +61 -351
  118. package/build/server/chunks/_page.svelte-D4hOWjfm.js.map +1 -0
  119. package/build/server/chunks/_page.svelte-D9au75wl.js +183 -0
  120. package/build/server/chunks/_page.svelte-D9au75wl.js.map +1 -0
  121. package/build/server/chunks/{_page.svelte-FOm-OMQe.js → _page.svelte-DjldYxQn.js} +25 -133
  122. package/build/server/chunks/_page.svelte-DjldYxQn.js.map +1 -0
  123. package/build/server/chunks/{_page.svelte-B2cX_j9w.js → _page.svelte-DsJgu4mW.js} +3 -3
  124. package/build/server/chunks/{_page.svelte-B2cX_j9w.js.map → _page.svelte-DsJgu4mW.js.map} +1 -1
  125. package/build/server/chunks/_server.ts-1qbl_1NY.js +87 -0
  126. package/build/server/chunks/_server.ts-1qbl_1NY.js.map +1 -0
  127. package/build/server/chunks/{_server.ts-DQI9hYcE.js → _server.ts-2VPdIZFH.js} +6 -6
  128. package/build/server/chunks/{_server.ts-DQI9hYcE.js.map → _server.ts-2VPdIZFH.js.map} +1 -1
  129. package/build/server/chunks/{_server.ts-C5T_Zuoy.js → _server.ts-68MuZYx_.js} +7 -7
  130. package/build/server/chunks/{_server.ts-C5T_Zuoy.js.map → _server.ts-68MuZYx_.js.map} +1 -1
  131. package/build/server/chunks/{_server.ts-Cph8nHvr.js → _server.ts-8AfutA1j.js} +6 -6
  132. package/build/server/chunks/{_server.ts-Cph8nHvr.js.map → _server.ts-8AfutA1j.js.map} +1 -1
  133. package/build/server/chunks/{_server.ts-ZKEBn-qW.js → _server.ts-B-5y1hA4.js} +8 -8
  134. package/build/server/chunks/{_server.ts-ZKEBn-qW.js.map → _server.ts-B-5y1hA4.js.map} +1 -1
  135. package/build/server/chunks/{_server.ts-Cjo35hc1.js → _server.ts-B1CunPF7.js} +6 -6
  136. package/build/server/chunks/{_server.ts-Cjo35hc1.js.map → _server.ts-B1CunPF7.js.map} +1 -1
  137. package/build/server/chunks/{_server.ts-DYLc6Os9.js → _server.ts-B1KGSkdl.js} +6 -6
  138. package/build/server/chunks/{_server.ts-DYLc6Os9.js.map → _server.ts-B1KGSkdl.js.map} +1 -1
  139. package/build/server/chunks/{_server.ts-B_7lGoo_.js → _server.ts-B2NALEcR.js} +6 -6
  140. package/build/server/chunks/{_server.ts-B_7lGoo_.js.map → _server.ts-B2NALEcR.js.map} +1 -1
  141. package/build/server/chunks/{_server.ts-i9TaUbWr.js → _server.ts-B2iUBxXh.js} +8 -8
  142. package/build/server/chunks/{_server.ts-i9TaUbWr.js.map → _server.ts-B2iUBxXh.js.map} +1 -1
  143. package/build/server/chunks/{_server.ts-IEM_8o6U.js → _server.ts-BN8EkPAZ.js} +7 -7
  144. package/build/server/chunks/{_server.ts-IEM_8o6U.js.map → _server.ts-BN8EkPAZ.js.map} +1 -1
  145. package/build/server/chunks/{_server.ts-N_mH0t0f.js → _server.ts-BQJfEfl9.js} +6 -6
  146. package/build/server/chunks/{_server.ts-N_mH0t0f.js.map → _server.ts-BQJfEfl9.js.map} +1 -1
  147. package/build/server/chunks/{_server.ts-C4tBc7fm.js → _server.ts-BQSMacks.js} +9 -9
  148. package/build/server/chunks/{_server.ts-C4tBc7fm.js.map → _server.ts-BQSMacks.js.map} +1 -1
  149. package/build/server/chunks/{_server.ts-vJBq3idp.js → _server.ts-BYt64wi5.js} +2 -2
  150. package/build/server/chunks/{_server.ts-vJBq3idp.js.map → _server.ts-BYt64wi5.js.map} +1 -1
  151. package/build/server/chunks/{_server.ts-BWMJRzwx.js → _server.ts-Ba0MJSs9.js} +6 -6
  152. package/build/server/chunks/{_server.ts-BWMJRzwx.js.map → _server.ts-Ba0MJSs9.js.map} +1 -1
  153. package/build/server/chunks/{_server.ts-B1vQkdVA.js → _server.ts-BdIM_pWg.js} +8 -8
  154. package/build/server/chunks/{_server.ts-B1vQkdVA.js.map → _server.ts-BdIM_pWg.js.map} +1 -1
  155. package/build/server/chunks/{_server.ts-DYg52Wyj.js → _server.ts-BfxTJHa-.js} +6 -6
  156. package/build/server/chunks/{_server.ts-DYg52Wyj.js.map → _server.ts-BfxTJHa-.js.map} +1 -1
  157. package/build/server/chunks/{_server.ts-CMfz71Do.js → _server.ts-BiVyFRNv.js} +6 -6
  158. package/build/server/chunks/{_server.ts-CMfz71Do.js.map → _server.ts-BiVyFRNv.js.map} +1 -1
  159. package/build/server/chunks/{_server.ts-vlaPk3to.js → _server.ts-BrgEQhDo.js} +6 -6
  160. package/build/server/chunks/{_server.ts-vlaPk3to.js.map → _server.ts-BrgEQhDo.js.map} +1 -1
  161. package/build/server/chunks/{_server.ts-BKnCIXe5.js → _server.ts-BtZN_8lV.js} +6 -6
  162. package/build/server/chunks/{_server.ts-BKnCIXe5.js.map → _server.ts-BtZN_8lV.js.map} +1 -1
  163. package/build/server/chunks/{_server.ts-BhA9ywuA.js → _server.ts-Bx0PXf1w.js} +6 -6
  164. package/build/server/chunks/{_server.ts-BhA9ywuA.js.map → _server.ts-Bx0PXf1w.js.map} +1 -1
  165. package/build/server/chunks/{_server.ts-CkVeEW46.js → _server.ts-Byaj9iKd.js} +6 -6
  166. package/build/server/chunks/{_server.ts-CkVeEW46.js.map → _server.ts-Byaj9iKd.js.map} +1 -1
  167. package/build/server/chunks/{_server.ts-oSGbQw4A.js → _server.ts-C1kDLq6m.js} +6 -6
  168. package/build/server/chunks/{_server.ts-oSGbQw4A.js.map → _server.ts-C1kDLq6m.js.map} +1 -1
  169. package/build/server/chunks/{_server.ts-CLMsuxkK.js → _server.ts-C28zIW49.js} +6 -6
  170. package/build/server/chunks/{_server.ts-CLMsuxkK.js.map → _server.ts-C28zIW49.js.map} +1 -1
  171. package/build/server/chunks/{_server.ts-BHaFrgm9.js → _server.ts-C2F80x6V.js} +7 -7
  172. package/build/server/chunks/{_server.ts-BHaFrgm9.js.map → _server.ts-C2F80x6V.js.map} +1 -1
  173. package/build/server/chunks/{_server.ts-BOn4TCRw.js → _server.ts-C70sKEjH.js} +7 -7
  174. package/build/server/chunks/{_server.ts-BOn4TCRw.js.map → _server.ts-C70sKEjH.js.map} +1 -1
  175. package/build/server/chunks/{_server.ts-CYu5XSM8.js → _server.ts-C754EzJA.js} +6 -6
  176. package/build/server/chunks/{_server.ts-CYu5XSM8.js.map → _server.ts-C754EzJA.js.map} +1 -1
  177. package/build/server/chunks/{_server.ts-B7319d6O.js → _server.ts-C8n83Xl1.js} +6 -6
  178. package/build/server/chunks/{_server.ts-B7319d6O.js.map → _server.ts-C8n83Xl1.js.map} +1 -1
  179. package/build/server/chunks/{_server.ts-DQTJ_bFp.js → _server.ts-CC6Bt-9t.js} +7 -7
  180. package/build/server/chunks/{_server.ts-DQTJ_bFp.js.map → _server.ts-CC6Bt-9t.js.map} +1 -1
  181. package/build/server/chunks/{_server.ts-Y5pBzFz4.js → _server.ts-CJ76gcOX.js} +6 -6
  182. package/build/server/chunks/{_server.ts-Y5pBzFz4.js.map → _server.ts-CJ76gcOX.js.map} +1 -1
  183. package/build/server/chunks/{_server.ts-B3iKXyUo.js → _server.ts-CMW6wbwP.js} +6 -6
  184. package/build/server/chunks/{_server.ts-B3iKXyUo.js.map → _server.ts-CMW6wbwP.js.map} +1 -1
  185. package/build/server/chunks/{_server.ts-pf6WrGLo.js → _server.ts-CNjG4x1a.js} +6 -6
  186. package/build/server/chunks/{_server.ts-pf6WrGLo.js.map → _server.ts-CNjG4x1a.js.map} +1 -1
  187. package/build/server/chunks/{_server.ts-DhcBS9KQ.js → _server.ts-CRl7GqvU.js} +6 -6
  188. package/build/server/chunks/{_server.ts-DhcBS9KQ.js.map → _server.ts-CRl7GqvU.js.map} +1 -1
  189. package/build/server/chunks/{_server.ts-D6-C5ctd.js → _server.ts-CUBWjRlp.js} +7 -7
  190. package/build/server/chunks/{_server.ts-D6-C5ctd.js.map → _server.ts-CUBWjRlp.js.map} +1 -1
  191. package/build/server/chunks/{_server.ts-B-uAgtQC.js → _server.ts-CYoKjlbj.js} +6 -6
  192. package/build/server/chunks/{_server.ts-B-uAgtQC.js.map → _server.ts-CYoKjlbj.js.map} +1 -1
  193. package/build/server/chunks/{_server.ts-Cu48eVwM.js → _server.ts-CafJDVBQ.js} +2 -2
  194. package/build/server/chunks/{_server.ts-Cu48eVwM.js.map → _server.ts-CafJDVBQ.js.map} +1 -1
  195. package/build/server/chunks/{_server.ts-CvjVUcFR.js → _server.ts-Cd9hDiKk.js} +6 -6
  196. package/build/server/chunks/{_server.ts-CvjVUcFR.js.map → _server.ts-Cd9hDiKk.js.map} +1 -1
  197. package/build/server/chunks/{_server.ts-BgL3_hTS.js → _server.ts-CgQfVR3g.js} +7 -7
  198. package/build/server/chunks/{_server.ts-BgL3_hTS.js.map → _server.ts-CgQfVR3g.js.map} +1 -1
  199. package/build/server/chunks/{_server.ts-BtZ9-ZYu.js → _server.ts-CilbVIRO.js} +2 -2
  200. package/build/server/chunks/{_server.ts-BtZ9-ZYu.js.map → _server.ts-CilbVIRO.js.map} +1 -1
  201. package/build/server/chunks/{_server.ts-CSBd_6yC.js → _server.ts-Ck25Xm32.js} +7 -7
  202. package/build/server/chunks/{_server.ts-CSBd_6yC.js.map → _server.ts-Ck25Xm32.js.map} +1 -1
  203. package/build/server/chunks/{_server.ts-DvUVX3X0.js → _server.ts-Cp-_qWC_.js} +7 -7
  204. package/build/server/chunks/{_server.ts-DvUVX3X0.js.map → _server.ts-Cp-_qWC_.js.map} +1 -1
  205. package/build/server/chunks/{_server.ts-7pcCO8Pf.js → _server.ts-CuEFmJ07.js} +7 -7
  206. package/build/server/chunks/{_server.ts-7pcCO8Pf.js.map → _server.ts-CuEFmJ07.js.map} +1 -1
  207. package/build/server/chunks/{_server.ts-DR0kmbl9.js → _server.ts-D5vc4lGC.js} +6 -6
  208. package/build/server/chunks/{_server.ts-DR0kmbl9.js.map → _server.ts-D5vc4lGC.js.map} +1 -1
  209. package/build/server/chunks/{_server.ts-CtkA_Ld0.js → _server.ts-DDLE66QT.js} +7 -7
  210. package/build/server/chunks/{_server.ts-CtkA_Ld0.js.map → _server.ts-DDLE66QT.js.map} +1 -1
  211. package/build/server/chunks/{_server.ts-xQhNjF_X.js → _server.ts-DEF1ChPD.js} +6 -6
  212. package/build/server/chunks/{_server.ts-xQhNjF_X.js.map → _server.ts-DEF1ChPD.js.map} +1 -1
  213. package/build/server/chunks/{_server.ts-BH8Y1mmb.js → _server.ts-DHUtPRWK.js} +4 -4
  214. package/build/server/chunks/{_server.ts-BH8Y1mmb.js.map → _server.ts-DHUtPRWK.js.map} +1 -1
  215. package/build/server/chunks/{_server.ts-B0MK-ynu.js → _server.ts-DHoTyKXL.js} +14 -10
  216. package/build/server/chunks/_server.ts-DHoTyKXL.js.map +1 -0
  217. package/build/server/chunks/{_server.ts-BaEUZaLH.js → _server.ts-DSB9Fzwa.js} +4 -4
  218. package/build/server/chunks/{_server.ts-BaEUZaLH.js.map → _server.ts-DSB9Fzwa.js.map} +1 -1
  219. package/build/server/chunks/{_server.ts-Dc1s3sLN.js → _server.ts-DW36Vbiq.js} +6 -6
  220. package/build/server/chunks/{_server.ts-Dc1s3sLN.js.map → _server.ts-DW36Vbiq.js.map} +1 -1
  221. package/build/server/chunks/{_server.ts-v3cF2xWi.js → _server.ts-DWG4CKWG.js} +6 -6
  222. package/build/server/chunks/{_server.ts-v3cF2xWi.js.map → _server.ts-DWG4CKWG.js.map} +1 -1
  223. package/build/server/chunks/{_server.ts-CCTZbI7L.js → _server.ts-DXxQIT2o.js} +7 -7
  224. package/build/server/chunks/{_server.ts-CCTZbI7L.js.map → _server.ts-DXxQIT2o.js.map} +1 -1
  225. package/build/server/chunks/{_server.ts-CSYdjKAH.js → _server.ts-Da8_J1a4.js} +7 -7
  226. package/build/server/chunks/{_server.ts-CSYdjKAH.js.map → _server.ts-Da8_J1a4.js.map} +1 -1
  227. package/build/server/chunks/{_server.ts-DeuURP8u.js → _server.ts-DcH5edss.js} +6 -6
  228. package/build/server/chunks/{_server.ts-DeuURP8u.js.map → _server.ts-DcH5edss.js.map} +1 -1
  229. package/build/server/chunks/{_server.ts-iXjPBf7J.js → _server.ts-DiHLYNbQ.js} +7 -7
  230. package/build/server/chunks/{_server.ts-iXjPBf7J.js.map → _server.ts-DiHLYNbQ.js.map} +1 -1
  231. package/build/server/chunks/{_server.ts-fenM6Iln.js → _server.ts-Dio2CslE.js} +7 -7
  232. package/build/server/chunks/_server.ts-Dio2CslE.js.map +1 -0
  233. package/build/server/chunks/{_server.ts-DcpOpD6s.js → _server.ts-Dlt1obi9.js} +6 -6
  234. package/build/server/chunks/{_server.ts-DcpOpD6s.js.map → _server.ts-Dlt1obi9.js.map} +1 -1
  235. package/build/server/chunks/{_server.ts-CEUFtmpE.js → _server.ts-Ds0U_zKR.js} +7 -7
  236. package/build/server/chunks/{_server.ts-CEUFtmpE.js.map → _server.ts-Ds0U_zKR.js.map} +1 -1
  237. package/build/server/chunks/{_server.ts-DlKT-RbM.js → _server.ts-DsVsFcf8.js} +15 -10
  238. package/build/server/chunks/_server.ts-DsVsFcf8.js.map +1 -0
  239. package/build/server/chunks/{_server.ts-BCpQ8Qdr.js → _server.ts-Du3PIYf8.js} +6 -6
  240. package/build/server/chunks/{_server.ts-BCpQ8Qdr.js.map → _server.ts-Du3PIYf8.js.map} +1 -1
  241. package/build/server/chunks/{_server.ts-3bBG0DBN.js → _server.ts-Duzj6Wm_.js} +6 -18
  242. package/build/server/chunks/_server.ts-Duzj6Wm_.js.map +1 -0
  243. package/build/server/chunks/{_server.ts-BGTw6w-C.js → _server.ts-DyaoaWIS.js} +7 -7
  244. package/build/server/chunks/{_server.ts-BGTw6w-C.js.map → _server.ts-DyaoaWIS.js.map} +1 -1
  245. package/build/server/chunks/{_server.ts-CxH-7UEc.js → _server.ts-EYtSo6HZ.js} +6 -6
  246. package/build/server/chunks/{_server.ts-CxH-7UEc.js.map → _server.ts-EYtSo6HZ.js.map} +1 -1
  247. package/build/server/chunks/{_server.ts-BgOS_sDK.js → _server.ts-JvnkkOhX.js} +7 -7
  248. package/build/server/chunks/{_server.ts-BgOS_sDK.js.map → _server.ts-JvnkkOhX.js.map} +1 -1
  249. package/build/server/chunks/{_server.ts-DzV6EO26.js → _server.ts-N0u5ruZe.js} +6 -6
  250. package/build/server/chunks/{_server.ts-DzV6EO26.js.map → _server.ts-N0u5ruZe.js.map} +1 -1
  251. package/build/server/chunks/{_server.ts-D0XsGdhx.js → _server.ts-NdCztCBP.js} +6 -6
  252. package/build/server/chunks/{_server.ts-D0XsGdhx.js.map → _server.ts-NdCztCBP.js.map} +1 -1
  253. package/build/server/chunks/{_server.ts-CFKGqT4L.js → _server.ts-OGUKP5Tu.js} +6 -6
  254. package/build/server/chunks/{_server.ts-CFKGqT4L.js.map → _server.ts-OGUKP5Tu.js.map} +1 -1
  255. package/build/server/chunks/{_server.ts-DuO_GU5A.js → _server.ts-Q1KEyBck.js} +6 -6
  256. package/build/server/chunks/{_server.ts-DuO_GU5A.js.map → _server.ts-Q1KEyBck.js.map} +1 -1
  257. package/build/server/chunks/{_server.ts-z5C3PAAB.js → _server.ts-TIRuudir.js} +2 -2
  258. package/build/server/chunks/{_server.ts-z5C3PAAB.js.map → _server.ts-TIRuudir.js.map} +1 -1
  259. package/build/server/chunks/{_server.ts-DXwG4w1_.js → _server.ts-WTZtC5sX.js} +10 -4
  260. package/build/server/chunks/_server.ts-WTZtC5sX.js.map +1 -0
  261. package/build/server/chunks/{_server.ts-DR_9WXW4.js → _server.ts-WsWoJE5V.js} +8 -8
  262. package/build/server/chunks/{_server.ts-DR_9WXW4.js.map → _server.ts-WsWoJE5V.js.map} +1 -1
  263. package/build/server/chunks/{_server.ts-CjeMP5Vf.js → _server.ts-X8GX4ChJ.js} +6 -6
  264. package/build/server/chunks/{_server.ts-CjeMP5Vf.js.map → _server.ts-X8GX4ChJ.js.map} +1 -1
  265. package/build/server/chunks/{_server.ts--F22byeV.js → _server.ts-XIc2PDRd.js} +7 -7
  266. package/build/server/chunks/{_server.ts--F22byeV.js.map → _server.ts-XIc2PDRd.js.map} +1 -1
  267. package/build/server/chunks/{_server.ts-CQeqwCqj.js → _server.ts-YsFgaaVd.js} +6 -6
  268. package/build/server/chunks/{_server.ts-CQeqwCqj.js.map → _server.ts-YsFgaaVd.js.map} +1 -1
  269. package/build/server/chunks/{_server.ts-CpyfojV9.js → _server.ts-bOcb37D9.js} +7 -7
  270. package/build/server/chunks/{_server.ts-CpyfojV9.js.map → _server.ts-bOcb37D9.js.map} +1 -1
  271. package/build/server/chunks/{_server.ts-yZ8CGJNE.js → _server.ts-e_8LykNe.js} +7 -7
  272. package/build/server/chunks/{_server.ts-yZ8CGJNE.js.map → _server.ts-e_8LykNe.js.map} +1 -1
  273. package/build/server/chunks/{_server.ts-CY-GNKZT.js → _server.ts-hLimfy8i.js} +6 -6
  274. package/build/server/chunks/{_server.ts-CY-GNKZT.js.map → _server.ts-hLimfy8i.js.map} +1 -1
  275. package/build/server/chunks/{_server.ts-AC1zqetQ.js → _server.ts-khI1sqja.js} +2 -2
  276. package/build/server/chunks/{_server.ts-AC1zqetQ.js.map → _server.ts-khI1sqja.js.map} +1 -1
  277. package/build/server/chunks/{_server.ts-BF5JzSrs.js → _server.ts-p1Z3DBlr.js} +6 -6
  278. package/build/server/chunks/{_server.ts-BF5JzSrs.js.map → _server.ts-p1Z3DBlr.js.map} +1 -1
  279. package/build/server/chunks/{_server.ts-DvfnkNfI.js → _server.ts-uzB454LO.js} +7 -7
  280. package/build/server/chunks/{_server.ts-DvfnkNfI.js.map → _server.ts-uzB454LO.js.map} +1 -1
  281. package/build/server/chunks/{_server.ts-jqktLs6L.js → _server.ts-wKSTgSwf.js} +6 -6
  282. package/build/server/chunks/{_server.ts-jqktLs6L.js.map → _server.ts-wKSTgSwf.js.map} +1 -1
  283. package/build/server/chunks/addon-helpers-DaC3GR9u.js +153 -0
  284. package/build/server/chunks/addon-helpers-DaC3GR9u.js.map +1 -0
  285. package/build/server/chunks/{admin-update-lock-B-z4UE8R.js → admin-update-lock-Bu3VvAoN.js} +3 -3
  286. package/build/server/chunks/{admin-update-lock-B-z4UE8R.js.map → admin-update-lock-Bu3VvAoN.js.map} +1 -1
  287. package/build/server/chunks/{akm-C4NCZfJB.js → akm-DsJ8_uuW.js} +2 -2
  288. package/build/server/chunks/{akm-C4NCZfJB.js.map → akm-DsJ8_uuW.js.map} +1 -1
  289. package/build/server/chunks/{_server.ts-08JCSzPu.js → bring-up-BBKMJltU.js} +30 -228
  290. package/build/server/chunks/bring-up-BBKMJltU.js.map +1 -0
  291. package/build/server/chunks/{catalog-Czlhb_2V.js → catalog-8d-U0FbY.js} +5 -5
  292. package/build/server/chunks/{catalog-Czlhb_2V.js.map → catalog-8d-U0FbY.js.map} +1 -1
  293. package/build/server/chunks/{client-HEAniq5u.js → client-CHoZA_w9.js} +2 -2
  294. package/build/server/chunks/{client-HEAniq5u.js.map → client-CHoZA_w9.js.map} +1 -1
  295. package/build/server/chunks/{compose-args2-B1cYvF5r.js → compose-args2-C9sLS6QR.js} +2 -2
  296. package/build/server/chunks/compose-args2-C9sLS6QR.js.map +1 -0
  297. package/build/server/chunks/{config-C15S-ENd.js → config-ChxZZk6h.js} +2 -2
  298. package/build/server/chunks/{config-C15S-ENd.js.map → config-ChxZZk6h.js.map} +1 -1
  299. package/build/server/chunks/{docker2-CF7qyd1U.js → docker2-DGq6J3Kp.js} +2 -2
  300. package/build/server/chunks/docker2-DGq6J3Kp.js.map +1 -0
  301. package/build/server/chunks/{docker3-BsPagEza.js → docker3-DFlJ-o_d.js} +2 -2
  302. package/build/server/chunks/{docker3-BsPagEza.js.map → docker3-DFlJ-o_d.js.map} +1 -1
  303. package/build/server/chunks/environment-BYp8JQYM.js.map +1 -1
  304. package/build/server/chunks/{error.svelte-C-lukbaB.js → error.svelte-BXxIEYd4.js} +4 -4
  305. package/build/server/chunks/{error.svelte-C-lukbaB.js.map → error.svelte-BXxIEYd4.js.map} +1 -1
  306. package/build/server/chunks/{features-DltizIi4.js → features-D8Ez2vwC.js} +26 -4
  307. package/build/server/chunks/features-D8Ez2vwC.js.map +1 -0
  308. package/build/server/chunks/{helpers-DWpoPvHz.js → helpers-BrD1e__f.js} +4 -4
  309. package/build/server/chunks/{helpers-DWpoPvHz.js.map → helpers-BrD1e__f.js.map} +1 -1
  310. package/build/server/chunks/{hooks.server-BcdEyWVU.js → hooks.server-Blba-Qw7.js} +9 -9
  311. package/build/server/chunks/{hooks.server-BcdEyWVU.js.map → hooks.server-Blba-Qw7.js.map} +1 -1
  312. package/build/server/chunks/{http-7E5W3vGt.js → http-B4Us23Mo.js} +2 -2
  313. package/build/server/chunks/{http-7E5W3vGt.js.map → http-B4Us23Mo.js.map} +1 -1
  314. package/build/server/chunks/{internal-BNSUwl-r.js → internal-CSnzBDeT.js} +3 -3
  315. package/build/server/chunks/{internal-BNSUwl-r.js.map → internal-CSnzBDeT.js.map} +1 -1
  316. package/build/server/chunks/{landing-DY53l_CN.js → landing-DxFOhZxH.js} +5 -5
  317. package/build/server/chunks/{landing-DY53l_CN.js.map → landing-DxFOhZxH.js.map} +1 -1
  318. package/build/server/chunks/{opencode-target-DYD2zQ4l.js → opencode-target-D4BxXYHJ.js} +3 -3
  319. package/build/server/chunks/{opencode-target-DYD2zQ4l.js.map → opencode-target-D4BxXYHJ.js.map} +1 -1
  320. package/build/server/chunks/{paths-BVdkvR9U.js → paths-6f-5gYkd.js} +2 -2
  321. package/build/server/chunks/{paths-BVdkvR9U.js.map → paths-6f-5gYkd.js.map} +1 -1
  322. package/build/server/chunks/{session-cookie-D2_H1UEW.js → session-cookie-5J3xCH94.js} +2 -2
  323. package/build/server/chunks/{session-cookie-D2_H1UEW.js.map → session-cookie-5J3xCH94.js.map} +1 -1
  324. package/build/server/chunks/{setup-deploy-C1h733rH.js → setup-deploy-DUbX3fHm.js} +2 -2
  325. package/build/server/chunks/{setup-deploy-C1h733rH.js.map → setup-deploy-DUbX3fHm.js.map} +1 -1
  326. package/build/server/chunks/{src-B2-r_9oB.js → src-B2wHibme.js} +55 -70
  327. package/build/server/chunks/src-B2wHibme.js.map +1 -0
  328. package/build/server/chunks/{state-Dkjz2T4C.js → state-JIy0tegD.js} +2 -2
  329. package/build/server/chunks/{state-Dkjz2T4C.js.map → state-JIy0tegD.js.map} +1 -1
  330. package/build/server/chunks/{state2-CS9rhust.js → state2-Br2snAqo.js} +2 -2
  331. package/build/server/chunks/{state2-CS9rhust.js.map → state2-Br2snAqo.js.map} +1 -1
  332. package/build/server/chunks/voice-state.svelte-DU9g_xEh.js +1610 -0
  333. package/build/server/chunks/voice-state.svelte-DU9g_xEh.js.map +1 -0
  334. package/build/server/index.js +1 -1
  335. package/build/server/manifest.js +96 -110
  336. package/build/server/manifest.js.map +1 -1
  337. package/package.json +3 -3
  338. package/build/client/_app/immutable/assets/7.BsquVIMw.css +0 -1
  339. package/build/client/_app/immutable/assets/7.BsquVIMw.css.br +0 -0
  340. package/build/client/_app/immutable/assets/7.BsquVIMw.css.gz +0 -0
  341. package/build/client/_app/immutable/assets/9.D8zTZB7v.css +0 -1
  342. package/build/client/_app/immutable/assets/9.D8zTZB7v.css.br +0 -0
  343. package/build/client/_app/immutable/assets/9.D8zTZB7v.css.gz +0 -0
  344. package/build/client/_app/immutable/chunks/BE_4J5sS.js.br +0 -0
  345. package/build/client/_app/immutable/chunks/BE_4J5sS.js.gz +0 -0
  346. package/build/client/_app/immutable/chunks/BdIq5WIo.js.br +0 -5
  347. package/build/client/_app/immutable/chunks/BdIq5WIo.js.gz +0 -0
  348. package/build/client/_app/immutable/chunks/Clt9pCG1.js.br +0 -0
  349. package/build/client/_app/immutable/chunks/Clt9pCG1.js.gz +0 -0
  350. package/build/client/_app/immutable/chunks/CuKFR3Qo.js.br +0 -0
  351. package/build/client/_app/immutable/chunks/CuKFR3Qo.js.gz +0 -0
  352. package/build/client/_app/immutable/chunks/D1VTYdXF.js +0 -1
  353. package/build/client/_app/immutable/chunks/D1VTYdXF.js.br +0 -0
  354. package/build/client/_app/immutable/chunks/D1VTYdXF.js.gz +0 -0
  355. package/build/client/_app/immutable/chunks/DF5Aoa59.js +0 -1
  356. package/build/client/_app/immutable/chunks/DF5Aoa59.js.br +0 -2
  357. package/build/client/_app/immutable/chunks/DF5Aoa59.js.gz +0 -0
  358. package/build/client/_app/immutable/chunks/DaRQZQEK.js +0 -5
  359. package/build/client/_app/immutable/chunks/DaRQZQEK.js.br +0 -0
  360. package/build/client/_app/immutable/chunks/DaRQZQEK.js.gz +0 -0
  361. package/build/client/_app/immutable/chunks/Dz-hw4Sz.js +0 -5
  362. package/build/client/_app/immutable/chunks/Dz-hw4Sz.js.br +0 -0
  363. package/build/client/_app/immutable/chunks/Dz-hw4Sz.js.gz +0 -0
  364. package/build/client/_app/immutable/chunks/mNzUu332.js.br +0 -0
  365. package/build/client/_app/immutable/chunks/mNzUu332.js.gz +0 -0
  366. package/build/client/_app/immutable/entry/app.DKG33-gU.js.br +0 -0
  367. package/build/client/_app/immutable/entry/app.DKG33-gU.js.gz +0 -0
  368. package/build/client/_app/immutable/entry/start.vDtUfDrT.js +0 -1
  369. package/build/client/_app/immutable/entry/start.vDtUfDrT.js.br +0 -1
  370. package/build/client/_app/immutable/entry/start.vDtUfDrT.js.gz +0 -0
  371. package/build/client/_app/immutable/nodes/0.eA5H3idZ.js.br +0 -0
  372. package/build/client/_app/immutable/nodes/0.eA5H3idZ.js.gz +0 -0
  373. package/build/client/_app/immutable/nodes/1.CvKFymDh.js.br +0 -0
  374. package/build/client/_app/immutable/nodes/1.CvKFymDh.js.gz +0 -0
  375. package/build/client/_app/immutable/nodes/10.DFMf8WUQ.js.br +0 -0
  376. package/build/client/_app/immutable/nodes/10.DFMf8WUQ.js.gz +0 -0
  377. package/build/client/_app/immutable/nodes/11.BZQW5Y67.js +0 -8
  378. package/build/client/_app/immutable/nodes/11.BZQW5Y67.js.br +0 -0
  379. package/build/client/_app/immutable/nodes/11.BZQW5Y67.js.gz +0 -0
  380. package/build/client/_app/immutable/nodes/4.B-36aGPk.js +0 -1
  381. package/build/client/_app/immutable/nodes/4.B-36aGPk.js.br +0 -0
  382. package/build/client/_app/immutable/nodes/4.B-36aGPk.js.gz +0 -0
  383. package/build/client/_app/immutable/nodes/5.bgdUYUlr.js.br +0 -0
  384. package/build/client/_app/immutable/nodes/5.bgdUYUlr.js.gz +0 -0
  385. package/build/client/_app/immutable/nodes/6.D0P837Li.js +0 -2
  386. package/build/client/_app/immutable/nodes/6.D0P837Li.js.br +0 -0
  387. package/build/client/_app/immutable/nodes/6.D0P837Li.js.gz +0 -0
  388. package/build/client/_app/immutable/nodes/7.C4seSCJq.js +0 -14
  389. package/build/client/_app/immutable/nodes/7.C4seSCJq.js.br +0 -0
  390. package/build/client/_app/immutable/nodes/7.C4seSCJq.js.gz +0 -0
  391. package/build/client/_app/immutable/nodes/9.DCgNAMuD.js +0 -128
  392. package/build/client/_app/immutable/nodes/9.DCgNAMuD.js.br +0 -0
  393. package/build/client/_app/immutable/nodes/9.DCgNAMuD.js.gz +0 -0
  394. package/build/server/chunks/0-D9FIO-Bk.js.map +0 -1
  395. package/build/server/chunks/1-ItPJxTHP.js +0 -9
  396. package/build/server/chunks/11-CZj9K6K7.js +0 -9
  397. package/build/server/chunks/11-CZj9K6K7.js.map +0 -1
  398. package/build/server/chunks/6-DxXeT1e3.js +0 -9
  399. package/build/server/chunks/7-CuHe_mFY.js +0 -9
  400. package/build/server/chunks/7-CuHe_mFY.js.map +0 -1
  401. package/build/server/chunks/9-CVIPxN5B.js +0 -9
  402. package/build/server/chunks/9-CVIPxN5B.js.map +0 -1
  403. package/build/server/chunks/IconMic-BbjkE_nG.js +0 -18
  404. package/build/server/chunks/IconMic-BbjkE_nG.js.map +0 -1
  405. package/build/server/chunks/IconStop-DKVpXPKq.js.map +0 -1
  406. package/build/server/chunks/_page.svelte-BcpGl-vl.js +0 -91
  407. package/build/server/chunks/_page.svelte-BcpGl-vl.js.map +0 -1
  408. package/build/server/chunks/_page.svelte-CGEtuNmS.js.map +0 -1
  409. package/build/server/chunks/_page.svelte-FOm-OMQe.js.map +0 -1
  410. package/build/server/chunks/_page.svelte-qxgG6hsh.js.map +0 -1
  411. package/build/server/chunks/_server.ts-08JCSzPu.js.map +0 -1
  412. package/build/server/chunks/_server.ts-3bBG0DBN.js.map +0 -1
  413. package/build/server/chunks/_server.ts-B0MK-ynu.js.map +0 -1
  414. package/build/server/chunks/_server.ts-BS4UTF4H.js +0 -93
  415. package/build/server/chunks/_server.ts-BS4UTF4H.js.map +0 -1
  416. package/build/server/chunks/_server.ts-DXwG4w1_.js.map +0 -1
  417. package/build/server/chunks/_server.ts-DlKT-RbM.js.map +0 -1
  418. package/build/server/chunks/_server.ts-fenM6Iln.js.map +0 -1
  419. package/build/server/chunks/_server.ts-zt3yI2wU.js +0 -97
  420. package/build/server/chunks/_server.ts-zt3yI2wU.js.map +0 -1
  421. package/build/server/chunks/addon-helpers-B7bkHg-K.js +0 -64
  422. package/build/server/chunks/addon-helpers-B7bkHg-K.js.map +0 -1
  423. package/build/server/chunks/compose-args2-B1cYvF5r.js.map +0 -1
  424. package/build/server/chunks/docker2-CF7qyd1U.js.map +0 -1
  425. package/build/server/chunks/features-DltizIi4.js.map +0 -1
  426. package/build/server/chunks/speakable-text-BflxDDdY.js +0 -65
  427. package/build/server/chunks/speakable-text-BflxDDdY.js.map +0 -1
  428. package/build/server/chunks/src-B2-r_9oB.js.map +0 -1
  429. package/build/server/chunks/voice-state.svelte-CSmyLPRH.js +0 -561
  430. package/build/server/chunks/voice-state.svelte-CSmyLPRH.js.map +0 -1
  431. /package/build/client/_app/immutable/chunks/{DD22UF1L.js → DD22UF1L2.js} +0 -0
  432. /package/build/client/_app/immutable/chunks/{DD22UF1L.js.br → DD22UF1L2.js.br} +0 -0
  433. /package/build/client/_app/immutable/chunks/{DD22UF1L.js.gz → DD22UF1L2.js.gz} +0 -0
@@ -1 +0,0 @@
1
- import{B as e,I as t,L as n,M as r,N as i,P as a,St as o,U as s,X as c,a as l,at as u,b as d,ct as f,ft as p,gt as m,ht as h,it as g,k as _,n as v,p as y,r as b,rt as x,ut as S,xt as C,z as w}from"./DTLQuSQp.js";import{n as T,u as E}from"./BE_4J5sS.js";import"./xihTtKlq.js";import{d as D,i as O,l as k,n as A,r as j,s as M,t as ee,u as N}from"./Dz-hw4Sz.js";import{t as te,u as P}from"./DaRQZQEK.js";import{t as F}from"./BdIq5WIo.js";import"./DF5Aoa59.js";import{n as I,r as L,t as R}from"./Clt9pCG1.js";import{a as z,d as B,f as V,i as H,l as U,n as ne,o as W,p as G,r as K,s as q,t as re,u as J}from"./CuKFR3Qo.js";import{t as Y}from"./DTAO9S6h.js";import{t as ie}from"./C4qTU5YY.js";function X(e,t){let n=l(t,`disabled`,3,!1),r=l(t,`tone`,3,`primary`);{let i=p(()=>t.pressed&&t.selectedIcon?t.selectedIcon:t.icon);L(e,{get icon(){return s(i)},get label(){return t.label},get title(){return t.title},get ariaLabel(){return t.ariaLabel},get disabled(){return n()},get tone(){return r()},get selected(){return t.pressed},get ariaPressed(){return t.pressed},get onclick(){return t.onToggle}})}}var Z=e=>{q(e,{size:15})};function Q(e,t){m(t,!0);let n=p(()=>F.url?.pathname??``),r=p(()=>s(n)===`/host`||s(n).startsWith(`/host/`));function i(){let e=G.toggle();if(s(r))return;let t=e?F.url.searchParams.get(`session`)??B():B();T(e?U(t):J(t))}X(e,{get pressed(){return G.enabled},onToggle:i,ariaLabel:`Advanced mode`,title:`Advanced mode (embedded OpenCode)`,get icon(){return Z}}),h()}var ae=t(`<p class="list-error svelte-dlw00e" role="alert"> </p>`),$=t(`<span class="sr-only svelte-dlw00e">(current)</span>`),oe=t(`<button type="button"><span class="item-text svelte-dlw00e"><span class="item-label svelte-dlw00e"> <!></span> <span class="item-url svelte-dlw00e"> </span></span></button>`),se=t(`<a class="list-item link svelte-dlw00e">Manage this assistant…</a>`),ce=t(`<div class="endpoint-list svelte-dlw00e"><!> <div class="s-ep-section-label svelte-dlw00e">assistant</div> <div class="group" role="group" aria-label="Assistant endpoints"></div> <div class="divider svelte-dlw00e"></div> <!> <a class="list-item link svelte-dlw00e">Manage assistant connections…</a></div>`);function le(t,n){m(n,!0);let l=p(()=>P.active),g=p(()=>P.endpoints),v=p(()=>W(s(l)?.url)),b=S(!1);async function C(e){if(!s(b)){if(e===s(l)?.id){n.onChosen?.();return}f(b,!0);try{await P.activate(e),n.onChosen?.()}catch{}finally{f(b,!1)}}}var w=ce(),T=x(w),D=e=>{var t=ae(),n=x(t,!0);o(t),c(()=>i(n,P.error)),a(e,t)};r(T,e=>{P.error&&e(D)});var O=u(T,4);_(O,21,()=>s(g),e=>e.id,(t,n)=>{var f=oe();let p;var m=x(f),h=x(m),g=x(h,!0),_=u(g),v=e=>{a(e,$())};r(_,e=>{s(n).id===s(l)?.id&&e(v)}),o(h);var S=u(h,2),w=x(S,!0);o(S),o(m),o(f),c(()=>{p=d(f,1,`list-item svelte-dlw00e`,null,p,{active:s(n).id===s(l)?.id}),y(f,`aria-current`,s(n).id===s(l)?.id?`true`:void 0),f.disabled=s(b),i(g,s(n).label),i(w,s(n).url)}),e(`click`,f,()=>C(s(n).id)),a(t,f)}),o(O);var k=u(O,4),A=t=>{var r=se();c(e=>y(r,`href`,e),[()=>E(`/host`)]),e(`click`,r,()=>n.onChosen?.()),a(t,r)};r(k,e=>{s(v)&&e(A)});var j=u(k,2);o(w),c(e=>y(j,`href`,e),[()=>E(`/connections`)]),e(`click`,j,()=>n.onChosen?.()),a(t,w),h()}w([`click`]);var ue=t(`<button type="button" class="trigger svelte-48xr05" aria-haspopup="dialog"><!> <span class="dot svelte-48xr05" aria-hidden="true"></span> <span class="label svelte-48xr05"> </span> <span class="caret svelte-48xr05" aria-hidden="true">▾</span></button> <!>`,1);function de(t,n){m(n,!0);let r=S(!1),l=p(()=>P.active);b(()=>{P.load()});var d=ue(),_=g(d),v=x(_);Y(v,{size:14,class:`trigger-icon`});var w=u(v,4),T=x(w,!0);o(w),C(2),o(_),R(u(_,2),{get open(){return s(r)},title:`Assistant endpoint`,onClose:()=>f(r,!1),width:`26rem`,children:(e,t)=>{le(e,{onChosen:()=>f(r,!1)})},$$slots:{default:!0}}),c(()=>{y(_,`aria-expanded`,s(r)),y(_,`aria-label`,s(l)?`Assistant endpoint: ${s(l).label}`:`Assistant endpoints`),y(_,`title`,s(l)?`Connected to: ${s(l).label} (${s(l).url})`:`Assistant endpoints`),_.disabled=P.loading,i(T,s(l)?.label??`Endpoint…`)}),e(`click`,_,()=>f(r,!0)),a(t,d),h()}w([`click`]);var fe=t(`<button type="button" class="trigger svelte-cihcnl" aria-haspopup="dialog" aria-label="Sessions"><!> <span aria-hidden="true"></span> <span class="label svelte-cihcnl"> </span> <span class="caret svelte-cihcnl" aria-hidden="true">▾</span></button> <!>`,1);function pe(t,n){m(n,!0);let r=S(!1),l=p(()=>P.active),_=p(()=>s(l)?V.byEndpoint.get(s(l).id)??null:null),v=p(()=>s(_)?.sessions??[]),b=p(()=>V.activeSessionId),w=p(()=>V.liveConnected),T=p(()=>s(v).find(e=>e.id===s(b))??null),E=p(()=>s(T)?z(s(T).title):`New session`);var D=fe(),O=g(D),k=x(O);K(k,{class:`trigger-icon`,size:14});var A=u(k,2);let j;var M=u(A,2),ee=x(M,!0);o(M),C(2),o(O);var N=u(O,2);{let e=p(()=>s(l)?.label??`this endpoint`);R(N,{get open(){return s(r)},get title(){return`Sessions on ${s(e)??``}`},onClose:()=>f(r,!1),width:`26rem`,children:(e,t)=>{H(e,{onChosen:()=>f(r,!1)})},$$slots:{default:!0}})}c(()=>{y(O,`aria-expanded`,s(r)),y(O,`title`,s(E)),j=d(A,1,`dot svelte-cihcnl`,null,j,{connected:s(w)}),y(A,`title`,s(w)?`Live updates connected`:`Live updates disconnected`),i(ee,s(E))}),e(`click`,O,()=>f(r,!0)),a(t,D),h()}w([`click`]);var me=n(`<svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="1" y1="1" x2="23" y2="23"></line><path d="M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6"></path><path d="M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23"></path><line x1="12" y1="19" x2="12" y2="23"></line><line x1="8" y1="23" x2="16" y2="23"></line></svg>`);function he(e,t){let n=l(t,`size`,3,20),r=l(t,`class`,3,``);var i=me();c(()=>{y(i,`width`,n()),y(i,`height`,n()),d(i,0,`s-icon ${r()??``}`)}),a(e,i)}var ge=t(`<span class="voice-interim svelte-7elv0w" aria-hidden="true"> </span>`),_e=t(`<button type="button" class="voice-autoplay-banner svelte-7elv0w" aria-label="Resume paused audio" title="Audio was blocked by the browser. Click to resume."><!> <span class="svelte-7elv0w">Audio paused — click to resume</span></button>`),ve=t(`<button><!></button>`),ye=t(`<span class="voice-spinner svelte-7elv0w" aria-hidden="true"></span>`),be=t(`<!> <span class="voice-pulse svelte-7elv0w" aria-hidden="true"></span>`,1),xe=t(`<div class="voice-control svelte-7elv0w" role="toolbar" aria-label="Voice controls"><!> <!> <!> <button><!></button> <span class="sr-only svelte-7elv0w" aria-live="polite"> </span></div>`);function Se(t,n){m(n,!0);let l=S(!1),_=null;b(()=>{A().then(()=>{f(l,!0)}),_=window.openpalm?.onGlobalMicToggle?.(()=>{L()})??null}),v(()=>{typeof window<`u`&&window.openpalm?.setTrayMicRecording?.(!1),_?.(),_=null,ee()});let w=p(()=>s(l)&&D.sttEngine!==`disabled`&&D.sttSupported),T=p(()=>s(l)&&D.ttsSupported),E=p(()=>D.status===`recording`),P=p(()=>D.status===`transcribing`),F=p(()=>!s(E)&&!s(P)&&V.sending),I=p(()=>D.status===`speaking`);async function L(){if(s(F))return;if(s(E)){k(),window.openpalm?.setTrayMicRecording?.(!1);return}if(s(P))return;N();let e=window.openpalm;if(e?.requestMicPermission){let t=await e.requestMicPermission();if(t===`denied-no-prompt`){D.errorMessage=`This OpenPalm build cannot request microphone access on macOS. Please update to the latest version of the desktop app.`;return}if(t===`denied`||t===`restricted`){D.errorMessage=`Microphone access is turned off. In the System Settings window that just opened, enable OpenPalm under Microphone, then quit and reopen the app.`;return}}window.openpalm?.setTrayMicRecording?.(!0),M(e=>{let t=e.trim();t&&V.send(t)})}function R(){O(!D.ttsAutoEnabled)}var z=xe(),B=x(z),H=e=>{var t=ge(),n=x(t,!0);o(t),c(e=>{y(t,`title`,D.interimTranscript),i(n,e)},[()=>D.interimTranscript.length>48?D.interimTranscript.slice(0,48)+`…`:D.interimTranscript]),a(e,t)};r(B,e=>{s(E)&&D.interimTranscript&&e(H)});var U=u(B,2),W=t=>{var n=_e();ne(x(n),{size:14}),C(2),o(n),e(`click`,n,()=>j()),a(t,n)};r(U,e=>{D.autoplayBlocked&&e(W)});var G=u(U,2),K=t=>{var n=ve();let i;var l=x(n),u=e=>{re(e,{size:16})},f=e=>{ne(e,{size:16})};r(l,e=>{D.ttsAutoEnabled?e(u):e(f,-1)}),o(n),c(()=>{i=d(n,1,`voice-btn svelte-7elv0w`,null,i,{"voice-btn-on":D.ttsAutoEnabled,"voice-btn-speaking":s(I)}),y(n,`aria-label`,D.ttsAutoEnabled?`Turn off spoken responses`:`Turn on spoken responses`),y(n,`aria-pressed`,D.ttsAutoEnabled),y(n,`title`,s(I)?`Speaking — click to turn off spoken responses`:D.ttsAutoEnabled?`Spoken responses are on — click to turn off`:`Spoken responses are off — click to turn on`)}),e(`click`,n,R),a(t,n)};r(G,e=>{s(T)&&e(K)});var q=u(G,2);let J;var Y=x(q),X=e=>{he(e,{size:16})},Z=e=>{a(e,ye())},Q=e=>{var t=be();te(g(t),{size:14}),C(2),a(e,t)},ae=e=>{ie(e,{size:16})};r(Y,e=>{s(w)?s(P)||s(F)?e(Z,1):s(E)?e(Q,2):e(ae,-1):e(X)}),o(q);var $=u(q,2),oe=x($,!0);o($),o(z),c(()=>{J=d(q,1,`voice-btn svelte-7elv0w`,null,J,{"voice-btn-active":s(E),"voice-btn-processing":s(F)||s(P),"voice-btn-disabled":!s(w)}),q.disabled=!s(w)||s(F),y(q,`aria-label`,s(w)?s(E)?`Stop recording`:s(P)?`Transcribing…`:s(F)?`Sending message…`:`Start recording`:`Voice input unavailable`),y(q,`aria-pressed`,s(E)),y(q,`title`,s(w)?s(E)?`Stop recording`:s(P)?`Transcribing…`:s(F)?`Sending message…`:`Speak — message will be sent to the selected assistant`:`Voice input is unavailable — no speech-to-text engine is configured for this browser`),i(oe,s(E)&&D.interimTranscript?D.interimTranscript:s(E)?`Recording`:s(P)?`Transcribing`:s(F)?`Sending message to assistant`:s(I)?`Assistant is speaking`:D.ttsAutoEnabled?`Spoken responses on`:``)}),e(`click`,q,L),a(t,z),h()}w([`click`]);var Ce=t(`<span class="chat-selectors svelte-1s36yfz"><!> <!></span>`),we=t(`<!> <!> <!>`,1);function Te(e,t){m(t,!0);let n=p(()=>F.url?.pathname??``),i=p(()=>s(n)===`/chat`||s(n).startsWith(`/chat/`)||s(n)===`/advanced`||s(n).startsWith(`/advanced/`)),c=p(()=>{let e=F.url.searchParams.get(`session`)??B();return G.enabled?U(e):J(e)});b(()=>{G.init()}),I(e,{get brandHref(){return s(c)},children:(e,t)=>{var n=we(),c=g(n),l=e=>{var t=Ce(),n=x(t);de(n,{}),pe(u(n,2),{}),o(t),a(e,t)};r(c,e=>{s(i)&&e(l)});var d=u(c,2);Q(d,{}),Se(u(d,2),{}),a(e,n)},$$slots:{default:!0}}),h()}export{Te as t};
@@ -1 +0,0 @@
1
- import"./BE_4J5sS.js";
@@ -1,2 +0,0 @@
1
-
2
- �import"./BE_4J5sS.js";
@@ -1,5 +0,0 @@
1
- import{L as e,P as t,U as n,X as r,a as i,b as a,ct as o,ft as s,lt as c,ot as l,p as u,q as d,st as f,ut as p}from"./DTLQuSQp.js";import"./xihTtKlq.js";import{_ as ee}from"./Dz-hw4Sz.js";function m(e){if(typeof e==`string`)return e;if(e==null)return``;if(typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)}catch{return``}}function te(...e){for(let t of e){let e=m(t);if(e)return e}return``}function ne(e,t){if(e.type!==`tool`&&!e.state)return null;let n=e.state?.status??`running`;return{id:e.callID??e.id??t,kind:`tool`,tool:e.tool??`tool`,status:n,title:e.state?.title??e.tool??`tool`,detail:te(e.state?.input,e.state?.metadata,e.state?.progress,e.state?.output),output:m(e.state?.output),error:e.state?.error??``,updatedAt:Date.now()}}function re(e){let t=e.trim();if(!t||!(t.startsWith(`{`)&&t.endsWith(`}`)||t.startsWith(`[`)&&t.endsWith(`]`)))return null;try{return JSON.parse(t)}catch{return null}}function h(e){let t=re(e);return t===null?e:JSON.stringify(t,null,2)}function ie(e){return e?e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/[_-]+/g,` `).replace(/\s+/g,` `).trim().replace(/^./,e=>e.toUpperCase()):``}function ae(e,t){let n=e.toLowerCase();return t===`error`||t===`failed`?`alert`:n===`step`?t===`completed`?`done-circle`:`refresh`:n.includes(`remember`)||n.includes(`memory`)?`edit`:n.includes(`help`)||n.includes(`todo`)?t===`completed`?`done`:`agent`:n.includes(`bash`)||n.includes(`shell`)||n.includes(`command`)?`terminal`:n.includes(`grep`)||n.includes(`search`)?`search`:n.includes(`read`)||n.includes(`file`)?`file`:n.includes(`edit`)||n.includes(`write`)||n.includes(`patch`)?`edit`:n.includes(`web`)||n.includes(`http`)||n.includes(`fetch`)?`link`:n.includes(`task`)||n.includes(`agent`)?`agent`:t===`completed`?`done`:`clock`}function g(e){return e.kind===`step`?e.title:e.title||e.tool}function _(e){return e.kind===`step`?`Step`:`Tool`}function v(e){switch(e){case`completed`:return`completed`;case`error`:case`failed`:return`failed`;case`pending`:return`queued`;default:return`running`}}function oe(e){return`${_(e)}: ${g(e)} (${v(e.status)})`}function se(e){let t=[{label:`Type`,value:_(e)},{label:`Name`,value:g(e)},{label:`Status`,value:ie(v(e.status))}];return e.kind!==`step`&&t.push({label:`Tool ID`,value:e.tool}),e.detail&&t.push({label:e.kind===`step`?`Details`:`Input / Details`,value:h(e.detail)}),e.output&&t.push({label:`Output`,value:h(e.output)}),e.error&&t.push({label:`Error`,value:h(e.error),tone:`error`}),t}var ce=/(token|secret|password|key\s*=|key=)/i,le=[{prefix:`gh auth login`,phrase:`Signed in to GitHub`},{prefix:`gh auth status`,phrase:`Checked GitHub sign-in`},{prefix:`gh auth`,phrase:`Set up GitHub access`},{prefix:`gh repo`,phrase:`Looked up a GitHub repo`},{prefix:`gh `,phrase:`Ran a GitHub command`},{prefix:`git config`,phrase:`Configured git`},{prefix:`git `,phrase:`Ran a git command`},{prefix:`akm add`,phrase:`Added a knowledge source`},{prefix:`akm remove`,phrase:`Removed a knowledge source`},{prefix:`akm `,phrase:`Updated knowledge`},{prefix:`cat `,phrase:`Read a file`},{prefix:`ls `,phrase:`Listed files`},{prefix:`grep`,phrase:`Searched files`},{prefix:`rg `,phrase:`Searched files`}];function ue(e){let t=e;for(;/^[A-Z_][A-Z0-9_]*=\S+\s+/.test(t);)t=t.replace(/^[A-Z_][A-Z0-9_]*=\S+\s+/,``);return t}function de(e){let t=e;for(let e of[` && `,` || `,` | `,` ; `]){let n=t.indexOf(e);n>=0&&(t=t.slice(0,n))}return t.trim()}function fe(e){let t=e.toLowerCase();for(let{prefix:e,phrase:n}of le)if(t.startsWith(e))return n;return null}function pe(e){try{if(e.kind===`step`)return e.title;let t=(e.title||e.tool||``).trim(),n=(e.tool||``).toLowerCase();if(t){let r=de(ue(t));if(r){let t=fe(r);if(t)return t;if(ce.test(r)){let e=r.split(/\s+/)[0]||``;return e?`Ran a ${e} command`:`Ran a command`}return n.includes(`read`)||n.includes(`file`)?`Read a file`:n.includes(`edit`)||n.includes(`write`)||n.includes(`patch`)?`Edited a file`:n.includes(`grep`)||n.includes(`search`)?`Searched`:n.includes(`task`)||n.includes(`agent`)?e.title:r.replace(/^./,e=>e.toUpperCase())}}return n.includes(`read`)||n.includes(`file`)?`Read a file`:n.includes(`edit`)||n.includes(`write`)||n.includes(`patch`)?`Edited a file`:n.includes(`grep`)||n.includes(`search`)?`Searched`:n.includes(`task`)||n.includes(`agent`)?e.title||e.tool||`Worked`:t||e.tool||`Worked`}catch{return e.title||e.tool||`Worked`}}function me(e,t=Date.now()){if(!e)return``;let n=t-e;if(n<0)return`just now`;let r=Math.floor(n/1e3);if(r<45)return`just now`;let i=Math.floor(r/60);if(i<60)return`${i}m ago`;let a=Math.floor(i/60);return a<24?`${a}h ago`:`${Math.floor(a/24)}d ago`}function he(e){let t=e.status;if(t===`error`||t===`failed`)return!0;let n=(e.tool||``).toLowerCase();if(n===`todowrite`||n===`todoread`)return!1;let r=e.title||e.tool||``;return!/^\d+\s+todos?$/i.test(r)}function ge(e){let t=[];for(let n of e){let e=n.info.time?.created??Date.now(),r=``,i=0,a=[];n.parts.forEach((e,t)=>{if(e.type===`text`&&e.text){r+=e.text;return}if(e.type===`tool`||e.state){let r=ne(e,`${n.info.id}:${t}`);if(!r)return;a.push(r)}}),(()=>{let o=r.trim();if(r=``,!(!o&&a.length===0)){if(o){let r={id:i===0?n.info.id:`${n.info.id}:text:${i}`,role:n.info.role,text:o,timestamp:e};a.length>0&&(r.toolStates=[...a],a.length=0),t.push(r),i+=1}else if(a.length>0){let r={id:`${n.info.id}:tools:${i}`,type:`tool-group`,toolStates:[...a],timestamp:e};a.length=0,t.push(r),i+=1}}})()}return t}var _e=`https://github.com/itlackey/openpalm/blob/main/docs/remote-access-tls.md`;function y(e){return e===`localhost`||e===`127.0.0.1`||e===`::1`||e===`[::1]`}function b(e){try{let t=new URL(e);return t.username=``,t.password=``,t.toString().replace(/\/$/,t.pathname===`/`&&!e.endsWith(`/`)?``:`/`)}catch{return e}}function x(e,t=globalThis.location??null){let n;try{n=new URL(e)}catch{return{ok:!1,reason:`invalid-url`,message:`Enter a valid URL.`}}return n.protocol!==`http:`&&n.protocol!==`https:`?{ok:!1,reason:`invalid-url`,message:`The URL must use http:// or https://.`}:n.username||n.password?{ok:!1,reason:`userinfo-not-allowed`,message:`Do not put credentials in the URL. Use the Authentication fields instead.`}:n.protocol===`https:`||y(n.hostname)||t?.protocol!==`https:`?{ok:!0}:{ok:!1,reason:`insecure-remote`,message:`This app runs on a secure (https) origin, so browsers block plain-HTTP connections to remote servers. Use an https:// URL — see the TLS setup guide.`,guideUrl:_e}}function ve(e){let t=globalThis.location,n=b(e);if(!t||y(t.hostname))return n;try{let e=new URL(n);return y(e.hostname)?(e.hostname=t.hostname,e.toString()):n}catch{return n}}function S(e){let t=b(e.baseUrl);return t===e.baseUrl?e:{...e,baseUrl:t}}function ye(e){let t;try{t=new URL(e)}catch{return}if(t.username||t.password)throw Error(`Credentials must use the Authentication fields, not the connection URL.`)}function be(e){return{connections:e.connections.map(e=>({...S(e),baseUrl:e.locked?ve(e.baseUrl):b(e.baseUrl)}))}}var C=`activeId`;function w(e){return structuredClone(e)}function xe(){let e=new Map,t=new Map,n=null;return{async getAll(){return[...e.values()].map(w)},async get(t){let n=e.get(t);return n?w(n):null},async put(t){e.set(t.id,w(S(t)))},async delete(t){e.delete(t)},async getMeta(e){return t.get(e)??null},async setMeta(e,n){n===null?t.delete(e):t.set(e,n)},async getCryptoKey(){return n},async setCryptoKey(e){n=e}}}var Se=`openpalm-ui-connections`,Ce=1,T=`connections`,E=`meta`,D=`keys`,O=`secret-store-aes-gcm-key`;function k(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error??Error(`IndexedDB request failed`))})}function we(e){return new Promise((t,n)=>{let r=indexedDB.open(Se,Ce);r.onupgradeneeded=()=>{let e=r.result;e.objectStoreNames.contains(T)||e.createObjectStore(T,{keyPath:`id`}),e.objectStoreNames.contains(E)||e.createObjectStore(E),e.objectStoreNames.contains(D)||e.createObjectStore(D)},r.onsuccess=()=>{let n=r.result;n.onversionchange=()=>{n.close(),e()},t(n)},r.onerror=()=>n(r.error??Error(`IndexedDB open failed`)),r.onblocked=()=>n(Error(`IndexedDB upgrade blocked by another open connection (close other tabs of this app and retry)`))})}function Te(){let e=null,t=()=>{e=null},n=()=>(e??=we(t),e),r=async(e,t)=>(await n()).transaction(e,t).objectStore(e);return{async getAll(){return k((await r(T,`readonly`)).getAll())},async get(e){return await k((await r(T,`readonly`)).get(e))??null},async put(e){await k((await r(T,`readwrite`)).put(S(e)))},async delete(e){await k((await r(T,`readwrite`)).delete(e))},async getMeta(e){return await k((await r(E,`readonly`)).get(e))??null},async setMeta(e,t){let n=await r(E,`readwrite`);t===null?await k(n.delete(e)):await k(n.put(t,e))},async getCryptoKey(){return await k((await r(D,`readonly`)).get(O))??null},async setCryptoKey(e){await k((await r(D,`readwrite`)).put(e,O))}}}function Ee(e){let{storage:t}=e;async function n(e){let n=await t.get(e);if(!n)return null;let r=S(n);return r.baseUrl!==n.baseUrl&&await t.put(r),r}async function r(e){let t=await n(e);if(!t)throw Error(`Unknown connection: ${e}`);return t}return{async list(){let e=await t.getAll(),n=e.map(S);return await Promise.all(n.map((n,r)=>n.baseUrl===e[r]?.baseUrl?Promise.resolve():t.put(n))),n},get(e){return n(e)},async add(e){ye(e.baseUrl);let r=e.id??ee();if(await n(r))throw Error(`Connection already exists: ${r}`);let i={...e,id:r};return await t.put(i),w(i)},async update(e,n){n.baseUrl!==void 0&&ye(n.baseUrl);let i=await r(e);if(i.locked)throw Error(`Connection is locked (config-owned): ${e}`);let a={...i,...n,id:e};return await t.put(a),w(a)},async remove(e){if((await r(e)).locked)throw Error(`Connection is locked (config-owned): ${e}`);await t.delete(e),await t.getMeta(C)===e&&await t.setMeta(C,null)},async setSecretRef(e,n){let i={...await r(e),auth:n,id:e};return await t.put(i),w(i)},getActiveId(){return t.getMeta(C)},async getActive(){let e=await t.getMeta(C);return e===null?null:n(e)},async setActive(e){await r(e),await t.setMeta(C,e)},async clearActive(){await t.setMeta(C,null)},async seedFromRuntimeConfig(e){if(!e)return;let r=await t.getMeta(C),i=new Set(e.connections.map(e=>e.id));for(let e of await t.getAll())!e.locked||i.has(e.id)||(await t.delete(e.id),r===e.id&&await t.setMeta(C,null));for(let r of e.connections){let e=S(r),i=await n(r.id);if(!i)await t.put(w(e));else if(i.locked){let n=w(e),r=i.auth&&i.auth.mode!==`none`;await t.put(r?{...n,auth:i.auth}:n)}}if(await t.getMeta(C)!==null)return;let a=e.connections.find(e=>e.isDefault);a&&await t.get(a.id)&&await t.setMeta(C,a.id)}}}async function De(e=globalThis.fetch){try{let t=await e(`/runtime-config.json`,{method:`GET`,headers:{accept:`application/json`},credentials:`omit`});if(!t.ok)return null;let n=await t.json();return!n||typeof n!=`object`||!Array.isArray(n.connections)?null:be(n)}catch{return null}}var A=`secret:`,j=2,Oe=256,ke=12;function M(){return typeof crypto<`u`&&!!crypto.subtle}function Ae(e){return!!e&&typeof e==`object`&&e.v===j&&typeof e.iv==`string`&&typeof e.ciphertext==`string`}function N(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t)}function P(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}var F=new WeakMap;async function je(e){let t=await e.getCryptoKey();if(t)return t;let n=F.get(e);return n||(n=(async()=>{let t=await crypto.subtle.generateKey({name:`AES-GCM`,length:Oe},!1,[`encrypt`,`decrypt`]);return await e.setCryptoKey(t),t})(),F.set(e,n),n.catch(()=>{F.delete(e)})),n}async function Me(e,t){let n=crypto.getRandomValues(new Uint8Array(ke)),r=new TextEncoder().encode(JSON.stringify(t)),i=new Uint8Array(await crypto.subtle.encrypt({name:`AES-GCM`,iv:n},e,r));return{v:j,iv:N(n),ciphertext:N(i)}}async function Ne(e,t){let n=P(t.iv),r=P(t.ciphertext),i=await crypto.subtle.decrypt({name:`AES-GCM`,iv:n},e,r);return JSON.parse(new TextDecoder().decode(i))}async function I(e,t,n){if(!M()){await e.setMeta(A+t,JSON.stringify(n));return}let r=await Me(await je(e),n);await e.setMeta(A+t,JSON.stringify(r))}async function L(e,t){let n=await e.getMeta(A+t);if(n===null)return null;let r;try{r=JSON.parse(n)}catch{return null}if(Ae(r))try{return await Ne(await je(e),r)}catch{return null}let i=r;if(M())try{await I(e,t,i)}catch{}return i}function Pe(e){return{async set(t,n){await I(e,t,n)},async delete(t){await e.setMeta(A+t,null)},async resolveAuth(t){if(t.auth.mode!==`basic`||!t.auth.secretRef)return{mode:`none`};let n=await L(e,t.auth.secretRef);if(!n||typeof n.password!=`string`)return{mode:`none`};let r=t.auth.username||n.username;return r?{mode:`basic`,username:r,password:n.password}:{mode:`basic`,password:n.password}},async updateUsername(t,n){let r=await L(e,t);if(!r)return;let i={...r};n===void 0?delete i.username:i.username=n,await I(e,t,i)}}}var Fe=1e3,Ie=3e4;function Le(e){let t={},n=[];for(let r of e.split(`
2
- `))!r||r.startsWith(`:`)||(r.startsWith(`data:`)?n.push(r.replace(/^data:\s?/,``)):r.startsWith(`event:`)?t.event=r.replace(/^event:\s?/,``):r.startsWith(`id:`)&&(t.id=r.replace(/^id:\s?/,``)));return n.length>0&&(t.data=n.join(`
3
- `)),t}function Re(e,t){let n=t.properties?.info,r=n?.id??t.sessionID;if(r)switch(t.type){case`session.created`:e.onCreated(r);return;case`session.updated`:e.onUpdated(r,{title:n?.title,updatedAt:n?.time?.updated});return;case`session.deleted`:e.onDeleted(r);return;default:return}}function ze(e){let t=!1,n=new AbortController,r=e=>new Promise(t=>{let r=setTimeout(t,e);n.signal.addEventListener(`abort`,()=>{clearTimeout(r),t()},{once:!0})});async function i(){let t=!1;await W().subscribeEvents(n=>{t||(t=!0,e.onConnect?.());let r=n;e.onEvent?.(r),Re(e,r)},n.signal)}return(async()=>{let a=0;for(;!t;)try{a++,await i(),a=0,t||await r(500)}catch(i){if(t)return;let o=i instanceof Error?i:Error(String(i));o.name!==`AbortError`&&(console.warn(`[session-events] SSE error, reconnecting`,o),e.onDisconnect?.(o)),await r(Math.min(Fe*2**Math.max(0,a-1),Ie)),n.signal.aborted&&!t&&(n=new AbortController)}})(),()=>{t=!0;try{n.abort()}catch{}}}var Be=5e3;function Ve(e){let t=new TextEncoder().encode(e),n=``;for(let e of t)n+=String.fromCharCode(e);return btoa(n)}function He(e){return e.mode===`basic`?`Basic ${Ve(`${e.username??`opencode`}:${e.password}`)}`:null}function Ue(e,t,n=globalThis.fetch){function r(){let t=e();if(!t)throw Error(`No active connection`);return t}function i(e){return e.baseUrl.replace(/\/+$/,``)}async function a(e){let{authorization:n}=await t(e);return n?{authorization:n}:{}}return{async request(e,t,o){let s=r(),c={method:e,headers:{...o===void 0?{}:{"content-type":`application/json`},...await a(s)},credentials:`omit`};o!==void 0&&(c.body=JSON.stringify(o));let l=await n(`${i(s)}${t}`,c);if(!l.ok)throw Object.assign(Error(`HTTP ${l.status}`),{status:l.status});return l},async subscribeEvents(e,t){let o=r(),s=await n(`${i(o)}/event`,{method:`GET`,headers:{accept:`text/event-stream`,...await a(o)},credentials:`omit`,signal:t});if(!s.ok||!s.body)throw Object.assign(Error(`SSE stream failed: HTTP ${s.status}`),{status:s.status});let c=s.body.getReader(),l=new TextDecoder,u=``;try{for(;;){let{done:t,value:n}=await c.read();if(t)break;u+=l.decode(n,{stream:!0});let r=u.split(`
4
-
5
- `);u=r.pop()??``;for(let t of r){if(!t)continue;let n=Le(t);if(!n.data)continue;let r;try{r=JSON.parse(n.data)}catch{continue}e(r)}}}finally{try{c.releaseLock()}catch{}}},async probeHealth(){let t=e();if(!t)return{status:`unreachable`};let r=i(t),o=x(r);if(!o.ok&&o.reason===`insecure-remote`)return{status:`insecure`};try{let e=await n(`${r}/`,{method:`GET`,headers:await a(t),credentials:`omit`,cache:`no-store`,signal:AbortSignal.timeout(Be)});return e.status===401||e.status===403?{status:`unauthorized`}:e.ok||e.status>=300&&e.status<400?{status:`accessible`}:{status:`unreachable`}}catch{return{status:`unreachable`}}}}}var R=null,z=null,B=null,V=null;function We(){try{if(typeof indexedDB<`u`)return Te()}catch{}return xe()}function H(){if(R&&z&&B)return;let e=We(),t=Ee({storage:e}),n=Pe(e),r=Ue(()=>V,async e=>({authorization:He(await n.resolveAuth(e))??void 0}));R=t,z=n,B=r}function U(){return H(),R}function Ge(){return H(),z}function W(){return H(),B}function G(e){V=e}async function Ke(){return await(await W().request(`POST`,`/session`,{})).json()}async function qe(){let e=(await(await W().request(`GET`,`/session`)).json()).map(e=>({id:e.id,title:e.title??``,createdAt:e.time?.created??0,updatedAt:e.time?.updated??e.time?.created??0}));return e.sort((e,t)=>t.updatedAt-e.updatedAt),e}async function Je(e){return ge(await(await W().request(`GET`,`/session/${encodeURIComponent(e)}/message`)).json())}async function Ye(e,t){return await(await W().request(`POST`,`/session/${encodeURIComponent(e)}/message`,{parts:[{type:`text`,text:t}]})).json()}async function Xe(e,t){await W().request(`POST`,`/session/${encodeURIComponent(e)}/message`,{parts:[{type:`text`,text:t}]})}async function Ze(e){await(await W().request(`POST`,`/session/${encodeURIComponent(e)}/abort`,{})).text().catch(()=>``)}async function Qe(e,t){await(await W().request(`POST`,`/permission/${encodeURIComponent(e)}/reply`,{reply:t})).text().catch(()=>``)}async function $e(e,t){await(await W().request(`POST`,`/question/${encodeURIComponent(e)}/reply`,{answers:t})).text().catch(()=>``)}async function et(e){await(await W().request(`POST`,`/question/${encodeURIComponent(e)}/reject`,{})).text().catch(()=>``)}async function tt(){return(await W().probeHealth()).status===`accessible`}var nt=e(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v2"></path><path d="M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715"></path><path d="M16 12a4 4 0 0 0-4-4"></path><path d="m19 5-1.256 1.256"></path><path d="M20 12h2"></path></svg>`);function rt(e,n){let o=i(n,`size`,3,20),s=i(n,`class`,3,``);var c=nt();r(()=>{u(c,`width`,o()),u(c,`height`,o()),a(c,0,`lucide lucide-sun-moon-icon lucide-sun-moon s-icon ${s()??``}`)}),t(e,c)}var it=e(`<svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4"></circle><path d="M12 2.5v2.2M12 19.3v2.2M4.6 4.6l1.6 1.6M17.8 17.8l1.6 1.6M2.5 12h2.2M19.3 12h2.2M19.4 4.6l-1.6 1.6M6.2 17.8l-1.6 1.6"></path></svg>`);function at(e,n){let o=i(n,`size`,3,20),s=i(n,`class`,3,``);var c=it();r(()=>{u(c,`width`,o()),u(c,`height`,o()),a(c,0,`s-icon ${s()??``}`)}),t(e,c)}var ot=e(`<svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.8A9 9 0 1 1 11.2 3 7 7 0 0 0 21 12.8z"></path></svg>`);function st(e,n){let o=i(n,`size`,3,20),s=i(n,`class`,3,``);var c=ot();r(()=>{u(c,`width`,o()),u(c,`height`,o()),a(c,0,`s-icon ${s()??``}`)}),t(e,c)}function K(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function ct(e){if(e.type!==`message.part.updated`)return null;let t=e.properties?.part;return typeof t?.id==`string`&&typeof t.type==`string`?{partID:t.id,type:t.type}:null}function lt(e,t,n){let r=e.properties??{};if(K(r,`sessionID`)!==t)return null;if(e.type===`session.next.text.delta`)return K(r,`delta`)??K(r,`text`)??null;if(e.type===`message.part.delta`){let e=K(r,`field`);if(e&&e!==`text`)return null;let t=K(r,`partID`);return t&&n?.has(t)?null:K(r,`delta`)??null}return null}function ut(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`&&typeof e.type==`string`)return e.type}function dt(e,t){let n=e.properties??{};if(K(n,`sessionID`)!==t)return!1;if(e.type===`session.idle`)return!0;if(e.type===`session.status`){let e=ut(n.status);return e===`idle`||e===`completed`||e===`done`}return!1}function q(e){if(typeof e==`string`)return e;if(e!=null){if(typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)}catch{return}}}function J(...e){for(let t of e){let e=q(t);if(e)return e}}function ft(e,t){let n=e.properties??{};if(K(n,`sessionID`)!==t)return null;let r=n.part??n.tool;if(e.type===`message.part.updated`&&r&&(r.type===`tool`||r.state)){let e=r.state??{};return{callID:String(r.callID??r.id??``),tool:String(r.tool??`tool`),status:String(e.status??`running`),title:typeof e.title==`string`?e.title:void 0,detail:J(e.input,e.metadata,e.progress,e.output),output:q(e.output),error:typeof e.error==`string`?e.error:void 0}}if(e.type.startsWith(`session.next.tool.`)){let t=e.type.replace(`session.next.tool.`,``);return{callID:K(n,`callID`)??``,tool:K(n,`tool`)??`tool`,status:t===`completed`?`completed`:t===`failed`?`error`:t===`called`?`running`:K(n,`status`)??`running`,title:K(n,`title`)??K(n,`tool`),detail:J(n.message,n.delta,n.progress,n.input,n.metadata),output:J(n.output,n.result),error:J(n.error)}}return null}function pt(e,t){return e.type===`session.error`&&K(e.properties,`sessionID`)===t}function mt(e,t){if(e.type!==`permission.asked`||K(e.properties,`sessionID`)!==t)return null;let n=K(e.properties,`id`);if(!n)return null;let r=Array.isArray(e.properties?.patterns)?e.properties.patterns.filter(e=>typeof e==`string`):[],i=Array.isArray(e.properties?.always)?e.properties.always.filter(e=>typeof e==`string`):[],a=e.properties?.tool;return{requestID:n,permission:K(e.properties,`permission`)??`tool`,patterns:r,always:i,tool:K(a,`callID`)??K(e.properties,`permission`)??`tool`,detail:J(e.properties?.metadata,e.properties?.message)??``}}function ht(e,t){if(e.type!==`question.asked`||K(e.properties,`sessionID`)!==t)return null;let n=K(e.properties,`id`);if(!n)return null;let r=Array.isArray(e.properties?.questions)?e.properties.questions:[],i=[];for(let e of r){let t=e,n=Array.isArray(t.options)?t.options.map(e=>e).filter(e=>typeof e.label==`string`).map(e=>({label:e.label,description:typeof e.description==`string`?e.description:``})):[];i.push({question:typeof t.question==`string`?t.question:``,header:typeof t.header==`string`?t.header:``,options:n})}return i.length===0?null:{requestID:n,questions:i}}function gt(e,t){let n=e.properties??{};return K(n,`sessionID`)!==t||e.type!==`session.next.step.started`&&e.type!==`session.next.step.ended`?null:{id:K(n,`stepID`)??K(n,`id`)??e.type,title:K(n,`title`)??K(n,`step`)??(e.type===`session.next.step.started`?`Working`:`Step complete`),status:e.type===`session.next.step.ended`?`completed`:`running`,detail:J(n.detail,n.message)}}var _t=[`forEach`,`isDisjointFrom`,`isSubsetOf`,`isSupersetOf`],vt=[`difference`,`intersection`,`symmetricDifference`,`union`],Y=!1,yt=class e extends Set{#e=new Map;#t=p(0);#n=p(0);#r=d||-1;constructor(e){if(super(),e){for(var t of e)super.add(t);this.#n.v=super.size}Y||this.#a()}#i(e){return d===this.#r?p(e):c(e)}#a(){Y=!0;var t=e.prototype,r=Set.prototype;for(let e of _t)t[e]=function(...t){return n(this.#t),r[e].apply(this,t)};for(let i of vt)t[i]=function(...t){return n(this.#t),new e(r[i].apply(this,t))}}has(e){var t=super.has(e),r=this.#e,i=r.get(e);if(i===void 0){if(!t)return n(this.#t),!1;i=this.#i(!0),r.set(e,i)}return n(i),t}add(e){return super.has(e)||(super.add(e),o(this.#n,super.size),f(this.#t)),this}delete(e){var t=super.delete(e),n=this.#e,r=n.get(e);return r!==void 0&&(n.delete(e),o(r,!1)),t&&(o(this.#n,super.size),f(this.#t)),t}clear(){if(super.size!==0){super.clear();var e=this.#e;for(var t of e.values())o(t,!1);e.clear(),o(this.#n,0),f(this.#t)}}keys(){return this.values()}values(){return n(this.#t),super.values()}entries(){return n(this.#t),super.entries()}[Symbol.iterator](){return this.keys()}get size(){return n(this.#n)}},bt=class extends Map{#e=new Map;#t=p(0);#n=p(0);#r=d||-1;constructor(e){if(super(),e){for(var[t,n]of e)super.set(t,n);this.#n.v=super.size}}#i(e){return d===this.#r?p(e):c(e)}has(e){var t=this.#e,r=t.get(e);if(r===void 0)if(super.has(e))r=this.#i(0),t.set(e,r);else return n(this.#t),!1;return n(r),!0}forEach(e,t){this.#a(),super.forEach(e,t)}get(e){var t=this.#e,r=t.get(e);if(r===void 0)if(super.has(e))r=this.#i(0),t.set(e,r);else{n(this.#t);return}return n(r),super.get(e)}set(e,t){var n=this.#e,r=n.get(e),i=super.get(e),a=super.set(e,t),s=this.#t;if(r===void 0)r=this.#i(0),n.set(e,r),o(this.#n,super.size),f(s);else if(i!==t){f(r);var c=s.reactions===null?null:new Set(s.reactions);(c===null||!r.reactions?.every(e=>c.has(e)))&&f(s)}return a}delete(e){var t=this.#e,n=t.get(e),r=super.delete(e);return n!==void 0&&(t.delete(e),o(n,-1)),r&&(o(this.#n,super.size),f(this.#t)),r}clear(){if(super.size!==0){super.clear();var e=this.#e;o(this.#n,0);for(var t of e.values())o(t,-1);f(this.#t),e.clear()}}#a(){n(this.#t);var e=this.#e;if(this.#n.v!==e.size){for(var t of super.keys())if(!e.has(t)){var r=this.#i(0);e.set(t,r)}}for([,r]of this.#e)n(r)}keys(){return n(this.#t),super.keys()}values(){return this.#a(),super.values()}entries(){return this.#a(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return n(this.#n),super.size}},X=`openpalm.desktop.notify`,xt=`openpalm.desktop.notify.preview`;function St(e){if(typeof window>`u`)return!1;try{return window.localStorage.getItem(e)===`1`}catch{return!1}}function Ct(e,t){if(!(typeof window>`u`))try{window.localStorage.setItem(e,t?`1`:`0`)}catch{}}function wt(){return St(X)}function Tt(){return St(xt)}function Et(e){Ct(X,e)}function Dt(e){Ct(xt,e)}function Ot(){return typeof document>`u`||document.hasFocus()||!wt()?!1:typeof window<`u`&&typeof window.openpalm?.notify==`function`}function kt(e){if(!Ot())return;let t=Tt()&&e.trim()?e.trim():`Assistant replied`;window.openpalm?.notify?.(`OpenPalm`,t)}function At(){Ot()&&window.openpalm?.notify?.(`OpenPalm`,`Assistant error`)}var Z=new Set,Q=new Set;function jt(e){return Z.add(e),()=>{Z.delete(e)}}function Mt(e){return Q.add(e),()=>{Q.delete(e)}}function Nt(){for(let e of Q){let t=e();if(t)return t}return null}async function Pt(e){for(let t of Z)await t(e)}function Ft(e){return{...e,url:e.baseUrl,isDefault:!!(e.isDefault||e.locked),hasPassword:e.auth.mode===`basic`}}var It=new class{#e=p(l([]));get endpoints(){return n(this.#e)}set endpoints(e){o(this.#e,e,!0)}#t=p(``);get activeId(){return n(this.#t)}set activeId(e){o(this.#t,e,!0)}#n=p(!1);get loading(){return n(this.#n)}set loading(e){o(this.#n,e,!0)}#r=p(!1);get loaded(){return n(this.#r)}set loaded(e){o(this.#r,e,!0)}#i=p(``);get error(){return n(this.#i)}set error(e){o(this.#i,e,!0)}seeded=!1;#a=s(()=>this.endpoints.find(e=>e.id===this.activeId)??this.endpoints[0]??null);get active(){return n(this.#a)}set active(e){o(this.#a,e)}async load(e=!1){if(!this.loading&&!(this.loaded&&!e)){this.loading=!0,this.error=``;try{let e=U();this.seeded||(this.seeded=!0,await e.seedFromRuntimeConfig(await De()));let[t,n]=await Promise.all([e.list(),e.getActiveId()]);this.endpoints=t.map(Ft),this.activeId=n??this.endpoints[0]?.id??``,G(t.find(e=>e.id===this.activeId)??null),this.loaded=!0}catch(e){let t=e;this.error=t.message??`Failed to load connections`}finally{this.loading=!1}}}activationSeq=0;async activate(e){if(e===this.activeId)return;let t=Nt();if(t)throw this.error=t,Error(t);let n=++this.activationSeq,r=this.activeId,i=this.endpoints.find(e=>e.id===r)??null;this.activeId=e;let a=U();try{await a.setActive(e),G(await a.get(e)??null),await Pt(e)}catch(e){n===this.activationSeq&&(this.activeId=r,i?(await a.setActive(r).catch(()=>{}),G(i)):(await a.clearActive().catch(()=>{}),G(null)));let t=e;throw this.error=t.message??`Failed to switch connection`,e}}},Lt=e(`<svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg>`);function Rt(e,n){let o=i(n,`size`,3,20),s=i(n,`class`,3,``);var c=Lt();r(()=>{u(c,`width`,o()),u(c,`height`,o()),a(c,0,`s-icon ${s()??``}`)}),t(e,c)}var zt=`a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`;function $(e){return Array.from(e.querySelectorAll(zt)).filter(e=>!e.hasAttribute(`hidden`)&&e.getAttribute(`aria-hidden`)!==`true`)}function Bt(e={}){return t=>{if(e.active===!1)return;let n=document.activeElement,r=e.initialFocus?t.querySelector(e.initialFocus):null;return((r&&$(r)[0])??$(t)[0]??t).focus(),()=>{e.deferRestore?requestAnimationFrame(()=>n?.focus?.()):n?.focus?.()}}}function Vt(e,t){if(e.key===`Escape`){t();return}if(e.key!==`Tab`)return;let n=$(e.currentTarget);if(n.length===0){e.preventDefault(),e.currentTarget.focus();return}let r=n[0],i=n.at(-1);if(!r||!i)return;let a=document.activeElement;e.shiftKey&&(a===r||a===e.currentTarget)?(e.preventDefault(),i.focus()):!e.shiftKey&&a===i&&(e.preventDefault(),r.focus())}var Ht=new Intl.DateTimeFormat(void 0,{hour:`numeric`,minute:`2-digit`}),Ut=new Intl.DateTimeFormat(void 0,{year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`});function Wt(e){return e?Ht.format(e):``}function Gt(e){return e?Ut.format(e):``}function Kt(e,t=`—`){if(!e)return t;let n=new Date(e);return Number.isNaN(n.getTime())?t:n.toLocaleString()}function qt(e){if(!Number.isFinite(e))return`—`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(n>=10||r===0?0:1)} ${t[r]}`}function Jt(e){if(!e)return``;let t=Math.max(0,(Date.now()-e)/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);if(i===1)return`yesterday`;if(i<7)return`${i}d ago`;let a=Math.floor(i/7);if(a<5)return`${a}w ago`;let o=Math.floor(i/30);return o<12?`${o}mo ago`:`${Math.floor(i/365)}y ago`}var Yt=e(`<svg aria-hidden="true" viewBox="0 0 24 24"><rect fill="currentColor" stroke="none" x="7" y="7" width="10" height="10" rx="1.4"></rect></svg>`);function Xt(e,n){let o=i(n,`size`,3,20),s=i(n,`class`,3,``);var c=Yt();r(()=>{u(c,`width`,o()),u(c,`height`,o()),a(c,0,`s-icon ${s()??``}`)}),t(e,c)}export{se as $,at as A,Ye as B,gt as C,dt as D,pt as E,qe as F,ze as G,U as H,tt as I,pe as J,y as K,et as L,Ze as M,Ke as N,ct as O,Je as P,oe as Q,Qe as R,ht as S,ft as T,Ge as U,Xe as V,W,me as X,he as Y,g as Z,Et as _,Jt as a,yt as b,Vt as c,jt as d,ae as et,Mt as f,kt as g,At as h,Gt as i,rt as j,st as k,Rt as l,Tt as m,qt as n,v as nt,Wt as o,wt as p,x as q,Kt as r,Bt as s,Xt as t,_ as tt,It as u,Dt as v,lt as w,mt as x,bt as y,$e as z};
@@ -1,5 +0,0 @@
1
- import{U as e,ct as t,ot as n,ut as r}from"./DTLQuSQp.js";var i={info:4e3,success:5e3,error:8e3},a=new class{#e=r(n([]));get toasts(){return e(this.#e)}set toasts(e){t(this.#e,e,!0)}timers=new Map;push(e,t,n={}){let r=n.replaceId??(typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`t-${Date.now()}-${Math.random().toString(36).slice(2)}`),a=n.sticky?null:n.ttlMs??i[e],o={id:r,kind:e,message:t,ttlMs:a},s=this.timers.get(r);s&&(clearTimeout(s),this.timers.delete(r));let c=this.toasts.findIndex(e=>e.id===r);if(c>=0){let e=[...this.toasts];e[c]=o,this.toasts=e}else this.toasts=[...this.toasts,o];if(a!==null){let e=setTimeout(()=>this.dismiss(r),a);this.timers.set(r,e)}return r}dismiss(e){let t=this.timers.get(e);t&&(clearTimeout(t),this.timers.delete(e)),this.toasts=this.toasts.filter(t=>t.id!==e)}clear(){for(let e of this.timers.values())clearTimeout(e);this.timers.clear(),this.toasts=[]}},o=`openpalm.theme`,s=`data-theme`,c=`#161c22`,l=`#f9fafb`;function u(e){return e===`light`||e===`dark`||e===`system`}var d=new class{#e=r(`system`);get preference(){return e(this.#e)}set preference(e){t(this.#e,e,!0)}#t=r(`light`);get resolved(){return e(this.#t)}set resolved(e){t(this.#t,e,!0)}#n=r(!1);get initialized(){return e(this.#n)}set initialized(e){t(this.#n,e,!0)}#r=null;#i=()=>{this.preference===`system`&&(this.resolved=this.#s(`system`),this.#l())};init(){typeof window>`u`||this.initialized||(this.preference=this.#a(),this.resolved=this.#s(this.preference),this.#c(),this.#l(),this.initialized=!0)}setPreference(e){this.preference=e,this.resolved=this.#s(e),this.#o(e),this.#l()}toggle(){let e=this.preference===`system`?`light`:this.preference===`light`?`dark`:`system`;this.setPreference(e)}dispose(){this.#r&&(typeof this.#r.removeEventListener==`function`?this.#r.removeEventListener(`change`,this.#i):this.#r.removeListener(this.#i)),this.#r=null,this.initialized=!1}#a(){if(typeof window>`u`)return`system`;try{let e=window.localStorage.getItem(o);return u(e)?e:`system`}catch{return`system`}}#o(e){if(!(typeof window>`u`))try{window.localStorage.setItem(o,e)}catch{}}#s(e){return e===`light`||e===`dark`?e:typeof window>`u`||typeof window.matchMedia!=`function`?`light`:window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}#c(){if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`);this.#r!==e&&(this.#r&&(typeof this.#r.removeEventListener==`function`?this.#r.removeEventListener(`change`,this.#i):this.#r.removeListener(this.#i)),this.#r=e,typeof e.addEventListener==`function`?e.addEventListener(`change`,this.#i):e.addListener(this.#i))}#l(){if(typeof document>`u`)return;let e=document.documentElement;e.setAttribute(s,this.resolved),e.style.colorScheme=this.resolved;let t=document.querySelector(`meta[name="theme-color"]`);t&&(t.content=this.resolved===`dark`?c:l);let n=document.querySelector(`meta[name="color-scheme"]`);n&&(n.content=this.resolved)}},f=[`audio/webm;codecs=opus`,`audio/webm`];function p(){let e=globalThis.MediaRecorder;if(!(!e||typeof e.isTypeSupported!=`function`)){for(let t of f)if(e.isTypeSupported(t))return t}}async function ee(){if(typeof window>`u`)throw Error(`Recording is only available in the browser.`);if(typeof MediaRecorder>`u`||!navigator?.mediaDevices?.getUserMedia)throw Error(`Recording is not supported in this browser.`);let e;try{e=await navigator.mediaDevices.getUserMedia({audio:!0})}catch(e){let t=e?.name??``;throw Error(t===`NotAllowedError`||t===`SecurityError`?`Microphone access denied. Open System Settings → Privacy & Security → Microphone and enable OpenPalm, then restart the app.`:t===`NotFoundError`||t===`OverconstrainedError`?`No microphone was found. Plug in a microphone and try again.`:`Microphone error: ${e?.message??String(e)}`,{cause:e})}return m(e,!0)}function te(e){if(typeof MediaRecorder>`u`)throw Error(`Recording is not supported in this browser.`);return m(e,!1)}function m(e,t){let n=p(),r=n?new MediaRecorder(e,{mimeType:n}):new MediaRecorder(e),i=[];r.addEventListener(`dataavailable`,e=>{let t=e.data;t&&t.size>0&&i.push(t)});let a=!1,o=!1,s=null,c=null;function l(){if(t)for(let t of e.getTracks())try{t.stop()}catch{}}return r.addEventListener(`stop`,()=>{if(l(),o)return;let e=new Blob(i,{type:r.mimeType||n||`audio/webm`});s?.(e)}),r.addEventListener(`error`,e=>{l();let t=e?.error??Error(`Recorder error`);c?.(t)}),r.start(),{stop(){return a?Promise.reject(Error(`Recorder already stopped`)):(a=!0,new Promise((e,t)=>{s=e,c=t;try{r.state!==`inactive`&&r.stop()}catch(e){l(),t(e)}}))},cancel(){if(!a){a=!0,o=!0;try{r.state!==`inactive`&&r.stop()}catch{}l()}}}}var ne={threshold:.02,startFrames:3,endSilenceMs:900,frameIntervalMs:50};function re(e,t){if(e.length===0)return t;let n=[...e].sort((e,t)=>e-t),r=n[Math.floor((n.length-1)*.2)];return Math.max(t,r*2.75)}function h(e){return{...e,threshold:e.threshold*3,startFrames:8}}function ie(){return{speaking:!1,aboveCount:0,silenceMs:0}}function ae(e,t,n){let r=t>=n.threshold;if(!e.speaking){let t=r?e.aboveCount+1:0;return t>=n.startFrames?{state:{speaking:!0,aboveCount:0,silenceMs:0},event:`speech-start`}:{state:{speaking:!1,aboveCount:t,silenceMs:0},event:null}}let i=r?0:e.silenceMs+n.frameIntervalMs;return i>=n.endSilenceMs?{state:{speaking:!1,aboveCount:0,silenceMs:0},event:`speech-end`}:{state:{speaking:!0,aboveCount:0,silenceMs:i},event:null}}function g(e){if(e.length===0)return 0;let t=0;for(let n=0;n<e.length;n++){let r=(e[n]-128)/128;t+=r*r}return Math.sqrt(t/e.length)}async function _(e){if(typeof window>`u`||!navigator?.mediaDevices?.getUserMedia)throw Error(`Voice detection is not supported in this browser.`);let t=window.AudioContext??window.webkitAudioContext;if(!t)throw Error(`Voice detection is not supported in this browser.`);let n;try{n=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0}})}catch(e){let t=e?.name??``;throw Error(t===`NotAllowedError`||t===`SecurityError`?`Microphone access denied.`:`Microphone error: ${e?.message??String(e)}`,{cause:e})}let r=e.config??ne,i=new t,a=i.createMediaStreamSource(n),o=i.createAnalyser();o.fftSize=1024,a.connect(o);let s=new Uint8Array(o.fftSize),c=ie(),l=[],u=r,d=h(r),f=!1,p=setInterval(()=>{o.getByteTimeDomainData(s);let t=g(s);if(!f){l.push(t),l.length>=20&&(u={...r,threshold:re(l,r.threshold)},d=h(u),f=!0);return}let n=e.isAssistantSpeaking?.()?d:u,i=ae(c,t,n);c=i.state,i.event===`speech-start`?e.onSpeechStart():i.event===`speech-end`&&e.onSpeechEnd()},r.frameIntervalMs);return{stream:n,stop(){clearInterval(p);try{a.disconnect()}catch{}i.close().catch(()=>{});for(let e of n.getTracks())try{e.stop()}catch{}}}}function v(){if(typeof crypto<`u`&&typeof crypto.randomUUID==`function`)return crypto.randomUUID();let e=crypto.getRandomValues(new Uint8Array(16));e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}var y=``;function b(){return{"x-request-id":v(),"x-requested-by":`ui`}}async function x(e,t,n,r){let i={...n===void 0?{}:{"content-type":`application/json`},...b()};return fetch(`${y}${t}`,{...r,method:e,headers:i,credentials:`include`,...n===void 0?{}:{body:JSON.stringify(n)}})}async function S(e,t=`Request failed (HTTP ${e.status})`){if((e.headers.get(`content-type`)??``).includes(`application/json`)){let t=await e.clone().json().catch(e=>(console.warn(`[api] Failed to parse JSON error response:`,e),null));if(t&&typeof t.message==`string`&&t.message.length>0)return t.message;if(t&&typeof t.error==`string`&&t.error.length>0)return t.error}return await e.text().catch(e=>(console.warn(`[api] Failed to read error response text:`,e),``))||t}async function C(e,t){if(e.status===401)throw Object.assign(Error(`Sign-in required.`),{status:401});if(!e.ok)throw Object.assign(Error(await S(e,t)),{status:e.status});return e}async function oe(e,t){if(e.status===401)throw Object.assign(Error(`Sign-in required.`),{status:401});if(!(e.headers.get(`content-type`)??``).includes(`application/json`))throw Error(await S(e,t));return await e.json()}async function w(){return await(await C(await x(`GET`,`/api/host/voice`))).json()}async function se(e){let t=await x(`PUT`,`/api/host/voice`,e);if(t.status===401)throw Object.assign(Error(`Invalid password.`),{status:401});if(t.status===200||t.status===202||t.status===502)return{...await t.json(),status:t.status};throw Error(await S(t))}async function T(e,t){let n=new FormData;n.append(`audio`,e,`recording.webm`),t?.language&&n.append(`language`,t.language),t?.prompt&&n.append(`prompt`,t.prompt);let r=await(await C(await fetch(`/api/transcribe`,{method:`POST`,headers:b(),credentials:`include`,body:n}))).json();return typeof r.text==`string`?r.text:``}var ce={"&amp;":`&`,"&lt;":`<`,"&gt;":`>`,"&quot;":`"`,"&#39;":`'`};function le(e){return e.replace(/&amp;|&lt;|&gt;|&quot;|&#39;/g,e=>ce[e]??e)}function ue(e){try{return new URL(e).hostname}catch{return e}}function de(e){let t=e;t=t.replace(/```[\s\S]*?```/g,` Code omitted. `),t=t.replace(/`([^`]+)`/g,`$1`),t=t.replace(/!\[([^\]]*)\]\([^)]*\)/g,`$1`),t=t.replace(/\[([^\]]*)\]\([^)]*\)/g,`$1`),t=t.replace(/https?:\/\/[^\s)<>"']+/g,e=>ue(e)),t=t.replace(/<[^>]+>/g,``),t=t.replace(/^\s*(?:-{3,}|\*{3,}|_{3,})\s*$/gm,``);let n=[];for(let e of t.split(`
2
- `)){let t=e;if(/^\s*\|?[\s:|-]+\|?\s*$/.test(t)&&t.includes(`-`)&&t.includes(`|`))continue;t=t.replace(/^\s*>\s?/,``),t=t.replace(/^\s*#{1,6}\s+/,``);let r=/^\s*(?:[-*+]|\d+\.)\s+/.test(t);t=t.replace(/^\s*(?:[-*+]|\d+\.)\s+/,``),t.includes(`|`)&&(t=t.replace(/^\s*\|/,``).replace(/\|\s*$/,``).split(`|`).map(e=>e.trim()).join(`, `)),t=t.trim(),r&&t&&!/[.!?:]$/.test(t)&&(t+=`.`),n.push(t)}return t=n.join(`
3
- `),t=t.replace(/~~(.+?)~~/g,`$1`),t=t.replace(/\*\*(.+?)\*\*/g,`$1`),t=t.replace(/__(.+?)__/g,`$1`),t=t.replace(/\*(.+?)\*/g,`$1`),t=t.replace(/(?<![A-Za-z0-9_])_(.+?)_(?![A-Za-z0-9_])/g,`$1`),t=le(t),t=t.replace(/<\/?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?\/?>/g,``),t=t.replace(/\n{3,}/g,`
4
-
5
- `),t=t.replace(/[^\S\n]{2,}/g,` `),t.trim()}var E=20,D=class{host;onQueueDrained=null;activeAudio=null;activeAudioUrl=null;speakQueue=[];busy=!1;generation=0;overflowNoticed=!1;pendingAutoplayAudio=null;pendingAutoplayUrl=null;constructor(e){this.host=e}primeForAutoplay(){if(typeof window>`u`)return;let e=window.AudioContext??window.webkitAudioContext;if(e)try{let t=new e,n=t.createBuffer(1,1,22050),r=t.createBufferSource();r.buffer=n,r.connect(t.destination),r.start(0),setTimeout(()=>{t.close().catch(()=>{})},100)}catch{}}teardownActiveAudio(){if(this.activeAudio){this.activeAudio.onerror=null,this.activeAudio.onended=null;try{this.activeAudio.pause()}catch{}this.activeAudio.src=``,this.activeAudio=null}this.activeAudioUrl&&=(URL.revokeObjectURL(this.activeAudioUrl),null)}teardownPendingAutoplay(){if(this.pendingAutoplayAudio){this.pendingAutoplayAudio.onerror=null,this.pendingAutoplayAudio.onended=null;try{this.pendingAutoplayAudio.pause()}catch{}this.pendingAutoplayAudio.src=``,this.pendingAutoplayAudio=null}this.pendingAutoplayUrl&&=(URL.revokeObjectURL(this.pendingAutoplayUrl),null),this.host.autoplayBlocked=!1}resume(){let e=this.pendingAutoplayAudio;if(!e){this.host.autoplayBlocked=!1;return}this.host.autoplayBlocked=!1,this.host.errorMessage=``,this.host.status=`speaking`,this.busy=!0,this.activeAudio=e,this.activeAudioUrl=this.pendingAutoplayUrl,this.pendingAutoplayAudio=null,this.pendingAutoplayUrl=null,e.play().catch(()=>{this.host.status=`idle`,this.host.errorMessage=`Audio playback failed.`,this.teardownActiveAudio(),this.drainNext()})}async speak(e){if(!(typeof window>`u`||!e.trim())){if(this.busy){this.speakQueue.push(e);let t=0;for(;this.speakQueue.length>E;)this.speakQueue.shift(),t+=1;t>0&&!this.overflowNoticed&&(this.overflowNoticed=!0,a.push(`info`,`Skipped ${t} spoken ${t===1?`reply`:`replies`} — too much overlap. Lower the auto-speak chat rate.`));return}await this.playOne(e)}}drainNext(){let e=this.speakQueue.shift();e?this.playOne(e):(this.busy=!1,this.overflowNoticed=!1,this.onQueueDrained?.())}async playOne(e){if(typeof window>`u`)return;this.busy=!0;let t=this.generation,n=de(e);if(!n){this.drainNext();return}this.teardownActiveAudio(),`speechSynthesis`in window&&window.speechSynthesis.cancel(),this.host.errorMessage=``;let r=this.host.ttsEngine,i=r===`openpalm-voice`||r===`remote`;if(i){let e;try{e=await fetch(`/api/speak`,{method:`POST`,headers:{"content-type":`application/json`},credentials:`include`,body:JSON.stringify({text:n})})}catch{}if(t!==this.generation)return;if(e?.ok&&e.headers.get(`content-type`)?.startsWith(`audio/`)){let n=await e.blob();if(t!==this.generation)return;let r=URL.createObjectURL(n),i=new Audio(r);this.activeAudio=i,this.activeAudioUrl=r,i.onended=()=>{this.host.status=`idle`,this.teardownActiveAudio(),this.drainNext()},i.onerror=()=>{this.host.status=`idle`,this.host.errorMessage=`Audio playback failed.`,this.teardownActiveAudio(),this.drainNext()},this.host.status=`speaking`;try{await i.play()}catch{this.host.status=`idle`,this.pendingAutoplayAudio=i,this.pendingAutoplayUrl=r,this.activeAudio=null,this.activeAudioUrl=null,this.host.autoplayBlocked=!0}return}if(e&&!e.ok){let t=await this.extractSpeakError(e);this.host.errorMessage=t}}if(!(`speechSynthesis`in window)){this.drainNext();return}i&&(this.host.errorMessage=``);let a=new SpeechSynthesisUtterance(n);a.onstart=()=>{t===this.generation&&(this.host.status=`speaking`)},a.onend=()=>{t===this.generation&&(this.host.status=`idle`,this.drainNext())},a.onerror=()=>{t===this.generation&&(this.host.status=`idle`,this.drainNext())},window.speechSynthesis.speak(a)}async extractSpeakError(e){let t;try{let n=await e.clone().json();typeof n.error==`string`&&(t=n.error)}catch{}return t===`tts_not_configured`?`TTS is not configured.`:t===`upstream_error`||e.status===502||e.status===503?`Voice engine is warming up — try again in a moment.`:`TTS failed (HTTP ${e.status}).`}stop(){this.speakQueue.length=0,this.busy=!1,this.generation+=1,this.overflowNoticed=!1,this.teardownPendingAutoplay(),this.teardownActiveAudio(),typeof window<`u`&&`speechSynthesis`in window&&window.speechSynthesis.cancel(),this.host.status=`idle`}},O=6e4,k=new class{#e=r(`idle`);get status(){return e(this.#e)}set status(e){t(this.#e,e,!0)}#t=r(!1);get sttSupported(){return e(this.#t)}set sttSupported(e){t(this.#t,e,!0)}#n=r(!1);get ttsSupported(){return e(this.#n)}set ttsSupported(e){t(this.#n,e,!0)}#r=r(``);get errorMessage(){return e(this.#r)}set errorMessage(e){t(this.#r,e,!0)}#i=r(``);get interimTranscript(){return e(this.#i)}set interimTranscript(e){t(this.#i,e,!0)}#a=r(`disabled`);get sttEngine(){return e(this.#a)}set sttEngine(e){t(this.#a,e,!0)}#o=r(`disabled`);get ttsEngine(){return e(this.#o)}set ttsEngine(e){t(this.#o,e,!0)}#s=r(``);get sttLanguage(){return e(this.#s)}set sttLanguage(e){t(this.#s,e,!0)}#c=r(!1);get ttsAutoEnabled(){return e(this.#c)}set ttsAutoEnabled(e){t(this.#c,e,!0)}#l=r(!1);get autoplayBlocked(){return e(this.#l)}set autoplayBlocked(e){t(this.#l,e,!0)}#u=r(!1);get conversationActive(){return e(this.#u)}set conversationActive(e){t(this.#u,e,!0)}#d=r(``);get browserSttUnsupportedReason(){return e(this.#d)}set browserSttUnsupportedReason(e){t(this.#d,e,!0)}},A=new D(k);A.onQueueDrained=()=>{k.conversationActive&&k.status===`idle`&&(k.status=`recording`)};var j=`openpalm.tts.auto`,M=null,N=null,P=null,F=null,I=null,L=null,R=null,z=null,B=null,V=null,H=800,fe=3e4,U=!1;function W(){U||k.ttsEngine!==`remote`&&k.ttsEngine!==`openpalm-voice`||typeof window>`u`||(U=!0,fetch(`/api/speak`,{method:`POST`,headers:{"content-type":`application/json`},credentials:`include`,body:JSON.stringify({text:`ok`})}).catch(()=>{}))}function pe(e){let t=k.ttsAutoEnabled;if(k.ttsAutoEnabled=e,typeof window<`u`)try{window.localStorage.setItem(j,e?`1`:`0`)}catch{}if(!e){$();return}t||(A.primeForAutoplay(),W())}function G(){if(!(typeof window>`u`))return window.SpeechRecognition??window.webkitSpeechRecognition??void 0}function me(){if(typeof navigator>`u`)return!1;let e=navigator.userAgent??``,t=/iPad|iPhone|iPod/.test(e),n=window.MSStream;return t&&!n}function he(){return!(typeof window>`u`||typeof MediaRecorder>`u`||!navigator?.mediaDevices?.getUserMedia)}function K(e){switch(e){case`browser`:return k.browserSttUnsupportedReason?!1:!!G();case`remote`:case`openpalm-voice`:return he();default:return!1}}function q(e){return e===`browser`||e===`browser-stt`?`browser`:e===`openpalm-voice`?`openpalm-voice`:e&&!e.startsWith(`skip-`)?`remote`:`disabled`}async function ge(){let e=typeof window<`u`&&`speechSynthesis`in window;if(typeof window<`u`)try{k.ttsAutoEnabled=window.localStorage.getItem(j)===`1`}catch{}try{let e=await w(),t=e.stt??{},n=e.tts??{},r=typeof t.engine==`string`?t.engine:``,i=typeof n.engine==`string`?n.engine:``;k.sttLanguage=typeof t.language==`string`?t.language:``,k.sttEngine=q(r),k.ttsEngine=q(i)}catch{k.sttEngine=`disabled`,k.ttsEngine=`disabled`}k.ttsSupported=k.ttsEngine===`openpalm-voice`||k.ttsEngine===`remote`||k.ttsEngine===`browser`&&e,me()&&G()?(k.browserSttUnsupportedReason=`iOS Safari does not support Web Speech recognition`,k.sttEngine===`browser`&&(k.sttEngine=`disabled`)):k.browserSttUnsupportedReason=``,k.sttEngine===`disabled`&&G()&&!k.browserSttUnsupportedReason&&(k.sttEngine=`browser`),k.ttsEngine===`disabled`&&e&&(k.ttsEngine=`browser`,k.ttsSupported=!0),k.sttSupported=K(k.sttEngine)}function _e(e){if(k.conversationActive&&X(),!(k.status===`recording`||k.status===`transcribing`)){if(!k.sttSupported||k.sttEngine===`disabled`){k.errorMessage=`Speech recognition is not available.`;return}if(k.errorMessage=``,F=e,k.sttEngine===`browser`){ve(e);return}ye()}}function ve(e){let t=G();if(!t){k.errorMessage=`Speech recognition is not supported in this browser.`;return}let n=new t;N=n,n.lang=k.sttLanguage||navigator?.language||`en-US`,n.interimResults=!0,n.maxAlternatives=1,n.continuous=!1;let r=``;n.onresult=e=>{let t=``;for(let n=e.resultIndex;n<e.results.length;n++){let i=e.results[n];i.isFinal?r+=i[0]?.transcript??``:t+=i[0]?.transcript??``}k.interimTranscript=r+t},n.onerror=e=>{if(N!==n)return;let t=e.error??``;t===`no-speech`||t===`aborted`||(t===`not-allowed`?k.errorMessage=`Microphone access denied.`:k.errorMessage=`Speech error: ${t}`),k.interimTranscript=``,k.status=`idle`,N=null,F=null},n.onend=()=>{N===n&&(r.trim()&&e&&e(r.trim()),k.interimTranscript=``,k.status=`idle`,N=null,F=null)};try{n.start(),k.status=`recording`}catch{k.errorMessage=`Failed to start speech recognition.`,k.status=`idle`,N=null,F=null}}async function ye(){let e;try{e=await ee()}catch(e){k.errorMessage=e instanceof Error?e.message:`Failed to start recording.`,k.status=`idle`,F=null;return}M=e,k.status=`recording`,P=setTimeout(()=>{J()},O)}async function J(){let e=M,t=F;if(!e)return;M=null,F=null,P&&=(clearTimeout(P),null),k.status=`transcribing`;let n;try{n=await e.stop()}catch(e){k.errorMessage=e instanceof Error?e.message:`Recording failed.`,k.status=`idle`;return}if(n.size===0){k.status=`idle`;return}try{let e=(await T(n,{language:k.sttLanguage||void 0})).trim();e&&t&&t(e)}catch(e){k.errorMessage=e instanceof Error?e.message:`Transcription failed.`}finally{k.status=`idle`}}function be(){if(N){try{N.stop()}catch{}return}M&&J()}function xe(){if(P&&=(clearTimeout(P),null),M){try{M.cancel()}catch{}M=null}if(N){let e=N;N=null;try{e.stop()}catch{}}F=null,k.interimTranscript=``,k.status===`recording`&&(k.status=`idle`)}function Y(){R&&=(clearTimeout(R),null)}function Se(e){if(!k.conversationActive){if(!k.sttSupported||k.sttEngine===`disabled`){k.errorMessage=`Speech recognition is not available.`;return}if(xe(),W(),k.errorMessage=``,k.conversationActive=!0,L=e,k.sttEngine===`browser`){Z();return}Ce()}}function X(){if(k.conversationActive){if(k.conversationActive=!1,L=null,Y(),V&&=(clearTimeout(V),null),I){let e=I;I=null;try{e.stop()}catch{}}if(B){try{B.cancel()}catch{}B=null}z&&=(z.stop(),null),k.interimTranscript=``,(k.status===`recording`||k.status===`transcribing`)&&(k.status=`idle`)}}function Z(){let e=G();if(!e){k.errorMessage=`Speech recognition is not supported in this browser.`,X();return}let t=new e;I=t,t.lang=k.sttLanguage||navigator?.language||`en-US`,t.interimResults=!0,t.maxAlternatives=1,t.continuous=!0;let n=``,r=()=>{Y();let e=n.trim();n=``,k.interimTranscript=``,e&&L&&L(e)};t.onresult=e=>{if(I!==t)return;k.status===`speaking`&&($(),k.status=`recording`);let i=``;for(let t=e.resultIndex;t<e.results.length;t++){let r=e.results[t];r.isFinal?n+=r[0]?.transcript??``:i+=r[0]?.transcript??``}k.interimTranscript=n+i,Y(),n.trim()&&!i&&(R=setTimeout(r,H))},t.onerror=e=>{if(I!==t)return;let n=e.error??``;if(!(n===`no-speech`||n===`aborted`)){if(n===`not-allowed`){k.errorMessage=`Microphone access denied.`,X();return}k.errorMessage=`Speech error: ${n}`}},t.onend=()=>{I===t&&(n.trim()&&r(),k.conversationActive?Z():I=null)};try{t.start(),k.status===`idle`&&(k.status=`recording`)}catch{k.errorMessage=`Failed to start speech recognition.`,I=null,X()}}async function Ce(){let e;try{e=await _({onSpeechStart:we,onSpeechEnd:()=>{Q()},isAssistantSpeaking:()=>k.status===`speaking`})}catch(e){k.errorMessage=e instanceof Error?e.message:`Failed to start listening.`,k.conversationActive=!1,L=null;return}if(!k.conversationActive){e.stop();return}z=e,k.status===`idle`&&(k.status=`recording`)}function we(){if(!(!k.conversationActive||!z||B)){try{B=te(z.stream)}catch(e){k.errorMessage=e instanceof Error?e.message:`Failed to start recording.`;return}k.status=`recording`,V=setTimeout(()=>{Q()},fe)}}async function Q(){let e=B;if(!e)return;B=null,V&&=(clearTimeout(V),null),k.status=`transcribing`;let t;try{t=await e.stop()}catch(e){k.errorMessage=e instanceof Error?e.message:`Recording failed.`,k.conversationActive&&k.status===`transcribing`&&(k.status=`recording`);return}if(t.size===0){k.conversationActive&&k.status===`transcribing`&&(k.status=`recording`);return}try{let e=(await T(t,{language:k.sttLanguage||void 0})).trim();e&&L&&k.conversationActive&&($(),k.status=`recording`,L(e))}catch(e){k.errorMessage=e instanceof Error?e.message:`Transcription failed.`}finally{k.conversationActive&&k.status===`transcribing`&&(k.status=`recording`)}}function Te(){A.resume()}function Ee(e){return A.speak(e)}function $(){A.stop()}function De(){if(X(),P&&=(clearTimeout(P),null),M){try{M.cancel()}catch{}M=null}if(N){try{N.stop()}catch{}N=null}F=null,k.interimTranscript=``,k.status=`idle`}export{v as _,Ee as a,X as c,k as d,w as f,C as g,oe as h,pe as i,be as l,x as m,ge as n,Se as o,se as p,Te as r,_e as s,De as t,$ as u,d as v,a as y};
@@ -1 +0,0 @@
1
- import{i as e,l as t}from"../chunks/BE_4J5sS.js";export{t as load_css,e as start};
@@ -1 +0,0 @@
1
- �(�import{i as e,l as t}from"../chunks/BE_4J5sS.js";export{t as load_css,e as start};
@@ -1,8 +0,0 @@
1
- import{B as e,F as t,I as n,K as r,L as i,M as a,N as o,P as s,R as c,St as l,U as u,V as d,X as f,Y as p,a as m,at as h,b as g,c as _,ct as v,f as y,ft as b,gt as x,h as S,ht as C,it as w,k as T,m as E,o as D,ot as O,p as k,r as A,rt as j,tt as M,ut as N,w as P,xt as F,y as I,z as L}from"../chunks/DTLQuSQp.js";import{u as R}from"../chunks/BE_4J5sS.js";import"../chunks/xihTtKlq.js";import"../chunks/D3d8Mm8X.js";import{t as z}from"../chunks/ByiipSaR.js";import{t as B}from"../chunks/DTAO9S6h.js";import{t as V}from"../chunks/BBXQKGHA.js";import{t as H}from"../chunks/C4qTU5YY.js";import{n as ee,t as U}from"../chunks/BGx9HO1u.js";import{t as W}from"../chunks/_zkFsY4j.js";import{n as G,r as K,t as q}from"../chunks/DD22UF1L.js";var J=Object.fromEntries(Object.entries({"openai/text-embedding-3-small":1536,"openai/text-embedding-3-large":3072,"openai/text-embedding-ada-002":1536,"ollama/nomic-embed-text":768,"ollama/mxbai-embed-large":1024,"ollama/mxbai-embed-large-v1":1024,"ollama/all-minilm":384,"ollama/snowflake-arctic-embed":1024,"model-runner/ai/mxbai-embed-large-v1":1024,"mistral/mistral-embed":1024,"google/text-embedding-004":768,"huggingface/sentence-transformers/all-MiniLM-L6-v2":384,"huggingface/intfloat/multilingual-e5-large":1024}).map(([e,t])=>[e.slice(e.indexOf(`/`)+1),t])),te={chat:`llama3.2:latest`,embedding:`nomic-embed-text`}.chat;function Y(e,t){return`addon.${e}.${t}`}var X=[{id:`ollama`,name:`Ollama`,kind:`local`,group:`recommended`,order:1,icon:`🦙`,desc:`Run open models on your hardware`,needsKey:!1,placeholder:``,baseUrl:`http://localhost:11434`,llmModel:`llama3.2`,embModel:`nomic-embed-text`,embDims:768,canDetect:!0},{id:`huggingface`,name:`Hugging Face`,kind:`cloud`,group:`recommended`,order:2,icon:`🤗`,desc:`10,000+ open models via Inference Providers`,needsKey:!0,placeholder:`hf_...`,baseUrl:`https://router.huggingface.co/v1`,llmModel:`Qwen/Qwen3-32B`,embModel:`intfloat/multilingual-e5-large`,embDims:1024,keyPrefix:`hf_`},{id:`openai`,name:`OpenAI`,kind:`cloud`,group:`recommended`,order:3,icon:`◐`,desc:`GPT and o-series reasoning models`,needsKey:!0,placeholder:`sk-...`,baseUrl:`https://api.openai.com`,llmModel:`gpt-4o`,embModel:`text-embedding-3-small`,embDims:1536},{id:`google`,name:`Google`,kind:`cloud`,group:`recommended`,order:4,icon:`◆`,desc:`Gemini models with large context`,needsKey:!0,placeholder:`AIza...`,baseUrl:`https://generativelanguage.googleapis.com`,llmModel:`gemini-2.5-flash`,embModel:``,embDims:0,keyPrefix:`AI`},{id:`model-runner`,name:`Docker Model Runner`,kind:`local`,group:`local`,order:1,icon:`🐳`,desc:`Docker-managed model runtime`,needsKey:!1,placeholder:``,baseUrl:`http://localhost:12434`,llmModel:`ai/llama3.2`,embModel:`ai/mxbai-embed-large-v1`,embDims:1024,canDetect:!0},{id:`lmstudio`,name:`LM Studio`,kind:`local`,group:`local`,order:2,icon:`🔬`,desc:`Desktop app for local inference`,needsKey:!1,placeholder:``,baseUrl:`http://localhost:1234`,llmModel:`loaded-model`,embModel:``,embDims:0,canDetect:!0},{id:`groq`,name:`Groq`,kind:`cloud`,group:`cloud`,order:1,icon:`⚡`,desc:`Ultra-fast inference`,needsKey:!0,placeholder:`gsk_...`,baseUrl:`https://api.groq.com/openai`,llmModel:`llama-3.3-70b-versatile`,embModel:``,embDims:0},{id:`mistral`,name:`Mistral`,kind:`cloud`,group:`cloud`,order:2,icon:`◆`,desc:`Mistral & Codestral models`,needsKey:!0,placeholder:`...`,baseUrl:`https://api.mistral.ai`,llmModel:`mistral-large-latest`,embModel:`mistral-embed`,embDims:1024},{id:`together`,name:`Together AI`,kind:`cloud`,group:`cloud`,order:3,icon:`✦`,desc:`Open models at scale`,needsKey:!0,placeholder:`...`,baseUrl:`https://api.together.xyz`,llmModel:`meta-llama/Llama-3.3-70B-Instruct-Turbo`,embModel:``,embDims:0},{id:`deepseek`,name:`DeepSeek`,kind:`cloud`,group:`advanced`,order:1,icon:`◎`,desc:`DeepSeek chat & reasoning`,needsKey:!0,placeholder:`sk-...`,baseUrl:`https://api.deepseek.com`,llmModel:`deepseek-chat`,embModel:``,embDims:0},{id:`xai`,name:`xAI (Grok)`,kind:`cloud`,group:`advanced`,order:2,icon:`✦`,desc:`Grok models`,needsKey:!0,placeholder:`xai-...`,baseUrl:`https://api.x.ai`,llmModel:`grok-2`,embModel:``,embDims:0},{id:`openai-compatible`,name:`Custom API server`,kind:`cloud`,group:`advanced`,order:3,icon:`~`,desc:`Connect any AI server that uses the standard OpenAI API format.`,needsKey:!1,needsUrl:!0,optionalKey:!0,placeholder:`API key (optional)`,baseUrl:``,llmModel:``,embModel:``,embDims:0}],ne=[`llamacpp`,`localai`],Z=new Set([...X.filter(e=>e.kind===`local`).map(e=>e.id),...ne]),re={openai:`ChatGPT (OpenAI)`,google:`Gemini (Google)`,"github-copilot":`GitHub Copilot`,groq:`Groq`,anthropic:`Claude (Anthropic)`,mistral:`Mistral`,cohere:`Cohere`};function ie(e,t={}){return e?re[e]||(t.localLabel&&Z.has(e)?t.localLabel:t.extraProviders?.find(t=>t.id===e)?.name||(X.find(t=>t.id===e)?.name??e)):``}var ae=new Set([`anthropic`]),oe=[{id:`api`,name:`API`,icon:`🔌`,desc:`OpenAI-compatible REST API endpoint`,locked:!0},{id:`discord`,name:`Discord`,icon:`🎮`,desc:`Connect to a Discord server`,credentials:[{key:`botToken`,label:`Bot Token`,placeholder:`Paste Discord bot token`,required:!0},{key:`applicationId`,label:`Application ID`,placeholder:`Discord application ID`,secret:!1}]},{id:`slack`,name:`Slack`,icon:`💼`,desc:`Access via Slack bot`,credentials:[{key:`slackBotToken`,label:`Bot Token`,placeholder:`xoxb-...`,required:!0},{key:`slackAppToken`,label:`App Token`,placeholder:`xapp-...`,required:!0}]}],se=[{id:`ollama`,name:`Ollama`,env:[],models:{},localUrl:`http://localhost:11434`},{id:`model-runner`,name:`Docker Model Runner`,env:[],models:{},localUrl:`http://localhost:12434`},{id:`lmstudio`,name:`LM Studio`,env:[],models:{},localUrl:`http://localhost:1234`},{id:`openai-compatible`,name:`Custom API server`,env:[],models:{},localUrl:``}];function ce(e,t,n,r){let i=e=>e.available!==!1,a=Y(t,r??(n?`cuda`:`cpu`)),o=Y(t,`cpu`);return(e.find(e=>e.id===a&&i(e))??e.find(e=>e.default&&i(e))??e.find(e=>e.id===o&&i(e))??e.find(e=>i(e)))?.id}function le(e){return e.replace(/:.*$/,``)}function ue(e){let t=le(e);return J[e]!==void 0||J[t]!==void 0?!0:/(?:^|[-/_.])(embed|embedding|bge|gte|e5|nomic|mxbai|arctic-embed|minilm)/i.test(e)}function de(e,t){let n=t.toLowerCase(),r=0;/instruct|chat|-it\b|\bit\b/.test(n)&&(r+=30),/coder|code/.test(n)&&(r+=8);let i=n.match(/(\d+(?:\.\d+)?)\s*x?\s*b\b/),a=i?parseFloat(i[1]):0;return e===`llm`?r+=Math.min(40,a):r+=Math.max(0,20-Math.min(20,a)),r}function fe(e,t,n){let r=[];for(let i of t){let t=n[i.id];if(!t)continue;let a=e===`embedding`?i.embModel:i.llmModel,o=t.models.length>0?t.models:[],s=a?o.find(e=>e===a||le(e)===le(a)):void 0;for(let n of o){if(e!==`embedding`&&ue(n))continue;let a=e===`embedding`?J[n]??J[le(n)]??(n===s?i.embDims:0)??0:0;r.push({id:n,connId:i.id,providerName:i.name,baseUrl:t.baseUrl||i.baseUrl,isDefault:n===s,dims:a})}}return e===`embedding`?r.filter(e=>e.isDefault||e.dims>0):r.sort((t,n)=>!!Z.has(t.connId)-+!!Z.has(n.connId)||!!n.isDefault-+!!t.isDefault||de(e,n.id)-de(e,t.id))}function pe(e,t,n){return e.engine?e:t?{engine:`openpalm-voice`}:{engine:n}}function me(e,t,n){if(n)return!0;let r=e[t];return typeof r==`object`&&r?r.enabled:!!r}function he(e,t,n){let r=e[t];return typeof r==`object`&&r?String(r[n]??``):``}function ge(){let e=new Uint8Array(16);return crypto.getRandomValues(e),Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}function _e(e){let t={};for(let n of oe){let r=e[n.id];if(n.locked)t[n.id]=!0;else if(typeof r==`object`&&r){if(r.enabled){let e={enabled:!0};if(n.credentials)for(let t of n.credentials){let n=r[t.key];n&&(e[t.key]=n)}t[n.id]=e}}else r&&(t[n.id]=!0)}return t}function ve(e,t,n){if(e){let e=t.filter(e=>n[e.id]?.verified).map(e=>{let t=n[e.id],r=X.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:r?.llmModel??``,embModel:r?.embModel??``,embDims:r?.embDims??0}}),r=new Set(e.map(e=>e.id)),i=X.filter(e=>!r.has(e.id)&&n[e.id]?.verified).map(e=>{let t=n[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,...i]}return X.filter(e=>n[e.id]?.verified)}function ye(e,t,n){let r={...e};for(let e of[`llm`,`embedding`,`small`]){if(r[e]||e===`embedding`)continue;let i=fe(e,t,n);if(i.length===0)continue;let a=i[0];r[e]={connId:a.connId,model:a.id,dims:a.dims}}return r}function be(e,t,n,r){if(!t)return;let i=t.indexOf(`/`),a=i>0?t.slice(0,i):``,o=i>0?t.slice(i+1):t,s=fe(e,n,r),c=s.find(e=>e.id===t);if(c)return{connId:c.connId,model:c.id,dims:c.dims};let l=a?s.find(e=>e.connId===a&&e.id===o):void 0;if(l)return{connId:l.connId,model:l.id,dims:l.dims};let u=s.find(e=>e.id===o);if(u)return{connId:u.connId,model:u.id,dims:u.dims};if(a&&n.some(e=>e.id===a))return{connId:a,model:o,dims:0}}function xe(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),e.apiKey&&(t.apiKey=e.apiKey),t}function Se(e){let{modelSelection:t,verifiedProviders:n,providerState:r,ollamaEnabled:i,hostLocalLlmRunning:a,persistedVoiceTts:o,persistedVoiceStt:s,selectedVoiceProfile:c,selectedOllamaProfile:l,portalSelection:u,uiLoginPassword:d,keepExistingUiLoginPassword:f,imageTag:p,hostAkmEnabled:m,networkPreset:h,opencodePassword:g}=e,_=t.llm,v=t.embedding,y=t.small,b={};_&&(b[_.connId]=!0),v&&(b[v.connId]=!0),y?.model&&(b[y.connId]=!0);let x=n.filter(e=>b[e.id]).map(e=>{let t=r[e.id];return{id:e.id,name:e.name,provider:e.id,baseUrl:t?.baseUrl??e.baseUrl,apiKey:t?.apiKey??``}}),S=_?.connId??``,C=v?.connId??``,w=x.find(e=>e.id===S),T=x.find(e=>e.id===C),E=w?.provider??``,D=T?.provider??``,O={};i&&!a&&(O.ollama=!0),(o.engine===`openpalm-voice`||s.engine===`openpalm-voice`)&&(O.voice=!0);let k={},A=_e(u);for(let e of Object.keys(A)){let t=A[e];if(t===!0)O[e]=!0;else if(typeof t==`object`&&t){O[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&&(k[e]=n)}}let j={version:2,addons:O,security:f?{}:{uiLoginPassword:d},connections:x};E&&_?.model&&(j.llm={provider:E,model:_.model,baseUrl:w?.baseUrl??``}),D&&v?.model&&(j.embedding={provider:D,model:v.model,dims:v.dims??1536,baseUrl:T?.baseUrl??``});let M=xe(o);M&&(j.tts=M);let N=xe(s);return N&&(j.stt=N),(o.engine===`openpalm-voice`||s.engine===`openpalm-voice`)&&c&&(j.voiceProfile=c),i&&l&&(j.ollamaProfile=l),Object.keys(k).length>0&&(j.portalCredentials=k),p.trim()&&(j.imageTag=p.trim()),m&&(j.hostAkm=!0),h!==null&&(j.network=h===`home-password`?{preset:h,opencodePassword:g}:{preset:h}),j}function Ce(e){let t={enabledAddons:[],portalCredentials:{}};if(typeof e.hostAkm==`boolean`&&(t.hostAkmEnabled=e.hostAkm),e.llm?.provider&&e.llm?.model&&(t.llm={connId:e.llm.provider,model:e.llm.model}),e.embedding?.provider&&e.embedding?.model&&(t.embedding={connId:e.embedding.provider,model:e.embedding.model,dims:e.embedding.dims}),e.voice?.tts){let n=e.voice.tts;t.voiceTts=n.engine?{...n,engine:n.engine}:{engine:``}}if(e.voice?.stt){let n=e.voice.stt;t.voiceStt=n.engine?{...n,engine:n.engine}:{engine:``}}e.voice?.selectedProfile&&typeof e.voice.selectedProfile==`string`&&(t.selectedVoiceProfile=e.voice.selectedProfile);let n=e.importedModelPreferences;n?.model&&(t.importedLlmModel=n.model),n?.small_model&&(t.importedSmallModel=n.small_model);let r=Array.isArray(e.enabledAddons)?e.enabledAddons:[];t.enabledAddons=r,r.includes(`ollama`)&&(t.ollamaEnabled=!0),e.ollama?.selectedProfile&&typeof e.ollama.selectedProfile==`string`&&(t.selectedOllamaProfile=e.ollama.selectedProfile);let i=e.portalCredentials??{},a={};for(let[e,t]of Object.entries(i)){if(!t||typeof t!=`object`)continue;let n={};for(let[e,r]of Object.entries(t))typeof r==`string`&&(n[e]=r);Object.keys(n).length>0&&(a[e]=n)}if(t.portalCredentials=a,e.network!==void 0&&e.network!==null){let n=e.network.preset;t.networkPreset=K(n)?n:null}return typeof e.hasOpencodePassword==`boolean`&&(t.hasOpencodePassword=e.hasOpencodePassword),t}var we=`/api/setup`;async function Q(e,t,n,r){let i={method:e};return n!==void 0&&(i.headers={"Content-Type":`application/json`},i.body=JSON.stringify(n)),r&&(i.signal=r),fetch(`${we}${t}`,i)}async function Te(){let e=await Q(`GET`,`/voice-profiles`);return e.ok?await e.json():null}async function Ee(){let e=await Q(`GET`,`/ollama-profiles`);return e.ok?await e.json():null}async function De(){let e=await Q(`GET`,`/recommend`);return e.ok?await e.json():null}async function Oe(){let e=await Q(`POST`,`/opencode/ensure`);return e.ok?await e.json():null}async function ke(){let e=await Q(`GET`,`/opencode/status`);return e.ok?await e.json():null}async function Ae(){let e=await Q(`GET`,`/opencode/providers`);return e.ok?await e.json():null}async function je(){let e=await Q(`GET`,`/detect-providers`);return e.ok?await e.json():null}async function Me(e,t){let n=await Q(`POST`,`/models/${encodeURIComponent(e)}`,{apiKey:t.apiKey??``,baseUrl:t.baseUrl??``}),r=await n.json();if(!n.ok||r.status===`recoverable_error`)throw Error(r.error??`Failed to fetch models (HTTP ${n.status})`);return r}async function Ne(e,t){let n=await Q(`POST`,`/opencode/provider/${encodeURIComponent(e)}/oauth/authorize`,{method:t}),r=await n.json();if(!n.ok)throw Error(r.message??`OAuth failed`);return r}async function Pe(e,t,n){let r=await Q(`POST`,`/opencode/provider/${encodeURIComponent(e)}/oauth/callback`,{method:t},n),i=await r.json().catch(()=>null);return{ok:r.ok,data:i}}async function Fe(e){let t=await Q(`POST`,`/complete`,e),n=await t.json().catch(()=>({}));return{ok:t.ok,data:n}}async function Ie(){let e=await Q(`GET`,`/deploy-status`);return e.ok?{ok:!0,data:await e.json()}:{ok:!1,data:null}}async function Le(){let e=await Q(`POST`,`/retry-deploy`),t=await e.json().catch(()=>({}));return{ok:e.ok,data:t}}async function Re(){let e=await Q(`GET`,`/host-status`);return e.ok?await e.json():null}async function ze(){let e=await Q(`POST`,`/import-host`),t=await e.json().catch(()=>null);return{ok:e.ok,data:t}}async function Be(){let e=await Q(`GET`,`/current-config`);return e.ok?await e.json():null}async function Ve(){return await(await Q(`GET`,`/status`)).json()}var $={currentStep:0,maxVisitedStep:0,showDeploy:!1,systemCheckPassed:!1,modelMode:`cloud`,voiceEnabled:!1,uiLoginPassword:``,uiLoginPasswordDirty:!1,step0Error:``,autoModeImporting:!1,gpuDetected:!1,providerState:{},detectedHostProviders:[],detectedProviders:[],opencodeAvailable:!1,opencodeProviders:[],opencodeAuth:{},hostProviderCount:0,allowEmptyInstall:!1,recommendation:null,recommendationAlert:``,recommendationApplied:!1,detectedGpuVramMb:0,detectedGpuVendor:``,detectedGpuName:``,modelSelection:{},voiceTts:{engine:``},voiceStt:{engine:``},voiceProfiles:[],selectedVoiceProfile:``,importedLlmModel:void 0,importedSmallModel:void 0,portalSelection:{discord:{enabled:!1,botToken:``,applicationId:``},slack:{enabled:!1,slackBotToken:``,slackAppToken:``}},ollamaEnabled:!1,ollamaProfiles:[],selectedOllamaProfile:``,imageTag:``,hostAkmEnabled:!1,networkPreset:`this-pc`,opencodePassword:``,homeOpenAck:!1,networkDirty:!1,hasExistingOpencodePassword:!1,installError:``,installing:!1,emptyAiAck:!1,deployData:{},deployDone:!1,deployHasWarnings:!1,deployError:null,deployPollErrors:0,savedCloudLlm:void 0,detectedCloudConn:``,hostImportTriggered:!1,hostImporting:!1,hostImportError:``,isRerun:!1},He=new class{#e=N(O($.currentStep));get currentStep(){return u(this.#e)}set currentStep(e){v(this.#e,e,!0)}#t=N(O($.maxVisitedStep));get maxVisitedStep(){return u(this.#t)}set maxVisitedStep(e){v(this.#t,e,!0)}#n=N(O($.showDeploy));get showDeploy(){return u(this.#n)}set showDeploy(e){v(this.#n,e,!0)}#r=N(O($.systemCheckPassed));get systemCheckPassed(){return u(this.#r)}set systemCheckPassed(e){v(this.#r,e,!0)}#i=N(O($.modelMode));get modelMode(){return u(this.#i)}set modelMode(e){v(this.#i,e,!0)}#a=N(O($.voiceEnabled));get voiceEnabled(){return u(this.#a)}set voiceEnabled(e){v(this.#a,e,!0)}#o=N(O($.uiLoginPassword));get uiLoginPassword(){return u(this.#o)}set uiLoginPassword(e){v(this.#o,e,!0)}#s=N(O($.uiLoginPasswordDirty));get uiLoginPasswordDirty(){return u(this.#s)}set uiLoginPasswordDirty(e){v(this.#s,e,!0)}#c=N(O($.step0Error));get step0Error(){return u(this.#c)}set step0Error(e){v(this.#c,e,!0)}#l=N(O($.autoModeImporting));get autoModeImporting(){return u(this.#l)}set autoModeImporting(e){v(this.#l,e,!0)}#u=N(O($.gpuDetected));get gpuDetected(){return u(this.#u)}set gpuDetected(e){v(this.#u,e,!0)}#d=N(O($.providerState));get providerState(){return u(this.#d)}set providerState(e){v(this.#d,e,!0)}#f=N(O($.detectedHostProviders));get detectedHostProviders(){return u(this.#f)}set detectedHostProviders(e){v(this.#f,e,!0)}#p=N(O($.detectedProviders));get detectedProviders(){return u(this.#p)}set detectedProviders(e){v(this.#p,e,!0)}#m=N(O($.opencodeAvailable));get opencodeAvailable(){return u(this.#m)}set opencodeAvailable(e){v(this.#m,e,!0)}#h=N(O($.opencodeProviders));get opencodeProviders(){return u(this.#h)}set opencodeProviders(e){v(this.#h,e,!0)}#g=N(O($.opencodeAuth));get opencodeAuth(){return u(this.#g)}set opencodeAuth(e){v(this.#g,e,!0)}#_=N(O($.hostProviderCount));get hostProviderCount(){return u(this.#_)}set hostProviderCount(e){v(this.#_,e,!0)}#v=N(O($.allowEmptyInstall));get allowEmptyInstall(){return u(this.#v)}set allowEmptyInstall(e){v(this.#v,e,!0)}#y=N(O($.recommendation));get recommendation(){return u(this.#y)}set recommendation(e){v(this.#y,e,!0)}#b=N(O($.recommendationAlert));get recommendationAlert(){return u(this.#b)}set recommendationAlert(e){v(this.#b,e,!0)}#x=N(O($.recommendationApplied));get recommendationApplied(){return u(this.#x)}set recommendationApplied(e){v(this.#x,e,!0)}#S=N(O($.detectedGpuVramMb));get detectedGpuVramMb(){return u(this.#S)}set detectedGpuVramMb(e){v(this.#S,e,!0)}#C=N(O($.detectedGpuVendor));get detectedGpuVendor(){return u(this.#C)}set detectedGpuVendor(e){v(this.#C,e,!0)}#w=N(O($.detectedGpuName));get detectedGpuName(){return u(this.#w)}set detectedGpuName(e){v(this.#w,e,!0)}verifyGeneration={};oauthAbortControllers={};#T=N(O($.modelSelection));get modelSelection(){return u(this.#T)}set modelSelection(e){v(this.#T,e,!0)}#E=N(O($.voiceTts));get voiceTts(){return u(this.#E)}set voiceTts(e){v(this.#E,e,!0)}#D=N(O($.voiceStt));get voiceStt(){return u(this.#D)}set voiceStt(e){v(this.#D,e,!0)}#O=N(O($.voiceProfiles));get voiceProfiles(){return u(this.#O)}set voiceProfiles(e){v(this.#O,e,!0)}#k=N(O($.selectedVoiceProfile));get selectedVoiceProfile(){return u(this.#k)}set selectedVoiceProfile(e){v(this.#k,e,!0)}#A=N(O($.importedLlmModel));get importedLlmModel(){return u(this.#A)}set importedLlmModel(e){v(this.#A,e,!0)}#j=N(O($.importedSmallModel));get importedSmallModel(){return u(this.#j)}set importedSmallModel(e){v(this.#j,e,!0)}#M=N(O($.portalSelection));get portalSelection(){return u(this.#M)}set portalSelection(e){v(this.#M,e,!0)}#N=N(O($.ollamaEnabled));get ollamaEnabled(){return u(this.#N)}set ollamaEnabled(e){v(this.#N,e,!0)}#P=N(O($.ollamaProfiles));get ollamaProfiles(){return u(this.#P)}set ollamaProfiles(e){v(this.#P,e,!0)}#F=N(O($.selectedOllamaProfile));get selectedOllamaProfile(){return u(this.#F)}set selectedOllamaProfile(e){v(this.#F,e,!0)}#I=N(O($.imageTag));get imageTag(){return u(this.#I)}set imageTag(e){v(this.#I,e,!0)}#L=N(O($.hostAkmEnabled));get hostAkmEnabled(){return u(this.#L)}set hostAkmEnabled(e){v(this.#L,e,!0)}#R=N(O($.networkPreset));get networkPreset(){return u(this.#R)}set networkPreset(e){v(this.#R,e,!0)}#z=N(O($.opencodePassword));get opencodePassword(){return u(this.#z)}set opencodePassword(e){v(this.#z,e,!0)}#B=N(O($.homeOpenAck));get homeOpenAck(){return u(this.#B)}set homeOpenAck(e){v(this.#B,e,!0)}#V=N(O($.networkDirty));get networkDirty(){return u(this.#V)}set networkDirty(e){v(this.#V,e,!0)}#H=N(O($.hasExistingOpencodePassword));get hasExistingOpencodePassword(){return u(this.#H)}set hasExistingOpencodePassword(e){v(this.#H,e,!0)}#U=N(O($.installError));get installError(){return u(this.#U)}set installError(e){v(this.#U,e,!0)}#W=N(O($.installing));get installing(){return u(this.#W)}set installing(e){v(this.#W,e,!0)}#G=N(O($.emptyAiAck));get emptyAiAck(){return u(this.#G)}set emptyAiAck(e){v(this.#G,e,!0)}#K=N(O($.deployData));get deployData(){return u(this.#K)}set deployData(e){v(this.#K,e,!0)}#q=N(O($.deployDone));get deployDone(){return u(this.#q)}set deployDone(e){v(this.#q,e,!0)}#J=N(O($.deployHasWarnings));get deployHasWarnings(){return u(this.#J)}set deployHasWarnings(e){v(this.#J,e,!0)}#Y=N(O($.deployError));get deployError(){return u(this.#Y)}set deployError(e){v(this.#Y,e,!0)}#X=N(O($.deployPollErrors));get deployPollErrors(){return u(this.#X)}set deployPollErrors(e){v(this.#X,e,!0)}deployTimer=null;#Z=N(O($.savedCloudLlm));get savedCloudLlm(){return u(this.#Z)}set savedCloudLlm(e){v(this.#Z,e,!0)}#Q=N(O($.detectedCloudConn));get detectedCloudConn(){return u(this.#Q)}set detectedCloudConn(e){v(this.#Q,e,!0)}#$=N(O($.hostImportTriggered));get hostImportTriggered(){return u(this.#$)}set hostImportTriggered(e){v(this.#$,e,!0)}#ee=N(O($.hostImporting));get hostImporting(){return u(this.#ee)}set hostImporting(e){v(this.#ee,e,!0)}#te=N(O($.hostImportError));get hostImportError(){return u(this.#te)}set hostImportError(e){v(this.#te,e,!0)}#ne=N(O($.isRerun));get isRerun(){return u(this.#ne)}set isRerun(e){v(this.#ne,e,!0)}constructor(){Object.assign(this,structuredClone($))}#re=b(()=>this.providerState.ollama?.ollamaMode===`running`||this.detectedHostProviders.some(e=>e.provider===`ollama`||e.provider===`lmstudio`));get hostLocalLlmRunning(){return u(this.#re)}set hostLocalLlmRunning(e){v(this.#re,e)}#ie=b(()=>(this.opencodeAvailable?this.opencodeProviders.map(e=>e.id):X.map(e=>e.id)).filter(e=>this.providerState[e]?.verified).length);get verifiedCount(){return u(this.#ie)}set verifiedCount(e){v(this.#ie,e)}#ae=b(()=>!!this.modelSelection.llm?.model);get hasUsableAI(){return u(this.#ae)}set hasUsableAI(e){v(this.#ae,e)}#oe=b(()=>ve(this.opencodeAvailable,this.opencodeProviders,this.providerState));get verifiedProviders(){return u(this.#oe)}set verifiedProviders(e){v(this.#oe,e)}#se=b(()=>!!this.modelSelection.llm?.model||this.allowEmptyInstall);get canComplete(){return u(this.#se)}set canComplete(e){v(this.#se,e)}#ce=b(()=>X.some(e=>e.id===`openai`&&this.providerState[e.id]?.verified));get hasOpenAI(){return u(this.#ce)}set hasOpenAI(e){v(this.#ce,e)}#le=b(()=>this.hasOpenAI?{tts:`openai-tts`,stt:`openai-stt`}:{tts:`browser-tts`,stt:`browser-stt`});get voiceDefaults(){return u(this.#le)}set voiceDefaults(e){v(this.#le,e)}#ue=b(()=>this.voiceTts.engine===`openpalm-voice`||this.voiceStt.engine===`openpalm-voice`);get enableVoice(){return u(this.#ue)}set enableVoice(e){v(this.#ue,e)}#de=b(()=>pe(this.voiceTts,this.enableVoice,this.voiceDefaults.tts));get displayedVoiceTts(){return u(this.#de)}set displayedVoiceTts(e){v(this.#de,e)}#fe=b(()=>pe(this.voiceStt,this.enableVoice,this.voiceDefaults.stt));get displayedVoiceStt(){return u(this.#fe)}set displayedVoiceStt(e){v(this.#fe,e)}#pe=b(()=>pe(this.voiceTts,this.enableVoice,``));get persistedVoiceTts(){return u(this.#pe)}set persistedVoiceTts(e){v(this.#pe,e)}#me=b(()=>pe(this.voiceStt,this.enableVoice,``));get persistedVoiceStt(){return u(this.#me)}set persistedVoiceStt(e){v(this.#me,e)}#he=b(()=>this.isRerun&&!this.networkDirty?!0:this.networkPreset===`home-open`?this.homeOpenAck:this.networkPreset===`home-password`?this.opencodePassword.length>=8:!0);get networkChoiceValid(){return u(this.#he)}set networkChoiceValid(e){v(this.#he,e)}#ge=b(()=>Se({modelSelection:this.modelSelection,verifiedProviders:this.verifiedProviders,providerState:this.providerState,ollamaEnabled:this.ollamaEnabled,hostLocalLlmRunning:this.hostLocalLlmRunning,persistedVoiceTts:this.persistedVoiceTts,persistedVoiceStt:this.persistedVoiceStt,selectedVoiceProfile:this.selectedVoiceProfile,selectedOllamaProfile:this.selectedOllamaProfile,portalSelection:this.portalSelection,uiLoginPassword:this.uiLoginPassword,keepExistingUiLoginPassword:this.isRerun&&!this.uiLoginPasswordDirty,imageTag:this.imageTag,hostAkmEnabled:this.hostAkmEnabled,networkPreset:!this.isRerun||this.networkDirty?this.networkPreset:null,opencodePassword:this.opencodePassword}));get payload(){return u(this.#ge)}set payload(e){v(this.#ge,e)}async loadVoiceProfiles(){try{let e=await Te();if(!e||!Array.isArray(e.profiles))return;this.voiceProfiles=e.profiles;let t=ce(e.profiles,`voice`,this.gpuDetected);if(t&&(this.selectedVoiceProfile=t),this.gpuDetected&&this.selectedVoiceProfile!==Y(`voice`,`cuda`)){let e=this.voiceProfiles.find(e=>e.id===Y(`voice`,`cuda`)&&e.available!==!1);e&&(this.selectedVoiceProfile=e.id)}}catch{}}async loadOllamaProfiles(){try{let e=await Ee();if(!e||!Array.isArray(e.profiles))return;this.ollamaProfiles=e.profiles;let t=this.gpuDetected?e.profiles.find(e=>e.id===Y(`ollama`,`cuda`)&&e.available!==!1)??e.profiles.find(e=>e.default&&e.available!==!1)??e.profiles.find(e=>e.available!==!1):e.profiles.find(e=>e.id===Y(`ollama`,`cpu`)&&e.available!==!1)??e.profiles.find(e=>e.default&&e.available!==!1)??e.profiles.find(e=>e.available!==!1);e.selectedProfile&&typeof e.selectedProfile==`string`?this.selectedOllamaProfile=e.selectedProfile:t&&(this.selectedOllamaProfile=t.id)}catch{}}initProviderState(){let e={};for(let t of X)e[t.id]={selected:!1,verified:!1,verifying:!1,error:!1,apiKey:``,baseUrl:t.baseUrl??``,models:[],ollamaMode:null};this.providerState=e}enableRecommendedOllama(e){this.ollamaEnabled=!0;let t=this.providerState.ollama;t&&(t.selected=!0,t.verified=!0,t.ollamaMode=`instack`,t.baseUrl=`http://ollama:11434`,t.models.length===0&&(t.models=[te])),this.selectedOllamaProfile=ce(this.ollamaProfiles,`ollama`,this.gpuDetected,e)??Y(`ollama`,e??(this.gpuDetected?`cuda`:`cpu`))}handleConnectModeChange(e){if(this.modelMode=e,e===`local`){this.modelSelection.llm&&!Z.has(this.modelSelection.llm.connId)&&(this.savedCloudLlm=this.modelSelection.llm),this.hostLocalLlmRunning||this.enableRecommendedOllama();let e=this.getModelOptionsForRole(`llm`).find(e=>Z.has(e.connId));this.modelSelection.llm=e?{connId:e.connId,model:e.id,dims:e.dims}:{connId:`ollama`,model:te,dims:0}}else e===`cloud`&&this.savedCloudLlm&&(this.modelSelection.llm=this.savedCloudLlm)}async fetchAndApplyRecommendation(){if(this.recommendationApplied)return;let e;if(this.recommendation)e=this.recommendation;else try{let t=await De();if(!t||!t.ok||!t.recommendation)return;e=t.recommendation,Array.isArray(t.hostProviders)&&(this.detectedHostProviders=t.hostProviders),t.gpu&&(this.detectedGpuVramMb=t.gpu.vramMb??0,this.detectedGpuVendor=t.gpu.vendor??``,this.detectedGpuName=t.gpu.name??``)}catch(e){console.warn(`fetchAndApplyRecommendation failed`,e);return}switch(this.recommendationApplied=!0,this.recommendation=e,e.action){case`use-cloud`:this.recommendationAlert=``;break;case`use-host-providers`:this.recommendationAlert=e.alert,this.hostImportTriggered||(this.hostImportTriggered=!0,await this.handleHostImport());break;case`enable-ollama`:this.recommendationAlert=e.alert,this.enableRecommendedOllama(e.profileVariant);break;case`connect-manually`:this.recommendationAlert=e.alert;break}}handleEnableVoiceChange(e){if(e){if(this.voiceTts.engine!==`openpalm-voice`&&(this.voiceTts={engine:`openpalm-voice`}),this.voiceStt.engine!==`openpalm-voice`&&(this.voiceStt={engine:`openpalm-voice`}),!this.selectedVoiceProfile){let e=ce(this.voiceProfiles,`voice`,this.gpuDetected);e&&(this.selectedVoiceProfile=e)}}else this.voiceTts.engine===`openpalm-voice`&&(this.voiceTts={engine:``}),this.voiceStt.engine===`openpalm-voice`&&(this.voiceStt={engine:``})}goToStep(e){e<0||e>3||e>0&&!this.systemCheckPassed||(this.currentStep=e,e>this.maxVisitedStep&&(this.maxVisitedStep=e),this.showDeploy=!1,e===1&&!this.isRerun&&(this.fetchAndApplyRecommendation(),this.applyImportedModelPreferences(),this.autoSelectModels()))}autoSelectModels(){let e=ye(this.modelSelection,this.verifiedProviders,this.providerState);for(let t of[`llm`,`small`])!this.modelSelection[t]&&e[t]&&(this.modelSelection[t]=e[t])}getModelOptionsForRole(e){return fe(e,this.verifiedProviders,this.providerState)}applyImportedOpenCodeModelSelections(e){e&&(e.llm&&(this.importedLlmModel=e.llm),e.small&&(this.importedSmallModel=e.small),this.applyImportedModelPreferences())}applyImportedModelPreferences(){if(this.importedLlmModel){let e=be(`llm`,this.importedLlmModel,this.verifiedProviders,this.providerState);e&&(this.modelSelection.llm=e)}if(this.importedSmallModel){let e=be(`small`,this.importedSmallModel,this.verifiedProviders,this.providerState);e&&(this.modelSelection.small=e)}}async checkOpenCodeAndInit(){try{if((await Oe())?.ok){this.opencodeAvailable=!0,await this.loadOpenCodeProviders();return}}catch{}try{(await ke())?.available&&(this.opencodeAvailable=!0,await this.loadOpenCodeProviders())}catch{}}async loadOpenCodeProviders(){let e=await Ae();if(!e||!e.available||!Array.isArray(e.providers))return;let t=e.providers,n=e.auth??{},r=new Set(Array.isArray(e.connected)?e.connected:[]),i=new Set(t.map(e=>e.id));for(let e of se)i.has(e.id)||t.push(e);this.opencodeProviders=t,this.opencodeAuth=n;let a={...this.providerState};for(let e of t){a[e.id]||(a[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&&a[e.id].models.length===0&&(a[e.id].models=t),r.has(e.id)&&(a[e.id].verified=!0)}this.providerState=a,this.applyImportedOpenCodeModelSelections(e.selectedModels)}async detectProviders(){try{let e=await je();if(e){this.detectedProviders=e.providers??[];for(let e of this.detectedProviders){if(!e.available)continue;let t=this.providerState[e.provider];t&&(t.baseUrl=e.url,t.selected||(t.selected=!0,e.provider===`ollama`&&(t.ollamaMode=`running`)),this.verifyProvider(e.provider))}}}catch{this.detectedProviders=[]}}async verifyProvider(e){let t=X.find(t=>t.id===e);if(!t)return;let n=this.providerState[e];if(!n)return;if(e===`ollama`&&n.ollamaMode===`instack`){n.verified=!0,n.error=!1;return}let r=(this.verifyGeneration[e]??0)+1;this.verifyGeneration[e]=r,n.verifying=!0,n.error=!1;let i=(n.baseUrl||t.baseUrl).trim(),a=(n.apiKey??``).trim();try{let t=await Me(e,{baseUrl:i,apiKey:a});if(this.verifyGeneration[e]!==r)return;n.verified=!0,n.error=!1,n.models=t.models??[]}catch(t){if(this.verifyGeneration[e]!==r)return;n.verified=!1,n.error=!0,n.errorMessage=t instanceof Error?t.message:``,n.models=[]}n.verifying=!1}async startOpenCodeOAuth(e,t){let n=this.providerState[e];if(n){n.verifying=!0,n.error=!1;try{let r=await Ne(e,t);n.oauthPolling=!0,n.oauthUrl=r.url??``,n.oauthInstructions=r.instructions??``,r.url&&r.method===`auto`&&window.open(r.url,`_blank`),await this.pollOpenCodeOAuth(e,t)}catch(e){n.verifying=!1,n.error=!0,n.errorMessage=e instanceof Error?e.message:`OAuth failed`,n.oauthPolling=!1}}}async pollOpenCodeOAuth(e,t){let n=this.providerState[e],r=new AbortController;this.oauthAbortControllers[e]=r;let i=AbortSignal.timeout(10*6e4),a=AbortSignal.any?AbortSignal.any([r.signal,i]):r.signal;try{let{ok:r,data:i}=await Pe(e,t,a);r&&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 this.oauthAbortControllers[e],n.oauthPolling=!1,n.verifying=!1}}cancelOAuth(e){let t=this.oauthAbortControllers[e];t&&(t.abort(),delete this.oauthAbortControllers[e]);let n=this.providerState[e];n&&(n.oauthPolling=!1,n.verifying=!1)}async handleInstall(){if(!this.installing){if(this.installError=``,!this.networkChoiceValid){this.installError=`Finish the network access step before installing.`;return}if(!this.payload.llm&&!this.isRerun&&!this.emptyAiAck){if(!window.confirm(`No AI is set up here. You can connect this app to an assistant running on another computer, or add a provider later from your dashboard.
2
-
3
- Install now?`))return;this.emptyAiAck=!0}this.installing=!0,(this.persistedVoiceTts.engine===`openpalm-voice`||this.persistedVoiceStt.engine===`openpalm-voice`)&&!this.selectedVoiceProfile&&(this.selectedVoiceProfile=ce(this.voiceProfiles,`voice`,this.gpuDetected)??Y(`voice`,`cpu`)),this.ollamaEnabled&&!this.selectedOllamaProfile&&(this.selectedOllamaProfile=Y(`ollama`,this.gpuDetected?`cuda`:`cpu`));try{let{ok:e,data:t}=await Fe(this.payload);if(!e||!t.ok){this.installError=t.message??t.error??`Install failed.`,this.installing=!1,this.showDeploy=!1;return}this.showDeploy=!0,this.startDeployPolling()}catch(e){this.installError=`Network error: ${e instanceof Error?e.message:`unable to reach server.`}`,this.installing=!1}}}startDeployPolling(){this.stopDeployPolling(),this.pollDeployStatus(),this.deployTimer=setInterval(()=>{this.pollDeployStatus()},2500)}stopDeployPolling(){this.deployTimer&&=(clearInterval(this.deployTimer),null)}async pollDeployStatus(){try{let{ok:e,data:t}=await Ie();if(!e||!t){this.deployPollErrors++,this.deployPollErrors>=5&&(this.stopDeployPolling(),this.deployError=`Lost contact with the installer. Services may still be starting in the background.`);return}if(this.deployPollErrors=0,this.deployData=t,t.deployError)this.stopDeployPolling(),this.deployError=t.deployError;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?(this.stopDeployPolling(),this.deployDone=!0):r&&(this.stopDeployPolling(),this.deployHasWarnings=!0,this.deployDone=!0)}else t.setupComplete&&!t.deploying&&(!t.deployStatus||t.deployStatus.length===0)&&(this.stopDeployPolling(),this.deployDone=!0)}catch(e){this.deployPollErrors++,this.deployPollErrors>=5&&(this.stopDeployPolling(),this.deployError=e instanceof Error?`Lost contact with the installer: ${e.message}`:`Lost contact with the installer.`)}}handlePortalToggle(e){let t=this.portalSelection[e];typeof t==`object`&&t?t.enabled=!t.enabled:this.portalSelection[e]=!t}handleCredentialChange(e,t,n){let r=this.portalSelection[e];typeof r==`object`&&r&&(r[t]=n)}handleNetworkPresetChange(e){let t=e===`home-password`&&this.networkPreset===`home-password`&&this.isRerun&&this.hasExistingOpencodePassword&&!this.opencodePassword;this.networkPreset===`home-open`&&e!==`home-open`&&(this.homeOpenAck=!1),this.networkPreset=e,!t&&(e===`home-password`&&!this.opencodePassword&&(this.opencodePassword=ge()),this.networkDirty=!0)}handleOpencodePasswordInput(e){this.opencodePassword=e,this.networkDirty=!0}handleHomeOpenAckChange(e){this.homeOpenAck=e,this.networkDirty=!0}async handleDeployRetry(){this.installing=!1,this.deployError=null,this.deployDone=!1,this.deployHasWarnings=!1,this.deployData={},this.deployPollErrors=0;let{ok:e,data:t}=await Le();if(!e||t?.ok===!1){this.deployError=t?.message??`Retry failed.`;return}this.installing=!0,this.pollDeployStatus()}handleDeployBack(){this.installing=!1,this.deployError=null,this.deployDone=!1,this.deployHasWarnings=!1,this.deployData={},this.deployPollErrors=0,this.showDeploy=!1,this.currentStep=3}handleSystemCheckPass(){this.systemCheckPassed=!0,this.goToStep(1)}handleGpuDetected(){if(this.gpuDetected=!0,this.voiceProfiles.length>0&&this.selectedVoiceProfile!==Y(`voice`,`cuda`)){let e=this.voiceProfiles.find(e=>e.id===Y(`voice`,`cuda`)&&e.available!==!1);e&&(this.selectedVoiceProfile=e.id)}}async loadHostStatus(){try{let e=await Re();e&&(this.hostProviderCount=Math.max(e.providerCount??0,e.credentialCount??0),e.imageTag&&!this.imageTag&&(this.imageTag=e.imageTag),typeof e.hostAkmAvailable==`boolean`&&(this.isRerun||(this.hostAkmEnabled=e.hostAkmAvailable)),e.modelPreferences?.model&&(this.importedLlmModel=e.modelPreferences.model),e.modelPreferences?.small_model&&(this.importedSmallModel=e.modelPreferences.small_model),this.hostProviderCount>0&&!this.hostImportTriggered&&(this.currentStep===1||this.isRerun)&&(this.hostImportTriggered=!0,this.handleHostImport()))}catch(e){console.warn(`loadHostStatus failed`,e)}}markProviderVerifiedFromImport(e){let t=this.providerState[e];if(!t){t={selected:!0,verified:!0,verifying:!1,error:!1,apiKey:``,baseUrl:``,models:[],ollamaMode:null},this.providerState[e]=t;return}t.verified=!0,t.error=!1}async handleHostImport(){this.hostImporting=!0,this.hostImportError=``;try{let{ok:e,data:t}=await ze();if(!e||!t?.ok){this.hostImportError=t?.error??`Couldn't import providers from this computer. You can sign in or add a provider manually instead.`,this.hostImporting=!1;return}let n=t.importedProviders??t.pushedProviders??[];for(let e of n)this.markProviderVerifiedFromImport(e);if(this.opencodeAvailable)try{await this.loadOpenCodeProviders()}catch(e){console.warn(`handleHostImport: reloading OpenCode providers failed`,e)}this.applyImportedModelPreferences(),await Promise.allSettled(Object.keys(this.providerState).filter(e=>!this.providerState[e].verified&&X.some(t=>t.id===e)).map(e=>this.verifyProvider(e))),this.applyImportedModelPreferences(),this.autoSelectModels(),this.hostImporting=!1,this.isRerun||this.goToStep(1)}catch(e){this.hostImportError=`Network error importing providers from this computer: `+(e instanceof Error?e.message:`unable to reach the server.`),this.hostImporting=!1}}reset(){this.stopDeployPolling();for(let e of Object.keys(this.oauthAbortControllers)){try{this.oauthAbortControllers[e].abort()}catch{}delete this.oauthAbortControllers[e]}this.verifyGeneration={},Object.assign(this,structuredClone($))}init(){this.reset(),this.initProviderState();let e=new URLSearchParams(window.location.search);this.isRerun=e.get(`rerun`)===`1`,this.isRerun?(this.systemCheckPassed=!0,this.maxVisitedStep=3,Be().then(e=>{if(!e)return;let t=Ce(e);t.hostAkmEnabled!==void 0&&(this.hostAkmEnabled=t.hostAkmEnabled),t.llm&&(this.modelSelection.llm=t.llm),t.embedding&&(this.modelSelection.embedding=t.embedding),t.voiceTts&&(this.voiceTts=t.voiceTts),t.voiceStt&&(this.voiceStt=t.voiceStt),t.selectedVoiceProfile&&(this.selectedVoiceProfile=t.selectedVoiceProfile),t.importedLlmModel&&(this.importedLlmModel=t.importedLlmModel),t.importedSmallModel&&(this.importedSmallModel=t.importedSmallModel),t.ollamaEnabled&&(this.ollamaEnabled=!0),t.selectedOllamaProfile&&(this.selectedOllamaProfile=t.selectedOllamaProfile),this.networkPreset=t.networkPreset??null,t.hasOpencodePassword!==void 0&&(this.hasExistingOpencodePassword=t.hasOpencodePassword);for(let e of[`discord`,`slack`]){let n=this.portalSelection[e];if(typeof n==`object`&&n){t.enabledAddons.includes(e)&&(n.enabled=!0);let r=t.portalCredentials[e];if(r&&typeof r==`object`)for(let[e,t]of Object.entries(r))typeof t==`string`&&(n[e]=t)}}}).catch(e=>{console.error(`[setup] failed to load existing config:`,e)})):(this.uiLoginPassword=ge(),Ve().then(e=>{e.setupComplete&&(window.location.href=`/`)}).catch(e=>{console.error(`[setup] failed to check setup status:`,e)})),Ie().then(({ok:e,data:t})=>{!e||!t||(t.deploying||t.deployError)&&(this.deployData=t,this.showDeploy=!0,this.startDeployPolling())}).catch(e=>{console.error(`[setup] failed to fetch deploy status:`,e)}),this.loadHostStatus(),this.loadVoiceProfiles(),this.loadOllamaProfiles(),this.checkOpenCodeAndInit().then(()=>this.detectProviders()).catch(e=>{console.error(`[setup] provider detection failed:`,e)})}dispose(){this.stopDeployPolling();for(let e of Object.keys(this.oauthAbortControllers)){try{this.oauthAbortControllers[e].abort()}catch{}delete this.oauthAbortControllers[e]}}},Ue=n(`<p class="friendly-error-body svelte-jyx78z"> </p>`),We=n(`<p class="friendly-error-hint svelte-jyx78z"> </p>`),Ge=n(`<a target="_blank" rel="noopener noreferrer" class="friendly-error-link svelte-jyx78z"> </a>`),Ke=n(`<div class="friendly-error-links svelte-jyx78z"></div>`),qe=n(`<details class="friendly-error-details svelte-jyx78z"><summary class="svelte-jyx78z">Technical details</summary> <pre class="svelte-jyx78z"> </pre></details>`),Je=n(`<div class="friendly-error svelte-jyx78z"><div class="friendly-error-header svelte-jyx78z"><!> <strong class="friendly-error-title svelte-jyx78z"> </strong></div> <!> <!> <!> <!></div>`);function Ye(e,n){x(n,!0);let r=m(n,`role`,3,`alert`),i=m(n,`compact`,3,!1);var c=t(),d=w(c),p=e=>{var t=Je(),c=j(t),d=j(c);ee(d,{size:18});var p=h(d,2),m=j(p,!0);l(p),l(c);var g=h(c,2),_=e=>{var t=Ue(),r=j(t,!0);l(t),f(()=>o(r,n.error.body)),s(e,t)};a(g,e=>{n.error.body&&e(_)});var v=h(g,2),y=e=>{var t=We(),r=j(t,!0);l(t),f(()=>o(r,n.error.hint)),s(e,t)};a(v,e=>{n.error.hint&&e(y)});var b=h(v,2),x=e=>{var t=Ke();T(t,21,()=>n.error.links,e=>e.href,(e,t)=>{var n=Ge(),r=j(n);l(n),f(()=>{k(n,`href`,u(t).href),o(r,`${u(t).label??``} →`)}),s(e,n)}),l(t),s(e,t)};a(b,e=>{n.error.links&&n.error.links.length>0&&e(x)});var S=h(b,2),C=e=>{var t=qe(),r=h(j(t),2),i=j(r,!0);l(r),l(t),f(()=>o(i,n.error.raw)),s(e,t)};a(S,e=>{!i()&&n.error.raw&&n.error.raw!==n.error.body&&e(C)}),l(t),f(()=>{k(t,`role`,r()),o(m,n.error.title)}),s(e,t)};a(d,e=>{n.error&&e(p)}),s(e,c),C()}var Xe=i(`<svg aria-hidden="true" viewBox="0 0 24 24"><circle fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" cx="12" cy="12" r="3.4"></circle><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M9 9l-2.6-2.6"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M15 9l2.6-2.6"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M9 15l-2.6 2.6"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M15 15l2.6 2.6"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M6.4 6.4l1.2-1.2"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M17.6 6.4l-1.2-1.2"></path></svg>`);function Ze(e,t){let n=m(t,`size`,3,20),r=m(t,`class`,3,``);var i=Xe();f(()=>{k(i,`width`,n()),k(i,`height`,n()),g(i,0,`s-icon ${r()??``}`)}),s(e,i)}var Qe={label:`Docker setup`,href:`https://docs.docker.com/get-docker/`};function $e(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 et(e,t=`generic`,n={}){let r=$e(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:[Qe],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`portal`:return{title:`Portal 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 tt=i(`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--s-moss)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>`),nt=i(`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--s-seal)" 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>`),rt=n(`<div class="syscheck-meta svelte-1txhq2p"> </div>`),it=n(`<div class="syscheck-hint svelte-1txhq2p"> </div> <a class="syscheck-link svelte-1txhq2p" target="_blank" rel="noopener noreferrer"> </a>`,1),at=i(`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--s-moss)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>`),ot=i(`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--s-seal)" 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>`),st=n(`<div class="syscheck-meta svelte-1txhq2p"> </div>`),ct=n('<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),lt=n(`<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(--s-moss)" 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>`),ut=n(`<div class="syscheck-row syscheck-row--info svelte-1txhq2p"><div class="syscheck-icon 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>`),dt=n(`<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>`),ft=n(`<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 pt(n,r){x(r,!0);let i={ollama:`Ollama`,lmstudio:`LM Studio`,"model-runner":`Docker Model Runner`},d=new Set([`ollama`,`lmstudio`,`model-runner`]),p=He,m=()=>p.handleSystemCheckPass(),_=()=>p.handleSystemCheckPass(),y=()=>p.handleGpuDetected(),S=b(()=>p.isRerun),E=N(!0),D=N(null),O=N(null),M=b(()=>u(S)?[]:u(D)?.ports.filter(e=>!e.available)??[]),P=b(()=>u(M).filter(e=>e.blocking)),I=b(()=>u(P).length>0),L=b(()=>!!u(D)?.docker.ok&&!!u(D)?.compose.ok&&!u(I));function R(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 z(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 H(){v(E,!0),v(O,null);try{let e=await fetch(`/api/setup/system-check`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();v(D,t,!0),t.docker.ok&&t.compose.ok&&_(),t.gpu&&y()}catch(e){v(O,et(e,`system-check`),!0),v(D,null)}finally{v(E,!1)}}A(()=>{H()});var ee=ft(),U=h(w(ee),4),W=e=>{Ye(e,{get error(){return u(O)}})};a(U,e=>{u(O)&&e(W)});var G=h(U,2),K=j(G);let q;var J=j(K),te=j(J),Y=e=>{V(e,{size:16})},X=e=>{s(e,tt())},ne=e=>{s(e,nt())};a(te,e=>{u(E)?e(Y):u(D)?.docker.ok?e(X,1):e(ne,-1)}),l(J);var Z=h(J,2),re=h(j(Z),2),ie=e=>{var t=rt(),n=j(t);l(t),f(()=>o(n,`${u(D).runtime?.runtimeName??`Docker`??``} server ${u(D).docker.version??``}`)),s(e,t)},ae=e=>{var t=it(),n=w(t),r=j(n,!0);l(n);var i=h(n,2),a=j(i);l(i),f((e,t,n)=>{o(r,e),k(i,`href`,t),o(a,`${n??``} →`)},[()=>u(D).docker.error?.includes(`not found`)||u(D).docker.error?.includes(`ENOENT`)?`Docker isn't installed yet.`:z(u(D).platform),()=>R(u(D).platform).href,()=>R(u(D).platform).label]),s(e,t)};a(re,e=>{u(D)?.docker.ok&&u(D).docker.version?e(ie):u(D)&&!u(D).docker.ok&&e(ae,1)}),l(Z),l(K);var oe=h(K,2);let se;var ce=j(oe),le=j(ce),ue=e=>{V(e,{size:16})},de=e=>{s(e,at())},fe=e=>{s(e,ot())};a(le,e=>{u(E)?e(ue):u(D)?.compose.ok?e(de,1):e(fe,-1)}),l(ce);var pe=h(ce,2),me=h(j(pe),2),he=e=>{var t=st(),n=j(t,!0);l(t),f(()=>o(n,u(D).compose.version)),s(e,t)},ge=e=>{var t=ct();F(2),s(e,t)};a(me,e=>{u(D)?.compose.ok&&u(D).compose.version?e(he):u(D)&&!u(D).compose.ok&&e(ge,1)}),l(pe),l(oe);var _e=h(oe,2),ve=e=>{var t=lt(),n=h(j(t),2),r=h(j(n),2),i=j(r,!0);l(r),l(n),l(t),f(()=>o(i,u(D).gpu)),s(e,t)};a(_e,e=>{u(D)?.gpu&&e(ve)});var ye=h(_e,2),be=e=>{var n=t();T(w(n),17,()=>u(D).hostProviders,e=>e.provider,(e,t)=>{var n=ut(),r=j(n),c=j(r),p=e=>{B(e,{size:18})},m=b(()=>d.has(u(t).provider)),g=e=>{Ze(e,{size:18})};a(c,e=>{u(m)?e(p):e(g,-1)}),l(r);var _=h(r,2),v=j(_),y=j(v);l(v);var x=h(v,2),S=j(x,!0);l(x),F(2),l(_),l(n),f(()=>{o(y,`${i[u(t).provider]??u(t).provider??``} is running`),o(S,u(t).url)}),s(e,n)}),s(e,n)};a(ye,e=>{u(D)?.hostProviders&&u(D).hostProviders.length>0&&e(be)});var xe=h(ye,2),Se=e=>{var t=dt(),n=j(t),r=j(n);l(n);var i=h(n,2),d=j(i),p=j(d);l(d);var m=h(d,2),_=j(m),v=e=>{s(e,c(`Docker is not running — start Docker and click Retry to confirm.`))},y=e=>{s(e,c(`Another program is using this port. Quit it and click Retry.`))};a(_,e=>{u(D).portCheckReliable?e(y,-1):e(v)}),l(m),l(i),l(t),f(e=>{g(t,1,`syscheck-row ${u(I)?`syscheck-row--fail`:`syscheck-row--warn`}`,`svelte-1txhq2p`),k(r,`stroke`,u(I)?`var(--s-seal)`:`var(--s-ink-2)`),o(p,`Port conflict on ${e??``}`)},[()=>u(M).map(e=>e.port).join(`, `)]),s(e,t)};a(xe,e=>{u(D)&&u(M).length>0&&e(Se)}),l(G);var Ce=h(G,2),we=j(Ce),Q=j(we,!0);l(we);var Te=h(we,2);l(Ce),f(()=>{q=g(K,1,`syscheck-row svelte-1txhq2p`,null,q,{"syscheck-row--ok":u(D)?.docker.ok,"syscheck-row--fail":u(D)&&!u(D).docker.ok}),se=g(oe,1,`syscheck-row svelte-1txhq2p`,null,se,{"syscheck-row--ok":u(D)?.compose.ok,"syscheck-row--fail":u(D)&&!u(D).compose.ok}),we.disabled=u(E),o(Q,u(E)?`Checking…`:`Retry checks`),Te.disabled=u(E)||!u(L)}),e(`click`,we,()=>H()),e(`click`,Te,m),s(n,ee),C()}L([`click`]);var mt=n(`<p class="oauth-empty svelte-1kgjxt0">Nothing more to add — you're all connected.</p>`),ht=n(`<span class="oauth-status oauth-status--ok svelte-1kgjxt0">Connected ✓</span>`),gt=n(`<a target="_blank" rel="noopener" class="oauth-open-link svelte-1kgjxt0">Open authorization page →</a>`),_t=n(`<p class="oauth-instructions svelte-1kgjxt0"> </p>`),vt=n(`<div class="oauth-polling svelte-1kgjxt0"><!> <!> <div class="oauth-waiting svelte-1kgjxt0"><!> Waiting for authorization…</div> <button type="button" class="btn-oauth-cancel svelte-1kgjxt0">Cancel</button></div>`),yt=n(`<button type="button" class="btn btn-secondary btn-sm"> </button>`),bt=n(`<span class="oauth-error svelte-1kgjxt0" role="alert"> </span>`),xt=n(`<div class="oauth-row svelte-1kgjxt0" role="listitem"><span class="oauth-name svelte-1kgjxt0"> </span> <!> <!></div>`),St=n(`<button type="button" class="oauth-more svelte-1kgjxt0"> </button>`),Ct=n(`<!> <!>`,1),wt=n(`<div class="oauth-list svelte-1kgjxt0" role="list"><!></div>`);function Tt(t,n){x(n,!0);let r=He,i=b(()=>r.opencodeProviders),c=b(()=>r.opencodeAuth),d=b(()=>r.providerState),p=(e,t)=>void r.startOpenCodeOAuth(e,t),m=e=>r.cancelOAuth(e),g=[`openai`,`google`,`github-copilot`,`groq`,`mistral`,`huggingface`],_=b(()=>u(i).filter(e=>ae.has(e.id)||u(d)[e.id]?.verified?!1:(u(c)[e.id]??[]).some(e=>e.type===`oauth`)).sort((e,t)=>{let n=g.indexOf(e.id),r=g.indexOf(t.id);return(n===-1?99:n)-(r===-1?99:r)})),y=N(!1),S=b(()=>u(y)?u(_):u(_).slice(0,4)),E=b(()=>Math.max(0,u(_).length-4));function D(e){return u(d)[e]??{selected:!1,verified:!1,verifying:!1,error:!1,apiKey:``,baseUrl:``,models:[],ollamaMode:null}}function O(e){return(u(c)[e]??[]).findIndex(e=>e.type===`oauth`)}var A=wt(),M=j(A),P=e=>{s(e,mt())},I=t=>{var n=Ct(),r=w(n);T(r,17,()=>u(S),e=>e.id,(t,n)=>{let r=b(()=>D(u(n).id)),i=b(()=>O(u(n).id));var c=xt(),d=j(c),g=j(d,!0);l(d);var _=h(d,2),v=e=>{var t=ht();f(()=>k(t,`aria-label`,`${u(n).name??``} connected`)),s(e,t)},y=t=>{var i=vt(),c=j(i),d=e=>{var t=gt();f(()=>k(t,`href`,u(r).oauthUrl)),s(e,t)};a(c,e=>{u(r).oauthUrl&&e(d)});var p=h(c,2),g=e=>{var t=_t(),n=j(t,!0);l(t),f(()=>o(n,u(r).oauthInstructions)),s(e,t)};a(p,e=>{u(r).oauthInstructions&&e(g)});var _=h(p,2);V(j(_),{}),F(),l(_);var v=h(_,2);l(i),e(`click`,v,()=>m(u(n).id)),s(t,i)},x=t=>{var a=yt(),c=j(a,!0);l(a),f(()=>{a.disabled=u(r).verifying,o(c,u(r).verifying?`Signing in…`:`Sign in`)}),e(`click`,a,()=>p(u(n).id,u(i))),s(t,a)};a(_,e=>{u(r).verified?e(v):u(r).oauthPolling?e(y,1):e(x,-1)});var S=h(_,2),C=e=>{var t=bt(),n=j(t,!0);l(t),f(()=>o(n,u(r).errorMessage??`Authorization failed`)),s(e,t)};a(S,e=>{u(r).error&&!u(r).oauthPolling&&e(C)}),l(c),f(()=>{k(c,`data-provider`,u(n).id),o(g,u(n).name)}),s(t,c)});var i=h(r,2),c=t=>{var n=St(),r=j(n,!0);l(n),f(()=>o(r,u(y)?`Show fewer`:`Show ${u(E)} more services`)),e(`click`,n,()=>{v(y,!u(y))}),s(t,n)};a(i,e=>{u(E)>0&&e(c)}),s(t,n)};a(M,e=>{u(_).length===0?e(P):e(I,-1)}),l(A),s(t,A),C()}L([`click`]);var Et=n(`<p class="connected svelte-v318we" role="status"><span class="check svelte-v318we" aria-hidden="true">✓</span> Connected your AI account.</p> <button type="button" class="account-link svelte-v318we">Use a different account</button>`,1),Dt=n(`<p class="connecting svelte-v318we" role="status"><!> Connecting your AI account…</p>`),Ot=n(`<p class="lead svelte-v318we">We found an AI account on this computer.</p> <button type="button" class="btn-connect svelte-v318we" id="btn-host-import">Use this account</button> <button type="button" class="account-link svelte-v318we">Use a different account</button>`,1),kt=n(`<button type="button" class="account-link svelte-v318we">Use the account on this computer instead</button>`),At=n(`<p class="lead svelte-v318we">Sign in to your AI service:</p> <!> <!>`,1),jt=n(`<div class="cloud-attach svelte-v318we"><!></div>`);function Mt(n){let r=He,i=[],o=b(()=>r.hostImporting),c=b(()=>r.verifiedCount),d=()=>void r.handleHostImport(),f=b(()=>i.length>0),p=b(()=>u(c)>0),m=N(!1),g=b(()=>!u(f)||u(m));var _=jt(),y=j(_),x=n=>{var r=t(),i=w(r),c=t=>{var n=Et();e(`click`,h(w(n),2),()=>v(m,!0)),s(t,n)},f=e=>{var t=Dt();V(j(t),{}),F(),l(t),s(e,t)},g=t=>{var n=Ot(),r=h(w(n),2),i=h(r,2);e(`click`,r,d),e(`click`,i,()=>v(m,!0)),s(t,n)};a(i,e=>{u(p)?e(c):u(o)?e(f,1):e(g,-1)}),s(n,r)},S=t=>{var n=At(),r=h(w(n),2);Tt(r,{});var i=h(r,2),o=t=>{var n=kt();e(`click`,n,()=>v(m,!1)),s(t,n)};a(i,e=>{u(f)&&e(o)}),s(t,n)};a(y,e=>{u(g)?e(S,-1):e(x)}),l(_),s(n,_)}L([`click`]);var Nt=n(`<div class="status-row status-row--running svelte-1fl6n4z" role="status"><span class="status-icon svelte-1fl6n4z" aria-hidden="true">●</span> <span class="status-text svelte-1fl6n4z"> </span></div>`),Pt=n(`<div class="status-callout status-callout--apple svelte-1fl6n4z" role="note"><div class="callout-icon svelte-1fl6n4z" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg></div> <div class="callout-body svelte-1fl6n4z"><p class="callout-title svelte-1fl6n4z">Apple Silicon detected</p> <p class="callout-desc svelte-1fl6n4z">For best performance, install <a href="https://ollama.com/download" target="_blank" rel="noopener" class="svelte-1fl6n4z">Ollama for macOS</a> and leave it running before continuing. Once Ollama is running, click Re-check to continue.</p> <button class="btn-recheck svelte-1fl6n4z" type="button" id="btn-local-recheck">Re-check</button></div></div>`),Ft=n(`<div class="status-row status-row--will-install svelte-1fl6n4z" role="status"><span class="status-icon svelte-1fl6n4z" aria-hidden="true">◎</span> <span class="status-text svelte-1fl6n4z">Will install Ollama in the stack <!>.
4
- First pull downloads ~4–8 GB.</span></div>`),It=n(`<div class="status-row status-row--will-install svelte-1fl6n4z" role="status"><span class="status-icon svelte-1fl6n4z" aria-hidden="true">◎</span> <span class="status-text svelte-1fl6n4z">Will install Ollama in the stack (CPU mode). First pull downloads ~4–8 GB.</span></div>`),Lt=n(`<div class="local-models-status svelte-1fl6n4z"><!></div>`);function Rt(t,n){x(n,!0);let r=He,i=b(()=>r.detectedHostProviders),d=b(()=>r.detectedGpuVramMb),p=b(()=>r.detectedGpuVendor),m=b(()=>r.detectedGpuName),g=b(()=>r.ollamaEnabled),_=b(()=>r.selectedOllamaProfile),v=()=>void r.fetchAndApplyRecommendation(),y=b(()=>u(p)===`apple`),S=b(()=>u(i).length>0),w=b(()=>Math.round(u(d)/1024)),T=b(()=>u(_).endsWith(`cuda`)?`CUDA`:u(_).endsWith(`rocm`)?`ROCm`:`CPU`);function E(e){return e===`ollama`?`Ollama`:e===`lmstudio`?`LM Studio`:e===`model-runner`?`Docker Model Runner`:e}var D=Lt(),O=j(D),k=e=>{var t=Nt(),n=h(j(t),2),r=j(n);l(n),l(t),f(e=>o(r,`Using ${e??``} already running on your machine.`),[()=>u(i).map(e=>E(e.provider)).join(`, `)]),s(e,t)},A=t=>{var n=Pt(),r=h(j(n),2),i=h(j(r),4);l(r),l(n),e(`click`,i,v),s(t,n)},M=e=>{var t=Ft(),n=h(j(t),2),r=h(j(n)),i=e=>{var t=c();f(()=>o(t,`(GPU: ${u(m)??``}, ${u(w)??``} GB, profile: ${u(T)??``})`)),s(e,t)};a(r,e=>{u(m)&&e(i)}),F(),l(n),l(t),s(e,t)},N=e=>{s(e,It())};a(O,e=>{u(S)?e(k):u(y)?e(A,1):u(g)&&u(d)>=8192?e(M,2):u(g)&&e(N,3)}),l(D),s(t,D),C()}L([`click`]);var zt=n(`<div class="s1-alert s1-alert--error svelte-z6usuj" role="alert"><span class="s1-alert-text svelte-z6usuj"> </span> <button type="button" class="s1-alert-btn svelte-z6usuj" id="btn-syscheck-retry">Retry</button></div>`),Bt=n(`<div class="s1-shimmer svelte-z6usuj" aria-busy="true" aria-label="Detecting AI services…"><span class="s1-shimmer-bar svelte-z6usuj"></span> <span class="s1-shimmer-bar s1-shimmer-bar--short svelte-z6usuj"></span> <span class="s1-shimmer-bar s1-shimmer-bar--shorter svelte-z6usuj"></span></div>`),Vt=n(`<div class="s1-detected-banner svelte-z6usuj" role="status"><div class="s1-detected-check svelte-z6usuj" aria-hidden="true">✓</div> <div class="s1-detected-text svelte-z6usuj"><div class="s1-detected-title svelte-z6usuj"> </div> <div class="s1-detected-sub svelte-z6usuj">We found your account on this computer. Just continue, or choose something different below.</div></div></div>`),Ht=n(`<button type="button" role="radio"><div class="s1-radio-dot svelte-z6usuj"><div class="s1-radio-dot-inner svelte-z6usuj"></div></div> <div class="s1-choice-body svelte-z6usuj"><div class="s1-choice-title svelte-z6usuj"> </div> <div class="s1-choice-sub svelte-z6usuj"> </div></div> <span class="s1-badge-recommended svelte-z6usuj">Recommended</span></button>`),Ut=n(`<div class="s1-local-panel svelte-z6usuj" aria-live="polite"><!></div>`),Wt=n(`<div class="s1-signin-panel svelte-z6usuj" aria-live="polite"><!></div>`),Gt=n(`<div class="s1-empty-install-row svelte-z6usuj"><p class="s1-empty-install-hint svelte-z6usuj">No AI here? You can still continue — connect this app to an assistant
5
- running on another computer, or add a provider later from your dashboard.</p> <button type="button" class="s1-btn-empty-install svelte-z6usuj">I'll set this up later</button></div>`),Kt=n(`<!> <div class="s1-choice-list svelte-z6usuj" role="radiogroup" aria-label="Which AI should your assistant use"><!> <button type="button" role="radio"><div class="s1-radio-dot svelte-z6usuj"><div class="s1-radio-dot-inner svelte-z6usuj"></div></div> <div class="s1-choice-icon svelte-z6usuj" aria-hidden="true"><svg viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.4" class="svelte-z6usuj"><rect x="1.5" y="2.5" width="15" height="10" rx="1.5" class="svelte-z6usuj"></rect><path d="M5.5 15.5h7M9 12.5v3" stroke-linecap="round" class="svelte-z6usuj"></path><circle cx="9" cy="7.5" r="2.5" class="svelte-z6usuj"></circle></svg></div> <div class="s1-choice-body svelte-z6usuj"><div class="s1-choice-title svelte-z6usuj">Run on this computer</div> <div class="s1-choice-sub svelte-z6usuj"><!></div></div></button> <!> <button type="button" role="radio"><div class="s1-radio-dot svelte-z6usuj"><div class="s1-radio-dot-inner svelte-z6usuj"></div></div> <div class="s1-choice-body svelte-z6usuj"><div class="s1-choice-title svelte-z6usuj"> </div> <div class="s1-choice-sub svelte-z6usuj"> </div></div></button> <!></div> <!>`,1),qt=n(`<div data-testid="step-models" class="screen-models svelte-z6usuj"><!> <!></div>`);function Jt(t,n){x(n,!0);let i=He,d=b(()=>i.autoModeImporting),p=b(()=>i.systemCheckPassed?``:i.step0Error||``),m=b(()=>i.detectedGpuVramMb),_=b(()=>i.detectedGpuVendor),y=b(()=>i.detectedHostProviders),S=b(()=>i.opencodeProviders),T=b(()=>i.hostImporting),E=b(()=>i.verifiedCount),D=b(()=>i.allowEmptyInstall),A=b(()=>i.modelSelection.llm?.model??``),M=b(()=>i.modelSelection.llm?.connId??``),P=b(()=>i.detectedCloudConn),I=e=>i.handleConnectModeChange(e),L=()=>i.goToStep(0),R=e=>{i.allowEmptyInstall=e},z=b(()=>u(m)>=8192||u(_)===`apple`||u(y).length>0);function B(e){return re[e]?re[e]:u(S).find(t=>t.id===e)?.name||e}let V=b(()=>u(P)||(u(M)&&!Z.has(u(M))?u(M):``)),H=b(()=>u(V)?B(u(V)):``),ee=b(()=>Z.has(u(M))),U=b(()=>!!u(V)&&u(E)>0),W=N(O(r(()=>u(U)?`detected`:u(ee)&&u(M)?`local`:null)));function G(e){e===`local`&&!u(z)||(v(W,e,!0),e===`local`?I(`local`):e===`detected`&&I(`cloud`))}let K=b(()=>u(W)===`local`),q=b(()=>u(W)===`cloud`),J=b(()=>u(U)?`Sign in to a different service`:`Sign in to a cloud AI service`),te=b(()=>u(U)?`Google Gemini, GitHub Copilot, and others`:`OpenAI, Google Gemini, GitHub Copilot, and others`);var Y=qt(),X=j(Y),ne=t=>{var n=zt(),r=j(n),i=j(r,!0);l(r);var a=h(r,2);l(n),f(()=>o(i,u(p))),e(`click`,a,L),s(t,n)};a(X,e=>{u(p)&&e(ne)});var ie=h(X,2),ae=e=>{s(e,Bt())},oe=t=>{var n=Kt(),r=w(n),i=e=>{var t=Vt(),n=h(j(t),2),r=j(n),i=j(r);l(r),F(2),l(n),l(t),f(()=>o(i,`${u(H)??``} is already connected — you're good to go`)),s(e,t)};a(r,e=>{u(E)>0&&u(U)&&e(i)});var d=h(r,2),p=j(d),m=t=>{var n=Ht();let r;var i=h(j(n),2),a=j(i),c=j(a,!0);l(a);var d=h(a,2),p=j(d);l(d),l(i),F(2),l(n),f(()=>{r=g(n,1,`s1-choice-row svelte-z6usuj`,null,r,{"s1-choice-row--selected":u(W)===`detected`}),k(n,`aria-checked`,u(W)===`detected`),o(c,u(H)),o(p,`Use your existing ${u(H)??``} subscription`)}),e(`click`,n,()=>G(`detected`)),s(t,n)};a(p,e=>{u(U)&&e(m)});var _=h(p,2);let v;var y=h(j(_),4),b=h(j(y),2),x=j(b),S=e=>{s(e,c(`Private & free — no account needed, no data leaves your machine`))},C=e=>{s(e,c(`Needs a more capable computer — requires 8 GB+ graphics card or Apple Silicon`))};a(x,e=>{u(z)?e(S):e(C,-1)}),l(b),l(y),l(_);var T=h(_,2),O=e=>{var t=Ut();Rt(j(t),{}),l(t),s(e,t)};a(T,e=>{u(K)&&e(O)});var M=h(T,2);let N;var P=h(j(M),2),I=j(P),L=j(I,!0);l(I);var B=h(I,2),V=j(B,!0);l(B),l(P),l(M);var ee=h(M,2),Y=e=>{var t=Wt();Mt(j(t),{}),l(t),s(e,t)};a(ee,e=>{u(q)&&e(Y)}),l(d);var X=h(d,2),ne=t=>{var n=Gt(),r=h(j(n),2);l(n),e(`click`,r,()=>R?.(!0)),s(t,n)};a(X,e=>{!u(A)&&!u(D)&&e(ne)}),f(()=>{v=g(_,1,`s1-choice-row svelte-z6usuj`,null,v,{"s1-choice-row--selected":u(W)===`local`,"s1-choice-row--unavailable":!u(z)}),k(_,`aria-checked`,u(W)===`local`),_.disabled=!u(z),N=g(M,1,`s1-choice-row svelte-z6usuj`,null,N,{"s1-choice-row--selected":u(W)===`cloud`}),k(M,`aria-checked`,u(W)===`cloud`),o(L,u(J)),o(V,u(te))}),e(`click`,_,()=>G(`local`)),e(`click`,M,()=>G(`cloud`)),s(t,n)};a(ie,e=>{u(d)||u(T)?e(ae):e(oe,-1)}),l(Y),s(t,Y),C()}L([`click`]);var Yt=n(`<div class="addon-row svelte-85kisn" role="listitem"><div class="addon-row-header svelte-85kisn"><div class="addon-icon discord-icon svelte-85kisn" aria-hidden="true"><svg viewBox="0 0 24 24" fill="#5865f2" class="svelte-85kisn"><path d="M19 5.3A16 16 0 0015 4l-.2.4a14 14 0 00-4 0L10.5 4a16 16 0 00-4 1.3C4 9 3.3 12.6 3.6 16.2A16 16 0 008.5 18.7c.4-.5.8-1.1 1-1.7a9 9 0 01-1.6-.8l.4-.3a11 11 0 009.4 0l.4.3a9 9 0 01-1.6.8c.3.6.6 1.2 1 1.7a16 16 0 004.9-2.5c.4-4.2-.7-7.8-2.4-10.9zM9 14c-.8 0-1.4-.7-1.4-1.6S8.2 10.8 9 10.8s1.4.7 1.4 1.6S9.8 14 9 14zm6 0c-.8 0-1.4-.7-1.4-1.6s.6-1.6 1.4-1.6 1.4.7 1.4 1.6S15.8 14 15 14z"></path></svg></div> <div class="addon-body svelte-85kisn"><div class="addon-title svelte-85kisn">Discord</div> <div class="addon-sub svelte-85kisn">Reach your assistant from a Discord server</div></div> <div class="toggle-wrap svelte-85kisn"><label class="toggle svelte-85kisn" aria-label="Enable Discord"><input type="checkbox" class="svelte-85kisn"/> <div class="toggle-track svelte-85kisn"></div> <div class="toggle-thumb svelte-85kisn"></div></label></div></div> <div aria-live="polite"><div class="addon-panel-inner svelte-85kisn"><div class="field-group svelte-85kisn"><div><label class="field-label svelte-85kisn" for="cred-discord-botToken">Bot token</label> <input class="field-input svelte-85kisn" type="password" id="cred-discord-botToken" placeholder="Paste your bot token here" autocomplete="off"/> <p class="field-help svelte-85kisn"><a href="https://discord.com/developers/docs/quick-start/getting-started" target="_blank" rel="noopener" class="svelte-85kisn">How to create a Discord bot and get your token →</a></p></div> <div><label class="field-label svelte-85kisn" for="cred-discord-applicationId">Application ID</label> <input class="field-input svelte-85kisn" type="text" id="cred-discord-applicationId" placeholder="Your app's numeric ID" autocomplete="off"/> <p class="field-help svelte-85kisn">Found in the Discord Developer Portal under your application's General Information page.</p></div></div></div></div></div>`),Xt=n(`<div class="addon-row svelte-85kisn" role="listitem"><div class="addon-row-header svelte-85kisn"><div class="addon-icon slack-icon svelte-85kisn" aria-hidden="true"><svg viewBox="0 0 24 24" class="svelte-85kisn"><path fill="#36C5F0" d="M9 13.5a2 2 0 11-2-2h2v2z"></path><path fill="#2EB67D" d="M10.5 9a2 2 0 112 2H10.5v-2z"></path><path fill="#ECB22E" d="M15 10.5a2 2 0 112 2h-2v-2z"></path><path fill="#E01E5A" d="M13.5 15a2 2 0 11-2 2v-2h2z"></path></svg></div> <div class="addon-body svelte-85kisn"><div class="addon-title svelte-85kisn">Slack</div> <div class="addon-sub svelte-85kisn">Reach your assistant from a Slack workspace</div></div> <div class="toggle-wrap svelte-85kisn"><label class="toggle svelte-85kisn" aria-label="Enable Slack"><input type="checkbox" class="svelte-85kisn"/> <div class="toggle-track svelte-85kisn"></div> <div class="toggle-thumb svelte-85kisn"></div></label></div></div> <div aria-live="polite"><div class="addon-panel-inner svelte-85kisn"><div class="field-group svelte-85kisn"><div><label class="field-label svelte-85kisn" for="cred-slack-slackBotToken">Bot token</label> <input class="field-input svelte-85kisn" type="password" id="cred-slack-slackBotToken" placeholder="xoxb-…" autocomplete="off"/></div> <div><label class="field-label svelte-85kisn" for="cred-slack-slackAppToken">App-level token</label> <input class="field-input svelte-85kisn" type="password" id="cred-slack-slackAppToken" placeholder="xapp-…" autocomplete="off"/> <p class="field-help svelte-85kisn"><a href="https://api.slack.com/quickstart" target="_blank" rel="noopener" class="svelte-85kisn">How to create a Slack app and get your tokens →</a></p></div></div></div></div></div>`),Zt=n(`<div data-testid="step-extras" class="addon-list svelte-85kisn" role="list"><div class="addon-row svelte-85kisn" role="listitem"><div class="addon-row-header svelte-85kisn"><div class="addon-icon voice-icon svelte-85kisn" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="#3b82f6" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" class="svelte-85kisn"><rect x="9" y="3" width="6" height="11" rx="3"></rect><path d="M5 11a7 7 0 0014 0M12 18v3"></path></svg></div> <div class="addon-body svelte-85kisn"><div class="addon-title svelte-85kisn">Voice</div> <div class="addon-sub svelte-85kisn">Talk to your assistant and hear it reply</div></div> <div class="toggle-wrap svelte-85kisn"><label class="toggle svelte-85kisn" aria-label="Enable Voice"><input type="checkbox" class="svelte-85kisn"/> <div class="toggle-track svelte-85kisn"></div> <div class="toggle-thumb svelte-85kisn"></div></label></div></div> <div aria-live="polite"><div class="addon-panel-inner svelte-85kisn"><p class="panel-question svelte-85kisn">How should your assistant speak?</p> <div class="voice-option svelte-85kisn"><div class="voice-option-dot svelte-85kisn"><div class="voice-option-dot-inner svelte-85kisn"></div></div> <div><div class="voice-option-text svelte-85kisn">Built-in voice — free, runs on this computer</div> <div class="voice-option-sub svelte-85kisn">No internet needed. Sounds natural, works out of the box.</div></div></div></div></div></div> <!> <!></div>`);function Qt(t,n){x(n,!0);let r=He,i=b(()=>r.modelMode),o=b(()=>r.voiceEnabled),c=b(()=>r.displayedVoiceTts),d=b(()=>r.displayedVoiceStt),p=b(()=>r.hasOpenAI),m=b(()=>r.portalSelection),_=e=>{r.voiceEnabled=e,r.handleEnableVoiceChange(e)},v=e=>{r.voiceTts=e},w=e=>{r.voiceStt=e},T=e=>r.handlePortalToggle(e),D=(e,t,n)=>r.handleCredentialChange(e,t,n);function O(){return u(i)===`local`||u(i)===`both`?`openpalm-voice`:u(p)?`openai-tts`:`browser-tts`}function k(){return u(i)===`local`||u(i)===`both`?`openpalm-voice`:u(p)?`openai-stt`:`browser-stt`}function A(){let e=!u(o);_(e),e&&((!u(c).engine||u(c).engine===``)&&v({engine:O()}),(!u(d).engine||u(d).engine===``)&&w({engine:k()}),O()===`openpalm-voice`&&v({engine:`openpalm-voice`}),k()===`openpalm-voice`&&w({engine:`openpalm-voice`}))}function M(e,t){return me(u(m),e,t)}function N(e,t){return he(u(m),e,t)}let P=b(()=>oe.filter(e=>!e.locked)),I=b(()=>u(P).find(e=>e.id===`discord`)),L=b(()=>u(P).find(e=>e.id===`slack`)),R=b(()=>M(`discord`)),z=b(()=>M(`slack`));var B=Zt(),V=j(B),H=j(V),ee=h(j(H),4),U=j(ee),W=j(U);y(W),F(4),l(U),l(ee),l(H);var G=h(H,2);let K;l(V);var q=h(V,2),J=t=>{var n=Yt(),r=j(n),i=h(j(r),4),a=j(i),o=j(a);y(o),F(4),l(a),l(i),l(r);var c=h(r,2);let d;var p=j(c),m=j(p),_=j(m),v=h(j(_),2);y(v),F(2),l(_);var b=h(_,2),x=h(j(b),2);y(x),F(2),l(b),l(m),l(p),l(c),l(n),f((e,t)=>{E(o,u(R)),d=g(c,1,`addon-panel svelte-85kisn`,null,d,{open:u(R)}),S(v,e),S(x,t)},[()=>N(`discord`,`botToken`),()=>N(`discord`,`applicationId`)]),e(`change`,o,()=>T(`discord`)),e(`input`,v,e=>{e.stopPropagation(),D(`discord`,`botToken`,e.currentTarget.value)}),e(`click`,v,e=>e.stopPropagation()),e(`input`,x,e=>{e.stopPropagation(),D(`discord`,`applicationId`,e.currentTarget.value)}),e(`click`,x,e=>e.stopPropagation()),s(t,n)};a(q,e=>{u(I)&&e(J)});var te=h(q,2),Y=t=>{var n=Xt(),r=j(n),i=h(j(r),4),a=j(i),o=j(a);y(o),F(4),l(a),l(i),l(r);var c=h(r,2);let d;var p=j(c),m=j(p),_=j(m),v=h(j(_),2);y(v),l(_);var b=h(_,2),x=h(j(b),2);y(x),F(2),l(b),l(m),l(p),l(c),l(n),f((e,t)=>{E(o,u(z)),d=g(c,1,`addon-panel svelte-85kisn`,null,d,{open:u(z)}),S(v,e),S(x,t)},[()=>N(`slack`,`slackBotToken`),()=>N(`slack`,`slackAppToken`)]),e(`change`,o,()=>T(`slack`)),e(`input`,v,e=>{e.stopPropagation(),D(`slack`,`slackBotToken`,e.currentTarget.value)}),e(`click`,v,e=>e.stopPropagation()),e(`input`,x,e=>{e.stopPropagation(),D(`slack`,`slackAppToken`,e.currentTarget.value)}),e(`click`,x,e=>e.stopPropagation()),s(t,n)};a(te,e=>{u(L)&&e(Y)}),l(B),f(()=>{E(W,u(o)),K=g(G,1,`addon-panel svelte-85kisn`,null,K,{open:u(o)})}),e(`change`,W,A),s(t,B),C()}L([`change`,`input`,`click`]);var $t=n(`<p class="network-custom-notice svelte-1clxjuu">Custom network settings detected — kept as-is unless you pick a preset below.</p>`),en=n(`<div class="network-option-detail svelte-1clxjuu"><label class="field svelte-1clxjuu" for="network-opencode-password"><span>Password</span> <input id="network-opencode-password" class="control-input mono svelte-1clxjuu" type="text" autocomplete="new-password" spellcheck="false"/></label></div>`),tn=n(`<div class="network-option-detail svelte-1clxjuu"><p class="network-risk-warning svelte-1clxjuu" role="alert">Anyone on your network will be able to use the assistant without a password — only choose this on
6
- a network you trust.</p> <label class="field-inline svelte-1clxjuu"><input type="checkbox"/> <span>I understand this exposes the assistant to everyone on my network without a password.</span></label></div>`),nn=n(`<div class="network-option"><button type="button" role="radio"><div class="network-option-dot svelte-1clxjuu"><div class="network-option-dot-inner svelte-1clxjuu"></div></div> <div class="network-option-body svelte-1clxjuu"><div class="network-option-title svelte-1clxjuu"> </div> <div class="network-option-sub svelte-1clxjuu"> </div></div></button> <!> <!></div>`),rn=n(`<div class="network-step svelte-1clxjuu"><p class="network-step-label svelte-1clxjuu">Network access</p> <!> <div class="network-option-list svelte-1clxjuu" role="radiogroup" aria-label="Network access preset"></div> <p class="network-mdns-note svelte-1clxjuu"><code>.local</code> names are broadcast by the host <code>openpalm</code> process while it runs — the exact
7
- names appear after install in Dashboard → Assistant.</p></div>`);function an(t,n){x(n,!0);let r=He,i=b(()=>r.networkPreset),c=b(()=>r.opencodePassword),d=b(()=>r.homeOpenAck),p={"this-pc":`Nothing here is reachable from other devices — only this computer can use the assistant.`,"home-password":`Devices on your network can open the assistant (e.g. http://openpalm.local:3800) and sign in with this password. Connected apps use the same password.`,"home-open":`Anyone on your network can use the assistant without a password. The built-in OpenPalm UI stays disabled in this mode — LAN users get OpenCode's own web UI instead.`,"shared-guardian":`Only the guardian's protected front door is reachable (e.g. http://openpalm-guardian.local); the assistant itself stays private on this PC. Enables the built-in chat portal when no other portal is selected, so the front door actually runs. Connecting apps and devices need credentials you issue from the dashboard (Pair a device / API key).`};function m(e){r.handleNetworkPresetChange(e)}function _(e){r.handleOpencodePasswordInput(e.currentTarget.value)}function v(e){r.handleHomeOpenAckChange(e.currentTarget.checked)}var w=rn(),D=h(j(w),2),O=e=>{s(e,$t())};a(D,e=>{u(i)===null&&e(O)});var A=h(D,2);T(A,20,()=>q,e=>e,(t,n)=>{var r=nn(),b=j(r);let x;var C=h(j(b),2),w=j(C),T=j(w,!0);l(w);var D=h(w,2),O=j(D,!0);l(D),l(C),l(b);var A=h(b,2),M=t=>{var n=en(),r=j(n),i=h(j(r),2);y(i),l(r),l(n),f(()=>S(i,u(c))),e(`input`,i,_),s(t,n)};a(A,e=>{n===`home-password`&&u(i)===`home-password`&&e(M)});var N=h(A,2),P=t=>{var n=tn(),r=h(j(n),2),i=j(r);y(i),F(2),l(r),l(n),f(()=>E(i,u(d))),e(`change`,i,v),s(t,n)};a(N,e=>{n===`home-open`&&u(i)===`home-open`&&e(P)}),l(r),f(()=>{x=g(b,1,`network-option-row svelte-1clxjuu`,null,x,{"network-option-row--selected":u(i)===n}),k(b,`aria-checked`,u(i)===n),o(T,G[n]),o(O,p[n])}),e(`click`,b,()=>m(n)),s(t,r)}),l(A),F(2),l(w),s(t,w),C()}L([`click`,`input`,`change`]);var on=n(`<div class="review-note svelte-1q74f52">No AI set up here yet — that's fine. After install you can connect this app to an
8
- assistant running on another computer, or add a provider, anytime from your dashboard.</div>`),sn=n(`<input class="password-value password-value--mono svelte-1q74f52" readonly=""/>`),cn=n(`<span class="password-value password-value--mono svelte-1q74f52" aria-label="Sign-in password"> </span>`),ln=n(`<span class="password-value password-value--dots svelte-1q74f52" aria-label="Sign-in password">••••••••••••••••</span>`),un=i(`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 2l12 12"></path><path d="M6.7 6.8A3 3 0 009.3 9.2M4 4.5C2.5 5.7 1.5 7 1 8c1 2.5 3.8 5 7 5a8.4 8.4 0 003-.6M7 3.1A8.4 8.4 0 018 3c3.2 0 6 2.5 7 5-.4 1-.9 1.9-1.7 2.7"></path></svg>`),dn=i(`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M1 8s2.5-5 7-5 7 5 7 5-2.5 5-7 5-7-5-7-5z"></path><circle cx="8" cy="8" r="2"></circle></svg>`),fn=i(`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 8l4 4 8-8"></path></svg>`),pn=i(`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="5" width="8" height="8" rx="1.5"></rect><path d="M3 11V3h8"></path></svg>`),mn=n(`<div class="password-block svelte-1q74f52"><p class="password-label svelte-1q74f52">Sign-in password</p> <div class="password-row svelte-1q74f52"><!> <div class="password-actions svelte-1q74f52"><button type="button" class="btn-icon svelte-1q74f52"><!></button> <button type="button" title="Copy"><!></button></div></div> <p class="password-note svelte-1q74f52">Already saved on this computer — keep a copy somewhere safe just in case.</p></div>`),hn=n(`<div class="password-block svelte-1q74f52"><p class="password-label svelte-1q74f52">Sign-in password</p> <div class="password-row svelte-1q74f52"><span class="password-value password-value--dots svelte-1q74f52" aria-label="Sign-in password">••••••••</span> <div class="password-actions svelte-1q74f52"><span class="rerun-note svelte-1q74f52">Previously set — not changed.</span></div></div></div>`),gn=n(`<div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true"><!></span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">AI</div> <div class="summary-val svelte-1q74f52"> </div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div>`),_n=n(`<div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true"><!></span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">AI</div> <div class="summary-val svelte-1q74f52"> </div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div>`),vn=n(`<div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true"><!></span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">AI</div> <div class="summary-val svelte-1q74f52">Runs on this computer</div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div>`),yn=n(`<div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true"><!></span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">AI</div> <div class="summary-val svelte-1q74f52"> </div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div>`),bn=n(`<div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true"><!></span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">Voice</div> <div class="summary-val svelte-1q74f52">On — built-in voice</div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div>`),xn=n(`<div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true"> </span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">Chat app</div> <div class="summary-val svelte-1q74f52"> </div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div>`),Sn=n(`<div class="review-warning svelte-1q74f52" role="alert">⚠ System check has not passed yet — Install is disabled until Docker is confirmed available.</div>`),Cn=n(`<!> <!> <div id="network-access-section"><!></div> <div class="summary-list svelte-1q74f52" aria-label="What's set up"><p class="summary-section-label svelte-1q74f52">What's being set up</p> <!> <!> <div class="summary-row svelte-1q74f52"><span class="summary-icon svelte-1q74f52" aria-hidden="true"><!></span> <div class="summary-body svelte-1q74f52"><div class="summary-key svelte-1q74f52">Network access</div> <div class="summary-val svelte-1q74f52"> </div></div> <button type="button" class="btn-change svelte-1q74f52">Change</button></div> <!></div> <!> <!> <div class="review-save-row svelte-1q74f52"><button type="button" class="btn-save svelte-1q74f52" aria-label="Save configuration as JSON file">Save configuration</button></div>`,1);function wn(t,n){x(n,!0);let r=He,i=b(()=>r.uiLoginPassword),c=b(()=>r.verifiedProviders),p=b(()=>r.modelSelection),m=b(()=>r.voiceEnabled?r.displayedVoiceTts.engine:``),E=b(()=>r.voiceEnabled?r.displayedVoiceStt.engine:``),D=b(()=>r.portalSelection),O=b(()=>r.ollamaEnabled),A=b(()=>r.detectedHostProviders.length>0?r.detectedHostProviders[0].provider:``),M=b(()=>r.payload),P=b(()=>r.installError),I=b(()=>r.isRerun),L=b(()=>r.systemCheckPassed),R=()=>r.goToStep(1),z=()=>r.goToStep(2),B=b(()=>r.networkPreset),V=b(()=>u(B)?G[u(B)]:`Custom (kept as-is)`),ee=()=>{document.getElementById(`network-access-section`)?.scrollIntoView({behavior:`smooth`,block:`start`})};function K(e,t){return me(u(D),e,t)}let q=b(()=>{let e=u(p).llm?.connId;return e?ie(e,{localLabel:`Runs on this computer`}):``}),J=b(()=>!!(u(m)&&!u(m).startsWith(`skip-`))||!!(u(E)&&!u(E).startsWith(`skip-`))),te=b(()=>oe.filter(e=>!e.locked&&K(e.id,e.locked))),Y=N(!1),X=N(!1),ne=N(!1),Z=N(null);async function re(){try{if(navigator.clipboard?.writeText){await navigator.clipboard.writeText(u(i)),v(X,!0),setTimeout(()=>{v(X,!1)},2e3);return}throw Error(`Clipboard API unavailable`)}catch{v(ne,!0),u(Z)&&(u(Z).focus(),u(Z).select())}}function ae(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)}var se=Cn(),ce=w(se),le=e=>{s(e,on())};a(ce,e=>{u(c).length===0&&e(le)});var ue=h(ce,2),de=t=>{var n=mn(),r=h(j(n),2),c=j(r),p=e=>{var t=sn();y(t),_(t,e=>v(Z,e),()=>u(Z)),f(()=>{k(t,`type`,u(Y)?`text`:`password`),S(t,u(i))}),d(`focus`,t,e=>e.currentTarget.select()),s(e,t)},m=e=>{var t=cn(),n=j(t,!0);l(t),f(()=>o(n,u(i))),s(e,t)},b=e=>{s(e,ln())};a(c,e=>{u(ne)?e(p):u(Y)?e(m,1):e(b,-1)});var x=h(c,2),C=j(x),w=j(C),T=e=>{s(e,un())},E=e=>{s(e,dn())};a(w,e=>{u(Y)?e(T):e(E,-1)}),l(C);var D=h(C,2);let O;var A=j(D),M=e=>{s(e,fn())},N=e=>{s(e,pn())};a(A,e=>{u(X)?e(M):e(N,-1)}),l(D),l(x),l(r),F(2),l(n),f(()=>{k(C,`aria-label`,u(Y)?`Hide password`:`Show password`),k(C,`title`,u(Y)?`Hide`:`Show`),O=g(D,1,`btn-icon svelte-1q74f52`,null,O,{"btn-icon--copied":u(X)}),k(D,`aria-label`,u(X)?`Copied!`:`Copy password`)}),e(`click`,C,()=>{v(Y,!u(Y))}),e(`click`,D,()=>void re()),s(t,n)},fe=e=>{s(e,hn())};a(ue,e=>{u(I)?e(fe,-1):e(de)});var pe=h(ue,2);an(j(pe),{}),l(pe);var he=h(pe,2),ge=h(j(he),2),_e=t=>{var n=gn(),r=j(n);U(j(r),{size:16}),l(r);var i=h(r,2),a=h(j(i),2),c=j(a,!0);l(a),l(i);var d=h(i,2);l(n),f(()=>o(c,u(q))),e(`click`,d,R),s(t,n)},ve=t=>{var n=_n(),r=j(n);U(j(r),{size:16}),l(r);var i=h(r,2),a=h(j(i),2),d=j(a,!0);l(a),l(i);var p=h(i,2);l(n),f(e=>o(d,e),[()=>ie(u(c)[0].id)]),e(`click`,p,R),s(t,n)},ye=t=>{var n=vn(),r=j(n);U(j(r),{size:16}),l(r);var i=h(r,4);l(n),e(`click`,i,R),s(t,n)},be=t=>{var n=yn(),r=j(n);U(j(r),{size:16}),l(r);var i=h(r,2),a=h(j(i),2),c=j(a,!0);l(a),l(i);var d=h(i,2);l(n),f(e=>o(c,e),[()=>ie(u(A))]),e(`click`,d,R),s(t,n)};a(ge,e=>{u(q)?e(_e):u(c).length>0?e(ve,1):u(O)?e(ye,2):u(A)&&e(be,3)});var xe=h(ge,2),Se=t=>{var n=bn(),r=j(n);H(j(r),{size:16}),l(r);var i=h(r,4);l(n),e(`click`,i,z),s(t,n)};a(xe,e=>{u(J)&&e(Se)});var Ce=h(xe,2),we=j(Ce);W(j(we),{size:16}),l(we);var Q=h(we,2),Te=h(j(Q),2),Ee=j(Te,!0);l(Te),l(Q);var De=h(Q,2);l(Ce),T(h(Ce,2),17,()=>u(te),e=>e.id,(t,n)=>{var r=xn(),i=j(r),a=j(i,!0);l(i);var c=h(i,2),d=h(j(c),2),p=j(d,!0);l(d),l(c);var m=h(c,2);l(r),f(()=>{o(a,u(n).icon),o(p,u(n).name)}),e(`click`,m,z),s(t,r)}),l(he);var Oe=h(he,2),ke=e=>{{let t=b(()=>et(u(P),`setup-complete`));Ye(e,{get error(){return u(t)}})}};a(Oe,e=>{u(P)&&e(ke)});var Ae=h(Oe,2),je=e=>{s(e,Sn())};a(Ae,e=>{u(L)||e(je)});var Me=h(Ae,2),Ne=j(Me);l(Me),f(()=>o(Ee,u(V))),e(`click`,De,ee),e(`click`,Ne,()=>ae(u(M))),s(t,se),C()}L([`click`]);var Tn=n(`<span class="deploy-check"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--s-moss)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg></span>`),En=n(`<span class="deploy-warning"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--s-ink-2)" 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>`),Dn=n(`<span class="deploy-spinner"><!></span>`),On=n(`<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>`),kn=n(`<div id="deploy-failure"><!></div>`),An=n(`<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),jn=n(`<li>Container images are being downloaded for the first time.</li>`),Mn=n(`<li>You can leave this window — we'll let you know when it's ready.</li>`),Nn=n(`<li><strong>Keep this tab open while installation runs.</strong></li>`),Pn=n(`<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>`),Fn=n(`<p class="done-subtitle">Configuration saved. Run 'openpalm start' to start services.</p>`),In=n(`<div class="deploy-warnings-note svelte-1orw49v" role="status" id="deploy-warnings-note"> </div>`),Ln=n(`<div class="feedback feedback--warning" role="status" id="deploy-image-warning" style="margin-top:12px"><span> </span></div>`),Rn=n(`<p class="done-close-hint svelte-1orw49v">Setup is complete. You can safely close this tab now.</p>`),zn=n(`<span class="deploy-svc-name"> </span> <a target="_blank" rel="noopener" class="deploy-svc-link"> </a> <span class="deploy-svc-status"> </span>`,1),Bn=n(`<span class="deploy-svc-name"> </span> <span class="deploy-svc-status"> </span>`,1),Vn=n(`<li><!></li>`),Hn=n(`<p class="done-subtitle"> </p> <!> <!> <!> <ul class="service-list" id="deploy-service-list"></ul> <div class="done-links"><a class="btn btn-primary">Open Chat</a> <a target="_blank" rel="noopener" class="btn btn-secondary">OpenCode UI</a> <a class="btn btn-secondary">Admin Dashboard</a></div>`,1),Un=n(`<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(--s-moss)" 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>`),Wn=n(`<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>`),Gn=n(`<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 Kn(t,n){x(n,!0);let r=m(n,`deployHasWarnings`,3,!1),i=b(()=>(n.deployData.deployStatus??[]).filter(e=>e.status===`warning`)),d=typeof window<`u`&&!!window.openpalm,p=typeof window<`u`&&Number(window.location.port)||3880,_=b(()=>n.deployData.ports?.admin??p),v=b(()=>n.deployData.ports?.assistant??3800),y=b(()=>({assistant:{port:u(v),label:`Assistant (OpenCode)`,path:``},admin:{port:u(_),label:`Admin Dashboard`,path:`/host`}})),S=b(()=>n.deployData.deployStatus??[]),E=b(()=>u(S).length),D=b(()=>u(S).filter(e=>e.status===`running`).length),O=b(()=>u(E)>0?Math.round(u(D)/u(E)*100):0),A=b(()=>n.deployData.phase??`writing-config`),M=b(()=>u(S).some(e=>/^voice(-cuda|-rocm)?$/.test(e.service??``))),N=b(()=>{if(n.deployDone)return r()?`Setup Complete (with warnings)`:`Setup Complete`;if(n.deployError)return`Deployment Issue`;switch(u(A)){case`writing-config`:return`Preparing Configuration…`;case`pulling-images`:return u(M)?`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…`}),P=b(()=>{if(n.deployDone)return r()?`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(n.deployError)return`Setup could not finish starting the stack.`;switch(u(A)){case`writing-config`:return`Writing config files and validating settings.`;case`pulling-images`:return u(M)?`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`${u(D)} of ${u(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.`}),L=b(()=>n.deployDone&&u(S).length===0);var z=Gn(),B=w(z),H=j(B),ee=j(H,!0);l(H);var U=h(H,2),W=j(U,!0);l(U),l(B);var G=h(B,2),K=j(G),q=h(j(K),2),J=j(q),te=e=>{s(e,c(`Error`))},Y=e=>{var t=c();f(()=>o(t,u(S).length>0?`100%`:``)),s(e,t)},X=e=>{var t=c();f(()=>o(t,`${u(O)??``}%`)),s(e,t)};a(J,e=>{n.deployError?e(te):n.deployDone?e(Y,1):e(X,-1)}),l(q),l(K);var ne=h(K,2),Z=j(ne);l(ne),l(G);var re=h(G,2);T(re,21,()=>u(S),e=>e.service,(e,t)=>{var n=On(),r=j(n),i=j(r),c=e=>{s(e,Tn())},d=e=>{s(e,En())},p=e=>{var t=Dn();V(j(t),{}),l(t),s(e,t)};a(i,e=>{u(t).status===`running`?e(c):u(t).status===`error`||u(t).status===`warning`?e(d,1):e(p,-1)}),l(r);var m=h(r,2),_=j(m),v=j(_,!0);l(_);var y=h(_,2),b=j(y,!0);l(y),l(m);var x=h(m,2),S=j(x);l(x),l(n),f(()=>{o(v,u(t).service||u(t).label||``),o(b,u(t).label||u(t).status),g(S,1,`deploy-bar-fill ${u(t).status===`running`?`complete`:u(t).status===`ready`?`ready`:u(t).status===`warning`?`warning`:u(t).status===`error`?`stopped`:`indeterminate`}`,`svelte-1orw49v`)}),s(e,n)}),l(re);var ie=h(re,2),ae=e=>{var t=kn(),r=j(t);{let e=b(()=>et(n.deployError,`deploy`));Ye(r,{get error(){return u(e)}})}l(t),s(e,t)};a(ie,e=>{n.deployError&&e(ae)});var oe=h(ie,2),se=e=>{var t=Pn(),n=j(t),r=h(j(n),2),i=j(r,!0);l(r),l(n);var c=h(n,2),p=j(c),m=e=>{var t=An();F(2),s(e,t)},g=e=>{s(e,jn())};a(p,e=>{u(M)?e(m):e(g,-1)});var _=h(p,4),v=e=>{s(e,Mn())},y=e=>{s(e,Nn())};a(_,e=>{d?e(v):e(y,-1)}),l(c),l(t),f(()=>o(i,u(M)?`First install may take 10–30 minutes`:`First startup takes a few minutes`)),s(e,t)};a(oe,e=>{!n.deployDone&&!n.deployError&&e(se)});var ce=h(oe,2),le=e=>{var t=Un(),c=h(j(t),2),p=j(c,!0);l(c);var m=h(c,2),g=e=>{s(e,Fn())},_=e=>{var t=Hn(),c=w(t),p=j(c,!0);l(c);var m=h(c,2),g=e=>{var t=In(),n=j(t);l(t),f(e=>o(n,`Still warming up: ${e??``}. You can finish setup now — these will be ready shortly.`),[()=>u(i).map(e=>e.label||e.service).join(`, `)]),s(e,t)};a(m,e=>{r()&&u(i).length>0&&e(g)});var _=h(m,2),x=e=>{var t=Ln(),r=j(t),i=j(r);l(r),l(t),f(()=>o(i,`⚠ ${n.deployData.imageWarning??``}`)),s(e,t)};a(_,e=>{n.deployData.imageWarning&&e(x)});var C=h(_,2),E=e=>{s(e,Rn())};a(C,e=>{d||e(E)});var D=h(C,2);T(D,21,()=>u(S),e=>e.service,(e,t)=>{let n=b(()=>u(t).service||u(t).label||``),r=b(()=>u(y)[u(n)]),i=b(()=>u(t).status===`warning`);var c=Vn(),d=j(c),p=e=>{let n=b(()=>`http://127.0.0.1:`+u(r).port+u(r).path);var a=zn(),c=w(a),d=j(c,!0);l(c);var p=h(c,2),m=j(p,!0);l(p);var g=h(p,2),_=j(g,!0);l(g),f(()=>{o(d,u(r).label),k(p,`href`,u(n)),o(m,u(n)),o(_,u(i)?u(t).label||`⚠ Warming up`:`✓ Running`)}),s(e,a)},m=e=>{var r=Bn(),a=w(r),c=j(a,!0);l(a);var d=h(a,2),p=j(d,!0);l(d),f(()=>{o(c,u(n)),o(p,u(i)?u(t).label||`⚠ Warming up`:`✓ Running`)}),s(e,r)};a(d,e=>{u(r)?e(p):e(m,-1)}),l(c),s(e,c)}),l(D);var O=h(D,2),A=j(O),M=h(A,2),N=h(M,2);l(O),f((e,t)=>{o(p,r()?`Setup is complete. Some services are still warming up in the background.`:`Your OpenPalm stack is up and running.`),k(A,`href`,e),k(M,`href`,`http://127.0.0.1:${u(v)??``}`),k(N,`href`,t)},[()=>R(`/chat`),()=>R(`/host`)]),s(e,t)};a(m,e=>{u(L)?e(g):e(_,-1)}),l(t),f(()=>o(p,r()?`Setup Complete (with warnings)`:`Setup Complete`)),s(e,t)};a(ce,e=>{n.deployDone&&e(le)});var ue=h(ce,2),de=t=>{var r=Wn(),i=j(r),a=h(i,2);l(r),e(`click`,i,function(...e){n.onback?.apply(this,e)}),e(`click`,a,function(...e){n.onretry?.apply(this,e)}),s(t,r)};a(ue,e=>{n.deployError&&e(de)}),f(()=>{o(ee,u(N)),o(W,u(P)),g(q,1,`deploy-progress-value ${n.deployError?`deploy-progress-value--error`:``}`),I(Z,`width:${(n.deployDone&&u(S).length>0?100:n.deployDone?0:u(O))??``}%`)}),s(t,z),C()}L([`click`]);var qn=n(`<div class="rerun-banner"><span>Updating existing installation</span> <a class="rerun-back-link">← Back to Admin</a></div>`),Jn=n(`<div style="display:none" aria-hidden="true"><section class="step-content step-content--hidden" id="step-0" data-testid="step-system-check"><!></section></div>`),Yn=n(`<div style="flex:1; padding: 32px; overflow-y: auto;"><!></div>`),Xn=i(`<svg viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><path d="M2 6l3 3 5-5"></path></svg>`),Zn=n(`<span class="wiz-tick-num"> </span>`),Qn=n(`<div><!> </div>`),$n=n(`Connect your <span class="accent">AI brain</span>`,1),er=n(`Optional <span class="accent">extras</span>`,1),tr=n(`You're all <span class="accent">set</span>`,1),nr=n(`<div class="feedback feedback--warning" role="alert" data-testid="recommendation-alert"><span> </span></div>`),rr=n(`<div class="feedback feedback--error" role="alert" data-testid="host-import-error"><span> </span></div>`),ir=n(`<section class="step-content" id="step-1"><!></section>`),ar=n(`<section class="step-content" id="step-2"><!></section>`),or=n(`<section class="step-content" id="step-3" data-testid="step-review"><!></section>`),sr=n(`<button class="btn btn-secondary" aria-label="Back">Back</button>`),cr=n(`<div></div>`),lr=n(`<button class="btn btn-primary" id="btn-screen1-next"><!></button>`),ur=n(`<button class="btn btn-primary" id="btn-screen2-next">Continue</button>`),dr=n(`<button class="btn btn-primary" id="btn-install"><!></button>`),fr=n(`We found an AI account on this computer. Just hit <strong>Continue</strong> and your assistant will use it automatically.`,1),pr=n(`You're ready. Click <strong>Install OpenPalm</strong> and it'll start up in the background. The first launch pulls a few files — this takes a minute or two. When it's done, open your browser, sign in with that password, and you're good to go. Everything can be changed later from the dashboard.`,1),mr=n(`<div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M9 12l2 2 4-4"></path><circle cx="12" cy="12" r="9"></circle></svg></div> <div>Your existing connection is ready to use. No extra setup needed — just continue to the next step.</div></div> <div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M12 3l1.5 4.5H18l-3.75 2.7 1.5 4.5L12 12l-3.75 2.7 1.5-4.5L6 7.5h4.5z"></path></svg></div> <div>Want to use something different? Select another option from the list — you can switch any time from the dashboard.</div></div>`,1),hr=n(`<div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><circle cx="12" cy="8" r="4"></circle><path d="M4 20c0-4 3.6-7 8-7s8 3 8 7"></path></svg></div> <div><strong>Cloud services</strong> like ChatGPT are fast and easy — you just sign in.</div></div> <div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><rect x="3" y="4" width="18" height="12" rx="2"></rect><path d="M8 20h8M12 16v4"></path></svg></div> <div><strong>Running locally</strong> keeps everything on your computer — private, free, no internet needed.</div></div>`,1),gr=n(`<div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><rect x="9" y="3" width="6" height="11" rx="3"></rect><path d="M5 11a7 7 0 0014 0M12 18v3"></path></svg></div> <div>Voice runs locally — free, no internet needed. A small model downloads the first time you use it.</div></div> <div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><circle cx="12" cy="12" r="9"></circle><path d="M12 8v4l3 3"></path></svg></div> <div>Setup help: <a href="https://discord.com/developers/docs/quick-start/getting-started" target="_blank" rel="noopener">How to set up a Discord bot →</a></div></div> <div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M3 12h18M3 6h18M3 18h18"></path></svg></div> <div><a href="https://api.slack.com/quickstart" target="_blank" rel="noopener">How to set up a Slack app →</a></div></div>`,1),_r=n(`<div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><rect x="3" y="11" width="18" height="10" rx="2"></rect><path d="M7 11V7a5 5 0 0110 0v4"></path></svg></div> <div>Your sign-in password is already saved on this computer — keep a copy somewhere safe just in case.</div></div> <div class="wiz-bullet"><div class="wiz-bullet-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M9 12l2 2 4-4"></path><circle cx="12" cy="12" r="9"></circle></svg></div> <div>Everything can be changed from the dashboard after install — providers, voice, portals, and more.</div></div>`,1),vr=n(`<header class="wiz-topbar"><div class="wiz-wordmark"><!> <b>OpenPalm</b><span>setup</span></div> <nav class="wiz-ticker" aria-label="Setup steps"></nav></header> <div class="wiz-stage"><div class="wiz-content"><div class="wiz-content-scroll"><div class="wiz-eyebrow"><!></div> <h1 class="wiz-title"><!></h1> <p class="wiz-lede"><!></p> <!> <!> <!></div> <footer class="wiz-footer"><div class="wiz-footer-left"><!></div> <div class="wiz-footer-right"><!></div></footer></div> <aside class="wiz-aside" aria-label="Setup guide"><div class="wiz-aside-top"><img class="wiz-mascot" src="/wizard-128.png" alt="OpenPalm setup guide"/> <div><b class="wiz-greet-name"><!></b> <span class="wiz-greet-sub"><!></span></div></div> <p class="wiz-guide-lede"><!></p> <div class="wiz-guide-bullets"><!></div> <div class="wiz-guide-privacy"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M8 1.5L2 4v4c0 3.3 2.5 5.8 6 6.5 3.5-.7 6-3.2 6-6.5V4L8 1.5z"></path></svg> <span>It's your own assistant, running right here on your computer.</span></div></aside></div>`,1),yr=n(`<main class="setup-page" aria-label="Setup wizard"><!> <!> <!></main>`);function br(n,r){x(r,!1);let i=He;A(()=>(i.init(),()=>i.dispose())),D();var d=yr();P(`g40i6i`,e=>{p(()=>{M.title=`OpenPalm Setup`})});var m=j(d),_=e=>{var t=qn(),n=h(j(t),2);l(t),f(e=>k(n,`href`,e),[()=>R(`/`)]),s(e,t)};a(m,e=>{i.isRerun&&e(_)});var v=h(m,2),y=e=>{var t=Jn(),n=j(t);pt(j(n),{}),l(n),l(t),s(e,t)};a(v,e=>{i.currentStep===0&&!i.showDeploy&&e(y)});var S=h(v,2),E=e=>{var t=Yn();Kn(j(t),{get deployData(){return i.deployData},get deployDone(){return i.deployDone},get deployHasWarnings(){return i.deployHasWarnings},get deployError(){return i.deployError},onback:()=>i.handleDeployBack(),onretry:()=>void i.handleDeployRetry()}),l(t),s(e,t)},O=n=>{var r=vr(),d=w(r),p=j(d);z(j(p),{size:30}),F(3),l(p);var m=h(p,2);T(m,4,()=>[{n:1,label:`Connect`},{n:2,label:`Add-ons`},{n:3,label:`Finish`}],e=>e.n,(e,t)=>{var n=Qn();let r;var c=j(n),u=e=>{s(e,Xn())},d=e=>{var n=Zn(),r=j(n,!0);l(n),f(()=>o(r,t.n)),s(e,n)};a(c,e=>{i.currentStep>t.n?e(u):e(d,-1)});var p=h(c);l(n),f(()=>{r=g(n,1,`wiz-tick`,null,r,{"wiz-tick--active":i.currentStep===t.n,"wiz-tick--done":i.currentStep>t.n}),k(n,`aria-current`,i.currentStep===t.n?`step`:void 0),o(p,` ${t.label??``}`)}),s(e,n)}),l(m),l(d);var _=h(d,2),v=j(_),y=j(v),x=j(y),S=j(x),C=e=>{s(e,c(`STEP 1 · Connect`))},E=e=>{s(e,c(`STEP 2 · Add-ons`))},D=e=>{s(e,c(`STEP 3 · Finish`))};a(S,e=>{i.currentStep===1?e(C):i.currentStep===2?e(E,1):i.currentStep===3&&e(D,2)}),l(x);var O=h(x,2),A=j(O),M=e=>{var t=$n();F(),s(e,t)},N=e=>{var t=er();F(),s(e,t)},P=e=>{var t=tr();F(),s(e,t)};a(A,e=>{i.currentStep===1?e(M):i.currentStep===2?e(N,1):i.currentStep===3&&e(P,2)}),l(O);var I=h(O,2),L=j(I),R=e=>{var n=t(),r=w(n),o=e=>{s(e,c(`We found an AI service already set up. Just continue, or choose something different.`))},l=e=>{s(e,c(`Your assistant needs a source of intelligence. Pick one and you're set — you can add more later.`))};a(r,e=>{i.hasUsableAI?e(o):e(l,-1)}),s(e,n)},B=e=>{s(e,c(`All optional — turn on only what you want now. You can add or remove anything later from your dashboard.`))},V=e=>{s(e,c(`OpenPalm is ready to install. Save the password you'll use to sign in.`))};a(L,e=>{i.currentStep===1?e(R):i.currentStep===2?e(B,1):i.currentStep===3&&e(V,2)}),l(I);var H=h(I,2),ee=e=>{var t=nr(),n=j(t),r=j(n,!0);l(n),l(t),f(()=>o(r,i.recommendationAlert)),s(e,t)};a(H,e=>{i.recommendationAlert&&i.currentStep===1&&e(ee)});var U=h(H,2),W=e=>{var t=rr(),n=j(t),r=j(n,!0);l(n),l(t),f(()=>o(r,i.hostImportError)),s(e,t)};a(U,e=>{i.hostImportError&&i.currentStep===1&&e(W)});var G=h(U,2),K=e=>{var t=ir();Jt(j(t),{}),l(t),s(e,t)},q=e=>{var t=ar();Qt(j(t),{}),l(t),s(e,t)},J=e=>{var t=or();wn(j(t),{}),l(t),s(e,t)};a(G,e=>{i.currentStep===1?e(K):i.currentStep===2?e(q,1):i.currentStep===3&&e(J,2)}),l(y);var te=h(y,2),Y=j(te),X=j(Y),ne=t=>{var n=sr();e(`click`,n,()=>i.goToStep(i.currentStep-1)),s(t,n)},re=e=>{s(e,cr())};a(X,e=>{i.currentStep>1?e(ne):e(re,-1)}),l(Y);var ae=h(Y,2),oe=j(ae),se=t=>{var n=lr(),r=j(n),d=e=>{var t=c();f(e=>o(t,`Use ${e??``} — Continue`),[()=>ie(i.modelSelection.llm.connId,{extraProviders:i.opencodeProviders})]),s(e,t)},p=b(()=>i.modelSelection.llm?.connId&&!Z.has(i.modelSelection.llm.connId)),m=e=>{s(e,c(`Use local AI — Continue`))},h=b(()=>i.ollamaEnabled||i.detectedHostProviders.length>0||i.modelSelection.llm?.connId&&Z.has(i.modelSelection.llm.connId)),g=e=>{s(e,c(`Continue`))};a(r,e=>{u(p)?e(d):u(h)?e(m,1):e(g,-1)}),l(n),f(()=>n.disabled=!i.canComplete),e(`click`,n,()=>i.goToStep(2)),s(t,n)},ce=t=>{var n=ur();e(`click`,n,()=>i.goToStep(3)),s(t,n)},le=t=>{var n=dr(),r=j(n),u=e=>{s(e,c(`Installing...`))},d=e=>{var t=c();f(()=>o(t,i.isRerun?`Update`:`Install`)),s(e,t)};a(r,e=>{i.installing?e(u):e(d,-1)}),l(n),f(()=>n.disabled=!i.canComplete||i.installing),e(`click`,n,()=>void i.handleInstall()),s(t,n)};a(oe,e=>{i.currentStep===1?e(se):i.currentStep===2?e(ce,1):i.currentStep===3&&e(le,2)}),l(ae),l(te),l(v);var ue=h(v,2),de=j(ue),fe=h(j(de),2),pe=j(fe),me=j(pe),he=e=>{var n=t(),r=w(n),o=e=>{s(e,c(`You're almost done!`))},l=e=>{s(e,c(`Great choice.`))},u=e=>{s(e,c(`Pick what works for you.`))};a(r,e=>{i.hasUsableAI?e(o):i.modelMode===`local`||i.ollamaEnabled||i.detectedHostProviders.length>0?e(l,1):e(u,-1)}),s(e,n)},ge=e=>{s(e,c(`While you're here…`))},_e=e=>{s(e,c(`You're ready.`))};a(me,e=>{i.currentStep===1?e(he):i.currentStep===2?e(ge,1):i.currentStep===3&&e(_e,2)}),l(pe);var ve=h(pe,2),ye=j(ve),be=e=>{s(e,c(`Your setup guide`))},xe=e=>{s(e,c(`A few optional extras`))},Se=e=>{s(e,c(`Everything's in order`))};a(ye,e=>{i.currentStep===1?e(be):i.currentStep===2?e(xe,1):i.currentStep===3&&e(Se,2)}),l(ve),l(fe),l(de);var Ce=h(de,2),we=j(Ce),Q=e=>{var n=t(),r=w(n),o=e=>{var t=fr();F(2),s(e,t)},l=e=>{s(e,c(`Running AI locally means your conversations never leave your machine. Perfect for privacy.`))},u=e=>{s(e,c(`Sign in once and you're set. A browser tab will open for you to log in — come back here when you're done, it connects automatically.`))};a(r,e=>{i.hasUsableAI?e(o):i.modelMode===`local`||i.ollamaEnabled||i.detectedHostProviders.length>0?e(l,1):e(u,-1)}),s(e,n)},Te=e=>{s(e,c(`All of this is optional. Skip this whole step if you want — your assistant works fine without any of these. You can turn them on whenever you're ready from the dashboard.`))},Ee=e=>{var t=pr();F(2),s(e,t)};a(we,e=>{i.currentStep===1?e(Q):i.currentStep===2?e(Te,1):i.currentStep===3&&e(Ee,2)}),l(Ce);var De=h(Ce,2),Oe=j(De),ke=e=>{var n=t(),r=w(n),o=e=>{var t=mr();F(2),s(e,t)},c=e=>{var t=hr();F(2),s(e,t)};a(r,e=>{i.hasUsableAI?e(o):e(c,-1)}),s(e,n)},Ae=e=>{var t=gr();F(4),s(e,t)},je=e=>{var t=_r();F(2),s(e,t)};a(Oe,e=>{i.currentStep===1?e(ke):i.currentStep===2?e(Ae,1):i.currentStep===3&&e(je,2)}),l(De),F(2),l(ue),l(_),s(n,r)};a(S,e=>{i.showDeploy?e(E):i.currentStep>=1&&e(O,1)}),l(d),s(n,d),C()}L([`click`]);export{br as component};
@@ -1 +0,0 @@
1
- import{B as e,F as t,I as n,M as r,N as i,P as a,St as o,U as s,X as c,Y as l,at as u,ct as d,dt as f,ft as p,gt as m,ht as h,it as g,j as _,k as ee,p as v,r as y,rt as b,tt as x,ut as S,w as C,z as w}from"../chunks/DTLQuSQp.js";import{t as T,u as E}from"../chunks/BE_4J5sS.js";import"../chunks/xihTtKlq.js";import{K as D,W as O,d as k,u as A}from"../chunks/DaRQZQEK.js";import{t as j}from"../chunks/BdIq5WIo.js";import"../chunks/DF5Aoa59.js";import{t as M}from"../chunks/D1VTYdXF.js";import{c as te,f as N}from"../chunks/CuKFR3Qo.js";import{t as ne}from"../chunks/C6rMFkms.js";import{n as re,r as ie,t as ae}from"../chunks/mNzUu332.js";var oe=n(`<iframe class="opencode-frame svelte-1z0msvj" title="OpenCode — Advanced Chat" allow="clipboard-read; clipboard-write; microphone"></iframe>`),se=n(`<p class="native-status svelte-1z0msvj" role="status">Loading conversation…</p>`),ce=n(`<p class="native-status svelte-1z0msvj" role="status"> </p>`),le=n(`<div class="native-pending svelte-1z0msvj"> </div>`),P=n(`<div class="alert error svelte-1z0msvj" role="alert"> </div>`),F=n(`<section class="native-chat svelte-1z0msvj"><div class="native-scroll svelte-1z0msvj"><!> <!> <!> <!> <!></div> <!> <!></section>`),I=n(`<p class="status-line svelte-1z0msvj"> </p>`),L=n(`<h2 class="svelte-1z0msvj"> </h2> <p class="svelte-1z0msvj">The connection looks dead or its session expired. Reconnect to try again, or pick a different assistant from the switcher above.</p> <button class="btn btn-primary btn-lg svelte-1z0msvj"> </button> <a class="btn btn-secondary btn-lg svelte-1z0msvj">Manage connection</a>`,1),R=n(`<div class="advanced-status svelte-1z0msvj" aria-live="polite"><!></div>`),z=n(`<!> <div class="advanced-layout svelte-1z0msvj"><!></div>`,1);function B(n,w){m(w,!0);let B=p(()=>A.active),V=p(()=>j.url.searchParams.get(`session`)),H=S(`checking`),U=S(``),W=S(!1),G=S(0),K=0;function ue(e){if(e.hasPassword)return!1;try{let t=new URL(e.baseUrl);return t.protocol!==`http:`&&t.protocol!==`https:`||t.username||t.password?!1:D(t.hostname)?!0:!(j.url.protocol===`https:`&&t.protocol===`http:`)}catch{return!1}}function q(e,t){return e===K&&A.active?.id===t}async function J(e=!1){let t=++K;d(H,`checking`),d(U,``);let n=A.active;if(!n){d(H,`dead`);return}if(!ue(n)){d(H,`native`),await N.onEndpointChanged(n.id),s(V)&&N.openSession(s(V));return}let r=n.id,i=n.baseUrl,a=s(V),o=await O().probeHealth();if(!q(t,r))return;if(o.status!==`accessible`){d(H,`dead`);return}let c=i;if(a)try{let e=await O().request(`GET`,`/session/${encodeURIComponent(a)}`);if(!q(t,r))return;let n=await e.json().catch(()=>null),o=n&&typeof n==`object`&&`directory`in n&&typeof n.directory==`string`&&n.directory.length>0?n.directory:null;o&&(c=te(i,a,o),N.alignActiveEndpoint(r),N.setActiveSessionId(a,r))}catch{}q(t,r)&&(d(U,c,!0),d(H,`iframe`),e&&f(G))}async function de(){if(!s(W)){d(W,!0);try{await A.load(!0),await J(!0)}finally{d(W,!1)}}}let Y=S(null);async function fe(e){await N.send(e)}async function X(e){d(Y,e,!0);try{await N.answerPermission(e)}finally{d(Y,null)}}y(()=>{document.documentElement.classList.add(`chat-locked`),document.body.classList.add(`chat-locked`);let e=k(()=>J());return()=>{e(),document.documentElement.classList.remove(`chat-locked`),document.body.classList.remove(`chat-locked`)}}),T(()=>{A.load().then(()=>J())});var Z=z();C(`1z0msvj`,e=>{l(()=>{x.title=`Advanced Chat — OpenPalm`})});var Q=g(Z);M(Q,{});var $=u(Q,2),pe=b($),me=e=>{var n=t();_(g(n),()=>s(G),e=>{var t=oe();c(()=>v(t,`src`,s(U))),a(e,t)}),a(e,n)},he=e=>{var t=F(),n=b(t),l=b(n),d=e=>{a(e,se())},f=e=>{var t=ce(),n=b(t);o(t),c(()=>i(n,`Start chatting with ${s(B)?.label??`your assistant`??``} below.`)),a(e,t)};r(l,e=>{N.entriesLoading?e(d):N.entries.length===0&&e(f,1)});var m=u(l,2);ee(m,17,()=>N.entries,e=>e.id,(e,t)=>{ne(e,{get entry(){return s(t)}})});var h=u(m,2),g=e=>{var t=le(),n=b(t,!0);o(t),c(()=>i(n,N.pendingAssistantText)),a(e,t)};r(h,e=>{N.pendingAssistantText&&e(g)});var _=u(h,2),y=e=>{re(e,{get permission(){return N.pendingPermission},get actionInFlight(){return s(Y)},onReply:X})};r(_,e=>{N.pendingPermission&&e(y)});var x=u(_,2),S=e=>{ae(e,{get question(){return N.pendingQuestion},onOption:e=>void N.answerQuestion(e),onSelect:(e,t)=>N.setQuestionAnswer(e,t),onDraft:(e,t)=>N.setQuestionAnswer(e,t),onSubmit:()=>void N.answerQuestion(),onReject:()=>void N.rejectQuestion()})};r(x,e=>{N.pendingQuestion&&e(S)}),o(n);var C=u(n,2),w=e=>{var t=P(),n=b(t,!0);o(t),c(()=>i(n,N.error)),a(e,t)};r(C,e=>{N.error&&e(w)});var T=u(C,2);{let e=p(()=>N.pendingQuestion?.status===`pending`);ie(T,{get sending(){return N.sending},get questionPending(){return s(e)},onSend:fe,onStop:()=>void N.stopTurn()})}o(t),c(()=>v(t,`aria-label`,`Chat with ${s(B)?.label??`your assistant`??``}`)),a(e,t)},ge=t=>{var n=R(),l=b(n),d=e=>{var t=I(),n=b(t);o(t),c(()=>i(n,`Connecting to ${s(B)?.label??`your assistant`??``}…`)),a(e,t)},f=t=>{var n=L(),r=g(n),l=b(r);o(r);var d=u(r,4),f=b(d,!0);o(d);var p=u(d,2);c(e=>{i(l,`Can’t reach ${s(B)?.label??`your assistant`??``}`),d.disabled=s(W),i(f,s(W)?`Reconnecting…`:`Reconnect`),v(p,`href`,e)},[()=>E(`/connections`)]),e(`click`,d,de),a(t,n)};r(l,e=>{s(H)===`checking`?e(d):e(f,-1)}),o(n),c(()=>v(n,`role`,s(H)===`dead`?`alert`:`status`)),a(t,n)};r(pe,e=>{s(H)===`iframe`?e(me):s(H)===`native`?e(he,1):e(ge,-1)}),o($),a(n,Z),h()}w([`click`]);export{B as component};