@openpalm/ui 0.11.5-rc.3 → 0.11.5-rc.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 (391) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/4.Cg0DWfRJ.css +1 -0
  3. package/build/client/_app/immutable/assets/4.Cg0DWfRJ.css.br +0 -0
  4. package/build/client/_app/immutable/assets/4.Cg0DWfRJ.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/7.BzioASK3.css +1 -0
  6. package/build/client/_app/immutable/assets/7.BzioASK3.css.br +0 -0
  7. package/build/client/_app/immutable/assets/7.BzioASK3.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/ChatMessage.nPUEFb-s.css +1 -0
  9. package/build/client/_app/immutable/assets/ChatMessage.nPUEFb-s.css.br +0 -0
  10. package/build/client/_app/immutable/assets/ChatMessage.nPUEFb-s.css.gz +0 -0
  11. package/build/client/_app/immutable/chunks/B0yFRekZ.js +3 -0
  12. package/build/client/_app/immutable/chunks/B0yFRekZ.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/B0yFRekZ.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{BQ0vnNWj.js → BAaXfhM-.js} +1 -1
  15. package/build/client/_app/immutable/chunks/BAaXfhM-.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/BAaXfhM-.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/BTrxgLOM.js +1 -0
  18. package/build/client/_app/immutable/chunks/BTrxgLOM.js.br +2 -0
  19. package/build/client/_app/immutable/chunks/BTrxgLOM.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{irujFCsS.js → B_FOicoS.js} +1 -1
  21. package/build/client/_app/immutable/chunks/B_FOicoS.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/B_FOicoS.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/CDYZd3Dt.js +1 -0
  24. package/build/client/_app/immutable/chunks/CDYZd3Dt.js.br +1 -0
  25. package/build/client/_app/immutable/chunks/CDYZd3Dt.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/CVWppHrm.js +16 -0
  27. package/build/client/_app/immutable/chunks/CVWppHrm.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/CVWppHrm.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/DYcHS_qY.js +5 -0
  30. package/build/client/_app/immutable/chunks/DYcHS_qY.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/DYcHS_qY.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/{CDS1U3lf.js → HsxQhp5A.js} +2 -2
  33. package/build/client/_app/immutable/chunks/HsxQhp5A.js.br +0 -0
  34. package/build/client/_app/immutable/chunks/HsxQhp5A.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/{BTsRblfw.js → hgikw-Qd.js} +1 -1
  36. package/build/client/_app/immutable/chunks/hgikw-Qd.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/hgikw-Qd.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/xtI7_jDL.js +1 -0
  39. package/build/client/_app/immutable/chunks/xtI7_jDL.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/xtI7_jDL.js.gz +0 -0
  41. package/build/client/_app/immutable/entry/app.DtY5C9pR.js +2 -0
  42. package/build/client/_app/immutable/entry/app.DtY5C9pR.js.br +0 -0
  43. package/build/client/_app/immutable/entry/app.DtY5C9pR.js.gz +0 -0
  44. package/build/client/_app/immutable/entry/start.CmS1dlrE.js +1 -0
  45. package/build/client/_app/immutable/entry/start.CmS1dlrE.js.br +0 -0
  46. package/build/client/_app/immutable/entry/start.CmS1dlrE.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/0.CeRyHcWC.js +1 -0
  48. package/build/client/_app/immutable/nodes/0.CeRyHcWC.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/0.CeRyHcWC.js.gz +0 -0
  50. package/build/client/_app/immutable/nodes/1.BIqfJFCb.js +1 -0
  51. package/build/client/_app/immutable/nodes/1.BIqfJFCb.js.br +1 -1
  52. package/build/client/_app/immutable/nodes/1.BIqfJFCb.js.gz +0 -0
  53. package/build/client/_app/immutable/nodes/2.C-MzgTuq.js +1 -0
  54. package/build/client/_app/immutable/nodes/2.C-MzgTuq.js.br +0 -0
  55. package/build/client/_app/immutable/nodes/2.C-MzgTuq.js.gz +0 -0
  56. package/build/client/_app/immutable/nodes/3.DXmMKZyn.js +1 -0
  57. package/build/client/_app/immutable/nodes/3.DXmMKZyn.js.br +0 -0
  58. package/build/client/_app/immutable/nodes/3.DXmMKZyn.js.gz +0 -0
  59. package/build/client/_app/immutable/nodes/4.h8N33vpx.js +19 -0
  60. package/build/client/_app/immutable/nodes/4.h8N33vpx.js.br +0 -0
  61. package/build/client/_app/immutable/nodes/4.h8N33vpx.js.gz +0 -0
  62. package/build/client/_app/immutable/nodes/5.B2qtGelf.js +4 -0
  63. package/build/client/_app/immutable/nodes/5.B2qtGelf.js.br +0 -0
  64. package/build/client/_app/immutable/nodes/5.B2qtGelf.js.gz +0 -0
  65. package/build/client/_app/immutable/nodes/6.DrYb30Cc.js +1 -0
  66. package/build/client/_app/immutable/nodes/6.DrYb30Cc.js.br +0 -0
  67. package/build/client/_app/immutable/nodes/6.DrYb30Cc.js.gz +0 -0
  68. package/build/client/_app/immutable/nodes/7.CrDhK7am.js +1 -0
  69. package/build/client/_app/immutable/nodes/7.CrDhK7am.js.br +0 -0
  70. package/build/client/_app/immutable/nodes/7.CrDhK7am.js.gz +0 -0
  71. package/build/client/_app/immutable/nodes/8.CKAtL-gx.js +1 -0
  72. package/build/client/_app/immutable/nodes/8.CKAtL-gx.js.br +0 -0
  73. package/build/client/_app/immutable/nodes/8.CKAtL-gx.js.gz +0 -0
  74. package/build/client/_app/immutable/nodes/9.B1IAKpfH.js +5 -0
  75. package/build/client/_app/immutable/nodes/9.B1IAKpfH.js.br +0 -0
  76. package/build/client/_app/immutable/nodes/9.B1IAKpfH.js.gz +0 -0
  77. package/build/client/_app/version.json +1 -1
  78. package/build/client/_app/version.json.br +1 -1
  79. package/build/client/_app/version.json.gz +0 -0
  80. package/build/server/chunks/0-sfmVs00_.js +9 -0
  81. package/build/server/chunks/{0-BGsPZcaQ.js.map → 0-sfmVs00_.js.map} +1 -1
  82. package/build/server/chunks/1-BQlukPTN.js +9 -0
  83. package/build/server/chunks/{1-Daoybjaw.js.map → 1-BQlukPTN.js.map} +1 -1
  84. package/build/server/chunks/{2-DQWoUtW1.js → 2-wNOz2qR7.js} +2 -2
  85. package/build/server/chunks/{2-DQWoUtW1.js.map → 2-wNOz2qR7.js.map} +1 -1
  86. package/build/server/chunks/{3-COIGgysA.js → 3-CMcVVZ5t.js} +2 -2
  87. package/build/server/chunks/{3-COIGgysA.js.map → 3-CMcVVZ5t.js.map} +1 -1
  88. package/build/server/chunks/4-C79a4Yto.js +9 -0
  89. package/build/server/chunks/4-C79a4Yto.js.map +1 -0
  90. package/build/server/chunks/5-D7eeN25a.js +9 -0
  91. package/build/server/chunks/{5-BfmhtNP9.js.map → 5-D7eeN25a.js.map} +1 -1
  92. package/build/server/chunks/6-Dg79fiQc.js +9 -0
  93. package/build/server/chunks/{6-AcylLX8-.js.map → 6-Dg79fiQc.js.map} +1 -1
  94. package/build/server/chunks/7-DTavGKhw.js +9 -0
  95. package/build/server/chunks/7-DTavGKhw.js.map +1 -0
  96. package/build/server/chunks/{8-DMgWQQBm.js → 8-B0FQ5gh5.js} +3 -3
  97. package/build/server/chunks/{8-DMgWQQBm.js.map → 8-B0FQ5gh5.js.map} +1 -1
  98. package/build/server/chunks/{9-CGVsBC0_.js → 9-BCmr-315.js} +2 -2
  99. package/build/server/chunks/{9-CGVsBC0_.js.map → 9-BCmr-315.js.map} +1 -1
  100. package/build/server/chunks/{_page.svelte-C0eMsRDk.js → ChatMessage-CzW3dV57.js} +73 -105
  101. package/build/server/chunks/ChatMessage-CzW3dV57.js.map +1 -0
  102. package/build/server/chunks/{Navbar-C9kE6wR-.js → Navbar-EBUPxUnS.js} +670 -142
  103. package/build/server/chunks/Navbar-EBUPxUnS.js.map +1 -0
  104. package/build/server/chunks/{_layout.svelte-DCfzq18z.js → _layout.svelte-e5vEwOWj.js} +2 -2
  105. package/build/server/chunks/{_layout.svelte-DCfzq18z.js.map → _layout.svelte-e5vEwOWj.js.map} +1 -1
  106. package/build/server/chunks/_page.svelte-CScIJqid.js +252 -0
  107. package/build/server/chunks/_page.svelte-CScIJqid.js.map +1 -0
  108. package/build/server/chunks/{_page.svelte-Dl3WoXNo.js → _page.svelte-CXGT7iVI.js} +251 -15
  109. package/build/server/chunks/_page.svelte-CXGT7iVI.js.map +1 -0
  110. package/build/server/chunks/{_page.svelte-B3FJ13Ci.js → _page.svelte-Dc9YczvY.js} +6 -6
  111. package/build/server/chunks/{_page.svelte-B3FJ13Ci.js.map → _page.svelte-Dc9YczvY.js.map} +1 -1
  112. package/build/server/chunks/{_page.svelte-Dnt12F6c.js → _page.svelte-Dq0B2wTX.js} +9 -7
  113. package/build/server/chunks/_page.svelte-Dq0B2wTX.js.map +1 -0
  114. package/build/server/chunks/{_page.svelte-BA7DptUV.js → _page.svelte-Du_FGvId.js} +3 -3
  115. package/build/server/chunks/{_page.svelte-BA7DptUV.js.map → _page.svelte-Du_FGvId.js.map} +1 -1
  116. package/build/server/chunks/{_server.ts-CVxiERfc.js → _server.ts--ajZwgpx.js} +4 -4
  117. package/build/server/chunks/{_server.ts-CVxiERfc.js.map → _server.ts--ajZwgpx.js.map} +1 -1
  118. package/build/server/chunks/{_server.ts-Gbkg-oto.js → _server.ts-B-YtpFZv.js} +4 -4
  119. package/build/server/chunks/{_server.ts-Gbkg-oto.js.map → _server.ts-B-YtpFZv.js.map} +1 -1
  120. package/build/server/chunks/{_server.ts-CbOKfJ3v.js → _server.ts-B3n_KrVi.js} +6 -6
  121. package/build/server/chunks/{_server.ts-CbOKfJ3v.js.map → _server.ts-B3n_KrVi.js.map} +1 -1
  122. package/build/server/chunks/{_server.ts-D3QPUpDc.js → _server.ts-B8JGa5NB.js} +4 -4
  123. package/build/server/chunks/{_server.ts-D3QPUpDc.js.map → _server.ts-B8JGa5NB.js.map} +1 -1
  124. package/build/server/chunks/{_server.ts-DsTUwnu1.js → _server.ts-B8vW8q3-.js} +4 -4
  125. package/build/server/chunks/{_server.ts-DsTUwnu1.js.map → _server.ts-B8vW8q3-.js.map} +1 -1
  126. package/build/server/chunks/{_server.ts-CreuvDch.js → _server.ts-BCivjDa1.js} +4 -4
  127. package/build/server/chunks/{_server.ts-CreuvDch.js.map → _server.ts-BCivjDa1.js.map} +1 -1
  128. package/build/server/chunks/{_server.ts-BGqa6Laa.js → _server.ts-BGMXMZ3f.js} +4 -4
  129. package/build/server/chunks/_server.ts-BGMXMZ3f.js.map +1 -0
  130. package/build/server/chunks/{_server.ts-B8YF9aVx.js → _server.ts-BG_3Aam5.js} +4 -4
  131. package/build/server/chunks/{_server.ts-B8YF9aVx.js.map → _server.ts-BG_3Aam5.js.map} +1 -1
  132. package/build/server/chunks/{_server.ts-CqH3nv-S.js → _server.ts-BQlauqG7.js} +5 -5
  133. package/build/server/chunks/{_server.ts-CqH3nv-S.js.map → _server.ts-BQlauqG7.js.map} +1 -1
  134. package/build/server/chunks/{_server.ts-Dd4Mh0JV.js → _server.ts-BQtDb5rW.js} +4 -4
  135. package/build/server/chunks/{_server.ts-Dd4Mh0JV.js.map → _server.ts-BQtDb5rW.js.map} +1 -1
  136. package/build/server/chunks/{_server.ts-BdLKHRnY.js → _server.ts-BTFsY3ns.js} +6 -6
  137. package/build/server/chunks/{_server.ts-BdLKHRnY.js.map → _server.ts-BTFsY3ns.js.map} +1 -1
  138. package/build/server/chunks/{_server.ts-3JO3CKsE.js → _server.ts-BUuhZLQW.js} +4 -4
  139. package/build/server/chunks/{_server.ts-3JO3CKsE.js.map → _server.ts-BUuhZLQW.js.map} +1 -1
  140. package/build/server/chunks/{_server.ts-D8cp-Em3.js → _server.ts-BYHQLzIU.js} +4 -4
  141. package/build/server/chunks/{_server.ts-D8cp-Em3.js.map → _server.ts-BYHQLzIU.js.map} +1 -1
  142. package/build/server/chunks/{_server.ts-DzIilMO5.js → _server.ts-BYNejrbv.js} +2 -2
  143. package/build/server/chunks/{_server.ts-DzIilMO5.js.map → _server.ts-BYNejrbv.js.map} +1 -1
  144. package/build/server/chunks/{_server.ts-CdB1K2M6.js → _server.ts-BZNECWdo.js} +2 -2
  145. package/build/server/chunks/{_server.ts-CdB1K2M6.js.map → _server.ts-BZNECWdo.js.map} +1 -1
  146. package/build/server/chunks/{_server.ts-B31I037d.js → _server.ts-Bd95fWI2.js} +6 -6
  147. package/build/server/chunks/{_server.ts-B31I037d.js.map → _server.ts-Bd95fWI2.js.map} +1 -1
  148. package/build/server/chunks/{_server.ts-SLlbT28g.js → _server.ts-BdyV0_Is.js} +2 -2
  149. package/build/server/chunks/{_server.ts-SLlbT28g.js.map → _server.ts-BdyV0_Is.js.map} +1 -1
  150. package/build/server/chunks/{_server.ts-CH8uRkxq.js → _server.ts-BfXe8M8I.js} +4 -4
  151. package/build/server/chunks/{_server.ts-CH8uRkxq.js.map → _server.ts-BfXe8M8I.js.map} +1 -1
  152. package/build/server/chunks/{_server.ts-B8EZxkK3.js → _server.ts-BglWcbgl.js} +5 -5
  153. package/build/server/chunks/{_server.ts-B8EZxkK3.js.map → _server.ts-BglWcbgl.js.map} +1 -1
  154. package/build/server/chunks/{_server.ts-BvbnbZsl.js → _server.ts-BhduAFwe.js} +4 -4
  155. package/build/server/chunks/{_server.ts-BvbnbZsl.js.map → _server.ts-BhduAFwe.js.map} +1 -1
  156. package/build/server/chunks/{_server.ts-C8BrkC8T.js → _server.ts-Bi7Kdi9Z.js} +5 -5
  157. package/build/server/chunks/{_server.ts-C8BrkC8T.js.map → _server.ts-Bi7Kdi9Z.js.map} +1 -1
  158. package/build/server/chunks/{_server.ts-pQ9okj_b.js → _server.ts-BnCNI_5v.js} +6 -6
  159. package/build/server/chunks/{_server.ts-pQ9okj_b.js.map → _server.ts-BnCNI_5v.js.map} +1 -1
  160. package/build/server/chunks/{_server.ts-CtltE_T-.js → _server.ts-Bttq5XEc.js} +2 -2
  161. package/build/server/chunks/{_server.ts-CtltE_T-.js.map → _server.ts-Bttq5XEc.js.map} +1 -1
  162. package/build/server/chunks/{_server.ts-CpJ08_Lw.js → _server.ts-C0gphQE8.js} +4 -4
  163. package/build/server/chunks/{_server.ts-CpJ08_Lw.js.map → _server.ts-C0gphQE8.js.map} +1 -1
  164. package/build/server/chunks/{_server.ts-DL9hlvL8.js → _server.ts-C0p_epYa.js} +4 -4
  165. package/build/server/chunks/{_server.ts-DL9hlvL8.js.map → _server.ts-C0p_epYa.js.map} +1 -1
  166. package/build/server/chunks/{_server.ts-CXI7k8hl.js → _server.ts-CBW-iSGY.js} +4 -4
  167. package/build/server/chunks/{_server.ts-CXI7k8hl.js.map → _server.ts-CBW-iSGY.js.map} +1 -1
  168. package/build/server/chunks/{_server.ts-BhRtn8Xn.js → _server.ts-CBYhHA1_.js} +4 -4
  169. package/build/server/chunks/{_server.ts-BhRtn8Xn.js.map → _server.ts-CBYhHA1_.js.map} +1 -1
  170. package/build/server/chunks/{_server.ts-CX2sHcZR.js → _server.ts-CFjN9JNk.js} +4 -4
  171. package/build/server/chunks/{_server.ts-CX2sHcZR.js.map → _server.ts-CFjN9JNk.js.map} +1 -1
  172. package/build/server/chunks/{_server.ts-CIEz-ybk.js → _server.ts-CHd9_WPs.js} +4 -4
  173. package/build/server/chunks/{_server.ts-CIEz-ybk.js.map → _server.ts-CHd9_WPs.js.map} +1 -1
  174. package/build/server/chunks/{_server.ts-4HorMS2R.js → _server.ts-CKqIuso7.js} +4 -4
  175. package/build/server/chunks/{_server.ts-4HorMS2R.js.map → _server.ts-CKqIuso7.js.map} +1 -1
  176. package/build/server/chunks/{_server.ts-DLVGDzlE.js → _server.ts-CObmPmDw.js} +4 -4
  177. package/build/server/chunks/{_server.ts-DLVGDzlE.js.map → _server.ts-CObmPmDw.js.map} +1 -1
  178. package/build/server/chunks/{_server.ts-MGn-MXr5.js → _server.ts-CQn6OWsw.js} +4 -4
  179. package/build/server/chunks/{_server.ts-MGn-MXr5.js.map → _server.ts-CQn6OWsw.js.map} +1 -1
  180. package/build/server/chunks/{_server.ts-BWtTOsFi.js → _server.ts-CQucsScY.js} +4 -4
  181. package/build/server/chunks/{_server.ts-BWtTOsFi.js.map → _server.ts-CQucsScY.js.map} +1 -1
  182. package/build/server/chunks/{_server.ts-B3ntDGZM.js → _server.ts-CZMBEF_P.js} +5 -5
  183. package/build/server/chunks/{_server.ts-B3ntDGZM.js.map → _server.ts-CZMBEF_P.js.map} +1 -1
  184. package/build/server/chunks/_server.ts-Cay6JJmu.js +205 -0
  185. package/build/server/chunks/_server.ts-Cay6JJmu.js.map +1 -0
  186. package/build/server/chunks/_server.ts-Cdq-yzqP.js +627 -0
  187. package/build/server/chunks/_server.ts-Cdq-yzqP.js.map +1 -0
  188. package/build/server/chunks/{_server.ts-1mdOjWEN.js → _server.ts-Ch8LouSG.js} +5 -5
  189. package/build/server/chunks/{_server.ts-1mdOjWEN.js.map → _server.ts-Ch8LouSG.js.map} +1 -1
  190. package/build/server/chunks/{_server.ts-B1Jl9Grz.js → _server.ts-Cmi0m_Ec.js} +4 -4
  191. package/build/server/chunks/{_server.ts-B1Jl9Grz.js.map → _server.ts-Cmi0m_Ec.js.map} +1 -1
  192. package/build/server/chunks/{_server.ts-Bq4Oko-2.js → _server.ts-CmshKmzd.js} +4 -4
  193. package/build/server/chunks/{_server.ts-Bq4Oko-2.js.map → _server.ts-CmshKmzd.js.map} +1 -1
  194. package/build/server/chunks/{_server.ts-C7K7bv8w.js → _server.ts-CoIWXJLt.js} +5 -5
  195. package/build/server/chunks/{_server.ts-C7K7bv8w.js.map → _server.ts-CoIWXJLt.js.map} +1 -1
  196. package/build/server/chunks/{_server.ts-E5YqcwqQ.js → _server.ts-CqviakL3.js} +4 -4
  197. package/build/server/chunks/{_server.ts-E5YqcwqQ.js.map → _server.ts-CqviakL3.js.map} +1 -1
  198. package/build/server/chunks/_server.ts-CrK5Xjnh.js +86 -0
  199. package/build/server/chunks/_server.ts-CrK5Xjnh.js.map +1 -0
  200. package/build/server/chunks/{_server.ts-BLUm8wAq.js → _server.ts-CsUJia-4.js} +4 -4
  201. package/build/server/chunks/{_server.ts-BLUm8wAq.js.map → _server.ts-CsUJia-4.js.map} +1 -1
  202. package/build/server/chunks/{_server.ts-BY7nR9Ev.js → _server.ts-CtqksBun.js} +4 -4
  203. package/build/server/chunks/{_server.ts-BY7nR9Ev.js.map → _server.ts-CtqksBun.js.map} +1 -1
  204. package/build/server/chunks/{_server.ts-IzD0bafW.js → _server.ts-CuFSHsdA.js} +5 -5
  205. package/build/server/chunks/{_server.ts-IzD0bafW.js.map → _server.ts-CuFSHsdA.js.map} +1 -1
  206. package/build/server/chunks/{_server.ts-CzoE8edN.js → _server.ts-CvBgeFp9.js} +5 -5
  207. package/build/server/chunks/{_server.ts-CzoE8edN.js.map → _server.ts-CvBgeFp9.js.map} +1 -1
  208. package/build/server/chunks/{_server.ts-DY3ZDXdA.js → _server.ts-CxOokd6P.js} +4 -4
  209. package/build/server/chunks/{_server.ts-DY3ZDXdA.js.map → _server.ts-CxOokd6P.js.map} +1 -1
  210. package/build/server/chunks/{_server.ts-Bu_7eQaL.js → _server.ts-CxpkPdkw.js} +5 -5
  211. package/build/server/chunks/{_server.ts-Bu_7eQaL.js.map → _server.ts-CxpkPdkw.js.map} +1 -1
  212. package/build/server/chunks/{_server.ts-BUIWPYRF.js → _server.ts-D-hh_BTK.js} +4 -4
  213. package/build/server/chunks/{_server.ts-BUIWPYRF.js.map → _server.ts-D-hh_BTK.js.map} +1 -1
  214. package/build/server/chunks/{_server.ts-D-Vwef5C.js → _server.ts-D064BG7i.js} +4 -4
  215. package/build/server/chunks/{_server.ts-D-Vwef5C.js.map → _server.ts-D064BG7i.js.map} +1 -1
  216. package/build/server/chunks/{_server.ts-DVRyf5BI.js → _server.ts-D0fThJEL.js} +4 -4
  217. package/build/server/chunks/{_server.ts-DVRyf5BI.js.map → _server.ts-D0fThJEL.js.map} +1 -1
  218. package/build/server/chunks/{_server.ts-CExwMomX.js → _server.ts-D4QpYVnk.js} +4 -4
  219. package/build/server/chunks/{_server.ts-CExwMomX.js.map → _server.ts-D4QpYVnk.js.map} +1 -1
  220. package/build/server/chunks/{_server.ts-DHBX6Ary.js → _server.ts-DABvBtNg.js} +5 -5
  221. package/build/server/chunks/{_server.ts-DHBX6Ary.js.map → _server.ts-DABvBtNg.js.map} +1 -1
  222. package/build/server/chunks/{_server.ts-BHmCir74.js → _server.ts-DBD7W3nM.js} +4 -4
  223. package/build/server/chunks/{_server.ts-BHmCir74.js.map → _server.ts-DBD7W3nM.js.map} +1 -1
  224. package/build/server/chunks/{_server.ts-C_EnHMEu.js → _server.ts-DDhNa_X1.js} +4 -4
  225. package/build/server/chunks/{_server.ts-C_EnHMEu.js.map → _server.ts-DDhNa_X1.js.map} +1 -1
  226. package/build/server/chunks/{_server.ts-Dc9XEMmF.js → _server.ts-DFBxMXVv.js} +4 -4
  227. package/build/server/chunks/{_server.ts-Dc9XEMmF.js.map → _server.ts-DFBxMXVv.js.map} +1 -1
  228. package/build/server/chunks/{_server.ts-DlwXpopR.js → _server.ts-DLS_wObr.js} +3 -3
  229. package/build/server/chunks/{_server.ts-DlwXpopR.js.map → _server.ts-DLS_wObr.js.map} +1 -1
  230. package/build/server/chunks/{_server.ts-Lzz9ashZ.js → _server.ts-DTlXzoMP.js} +4 -4
  231. package/build/server/chunks/{_server.ts-Lzz9ashZ.js.map → _server.ts-DTlXzoMP.js.map} +1 -1
  232. package/build/server/chunks/{_server.ts-Do5L_4tt.js → _server.ts-Dicprv7A.js} +4 -4
  233. package/build/server/chunks/{_server.ts-Do5L_4tt.js.map → _server.ts-Dicprv7A.js.map} +1 -1
  234. package/build/server/chunks/{_server.ts-CD-Cddqe.js → _server.ts-DooshvGc.js} +5 -5
  235. package/build/server/chunks/{_server.ts-CD-Cddqe.js.map → _server.ts-DooshvGc.js.map} +1 -1
  236. package/build/server/chunks/{_server.ts-j5xF-dJX.js → _server.ts-DpnQQsEi.js} +4 -4
  237. package/build/server/chunks/{_server.ts-j5xF-dJX.js.map → _server.ts-DpnQQsEi.js.map} +1 -1
  238. package/build/server/chunks/{_server.ts-CXmwf1pu.js → _server.ts-DqnxZoKV.js} +2 -2
  239. package/build/server/chunks/{_server.ts-CXmwf1pu.js.map → _server.ts-DqnxZoKV.js.map} +1 -1
  240. package/build/server/chunks/{_server.ts-DPC8qYUD.js → _server.ts-DwH287WQ.js} +4 -4
  241. package/build/server/chunks/{_server.ts-DPC8qYUD.js.map → _server.ts-DwH287WQ.js.map} +1 -1
  242. package/build/server/chunks/{_server.ts-CHQmAGEC.js → _server.ts-SA9d0x_K.js} +5 -5
  243. package/build/server/chunks/{_server.ts-CHQmAGEC.js.map → _server.ts-SA9d0x_K.js.map} +1 -1
  244. package/build/server/chunks/{_server.ts-C4pf3VKi.js → _server.ts-TS_ttjdr.js} +4 -4
  245. package/build/server/chunks/{_server.ts-C4pf3VKi.js.map → _server.ts-TS_ttjdr.js.map} +1 -1
  246. package/build/server/chunks/{_server.ts-BEjyvkVV.js → _server.ts-VtDFzmOm.js} +4 -4
  247. package/build/server/chunks/{_server.ts-BEjyvkVV.js.map → _server.ts-VtDFzmOm.js.map} +1 -1
  248. package/build/server/chunks/_server.ts-Y57oqscW.js +48 -0
  249. package/build/server/chunks/_server.ts-Y57oqscW.js.map +1 -0
  250. package/build/server/chunks/{_server.ts-CeeR1W32.js → _server.ts-YHGTRtDD.js} +4 -4
  251. package/build/server/chunks/{_server.ts-CeeR1W32.js.map → _server.ts-YHGTRtDD.js.map} +1 -1
  252. package/build/server/chunks/{_server.ts-CciSVwzg.js → _server.ts-Zu8ZTux3.js} +5 -5
  253. package/build/server/chunks/{_server.ts-CciSVwzg.js.map → _server.ts-Zu8ZTux3.js.map} +1 -1
  254. package/build/server/chunks/{_server.ts-CNLz6iJ7.js → _server.ts-_lxrLHOI.js} +4 -4
  255. package/build/server/chunks/{_server.ts-CNLz6iJ7.js.map → _server.ts-_lxrLHOI.js.map} +1 -1
  256. package/build/server/chunks/{_server.ts-BTvZB-WH.js → _server.ts-dBLS5OxC.js} +4 -4
  257. package/build/server/chunks/{_server.ts-BTvZB-WH.js.map → _server.ts-dBLS5OxC.js.map} +1 -1
  258. package/build/server/chunks/{_server.ts-ykNeG8km.js → _server.ts-jUybF0F9.js} +4 -4
  259. package/build/server/chunks/{_server.ts-ykNeG8km.js.map → _server.ts-jUybF0F9.js.map} +1 -1
  260. package/build/server/chunks/{_server.ts-C8zFV8J3.js → _server.ts-mFCCnU2f.js} +4 -4
  261. package/build/server/chunks/{_server.ts-C8zFV8J3.js.map → _server.ts-mFCCnU2f.js.map} +1 -1
  262. package/build/server/chunks/{_server.ts-yWBMi6sn.js → _server.ts-nOJLfmaj.js} +6 -6
  263. package/build/server/chunks/{_server.ts-yWBMi6sn.js.map → _server.ts-nOJLfmaj.js.map} +1 -1
  264. package/build/server/chunks/{_server.ts-DAW24-9-.js → _server.ts-pJgm08Ns.js} +4 -4
  265. package/build/server/chunks/{_server.ts-DAW24-9-.js.map → _server.ts-pJgm08Ns.js.map} +1 -1
  266. package/build/server/chunks/{_server.ts-BNJn20vV.js → _server.ts-vuXd3nrT.js} +4 -4
  267. package/build/server/chunks/{_server.ts-BNJn20vV.js.map → _server.ts-vuXd3nrT.js.map} +1 -1
  268. package/build/server/chunks/{_server.ts-QvBpEIYu.js → _server.ts-wKN3c9Bs.js} +4 -4
  269. package/build/server/chunks/{_server.ts-QvBpEIYu.js.map → _server.ts-wKN3c9Bs.js.map} +1 -1
  270. package/build/server/chunks/{addon-helpers-DBJL8kvq.js → addon-helpers-D3GJCulD.js} +3 -3
  271. package/build/server/chunks/{addon-helpers-DBJL8kvq.js.map → addon-helpers-D3GJCulD.js.map} +1 -1
  272. package/build/server/chunks/{akm-hO0p79ZE.js → akm-B_BIZJJv.js} +2 -2
  273. package/build/server/chunks/{akm-hO0p79ZE.js.map → akm-B_BIZJJv.js.map} +1 -1
  274. package/build/server/chunks/{client-DchoQXpW.js → client-DuNIsVic.js} +2 -2
  275. package/build/server/chunks/{client-DchoQXpW.js.map → client-DuNIsVic.js.map} +1 -1
  276. package/build/server/chunks/{config-5vfdWPGq.js → config-UnF5M7J6.js} +2 -2
  277. package/build/server/chunks/{config-5vfdWPGq.js.map → config-UnF5M7J6.js.map} +1 -1
  278. package/build/server/chunks/{docker-DYeytgDI.js → docker-DmrYwY_e.js} +2 -2
  279. package/build/server/chunks/{docker-DYeytgDI.js.map → docker-DmrYwY_e.js.map} +1 -1
  280. package/build/server/chunks/{endpoints-pIoXJCW6.js → endpoints-D6uoesB9.js} +19 -6
  281. package/build/server/chunks/endpoints-D6uoesB9.js.map +1 -0
  282. package/build/server/chunks/{environment-B0PbsX5P.js → environment-C9HyCxX9.js} +2 -2
  283. package/build/server/chunks/{environment-B0PbsX5P.js.map → environment-C9HyCxX9.js.map} +1 -1
  284. package/build/server/chunks/{error.svelte-Cmr7gpdL.js → error.svelte-BajT8v3i.js} +4 -4
  285. package/build/server/chunks/{error.svelte-Cmr7gpdL.js.map → error.svelte-BajT8v3i.js.map} +1 -1
  286. package/build/server/chunks/{helpers-CVirrNSz.js → helpers-zCNRvZpT.js} +3 -3
  287. package/build/server/chunks/{helpers-CVirrNSz.js.map → helpers-zCNRvZpT.js.map} +1 -1
  288. package/build/server/chunks/{hooks.server-pc-TSpQy.js → hooks.server-BKK-8Ct6.js} +6 -6
  289. package/build/server/chunks/hooks.server-BKK-8Ct6.js.map +1 -0
  290. package/build/server/chunks/{http-DGsfa0DV.js → http-Cm-sRzTa.js} +2 -2
  291. package/build/server/chunks/{http-DGsfa0DV.js.map → http-Cm-sRzTa.js.map} +1 -1
  292. package/build/server/chunks/{internal-DriC3vi3.js → internal-LXD6a4Om.js} +3 -3
  293. package/build/server/chunks/{internal-DriC3vi3.js.map → internal-LXD6a4Om.js.map} +1 -1
  294. package/build/server/chunks/{session-cookie-DEuOwtHY.js → session-cookie-CoF3FU_0.js} +2 -2
  295. package/build/server/chunks/{session-cookie-DEuOwtHY.js.map → session-cookie-CoF3FU_0.js.map} +1 -1
  296. package/build/server/chunks/{setup-deploy-D4bnmfpV.js → setup-deploy-CVYxUJZD.js} +2 -2
  297. package/build/server/chunks/{setup-deploy-D4bnmfpV.js.map → setup-deploy-CVYxUJZD.js.map} +1 -1
  298. package/build/server/chunks/{src-CyeWH4Df.js → src-efp8mb8-.js} +567 -81
  299. package/build/server/chunks/src-efp8mb8-.js.map +1 -0
  300. package/build/server/chunks/{state-BcUnjLg5.js → state-z9dl5k8n.js} +2 -2
  301. package/build/server/chunks/{state-BcUnjLg5.js.map → state-z9dl5k8n.js.map} +1 -1
  302. package/build/server/chunks/{theme-state.svelte-CeABRes-.js → theme-state.svelte-BNtUaCD7.js} +119 -20
  303. package/build/server/chunks/theme-state.svelte-BNtUaCD7.js.map +1 -0
  304. package/build/server/index.js +2 -2
  305. package/build/server/manifest.js +106 -85
  306. package/build/server/manifest.js.map +1 -1
  307. package/package.json +3 -2
  308. package/build/client/_app/immutable/assets/4.BFLRjZM9.css +0 -1
  309. package/build/client/_app/immutable/assets/4.BFLRjZM9.css.br +0 -0
  310. package/build/client/_app/immutable/assets/4.BFLRjZM9.css.gz +0 -0
  311. package/build/client/_app/immutable/assets/7.DKl0e2Fb.css +0 -1
  312. package/build/client/_app/immutable/assets/7.DKl0e2Fb.css.br +0 -0
  313. package/build/client/_app/immutable/assets/7.DKl0e2Fb.css.gz +0 -0
  314. package/build/client/_app/immutable/chunks/0swOyi-5.js +0 -3
  315. package/build/client/_app/immutable/chunks/0swOyi-5.js.br +0 -0
  316. package/build/client/_app/immutable/chunks/0swOyi-5.js.gz +0 -0
  317. package/build/client/_app/immutable/chunks/B4LSIsxy.js +0 -1
  318. package/build/client/_app/immutable/chunks/B4LSIsxy.js.br +0 -2
  319. package/build/client/_app/immutable/chunks/B4LSIsxy.js.gz +0 -0
  320. package/build/client/_app/immutable/chunks/BQ0vnNWj.js.br +0 -1
  321. package/build/client/_app/immutable/chunks/BQ0vnNWj.js.gz +0 -0
  322. package/build/client/_app/immutable/chunks/BTsRblfw.js.br +0 -0
  323. package/build/client/_app/immutable/chunks/BTsRblfw.js.gz +0 -0
  324. package/build/client/_app/immutable/chunks/Bmfn2m9N.js +0 -1
  325. package/build/client/_app/immutable/chunks/Bmfn2m9N.js.br +0 -1
  326. package/build/client/_app/immutable/chunks/Bmfn2m9N.js.gz +0 -0
  327. package/build/client/_app/immutable/chunks/C-9oV3QK.js +0 -1
  328. package/build/client/_app/immutable/chunks/C-9oV3QK.js.br +0 -0
  329. package/build/client/_app/immutable/chunks/C-9oV3QK.js.gz +0 -0
  330. package/build/client/_app/immutable/chunks/CDS1U3lf.js.br +0 -0
  331. package/build/client/_app/immutable/chunks/CDS1U3lf.js.gz +0 -0
  332. package/build/client/_app/immutable/chunks/TM1MyO6b.js +0 -5
  333. package/build/client/_app/immutable/chunks/TM1MyO6b.js.br +0 -0
  334. package/build/client/_app/immutable/chunks/TM1MyO6b.js.gz +0 -0
  335. package/build/client/_app/immutable/chunks/irujFCsS.js.br +0 -0
  336. package/build/client/_app/immutable/chunks/irujFCsS.js.gz +0 -0
  337. package/build/client/_app/immutable/entry/app.j4FjlmJV.js +0 -2
  338. package/build/client/_app/immutable/entry/app.j4FjlmJV.js.br +0 -0
  339. package/build/client/_app/immutable/entry/app.j4FjlmJV.js.gz +0 -0
  340. package/build/client/_app/immutable/entry/start.BG0VgQz3.js +0 -1
  341. package/build/client/_app/immutable/entry/start.BG0VgQz3.js.br +0 -1
  342. package/build/client/_app/immutable/entry/start.BG0VgQz3.js.gz +0 -0
  343. package/build/client/_app/immutable/nodes/0.C7eQ_ow9.js +0 -1
  344. package/build/client/_app/immutable/nodes/0.C7eQ_ow9.js.br +0 -0
  345. package/build/client/_app/immutable/nodes/0.C7eQ_ow9.js.gz +0 -0
  346. package/build/client/_app/immutable/nodes/1.DOderKqv.js +0 -1
  347. package/build/client/_app/immutable/nodes/1.DOderKqv.js.br +0 -1
  348. package/build/client/_app/immutable/nodes/1.DOderKqv.js.gz +0 -0
  349. package/build/client/_app/immutable/nodes/2.B-8ehRO1.js +0 -1
  350. package/build/client/_app/immutable/nodes/2.B-8ehRO1.js.br +0 -0
  351. package/build/client/_app/immutable/nodes/2.B-8ehRO1.js.gz +0 -0
  352. package/build/client/_app/immutable/nodes/3.B_FXzjZB.js +0 -1
  353. package/build/client/_app/immutable/nodes/3.B_FXzjZB.js.br +0 -0
  354. package/build/client/_app/immutable/nodes/3.B_FXzjZB.js.gz +0 -0
  355. package/build/client/_app/immutable/nodes/4.CL9pbPfw.js +0 -19
  356. package/build/client/_app/immutable/nodes/4.CL9pbPfw.js.br +0 -0
  357. package/build/client/_app/immutable/nodes/4.CL9pbPfw.js.gz +0 -0
  358. package/build/client/_app/immutable/nodes/5.By0afU0Y.js +0 -4
  359. package/build/client/_app/immutable/nodes/5.By0afU0Y.js.br +0 -0
  360. package/build/client/_app/immutable/nodes/5.By0afU0Y.js.gz +0 -0
  361. package/build/client/_app/immutable/nodes/6.BnWmdf6t.js +0 -1
  362. package/build/client/_app/immutable/nodes/6.BnWmdf6t.js.br +0 -0
  363. package/build/client/_app/immutable/nodes/6.BnWmdf6t.js.gz +0 -0
  364. package/build/client/_app/immutable/nodes/7.RAc8_3qJ.js +0 -15
  365. package/build/client/_app/immutable/nodes/7.RAc8_3qJ.js.br +0 -0
  366. package/build/client/_app/immutable/nodes/7.RAc8_3qJ.js.gz +0 -0
  367. package/build/client/_app/immutable/nodes/8.Dytsowyk.js +0 -1
  368. package/build/client/_app/immutable/nodes/8.Dytsowyk.js.br +0 -0
  369. package/build/client/_app/immutable/nodes/8.Dytsowyk.js.gz +0 -0
  370. package/build/client/_app/immutable/nodes/9.CFQabEMi.js +0 -5
  371. package/build/client/_app/immutable/nodes/9.CFQabEMi.js.br +0 -0
  372. package/build/client/_app/immutable/nodes/9.CFQabEMi.js.gz +0 -0
  373. package/build/server/chunks/0-BGsPZcaQ.js +0 -9
  374. package/build/server/chunks/1-Daoybjaw.js +0 -9
  375. package/build/server/chunks/4-Lm1O6Rmh.js +0 -9
  376. package/build/server/chunks/4-Lm1O6Rmh.js.map +0 -1
  377. package/build/server/chunks/5-BfmhtNP9.js +0 -9
  378. package/build/server/chunks/6-AcylLX8-.js +0 -9
  379. package/build/server/chunks/7-BT0zxD9E.js +0 -9
  380. package/build/server/chunks/7-BT0zxD9E.js.map +0 -1
  381. package/build/server/chunks/Navbar-C9kE6wR-.js.map +0 -1
  382. package/build/server/chunks/_page.svelte-C0eMsRDk.js.map +0 -1
  383. package/build/server/chunks/_page.svelte-Dl3WoXNo.js.map +0 -1
  384. package/build/server/chunks/_page.svelte-Dnt12F6c.js.map +0 -1
  385. package/build/server/chunks/_server.ts-B79PxL9c.js +0 -91
  386. package/build/server/chunks/_server.ts-B79PxL9c.js.map +0 -1
  387. package/build/server/chunks/_server.ts-BGqa6Laa.js.map +0 -1
  388. package/build/server/chunks/endpoints-pIoXJCW6.js.map +0 -1
  389. package/build/server/chunks/hooks.server-pc-TSpQy.js.map +0 -1
  390. package/build/server/chunks/src-CyeWH4Df.js.map +0 -1
  391. package/build/server/chunks/theme-state.svelte-CeABRes-.js.map +0 -1
