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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/4.Cd3Y_8BZ.css +1 -0
  3. package/build/client/_app/immutable/assets/4.Cd3Y_8BZ.css.br +3 -0
  4. package/build/client/_app/immutable/assets/4.Cd3Y_8BZ.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/6.BM7A1dW5.css +1 -0
  6. package/build/client/_app/immutable/assets/6.BM7A1dW5.css.br +0 -0
  7. package/build/client/_app/immutable/assets/6.BM7A1dW5.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/7.BsquVIMw.css +1 -0
  9. package/build/client/_app/immutable/assets/7.BsquVIMw.css.br +0 -0
  10. package/build/client/_app/immutable/assets/7.BsquVIMw.css.gz +0 -0
  11. package/build/client/_app/immutable/assets/9.D8zTZB7v.css +1 -0
  12. package/build/client/_app/immutable/assets/9.D8zTZB7v.css.br +0 -0
  13. package/build/client/_app/immutable/assets/9.D8zTZB7v.css.gz +0 -0
  14. package/build/client/_app/immutable/assets/QuestionCard.CSfD3z_X.css +1 -0
  15. package/build/client/_app/immutable/assets/QuestionCard.CSfD3z_X.css.br +0 -0
  16. package/build/client/_app/immutable/assets/QuestionCard.CSfD3z_X.css.gz +0 -0
  17. package/build/client/_app/immutable/chunks/1F1QVf3N.js +1 -0
  18. package/build/client/_app/immutable/chunks/1F1QVf3N.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/1F1QVf3N.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{DmFbAjwW.js → 92accNiq.js} +1 -1
  21. package/build/client/_app/immutable/chunks/92accNiq.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/92accNiq.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{SXdvPq3_.js → BBXQKGHA.js} +1 -1
  24. package/build/client/_app/immutable/chunks/BBXQKGHA.js.br +1 -0
  25. package/build/client/_app/immutable/chunks/BBXQKGHA.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/BE_4J5sS.js +3 -0
  27. package/build/client/_app/immutable/chunks/BE_4J5sS.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/BE_4J5sS.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/{CUa5ff3d.js → BGx9HO1u.js} +1 -1
  30. package/build/client/_app/immutable/chunks/BGx9HO1u.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/BGx9HO1u.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/BdIq5WIo.js +1 -0
  33. package/build/client/_app/immutable/chunks/BdIq5WIo.js.br +5 -0
  34. package/build/client/_app/immutable/chunks/BdIq5WIo.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/{BDK50g8a.js → ByiipSaR.js} +1 -1
  36. package/build/client/_app/immutable/chunks/ByiipSaR.js.br +3 -0
  37. package/build/client/_app/immutable/chunks/ByiipSaR.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/{D5FtEngX.js → C4qTU5YY.js} +1 -1
  39. package/build/client/_app/immutable/chunks/C4qTU5YY.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/C4qTU5YY.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/C6rMFkms.js +14 -0
  42. package/build/client/_app/immutable/chunks/C6rMFkms.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/C6rMFkms.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/{mG6HnNbi.js → CJc9QEdG.js} +1 -1
  45. package/build/client/_app/immutable/chunks/CJc9QEdG.js.br +2 -0
  46. package/build/client/_app/immutable/chunks/CJc9QEdG.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/Clt9pCG1.js +1 -0
  48. package/build/client/_app/immutable/chunks/Clt9pCG1.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/Clt9pCG1.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/CuKFR3Qo.js +3 -0
  51. package/build/client/_app/immutable/chunks/CuKFR3Qo.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/CuKFR3Qo.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/CzKYnjEX.js +1 -0
  54. package/build/client/_app/immutable/chunks/CzKYnjEX.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/CzKYnjEX.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/D1VTYdXF.js +1 -0
  57. package/build/client/_app/immutable/chunks/D1VTYdXF.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/D1VTYdXF.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/D3d8Mm8X.js +1 -0
  60. package/build/client/_app/immutable/chunks/D3d8Mm8X.js.br +1 -0
  61. package/build/client/_app/immutable/chunks/D3d8Mm8X.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/DF5Aoa59.js +1 -0
  63. package/build/client/_app/immutable/chunks/DF5Aoa59.js.br +2 -0
  64. package/build/client/_app/immutable/chunks/DF5Aoa59.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/{NR-JVJz-.js → DTAO9S6h.js} +1 -1
  66. package/build/client/_app/immutable/chunks/DTAO9S6h.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/DTAO9S6h.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/DTLQuSQp.js +3 -0
  69. package/build/client/_app/immutable/chunks/DTLQuSQp.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/DTLQuSQp.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/DaRQZQEK.js +5 -0
  72. package/build/client/_app/immutable/chunks/DaRQZQEK.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/DaRQZQEK.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/Dz-hw4Sz.js +5 -0
  75. package/build/client/_app/immutable/chunks/Dz-hw4Sz.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/Dz-hw4Sz.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/{hSjQday7.js → _zkFsY4j.js} +1 -1
  78. package/build/client/_app/immutable/chunks/_zkFsY4j.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/_zkFsY4j.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/mNzUu332.js +1 -0
  81. package/build/client/_app/immutable/chunks/mNzUu332.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/mNzUu332.js.gz +0 -0
  83. package/build/client/_app/immutable/entry/app.DKG33-gU.js +2 -0
  84. package/build/client/_app/immutable/entry/app.DKG33-gU.js.br +0 -0
  85. package/build/client/_app/immutable/entry/app.DKG33-gU.js.gz +0 -0
  86. package/build/client/_app/immutable/entry/start.vDtUfDrT.js +1 -0
  87. package/build/client/_app/immutable/entry/start.vDtUfDrT.js.br +1 -0
  88. package/build/client/_app/immutable/entry/start.vDtUfDrT.js.gz +0 -0
  89. package/build/client/_app/immutable/nodes/0.eA5H3idZ.js +1 -0
  90. package/build/client/_app/immutable/nodes/0.eA5H3idZ.js.br +0 -0
  91. package/build/client/_app/immutable/nodes/0.eA5H3idZ.js.gz +0 -0
  92. package/build/client/_app/immutable/nodes/1.CvKFymDh.js +1 -0
  93. package/build/client/_app/immutable/nodes/1.CvKFymDh.js.br +0 -0
  94. package/build/client/_app/immutable/nodes/1.CvKFymDh.js.gz +0 -0
  95. package/build/client/_app/immutable/nodes/10.DFMf8WUQ.js +1 -0
  96. package/build/client/_app/immutable/nodes/10.DFMf8WUQ.js.br +0 -0
  97. package/build/client/_app/immutable/nodes/10.DFMf8WUQ.js.gz +0 -0
  98. package/build/client/_app/immutable/nodes/{11.Ti2X5F-7.js → 11.BZQW5Y67.js} +6 -6
  99. package/build/client/_app/immutable/nodes/11.BZQW5Y67.js.br +0 -0
  100. package/build/client/_app/immutable/nodes/11.BZQW5Y67.js.gz +0 -0
  101. package/build/client/_app/immutable/nodes/2.tmtk1Bjc.js +1 -0
  102. package/build/client/_app/immutable/nodes/2.tmtk1Bjc.js.br +0 -0
  103. package/build/client/_app/immutable/nodes/2.tmtk1Bjc.js.gz +0 -0
  104. package/build/client/_app/immutable/nodes/3.BEaeucAu.js +1 -0
  105. package/build/client/_app/immutable/nodes/3.BEaeucAu.js.br +0 -0
  106. package/build/client/_app/immutable/nodes/3.BEaeucAu.js.gz +0 -0
  107. package/build/client/_app/immutable/nodes/4.B-36aGPk.js +1 -0
  108. package/build/client/_app/immutable/nodes/4.B-36aGPk.js.br +0 -0
  109. package/build/client/_app/immutable/nodes/4.B-36aGPk.js.gz +0 -0
  110. package/build/client/_app/immutable/nodes/{5.CNMS0qgk.js → 5.bgdUYUlr.js} +2 -2
  111. package/build/client/_app/immutable/nodes/5.bgdUYUlr.js.br +0 -0
  112. package/build/client/_app/immutable/nodes/5.bgdUYUlr.js.gz +0 -0
  113. package/build/client/_app/immutable/nodes/6.D0P837Li.js +2 -0
  114. package/build/client/_app/immutable/nodes/6.D0P837Li.js.br +0 -0
  115. package/build/client/_app/immutable/nodes/6.D0P837Li.js.gz +0 -0
  116. package/build/client/_app/immutable/nodes/7.C4seSCJq.js +14 -0
  117. package/build/client/_app/immutable/nodes/7.C4seSCJq.js.br +0 -0
  118. package/build/client/_app/immutable/nodes/7.C4seSCJq.js.gz +0 -0
  119. package/build/client/_app/immutable/nodes/8.BANf4x1v.js +1 -0
  120. package/build/client/_app/immutable/nodes/8.BANf4x1v.js.br +0 -0
  121. package/build/client/_app/immutable/nodes/8.BANf4x1v.js.gz +0 -0
  122. package/build/client/_app/immutable/nodes/9.DCgNAMuD.js +128 -0
  123. package/build/client/_app/immutable/nodes/9.DCgNAMuD.js.br +0 -0
  124. package/build/client/_app/immutable/nodes/9.DCgNAMuD.js.gz +0 -0
  125. package/build/client/_app/version.json +1 -1
  126. package/build/client/_app/version.json.br +1 -1
  127. package/build/client/_app/version.json.gz +0 -0
  128. package/build/server/chunks/{0-3ZKFLVwz.js → 0-D9FIO-Bk.js} +7 -6
  129. package/build/server/chunks/{0-3ZKFLVwz.js.map → 0-D9FIO-Bk.js.map} +1 -1
  130. package/build/server/chunks/1-ItPJxTHP.js +9 -0
  131. package/build/server/chunks/{1-BscBEom6.js.map → 1-ItPJxTHP.js.map} +1 -1
  132. package/build/server/chunks/{10-CYYH66rb.js → 10-B4fDiATl.js} +3 -3
  133. package/build/server/chunks/{10-CYYH66rb.js.map → 10-B4fDiATl.js.map} +1 -1
  134. package/build/server/chunks/11-CZj9K6K7.js +9 -0
  135. package/build/server/chunks/{11-DSzQavEB.js.map → 11-CZj9K6K7.js.map} +1 -1
  136. package/build/server/chunks/{2-CQSBaE_w.js → 2-KPMSLSlE.js} +2 -2
  137. package/build/server/chunks/{2-CQSBaE_w.js.map → 2-KPMSLSlE.js.map} +1 -1
  138. package/build/server/chunks/{3-t-iZh03o.js → 3-DpC38K23.js} +11 -11
  139. package/build/server/chunks/3-DpC38K23.js.map +1 -0
  140. package/build/server/chunks/4-DrJ64j1x.js +9 -0
  141. package/build/server/chunks/4-DrJ64j1x.js.map +1 -0
  142. package/build/server/chunks/{5-DLMaS6eR.js → 5-BxzwX0rY.js} +3 -3
  143. package/build/server/chunks/{5-DLMaS6eR.js.map → 5-BxzwX0rY.js.map} +1 -1
  144. package/build/server/chunks/6-DxXeT1e3.js +9 -0
  145. package/build/server/chunks/6-DxXeT1e3.js.map +1 -0
  146. package/build/server/chunks/7-CuHe_mFY.js +9 -0
  147. package/build/server/chunks/{7-BLHhygXi.js.map → 7-CuHe_mFY.js.map} +1 -1
  148. package/build/server/chunks/{8-DiHmrGkL.js → 8-DFD8sNRI.js} +5 -7
  149. package/build/server/chunks/8-DFD8sNRI.js.map +1 -0
  150. package/build/server/chunks/9-CVIPxN5B.js +9 -0
  151. package/build/server/chunks/9-CVIPxN5B.js.map +1 -0
  152. package/build/server/chunks/{IconActivity-DrgUhxxi.js → ChatMessage-fWnwEF6b.js} +3 -57
  153. package/build/server/chunks/ChatMessage-fWnwEF6b.js.map +1 -0
  154. package/build/server/chunks/{ChatNavbar-Takv7dQM.js → ChatNavbar-CJYo_Hbc.js} +9 -10
  155. package/build/server/chunks/ChatNavbar-CJYo_Hbc.js.map +1 -0
  156. package/build/server/chunks/IconActivity-BU1QGLAZ.js +58 -0
  157. package/build/server/chunks/IconActivity-BU1QGLAZ.js.map +1 -0
  158. package/build/server/chunks/{IconServer-C5rdlJAr.js → IconServer-DkywyVFu.js} +5 -5
  159. package/build/server/chunks/{IconServer-C5rdlJAr.js.map → IconServer-DkywyVFu.js.map} +1 -1
  160. package/build/server/chunks/{IconSoundOn-DHtvjphK.js → IconSoundOn-DoAiK-qp.js} +23 -21
  161. package/build/server/chunks/IconSoundOn-DoAiK-qp.js.map +1 -0
  162. package/build/server/chunks/IconStop-DKVpXPKq.js +1648 -0
  163. package/build/server/chunks/IconStop-DKVpXPKq.js.map +1 -0
  164. package/build/server/chunks/QuestionCard-BCfoxMiS.js +128 -0
  165. package/build/server/chunks/QuestionCard-BCfoxMiS.js.map +1 -0
  166. package/build/server/chunks/{_layout.svelte-BLxvGwKC.js → _layout.svelte-DArOWGd3.js} +3 -3
  167. package/build/server/chunks/{_layout.svelte-BLxvGwKC.js.map → _layout.svelte-DArOWGd3.js.map} +1 -1
  168. package/build/server/chunks/{_page.svelte-BOwGlCzD.js → _page.svelte-B2cX_j9w.js} +3 -3
  169. package/build/server/chunks/{_page.svelte-BOwGlCzD.js.map → _page.svelte-B2cX_j9w.js.map} +1 -1
  170. package/build/server/chunks/{_page.svelte--MC2pNDj.js → _page.svelte-BcpGl-vl.js} +16 -20
  171. package/build/server/chunks/_page.svelte-BcpGl-vl.js.map +1 -0
  172. package/build/server/chunks/_page.svelte-CGEtuNmS.js +192 -0
  173. package/build/server/chunks/_page.svelte-CGEtuNmS.js.map +1 -0
  174. package/build/server/chunks/{_page.svelte-f3XZxZcO.js → _page.svelte-Dpf94Jor.js} +3 -3
  175. package/build/server/chunks/{_page.svelte-f3XZxZcO.js.map → _page.svelte-Dpf94Jor.js.map} +1 -1
  176. package/build/server/chunks/{_page.svelte-BT81Bwrh.js → _page.svelte-FOm-OMQe.js} +6 -6
  177. package/build/server/chunks/_page.svelte-FOm-OMQe.js.map +1 -0
  178. package/build/server/chunks/{_page.svelte-BdH2kpT0.js → _page.svelte-S90xJHRa.js} +96 -203
  179. package/build/server/chunks/_page.svelte-S90xJHRa.js.map +1 -0
  180. package/build/server/chunks/{_page.svelte-BnV94Ogu.js → _page.svelte-qxgG6hsh.js} +20 -45
  181. package/build/server/chunks/_page.svelte-qxgG6hsh.js.map +1 -0
  182. package/build/server/chunks/{_server.ts-B12WIhKW.js → _server.ts--F22byeV.js} +28 -24
  183. package/build/server/chunks/_server.ts--F22byeV.js.map +1 -0
  184. package/build/server/chunks/{_server.ts-D_NDxdhC.js → _server.ts-08JCSzPu.js} +61 -59
  185. package/build/server/chunks/_server.ts-08JCSzPu.js.map +1 -0
  186. package/build/server/chunks/{_server.ts-D6UMAxY5.js → _server.ts-3bBG0DBN.js} +8 -7
  187. package/build/server/chunks/{_server.ts-D6UMAxY5.js.map → _server.ts-3bBG0DBN.js.map} +1 -1
  188. package/build/server/chunks/{_server.ts-COHW_bIw.js → _server.ts-7pcCO8Pf.js} +9 -8
  189. package/build/server/chunks/{_server.ts-COHW_bIw.js.map → _server.ts-7pcCO8Pf.js.map} +1 -1
  190. package/build/server/chunks/{_server.ts-Z6bcCFE1.js → _server.ts-AC1zqetQ.js} +4 -3
  191. package/build/server/chunks/{_server.ts-Z6bcCFE1.js.map → _server.ts-AC1zqetQ.js.map} +1 -1
  192. package/build/server/chunks/{_server.ts-CN26zawm.js → _server.ts-B-uAgtQC.js} +8 -7
  193. package/build/server/chunks/{_server.ts-CN26zawm.js.map → _server.ts-B-uAgtQC.js.map} +1 -1
  194. package/build/server/chunks/{_server.ts-Dg2Gkcbx.js → _server.ts-B0MK-ynu.js} +11 -16
  195. package/build/server/chunks/_server.ts-B0MK-ynu.js.map +1 -0
  196. package/build/server/chunks/{_server.ts-DIB4OM3y.js → _server.ts-B1vQkdVA.js} +10 -9
  197. package/build/server/chunks/{_server.ts-DIB4OM3y.js.map → _server.ts-B1vQkdVA.js.map} +1 -1
  198. package/build/server/chunks/{_server.ts-DC1tK0yE.js → _server.ts-B3iKXyUo.js} +8 -7
  199. package/build/server/chunks/{_server.ts-DC1tK0yE.js.map → _server.ts-B3iKXyUo.js.map} +1 -1
  200. package/build/server/chunks/{_server.ts-DsfNtE_I.js → _server.ts-B7319d6O.js} +8 -7
  201. package/build/server/chunks/{_server.ts-DsfNtE_I.js.map → _server.ts-B7319d6O.js.map} +1 -1
  202. package/build/server/chunks/{_server.ts-DNzhPgX5.js → _server.ts-BCpQ8Qdr.js} +8 -7
  203. package/build/server/chunks/{_server.ts-DNzhPgX5.js.map → _server.ts-BCpQ8Qdr.js.map} +1 -1
  204. package/build/server/chunks/{_server.ts-DojcmGfa.js → _server.ts-BF5JzSrs.js} +8 -7
  205. package/build/server/chunks/{_server.ts-DojcmGfa.js.map → _server.ts-BF5JzSrs.js.map} +1 -1
  206. package/build/server/chunks/{_server.ts-Ddf5c75T.js → _server.ts-BGTw6w-C.js} +11 -10
  207. package/build/server/chunks/_server.ts-BGTw6w-C.js.map +1 -0
  208. package/build/server/chunks/{_server.ts-CoA6nB9c.js → _server.ts-BH8Y1mmb.js} +6 -5
  209. package/build/server/chunks/{_server.ts-CoA6nB9c.js.map → _server.ts-BH8Y1mmb.js.map} +1 -1
  210. package/build/server/chunks/{_server.ts-McJwsQRP.js → _server.ts-BHaFrgm9.js} +9 -8
  211. package/build/server/chunks/{_server.ts-McJwsQRP.js.map → _server.ts-BHaFrgm9.js.map} +1 -1
  212. package/build/server/chunks/{_server.ts-CLyMgmaf.js → _server.ts-BKnCIXe5.js} +8 -7
  213. package/build/server/chunks/{_server.ts-CLyMgmaf.js.map → _server.ts-BKnCIXe5.js.map} +1 -1
  214. package/build/server/chunks/{_server.ts-KVrYcUOG.js → _server.ts-BOn4TCRw.js} +9 -8
  215. package/build/server/chunks/{_server.ts-KVrYcUOG.js.map → _server.ts-BOn4TCRw.js.map} +1 -1
  216. package/build/server/chunks/{_server.ts-Bba4knHI.js → _server.ts-BS4UTF4H.js} +8 -7
  217. package/build/server/chunks/{_server.ts-Bba4knHI.js.map → _server.ts-BS4UTF4H.js.map} +1 -1
  218. package/build/server/chunks/{_server.ts-Drhyf5o4.js → _server.ts-BWMJRzwx.js} +10 -9
  219. package/build/server/chunks/_server.ts-BWMJRzwx.js.map +1 -0
  220. package/build/server/chunks/{_server.ts-BfTFlPSX.js → _server.ts-B_7lGoo_.js} +8 -7
  221. package/build/server/chunks/{_server.ts-BfTFlPSX.js.map → _server.ts-B_7lGoo_.js.map} +1 -1
  222. package/build/server/chunks/{_server.ts-DrWTucF0.js → _server.ts-BaEUZaLH.js} +6 -5
  223. package/build/server/chunks/{_server.ts-DrWTucF0.js.map → _server.ts-BaEUZaLH.js.map} +1 -1
  224. package/build/server/chunks/{_server.ts-DswOp5MZ.js → _server.ts-BgL3_hTS.js} +9 -8
  225. package/build/server/chunks/{_server.ts-DswOp5MZ.js.map → _server.ts-BgL3_hTS.js.map} +1 -1
  226. package/build/server/chunks/{_server.ts-qkGGHj13.js → _server.ts-BgOS_sDK.js} +9 -8
  227. package/build/server/chunks/{_server.ts-qkGGHj13.js.map → _server.ts-BgOS_sDK.js.map} +1 -1
  228. package/build/server/chunks/{_server.ts-CYEiMdP-.js → _server.ts-BhA9ywuA.js} +8 -7
  229. package/build/server/chunks/{_server.ts-CYEiMdP-.js.map → _server.ts-BhA9ywuA.js.map} +1 -1
  230. package/build/server/chunks/{_server.ts-DPtqK0c2.js → _server.ts-BtZ9-ZYu.js} +4 -3
  231. package/build/server/chunks/{_server.ts-DPtqK0c2.js.map → _server.ts-BtZ9-ZYu.js.map} +1 -1
  232. package/build/server/chunks/{_server.ts-BjjNc0OV.js → _server.ts-C4tBc7fm.js} +11 -10
  233. package/build/server/chunks/{_server.ts-BjjNc0OV.js.map → _server.ts-C4tBc7fm.js.map} +1 -1
  234. package/build/server/chunks/{_server.ts-WfJI8r0e.js → _server.ts-C5T_Zuoy.js} +16 -15
  235. package/build/server/chunks/_server.ts-C5T_Zuoy.js.map +1 -0
  236. package/build/server/chunks/{_server.ts-BuByt6I7.js → _server.ts-CCTZbI7L.js} +9 -8
  237. package/build/server/chunks/{_server.ts-BuByt6I7.js.map → _server.ts-CCTZbI7L.js.map} +1 -1
  238. package/build/server/chunks/{_server.ts-DZ3Yyeac.js → _server.ts-CEUFtmpE.js} +26 -18
  239. package/build/server/chunks/_server.ts-CEUFtmpE.js.map +1 -0
  240. package/build/server/chunks/{_server.ts-CZluUZ23.js → _server.ts-CFKGqT4L.js} +8 -7
  241. package/build/server/chunks/{_server.ts-CZluUZ23.js.map → _server.ts-CFKGqT4L.js.map} +1 -1
  242. package/build/server/chunks/{_server.ts-CR1fXUx_.js → _server.ts-CLMsuxkK.js} +8 -7
  243. package/build/server/chunks/{_server.ts-CR1fXUx_.js.map → _server.ts-CLMsuxkK.js.map} +1 -1
  244. package/build/server/chunks/{_server.ts-sD2USOMT.js → _server.ts-CMfz71Do.js} +8 -7
  245. package/build/server/chunks/{_server.ts-sD2USOMT.js.map → _server.ts-CMfz71Do.js.map} +1 -1
  246. package/build/server/chunks/{_server.ts-CQ9bUgsb.js → _server.ts-CQeqwCqj.js} +8 -7
  247. package/build/server/chunks/{_server.ts-CQ9bUgsb.js.map → _server.ts-CQeqwCqj.js.map} +1 -1
  248. package/build/server/chunks/{_server.ts-rBPifh0g.js → _server.ts-CSBd_6yC.js} +9 -8
  249. package/build/server/chunks/{_server.ts-rBPifh0g.js.map → _server.ts-CSBd_6yC.js.map} +1 -1
  250. package/build/server/chunks/_server.ts-CSYdjKAH.js +73 -0
  251. package/build/server/chunks/_server.ts-CSYdjKAH.js.map +1 -0
  252. package/build/server/chunks/{_server.ts-DfMcCjcV.js → _server.ts-CY-GNKZT.js} +8 -7
  253. package/build/server/chunks/{_server.ts-DfMcCjcV.js.map → _server.ts-CY-GNKZT.js.map} +1 -1
  254. package/build/server/chunks/{_server.ts-CvL5DtEE.js → _server.ts-CYu5XSM8.js} +8 -7
  255. package/build/server/chunks/{_server.ts-CvL5DtEE.js.map → _server.ts-CYu5XSM8.js.map} +1 -1
  256. package/build/server/chunks/{_server.ts-B8RJmRP7.js → _server.ts-CjeMP5Vf.js} +9 -8
  257. package/build/server/chunks/_server.ts-CjeMP5Vf.js.map +1 -0
  258. package/build/server/chunks/{_server.ts-c6ytwkWX.js → _server.ts-Cjo35hc1.js} +8 -7
  259. package/build/server/chunks/{_server.ts-c6ytwkWX.js.map → _server.ts-Cjo35hc1.js.map} +1 -1
  260. package/build/server/chunks/{_server.ts-C4cnIzbb.js → _server.ts-CkVeEW46.js} +8 -7
  261. package/build/server/chunks/{_server.ts-C4cnIzbb.js.map → _server.ts-CkVeEW46.js.map} +1 -1
  262. package/build/server/chunks/{_server.ts-CkJ2MAlY.js → _server.ts-Cph8nHvr.js} +8 -7
  263. package/build/server/chunks/{_server.ts-CkJ2MAlY.js.map → _server.ts-Cph8nHvr.js.map} +1 -1
  264. package/build/server/chunks/_server.ts-CpyfojV9.js +83 -0
  265. package/build/server/chunks/_server.ts-CpyfojV9.js.map +1 -0
  266. package/build/server/chunks/{_server.ts-CYhI4sCU.js → _server.ts-CtkA_Ld0.js} +20 -14
  267. package/build/server/chunks/_server.ts-CtkA_Ld0.js.map +1 -0
  268. package/build/server/chunks/{_server.ts-DKtsPlqI.js → _server.ts-Cu48eVwM.js} +4 -3
  269. package/build/server/chunks/{_server.ts-DKtsPlqI.js.map → _server.ts-Cu48eVwM.js.map} +1 -1
  270. package/build/server/chunks/{_server.ts-BWdKIMmK.js → _server.ts-CvjVUcFR.js} +8 -7
  271. package/build/server/chunks/_server.ts-CvjVUcFR.js.map +1 -0
  272. package/build/server/chunks/{_server.ts-Cifj-9A3.js → _server.ts-CxH-7UEc.js} +8 -7
  273. package/build/server/chunks/{_server.ts-Cifj-9A3.js.map → _server.ts-CxH-7UEc.js.map} +1 -1
  274. package/build/server/chunks/{_server.ts-CDC5Za0f.js → _server.ts-D0XsGdhx.js} +8 -7
  275. package/build/server/chunks/{_server.ts-CDC5Za0f.js.map → _server.ts-D0XsGdhx.js.map} +1 -1
  276. package/build/server/chunks/_server.ts-D6-C5ctd.js +110 -0
  277. package/build/server/chunks/_server.ts-D6-C5ctd.js.map +1 -0
  278. package/build/server/chunks/{_server.ts-HoP6PRwU.js → _server.ts-DQI9hYcE.js} +8 -7
  279. package/build/server/chunks/{_server.ts-HoP6PRwU.js.map → _server.ts-DQI9hYcE.js.map} +1 -1
  280. package/build/server/chunks/{_server.ts-B01LeWfv.js → _server.ts-DQTJ_bFp.js} +9 -8
  281. package/build/server/chunks/{_server.ts-B01LeWfv.js.map → _server.ts-DQTJ_bFp.js.map} +1 -1
  282. package/build/server/chunks/{_server.ts-B6IuU4lX.js → _server.ts-DR0kmbl9.js} +9 -8
  283. package/build/server/chunks/_server.ts-DR0kmbl9.js.map +1 -0
  284. package/build/server/chunks/{_server.ts-Bx5L70N3.js → _server.ts-DR_9WXW4.js} +10 -9
  285. package/build/server/chunks/{_server.ts-Bx5L70N3.js.map → _server.ts-DR_9WXW4.js.map} +1 -1
  286. package/build/server/chunks/{_server.ts-Dv1LAL-L.js → _server.ts-DXwG4w1_.js} +6 -6
  287. package/build/server/chunks/_server.ts-DXwG4w1_.js.map +1 -0
  288. package/build/server/chunks/{_server.ts-CnmdgRQ5.js → _server.ts-DYLc6Os9.js} +8 -7
  289. package/build/server/chunks/{_server.ts-CnmdgRQ5.js.map → _server.ts-DYLc6Os9.js.map} +1 -1
  290. package/build/server/chunks/{_server.ts-BTQPdIRj.js → _server.ts-DYg52Wyj.js} +8 -7
  291. package/build/server/chunks/{_server.ts-BTQPdIRj.js.map → _server.ts-DYg52Wyj.js.map} +1 -1
  292. package/build/server/chunks/{_server.ts-BjfWddPf.js → _server.ts-Dc1s3sLN.js} +10 -9
  293. package/build/server/chunks/_server.ts-Dc1s3sLN.js.map +1 -0
  294. package/build/server/chunks/{_server.ts-ClGBdG69.js → _server.ts-DcpOpD6s.js} +8 -7
  295. package/build/server/chunks/{_server.ts-ClGBdG69.js.map → _server.ts-DcpOpD6s.js.map} +1 -1
  296. package/build/server/chunks/{_server.ts-DdL9GP2B.js → _server.ts-DeuURP8u.js} +8 -7
  297. package/build/server/chunks/{_server.ts-DdL9GP2B.js.map → _server.ts-DeuURP8u.js.map} +1 -1
  298. package/build/server/chunks/{_server.ts-B_uD0GmU.js → _server.ts-DhcBS9KQ.js} +8 -7
  299. package/build/server/chunks/{_server.ts-B_uD0GmU.js.map → _server.ts-DhcBS9KQ.js.map} +1 -1
  300. package/build/server/chunks/{_server.ts-D7hUSvgG.js → _server.ts-DlKT-RbM.js} +11 -16
  301. package/build/server/chunks/_server.ts-DlKT-RbM.js.map +1 -0
  302. package/build/server/chunks/{_server.ts-z7K-ZCVq.js → _server.ts-DuO_GU5A.js} +8 -7
  303. package/build/server/chunks/{_server.ts-z7K-ZCVq.js.map → _server.ts-DuO_GU5A.js.map} +1 -1
  304. package/build/server/chunks/{_server.ts-ByTth5Q4.js → _server.ts-DvUVX3X0.js} +9 -8
  305. package/build/server/chunks/{_server.ts-ByTth5Q4.js.map → _server.ts-DvUVX3X0.js.map} +1 -1
  306. package/build/server/chunks/{_server.ts-eYI_yBAq.js → _server.ts-DvfnkNfI.js} +9 -8
  307. package/build/server/chunks/{_server.ts-eYI_yBAq.js.map → _server.ts-DvfnkNfI.js.map} +1 -1
  308. package/build/server/chunks/{_server.ts-CQGc6Rzk.js → _server.ts-DzV6EO26.js} +8 -7
  309. package/build/server/chunks/{_server.ts-CQGc6Rzk.js.map → _server.ts-DzV6EO26.js.map} +1 -1
  310. package/build/server/chunks/{_server.ts-CV7PsNSs.js → _server.ts-IEM_8o6U.js} +17 -12
  311. package/build/server/chunks/_server.ts-IEM_8o6U.js.map +1 -0
  312. package/build/server/chunks/{_server.ts-BnCHdcon.js → _server.ts-N_mH0t0f.js} +13 -13
  313. package/build/server/chunks/_server.ts-N_mH0t0f.js.map +1 -0
  314. package/build/server/chunks/{_server.ts-C7R2xQ_O.js → _server.ts-Y5pBzFz4.js} +8 -7
  315. package/build/server/chunks/{_server.ts-C7R2xQ_O.js.map → _server.ts-Y5pBzFz4.js.map} +1 -1
  316. package/build/server/chunks/{_server.ts-BG1nkyV5.js → _server.ts-ZKEBn-qW.js} +10 -9
  317. package/build/server/chunks/{_server.ts-BG1nkyV5.js.map → _server.ts-ZKEBn-qW.js.map} +1 -1
  318. package/build/server/chunks/{_server.ts-CqLbFV6m.js → _server.ts-fenM6Iln.js} +26 -22
  319. package/build/server/chunks/_server.ts-fenM6Iln.js.map +1 -0
  320. package/build/server/chunks/{_server.ts-BbxUaG2z.js → _server.ts-i9TaUbWr.js} +30 -10
  321. package/build/server/chunks/_server.ts-i9TaUbWr.js.map +1 -0
  322. package/build/server/chunks/{_server.ts-A_jvsf54.js → _server.ts-iXjPBf7J.js} +16 -15
  323. package/build/server/chunks/_server.ts-iXjPBf7J.js.map +1 -0
  324. package/build/server/chunks/{_server.ts-BvPCnwm4.js → _server.ts-jqktLs6L.js} +8 -7
  325. package/build/server/chunks/{_server.ts-BvPCnwm4.js.map → _server.ts-jqktLs6L.js.map} +1 -1
  326. package/build/server/chunks/{_server.ts-Cg9mKyvd.js → _server.ts-oSGbQw4A.js} +8 -7
  327. package/build/server/chunks/_server.ts-oSGbQw4A.js.map +1 -0
  328. package/build/server/chunks/{_server.ts-DrdVm_2l.js → _server.ts-pf6WrGLo.js} +9 -8
  329. package/build/server/chunks/{_server.ts-DrdVm_2l.js.map → _server.ts-pf6WrGLo.js.map} +1 -1
  330. package/build/server/chunks/{_server.ts-BAdTYKi0.js → _server.ts-v3cF2xWi.js} +8 -7
  331. package/build/server/chunks/{_server.ts-BAdTYKi0.js.map → _server.ts-v3cF2xWi.js.map} +1 -1
  332. package/build/server/chunks/{_server.ts-B0oC8HQF.js → _server.ts-vJBq3idp.js} +4 -3
  333. package/build/server/chunks/{_server.ts-B0oC8HQF.js.map → _server.ts-vJBq3idp.js.map} +1 -1
  334. package/build/server/chunks/{_server.ts-oDtZo8YM.js → _server.ts-vlaPk3to.js} +8 -7
  335. package/build/server/chunks/{_server.ts-oDtZo8YM.js.map → _server.ts-vlaPk3to.js.map} +1 -1
  336. package/build/server/chunks/{_server.ts-CGX-Vd-3.js → _server.ts-xQhNjF_X.js} +8 -7
  337. package/build/server/chunks/{_server.ts-CGX-Vd-3.js.map → _server.ts-xQhNjF_X.js.map} +1 -1
  338. package/build/server/chunks/_server.ts-yZ8CGJNE.js +82 -0
  339. package/build/server/chunks/_server.ts-yZ8CGJNE.js.map +1 -0
  340. package/build/server/chunks/{_server.ts-DMxAUnDp.js → _server.ts-z5C3PAAB.js} +4 -3
  341. package/build/server/chunks/{_server.ts-DMxAUnDp.js.map → _server.ts-z5C3PAAB.js.map} +1 -1
  342. package/build/server/chunks/{_server.ts-CHBfflb0.js → _server.ts-zt3yI2wU.js} +8 -7
  343. package/build/server/chunks/{_server.ts-CHBfflb0.js.map → _server.ts-zt3yI2wU.js.map} +1 -1
  344. package/build/server/chunks/{addon-helpers-CkCisYhs.js → addon-helpers-B7bkHg-K.js} +18 -5
  345. package/build/server/chunks/addon-helpers-B7bkHg-K.js.map +1 -0
  346. package/build/server/chunks/admin-update-lock-B-z4UE8R.js +24 -0
  347. package/build/server/chunks/admin-update-lock-B-z4UE8R.js.map +1 -0
  348. package/build/server/chunks/{akm-Dv9-jfkS.js → akm-C4NCZfJB.js} +3 -3
  349. package/build/server/chunks/{akm-Dv9-jfkS.js.map → akm-C4NCZfJB.js.map} +1 -1
  350. package/build/server/chunks/{catalog-CilTg0Ck.js → catalog-Czlhb_2V.js} +5 -5
  351. package/build/server/chunks/{catalog-CilTg0Ck.js.map → catalog-Czlhb_2V.js.map} +1 -1
  352. package/build/server/chunks/{client-wd3mkq4X.js → client-HEAniq5u.js} +2 -2
  353. package/build/server/chunks/{client-wd3mkq4X.js.map → client-HEAniq5u.js.map} +1 -1
  354. package/build/server/chunks/{compose-args2-Ccr5RMHS.js → compose-args2-B1cYvF5r.js} +4 -3
  355. package/build/server/chunks/compose-args2-B1cYvF5r.js.map +1 -0
  356. package/build/server/chunks/{config-C_XJx8-D.js → config-C15S-ENd.js} +2 -2
  357. package/build/server/chunks/{config-C_XJx8-D.js.map → config-C15S-ENd.js.map} +1 -1
  358. package/build/server/chunks/{constants-1vPYIIwP.js → constants-C8L-P-CF.js} +2 -2
  359. package/build/server/chunks/{constants-1vPYIIwP.js.map → constants-C8L-P-CF.js.map} +1 -1
  360. package/build/server/chunks/dist-DtzrgNJ1.js +6617 -0
  361. package/build/server/chunks/dist-DtzrgNJ1.js.map +1 -0
  362. package/build/server/chunks/{docker2-BL8hjShD.js → docker2-CF7qyd1U.js} +4 -3
  363. package/build/server/chunks/docker2-CF7qyd1U.js.map +1 -0
  364. package/build/server/chunks/{docker3-TVLvF3ly.js → docker3-BsPagEza.js} +2 -2
  365. package/build/server/chunks/{docker3-TVLvF3ly.js.map → docker3-BsPagEza.js.map} +1 -1
  366. package/build/server/chunks/environment-BYp8JQYM.js.map +1 -1
  367. package/build/server/chunks/{error.svelte-BI8mJm7r.js → error.svelte-C-lukbaB.js} +4 -4
  368. package/build/server/chunks/{error.svelte-BI8mJm7r.js.map → error.svelte-C-lukbaB.js.map} +1 -1
  369. package/build/server/chunks/features-DltizIi4.js +79 -0
  370. package/build/server/chunks/features-DltizIi4.js.map +1 -0
  371. package/build/server/chunks/{helpers-9U7R7yqL.js → helpers-DWpoPvHz.js} +17 -22
  372. package/build/server/chunks/helpers-DWpoPvHz.js.map +1 -0
  373. package/build/server/chunks/{hooks.server-Bog01Hsc.js → hooks.server-BcdEyWVU.js} +13 -12
  374. package/build/server/chunks/hooks.server-BcdEyWVU.js.map +1 -0
  375. package/build/server/chunks/{http-D2Aul-FP.js → http-7E5W3vGt.js} +3 -3
  376. package/build/server/chunks/http-7E5W3vGt.js.map +1 -0
  377. package/build/server/chunks/{internal-DbH28JEx.js → internal-BNSUwl-r.js} +10 -8
  378. package/build/server/chunks/{internal-DbH28JEx.js.map → internal-BNSUwl-r.js.map} +1 -1
  379. package/build/server/chunks/{landing-CMnmbyhs.js → landing-DY53l_CN.js} +10 -12
  380. package/build/server/chunks/landing-DY53l_CN.js.map +1 -0
  381. package/build/server/chunks/{network-preset-CJ1RRnki.js → network-preset-BvVAoagy.js} +14 -13
  382. package/build/server/chunks/network-preset-BvVAoagy.js.map +1 -0
  383. package/build/server/chunks/opencode-target-DYD2zQ4l.js +203 -0
  384. package/build/server/chunks/opencode-target-DYD2zQ4l.js.map +1 -0
  385. package/build/server/chunks/{paths-CADLTBzK.js → paths-BVdkvR9U.js} +2 -2
  386. package/build/server/chunks/{paths-CADLTBzK.js.map → paths-BVdkvR9U.js.map} +1 -1
  387. package/build/server/chunks/{runtime-context.svelte-C5zNEC6u.js → runtime-context.svelte-CRT-b6Ae.js} +8 -11
  388. package/build/server/chunks/runtime-context.svelte-CRT-b6Ae.js.map +1 -0
  389. package/build/server/chunks/{session-cookie-9GKSbczI.js → session-cookie-D2_H1UEW.js} +2 -2
  390. package/build/server/chunks/{session-cookie-9GKSbczI.js.map → session-cookie-D2_H1UEW.js.map} +1 -1
  391. package/build/server/chunks/{setup-deploy-32URXYdb.js → setup-deploy-C1h733rH.js} +2 -2
  392. package/build/server/chunks/{setup-deploy-32URXYdb.js.map → setup-deploy-C1h733rH.js.map} +1 -1
  393. package/build/server/chunks/{src-AHSKeKr0.js → src-B2-r_9oB.js} +531 -7088
  394. package/build/server/chunks/src-B2-r_9oB.js.map +1 -0
  395. package/build/server/chunks/{state-CzXOEt0t.js → state-Dkjz2T4C.js} +2 -2
  396. package/build/server/chunks/{state-CzXOEt0t.js.map → state-Dkjz2T4C.js.map} +1 -1
  397. package/build/server/chunks/{state2-Dk2nfhFB.js → state2-CS9rhust.js} +17 -2
  398. package/build/server/chunks/{state2-Dk2nfhFB.js.map → state2-CS9rhust.js.map} +1 -1
  399. package/build/server/chunks/voice-state.svelte-CSmyLPRH.js +561 -0
  400. package/build/server/chunks/voice-state.svelte-CSmyLPRH.js.map +1 -0
  401. package/build/server/index.js +1 -1
  402. package/build/server/manifest.js +94 -129
  403. package/build/server/manifest.js.map +1 -1
  404. package/package.json +3 -3
  405. package/build/client/_app/immutable/assets/4.BXlLAfIE.css +0 -1
  406. package/build/client/_app/immutable/assets/4.BXlLAfIE.css.br +0 -0
  407. package/build/client/_app/immutable/assets/4.BXlLAfIE.css.gz +0 -0
  408. package/build/client/_app/immutable/assets/6.D_kTgQ70.css +0 -1
  409. package/build/client/_app/immutable/assets/6.D_kTgQ70.css.br +0 -0
  410. package/build/client/_app/immutable/assets/6.D_kTgQ70.css.gz +0 -0
  411. package/build/client/_app/immutable/assets/7.CNzyzDDZ.css +0 -1
  412. package/build/client/_app/immutable/assets/7.CNzyzDDZ.css.br +0 -0
  413. package/build/client/_app/immutable/assets/7.CNzyzDDZ.css.gz +0 -0
  414. package/build/client/_app/immutable/assets/9.DeeTO7Ju.css +0 -1
  415. package/build/client/_app/immutable/assets/9.DeeTO7Ju.css.br +0 -0
  416. package/build/client/_app/immutable/assets/9.DeeTO7Ju.css.gz +0 -0
  417. package/build/client/_app/immutable/chunks/B0yXlM3K.js +0 -1
  418. package/build/client/_app/immutable/chunks/B0yXlM3K.js.br +0 -0
  419. package/build/client/_app/immutable/chunks/B0yXlM3K.js.gz +0 -0
  420. package/build/client/_app/immutable/chunks/BDK50g8a.js.br +0 -0
  421. package/build/client/_app/immutable/chunks/BDK50g8a.js.gz +0 -0
  422. package/build/client/_app/immutable/chunks/BlYj4BBX.js +0 -1
  423. package/build/client/_app/immutable/chunks/BlYj4BBX.js.br +0 -0
  424. package/build/client/_app/immutable/chunks/BlYj4BBX.js.gz +0 -0
  425. package/build/client/_app/immutable/chunks/Bz3r0btw.js +0 -3
  426. package/build/client/_app/immutable/chunks/Bz3r0btw.js.br +0 -0
  427. package/build/client/_app/immutable/chunks/Bz3r0btw.js.gz +0 -0
  428. package/build/client/_app/immutable/chunks/BzIvC31O.js +0 -3
  429. package/build/client/_app/immutable/chunks/BzIvC31O.js.br +0 -0
  430. package/build/client/_app/immutable/chunks/BzIvC31O.js.gz +0 -0
  431. package/build/client/_app/immutable/chunks/C718MJXm.js +0 -5
  432. package/build/client/_app/immutable/chunks/C718MJXm.js.br +0 -0
  433. package/build/client/_app/immutable/chunks/C718MJXm.js.gz +0 -0
  434. package/build/client/_app/immutable/chunks/CBM1fLGu.js +0 -1
  435. package/build/client/_app/immutable/chunks/CBM1fLGu.js.br +0 -0
  436. package/build/client/_app/immutable/chunks/CBM1fLGu.js.gz +0 -0
  437. package/build/client/_app/immutable/chunks/CUa5ff3d.js.br +0 -0
  438. package/build/client/_app/immutable/chunks/CUa5ff3d.js.gz +0 -0
  439. package/build/client/_app/immutable/chunks/D5FtEngX.js.br +0 -0
  440. package/build/client/_app/immutable/chunks/D5FtEngX.js.gz +0 -0
  441. package/build/client/_app/immutable/chunks/DBHgGGCD.js +0 -1
  442. package/build/client/_app/immutable/chunks/DBHgGGCD.js.br +0 -0
  443. package/build/client/_app/immutable/chunks/DBHgGGCD.js.gz +0 -0
  444. package/build/client/_app/immutable/chunks/DPYXdJcD.js +0 -1
  445. package/build/client/_app/immutable/chunks/DPYXdJcD.js.br +0 -2
  446. package/build/client/_app/immutable/chunks/DPYXdJcD.js.gz +0 -0
  447. package/build/client/_app/immutable/chunks/DWtm_qwJ.js +0 -3
  448. package/build/client/_app/immutable/chunks/DWtm_qwJ.js.br +0 -0
  449. package/build/client/_app/immutable/chunks/DWtm_qwJ.js.gz +0 -0
  450. package/build/client/_app/immutable/chunks/DfZbBavE.js +0 -1
  451. package/build/client/_app/immutable/chunks/DfZbBavE.js.br +0 -1
  452. package/build/client/_app/immutable/chunks/DfZbBavE.js.gz +0 -0
  453. package/build/client/_app/immutable/chunks/DmFbAjwW.js.br +0 -3
  454. package/build/client/_app/immutable/chunks/DmFbAjwW.js.gz +0 -0
  455. package/build/client/_app/immutable/chunks/NR-JVJz-.js.br +0 -0
  456. package/build/client/_app/immutable/chunks/NR-JVJz-.js.gz +0 -0
  457. package/build/client/_app/immutable/chunks/R6GPcDBF.js +0 -14
  458. package/build/client/_app/immutable/chunks/R6GPcDBF.js.br +0 -0
  459. package/build/client/_app/immutable/chunks/R6GPcDBF.js.gz +0 -0
  460. package/build/client/_app/immutable/chunks/SXdvPq3_.js.br +0 -0
  461. package/build/client/_app/immutable/chunks/SXdvPq3_.js.gz +0 -0
  462. package/build/client/_app/immutable/chunks/c0lkYAgh.js +0 -5
  463. package/build/client/_app/immutable/chunks/c0lkYAgh.js.br +0 -0
  464. package/build/client/_app/immutable/chunks/c0lkYAgh.js.gz +0 -0
  465. package/build/client/_app/immutable/chunks/hSjQday7.js.br +0 -0
  466. package/build/client/_app/immutable/chunks/hSjQday7.js.gz +0 -0
  467. package/build/client/_app/immutable/chunks/mG6HnNbi.js.br +0 -0
  468. package/build/client/_app/immutable/chunks/mG6HnNbi.js.gz +0 -0
  469. package/build/client/_app/immutable/entry/app.FbKd4aR6.js +0 -2
  470. package/build/client/_app/immutable/entry/app.FbKd4aR6.js.br +0 -0
  471. package/build/client/_app/immutable/entry/app.FbKd4aR6.js.gz +0 -0
  472. package/build/client/_app/immutable/entry/start.VEjfH6IP.js +0 -1
  473. package/build/client/_app/immutable/entry/start.VEjfH6IP.js.br +0 -1
  474. package/build/client/_app/immutable/entry/start.VEjfH6IP.js.gz +0 -0
  475. package/build/client/_app/immutable/nodes/0.mcDF2Cfv.js +0 -1
  476. package/build/client/_app/immutable/nodes/0.mcDF2Cfv.js.br +0 -0
  477. package/build/client/_app/immutable/nodes/0.mcDF2Cfv.js.gz +0 -0
  478. package/build/client/_app/immutable/nodes/1.B_hGEgef.js +0 -1
  479. package/build/client/_app/immutable/nodes/1.B_hGEgef.js.br +0 -0
  480. package/build/client/_app/immutable/nodes/1.B_hGEgef.js.gz +0 -0
  481. package/build/client/_app/immutable/nodes/10.B8xmblvj.js +0 -1
  482. package/build/client/_app/immutable/nodes/10.B8xmblvj.js.br +0 -0
  483. package/build/client/_app/immutable/nodes/10.B8xmblvj.js.gz +0 -0
  484. package/build/client/_app/immutable/nodes/11.Ti2X5F-7.js.br +0 -0
  485. package/build/client/_app/immutable/nodes/11.Ti2X5F-7.js.gz +0 -0
  486. package/build/client/_app/immutable/nodes/2.C-PzaHZx.js +0 -1
  487. package/build/client/_app/immutable/nodes/2.C-PzaHZx.js.br +0 -0
  488. package/build/client/_app/immutable/nodes/2.C-PzaHZx.js.gz +0 -0
  489. package/build/client/_app/immutable/nodes/3.26Z_fr6N.js +0 -1
  490. package/build/client/_app/immutable/nodes/3.26Z_fr6N.js.br +0 -0
  491. package/build/client/_app/immutable/nodes/3.26Z_fr6N.js.gz +0 -0
  492. package/build/client/_app/immutable/nodes/4.X5um5v0F.js +0 -1
  493. package/build/client/_app/immutable/nodes/4.X5um5v0F.js.br +0 -0
  494. package/build/client/_app/immutable/nodes/4.X5um5v0F.js.gz +0 -0
  495. package/build/client/_app/immutable/nodes/5.CNMS0qgk.js.br +0 -0
  496. package/build/client/_app/immutable/nodes/5.CNMS0qgk.js.gz +0 -0
  497. package/build/client/_app/immutable/nodes/6.PLWojxHU.js +0 -2
  498. package/build/client/_app/immutable/nodes/6.PLWojxHU.js.br +0 -0
  499. package/build/client/_app/immutable/nodes/6.PLWojxHU.js.gz +0 -0
  500. package/build/client/_app/immutable/nodes/7.Bba4nkVZ.js +0 -14
  501. package/build/client/_app/immutable/nodes/7.Bba4nkVZ.js.br +0 -0
  502. package/build/client/_app/immutable/nodes/7.Bba4nkVZ.js.gz +0 -0
  503. package/build/client/_app/immutable/nodes/8.NHp_bSVx.js +0 -1
  504. package/build/client/_app/immutable/nodes/8.NHp_bSVx.js.br +0 -0
  505. package/build/client/_app/immutable/nodes/8.NHp_bSVx.js.gz +0 -0
  506. package/build/client/_app/immutable/nodes/9.nlW01gWY.js +0 -126
  507. package/build/client/_app/immutable/nodes/9.nlW01gWY.js.br +0 -0
  508. package/build/client/_app/immutable/nodes/9.nlW01gWY.js.gz +0 -0
  509. package/build/server/chunks/1-BscBEom6.js +0 -9
  510. package/build/server/chunks/11-DSzQavEB.js +0 -9
  511. package/build/server/chunks/3-t-iZh03o.js.map +0 -1
  512. package/build/server/chunks/4-CcOQz4eZ.js +0 -9
  513. package/build/server/chunks/4-CcOQz4eZ.js.map +0 -1
  514. package/build/server/chunks/6-BL469LUB.js +0 -9
  515. package/build/server/chunks/6-BL469LUB.js.map +0 -1
  516. package/build/server/chunks/7-BLHhygXi.js +0 -9
  517. package/build/server/chunks/8-DiHmrGkL.js.map +0 -1
  518. package/build/server/chunks/9-D4ocBCG0.js +0 -42
  519. package/build/server/chunks/9-D4ocBCG0.js.map +0 -1
  520. package/build/server/chunks/ChatNavbar-Takv7dQM.js.map +0 -1
  521. package/build/server/chunks/IconActivity-DrgUhxxi.js.map +0 -1
  522. package/build/server/chunks/IconSoundOn-DHtvjphK.js.map +0 -1
  523. package/build/server/chunks/IconStop-C89_dmt4.js +0 -956
  524. package/build/server/chunks/IconStop-C89_dmt4.js.map +0 -1
  525. package/build/server/chunks/_page.svelte--MC2pNDj.js.map +0 -1
  526. package/build/server/chunks/_page.svelte-BT81Bwrh.js.map +0 -1
  527. package/build/server/chunks/_page.svelte-BdH2kpT0.js.map +0 -1
  528. package/build/server/chunks/_page.svelte-BnV94Ogu.js.map +0 -1
  529. package/build/server/chunks/_page.svelte-CkYUucmY.js +0 -92
  530. package/build/server/chunks/_page.svelte-CkYUucmY.js.map +0 -1
  531. package/build/server/chunks/_server.ts-3RgOKIrg.js +0 -112
  532. package/build/server/chunks/_server.ts-3RgOKIrg.js.map +0 -1
  533. package/build/server/chunks/_server.ts-5GcuvVnk.js +0 -48
  534. package/build/server/chunks/_server.ts-5GcuvVnk.js.map +0 -1
  535. package/build/server/chunks/_server.ts-A_jvsf54.js.map +0 -1
  536. package/build/server/chunks/_server.ts-B12WIhKW.js.map +0 -1
  537. package/build/server/chunks/_server.ts-B6IuU4lX.js.map +0 -1
  538. package/build/server/chunks/_server.ts-B8RJmRP7.js.map +0 -1
  539. package/build/server/chunks/_server.ts-BMkzMnF3.js +0 -94
  540. package/build/server/chunks/_server.ts-BMkzMnF3.js.map +0 -1
  541. package/build/server/chunks/_server.ts-BWdKIMmK.js.map +0 -1
  542. package/build/server/chunks/_server.ts-BbvTyvkT.js +0 -69
  543. package/build/server/chunks/_server.ts-BbvTyvkT.js.map +0 -1
  544. package/build/server/chunks/_server.ts-BbxUaG2z.js.map +0 -1
  545. package/build/server/chunks/_server.ts-Bd7KmU8k.js +0 -141
  546. package/build/server/chunks/_server.ts-Bd7KmU8k.js.map +0 -1
  547. package/build/server/chunks/_server.ts-BjfWddPf.js.map +0 -1
  548. package/build/server/chunks/_server.ts-Bla3fiCh.js +0 -106
  549. package/build/server/chunks/_server.ts-Bla3fiCh.js.map +0 -1
  550. package/build/server/chunks/_server.ts-BnCHdcon.js.map +0 -1
  551. package/build/server/chunks/_server.ts-BpNKHMXM.js +0 -66
  552. package/build/server/chunks/_server.ts-BpNKHMXM.js.map +0 -1
  553. package/build/server/chunks/_server.ts-CV7PsNSs.js.map +0 -1
  554. package/build/server/chunks/_server.ts-CYhI4sCU.js.map +0 -1
  555. package/build/server/chunks/_server.ts-Cg9mKyvd.js.map +0 -1
  556. package/build/server/chunks/_server.ts-ClPgPihF.js +0 -248
  557. package/build/server/chunks/_server.ts-ClPgPihF.js.map +0 -1
  558. package/build/server/chunks/_server.ts-CqLbFV6m.js.map +0 -1
  559. package/build/server/chunks/_server.ts-D7hUSvgG.js.map +0 -1
  560. package/build/server/chunks/_server.ts-DZ3Yyeac.js.map +0 -1
  561. package/build/server/chunks/_server.ts-D_NDxdhC.js.map +0 -1
  562. package/build/server/chunks/_server.ts-DcWSFqr3.js +0 -72
  563. package/build/server/chunks/_server.ts-DcWSFqr3.js.map +0 -1
  564. package/build/server/chunks/_server.ts-Ddf5c75T.js.map +0 -1
  565. package/build/server/chunks/_server.ts-Dg2Gkcbx.js.map +0 -1
  566. package/build/server/chunks/_server.ts-Drhyf5o4.js.map +0 -1
  567. package/build/server/chunks/_server.ts-Dv1LAL-L.js.map +0 -1
  568. package/build/server/chunks/_server.ts-WfJI8r0e.js.map +0 -1
  569. package/build/server/chunks/addon-helpers-CkCisYhs.js.map +0 -1
  570. package/build/server/chunks/compose-args2-Ccr5RMHS.js.map +0 -1
  571. package/build/server/chunks/connections-api-mP7OE2x7.js +0 -34
  572. package/build/server/chunks/connections-api-mP7OE2x7.js.map +0 -1
  573. package/build/server/chunks/docker2-BL8hjShD.js.map +0 -1
  574. package/build/server/chunks/endpoints-CnnGlw2U.js +0 -452
  575. package/build/server/chunks/endpoints-CnnGlw2U.js.map +0 -1
  576. package/build/server/chunks/features-BUWlozR5.js +0 -118
  577. package/build/server/chunks/features-BUWlozR5.js.map +0 -1
  578. package/build/server/chunks/helpers-9U7R7yqL.js.map +0 -1
  579. package/build/server/chunks/hooks.server-Bog01Hsc.js.map +0 -1
  580. package/build/server/chunks/http-D2Aul-FP.js.map +0 -1
  581. package/build/server/chunks/landing-CMnmbyhs.js.map +0 -1
  582. package/build/server/chunks/network-preset-CJ1RRnki.js.map +0 -1
  583. package/build/server/chunks/runtime-context.svelte-C5zNEC6u.js.map +0 -1
  584. package/build/server/chunks/serial-queue-D9FEpYVv.js +0 -22
  585. package/build/server/chunks/serial-queue-D9FEpYVv.js.map +0 -1
  586. package/build/server/chunks/src-AHSKeKr0.js.map +0 -1
  587. package/build/server/chunks/voice-state.svelte-BAiqUOIX.js +0 -1214
  588. package/build/server/chunks/voice-state.svelte-BAiqUOIX.js.map +0 -1
  589. /package/build/client/_app/immutable/assets/{IconActivity.BdXOPwBm.css → ChatMessage.BdXOPwBm.css} +0 -0
  590. /package/build/client/_app/immutable/assets/{IconActivity.BdXOPwBm.css.br → ChatMessage.BdXOPwBm.css.br} +0 -0
  591. /package/build/client/_app/immutable/assets/{IconActivity.BdXOPwBm.css.gz → ChatMessage.BdXOPwBm.css.gz} +0 -0
