@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,6 +1,24 @@
1
1
  import { p as derived, d as attr, e as attr_class, a9 as stringify } from './dev-D85DamNs.js';
2
- import { r as randomId } from './voice-state.svelte-CSmyLPRH.js';
2
+ import { g as getConnectionStore, l as loadRuntimeConfig, s as setActiveConnection, i as isLoopbackHost, a as getTransport } from './voice-state.svelte-DU9g_xEh.js';
3
3
 
4
+ //#region ../ui-kit/src/lib/components/icons/IconThemeSystem.svelte
5
+ function IconThemeSystem($$renderer, $$props) {
6
+ let { size = 20, class: className = "" } = $$props;
7
+ $$renderer.push(`<svg xmlns="http://www.w3.org/2000/svg"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"${attr_class(`lucide lucide-sun-moon-icon lucide-sun-moon s-icon ${stringify(className)}`)}><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>`);
8
+ }
9
+ //#endregion
10
+ //#region ../ui-kit/src/lib/components/icons/IconThemeLight.svelte
11
+ function IconThemeLight($$renderer, $$props) {
12
+ let { size = 20, class: className = "" } = $$props;
13
+ $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"${attr_class(`s-icon ${stringify(className)}`)}><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>`);
14
+ }
15
+ //#endregion
16
+ //#region ../ui-kit/src/lib/components/icons/IconThemeDark.svelte
17
+ function IconThemeDark($$renderer, $$props) {
18
+ let { size = 20, class: className = "" } = $$props;
19
+ $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"${attr_class(`s-icon ${stringify(className)}`)}><path d="M21 12.8A9 9 0 1 1 11.2 3 7 7 0 0 0 21 12.8z"></path></svg>`);
20
+ }
21
+ //#endregion
4
22
  //#region src/lib/chat/tool-strip.ts