@@ -1,7 +1,7 @@
1
- import { o as derived, r as escape_html, p as ensure_array_like, e as attr_class, d as attr, a8 as stringify, f as attr_style } from './dev-B6xUe35c.js';
2
- import { a as afterNavigate, o as onDestroy, g as goto } from './client-DchoQXpW.js';
3
- import { h as fetchEndpoints, o as setActiveEndpoint, m as listSessions, l as getSessionMessages, c as createSession, s as sendChatMessage, w as voiceState, q as speakText, r as stopSpeaking, d as destroyVoice, u as themeService } from './theme-state.svelte-CeABRes-.js';
4
- import { p as page } from './state-BcUnjLg5.js';
1
+ import { d as attr, o as derived, r as escape_html, p as ensure_array_like, e as attr_class, a8 as stringify, f as attr_style } from './dev-B6xUe35c.js';
2
+ import { a as afterNavigate, o as onDestroy, g as goto } from './client-DuNIsVic.js';
3
+ import { h as fetchEndpoints, q as setActiveEndpoint, A as voiceState, u as speakText, m as listSessions, l as getSessionMessages, c as createSession, v as startChatMessageTurn, s as sendChatMessage, o as replyChatPermission, p as replyChatQuestion, r as rejectChatQuestion, w as stopSpeaking, d as destroyVoice, y as themeService } from './theme-state.svelte-BNtUaCD7.js';
4
+ import { p as page } from './state-z9dl5k8n.js';
5
5
  import { S as Spinner } from './Spinner-Bk6e83RX.js';