@@ -1,1214 +0,0 @@
1
- import { t as toSpeakableText } from './speakable-text-BflxDDdY.js';
2
-
3
- //#region src/lib/notifications.svelte.ts
4
- var DEFAULT_TIMEOUTS = {
5
- info: 4e3,
6
- success: 5e3,
7
- error: 8e3
8
- };
9
- var Notifications = class {
10
- toasts = [];
11
- timers = /* @__PURE__ */ new Map();
12
- push(kind, message, opts = {}) {
13
- const id = opts.replaceId ?? (typeof crypto !== "undefined" && "randomUUID" in crypto ? crypto.randomUUID() : `t-${Date.now()}-${Math.random().toString(36).slice(2)}`);
14
- const ttlMs = opts.sticky ? null : opts.ttlMs ?? DEFAULT_TIMEOUTS[kind];
15
- const toast = {
16
- id,
17
- kind,
18
- message,
19
- ttlMs
20
- };
21
- const existingTimer = this.timers.get(id);
22
- if (existingTimer) {
23
- clearTimeout(existingTimer);
24
- this.timers.delete(id);
25
- }
26
- const existingIdx = this.toasts.findIndex((t) => t.id === id);
27
- if (existingIdx >= 0) {
28
- const next = [...this.toasts];
29
- next[existingIdx] = toast;
30
- this.toasts = next;
31
- } else this.toasts = [...this.toasts, toast];
32
- if (ttlMs !== null) {
33
- const timer = setTimeout(() => this.dismiss(id), ttlMs);
34
- this.timers.set(id, timer);
35
- }
36
- return id;
37
- }
38
- dismiss(id) {
39
- const timer = this.timers.get(id);
40
- if (timer) {
41
- clearTimeout(timer);
42
- this.timers.delete(id);
43
- }
44
- this.toasts = this.toasts.filter((t) => t.id !== id);
45
- }
46
- clear() {
47
- for (const timer of this.timers.values()) clearTimeout(timer);
48
- this.timers.clear();
49
- this.toasts = [];
50
- }
51
- };
52
- var notifications = new Notifications();
53
- //#endregion
54
- //#region src/lib/theme-state.svelte.ts
55
- var THEME_STORAGE_KEY = "openpalm.theme";
56
- var THEME_ATTR = "data-theme";
57
- var DARK_THEME_COLOR = "#161c22";
58
- var LIGHT_THEME_COLOR = "#f9fafb";
59
- function isThemePreference(value) {
60
- return value === "light" || value === "dark" || value === "system";
61
- }
62
- var ThemeService = class {
63
- preference = "system";
64
- resolved = "light";
65
- initialized = false;
66
- #mediaQuery = null;
67
- #mediaChangeHandler = () => {
68
- if (this.preference !== "system") return;
69
- this.resolved = this.#resolvePreference("system");
70
- this.#applyResolvedTheme();
71
- };
72
- init() {
73
- if (typeof window === "undefined" || this.initialized) return;
74
- this.preference = this.#readStoredPreference();
75
- this.resolved = this.#resolvePreference(this.preference);
76
- this.#subscribeToSystemTheme();
77
- this.#applyResolvedTheme();
78
- this.initialized = true;
79
- }
80
- setPreference(preference) {
81
- this.preference = preference;
82
- this.resolved = this.#resolvePreference(preference);
83
- this.#writeStoredPreference(preference);
84
- this.#applyResolvedTheme();
85
- }
86
- toggle() {
87
- const next = this.preference === "system" ? "light" : this.preference === "light" ? "dark" : "system";
88
- this.setPreference(next);
89
- }
90
- dispose() {
91
- if (this.#mediaQuery) if (typeof this.#mediaQuery.removeEventListener === "function") this.#mediaQuery.removeEventListener("change", this.#mediaChangeHandler);
92
- else this.#mediaQuery.removeListener(this.#mediaChangeHandler);
93
- this.#mediaQuery = null;
94
- this.initialized = false;
95
- }
96
- #readStoredPreference() {
97
- if (typeof window === "undefined") return "system";
98
- try {
99
- const stored = window.localStorage.getItem(THEME_STORAGE_KEY);
100
- return isThemePreference(stored) ? stored : "system";
101
- } catch {
102
- return "system";
103
- }
104
- }
105
- #writeStoredPreference(preference) {
106
- if (typeof window === "undefined") return;
107
- try {
108
- window.localStorage.setItem(THEME_STORAGE_KEY, preference);
109
- } catch {}
110
- }
111
- #resolvePreference(preference) {
112
- if (preference === "light" || preference === "dark") return preference;
113
- if (typeof window === "undefined" || typeof window.matchMedia !== "function") return "light";
114
- return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
115
- }
116
- #subscribeToSystemTheme() {
117
- if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
118
- const nextQuery = window.matchMedia("(prefers-color-scheme: dark)");
119
- if (this.#mediaQuery === nextQuery) return;
120
- if (this.#mediaQuery) if (typeof this.#mediaQuery.removeEventListener === "function") this.#mediaQuery.removeEventListener("change", this.#mediaChangeHandler);
121
- else this.#mediaQuery.removeListener(this.#mediaChangeHandler);
122
- this.#mediaQuery = nextQuery;
123
- if (typeof nextQuery.addEventListener === "function") nextQuery.addEventListener("change", this.#mediaChangeHandler);
124
- else nextQuery.addListener(this.#mediaChangeHandler);
125
- }
126
- #applyResolvedTheme() {
127
- if (typeof document === "undefined") return;
128
- const root = document.documentElement;
129
- root.setAttribute(THEME_ATTR, this.resolved);
130
- root.style.colorScheme = this.resolved;
131
- const themeColorMeta = document.querySelector("meta[name=\"theme-color\"]");
132
- if (themeColorMeta) themeColorMeta.content = this.resolved === "dark" ? DARK_THEME_COLOR : LIGHT_THEME_COLOR;
133
- const colorSchemeMeta = document.querySelector("meta[name=\"color-scheme\"]");
134
- if (colorSchemeMeta) colorSchemeMeta.content = this.resolved;
135
- }
136
- };
137
- var themeService = new ThemeService();
138
- //#endregion
139
- //#region src/lib/voice/media-recorder.ts
140
- var PREFERRED_MIME_TYPES = ["audio/webm;codecs=opus", "audio/webm"];
141
- function pickMimeType() {
142
- const MR = globalThis.MediaRecorder;
143
- if (!MR || typeof MR.isTypeSupported !== "function") return void 0;
144
- for (const t of PREFERRED_MIME_TYPES) if (MR.isTypeSupported(t)) return t;
145
- }
146
- async function startRecording() {
147
- if (typeof window === "undefined") throw new Error("Recording is only available in the browser.");
148
- if (typeof MediaRecorder === "undefined") throw new Error("Recording is not supported in this browser.");
149
- if (!navigator?.mediaDevices?.getUserMedia) throw new Error("Recording is not supported in this browser.");
150
- let stream;
151
- try {
152
- stream = await navigator.mediaDevices.getUserMedia({ audio: true });
153
- } catch (err) {
154
- const name = err?.name ?? "";
155
- if (name === "NotAllowedError" || name === "SecurityError") throw new Error("Microphone access denied. Open System Settings → Privacy & Security → Microphone and enable OpenPalm, then restart the app.", { cause: err });
156
- if (name === "NotFoundError" || name === "OverconstrainedError") throw new Error("No microphone was found. Plug in a microphone and try again.", { cause: err });
157
- throw new Error(`Microphone error: ${err?.message ?? String(err)}`, { cause: err });
158
- }
159
- return createRecorderSession(stream, true);
160
- }
161
- /**
162
- * Record from an existing MediaStream. Conversation mode records many
163
- * short utterance segments from one long-lived capture stream, so the
164
- * caller owns the stream — stop()/cancel() end the recorder but leave
165
- * the tracks live.
166
- */
167
- function recordFromStream(stream) {
168
- if (typeof MediaRecorder === "undefined") throw new Error("Recording is not supported in this browser.");
169
- return createRecorderSession(stream, false);
170
- }
171
- function createRecorderSession(stream, ownsStream) {
172
- const mimeType = pickMimeType();
173
- const recorder = mimeType ? new MediaRecorder(stream, { mimeType }) : new MediaRecorder(stream);
174
- const chunks = [];
175
- recorder.addEventListener("dataavailable", (ev) => {
176
- const data = ev.data;
177
- if (data && data.size > 0) chunks.push(data);
178
- });
179
- let stopped = false;
180
- let cancelled = false;
181
- let stopResolve = null;
182
- let stopReject = null;
183
- function releaseTracks() {
184
- if (!ownsStream) return;
185
- for (const track of stream.getTracks()) try {
186
- track.stop();
187
- } catch {}
188
- }
189
- recorder.addEventListener("stop", () => {
190
- releaseTracks();
191
- if (cancelled) return;
192
- const blob = new Blob(chunks, { type: recorder.mimeType || mimeType || "audio/webm" });
193
- stopResolve?.(blob);
194
- });
195
- recorder.addEventListener("error", (ev) => {
196
- releaseTracks();
197
- const err = ev?.error ?? /* @__PURE__ */ new Error("Recorder error");
198
- stopReject?.(err);
199
- });
200
- recorder.start();
201
- return {
202
- stop() {
203
- if (stopped) return Promise.reject(/* @__PURE__ */ new Error("Recorder already stopped"));
204
- stopped = true;
205
- return new Promise((resolve, reject) => {
206
- stopResolve = resolve;
207
- stopReject = reject;
208
- try {
209
- if (recorder.state !== "inactive") recorder.stop();
210
- } catch (err) {
211
- releaseTracks();
212
- reject(err);
213
- }
214
- });
215
- },
216
- cancel() {
217
- if (stopped) return;
218
- stopped = true;
219
- cancelled = true;
220
- try {
221
- if (recorder.state !== "inactive") recorder.stop();
222
- } catch {}
223
- releaseTracks();
224
- }
225
- };
226
- }
227
- //#endregion
228
- //#region src/lib/voice/vad.ts
229
- /**
230
- * Tuned for a close mic with echoCancellation/noiseSuppression on.
231
- * Open-speaker setups (assistant audible to the mic) may need `threshold`
232
- * raised so TTS playback doesn't trigger the detector; echoCancellation
233
- * makes typical laptop speaker+mic setups workable as-is.
234
- */
235
- var DEFAULT_VAD_CONFIG = {
236
- threshold: .02,
237
- startFrames: 3,
238
- endSilenceMs: 900,
239
- frameIntervalMs: 50
240
- };
241
- /**
242
- * Derive the effective speech threshold from ambient RMS samples collected
243
- * during the calibration window. Uses the 20th percentile of the samples as
244
- * the noise floor so a user who starts talking during calibration cannot
245
- * inflate it — loud speech frames land in the upper percentiles and are
246
- * ignored. The base threshold is a hard lower bound, so a very quiet room
247
- * never loosens the gate below the tuned default.
248
- */
249
- function calibrateThreshold(samples, base) {
250
- if (samples.length === 0) return base;
251
- const sorted = [...samples].sort((a, b) => a - b);
252
- const floor = sorted[Math.floor((sorted.length - 1) * .2)];
253
- return Math.max(base, floor * 2.75);
254
- }
255
- /**
256
- * Stricter gate applied while the assistant is speaking: 3x the effective
257
- * (calibrated) threshold and ~400ms of sustained speech (8 frames at 50ms)
258
- * before a start fires, so TTS bleed and brief noise cannot open a segment
259
- * mid-reply. End detection keeps the same silence window.
260
- */
261
- function deriveStrictVadConfig(base) {
262
- return {
263
- ...base,
264
- threshold: base.threshold * 3,
265
- startFrames: 8
266
- };
267
- }
268
- function initialVadState() {
269
- return {
270
- speaking: false,
271
- aboveCount: 0,
272
- silenceMs: 0
273
- };
274
- }
275
- /**
276
- * Advance the hysteresis state machine by one sampled frame. Pure — the
277
- * caller owns the state and feeds one RMS level per frameIntervalMs.
278
- */
279
- function advanceVad(state, rms, config) {
280
- const above = rms >= config.threshold;
281
- if (!state.speaking) {
282
- const aboveCount = above ? state.aboveCount + 1 : 0;
283
- if (aboveCount >= config.startFrames) return {
284
- state: {
285
- speaking: true,
286
- aboveCount: 0,
287
- silenceMs: 0
288
- },
289
- event: "speech-start"
290
- };
291
- return {
292
- state: {
293
- speaking: false,
294
- aboveCount,
295
- silenceMs: 0
296
- },
297
- event: null
298
- };
299
- }
300
- const silenceMs = above ? 0 : state.silenceMs + config.frameIntervalMs;
301
- if (silenceMs >= config.endSilenceMs) return {
302
- state: {
303
- speaking: false,
304
- aboveCount: 0,
305
- silenceMs: 0
306
- },
307
- event: "speech-end"
308
- };
309
- return {
310
- state: {
311
- speaking: true,
312
- aboveCount: 0,
313
- silenceMs
314
- },
315
- event: null
316
- };
317
- }
318
- /**
319
- * Normalized RMS (0..1) of a time-domain byte buffer as produced by
320
- * AnalyserNode.getByteTimeDomainData, where 128 is the zero crossing.
321
- */
322
- function computeRms(samples) {
323
- if (samples.length === 0) return 0;
324
- let sum = 0;
325
- for (let i = 0; i < samples.length; i++) {
326
- const deviation = (samples[i] - 128) / 128;
327
- sum += deviation * deviation;
328
- }
329
- return Math.sqrt(sum / samples.length);
330
- }
331
- /**
332
- * Open the mic and run the detector until stop(). echoCancellation and
333
- * noiseSuppression keep the assistant's own TTS playback (mostly) out of
334
- * the capture on laptop speaker+mic setups.
335
- */
336
- async function startVad(opts) {
337
- if (typeof window === "undefined" || !navigator?.mediaDevices?.getUserMedia) throw new Error("Voice detection is not supported in this browser.");
338
- const Ctor = window.AudioContext ?? window.webkitAudioContext;
339
- if (!Ctor) throw new Error("Voice detection is not supported in this browser.");
340
- let stream;
341
- try {
342
- stream = await navigator.mediaDevices.getUserMedia({ audio: {
343
- echoCancellation: true,
344
- noiseSuppression: true
345
- } });
346
- } catch (err) {
347
- const name = err?.name ?? "";
348
- if (name === "NotAllowedError" || name === "SecurityError") throw new Error("Microphone access denied.", { cause: err });
349
- throw new Error(`Microphone error: ${err?.message ?? String(err)}`, { cause: err });
350
- }
351
- const baseConfig = opts.config ?? DEFAULT_VAD_CONFIG;
352
- const ctx = new Ctor();
353
- const source = ctx.createMediaStreamSource(stream);
354
- const analyser = ctx.createAnalyser();
355
- analyser.fftSize = 1024;
356
- source.connect(analyser);
357
- const samples = new Uint8Array(analyser.fftSize);
358
- let state = initialVadState();
359
- const calibrationSamples = [];
360
- let config = baseConfig;
361
- let strictConfig = deriveStrictVadConfig(baseConfig);
362
- let calibrated = false;
363
- const timer = setInterval(() => {
364
- analyser.getByteTimeDomainData(samples);
365
- const rms = computeRms(samples);
366
- if (!calibrated) {
367
- calibrationSamples.push(rms);
368
- if (calibrationSamples.length >= 20) {
369
- config = {
370
- ...baseConfig,
371
- threshold: calibrateThreshold(calibrationSamples, baseConfig.threshold)
372
- };
373
- strictConfig = deriveStrictVadConfig(config);
374
- calibrated = true;
375
- }
376
- return;
377
- }
378
- const active = opts.isAssistantSpeaking?.() ? strictConfig : config;
379
- const next = advanceVad(state, rms, active);
380
- state = next.state;
381
- if (next.event === "speech-start") opts.onSpeechStart();
382
- else if (next.event === "speech-end") opts.onSpeechEnd();
383
- }, baseConfig.frameIntervalMs);
384
- return {
385
- stream,
386
- stop() {
387
- clearInterval(timer);
388
- try {
389
- source.disconnect();
390
- } catch {}
391
- ctx.close().catch(() => {});
392
- for (const track of stream.getTracks()) try {
393
- track.stop();
394
- } catch {}
395
- }
396
- };
397
- }
398
- //#endregion
399
- //#region src/lib/api/core.ts
400
- var apiBase = "";
401
- function buildHeaders() {
402
- return {
403
- "x-request-id": crypto.randomUUID(),
404
- "x-requested-by": "ui"
405
- };
406
- }
407
- async function request(method, path, body, init) {
408
- const headers = {
409
- ...body !== void 0 ? { "content-type": "application/json" } : {},
410
- ...buildHeaders()
411
- };
412
- return fetch(`${apiBase}${path}`, {
413
- ...init,
414
- method,
415
- headers,
416
- credentials: "include",
417
- ...body !== void 0 ? { body: JSON.stringify(body) } : {}
418
- });
419
- }
420
- async function readErrorMessage(res, fallback = `Request failed (HTTP ${res.status})`) {
421
- if ((res.headers.get("content-type") ?? "").includes("application/json")) {
422
- const data = await res.clone().json().catch((e) => {
423
- console.warn("[api] Failed to parse JSON error response:", e);
424
- return null;
425
- });
426
- if (data && typeof data.message === "string" && data.message.length > 0) return data.message;
427
- if (data && typeof data.error === "string" && data.error.length > 0) return data.error;
428
- }
429
- return await res.text().catch((e) => {
430
- console.warn("[api] Failed to read error response text:", e);
431
- return "";
432
- }) || fallback;
433
- }
434
- /** Throw on 401; throw readErrorMessage on non-OK. Returns the response. */
435
- async function requireOk(res, fallback) {
436
- if (res.status === 401) throw Object.assign(/* @__PURE__ */ new Error("Sign-in required."), { status: 401 });
437
- if (!res.ok) throw Object.assign(new Error(await readErrorMessage(res, fallback)), { status: res.status });
438
- return res;
439
- }
440
- /**
441
- * POST a recorded audio Blob to /api/transcribe.
442
- *
443
- * Goes through the SvelteKit server-side proxy (cookie-auth) which
444
- * forwards to the configured STT_BASE_URL. Returns the transcript text.
445
- */
446
- async function transcribeAudio(blob, opts) {
447
- const form = new FormData();
448
- form.append("audio", blob, "recording.webm");
449
- if (opts?.language) form.append("language", opts.language);
450
- if (opts?.prompt) form.append("prompt", opts.prompt);
451
- const data = await (await requireOk(await fetch("/api/transcribe", {
452
- method: "POST",
453
- headers: buildHeaders(),
454
- credentials: "include",
455
- body: form
456
- }))).json();
457
- return typeof data.text === "string" ? data.text : "";
458
- }
459
- //#endregion
460
- //#region src/lib/voice/audio-playback.ts
461
- /**
462
- * AudioPlaybackController — the imperative TTS audio engine extracted from
463
- * voice-state.svelte.ts. Owns the speak queue, the HTMLAudioElement +
464
- * blob-URL lifecycle, the browser autoplay-policy fallback, and the
465
- * per-utterance playback (playOne). The reactive `voiceState` store
466
- * composes an instance of this and delegates speak/resume/stop to it.
467
- *
468
- * The controller never holds reactive `$state` itself — it mutates the
469
- * host store's reactive fields (status / errorMessage / autoplayBlocked)
470
- * through the `AudioPlaybackHost` it is constructed with, exactly as the
471
- * old module-global engine mutated `voiceState` directly.
472
- *
473
- * Only touch browser APIs (window, Audio, AudioContext, speechSynthesis)
474
- * from methods — never at construction — for SSR safety.
475
- */
476
- var SPEAK_QUEUE_MAX = 20;
477
- var AudioPlaybackController = class {
478
- host;
479
- /**
480
- * Optional hook fired when the speak queue fully drains (the last
481
- * utterance reached a terminal state with nothing queued behind it).
482
- * Conversation mode uses this to re-arm listening — an explicit
483
- * callback instead of polling reactive status. Deliberately NOT fired
484
- * from stop(): an explicit stop (barge-in, toggle off) must not re-arm
485
- * anything by itself.
486
- */
487
- onQueueDrained = null;
488
- activeAudio = null;
489
- activeAudioUrl = null;
490
- speakQueue = [];
491
- busy = false;
492
- generation = 0;
493
- overflowNoticed = false;
494
- pendingAutoplayAudio = null;
495
- pendingAutoplayUrl = null;
496
- constructor(host) {
497
- this.host = host;
498
- }
499
- /**
500
- * Play a 1-frame silent AudioBuffer through a transient AudioContext to
501
- * register the current user gesture with the browser's autoplay policy.
502
- * Safe to call repeatedly; failures are swallowed.
503
- */
504
- primeForAutoplay() {
505
- if (typeof window === "undefined") return;
506
- const Ctor = window.AudioContext ?? window.webkitAudioContext;
507
- if (!Ctor) return;
508
- try {
509
- const ctx = new Ctor();
510
- const buffer = ctx.createBuffer(1, 1, 22050);
511
- const source = ctx.createBufferSource();
512
- source.buffer = buffer;
513
- source.connect(ctx.destination);
514
- source.start(0);
515
- setTimeout(() => {
516
- ctx.close().catch(() => {});
517
- }, 100);
518
- } catch {}
519
- }
520
- teardownActiveAudio() {
521
- if (this.activeAudio) {
522
- this.activeAudio.onerror = null;
523
- this.activeAudio.onended = null;
524
- try {
525
- this.activeAudio.pause();
526
- } catch {}
527
- this.activeAudio.src = "";
528
- this.activeAudio = null;
529
- }
530
- if (this.activeAudioUrl) {
531
- URL.revokeObjectURL(this.activeAudioUrl);
532
- this.activeAudioUrl = null;
533
- }
534
- }
535
- teardownPendingAutoplay() {
536
- if (this.pendingAutoplayAudio) {
537
- this.pendingAutoplayAudio.onerror = null;
538
- this.pendingAutoplayAudio.onended = null;
539
- try {
540
- this.pendingAutoplayAudio.pause();
541
- } catch {}
542
- this.pendingAutoplayAudio.src = "";
543
- this.pendingAutoplayAudio = null;
544
- }
545
- if (this.pendingAutoplayUrl) {
546
- URL.revokeObjectURL(this.pendingAutoplayUrl);
547
- this.pendingAutoplayUrl = null;
548
- }
549
- this.host.autoplayBlocked = false;
550
- }
551
- /**
552
- * User clicked the "click to resume" banner — promote the stashed audio
553
- * to the active slot and play. Called from VoiceControl's banner button;
554
- * the click on the button itself satisfies the autoplay-policy gesture
555
- * requirement.
556
- */
557
- resume() {
558
- const a = this.pendingAutoplayAudio;
559
- if (!a) {
560
- this.host.autoplayBlocked = false;
561
- return;
562
- }
563
- this.host.autoplayBlocked = false;
564
- this.host.errorMessage = "";
565
- this.host.status = "speaking";
566
- this.busy = true;
567
- this.activeAudio = a;
568
- this.activeAudioUrl = this.pendingAutoplayUrl;
569
- this.pendingAutoplayAudio = null;
570
- this.pendingAutoplayUrl = null;
571
- a.play().catch(() => {
572
- this.host.status = "idle";
573
- this.host.errorMessage = "Audio playback failed.";
574
- this.teardownActiveAudio();
575
- this.drainNext();
576
- });
577
- }
578
- /**
579
- * Read text aloud. Tries server-side TTS via /api/speak first (when the
580
- * configured engine is openpalm-voice or remote); falls back to browser
581
- * speech synthesis. Silent no-op if neither path is available.
582
- *
583
- * If a previous utterance is still synthesizing, playing, or stashed
584
- * behind an autoplay block, queues this one (FIFO, cap 20) instead of
585
- * cutting it off mid-sentence.
586
- */
587
- async speak(text) {
588
- if (typeof window === "undefined" || !text.trim()) return;
589
- if (this.busy) {
590
- this.speakQueue.push(text);
591
- let dropped = 0;
592
- while (this.speakQueue.length > SPEAK_QUEUE_MAX) {
593
- this.speakQueue.shift();
594
- dropped += 1;
595
- }
596
- if (dropped > 0 && !this.overflowNoticed) {
597
- this.overflowNoticed = true;
598
- notifications.push("info", `Skipped ${dropped} spoken ${dropped === 1 ? "reply" : "replies"} — too much overlap. Lower the auto-speak chat rate.`);
599
- }
600
- return;
601
- }
602
- await this.playOne(text);
603
- }
604
- /**
605
- * Advance the pump: play the next queued utterance, or release the busy
606
- * flag so a future speak() can start a fresh burst. Every terminal path
607
- * of an utterance must land here (or hold `busy` deliberately, as the
608
- * autoplay-block stash does).
609
- */
610
- drainNext() {
611
- const next = this.speakQueue.shift();
612
- if (next) this.playOne(next);
613
- else {
614
- this.busy = false;
615
- this.overflowNoticed = false;
616
- this.onQueueDrained?.();
617
- }
618
- }
619
- /** Internal: actually trigger the audio for one text chunk. */
620
- async playOne(text) {
621
- if (typeof window === "undefined") return;
622
- this.busy = true;
623
- const gen = this.generation;
624
- const speakableText = toSpeakableText(text);
625
- if (!speakableText) {
626
- this.drainNext();
627
- return;
628
- }
629
- this.teardownActiveAudio();
630
- if ("speechSynthesis" in window) window.speechSynthesis.cancel();
631
- this.host.errorMessage = "";
632
- const engine = this.host.ttsEngine;
633
- const useServer = engine === "openpalm-voice" || engine === "remote";
634
- if (useServer) {
635
- let res;
636
- try {
637
- res = await fetch("/api/speak", {
638
- method: "POST",
639
- headers: { "content-type": "application/json" },
640
- credentials: "include",
641
- body: JSON.stringify({ text: speakableText })
642
- });
643
- } catch {}
644
- if (gen !== this.generation) return;
645
- if (res?.ok && res.headers.get("content-type")?.startsWith("audio/")) {
646
- const blob = await res.blob();
647
- if (gen !== this.generation) return;
648
- const url = URL.createObjectURL(blob);
649
- const audio = new Audio(url);
650
- this.activeAudio = audio;
651
- this.activeAudioUrl = url;
652
- audio.onended = () => {
653
- this.host.status = "idle";
654
- this.teardownActiveAudio();
655
- this.drainNext();
656
- };
657
- audio.onerror = () => {
658
- this.host.status = "idle";
659
- this.host.errorMessage = "Audio playback failed.";
660
- this.teardownActiveAudio();
661
- this.drainNext();
662
- };
663
- this.host.status = "speaking";
664
- try {
665
- await audio.play();
666
- } catch {
667
- this.host.status = "idle";
668
- this.pendingAutoplayAudio = audio;
669
- this.pendingAutoplayUrl = url;
670
- this.activeAudio = null;
671
- this.activeAudioUrl = null;
672
- this.host.autoplayBlocked = true;
673
- }
674
- return;
675
- }
676
- if (res && !res.ok) {
677
- const errMsg = await this.extractSpeakError(res);
678
- this.host.errorMessage = errMsg;
679
- }
680
- }
681
- if (!("speechSynthesis" in window)) {
682
- this.drainNext();
683
- return;
684
- }
685
- if (useServer) this.host.errorMessage = "";
686
- const utterance = new SpeechSynthesisUtterance(speakableText);
687
- utterance.onstart = () => {
688
- if (gen !== this.generation) return;
689
- this.host.status = "speaking";
690
- };
691
- utterance.onend = () => {
692
- if (gen !== this.generation) return;
693
- this.host.status = "idle";
694
- this.drainNext();
695
- };
696
- utterance.onerror = () => {
697
- if (gen !== this.generation) return;
698
- this.host.status = "idle";
699
- this.drainNext();
700
- };
701
- window.speechSynthesis.speak(utterance);
702
- }
703
- /**
704
- * Convert a non-OK /api/speak response into a human-readable string.
705
- * Recognises the two common shapes the route returns; falls back to a
706
- * generic message keyed off the HTTP status.
707
- */
708
- async extractSpeakError(res) {
709
- let code;
710
- try {
711
- const data = await res.clone().json();
712
- if (typeof data.error === "string") code = data.error;
713
- } catch {}
714
- if (code === "tts_not_configured") return "TTS is not configured.";
715
- if (code === "upstream_error" || res.status === 502 || res.status === 503) return "Voice engine is warming up — try again in a moment.";
716
- return `TTS failed (HTTP ${res.status}).`;
717
- }
718
- /** Cancel speech synthesis. Drops the entire queue. */
719
- stop() {
720
- this.speakQueue.length = 0;
721
- this.busy = false;
722
- this.generation += 1;
723
- this.overflowNoticed = false;
724
- this.teardownPendingAutoplay();
725
- this.teardownActiveAudio();
726
- if (typeof window !== "undefined" && "speechSynthesis" in window) window.speechSynthesis.cancel();
727
- this.host.status = "idle";
728
- }
729
- };
730
- //#endregion
731
- //#region src/lib/voice/voice-state.svelte.ts
732
- var MAX_RECORDING_MS = 6e4;
733
- var VoiceState = class {
734
- status = "idle";
735
- /** True when the configured STT engine is actually usable from this browser. */
736
- sttSupported = false;
737
- ttsSupported = false;
738
- errorMessage = "";
739
- /** Partial transcript text while browser STT is mid-utterance. Cleared on stop/error. */
740
- interimTranscript = "";
741
- /** Active engine resolved from /api/host/voice. */
742
- sttEngine = "disabled";
743
- ttsEngine = "disabled";
744
- /** Optional language hint (forwarded to /api/transcribe). */
745
- sttLanguage = "";
746
- /** Global toggle: when true, assistant chat replies are spoken automatically. */
747
- ttsAutoEnabled = false;
748
- /**
749
- * True when an audio.play() was rejected by the browser's autoplay
750
- * policy and we have a pending utterance waiting for a user gesture.
751
- * The chat UI renders a small "click to resume" banner; clicking it
752
- * calls resumeAutoplay() to actually play.
753
- */
754
- autoplayBlocked = false;
755
- /**
756
- * True while hands-free conversation mode owns the mic (the chat page's
757
- * listen → deliver → speak → listen loop). `status` keeps cycling
758
- * through the normal VoiceStatus values while this is set.
759
- */
760
- conversationActive = false;
761
- /**
762
- * Set when the configured STT engine is technically present in the
763
- * window but known to fail at runtime on this UA (e.g. iOS Safari
764
- * exposes SpeechRecognition but `start()` immediately errors with
765
- * `service-not-allowed`). The Voice settings tab uses this to hide or
766
- * disable the Browser STT card with the reason as a tooltip.
767
- */
768
- browserSttUnsupportedReason = "";
769
- };
770
- var voiceState = new VoiceState();
771
- /**
772
- * The imperative TTS audio engine (speak queue, blob-URL lifecycle,
773
- * autoplay fallback, playOne). The reactive store composes it and
774
- * delegates the exported speak/resume/stop wrappers below to it; the
775
- * controller mutates `voiceState`'s reactive fields in place.
776
- */
777
- var audioPlayback = new AudioPlaybackController(voiceState);
778
- audioPlayback.onQueueDrained = () => {
779
- if (voiceState.conversationActive && voiceState.status === "idle") voiceState.status = "recording";
780
- };
781
- var activeRecording = null;
782
- var activeRecognition = null;
783
- var recordingTimeout = null;
784
- var activeOnResult = null;
785
- var conversationRecognition = null;
786
- var conversationOnUtterance = null;
787
- var conversationSilenceTimer = null;
788
- var conversationVad = null;
789
- var conversationSegment = null;
790
- var conversationSegmentTimeout = null;
791
- /** Silence after a final browser-STT result before the utterance is delivered. */
792
- var CONVERSATION_UTTERANCE_SILENCE_MS = 800;
793
- /** Hard cap on a single VAD-detected speech segment (remote engine). */
794
- var CONVERSATION_SEGMENT_MAX_MS = 3e4;
795
- var ttsWarmupFired = false;
796
- /**
797
- * Fire-and-forget one priming POST to /api/speak so the voice container is
798
- * warm before the first real utterance. The response body is discarded and
799
- * the audio never plays. Server-TTS engines only — browser TTS has no
800
- * container to warm.
801
- */
802
- function warmUpTts() {
803
- if (ttsWarmupFired) return;
804
- if (voiceState.ttsEngine !== "remote" && voiceState.ttsEngine !== "openpalm-voice") return;
805
- if (typeof window === "undefined") return;
806
- ttsWarmupFired = true;
807
- fetch("/api/speak", {
808
- method: "POST",
809
- headers: { "content-type": "application/json" },
810
- credentials: "include",
811
- body: JSON.stringify({ text: "ok" })
812
- }).catch(() => {});
813
- }
814
- /** Resolve the SpeechRecognition constructor (Chrome prefixes it). */
815
- function getSpeechRecognitionCtor() {
816
- if (typeof window === "undefined") return void 0;
817
- return window.SpeechRecognition ?? window.webkitSpeechRecognition ?? void 0;
818
- }
819
- /**
820
- * Begin speech recognition. Transcript is delivered to `onResult`.
821
- * Calling while already listening is a no-op.
822
- */
823
- function startListening(onResult) {
824
- if (voiceState.conversationActive) stopConversation();
825
- if (voiceState.status === "recording" || voiceState.status === "transcribing") return;
826
- if (!voiceState.sttSupported || voiceState.sttEngine === "disabled") {
827
- voiceState.errorMessage = "Speech recognition is not available.";
828
- return;
829
- }
830
- voiceState.errorMessage = "";
831
- activeOnResult = onResult;
832
- if (voiceState.sttEngine === "browser") {
833
- startBrowserRecognition(onResult);
834
- return;
835
- }
836
- startRemoteRecording();
837
- }
838
- function startBrowserRecognition(onResult) {
839
- const SR = getSpeechRecognitionCtor();
840
- if (!SR) {
841
- voiceState.errorMessage = "Speech recognition is not supported in this browser.";
842
- return;
843
- }
844
- const instance = new SR();
845
- activeRecognition = instance;
846
- instance.lang = voiceState.sttLanguage || navigator?.language || "en-US";
847
- instance.interimResults = true;
848
- instance.maxAlternatives = 1;
849
- instance.continuous = false;
850
- let finalAccumulated = "";
851
- instance.onresult = (event) => {
852
- let interim = "";
853
- for (let i = event.resultIndex; i < event.results.length; i++) {
854
- const result = event.results[i];
855
- if (result.isFinal) finalAccumulated += result[0]?.transcript ?? "";
856
- else interim += result[0]?.transcript ?? "";
857
- }
858
- voiceState.interimTranscript = finalAccumulated + interim;
859
- };
860
- instance.onerror = (event) => {
861
- if (activeRecognition !== instance) return;
862
- const error = event.error ?? "";
863
- if (error === "no-speech" || error === "aborted") ; else if (error === "not-allowed") voiceState.errorMessage = "Microphone access denied.";
864
- else voiceState.errorMessage = `Speech error: ${error}`;
865
- voiceState.interimTranscript = "";
866
- voiceState.status = "idle";
867
- activeRecognition = null;
868
- activeOnResult = null;
869
- };
870
- instance.onend = () => {
871
- if (activeRecognition !== instance) return;
872
- if (finalAccumulated.trim() && onResult) onResult(finalAccumulated.trim());
873
- voiceState.interimTranscript = "";
874
- voiceState.status = "idle";
875
- activeRecognition = null;
876
- activeOnResult = null;
877
- };
878
- try {
879
- instance.start();
880
- voiceState.status = "recording";
881
- } catch {
882
- voiceState.errorMessage = "Failed to start speech recognition.";
883
- voiceState.status = "idle";
884
- activeRecognition = null;
885
- activeOnResult = null;
886
- }
887
- }
888
- async function startRemoteRecording() {
889
- let session;
890
- try {
891
- session = await startRecording();
892
- } catch (err) {
893
- voiceState.errorMessage = err instanceof Error ? err.message : "Failed to start recording.";
894
- voiceState.status = "idle";
895
- activeOnResult = null;
896
- return;
897
- }
898
- activeRecording = session;
899
- voiceState.status = "recording";
900
- recordingTimeout = setTimeout(() => {
901
- finalizeRecording();
902
- }, MAX_RECORDING_MS);
903
- }
904
- async function finalizeRecording() {
905
- const session = activeRecording;
906
- const onResult = activeOnResult;
907
- if (!session) return;
908
- activeRecording = null;
909
- activeOnResult = null;
910
- if (recordingTimeout) {
911
- clearTimeout(recordingTimeout);
912
- recordingTimeout = null;
913
- }
914
- voiceState.status = "transcribing";
915
- let blob;
916
- try {
917
- blob = await session.stop();
918
- } catch (err) {
919
- voiceState.errorMessage = err instanceof Error ? err.message : "Recording failed.";
920
- voiceState.status = "idle";
921
- return;
922
- }
923
- if (blob.size === 0) {
924
- voiceState.status = "idle";
925
- return;
926
- }
927
- try {
928
- const trimmed = (await transcribeAudio(blob, { language: voiceState.sttLanguage || void 0 })).trim();
929
- if (trimmed && onResult) onResult(trimmed);
930
- } catch (err) {
931
- voiceState.errorMessage = err instanceof Error ? err.message : "Transcription failed.";
932
- } finally {
933
- voiceState.status = "idle";
934
- }
935
- }
936
- /** Stop the active recording session (whichever engine). */
937
- function stopListening() {
938
- if (activeRecognition) {
939
- try {
940
- activeRecognition.stop();
941
- } catch {}
942
- return;
943
- }
944
- if (activeRecording) finalizeRecording();
945
- }
946
- /**
947
- * Abort any single-shot capture without delivering a transcript. Nulling
948
- * the handles first makes the pending onend/onerror callbacks no-ops
949
- * (they guard on instance identity).
950
- */
951
- function cancelSingleShot() {
952
- if (recordingTimeout) {
953
- clearTimeout(recordingTimeout);
954
- recordingTimeout = null;
955
- }
956
- if (activeRecording) {
957
- try {
958
- activeRecording.cancel();
959
- } catch {}
960
- activeRecording = null;
961
- }
962
- if (activeRecognition) {
963
- const instance = activeRecognition;
964
- activeRecognition = null;
965
- try {
966
- instance.stop();
967
- } catch {}
968
- }
969
- activeOnResult = null;
970
- voiceState.interimTranscript = "";
971
- if (voiceState.status === "recording") voiceState.status = "idle";
972
- }
973
- function clearConversationSilenceTimer() {
974
- if (conversationSilenceTimer) {
975
- clearTimeout(conversationSilenceTimer);
976
- conversationSilenceTimer = null;
977
- }
978
- }
979
- /**
980
- * Begin hands-free conversation mode. Whole utterances (bounded by a
981
- * silence window) are delivered to `onUtterance` until stopConversation().
982
- * Takes the mic from any in-flight single-shot capture.
983
- */
984
- function startConversation(onUtterance) {
985
- if (voiceState.conversationActive) return;
986
- if (!voiceState.sttSupported || voiceState.sttEngine === "disabled") {
987
- voiceState.errorMessage = "Speech recognition is not available.";
988
- return;
989
- }
990
- cancelSingleShot();
991
- warmUpTts();
992
- voiceState.errorMessage = "";
993
- voiceState.conversationActive = true;
994
- conversationOnUtterance = onUtterance;
995
- if (voiceState.sttEngine === "browser") {
996
- startConversationRecognition();
997
- return;
998
- }
999
- startConversationVad();
1000
- }
1001
- /** Exit conversation mode and tear down the listening loop (whichever engine). */
1002
- function stopConversation() {
1003
- if (!voiceState.conversationActive) return;
1004
- voiceState.conversationActive = false;
1005
- conversationOnUtterance = null;
1006
- clearConversationSilenceTimer();
1007
- if (conversationSegmentTimeout) {
1008
- clearTimeout(conversationSegmentTimeout);
1009
- conversationSegmentTimeout = null;
1010
- }
1011
- if (conversationRecognition) {
1012
- const instance = conversationRecognition;
1013
- conversationRecognition = null;
1014
- try {
1015
- instance.stop();
1016
- } catch {}
1017
- }
1018
- if (conversationSegment) {
1019
- try {
1020
- conversationSegment.cancel();
1021
- } catch {}
1022
- conversationSegment = null;
1023
- }
1024
- if (conversationVad) {
1025
- conversationVad.stop();
1026
- conversationVad = null;
1027
- }
1028
- voiceState.interimTranscript = "";
1029
- if (voiceState.status === "recording" || voiceState.status === "transcribing") voiceState.status = "idle";
1030
- }
1031
- function startConversationRecognition() {
1032
- const SR = getSpeechRecognitionCtor();
1033
- if (!SR) {
1034
- voiceState.errorMessage = "Speech recognition is not supported in this browser.";
1035
- stopConversation();
1036
- return;
1037
- }
1038
- const instance = new SR();
1039
- conversationRecognition = instance;
1040
- instance.lang = voiceState.sttLanguage || navigator?.language || "en-US";
1041
- instance.interimResults = true;
1042
- instance.maxAlternatives = 1;
1043
- instance.continuous = true;
1044
- let finalPending = "";
1045
- const deliver = () => {
1046
- clearConversationSilenceTimer();
1047
- const text = finalPending.trim();
1048
- finalPending = "";
1049
- voiceState.interimTranscript = "";
1050
- if (text && conversationOnUtterance) conversationOnUtterance(text);
1051
- };
1052
- instance.onresult = (event) => {
1053
- if (conversationRecognition !== instance) return;
1054
- if (voiceState.status === "speaking") {
1055
- stopSpeaking();
1056
- voiceState.status = "recording";
1057
- }
1058
- let interim = "";
1059
- for (let i = event.resultIndex; i < event.results.length; i++) {
1060
- const result = event.results[i];
1061
- if (result.isFinal) finalPending += result[0]?.transcript ?? "";
1062
- else interim += result[0]?.transcript ?? "";
1063
- }
1064
- voiceState.interimTranscript = finalPending + interim;
1065
- clearConversationSilenceTimer();
1066
- if (finalPending.trim() && !interim) conversationSilenceTimer = setTimeout(deliver, CONVERSATION_UTTERANCE_SILENCE_MS);
1067
- };
1068
- instance.onerror = (event) => {
1069
- if (conversationRecognition !== instance) return;
1070
- const error = event.error ?? "";
1071
- if (error === "no-speech" || error === "aborted") return;
1072
- if (error === "not-allowed") {
1073
- voiceState.errorMessage = "Microphone access denied.";
1074
- stopConversation();
1075
- return;
1076
- }
1077
- voiceState.errorMessage = `Speech error: ${error}`;
1078
- };
1079
- instance.onend = () => {
1080
- if (conversationRecognition !== instance) return;
1081
- if (finalPending.trim()) deliver();
1082
- if (voiceState.conversationActive) startConversationRecognition();
1083
- else conversationRecognition = null;
1084
- };
1085
- try {
1086
- instance.start();
1087
- if (voiceState.status === "idle") voiceState.status = "recording";
1088
- } catch {
1089
- voiceState.errorMessage = "Failed to start speech recognition.";
1090
- conversationRecognition = null;
1091
- stopConversation();
1092
- }
1093
- }
1094
- async function startConversationVad() {
1095
- let session;
1096
- try {
1097
- session = await startVad({
1098
- onSpeechStart: handleConversationSpeechStart,
1099
- onSpeechEnd: () => {
1100
- finishConversationSegment();
1101
- },
1102
- isAssistantSpeaking: () => voiceState.status === "speaking"
1103
- });
1104
- } catch (err) {
1105
- voiceState.errorMessage = err instanceof Error ? err.message : "Failed to start listening.";
1106
- voiceState.conversationActive = false;
1107
- conversationOnUtterance = null;
1108
- return;
1109
- }
1110
- if (!voiceState.conversationActive) {
1111
- session.stop();
1112
- return;
1113
- }
1114
- conversationVad = session;
1115
- if (voiceState.status === "idle") voiceState.status = "recording";
1116
- }
1117
- function handleConversationSpeechStart() {
1118
- if (!voiceState.conversationActive || !conversationVad || conversationSegment) return;
1119
- try {
1120
- conversationSegment = recordFromStream(conversationVad.stream);
1121
- } catch (err) {
1122
- voiceState.errorMessage = err instanceof Error ? err.message : "Failed to start recording.";
1123
- return;
1124
- }
1125
- voiceState.status = "recording";
1126
- conversationSegmentTimeout = setTimeout(() => {
1127
- finishConversationSegment();
1128
- }, CONVERSATION_SEGMENT_MAX_MS);
1129
- }
1130
- async function finishConversationSegment() {
1131
- const segment = conversationSegment;
1132
- if (!segment) return;
1133
- conversationSegment = null;
1134
- if (conversationSegmentTimeout) {
1135
- clearTimeout(conversationSegmentTimeout);
1136
- conversationSegmentTimeout = null;
1137
- }
1138
- voiceState.status = "transcribing";
1139
- let blob;
1140
- try {
1141
- blob = await segment.stop();
1142
- } catch (err) {
1143
- voiceState.errorMessage = err instanceof Error ? err.message : "Recording failed.";
1144
- if (voiceState.conversationActive && voiceState.status === "transcribing") voiceState.status = "recording";
1145
- return;
1146
- }
1147
- if (blob.size === 0) {
1148
- if (voiceState.conversationActive && voiceState.status === "transcribing") voiceState.status = "recording";
1149
- return;
1150
- }
1151
- try {
1152
- const trimmed = (await transcribeAudio(blob, { language: voiceState.sttLanguage || void 0 })).trim();
1153
- if (trimmed && conversationOnUtterance && voiceState.conversationActive) {
1154
- stopSpeaking();
1155
- voiceState.status = "recording";
1156
- conversationOnUtterance(trimmed);
1157
- }
1158
- } catch (err) {
1159
- voiceState.errorMessage = err instanceof Error ? err.message : "Transcription failed.";
1160
- } finally {
1161
- if (voiceState.conversationActive && voiceState.status === "transcribing") voiceState.status = "recording";
1162
- }
1163
- }
1164
- /**
1165
- * Read text aloud. Tries server-side TTS via /api/speak first (when the
1166
- * configured engine is openpalm-voice or remote); falls back to browser
1167
- * speech synthesis. Silent no-op if neither path is available.
1168
- *
1169
- * If a previous utterance is still playing, queues this one (FIFO, cap 20)
1170
- * instead of cutting it off mid-sentence.
1171
- */
1172
- function speakText(text) {
1173
- return audioPlayback.speak(text);
1174
- }
1175
- /** Cancel speech synthesis. Drops the entire queue. */
1176
- function stopSpeaking() {
1177
- audioPlayback.stop();
1178
- }
1179
- /**
1180
- * Tear down per-component voice resources on unmount. Only cancels
1181
- * any in-flight recording / recognition (including the conversation
1182
- * loop).
1183
- *
1184
- * Deliberately does NOT cancel `speechSynthesis` — that queue is a
1185
- * window-level singleton and the user's auto-TTS toggle is persistent,
1186
- * so a page navigation must not interrupt the assistant mid-utterance.
1187
- * Explicit user actions (logout, mic click, toggle off) call
1188
- * `stopSpeaking` directly.
1189
- */
1190
- function destroyVoice() {
1191
- stopConversation();
1192
- if (recordingTimeout) {
1193
- clearTimeout(recordingTimeout);
1194
- recordingTimeout = null;
1195
- }
1196
- if (activeRecording) {
1197
- try {
1198
- activeRecording.cancel();
1199
- } catch {}
1200
- activeRecording = null;
1201
- }
1202
- if (activeRecognition) {
1203
- try {
1204
- activeRecognition.stop();
1205
- } catch {}
1206
- activeRecognition = null;
1207
- }
1208
- activeOnResult = null;
1209
- voiceState.interimTranscript = "";
1210
- voiceState.status = "idle";
1211
- }
1212
-
1213
- export { request as a, buildHeaders as b, requireOk as c, destroyVoice as d, startConversation as e, startListening as f, stopConversation as g, stopListening as h, stopSpeaking as i, notifications as n, readErrorMessage as r, speakText as s, themeService as t, voiceState as v };
1214
- //# sourceMappingURL=voice-state.svelte-BAiqUOIX.js.map