5
23
  function valueToText$1(value) {
6
24
  if (typeof value === "string") return value;
@@ -340,832 +358,6 @@ function flattenSessionMessages(rows) {
340
358
  return messages;
341
359
  }
342
360
  //#endregion
343
- //#region src/lib/connections/url-policy.ts
344
- /**
345
- * Browser-owned connection URL policy (Phase 3a — "One UI, delete the split").
346
- *
347
- * A leaf module with zero imports so both the direct transport
348
- * (`probeHealth()` short-circuit) and the connections form can consult it
349
- * without pulling in the IndexedDB store module. There is no guardian
350
- * `/oc`-appending helper — Guardian is a transparent OpenCode proxy now, so
351
- * the user provides the exact baseUrl and no path inference is performed.
352
- *
353
- * The ONLY refusal trigger: a plain-http, non-loopback connection URL is
354
- * refused iff the app itself runs on an https: origin. This is exactly the
355
- * platform mixed-content rule (an https origin cannot `fetch()` a plain-http
356
- * cross-origin target — the request would never leave the browser), not a
357
- * broader "https or non-loopback origin" check. Preserves:
358
- * - loopback TARGETS from any origin (mixed-content loopback exemption —
359
- * `http://127.0.0.1`/`localhost`/`::1` are "potentially trustworthy"),
360
- * - plain-http LAN targets from a loopback-origin client (the zero-TLS
361
- * desktop default — a `http://127.0.0.1` origin is a secure context),
362
- * - plain-http LAN targets from a non-loopback http ORIGIN (the LAN-served
363
- * tier: `rewriteLoopbackUrlForBrowserHost` in `./store.ts`).
364
- */
365
- /** Canonical deep link to the TLS integration guide. Pinned by a test that
366
- * the path segment names a real file, so a docs rename breaks CI instead of
367
- * shipping a dead link. */
368
- var TLS_GUIDE_URL = "https://github.com/itlackey/openpalm/blob/main/docs/remote-access-tls.md";
369
- function isLoopbackHost(hostname) {
370
- return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1" || hostname === "[::1]";
371
- }
372
- /** Remove legacy URL-embedded credentials before a URL reaches UI or storage. */
373
- function redactUrlUserinfo(rawUrl) {
374
- try {
375
- const url = new URL(rawUrl);
376
- url.username = "";
377
- url.password = "";
378
- return url.toString().replace(/\/$/, url.pathname === "/" && !rawUrl.endsWith("/") ? "" : "/");
379
- } catch {
380
- return rawUrl;
381
- }
382
- }
383
- /**
384
- * Refuse a plain-http non-loopback connection URL iff the app's own origin is
385
- * https: (mixed content — the request could never succeed, so refuse up front
386
- * with guidance instead of a generic fetch failure).
387
- *
388
- * `origin` defaults to `globalThis.location`; a null/undefined origin
389
- * (non-browser context — tests, SSR) always allows, since there is no browser
390
- * mixed-content policy to enforce there.
391
- */
392
- function validateConnectionUrl(rawUrl, origin = globalThis.location ?? null) {
393
- let url;
394
- try {
395
- url = new URL(rawUrl);
396
- } catch {
397
- return {
398
- ok: false,
399
- reason: "invalid-url",
400
- message: "Enter a valid URL."
401
- };
402
- }
403
- if (url.protocol !== "http:" && url.protocol !== "https:") return {
404
- ok: false,
405
- reason: "invalid-url",
406
- message: "The URL must use http:// or https://."
407
- };
408
- if (url.username || url.password) return {
409
- ok: false,
410
- reason: "userinfo-not-allowed",
411
- message: "Do not put credentials in the URL. Use the Authentication fields instead."
412
- };
413
- if (url.protocol === "https:") return { ok: true };
414
- if (isLoopbackHost(url.hostname)) return { ok: true };
415
- if (origin?.protocol !== "https:") return { ok: true };
416
- return {
417
- ok: false,
418
- reason: "insecure-remote",
419
- 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.",
420
- guideUrl: TLS_GUIDE_URL
421
- };
422
- }
423
- //#endregion
424
- //#region src/lib/connections/store.ts
425
- /**
426
- * Browser-owned connection store (Phase 3a — "One UI, delete the split").
427
- *
428
- * Connection records persist behind a storage abstraction so the same store
429
- * logic runs over IndexedDB in the browser (offline-readable) and over an
430
- * in-memory backend in tests. The store API is async throughout (IndexedDB is
431
- * async) and keeps NO state in store-instance fields — a page reload
432
- * constructs a new store over the same backend and must see identical state.
433
- *
434
- * Locked/default entries are seeded from a runtime-config.json fetched from
435
- * the app's own origin at boot. Absent file = no default connection.
436
- *
437
- * The Connection shape is `{ id, label, baseUrl, auth }` with auth narrowed to
438
- * none | basic (Guardian is a transparent OpenCode proxy — Basic is the only
439
- * connection credential model).
440
- */
441
- function rewriteLoopbackUrlForBrowserHost(rawUrl) {
442
- const locationLike = globalThis.location;
443
- const redactedUrl = redactUrlUserinfo(rawUrl);
444
- if (!locationLike || isLoopbackHost(locationLike.hostname)) return redactedUrl;
445
- try {
446
- const url = new URL(redactedUrl);
447
- if (!isLoopbackHost(url.hostname)) return redactedUrl;
448
- url.hostname = locationLike.hostname;
449
- return url.toString();
450
- } catch {
451
- return redactedUrl;
452
- }
453
- }
454
- function redactEntryUrl(entry) {
455
- const baseUrl = redactUrlUserinfo(entry.baseUrl);
456
- return baseUrl === entry.baseUrl ? entry : {
457
- ...entry,
458
- baseUrl
459
- };
460
- }
461
- function assertUrlHasNoUserinfo(rawUrl) {
462
- let url;
463
- try {
464
- url = new URL(rawUrl);
465
- } catch {
466
- return;
467
- }
468
- if (url.username || url.password) throw new Error("Credentials must use the Authentication fields, not the connection URL.");
469
- }
470
- function adaptRuntimeConfigForBrowser(config) {
471
- return { connections: config.connections.map((entry) => ({
472
- ...redactEntryUrl(entry),
473
- baseUrl: entry.locked ? rewriteLoopbackUrlForBrowserHost(entry.baseUrl) : redactUrlUserinfo(entry.baseUrl)
474
- })) };
475
- }
476
- var ACTIVE_ID_KEY = "activeId";
477
- function clone(value) {
478
- return structuredClone(value);
479
- }
480
- /** In-memory storage backend — same semantics as the IndexedDB one. */
481
- function createMemoryStorage() {
482
- const entries = /* @__PURE__ */ new Map();
483
- const meta = /* @__PURE__ */ new Map();
484
- let cryptoKey = null;
485
- return {
486
- async getAll() {
487
- return [...entries.values()].map(clone);
488
- },
489
- async get(id) {
490
- const entry = entries.get(id);
491
- return entry ? clone(entry) : null;
492
- },
493
- async put(entry) {
494
- entries.set(entry.id, clone(redactEntryUrl(entry)));
495
- },
496
- async delete(id) {
497
- entries.delete(id);
498
- },
499
- async getMeta(key) {
500
- return meta.get(key) ?? null;
501
- },
502
- async setMeta(key, value) {
503
- if (value === null) meta.delete(key);
504
- else meta.set(key, value);
505
- },
506
- async getCryptoKey() {
507
- return cryptoKey;
508
- },
509
- async setCryptoKey(key) {
510
- cryptoKey = key;
511
- }
512
- };
513
- }
514
- var IDB_NAME = "openpalm-ui-connections";
515
- var IDB_VERSION = 1;
516
- var STORE_CONNECTIONS = "connections";
517
- var STORE_META = "meta";
518
- var STORE_KEYS = "keys";
519
- var CRYPTO_KEY_ID = "secret-store-aes-gcm-key";
520
- function idbRequest(request) {
521
- return new Promise((resolve, reject) => {
522
- request.onsuccess = () => resolve(request.result);
523
- request.onerror = () => reject(request.error ?? /* @__PURE__ */ new Error("IndexedDB request failed"));
524
- });
525
- }
526
- /**
527
- * F11 hardening: an IDB version bump with no `onblocked` handler and no
528
- * `versionchange` listener can leave a boot hung forever with no error
529
- * surfaced anywhere. `onblocked` rejects the open promise; `onVersionChange`
530
- * is invoked once a successfully-opened connection later receives its OWN
531
- * `versionchange` event (some other tab needs an upgrade): the connection
532
- * closes itself immediately so it can't go on to block that upgrade in turn,
533
- * and the caller uses the callback to drop its cached db promise so the NEXT
534
- * storage operation reopens fresh.
535
- */
536
- function openDatabase(onVersionChange) {
537
- return new Promise((resolve, reject) => {
538
- const request = indexedDB.open(IDB_NAME, IDB_VERSION);
539
- request.onupgradeneeded = () => {
540
- const db = request.result;
541
- if (!db.objectStoreNames.contains(STORE_CONNECTIONS)) db.createObjectStore(STORE_CONNECTIONS, { keyPath: "id" });
542
- if (!db.objectStoreNames.contains(STORE_META)) db.createObjectStore(STORE_META);
543
- if (!db.objectStoreNames.contains(STORE_KEYS)) db.createObjectStore(STORE_KEYS);
544
- };
545
- request.onsuccess = () => {
546
- const db = request.result;
547
- db.onversionchange = () => {
548
- db.close();
549
- onVersionChange();
550
- };
551
- resolve(db);
552
- };
553
- request.onerror = () => reject(request.error ?? /* @__PURE__ */ new Error("IndexedDB open failed"));
554
- request.onblocked = () => reject(/* @__PURE__ */ new Error("IndexedDB upgrade blocked by another open connection (close other tabs of this app and retry)"));
555
- });
556
- }
557
- /**
558
- * IndexedDB storage backend (raw IDB API, no deps). Lazily opens the database
559
- * on first use; each operation runs in its own short transaction.
560
- */
561
- function createIndexedDbStorage() {
562
- let db = null;
563
- const invalidate = () => {
564
- db = null;
565
- };
566
- const database = () => {
567
- db ??= openDatabase(invalidate);
568
- return db;
569
- };
570
- const store = async (name, mode) => (await database()).transaction(name, mode).objectStore(name);
571
- return {
572
- async getAll() {
573
- return idbRequest((await store(STORE_CONNECTIONS, "readonly")).getAll());
574
- },
575
- async get(id) {
576
- return await idbRequest((await store(STORE_CONNECTIONS, "readonly")).get(id)) ?? null;
577
- },
578
- async put(entry) {
579
- await idbRequest((await store(STORE_CONNECTIONS, "readwrite")).put(redactEntryUrl(entry)));
580
- },
581
- async delete(id) {
582
- await idbRequest((await store(STORE_CONNECTIONS, "readwrite")).delete(id));
583
- },
584
- async getMeta(key) {
585
- return await idbRequest((await store(STORE_META, "readonly")).get(key)) ?? null;
586
- },
587
- async setMeta(key, value) {
588
- const metaStore = await store(STORE_META, "readwrite");
589
- if (value === null) await idbRequest(metaStore.delete(key));
590
- else await idbRequest(metaStore.put(value, key));
591
- },
592
- async getCryptoKey() {
593
- return await idbRequest((await store(STORE_KEYS, "readonly")).get(CRYPTO_KEY_ID)) ?? null;
594
- },
595
- async setCryptoKey(key) {
596
- await idbRequest((await store(STORE_KEYS, "readwrite")).put(key, CRYPTO_KEY_ID));
597
- }
598
- };
599
- }
600
- function createConnectionStore(options) {
601
- const { storage } = options;
602
- async function readEntry(id) {
603
- const stored = await storage.get(id);
604
- if (!stored) return null;
605
- const entry = redactEntryUrl(stored);
606
- if (entry.baseUrl !== stored.baseUrl) await storage.put(entry);
607
- return entry;
608
- }
609
- async function requireEntry(id) {
610
- const entry = await readEntry(id);
611
- if (!entry) throw new Error(`Unknown connection: ${id}`);
612
- return entry;
613
- }
614
- return {
615
- async list() {
616
- const stored = await storage.getAll();
617
- const entries = stored.map(redactEntryUrl);
618
- await Promise.all(entries.map((entry, index) => entry.baseUrl === stored[index]?.baseUrl ? Promise.resolve() : storage.put(entry)));
619
- return entries;
620
- },
621
- get(id) {
622
- return readEntry(id);
623
- },
624
- async add(input) {
625
- assertUrlHasNoUserinfo(input.baseUrl);
626
- const id = input.id ?? randomId();
627
- if (await readEntry(id)) throw new Error(`Connection already exists: ${id}`);
628
- const entry = {
629
- ...input,
630
- id
631
- };
632
- await storage.put(entry);
633
- return clone(entry);
634
- },
635
- async update(id, patch) {
636
- if (patch.baseUrl !== void 0) assertUrlHasNoUserinfo(patch.baseUrl);
637
- const entry = await requireEntry(id);
638
- if (entry.locked) throw new Error(`Connection is locked (config-owned): ${id}`);
639
- const updated = {
640
- ...entry,
641
- ...patch,
642
- id
643
- };
644
- await storage.put(updated);
645
- return clone(updated);
646
- },
647
- async remove(id) {
648
- if ((await requireEntry(id)).locked) throw new Error(`Connection is locked (config-owned): ${id}`);
649
- await storage.delete(id);
650
- if (await storage.getMeta(ACTIVE_ID_KEY) === id) await storage.setMeta(ACTIVE_ID_KEY, null);
651
- },
652
- async setSecretRef(id, auth) {
653
- const updated = {
654
- ...await requireEntry(id),
655
- auth,
656
- id
657
- };
658
- await storage.put(updated);
659
- return clone(updated);
660
- },
661
- getActiveId() {
662
- return storage.getMeta(ACTIVE_ID_KEY);
663
- },
664
- async getActive() {
665
- const id = await storage.getMeta(ACTIVE_ID_KEY);
666
- return id === null ? null : readEntry(id);
667
- },
668
- async setActive(id) {
669
- await requireEntry(id);
670
- await storage.setMeta(ACTIVE_ID_KEY, id);
671
- },
672
- async clearActive() {
673
- await storage.setMeta(ACTIVE_ID_KEY, null);
674
- },
675
- async seedFromRuntimeConfig(config) {
676
- if (!config) return;
677
- const activeId = await storage.getMeta(ACTIVE_ID_KEY);
678
- const configIds = new Set(config.connections.map((entry) => entry.id));
679
- for (const existing of await storage.getAll()) {
680
- if (!existing.locked || configIds.has(existing.id)) continue;
681
- await storage.delete(existing.id);
682
- if (activeId === existing.id) await storage.setMeta(ACTIVE_ID_KEY, null);
683
- }
684
- for (const entry of config.connections) {
685
- const seededEntry = redactEntryUrl(entry);
686
- const existing = await readEntry(entry.id);
687
- if (!existing) await storage.put(clone(seededEntry));
688
- else if (existing.locked) {
689
- const seeded = clone(seededEntry);
690
- const preserveAuth = existing.auth && existing.auth.mode !== "none";
691
- await storage.put(preserveAuth ? {
692
- ...seeded,
693
- auth: existing.auth
694
- } : seeded);
695
- }
696
- }
697
- if (await storage.getMeta(ACTIVE_ID_KEY) !== null) return;
698
- const fallback = config.connections.find((entry) => entry.isDefault);
699
- if (fallback && await storage.get(fallback.id)) await storage.setMeta(ACTIVE_ID_KEY, fallback.id);
700
- }
701
- };
702
- }
703
- /**
704
- * Fetch '/runtime-config.json' from the app's OWN origin (relative URL — the
705
- * static server ships the file beside the build; the app holds no other
706
- * trusted origin at boot). Absent (404), unreachable (offline), or malformed
707
- * -> null; never throws, so an offline PWA boot still reaches the stored
708
- * connection list.
709
- */
710
- async function loadRuntimeConfig(fetchImpl = globalThis.fetch) {
711
- try {
712
- const response = await fetchImpl("/runtime-config.json", {
713
- method: "GET",
714
- headers: { accept: "application/json" },
715
- credentials: "omit"
716
- });
717
- if (!response.ok) return null;
718
- const parsed = await response.json();
719
- if (!parsed || typeof parsed !== "object" || !Array.isArray(parsed.connections)) return null;
720
- return adaptRuntimeConfigForBrowser(parsed);
721
- } catch {
722
- return null;
723
- }
724
- }
725
- //#endregion
726
- //#region src/lib/connections/secrets.ts
727
- var META_PREFIX = "secret:";
728
- var ENCRYPTED_MARKER = 2;
729
- var AES_GCM_LENGTH = 256;
730
- var IV_BYTES = 12;
731
- /**
732
- * WebCrypto's `SubtleCrypto` is secure-context-only: on a plain-http LAN origin
733
- * (the LAN-served tier) `crypto.subtle` is undefined, so encryption is simply
734
- * not available there. Callers degrade to the legacy plaintext record shape —
735
- * which `readMaterial` already reads — rather than throwing and blocking the
736
- * user from saving a credential at all.
737
- */
738
- function subtleAvailable() {
739
- return typeof crypto !== "undefined" && !!crypto.subtle;
740
- }
741
- function isEncryptedRecord(value) {
742
- return !!value && typeof value === "object" && value.v === ENCRYPTED_MARKER && typeof value.iv === "string" && typeof value.ciphertext === "string";
743
- }
744
- function bytesToBase64(bytes) {
745
- let binary = "";
746
- for (const byte of bytes) binary += String.fromCharCode(byte);
747
- return btoa(binary);
748
- }
749
- function base64ToBytes(b64) {
750
- const binary = atob(b64);
751
- const bytes = new Uint8Array(binary.length);
752
- for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
753
- return bytes;
754
- }
755
- var pendingKeys = /* @__PURE__ */ new WeakMap();
756
- /** Generate-once, reuse-forever non-extractable AES-GCM key for this storage backend. */
757
- async function getOrCreateKey(storage) {
758
- const existing = await storage.getCryptoKey();
759
- if (existing) return existing;
760
- let pending = pendingKeys.get(storage);
761
- if (!pending) {
762
- pending = (async () => {
763
- const key = await crypto.subtle.generateKey({
764
- name: "AES-GCM",
765
- length: AES_GCM_LENGTH
766
- }, false, ["encrypt", "decrypt"]);
767
- await storage.setCryptoKey(key);
768
- return key;
769
- })();
770
- pendingKeys.set(storage, pending);
771
- pending.catch(() => {
772
- pendingKeys.delete(storage);
773
- });
774
- }
775
- return pending;
776
- }
777
- async function encryptMaterial(key, material) {
778
- const iv = crypto.getRandomValues(new Uint8Array(IV_BYTES));
779
- const plaintext = new TextEncoder().encode(JSON.stringify(material));
780
- const ciphertext = new Uint8Array(await crypto.subtle.encrypt({
781
- name: "AES-GCM",
782
- iv
783
- }, key, plaintext));
784
- return {
785
- v: ENCRYPTED_MARKER,
786
- iv: bytesToBase64(iv),
787
- ciphertext: bytesToBase64(ciphertext)
788
- };
789
- }
790
- async function decryptRecord(key, record) {
791
- const iv = base64ToBytes(record.iv);
792
- const ciphertext = base64ToBytes(record.ciphertext);
793
- const plaintext = await crypto.subtle.decrypt({
794
- name: "AES-GCM",
795
- iv
796
- }, key, ciphertext);
797
- return JSON.parse(new TextDecoder().decode(plaintext));
798
- }
799
- async function writeMaterial(storage, ref, material) {
800
- if (!subtleAvailable()) {
801
- await storage.setMeta(META_PREFIX + ref, JSON.stringify(material));
802
- return;
803
- }
804
- const record = await encryptMaterial(await getOrCreateKey(storage), material);
805
- await storage.setMeta(META_PREFIX + ref, JSON.stringify(record));
806
- }
807
- /**
808
- * Read+decrypt a stored secret. Transparently migrates a legacy plaintext
809
- * record by re-encrypting it in place before returning. Returns null for a
810
- * missing ref or anything that can't be parsed/decrypted — the caller degrades
811
- * gracefully rather than throwing.
812
- */
813
- async function readMaterial(storage, ref) {
814
- const raw = await storage.getMeta(META_PREFIX + ref);
815
- if (raw === null) return null;
816
- let parsed;
817
- try {
818
- parsed = JSON.parse(raw);
819
- } catch {
820
- return null;
821
- }
822
- if (isEncryptedRecord(parsed)) try {
823
- return await decryptRecord(await getOrCreateKey(storage), parsed);
824
- } catch {
825
- return null;
826
- }
827
- const material = parsed;
828
- if (subtleAvailable()) try {
829
- await writeMaterial(storage, ref, material);
830
- } catch {}
831
- return material;
832
- }
833
- function createSecretStore(storage) {
834
- return {
835
- async set(ref, material) {
836
- await writeMaterial(storage, ref, material);
837
- },
838
- async delete(ref) {
839
- await storage.setMeta(META_PREFIX + ref, null);
840
- },
841
- async resolveAuth(entry) {
842
- if (entry.auth.mode !== "basic" || !entry.auth.secretRef) return { mode: "none" };
843
- const material = await readMaterial(storage, entry.auth.secretRef);
844
- if (!material || typeof material.password !== "string") return { mode: "none" };
845
- const username = entry.auth.username || material.username;
846
- return username ? {
847
- mode: "basic",
848
- username,
849
- password: material.password
850
- } : {
851
- mode: "basic",
852
- password: material.password
853
- };
854
- },
855
- async updateUsername(ref, username) {
856
- const material = await readMaterial(storage, ref);
857
- if (!material) return;
858
- const updated = { ...material };
859
- if (username === void 0) delete updated.username;
860
- else updated.username = username;
861
- await writeMaterial(storage, ref, updated);
862
- }
863
- };
864
- }
865
- //#endregion
866
- //#region src/lib/chat/session-events.ts
867
- /**
868
- * SSE consumer for OpenCode's `/event` stream.
869
- *
870
- * Phase 3b ("One UI, delete the split"): the underlying stream is now opened by
871
- * the browser-owned direct transport (`$lib/connections/boot.getTransport()`
872
- * → `subscribeEvents(onFrame, signal)`), which talks to the active connection's
873
- * OpenCode/Guardian base URL directly (no host proxy, no admin cookie) and
874
- * REUSES this module's `parseFrame`. Reconnect/backoff, session-scoped dispatch,
875
- * and abort semantics stay here — the chat layer's concern, not the transport's.
876
- *
877
- * Phase D of docs/technical/multi-endpoint-session-ux.md.
878
- */
879
- var INITIAL_BACKOFF_MS = 1e3;
880
- var MAX_BACKOFF_MS = 3e4;
881
- /**
882
- * Parse one `\n\n`-delimited SSE frame. Multi-line `data:` fields are
883
- * concatenated with `\n` per the SSE spec. Reused by the direct transport.
884
- */
885
- function parseFrame(chunk) {
886
- const frame = {};
887
- const dataLines = [];
888
- for (const rawLine of chunk.split("\n")) {
889
- if (!rawLine || rawLine.startsWith(":")) continue;
890
- if (rawLine.startsWith("data:")) dataLines.push(rawLine.replace(/^data:\s?/, ""));
891
- else if (rawLine.startsWith("event:")) frame.event = rawLine.replace(/^event:\s?/, "");
892
- else if (rawLine.startsWith("id:")) frame.id = rawLine.replace(/^id:\s?/, "");
893
- }
894
- if (dataLines.length > 0) frame.data = dataLines.join("\n");
895
- return frame;
896
- }
897
- function dispatch(handlers, payload) {
898
- const info = payload.properties?.info;
899
- const id = info?.id ?? payload.sessionID;
900
- if (!id) return;
901
- switch (payload.type) {
902
- case "session.created":
903
- handlers.onCreated(id);
904
- return;
905
- case "session.updated":
906
- handlers.onUpdated(id, {
907
- title: info?.title,
908
- updatedAt: info?.time?.updated
909
- });
910
- return;
911
- case "session.deleted":
912
- handlers.onDeleted(id);
913
- return;
914
- default: return;
915
- }
916
- }
917
- /**
918
- * Open the active connection's `/event` SSE stream (via the direct transport)
919
- * and dispatch session-scoped events. Returns an unsubscribe function that
920
- * aborts the stream and prevents reconnection.
921
- *
922
- * `onConnect` fires on the first frame of each (re)connected stream — the point
923
- * at which live updates are demonstrably flowing. The transport owns the fetch;
924
- * this loop owns exponential-backoff reconnect and abort.
925
- */
926
- function subscribeSessionEvents(handlers) {
927
- let stopped = false;
928
- let controller = new AbortController();
929
- const sleep = (ms) => new Promise((resolve) => {
930
- const timer = setTimeout(resolve, ms);
931
- controller.signal.addEventListener("abort", () => {
932
- clearTimeout(timer);
933
- resolve();
934
- }, { once: true });
935
- });
936
- async function readStream() {
937
- let connected = false;
938
- await getTransport().subscribeEvents((event) => {
939
- if (!connected) {
940
- connected = true;
941
- handlers.onConnect?.();
942
- }
943
- const payload = event;
944
- handlers.onEvent?.(payload);
945
- dispatch(handlers, payload);
946
- }, controller.signal);
947
- }
948
- (async () => {
949
- let attempt = 0;
950
- while (!stopped) try {
951
- attempt++;
952
- await readStream();
953
- attempt = 0;
954
- if (!stopped) await sleep(500);
955
- } catch (err) {
956
- if (stopped) return;
957
- const error = err instanceof Error ? err : new Error(String(err));
958
- if (error.name !== "AbortError") {
959
- console.warn("[session-events] SSE error, reconnecting", error);
960
- handlers.onDisconnect?.(error);
961
- }
962
- await sleep(Math.min(INITIAL_BACKOFF_MS * 2 ** Math.max(0, attempt - 1), MAX_BACKOFF_MS));
963
- if (controller.signal.aborted && !stopped) controller = new AbortController();
964
- }
965
- })();
966
- return () => {
967
- stopped = true;
968
- try {
969
- controller.abort();
970
- } catch {}
971
- };
972
- }
973
- //#endregion
974
- //#region src/lib/transport/direct.ts
975
- /**
976
- * Minimal browser-owned direct transport (Phase 3a — "One UI, delete the
977
- * split").
978
- *
979
- * Talks to a connection's OpenCode/Guardian base URL directly from the
980
- * browser — no proxy, NO COOKIES (`credentials: 'omit'`). This is deliberately
981
- * small: it exposes only the calls the ui chat layer needs and REUSES ui's
982
- * existing SSE frame parser (`$lib/chat/session-events.ts` `parseFrame`) and
983
- * event envelope type (`$lib/chat/oc-events.ts` `RawEvent`) rather than
984
- * re-implementing them. Reconnect/backoff and session-scoped filtering are the
985
- * chat layer's concern, not this transport's.
986
- */
987
- var PROBE_TIMEOUT_MS = 5e3;
988
- /**
989
- * UTF-8-encode before base64ing: `btoa()` alone only accepts Latin-1 code
990
- * points and throws a synchronous `InvalidCharacterError` for any password
991
- * containing e.g. Cyrillic/CJK/emoji characters, before any network I/O.
992
- */
993
- function base64Utf8(value) {
994
- const bytes = new TextEncoder().encode(value);
995
- let binary = "";
996
- for (const byte of bytes) binary += String.fromCharCode(byte);
997
- return btoa(binary);
998
- }
999
- /**
1000
- * Build the `Authorization` header value for a resolved auth, or null for
1001
- * `{ mode: 'none' }`. Basic username defaults to `'opencode'` (OpenCode's own
1002
- * server default and what the host app sends).
1003
- */
1004
- function authorizationHeader(auth) {
1005
- if (auth.mode === "basic") return `Basic ${base64Utf8(`${auth.username ?? "opencode"}:${auth.password}`)}`;
1006
- return null;
1007
- }
1008
- function createDirectTransport(getConnection, resolveAuth, fetchImpl = globalThis.fetch) {
1009
- function requireConnection() {
1010
- const connection = getConnection();
1011
- if (!connection) throw new Error("No active connection");
1012
- return connection;
1013
- }
1014
- /** Trailing-slash and path-prefix safe: reverse-proxied instances keep their prefix. */
1015
- function baseFor(connection) {
1016
- return connection.baseUrl.replace(/\/+$/, "");
1017
- }
1018
- async function authHeaders(connection) {
1019
- const { authorization } = await resolveAuth(connection);
1020
- return authorization ? { authorization } : {};
1021
- }
1022
- return {
1023
- async request(method, path, body) {
1024
- const connection = requireConnection();
1025
- const init = {
1026
- method,
1027
- headers: {
1028
- ...body === void 0 ? {} : { "content-type": "application/json" },
1029
- ...await authHeaders(connection)
1030
- },
1031
- credentials: "omit"
1032
- };
1033
- if (body !== void 0) init.body = JSON.stringify(body);
1034
- const response = await fetchImpl(`${baseFor(connection)}${path}`, init);
1035
- if (!response.ok) throw Object.assign(/* @__PURE__ */ new Error(`HTTP ${response.status}`), { status: response.status });
1036
- return response;
1037
- },
1038
- async subscribeEvents(onFrame, signal) {
1039
- const connection = requireConnection();
1040
- const response = await fetchImpl(`${baseFor(connection)}/event`, {
1041
- method: "GET",
1042
- headers: {
1043
- accept: "text/event-stream",
1044
- ...await authHeaders(connection)
1045
- },
1046
- credentials: "omit",
1047
- signal
1048
- });
1049
- if (!response.ok || !response.body) throw Object.assign(/* @__PURE__ */ new Error(`SSE stream failed: HTTP ${response.status}`), { status: response.status });
1050
- const reader = response.body.getReader();
1051
- const decoder = new TextDecoder();
1052
- let buffer = "";
1053
- try {
1054
- while (true) {
1055
- const { done, value } = await reader.read();
1056
- if (done) break;
1057
- buffer += decoder.decode(value, { stream: true });
1058
- const chunks = buffer.split("\n\n");
1059
- buffer = chunks.pop() ?? "";
1060
- for (const chunk of chunks) {
1061
- if (!chunk) continue;
1062
- const frame = parseFrame(chunk);
1063
- if (!frame.data) continue;
1064
- let event;
1065
- try {
1066
- event = JSON.parse(frame.data);
1067
- } catch {
1068
- continue;
1069
- }
1070
- onFrame(event);
1071
- }
1072
- }
1073
- } finally {
1074
- try {
1075
- reader.releaseLock();
1076
- } catch {}
1077
- }
1078
- },
1079
- async probeHealth() {
1080
- const connection = getConnection();
1081
- if (!connection) return { status: "unreachable" };
1082
- const base = baseFor(connection);
1083
- const verdict = validateConnectionUrl(base);
1084
- if (!verdict.ok && verdict.reason === "insecure-remote") return { status: "insecure" };
1085
- try {
1086
- const response = await fetchImpl(`${base}/`, {
1087
- method: "GET",
1088
- headers: await authHeaders(connection),
1089
- credentials: "omit",
1090
- cache: "no-store",
1091
- signal: AbortSignal.timeout(PROBE_TIMEOUT_MS)
1092
- });
1093
- if (response.status === 401 || response.status === 403) return { status: "unauthorized" };
1094
- if (response.ok || response.status >= 300 && response.status < 400) return { status: "accessible" };
1095
- return { status: "unreachable" };
1096
- } catch {
1097
- return { status: "unreachable" };
1098
- }
1099
- }
1100
- };
1101
- }
1102
- //#endregion
1103
- //#region src/lib/connections/boot.ts
1104
- /**
1105
- * Browser connection boot (Phase 3b — "One UI, delete the split").
1106
- *
1107
- * One storage backend + one ConnectionStore + one SecretStore + one direct
1108
- * transport per browsing session, created lazily on first access. The chat
1109
- * layer (`$lib/api/chat.ts`, `$lib/chat/session-events.ts`) and the connection
1110
- * switcher (`$lib/endpoints-state.svelte.ts`) all share these singletons so the
1111
- * browser owns connections and talks to OpenCode/Guardian DIRECTLY — no host
1112
- * proxy, no admin cookie.
1113
- *
1114
- * The transport reads the active connection SYNCHRONOUSLY from a snapshot the
1115
- * connection store owner (`endpoints-state`) keeps in sync via
1116
- * `setActiveConnection()`. The store's own `getActive()` is async (IndexedDB),
1117
- * so it can't back the transport's synchronous `getConnection` directly.
1118
- *
1119
- * IndexedDB is the persistent backend; private-browsing modes that refuse it
1120
- * degrade to an in-memory backend (session-only) rather than a blank page —
1121
- * mirroring the client's `pickStorage`.
1122
- */
1123
- var store = null;
1124
- var secrets = null;
1125
- var transport = null;
1126
- /** Synchronous snapshot of the active connection for the transport. */
1127
- var activeConnection = null;
1128
- /**
1129
- * Some private-browsing modes refuse IndexedDB entirely; degrade to a
1130
- * session-only in-memory backend rather than a blank page (mirrors the
1131
- * client's pickStorage).
1132
- */
1133
- function pickStorage() {
1134
- try {
1135
- if (typeof indexedDB !== "undefined") return createIndexedDbStorage();
1136
- } catch {}
1137
- return createMemoryStorage();
1138
- }
1139
- function ensure() {
1140
- if (store && secrets && transport) return;
1141
- const storage = pickStorage();
1142
- const connectionStore = createConnectionStore({ storage });
1143
- const secretStore = createSecretStore(storage);
1144
- const directTransport = createDirectTransport(() => activeConnection, async (connection) => {
1145
- return { authorization: authorizationHeader(await secretStore.resolveAuth(connection)) ?? void 0 };
1146
- });
1147
- store = connectionStore;
1148
- secrets = secretStore;
1149
- transport = directTransport;
1150
- }
1151
- function getConnectionStore() {
1152
- ensure();
1153
- return store;
1154
- }
1155
- function getTransport() {
1156
- ensure();
1157
- return transport;
1158
- }
1159
- /**
1160
- * Point the direct transport at `connection` (or clear it). Called by the
1161
- * connection-store owner (`endpoints-state`) on load/activate — a plain
1162
- * function, no `$effect`, so the transport's synchronous `getConnection`
1163
- * always sees the current active connection.
1164
- */
1165
- function setActiveConnection(connection) {
1166
- activeConnection = connection;
1167
- }
1168
- //#endregion
1169
361
  //#region src/lib/api/chat.ts
1170
362
  /** Create a new session on the active connection's OpenCode instance. */
1171
363
  async function createSession() {
@@ -1231,24 +423,6 @@ async function rejectChatQuestion(requestId) {
1231
423
  await (await getTransport().request("POST", `/question/${encodeURIComponent(requestId)}/reject`, {})).text().catch(() => "");
1232
424
  }
1233
425
  //#endregion
1234
- //#region ../ui-kit/src/lib/components/icons/IconThemeSystem.svelte
1235
- function IconThemeSystem($$renderer, $$props) {
1236
- let { size = 20, class: className = "" } = $$props;
1237
- $$renderer.push(`<svg xmlns="http://www.w3.org/2000/svg"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"${attr_class(`lucide lucide-sun-moon-icon lucide-sun-moon s-icon ${stringify(className)}`)}><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>`);
1238
- }
1239
- //#endregion
1240
- //#region ../ui-kit/src/lib/components/icons/IconThemeLight.svelte
1241
- function IconThemeLight($$renderer, $$props) {
1242
- let { size = 20, class: className = "" } = $$props;
1243
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"${attr_class(`s-icon ${stringify(className)}`)}><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>`);
1244
- }
1245
- //#endregion
1246
- //#region ../ui-kit/src/lib/components/icons/IconThemeDark.svelte
1247
- function IconThemeDark($$renderer, $$props) {
1248
- let { size = 20, class: className = "" } = $$props;
1249
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"${attr_class(`s-icon ${stringify(className)}`)}><path d="M21 12.8A9 9 0 1 1 11.2 3 7 7 0 0 0 21 12.8z"></path></svg>`);
1250
- }
1251
- //#endregion
1252
426
  //#region src/lib/chat/oc-events.ts
1253
427
  function propStr(props, key) {
1254
428
  const value = props?.[key];
@@ -1465,6 +639,76 @@ async function emitConnectionActivated(connectionId) {
1465
639
  for (const listener of listeners) await listener(connectionId);
1466
640
  }
1467
641
  //#endregion
642
+ //#region src/lib/connections/discovery.ts
643
+ /** Probed in order; the first reachable candidate is added. Ports are the
644
+ * stack defaults (`STACK_DEFAULTS.ports.assistant`, guardian direct port). */
645
+ var LOCAL_DISCOVERY_CANDIDATES = [{
646
+ baseUrl: "http://127.0.0.1:3800",
647
+ label: "Local assistant"
648
+ }, {
649
+ baseUrl: "http://127.0.0.1:3830/oc",
650
+ label: "Local assistant (guardian)"
651
+ }];
652
+ var DISMISSED_STORAGE_KEY = "openpalm.connections.local-discovery-dismissed";
653
+ var PROBE_TIMEOUT_MS = 1500;
654
+ function safeLocalStorage() {
655
+ try {
656
+ return globalThis.localStorage ?? null;
657
+ } catch {
658
+ return null;
659
+ }
660
+ }
661
+ function isLocalDiscoveryDismissed() {
662
+ return safeLocalStorage()?.getItem(DISMISSED_STORAGE_KEY) === "1";
663
+ }
664
+ async function probe(baseUrl, fetchImpl) {
665
+ try {
666
+ const response = await fetchImpl(`${baseUrl}/`, {
667
+ method: "GET",
668
+ credentials: "omit",
669
+ cache: "no-store",
670
+ signal: AbortSignal.timeout(PROBE_TIMEOUT_MS)
671
+ });
672
+ if (response.status === 401 || response.status === 403) return true;
673
+ return response.ok || response.status >= 300 && response.status < 400;
674
+ } catch {
675
+ return false;
676
+ }
677
+ }
678
+ /**
679
+ * Probe the well-known local endpoints and add the first reachable one to
680
+ * `store` as an unlocked connection — unless the list already contains a
681
+ * local (loopback) connection, or the user previously removed a discovered
682
+ * entry. Returns the added connection, or null when nothing was added.
683
+ * Never throws: discovery is strictly best-effort.
684
+ */
685
+ async function discoverLocalAssistant(store, fetchImpl = globalThis.fetch) {
686
+ try {
687
+ if (typeof fetchImpl !== "function") return null;
688
+ if (isLocalDiscoveryDismissed()) return null;
689
+ const hasLocal = async () => (await store.list()).some((c) => {
690
+ try {
691
+ return isLoopbackHost(new URL(c.baseUrl).hostname);
692
+ } catch {
693
+ return false;
694
+ }
695
+ });
696
+ if (await hasLocal()) return null;
697
+ for (const candidate of LOCAL_DISCOVERY_CANDIDATES) {
698
+ if (!await probe(candidate.baseUrl, fetchImpl)) continue;
699
+ if (await hasLocal()) return null;
700
+ return await store.add({
701
+ label: candidate.label,
702
+ baseUrl: candidate.baseUrl,
703
+ auth: { mode: "none" }
704
+ });
705
+ }
706
+ return null;
707
+ } catch {
708
+ return null;
709
+ }
710
+ }
711
+ //#endregion
1468
712
  //#region src/lib/endpoints-state.svelte.ts
1469
713
  function toView(c) {
1470
714
  return {
@@ -1505,6 +749,10 @@ var ConnectionsService = class {
1505
749
  this.activeId = storedActiveId ?? this.endpoints[0]?.id ?? "";
1506
750
  setActiveConnection(connections.find((c) => c.id === this.activeId) ?? null);
1507
751
  this.loaded = true;
752
+ if (!this.discoveryStarted) {
753
+ this.discoveryStarted = true;
754
+ this.discoverLocal();
755
+ }
1508
756
  } catch (e) {
1509
757
  const err = e;
1510
758
  this.error = err.message ?? "Failed to load connections";
@@ -1512,6 +760,25 @@ var ConnectionsService = class {
1512
760
  this.loading = false;
1513
761
  }
1514
762
  }
763
+ /** Localhost auto-discovery runs at most once per browsing session. */
764
+ discoveryStarted = false;
765
+ /**
766
+ * Probe the well-known local assistant endpoints and, when one is
767
+ * reachable and not yet listed, add it and refresh the view. Best-effort:
768
+ * failures are swallowed (discovery must never break boot).
769
+ */
770
+ async discoverLocal() {
771
+ try {
772
+ const store = getConnectionStore();
773
+ const added = await discoverLocalAssistant(store);
774
+ if (!added) return;
775
+ const [connections, storedActiveId] = await Promise.all([store.list(), store.getActiveId()]);
776
+ this.endpoints = connections.map(toView);
777
+ this.activeId = storedActiveId ?? this.endpoints[0]?.id ?? "";
778
+ setActiveConnection(connections.find((c) => c.id === this.activeId) ?? null);
779
+ if (this.activeId === added.id && !activationBlockReason()) await emitConnectionActivated(added.id);
780
+ } catch {}
781
+ }
1515
782
  /** Monotonic activation counter: a failed activation may only roll state
1516
783
  * back if no NEWER activation has started since (otherwise a slow failure
1517
784
  * would clobber the selection a later, successful switch just persisted). */
@@ -1644,5 +911,5 @@ function IconStop($$renderer, $$props) {
1644
911
  $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><rect fill="currentColor" stroke="none" x="7" y="7" width="10" height="10" rx="1.4"></rect></svg>`);
1645
912
  }
1646
913
 
1647
- export { notifyAssistantError as A, notifyAssistantReply as B, onConnectionActivated as C, partSnapshotType as D, registerActivationGuard as E, rejectChatQuestion as F, relativeTimeLabel as G, replyChatPermission as H, IconClose as I, replyChatQuestion as J, sendChatMessage as K, startChatMessageTurn as L, subscribeSessionEvents as M, timelineTitle as N, toolAriaLabel as O, toolDetailRows as P, toolIconType as Q, toolStatusLabel as R, SvelteMap as S, IconStop as a, IconThemeDark as b, IconThemeLight as c, IconThemeSystem as d, SvelteSet as e, abortChatTurn as f, createSession as g, displayTitle as h, endpointsService as i, extractPermissionAsk as j, extractQuestionAsk as k, extractStepUpdate as l, extractTextDelta as m, extractToolUpdate as n, formatBytes as o, formatDate as p, formatDateTime as q, formatRelativeTime as r, formatTime as s, getSessionMessages as t, getTransport as u, isLoopbackHost as v, isSessionError as w, isTurnEnd as x, isUserFacingTool as y, listSessions as z };
1648
- //# sourceMappingURL=IconStop-DKVpXPKq.js.map
914
+ export { onConnectionActivated as A, partSnapshotType as B, registerActivationGuard as C, rejectChatQuestion as D, relativeTimeLabel as E, replyChatPermission as F, replyChatQuestion as G, sendChatMessage as H, IconClose as I, startChatMessageTurn as J, timelineTitle as K, toolAriaLabel as L, toolDetailRows as M, toolIconType as N, toolStatusLabel as O, SvelteMap as S, IconStop as a, IconThemeDark as b, IconThemeLight as c, IconThemeSystem as d, SvelteSet as e, abortChatTurn as f, createSession as g, displayTitle as h, endpointsService as i, extractPermissionAsk as j, extractQuestionAsk as k, extractStepUpdate as l, extractTextDelta as m, extractToolUpdate as n, formatBytes as o, formatDate as p, formatDateTime as q, formatRelativeTime as r, formatTime as s, getSessionMessages as t, isSessionError as u, isTurnEnd as v, isUserFacingTool as w, listSessions as x, notifyAssistantError as y, notifyAssistantReply as z };
915
+ //# sourceMappingURL=IconStop-BxUfqTaV.js.map