6
6
 
7
7
  //#region src/lib/format-date.ts
@@ -112,112 +112,187 @@ function ToggleButton($$renderer, $$props) {
112
112
  });
113
113
  }
114
114
  //#endregion
115
- //#region src/lib/components/chrome/ModeSwitch.svelte
116
- function advancedIcon($$renderer) {
117
- $$renderer.push(`<svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><path d="m7 9 3 3-3 3"></path><line x1="13" y1="15" x2="17" y2="15"></line></svg>`);
118
- }
119
- function ModeSwitch($$renderer, $$props) {
120
- $$renderer.component(($$renderer) => {
121
- const pathname = derived(() => page.url?.pathname ?? "");
122
- const onAdvanced = derived(() => pathname() === "/advanced" || pathname().startsWith("/advanced/"));
123
- function toggle() {
124
- goto(onAdvanced() ? "/chat" : "/advanced");
115
+ //#region src/lib/advanced-mode-state.svelte.ts
116
+ var ADVANCED_MODE_STORAGE_KEY = "openpalm.chat.advanced";
117
+ var AdvancedModeService = class {
118
+ enabled = false;
119
+ initialized = false;
120
+ init() {
121
+ if (typeof window === "undefined" || this.initialized) return;
122
+ this.enabled = this.#readStoredPreference();
123
+ this.initialized = true;
124
+ }
125
+ setEnabled(value) {
126
+ this.enabled = value;
127
+ this.#writeStoredPreference(value);
128
+ }
129
+ toggle() {
130
+ const next = !this.enabled;
131
+ this.setEnabled(next);
132
+ return next;
133
+ }
134
+ preferredChatPath() {
135
+ return this.enabled ? "/advanced" : "/chat";
136
+ }
137
+ #readStoredPreference() {
138
+ if (typeof window === "undefined") return false;
139
+ try {
140
+ return window.localStorage.getItem(ADVANCED_MODE_STORAGE_KEY) === "1";
141
+ } catch {
142
+ return false;
125
143
  }
126
- ToggleButton($$renderer, {
127
- pressed: onAdvanced(),
128
- onToggle: toggle,
129
- ariaLabel: "Advanced mode",
130
- title: "Advanced mode (embedded OpenCode)",
131
- icon: advancedIcon
132
- });
133
- });
134
- }
144
+ }
145
+ #writeStoredPreference(value) {
146
+ if (typeof window === "undefined") return;
147
+ try {
148
+ window.localStorage.setItem(ADVANCED_MODE_STORAGE_KEY, value ? "1" : "0");
149
+ } catch {}
150
+ }
151
+ };
152
+ var advancedModeService = new AdvancedModeService();
135
153
  //#endregion
136
- //#region src/lib/components/common/Drawer.svelte
137
- function Drawer($$renderer, $$props) {
138
- $$renderer.component(($$renderer) => {
139
- /** Optional content rendered at the start of the header (e.g. a back button). */
140
- /** Drawer width (CSS length). */
141
- let { open, title, onClose, children, footer, headerStart, width = "32rem" } = $$props;
142
- if (open) {
143
- $$renderer.push("<!--[0-->");
144
- $$renderer.push(`<div class="drawer-scrim svelte-1u2o1qj"></div> <div class="drawer svelte-1u2o1qj"${attr_style(`--drawer-width: ${stringify(width)}`)} role="dialog" aria-modal="true"${attr("aria-label", title)} tabindex="-1"><header class="drawer-header svelte-1u2o1qj">`);
145
- if (headerStart) {
146
- $$renderer.push("<!--[0-->");
147
- headerStart($$renderer);
148
- $$renderer.push(`<!---->`);
149
- } else $$renderer.push("<!--[-1-->");
150
- $$renderer.push(`<!--]--> <h3 class="drawer-title svelte-1u2o1qj">${escape_html(title)}</h3> <button class="drawer-close svelte-1u2o1qj" aria-label="Close"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg></button></header> <div class="drawer-body svelte-1u2o1qj">`);
151
- children($$renderer);
152
- $$renderer.push(`<!----></div> `);
153
- if (footer) {
154
- $$renderer.push("<!--[0-->");
155
- $$renderer.push(`<footer class="drawer-footer svelte-1u2o1qj">`);
156
- footer($$renderer);
157
- $$renderer.push(`<!----></footer>`);
158
- } else $$renderer.push("<!--[-1-->");
159
- $$renderer.push(`<!--]--></div>`);
160
- } else $$renderer.push("<!--[-1-->");
161
- $$renderer.push(`<!--]-->`);
162
- });
154
+ //#region src/lib/chat/oc-events.ts
155
+ function propStr(props, key) {
156
+ const value = props?.[key];
157
+ return typeof value === "string" ? value : void 0;
163
158
  }
164
- //#endregion
165
- //#region src/lib/components/chrome/SettingsDrawer.svelte
166
- function gearIcon($$renderer) {
167
- $$renderer.push(`<svg aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>`);
159
+ function partSnapshotType(event) {
160
+ if (event.type !== "message.part.updated") return null;
161
+ const part = event.properties?.part;
162
+ if (typeof part?.id === "string" && typeof part.type === "string") return {
163
+ partID: part.id,
164
+ type: part.type
165
+ };
166
+ return null;
168
167
  }
169
- function SettingsDrawer($$renderer, $$props) {
170
- $$renderer.component(($$renderer) => {
171
- let { showManageAssistant = true } = $$props;
172
- let open = false;
173
- afterNavigate(() => {
174
- open = false;
175
- });
176
- function setTheme(event) {
177
- const next = event.currentTarget.value;
178
- if (next === "light" || next === "dark" || next === "system") themeService.setPreference(next);
179
- }
180
- IconButton($$renderer, {
181
- icon: gearIcon,
182
- ariaLabel: "Settings",
183
- title: "Settings",
184
- selected: open,
185
- ariaPressed: open,
186
- onclick: () => open = true
168
+ function extractTextDelta(event, sessionId, reasoningPartIds) {
169
+ const props = event.properties ?? {};
170
+ if (propStr(props, "sessionID") !== sessionId) return null;
171
+ if (event.type === "session.next.text.delta") return propStr(props, "delta") ?? propStr(props, "text") ?? null;
172
+ if (event.type === "message.part.delta") {
173
+ const field = propStr(props, "field");
174
+ if (field && field !== "text") return null;
175
+ const partID = propStr(props, "partID");
176
+ if (partID && reasoningPartIds?.has(partID)) return null;
177
+ return propStr(props, "delta") ?? null;
178
+ }
179
+ return null;
180
+ }
181
+ function statusName(status) {
182
+ if (typeof status === "string") return status;
183
+ if (status && typeof status === "object" && typeof status.type === "string") return status.type;
184
+ }
185
+ function isTurnEnd(event, sessionId) {
186
+ const props = event.properties ?? {};
187
+ if (propStr(props, "sessionID") !== sessionId) return false;
188
+ if (event.type === "session.idle") return true;
189
+ if (event.type === "session.status") {
190
+ const name = statusName(props.status);
191
+ return name === "idle" || name === "completed" || name === "done";
192
+ }
193
+ return false;
194
+ }
195
+ function valueToText(value) {
196
+ if (typeof value === "string") return value;
197
+ if (value == null) return void 0;
198
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
199
+ try {
200
+ return JSON.stringify(value);
201
+ } catch {
202
+ return;
203
+ }
204
+ }
205
+ function firstText(...values) {
206
+ for (const value of values) {
207
+ const text = valueToText(value);
208
+ if (text) return text;
209
+ }
210
+ }
211
+ function extractToolUpdate(event, sessionId) {
212
+ const props = event.properties ?? {};
213
+ if (propStr(props, "sessionID") !== sessionId) return null;
214
+ const part = props.part ?? props.tool;
215
+ if (event.type === "message.part.updated" && part && (part.type === "tool" || part.state)) {
216
+ const state = part.state ?? {};
217
+ return {
218
+ callID: String(part.callID ?? part.id ?? ""),
219
+ tool: String(part.tool ?? "tool"),
220
+ status: String(state.status ?? "running"),
221
+ title: typeof state.title === "string" ? state.title : void 0,
222
+ detail: firstText(state.input, state.metadata, state.progress, state.output),
223
+ output: valueToText(state.output),
224
+ error: typeof state.error === "string" ? state.error : void 0
225
+ };
226
+ }
227
+ if (event.type.startsWith("session.next.tool.")) {
228
+ const type = event.type.replace("session.next.tool.", "");
229
+ return {
230
+ callID: propStr(props, "callID") ?? "",
231
+ tool: propStr(props, "tool") ?? "tool",
232
+ status: type === "completed" ? "completed" : type === "failed" ? "error" : type === "called" ? "running" : propStr(props, "status") ?? "running",
233
+ title: propStr(props, "title") ?? propStr(props, "tool"),
234
+ detail: firstText(props.message, props.delta, props.progress, props.input, props.metadata),
235
+ output: firstText(props.output, props.result),
236
+ error: firstText(props.error)
237
+ };
238
+ }
239
+ return null;
240
+ }
241
+ function isSessionError(event, sessionId) {
242
+ return event.type === "session.error" && propStr(event.properties, "sessionID") === sessionId;
243
+ }
244
+ function extractPermissionAsk(event, sessionId) {
245
+ if (event.type !== "permission.asked") return null;
246
+ if (propStr(event.properties, "sessionID") !== sessionId) return null;
247
+ const id = propStr(event.properties, "id");
248
+ if (!id) return null;
249
+ const patterns = Array.isArray(event.properties?.patterns) ? event.properties.patterns.filter((item) => typeof item === "string") : [];
250
+ const always = Array.isArray(event.properties?.always) ? event.properties.always.filter((item) => typeof item === "string") : [];
251
+ const toolRecord = event.properties?.tool;
252
+ return {
253
+ requestID: id,
254
+ permission: propStr(event.properties, "permission") ?? "tool",
255
+ patterns,
256
+ always,
257
+ tool: propStr(toolRecord, "callID") ?? propStr(event.properties, "permission") ?? "tool",
258
+ detail: firstText(event.properties?.metadata, event.properties?.message) ?? ""
259
+ };
260
+ }
261
+ function extractQuestionAsk(event, sessionId) {
262
+ if (event.type !== "question.asked") return null;
263
+ if (propStr(event.properties, "sessionID") !== sessionId) return null;
264
+ const id = propStr(event.properties, "id");
265
+ if (!id) return null;
266
+ const rawQuestions = Array.isArray(event.properties?.questions) ? event.properties.questions : [];
267
+ const questions = [];
268
+ for (const raw of rawQuestions) {
269
+ const item = raw;
270
+ const options = Array.isArray(item.options) ? item.options.map((option) => option).filter((option) => typeof option.label === "string").map((option) => ({
271
+ label: option.label,
272
+ description: typeof option.description === "string" ? option.description : ""
273
+ })) : [];
274
+ questions.push({
275
+ question: typeof item.question === "string" ? item.question : "",
276
+ header: typeof item.header === "string" ? item.header : "",
277
+ options
187
278
  });
188
- $$renderer.push(`<!----> `);
189
- Drawer($$renderer, {
190
- open,
191
- title: "Settings",
192
- onClose: () => open = false,
193
- width: "24rem",
194
- children: ($$renderer) => {
195
- $$renderer.push(`<div class="settings-drawer svelte-4kbm5j"><label class="field svelte-4kbm5j" for="theme-preference"><span class="field-label svelte-4kbm5j">Theme</span> `);
196
- $$renderer.select({
197
- id: "theme-preference",
198
- class: "field-select",
199
- value: themeService.preference,
200
- onchange: setTheme
201
- }, ($$renderer) => {
202
- $$renderer.option({ value: "system" }, ($$renderer) => {
203
- $$renderer.push(`System`);
204
- });
205
- $$renderer.option({ value: "light" }, ($$renderer) => {
206
- $$renderer.push(`Light`);
207
- });
208
- $$renderer.option({ value: "dark" }, ($$renderer) => {
209
- $$renderer.push(`Dark`);
210
- });
211
- }, "svelte-4kbm5j");
212
- $$renderer.push(`</label> <nav class="settings-links svelte-4kbm5j" aria-label="Settings links">`);
213
- if (showManageAssistant) {
214
- $$renderer.push("<!--[0-->");
215
- $$renderer.push(`<a class="settings-link svelte-4kbm5j" href="/admin">Manage this assistant...</a>`);
216
- } else $$renderer.push("<!--[-1-->");
217
- $$renderer.push(`<!--]--> <a class="settings-link svelte-4kbm5j" href="/admin/endpoints">Manage assistant connections...</a></nav></div>`);
218
- }});
219
- $$renderer.push(`<!---->`);
220
- });
279
+ }
280
+ if (questions.length === 0) return null;
281
+ return {
282
+ requestID: id,
283
+ questions
284
+ };
285
+ }
286
+ function extractStepUpdate(event, sessionId) {
287
+ const props = event.properties ?? {};
288
+ if (propStr(props, "sessionID") !== sessionId) return null;
289
+ if (event.type !== "session.next.step.started" && event.type !== "session.next.step.ended") return null;
290
+ return {
291
+ id: propStr(props, "stepID") ?? propStr(props, "id") ?? event.type,
292
+ title: propStr(props, "title") ?? propStr(props, "step") ?? (event.type === "session.next.step.started" ? "Working" : "Step complete"),
293
+ status: event.type === "session.next.step.ended" ? "completed" : "running",
294
+ detail: firstText(props.detail, props.message)
295
+ };
221
296
  }
222
297
  //#endregion
223
298
  //#region src/lib/chat/session-events.ts
@@ -308,6 +383,7 @@ function subscribeSessionEvents(handlers) {
308
383
  console.warn("[session-events] Bad JSON in SSE frame", err);
309
384
  continue;
310
385
  }
386
+ handlers.onEvent?.(payload);
311
387
  dispatch(handlers, payload);
312
388
  }
313
389
  }
@@ -343,7 +419,41 @@ function subscribeSessionEvents(handlers) {
343
419
  };
344
420
  }
345
421
  //#endregion
422
+ //#region src/lib/desktop-notifications.ts
423
+ var DESKTOP_NOTIFY_ENABLED_KEY = "openpalm.desktop.notify";
424
+ var DESKTOP_NOTIFY_PREVIEW_KEY = "openpalm.desktop.notify.preview";
425
+ function readFlag(key) {
426
+ if (typeof window === "undefined") return false;
427
+ try {
428
+ return window.localStorage.getItem(key) === "1";
429
+ } catch {
430
+ return false;
431
+ }
432
+ }
433
+ function desktopNotifyEnabled() {
434
+ return readFlag(DESKTOP_NOTIFY_ENABLED_KEY);
435
+ }
436
+ function desktopReplyPreviewEnabled() {
437
+ return readFlag(DESKTOP_NOTIFY_PREVIEW_KEY);
438
+ }
439
+ function shouldNotifyDesktop() {
440
+ if (typeof document === "undefined") return false;
441
+ if (document.hasFocus()) return false;
442
+ if (!desktopNotifyEnabled()) return false;
443
+ return typeof window !== "undefined" && typeof window.openpalm?.notify === "function";
444
+ }
445
+ function notifyAssistantReply(replyText) {
446
+ if (!shouldNotifyDesktop()) return;
447
+ const body = desktopReplyPreviewEnabled() && replyText.trim() ? replyText.trim() : "Assistant replied";
448
+ window.openpalm?.notify?.("OpenPalm", body);
449
+ }
450
+ function notifyAssistantError() {
451
+ if (!shouldNotifyDesktop()) return;
452
+ window.openpalm?.notify?.("OpenPalm", "Assistant error");
453
+ }
454
+ //#endregion
346
455
  //#region src/lib/chat/chat-state.svelte.ts
456
+ var STREAM_TURN_TIMEOUT_MS = 15e4;
347
457
  function emptyEndpointState() {
348
458
  return {
349
459
  sessions: [],
@@ -369,6 +479,10 @@ var ChatService = class {
369
479
  entriesLoading = false;
370
480
  sending = false;
371
481
  error = "";
482
+ pendingAssistantText = "";
483
+ pendingToolStates = [];
484
+ pendingPermission = null;
485
+ pendingQuestion = null;
372
486
  /**
373
487
  * Set true while the SSE event stream is connected. Surfaced by the
374
488
  * SessionPicker as a tiny green/gray dot so the operator can see at a
@@ -380,6 +494,7 @@ var ChatService = class {
380
494
  * Plain field (not `$state`) — only the chat service touches it.
381
495
  */
382
496
  _unsubscribeEvents = null;
497
+ _pendingTurn = null;
383
498
  #activeSessionId = derived(() => this.byEndpoint.get(this.activeEndpointId)?.activeSessionId ?? null);
384
499
  get activeSessionId() {
385
500
  return this.#activeSessionId();
@@ -443,14 +558,161 @@ var ChatService = class {
443
558
  onDeleted: (id) => {
444
559
  this._onSessionDeleted(id);
445
560
  },
561
+ onEvent: (event) => {
562
+ this._onLiveEvent(event);
563
+ },
446
564
  onConnect: () => {
447
565
  this.liveConnected = true;
448
566
  },
449
567
  onDisconnect: () => {
450
568
  this.liveConnected = false;
569
+ if (this._pendingTurn) this._failPendingTurn(/* @__PURE__ */ new Error("Assistant event stream disconnected."));
451
570
  }
452
571
  });
453
572
  }
573
+ _toRawEvent(event) {
574
+ return {
575
+ type: event.type,
576
+ properties: event.properties ?? {}
577
+ };
578
+ }
579
+ _upsertPendingToolState(update) {
580
+ const id = update.callID || `${update.tool}:${this.pendingToolStates.length}`;
581
+ const next = {
582
+ id,
583
+ kind: "tool",
584
+ tool: update.tool,
585
+ status: update.status,
586
+ title: update.title ?? update.tool,
587
+ detail: update.detail ?? "",
588
+ output: update.output ?? "",
589
+ error: update.error ?? "",
590
+ updatedAt: Date.now()
591
+ };
592
+ if (!this.pendingToolStates.find((item) => item.id === id)) {
593
+ this.pendingToolStates = [...this.pendingToolStates, next];
594
+ return;
595
+ }
596
+ this.pendingToolStates = this.pendingToolStates.map((item) => item.id === id ? {
597
+ ...item,
598
+ ...next
599
+ } : item);
600
+ }
601
+ _upsertPendingStepState(update) {
602
+ const next = {
603
+ id: update.id,
604
+ kind: "step",
605
+ tool: "step",
606
+ status: update.status,
607
+ title: update.title,
608
+ detail: update.detail ?? "",
609
+ output: "",
610
+ error: "",
611
+ updatedAt: Date.now()
612
+ };
613
+ if (!this.pendingToolStates.find((item) => item.id === update.id)) {
614
+ this.pendingToolStates = [...this.pendingToolStates, next];
615
+ return;
616
+ }
617
+ this.pendingToolStates = this.pendingToolStates.map((item) => item.id === update.id ? {
618
+ ...item,
619
+ ...next
620
+ } : item);
621
+ }
622
+ _resetPendingRenderState() {
623
+ this.pendingAssistantText = "";
624
+ this.pendingToolStates = [];
625
+ this.pendingPermission = null;
626
+ this.pendingQuestion = null;
627
+ }
628
+ _appendAssistantReply(text) {
629
+ const assistantEntry = {
630
+ id: crypto.randomUUID(),
631
+ role: "assistant",
632
+ text,
633
+ timestamp: Date.now()
634
+ };
635
+ this.entries = [...this.entries, assistantEntry];
636
+ }
637
+ _clearPendingTurn() {
638
+ const pending = this._pendingTurn;
639
+ if (!pending) return null;
640
+ clearTimeout(pending.timeout);
641
+ this._pendingTurn = null;
642
+ return pending;
643
+ }
644
+ _finishPendingTurn(replyText) {
645
+ const pending = this._clearPendingTurn();
646
+ if (!pending) return;
647
+ const text = (replyText ?? this.pendingAssistantText).trim() || "(no response)";
648
+ this._appendAssistantReply(text);
649
+ this._resetPendingRenderState();
650
+ this._bumpSession(pending.sessionId);
651
+ if (voiceState.ttsSupported && voiceState.ttsAutoEnabled && text && text !== "(no response)") speakText(text, {
652
+ mode: "chat_reply",
653
+ userText: pending.userText,
654
+ assistantText: text
655
+ });
656
+ notifyAssistantReply(text === "(no response)" ? "" : text);
657
+ pending.resolve();
658
+ }
659
+ _failPendingTurn(error) {
660
+ const pending = this._clearPendingTurn();
661
+ if (!pending) return;
662
+ this._resetPendingRenderState();
663
+ pending.reject(error);
664
+ }
665
+ _bumpSession(sessionId) {
666
+ const endpointId = this.activeEndpointId;
667
+ const prev = this.byEndpoint.get(endpointId);
668
+ if (!prev) return;
669
+ const now = Date.now();
670
+ const existing = prev.sessions.find((s) => s.id === sessionId);
671
+ const updated = existing ? {
672
+ ...existing,
673
+ updatedAt: now
674
+ } : {
675
+ id: sessionId,
676
+ title: "",
677
+ createdAt: now,
678
+ updatedAt: now
679
+ };
680
+ const rest = prev.sessions.filter((s) => s.id !== sessionId);
681
+ this.setEndpointState(endpointId, { sessions: [updated, ...rest] });
682
+ }
683
+ _onLiveEvent(event) {
684
+ const pending = this._pendingTurn;
685
+ if (!pending) return;
686
+ const raw = this._toRawEvent(event);
687
+ if (pending.endpointId !== this.activeEndpointId) return;
688
+ const snapshot = partSnapshotType(raw);
689
+ if (snapshot?.type === "reasoning") pending.reasoningPartIds.add(snapshot.partID);
690
+ const textDelta = extractTextDelta(raw, pending.sessionId, pending.reasoningPartIds);
691
+ if (textDelta) this.pendingAssistantText += textDelta;
692
+ const toolUpdate = extractToolUpdate(raw, pending.sessionId);
693
+ if (toolUpdate) this._upsertPendingToolState(toolUpdate);
694
+ const stepUpdate = extractStepUpdate(raw, pending.sessionId);
695
+ if (stepUpdate) this._upsertPendingStepState(stepUpdate);
696
+ const permissionAsk = extractPermissionAsk(raw, pending.sessionId);
697
+ if (permissionAsk) this.pendingPermission = {
698
+ ...permissionAsk,
699
+ status: "pending",
700
+ decision: "",
701
+ message: ""
702
+ };
703
+ const questionAsk = extractQuestionAsk(raw, pending.sessionId);
704
+ if (questionAsk) this.pendingQuestion = {
705
+ ...questionAsk,
706
+ status: "pending",
707
+ answers: questionAsk.questions.map(() => ""),
708
+ message: ""
709
+ };
710
+ if (isSessionError(raw, pending.sessionId)) {
711
+ this._failPendingTurn(/* @__PURE__ */ new Error("Assistant session ended unexpectedly."));
712
+ return;
713
+ }
714
+ if (isTurnEnd(raw, pending.sessionId)) this._finishPendingTurn();
715
+ }
454
716
  /**
455
717
  * A session was created out-of-band — prepend to the active endpoint's
456
718
  * list if not already known. Do not auto-switch to it: the user owns
@@ -549,6 +811,7 @@ var ChatService = class {
549
811
  const endpointId = this.activeEndpointId;
550
812
  this.setEndpointState(endpointId, { activeSessionId: sessionId });
551
813
  this.entries = [];
814
+ this._resetPendingRenderState();
552
815
  this.entriesLoading = true;
553
816
  this.error = "";
554
817
  try {
@@ -587,6 +850,7 @@ var ChatService = class {
587
850
  activeSessionId: id
588
851
  });
589
852
  this.entries = [];
853
+ this._resetPendingRenderState();
590
854
  return id;
591
855
  } catch (e) {
592
856
  const err = e;
@@ -599,9 +863,21 @@ var ChatService = class {
599
863
  * first (matches the "zero sessions" empty-state flow).
600
864
  */
601
865
  async send(text) {
602
- if (this.sending) return;
603
866
  const trimmed = text.trim();
604
867
  if (!trimmed) return;
868
+ if (this.pendingQuestion && this.pendingQuestion.questions.length === 1 && this.sending) {
869
+ await this.answerQuestion(trimmed);
870
+ return;
871
+ }
872
+ if (this.pendingQuestion && this.sending) {
873
+ this.pendingQuestion = {
874
+ ...this.pendingQuestion,
875
+ status: "error",
876
+ message: "This question has multiple parts and must be answered with the provided controls."
877
+ };
878
+ return;
879
+ }
880
+ if (this.sending) return;
605
881
  let sessionId = this.activeSessionId;
606
882
  if (!sessionId) {
607
883
  sessionId = await this.startNewSession();
@@ -614,50 +890,159 @@ var ChatService = class {
614
890
  timestamp: Date.now()
615
891
  };
616
892
  this.entries = [...this.entries, userEntry];
893
+ this._resetPendingRenderState();
617
894
  this.error = "";
618
895
  this.sending = true;
896
+ if (voiceState.ttsSupported && voiceState.ttsAutoEnabled) speakText("Working on it.", {
897
+ mode: "chat_ack",
898
+ userText: trimmed
899
+ });
619
900
  try {
620
- const replyText = (await sendChatMessage(sessionId, trimmed)).parts.filter((p) => p.type === "text" && p.text).map((p) => p.text ?? "").join("");
621
- const assistantEntry = {
622
- id: crypto.randomUUID(),
623
- role: "assistant",
624
- text: replyText || "(no response)",
625
- timestamp: Date.now()
626
- };
627
- this.entries = [...this.entries, assistantEntry];
628
- const endpointId = this.activeEndpointId;
629
- const prev = this.byEndpoint.get(endpointId);
630
- if (prev) {
631
- const now = Date.now();
632
- const existing = prev.sessions.find((s) => s.id === sessionId);
633
- const updated = existing ? {
634
- ...existing,
635
- updatedAt: now
636
- } : {
637
- id: sessionId,
638
- title: "",
639
- createdAt: now,
640
- updatedAt: now
901
+ if (this._unsubscribeEvents && this.liveConnected) await new Promise((resolve, reject) => {
902
+ const timeout = setTimeout(() => {
903
+ this._failPendingTurn(/* @__PURE__ */ new Error("Timed out waiting for the assistant response."));
904
+ }, STREAM_TURN_TIMEOUT_MS);
905
+ this._pendingTurn = {
906
+ endpointId: this.activeEndpointId,
907
+ sessionId,
908
+ userText: trimmed,
909
+ reasoningPartIds: /* @__PURE__ */ new Set(),
910
+ resolve,
911
+ reject,
912
+ timeout
641
913
  };
642
- const rest = prev.sessions.filter((s) => s.id !== sessionId);
643
- this.setEndpointState(endpointId, { sessions: [updated, ...rest] });
914
+ startChatMessageTurn(sessionId, trimmed).catch((error) => {
915
+ this._failPendingTurn(error instanceof Error ? error : new Error(String(error)));
916
+ });
917
+ });
918
+ else {
919
+ const text = (await sendChatMessage(sessionId, trimmed)).parts.filter((p) => p.type === "text" && p.text).map((p) => p.text ?? "").join("").trim() || "(no response)";
920
+ this._appendAssistantReply(text);
921
+ this._bumpSession(sessionId);
922
+ if (voiceState.ttsSupported && voiceState.ttsAutoEnabled && text !== "(no response)") speakText(text, {
923
+ mode: "chat_reply",
924
+ userText: trimmed,
925
+ assistantText: text
926
+ });
927
+ notifyAssistantReply(text === "(no response)" ? "" : text);
644
928
  }
645
- if (voiceState.ttsSupported && voiceState.ttsAutoEnabled && replyText) speakText(replyText);
646
929
  } catch (e) {
647
930
  const err = e;
931
+ this._resetPendingRenderState();
648
932
  if (err.status === 503 || err.status === 502) {
649
933
  this.error = "Assistant is not reachable. Try reconnecting.";
650
934
  this.setEndpointState(this.activeEndpointId, { activeSessionId: null });
651
935
  } else if (err.status === 401) this.error = "Sign-in required.";
652
936
  else this.error = err.message ?? "Message failed.";
937
+ notifyAssistantError();
653
938
  } finally {
654
939
  this.sending = false;
655
940
  }
656
941
  }
942
+ async answerPermission(reply) {
943
+ if (!this.pendingPermission || this.pendingPermission.status === "submitting") return;
944
+ const current = this.pendingPermission;
945
+ this.pendingPermission = {
946
+ ...current,
947
+ status: "submitting",
948
+ decision: reply,
949
+ message: ""
950
+ };
951
+ try {
952
+ await replyChatPermission(current.requestID, reply);
953
+ this.pendingPermission = {
954
+ ...current,
955
+ status: "resolved",
956
+ decision: reply,
957
+ message: reply === "once" ? `Allowed ${current.permission} once. Waiting for the assistant to continue...` : reply === "always" ? `Always allowed future matching ${current.permission} requests.` : `Denied ${current.permission}. Waiting for the assistant to continue...`
958
+ };
959
+ } catch (error) {
960
+ const message = error instanceof Error ? error.message : "Failed to record permission reply.";
961
+ this.pendingPermission = {
962
+ ...current,
963
+ status: "error",
964
+ decision: reply,
965
+ message
966
+ };
967
+ }
968
+ }
969
+ setQuestionAnswer(index, answer) {
970
+ if (!this.pendingQuestion) return;
971
+ if (index < 0 || index >= this.pendingQuestion.questions.length) return;
972
+ const answers = [...this.pendingQuestion.answers];
973
+ answers[index] = answer;
974
+ this.pendingQuestion = {
975
+ ...this.pendingQuestion,
976
+ answers,
977
+ message: ""
978
+ };
979
+ }
980
+ async answerQuestion(answer) {
981
+ if (!this.pendingQuestion || this.pendingQuestion.status === "submitting") return;
982
+ const current = this.pendingQuestion;
983
+ const answers = current.questions.length === 1 && typeof answer === "string" ? [answer.trim()] : current.answers.map((item) => item.trim());
984
+ if (answers.some((item) => !item)) {
985
+ this.pendingQuestion = {
986
+ ...current,
987
+ status: "error",
988
+ message: "Answer every question before submitting."
989
+ };
990
+ return;
991
+ }
992
+ this.pendingQuestion = {
993
+ ...current,
994
+ status: "submitting",
995
+ answers,
996
+ message: ""
997
+ };
998
+ try {
999
+ await replyChatQuestion(current.requestID, answers.map((item) => [item]));
1000
+ this.pendingQuestion = {
1001
+ ...current,
1002
+ status: "answered",
1003
+ answers,
1004
+ message: "Answer sent."
1005
+ };
1006
+ } catch (error) {
1007
+ const message = error instanceof Error ? error.message : "Failed to send answer.";
1008
+ this.pendingQuestion = {
1009
+ ...current,
1010
+ status: "error",
1011
+ answers,
1012
+ message
1013
+ };
1014
+ }
1015
+ }
1016
+ async rejectQuestion() {
1017
+ if (!this.pendingQuestion || this.pendingQuestion.status === "submitting") return;
1018
+ const current = this.pendingQuestion;
1019
+ this.pendingQuestion = {
1020
+ ...current,
1021
+ status: "submitting",
1022
+ message: ""
1023
+ };
1024
+ try {
1025
+ await rejectChatQuestion(current.requestID);
1026
+ this.pendingQuestion = {
1027
+ ...current,
1028
+ status: "rejected",
1029
+ message: "Question declined."
1030
+ };
1031
+ } catch (error) {
1032
+ const message = error instanceof Error ? error.message : "Failed to reject question.";
1033
+ this.pendingQuestion = {
1034
+ ...current,
1035
+ status: "error",
1036
+ message
1037
+ };
1038
+ }
1039
+ }
657
1040
  reset() {
658
1041
  stopSpeaking();
1042
+ this._clearPendingTurn();
659
1043
  this.entries = [];
660
1044
  this.error = "";
1045
+ this._resetPendingRenderState();
661
1046
  this.byEndpoint = /* @__PURE__ */ new Map();
662
1047
  if (this._unsubscribeEvents) {
663
1048
  try {
@@ -672,6 +1057,146 @@ var ChatService = class {
672
1057
  };
673
1058
  var chat = new ChatService();
674
1059
  //#endregion
1060
+ //#region src/lib/chat/navigation.ts
1061
+ var DEFAULT_WORKSPACE_PATH = "/work/itlackey/openpalm";
1062
+ function encodeWorkspacePath(path) {
1063
+ if (typeof window === "undefined" || typeof window.btoa !== "function") return "L3dvcmsvaXRsYWNrZXkvb3BlbnBhbG0";
1064
+ const bytes = new TextEncoder().encode(path);
1065
+ let binary = "";
1066
+ for (const byte of bytes) binary += String.fromCharCode(byte);
1067
+ return window.btoa(binary).replace(/=+$/g, "");
1068
+ }
1069
+ function currentChatSessionId() {
1070
+ return chat.activeSessionId;
1071
+ }
1072
+ function buildAdvancedPath(sessionId) {
1073
+ const params = new URLSearchParams();
1074
+ if (sessionId) params.set("session", sessionId);
1075
+ const query = params.toString();
1076
+ return query ? `/advanced?${query}` : "/advanced";
1077
+ }
1078
+ function buildChatPath(sessionId, options) {
1079
+ const params = new URLSearchParams();
1080
+ if (sessionId) params.set("session", sessionId);
1081
+ const query = params.toString();
1082
+ return query ? `/chat?${query}` : "/chat";
1083
+ }
1084
+ function buildAdvancedIframeUrl(baseUrl, sessionId) {
1085
+ if (!sessionId) return baseUrl;
1086
+ return `${baseUrl.replace(/\/$/, "")}/${encodeWorkspacePath(DEFAULT_WORKSPACE_PATH)}/session/${encodeURIComponent(sessionId)}`;
1087
+ }
1088
+ //#endregion
1089
+ //#region src/lib/components/chrome/ModeSwitch.svelte
1090
+ function advancedIcon($$renderer) {
1091
+ $$renderer.push(`<svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><path d="m7 9 3 3-3 3"></path><line x1="13" y1="15" x2="17" y2="15"></line></svg>`);
1092
+ }
1093
+ function ModeSwitch($$renderer, $$props) {
1094
+ $$renderer.component(($$renderer) => {
1095
+ const pathname = derived(() => page.url?.pathname ?? "");
1096
+ const onAdmin = derived(() => pathname() === "/admin" || pathname().startsWith("/admin/"));
1097
+ function toggle() {
1098
+ const enabled = advancedModeService.toggle();
1099
+ if (onAdmin()) return;
1100
+ const sessionId = page.url.searchParams.get("session") ?? currentChatSessionId();
1101
+ goto(enabled ? buildAdvancedPath(sessionId) : buildChatPath(sessionId));
1102
+ }
1103
+ ToggleButton($$renderer, {
1104
+ pressed: advancedModeService.enabled,
1105
+ onToggle: toggle,
1106
+ ariaLabel: "Advanced mode",
1107
+ title: "Advanced mode (embedded OpenCode)",
1108
+ icon: advancedIcon
1109
+ });
1110
+ });
1111
+ }
1112
+ //#endregion
1113
+ //#region src/lib/components/common/Drawer.svelte
1114
+ function Drawer($$renderer, $$props) {
1115
+ $$renderer.component(($$renderer) => {
1116
+ /** Optional content rendered at the start of the header (e.g. a back button). */
1117
+ /** Drawer width (CSS length). */
1118
+ let { open, title, onClose, children, footer, headerStart, width = "32rem" } = $$props;
1119
+ if (open) {
1120
+ $$renderer.push("<!--[0-->");
1121
+ $$renderer.push(`<div class="drawer-scrim svelte-1u2o1qj"></div> <div class="drawer svelte-1u2o1qj"${attr_style(`--drawer-width: ${stringify(width)}`)} role="dialog" aria-modal="true"${attr("aria-label", title)} tabindex="-1"><header class="drawer-header svelte-1u2o1qj">`);
1122
+ if (headerStart) {
1123
+ $$renderer.push("<!--[0-->");
1124
+ headerStart($$renderer);
1125
+ $$renderer.push(`<!---->`);
1126
+ } else $$renderer.push("<!--[-1-->");
1127
+ $$renderer.push(`<!--]--> <h3 class="drawer-title svelte-1u2o1qj">${escape_html(title)}</h3> <button class="drawer-close svelte-1u2o1qj" aria-label="Close"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg></button></header> <div class="drawer-body svelte-1u2o1qj">`);
1128
+ children($$renderer);
1129
+ $$renderer.push(`<!----></div> `);
1130
+ if (footer) {
1131
+ $$renderer.push("<!--[0-->");
1132
+ $$renderer.push(`<footer class="drawer-footer svelte-1u2o1qj">`);
1133
+ footer($$renderer);
1134
+ $$renderer.push(`<!----></footer>`);
1135
+ } else $$renderer.push("<!--[-1-->");
1136
+ $$renderer.push(`<!--]--></div>`);
1137
+ } else $$renderer.push("<!--[-1-->");
1138
+ $$renderer.push(`<!--]-->`);
1139
+ });
1140
+ }
1141
+ //#endregion
1142
+ //#region src/lib/components/chrome/SettingsDrawer.svelte
1143
+ function gearIcon($$renderer) {
1144
+ $$renderer.push(`<svg aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>`);
1145
+ }
1146
+ function SettingsDrawer($$renderer, $$props) {
1147
+ $$renderer.component(($$renderer) => {
1148
+ let { showManageAssistant = true } = $$props;
1149
+ let open = false;
1150
+ afterNavigate(() => {
1151
+ open = false;
1152
+ });
1153
+ function setTheme(event) {
1154
+ const next = event.currentTarget.value;
1155
+ if (next === "light" || next === "dark" || next === "system") themeService.setPreference(next);
1156
+ }
1157
+ IconButton($$renderer, {
1158
+ icon: gearIcon,
1159
+ ariaLabel: "Settings",
1160
+ title: "Settings",
1161
+ selected: open,
1162
+ ariaPressed: open,
1163
+ onclick: () => open = true
1164
+ });
1165
+ $$renderer.push(`<!----> `);
1166
+ Drawer($$renderer, {
1167
+ open,
1168
+ title: "Settings",
1169
+ onClose: () => open = false,
1170
+ width: "24rem",
1171
+ children: ($$renderer) => {
1172
+ $$renderer.push(`<div class="settings-drawer svelte-4kbm5j"><label class="field svelte-4kbm5j" for="theme-preference"><span class="field-label svelte-4kbm5j">Theme</span> `);
1173
+ $$renderer.select({
1174
+ id: "theme-preference",
1175
+ class: "field-select",
1176
+ value: themeService.preference,
1177
+ onchange: setTheme
1178
+ }, ($$renderer) => {
1179
+ $$renderer.option({ value: "system" }, ($$renderer) => {
1180
+ $$renderer.push(`System`);
1181
+ });
1182
+ $$renderer.option({ value: "light" }, ($$renderer) => {
1183
+ $$renderer.push(`Light`);
1184
+ });
1185
+ $$renderer.option({ value: "dark" }, ($$renderer) => {
1186
+ $$renderer.push(`Dark`);
1187
+ });
1188
+ }, "svelte-4kbm5j");
1189
+ $$renderer.push(`</label> <nav class="settings-links svelte-4kbm5j" aria-label="Settings links">`);
1190
+ if (showManageAssistant) {
1191
+ $$renderer.push("<!--[0-->");
1192
+ $$renderer.push(`<a class="settings-link svelte-4kbm5j" href="/admin">Manage this assistant...</a>`);
1193
+ } else $$renderer.push("<!--[-1-->");
1194
+ $$renderer.push(`<!--]--> <a class="settings-link svelte-4kbm5j" href="/admin/endpoints">Manage assistant connections...</a></nav></div>`);
1195
+ }});
1196
+ $$renderer.push(`<!---->`);
1197
+ });
1198
+ }
1199
+ //#endregion
675
1200
  //#region src/lib/endpoints-state.svelte.ts
676
1201
  var EndpointsService = class {
677
1202
  endpoints = [];
@@ -967,23 +1492,29 @@ function Navbar($$renderer, $$props) {
967
1492
  const onAdmin = derived(() => pathname() === "/admin" || pathname().startsWith("/admin/"));
968
1493
  const onChatSurface = derived(() => pathname() === "/chat" || pathname().startsWith("/chat/"));
969
1494
  const onAdvancedSurface = derived(() => pathname() === "/advanced" || pathname().startsWith("/advanced/"));
1495
+ const onConversationSurface = derived(() => onChatSurface() || onAdvancedSurface());
970
1496
  const isLocalAssistant = derived(() => {
971
1497
  return isLocalAssistantUrl(endpointsService.active?.url);
972
1498
  });
973
- $$renderer.push(`<header class="navbar svelte-66bgq1"><div class="navbar-inner svelte-66bgq1"><a class="navbar-brand svelte-66bgq1" href="/chat" aria-label="OpenPalm — go to chat"><span class="brand-icon svelte-66bgq1" aria-hidden="true"><img src="/logo-128.png" alt="" class="svelte-66bgq1"/></span> <span class="brand-text svelte-66bgq1">OpenPalm</span></a> <div class="navbar-actions svelte-66bgq1">`);
1499
+ const preferredChatHref = derived(() => {
1500
+ const sessionId = page.url.searchParams.get("session") ?? currentChatSessionId();
1501
+ return advancedModeService.enabled ? buildAdvancedPath(sessionId) : buildChatPath(sessionId);
1502
+ });
1503
+ $$renderer.push(`<header class="navbar svelte-66bgq1"><div class="navbar-inner svelte-66bgq1"><a class="navbar-brand svelte-66bgq1"${attr("href", preferredChatHref())} aria-label="OpenPalm — go to chat"><span class="brand-icon svelte-66bgq1" aria-hidden="true"><img src="/logo-128.png" alt="" class="svelte-66bgq1"/></span> <span class="brand-text svelte-66bgq1">OpenPalm</span></a> <div class="navbar-actions svelte-66bgq1">`);
974
1504
  if (onAdmin()) {
975
1505
  $$renderer.push("<!--[0-->");
976
1506
  IconButton($$renderer, {
977
- href: "/chat",
1507
+ href: preferredChatHref(),
978
1508
  ariaLabel: "Back to chat",
979
1509
  title: "Chat",
980
1510
  icon: chatIcon
981
1511
  });
1512
+ } else if (onConversationSurface()) {
1513
+ $$renderer.push("<!--[1-->");
1514
+ SettingsDrawer($$renderer, { showManageAssistant: isLocalAssistant() });
982
1515
  } else $$renderer.push("<!--[-1-->");
983
1516
  $$renderer.push(`<!--]--> `);
984
- SettingsDrawer($$renderer, { showManageAssistant: isLocalAssistant() });
985
- $$renderer.push(`<!----> `);
986
- if (onChatSurface()) {
1517
+ if (onConversationSurface()) {
987
1518
  $$renderer.push("<!--[0-->");
988
1519
  $$renderer.push(`<span class="chat-selectors svelte-66bgq1">`);
989
1520
  EndpointSwitcher($$renderer);
@@ -992,15 +1523,12 @@ function Navbar($$renderer, $$props) {
992
1523
  $$renderer.push(`<!----></span>`);
993
1524
  } else $$renderer.push("<!--[-1-->");
994
1525
  $$renderer.push(`<!--]--> `);
995
- if (onChatSurface() || onAdvancedSurface()) {
996
- $$renderer.push("<!--[0-->");
997
- ModeSwitch($$renderer);
998
- } else $$renderer.push("<!--[-1-->");
999
- $$renderer.push(`<!--]--> `);
1526
+ ModeSwitch($$renderer);
1527
+ $$renderer.push(`<!----> `);
1000
1528
  VoiceControl($$renderer);
1001
1529
  $$renderer.push(`<!----></div></div></header>`);
1002
1530
  });
1003
1531
  }
1004
1532
 
1005
- export { EndpointList as E, IconButton as I, Navbar as N, SessionList as S, chat as c, endpointsService as e, formatTime as f };
1006
- //# sourceMappingURL=Navbar-C9kE6wR-.js.map
1533
+ export { EndpointList as E, IconButton as I, Navbar as N, SessionList as S, buildAdvancedIframeUrl as b, chat as c, endpointsService as e, formatTime as f };
1534
+ //# sourceMappingURL=Navbar-EBUPxUnS.js.map