@openpalm/ui 0.12.52 → 0.13.0-beta.2

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 (852) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/0.CNWpIzQn.css +1 -0
  3. package/build/client/_app/immutable/assets/0.CNWpIzQn.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.CNWpIzQn.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/10.vLP66eby.css +1 -0
  6. package/build/client/_app/immutable/assets/10.vLP66eby.css.br +0 -0
  7. package/build/client/_app/immutable/assets/10.vLP66eby.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/11.BF9IcRAW.css +1 -0
  9. package/build/client/_app/immutable/assets/11.BF9IcRAW.css.br +0 -0
  10. package/build/client/_app/immutable/assets/11.BF9IcRAW.css.gz +0 -0
  11. package/build/client/_app/immutable/assets/5.CTNuT1CQ.css +1 -0
  12. package/build/client/_app/immutable/assets/5.CTNuT1CQ.css.br +0 -0
  13. package/build/client/_app/immutable/assets/5.CTNuT1CQ.css.gz +0 -0
  14. package/build/client/_app/immutable/assets/6.D_kTgQ70.css +1 -0
  15. package/build/client/_app/immutable/assets/6.D_kTgQ70.css.br +0 -0
  16. package/build/client/_app/immutable/assets/6.D_kTgQ70.css.gz +0 -0
  17. package/build/client/_app/immutable/assets/7.CEu3B1cr.css +1 -0
  18. package/build/client/_app/immutable/assets/7.CEu3B1cr.css.br +0 -0
  19. package/build/client/_app/immutable/assets/7.CEu3B1cr.css.gz +0 -0
  20. package/build/client/_app/immutable/assets/9.vqGkbIg9.css +1 -0
  21. package/build/client/_app/immutable/assets/9.vqGkbIg9.css.br +0 -0
  22. package/build/client/_app/immutable/assets/9.vqGkbIg9.css.gz +0 -0
  23. package/build/client/_app/immutable/assets/ChatNavbar.C7LJB8r7.css +1 -0
  24. package/build/client/_app/immutable/assets/ChatNavbar.C7LJB8r7.css.br +0 -0
  25. package/build/client/_app/immutable/assets/ChatNavbar.C7LJB8r7.css.gz +0 -0
  26. package/build/client/_app/immutable/assets/Drawer.C9zcL24P.css +1 -0
  27. package/build/client/_app/immutable/assets/Drawer.C9zcL24P.css.br +0 -0
  28. package/build/client/_app/immutable/assets/Drawer.C9zcL24P.css.gz +0 -0
  29. package/build/client/_app/immutable/assets/IconActivity.BdXOPwBm.css +1 -0
  30. package/build/client/_app/immutable/assets/IconActivity.BdXOPwBm.css.br +0 -0
  31. package/build/client/_app/immutable/assets/IconActivity.BdXOPwBm.css.gz +0 -0
  32. package/build/client/_app/immutable/assets/Spinner.DfNgj4dl.css +1 -0
  33. package/build/client/_app/immutable/assets/Spinner.DfNgj4dl.css.br +2 -0
  34. package/build/client/_app/immutable/assets/Spinner.DfNgj4dl.css.gz +0 -0
  35. package/build/client/_app/immutable/chunks/9mRSvTWj.js +1 -0
  36. package/build/client/_app/immutable/chunks/9mRSvTWj.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/9mRSvTWj.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/BApqEZP1.js +3 -0
  39. package/build/client/_app/immutable/chunks/BApqEZP1.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/BApqEZP1.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/BDK50g8a.js +1 -0
  42. package/build/client/_app/immutable/chunks/BDK50g8a.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/BDK50g8a.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/B_Sgy7qx.js +1 -0
  45. package/build/client/_app/immutable/chunks/B_Sgy7qx.js.br +2 -0
  46. package/build/client/_app/immutable/chunks/B_Sgy7qx.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/B_jhBV5Z.js +5 -0
  48. package/build/client/_app/immutable/chunks/B_jhBV5Z.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/B_jhBV5Z.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/Be7qat4r.js +3 -0
  51. package/build/client/_app/immutable/chunks/Be7qat4r.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/Be7qat4r.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/BoOBAdGl.js +1 -0
  54. package/build/client/_app/immutable/chunks/BoOBAdGl.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/BoOBAdGl.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/BzIvC31O.js +3 -0
  57. package/build/client/_app/immutable/chunks/BzIvC31O.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/BzIvC31O.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/CUa5ff3d.js +1 -0
  60. package/build/client/_app/immutable/chunks/CUa5ff3d.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/CUa5ff3d.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/D5FtEngX.js +1 -0
  63. package/build/client/_app/immutable/chunks/D5FtEngX.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/D5FtEngX.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/DBHgGGCD.js +1 -0
  66. package/build/client/_app/immutable/chunks/DBHgGGCD.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/DBHgGGCD.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/DSs95sLz.js +1 -0
  69. package/build/client/_app/immutable/chunks/DSs95sLz.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/DSs95sLz.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/DfZbBavE.js +1 -0
  72. package/build/client/_app/immutable/chunks/DfZbBavE.js.br +1 -0
  73. package/build/client/_app/immutable/chunks/DfZbBavE.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/DmFbAjwW.js +1 -0
  75. package/build/client/_app/immutable/chunks/DmFbAjwW.js.br +3 -0
  76. package/build/client/_app/immutable/chunks/DmFbAjwW.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/NR-JVJz-.js +1 -0
  78. package/build/client/_app/immutable/chunks/NR-JVJz-.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/NR-JVJz-.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/R6GPcDBF.js +14 -0
  81. package/build/client/_app/immutable/chunks/R6GPcDBF.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/R6GPcDBF.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/SXdvPq3_.js +1 -0
  84. package/build/client/_app/immutable/chunks/SXdvPq3_.js.br +0 -0
  85. package/build/client/_app/immutable/chunks/SXdvPq3_.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/c0lkYAgh.js +5 -0
  87. package/build/client/_app/immutable/chunks/c0lkYAgh.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/c0lkYAgh.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/hSjQday7.js +1 -0
  90. package/build/client/_app/immutable/chunks/hSjQday7.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/hSjQday7.js.gz +0 -0
  92. package/build/client/_app/immutable/chunks/mG6HnNbi.js +1 -0
  93. package/build/client/_app/immutable/chunks/mG6HnNbi.js.br +0 -0
  94. package/build/client/_app/immutable/chunks/mG6HnNbi.js.gz +0 -0
  95. package/build/client/_app/immutable/entry/app.DZwy1Y3W.js +2 -0
  96. package/build/client/_app/immutable/entry/app.DZwy1Y3W.js.br +0 -0
  97. package/build/client/_app/immutable/entry/app.DZwy1Y3W.js.gz +0 -0
  98. package/build/client/_app/immutable/entry/start.C0ic7Ewp.js +1 -0
  99. package/build/client/_app/immutable/entry/start.C0ic7Ewp.js.br +1 -0
  100. package/build/client/_app/immutable/entry/start.C0ic7Ewp.js.gz +0 -0
  101. package/build/client/_app/immutable/nodes/0.mcDF2Cfv.js +1 -0
  102. package/build/client/_app/immutable/nodes/0.mcDF2Cfv.js.br +0 -0
  103. package/build/client/_app/immutable/nodes/0.mcDF2Cfv.js.gz +0 -0
  104. package/build/client/_app/immutable/nodes/1.Bxihn5f1.js +1 -0
  105. package/build/client/_app/immutable/nodes/1.Bxihn5f1.js.br +0 -0
  106. package/build/client/_app/immutable/nodes/1.Bxihn5f1.js.gz +0 -0
  107. package/build/client/_app/immutable/nodes/10.BZ76_WLP.js +1 -0
  108. package/build/client/_app/immutable/nodes/10.BZ76_WLP.js.br +0 -0
  109. package/build/client/_app/immutable/nodes/10.BZ76_WLP.js.gz +0 -0
  110. package/build/client/_app/immutable/nodes/11.Bzf3G5G0.js +6 -0
  111. package/build/client/_app/immutable/nodes/11.Bzf3G5G0.js.br +0 -0
  112. package/build/client/_app/immutable/nodes/11.Bzf3G5G0.js.gz +0 -0
  113. package/build/client/_app/immutable/nodes/2.C-PzaHZx.js +1 -0
  114. package/build/client/_app/immutable/nodes/2.C-PzaHZx.js.br +0 -0
  115. package/build/client/_app/immutable/nodes/2.C-PzaHZx.js.gz +0 -0
  116. package/build/client/_app/immutable/nodes/3.26Z_fr6N.js +1 -0
  117. package/build/client/_app/immutable/nodes/3.26Z_fr6N.js.br +0 -0
  118. package/build/client/_app/immutable/nodes/3.26Z_fr6N.js.gz +0 -0
  119. package/build/client/_app/immutable/nodes/4.D-CwW2PH.js +1 -0
  120. package/build/client/_app/immutable/nodes/4.D-CwW2PH.js.br +0 -0
  121. package/build/client/_app/immutable/nodes/4.D-CwW2PH.js.gz +0 -0
  122. package/build/client/_app/immutable/nodes/5.BbStivMI.js +2 -0
  123. package/build/client/_app/immutable/nodes/5.BbStivMI.js.br +0 -0
  124. package/build/client/_app/immutable/nodes/5.BbStivMI.js.gz +0 -0
  125. package/build/client/_app/immutable/nodes/6.BKVgKxKO.js +2 -0
  126. package/build/client/_app/immutable/nodes/6.BKVgKxKO.js.br +0 -0
  127. package/build/client/_app/immutable/nodes/6.BKVgKxKO.js.gz +0 -0
  128. package/build/client/_app/immutable/nodes/7.DuXt155R.js +4 -0
  129. package/build/client/_app/immutable/nodes/7.DuXt155R.js.br +0 -0
  130. package/build/client/_app/immutable/nodes/7.DuXt155R.js.gz +0 -0
  131. package/build/client/_app/immutable/nodes/8.NHp_bSVx.js +1 -0
  132. package/build/client/_app/immutable/nodes/8.NHp_bSVx.js.br +0 -0
  133. package/build/client/_app/immutable/nodes/8.NHp_bSVx.js.gz +0 -0
  134. package/build/client/_app/immutable/nodes/9.BdeFVi2a.js +126 -0
  135. package/build/client/_app/immutable/nodes/9.BdeFVi2a.js.br +0 -0
  136. package/build/client/_app/immutable/nodes/9.BdeFVi2a.js.gz +0 -0
  137. package/build/client/_app/version.json +1 -1
  138. package/build/client/_app/version.json.br +1 -2
  139. package/build/client/_app/version.json.gz +0 -0
  140. package/build/server/chunks/0-C7zzjezl.js +43 -0
  141. package/build/server/chunks/0-C7zzjezl.js.map +1 -0
  142. package/build/server/chunks/1-Ceq9WsUZ.js +9 -0
  143. package/build/server/chunks/1-Ceq9WsUZ.js.map +1 -0
  144. package/build/server/chunks/10-DbLLQ-Uy.js +35 -0
  145. package/build/server/chunks/10-DbLLQ-Uy.js.map +1 -0
  146. package/build/server/chunks/11-Dryt5Piv.js +9 -0
  147. package/build/server/chunks/11-Dryt5Piv.js.map +1 -0
  148. package/build/server/chunks/2-CQSBaE_w.js +9 -0
  149. package/build/server/chunks/2-CQSBaE_w.js.map +1 -0
  150. package/build/server/chunks/3-CAH3EmhU.js +58 -0
  151. package/build/server/chunks/3-CAH3EmhU.js.map +1 -0
  152. package/build/server/chunks/4-DxmFWVQJ.js +9 -0
  153. package/build/server/chunks/4-DxmFWVQJ.js.map +1 -0
  154. package/build/server/chunks/5-CQ9cELI7.js +9 -0
  155. package/build/server/chunks/5-CQ9cELI7.js.map +1 -0
  156. package/build/server/chunks/6-B-hnmc7F.js +9 -0
  157. package/build/server/chunks/6-B-hnmc7F.js.map +1 -0
  158. package/build/server/chunks/7-BE6BzHsh.js +9 -0
  159. package/build/server/chunks/7-BE6BzHsh.js.map +1 -0
  160. package/build/server/chunks/8-DiHmrGkL.js +30 -0
  161. package/build/server/chunks/8-DiHmrGkL.js.map +1 -0
  162. package/build/server/chunks/9-BWzd_hmh.js +42 -0
  163. package/build/server/chunks/9-BWzd_hmh.js.map +1 -0
  164. package/build/server/chunks/ChatNavbar-BonHVqfi.js +243 -0
  165. package/build/server/chunks/ChatNavbar-BonHVqfi.js.map +1 -0
  166. package/build/server/chunks/IconActivity-BVrMC8FH.js +5486 -0
  167. package/build/server/chunks/IconActivity-BVrMC8FH.js.map +1 -0
  168. package/build/server/chunks/IconAgent-DeBWj6Gr.js +16 -0
  169. package/build/server/chunks/IconAgent-DeBWj6Gr.js.map +1 -0
  170. package/build/server/chunks/IconDone-CHBJ36xT.js +10 -0
  171. package/build/server/chunks/IconDone-CHBJ36xT.js.map +1 -0
  172. package/build/server/chunks/IconInfo-DA5uGQyP.js +10 -0
  173. package/build/server/chunks/IconInfo-DA5uGQyP.js.map +1 -0
  174. package/build/server/chunks/IconLock-Bz5zHCBQ.js +10 -0
  175. package/build/server/chunks/IconLock-Bz5zHCBQ.js.map +1 -0
  176. package/build/server/chunks/IconLogo-BRmPVDI_.js +10 -0
  177. package/build/server/chunks/IconLogo-BRmPVDI_.js.map +1 -0
  178. package/build/server/chunks/IconMic-BbjkE_nG.js +18 -0
  179. package/build/server/chunks/IconMic-BbjkE_nG.js.map +1 -0
  180. package/build/server/chunks/IconServer-fOHYHe-O.js +180 -0
  181. package/build/server/chunks/IconServer-fOHYHe-O.js.map +1 -0
  182. package/build/server/chunks/IconSoundOn-DHtvjphK.js +1116 -0
  183. package/build/server/chunks/IconSoundOn-DHtvjphK.js.map +1 -0
  184. package/build/server/chunks/IconStop-C89_dmt4.js +956 -0
  185. package/build/server/chunks/IconStop-C89_dmt4.js.map +1 -0
  186. package/build/server/chunks/_helpers-CafYq-UD.js +74 -0
  187. package/build/server/chunks/_helpers-CafYq-UD.js.map +1 -0
  188. package/build/server/chunks/_layout.svelte-BLxvGwKC.js +67 -0
  189. package/build/server/chunks/_layout.svelte-BLxvGwKC.js.map +1 -0
  190. package/build/server/chunks/_page.svelte-0Rf024eH.js +530 -0
  191. package/build/server/chunks/_page.svelte-0Rf024eH.js.map +1 -0
  192. package/build/server/chunks/_page.svelte-BWNjxN63.js +82 -0
  193. package/build/server/chunks/_page.svelte-BWNjxN63.js.map +1 -0
  194. package/build/server/chunks/_page.svelte-BXeh8wzh.js +2425 -0
  195. package/build/server/chunks/_page.svelte-BXeh8wzh.js.map +1 -0
  196. package/build/server/chunks/_page.svelte-Bovrn7AQ.js +47 -0
  197. package/build/server/chunks/_page.svelte-Bovrn7AQ.js.map +1 -0
  198. package/build/server/chunks/_page.svelte-COf36oAu.js +92 -0
  199. package/build/server/chunks/_page.svelte-COf36oAu.js.map +1 -0
  200. package/build/server/chunks/_page.svelte-DkZsmNYc.js +24 -0
  201. package/build/server/chunks/_page.svelte-DkZsmNYc.js.map +1 -0
  202. package/build/server/chunks/_page.svelte-Du3fWBth.js +5 -0
  203. package/build/server/chunks/_page.svelte-Du3fWBth.js.map +1 -0
  204. package/build/server/chunks/_page.svelte-LsoJ7E5M.js +3516 -0
  205. package/build/server/chunks/_page.svelte-LsoJ7E5M.js.map +1 -0
  206. package/build/server/chunks/_server.ts-2-50j5S8.js +93 -0
  207. package/build/server/chunks/_server.ts-2-50j5S8.js.map +1 -0
  208. package/build/server/chunks/_server.ts-2Z0JYuCr.js +61 -0
  209. package/build/server/chunks/_server.ts-2Z0JYuCr.js.map +1 -0
  210. package/build/server/chunks/_server.ts-42ZGRWhn.js +58 -0
  211. package/build/server/chunks/_server.ts-42ZGRWhn.js.map +1 -0
  212. package/build/server/chunks/_server.ts-6EuPIrt7.js +88 -0
  213. package/build/server/chunks/_server.ts-6EuPIrt7.js.map +1 -0
  214. package/build/server/chunks/_server.ts-6muCM4Nz.js +44 -0
  215. package/build/server/chunks/_server.ts-6muCM4Nz.js.map +1 -0
  216. package/build/server/chunks/_server.ts-B28SfXaZ.js +172 -0
  217. package/build/server/chunks/_server.ts-B28SfXaZ.js.map +1 -0
  218. package/build/server/chunks/_server.ts-BA11l9Z1.js +87 -0
  219. package/build/server/chunks/_server.ts-BA11l9Z1.js.map +1 -0
  220. package/build/server/chunks/_server.ts-BA7wxHYg.js +61 -0
  221. package/build/server/chunks/_server.ts-BA7wxHYg.js.map +1 -0
  222. package/build/server/chunks/_server.ts-BARmSEZ2.js +49 -0
  223. package/build/server/chunks/_server.ts-BARmSEZ2.js.map +1 -0
  224. package/build/server/chunks/_server.ts-BBewn2kP.js +106 -0
  225. package/build/server/chunks/_server.ts-BBewn2kP.js.map +1 -0
  226. package/build/server/chunks/_server.ts-BEaiuN8Q.js +66 -0
  227. package/build/server/chunks/_server.ts-BEaiuN8Q.js.map +1 -0
  228. package/build/server/chunks/_server.ts-BJrYBXpY.js +87 -0
  229. package/build/server/chunks/_server.ts-BJrYBXpY.js.map +1 -0
  230. package/build/server/chunks/_server.ts-BJv74_DI.js +52 -0
  231. package/build/server/chunks/_server.ts-BJv74_DI.js.map +1 -0
  232. package/build/server/chunks/_server.ts-BKWx8K8U.js +60 -0
  233. package/build/server/chunks/_server.ts-BKWx8K8U.js.map +1 -0
  234. package/build/server/chunks/_server.ts-BLn_cTkK.js +58 -0
  235. package/build/server/chunks/_server.ts-BLn_cTkK.js.map +1 -0
  236. package/build/server/chunks/_server.ts-BR24J2uB.js +40 -0
  237. package/build/server/chunks/_server.ts-BR24J2uB.js.map +1 -0
  238. package/build/server/chunks/_server.ts-BRdjsMSd.js +44 -0
  239. package/build/server/chunks/_server.ts-BRdjsMSd.js.map +1 -0
  240. package/build/server/chunks/_server.ts-BTPbwN92.js +92 -0
  241. package/build/server/chunks/_server.ts-BTPbwN92.js.map +1 -0
  242. package/build/server/chunks/_server.ts-BUDMOZOz.js +44 -0
  243. package/build/server/chunks/_server.ts-BUDMOZOz.js.map +1 -0
  244. package/build/server/chunks/_server.ts-BVMpHE3G.js +38 -0
  245. package/build/server/chunks/_server.ts-BVMpHE3G.js.map +1 -0
  246. package/build/server/chunks/_server.ts-BWO1Eoro.js +45 -0
  247. package/build/server/chunks/_server.ts-BWO1Eoro.js.map +1 -0
  248. package/build/server/chunks/_server.ts-B_R9VtOW.js +152 -0
  249. package/build/server/chunks/_server.ts-B_R9VtOW.js.map +1 -0
  250. package/build/server/chunks/_server.ts-Ba8xSIQn.js +107 -0
  251. package/build/server/chunks/_server.ts-Ba8xSIQn.js.map +1 -0
  252. package/build/server/chunks/_server.ts-BeP_sHqj.js +58 -0
  253. package/build/server/chunks/_server.ts-BeP_sHqj.js.map +1 -0
  254. package/build/server/chunks/_server.ts-BhAp0vvt.js +171 -0
  255. package/build/server/chunks/_server.ts-BhAp0vvt.js.map +1 -0
  256. package/build/server/chunks/_server.ts-Bi0rRbcw.js +166 -0
  257. package/build/server/chunks/_server.ts-Bi0rRbcw.js.map +1 -0
  258. package/build/server/chunks/_server.ts-BjD0Uf0U.js +248 -0
  259. package/build/server/chunks/_server.ts-BjD0Uf0U.js.map +1 -0
  260. package/build/server/chunks/_server.ts-BjjicBDy.js +173 -0
  261. package/build/server/chunks/_server.ts-BjjicBDy.js.map +1 -0
  262. package/build/server/chunks/_server.ts-BsPu8Fny.js +521 -0
  263. package/build/server/chunks/_server.ts-BsPu8Fny.js.map +1 -0
  264. package/build/server/chunks/_server.ts-C-tvKaFE.js +68 -0
  265. package/build/server/chunks/_server.ts-C-tvKaFE.js.map +1 -0
  266. package/build/server/chunks/_server.ts-C83FzZfP.js +36 -0
  267. package/build/server/chunks/_server.ts-C83FzZfP.js.map +1 -0
  268. package/build/server/chunks/_server.ts-C8eCqXP6.js +96 -0
  269. package/build/server/chunks/_server.ts-C8eCqXP6.js.map +1 -0
  270. package/build/server/chunks/_server.ts-C9F005zM.js +45 -0
  271. package/build/server/chunks/_server.ts-C9F005zM.js.map +1 -0
  272. package/build/server/chunks/_server.ts-CCmsGl_u.js +111 -0
  273. package/build/server/chunks/_server.ts-CCmsGl_u.js.map +1 -0
  274. package/build/server/chunks/_server.ts-CG60Cdqf.js +205 -0
  275. package/build/server/chunks/_server.ts-CG60Cdqf.js.map +1 -0
  276. package/build/server/chunks/_server.ts-CGZizh2V.js +105 -0
  277. package/build/server/chunks/_server.ts-CGZizh2V.js.map +1 -0
  278. package/build/server/chunks/_server.ts-CIv0zM75.js +70 -0
  279. package/build/server/chunks/_server.ts-CIv0zM75.js.map +1 -0
  280. package/build/server/chunks/_server.ts-CJVwtNhA.js +34 -0
  281. package/build/server/chunks/_server.ts-CJVwtNhA.js.map +1 -0
  282. package/build/server/chunks/_server.ts-CMAepV0J.js +38 -0
  283. package/build/server/chunks/_server.ts-CMAepV0J.js.map +1 -0
  284. package/build/server/chunks/_server.ts-COcv1puW.js +57 -0
  285. package/build/server/chunks/_server.ts-COcv1puW.js.map +1 -0
  286. package/build/server/chunks/_server.ts-CQHkw9ni.js +94 -0
  287. package/build/server/chunks/_server.ts-CQHkw9ni.js.map +1 -0
  288. package/build/server/chunks/_server.ts-CS2LQKMb.js +44 -0
  289. package/build/server/chunks/_server.ts-CS2LQKMb.js.map +1 -0
  290. package/build/server/chunks/_server.ts-CX_CwTW0.js +41 -0
  291. package/build/server/chunks/_server.ts-CX_CwTW0.js.map +1 -0
  292. package/build/server/chunks/_server.ts-CcoaYeM8.js +50 -0
  293. package/build/server/chunks/_server.ts-CcoaYeM8.js.map +1 -0
  294. package/build/server/chunks/_server.ts-CfuLncMW.js +134 -0
  295. package/build/server/chunks/_server.ts-CfuLncMW.js.map +1 -0
  296. package/build/server/chunks/_server.ts-CjPhaG_g.js +68 -0
  297. package/build/server/chunks/_server.ts-CjPhaG_g.js.map +1 -0
  298. package/build/server/chunks/_server.ts-CmUo0zla.js +112 -0
  299. package/build/server/chunks/_server.ts-CmUo0zla.js.map +1 -0
  300. package/build/server/chunks/_server.ts-CnQ4hgIT.js +41 -0
  301. package/build/server/chunks/_server.ts-CnQ4hgIT.js.map +1 -0
  302. package/build/server/chunks/_server.ts-CncBUb14.js +64 -0
  303. package/build/server/chunks/_server.ts-CncBUb14.js.map +1 -0
  304. package/build/server/chunks/_server.ts-CnrWBkQ7.js +149 -0
  305. package/build/server/chunks/_server.ts-CnrWBkQ7.js.map +1 -0
  306. package/build/server/chunks/_server.ts-CspCDw2x.js +49 -0
  307. package/build/server/chunks/_server.ts-CspCDw2x.js.map +1 -0
  308. package/build/server/chunks/_server.ts-CtsLQpY2.js +19 -0
  309. package/build/server/chunks/_server.ts-CtsLQpY2.js.map +1 -0
  310. package/build/server/chunks/_server.ts-D-6mgHZB.js +72 -0
  311. package/build/server/chunks/_server.ts-D-6mgHZB.js.map +1 -0
  312. package/build/server/chunks/_server.ts-D-Rf8If2.js +94 -0
  313. package/build/server/chunks/_server.ts-D-Rf8If2.js.map +1 -0
  314. package/build/server/chunks/_server.ts-D5F-pzp2.js +45 -0
  315. package/build/server/chunks/_server.ts-D5F-pzp2.js.map +1 -0
  316. package/build/server/chunks/_server.ts-D6wuFDe4.js +77 -0
  317. package/build/server/chunks/_server.ts-D6wuFDe4.js.map +1 -0
  318. package/build/server/chunks/_server.ts-D7VWMcNm.js +80 -0
  319. package/build/server/chunks/_server.ts-D7VWMcNm.js.map +1 -0
  320. package/build/server/chunks/_server.ts-D7X0LmkL.js +65 -0
  321. package/build/server/chunks/_server.ts-D7X0LmkL.js.map +1 -0
  322. package/build/server/chunks/_server.ts-D9yQyMbZ.js +141 -0
  323. package/build/server/chunks/_server.ts-D9yQyMbZ.js.map +1 -0
  324. package/build/server/chunks/_server.ts-DE-c3Y5D.js +48 -0
  325. package/build/server/chunks/_server.ts-DE-c3Y5D.js.map +1 -0
  326. package/build/server/chunks/_server.ts-DH343hlx.js +57 -0
  327. package/build/server/chunks/_server.ts-DH343hlx.js.map +1 -0
  328. package/build/server/chunks/_server.ts-DH3Uc_0m.js +57 -0
  329. package/build/server/chunks/_server.ts-DH3Uc_0m.js.map +1 -0
  330. package/build/server/chunks/_server.ts-DHeSwA7p.js +55 -0
  331. package/build/server/chunks/_server.ts-DHeSwA7p.js.map +1 -0
  332. package/build/server/chunks/_server.ts-DJCIu42O.js +49 -0
  333. package/build/server/chunks/_server.ts-DJCIu42O.js.map +1 -0
  334. package/build/server/chunks/_server.ts-DJqSQny9.js +56 -0
  335. package/build/server/chunks/_server.ts-DJqSQny9.js.map +1 -0
  336. package/build/server/chunks/_server.ts-DKYXeaKr.js +88 -0
  337. package/build/server/chunks/_server.ts-DKYXeaKr.js.map +1 -0
  338. package/build/server/chunks/_server.ts-DM9EsKQc.js +68 -0
  339. package/build/server/chunks/_server.ts-DM9EsKQc.js.map +1 -0
  340. package/build/server/chunks/_server.ts-DQozxLn6.js +58 -0
  341. package/build/server/chunks/_server.ts-DQozxLn6.js.map +1 -0
  342. package/build/server/chunks/_server.ts-DTQe-U35.js +80 -0
  343. package/build/server/chunks/_server.ts-DTQe-U35.js.map +1 -0
  344. package/build/server/chunks/_server.ts-Dcf84tjG.js +42 -0
  345. package/build/server/chunks/_server.ts-Dcf84tjG.js.map +1 -0
  346. package/build/server/chunks/_server.ts-DdHx6Xig.js +88 -0
  347. package/build/server/chunks/_server.ts-DdHx6Xig.js.map +1 -0
  348. package/build/server/chunks/_server.ts-DdoJFQaX.js +89 -0
  349. package/build/server/chunks/_server.ts-DdoJFQaX.js.map +1 -0
  350. package/build/server/chunks/_server.ts-DdocuErM.js +71 -0
  351. package/build/server/chunks/_server.ts-DdocuErM.js.map +1 -0
  352. package/build/server/chunks/_server.ts-Ddqhnr_7.js +58 -0
  353. package/build/server/chunks/_server.ts-Ddqhnr_7.js.map +1 -0
  354. package/build/server/chunks/_server.ts-Dj6nwJgl.js +42 -0
  355. package/build/server/chunks/_server.ts-Dj6nwJgl.js.map +1 -0
  356. package/build/server/chunks/_server.ts-Dl-Rn5Ku.js +68 -0
  357. package/build/server/chunks/_server.ts-Dl-Rn5Ku.js.map +1 -0
  358. package/build/server/chunks/_server.ts-DnczK3Pw.js +49 -0
  359. package/build/server/chunks/_server.ts-DnczK3Pw.js.map +1 -0
  360. package/build/server/chunks/_server.ts-Dq4RvC5F.js +69 -0
  361. package/build/server/chunks/_server.ts-Dq4RvC5F.js.map +1 -0
  362. package/build/server/chunks/_server.ts-DrGzrygC.js +103 -0
  363. package/build/server/chunks/_server.ts-DrGzrygC.js.map +1 -0
  364. package/build/server/chunks/_server.ts-Ds62LEMU.js +162 -0
  365. package/build/server/chunks/_server.ts-Ds62LEMU.js.map +1 -0
  366. package/build/server/chunks/_server.ts-DsVbuYhj.js +64 -0
  367. package/build/server/chunks/_server.ts-DsVbuYhj.js.map +1 -0
  368. package/build/server/chunks/_server.ts-Dy65kWxL.js +84 -0
  369. package/build/server/chunks/_server.ts-Dy65kWxL.js.map +1 -0
  370. package/build/server/chunks/_server.ts-Dy9l5NMO.js +715 -0
  371. package/build/server/chunks/_server.ts-Dy9l5NMO.js.map +1 -0
  372. package/build/server/chunks/_server.ts-JO0zy17P.js +60 -0
  373. package/build/server/chunks/_server.ts-JO0zy17P.js.map +1 -0
  374. package/build/server/chunks/_server.ts-LokXM9hH.js +51 -0
  375. package/build/server/chunks/_server.ts-LokXM9hH.js.map +1 -0
  376. package/build/server/chunks/_server.ts-pRYFJihh.js +72 -0
  377. package/build/server/chunks/_server.ts-pRYFJihh.js.map +1 -0
  378. package/build/server/chunks/_server.ts-xPuEhFJO.js +56 -0
  379. package/build/server/chunks/_server.ts-xPuEhFJO.js.map +1 -0
  380. package/build/server/chunks/addon-helpers-Cgg8lPxe.js +51 -0
  381. package/build/server/chunks/addon-helpers-Cgg8lPxe.js.map +1 -0
  382. package/build/server/chunks/akm-5HN45xWY.js +151 -0
  383. package/build/server/chunks/akm-5HN45xWY.js.map +1 -0
  384. package/build/server/chunks/catalog-7z8dgrJF.js +217 -0
  385. package/build/server/chunks/catalog-7z8dgrJF.js.map +1 -0
  386. package/build/server/chunks/client-D2lMniPd.js +202 -0
  387. package/build/server/chunks/client-D2lMniPd.js.map +1 -0
  388. package/build/server/chunks/compose-args2-BFdWixAZ.js +26 -0
  389. package/build/server/chunks/compose-args2-BFdWixAZ.js.map +1 -0
  390. package/build/server/chunks/config-I5hb-W80.js +121 -0
  391. package/build/server/chunks/config-I5hb-W80.js.map +1 -0
  392. package/build/server/chunks/connections-api-NkotVLIl.js +34 -0
  393. package/build/server/chunks/connections-api-NkotVLIl.js.map +1 -0
  394. package/build/server/chunks/constants-B7J5DDaI.js +298 -0
  395. package/build/server/chunks/constants-B7J5DDaI.js.map +1 -0
  396. package/build/server/chunks/docker2-HZnACjh6.js +26 -0
  397. package/build/server/chunks/docker2-HZnACjh6.js.map +1 -0
  398. package/build/server/chunks/docker3-Dj9Pc_Pt.js +20 -0
  399. package/build/server/chunks/docker3-Dj9Pc_Pt.js.map +1 -0
  400. package/build/server/chunks/endpoints-B9ePqrMw.js +377 -0
  401. package/build/server/chunks/endpoints-B9ePqrMw.js.map +1 -0
  402. package/build/server/chunks/environment-BYp8JQYM.js +38 -0
  403. package/build/server/chunks/environment-BYp8JQYM.js.map +1 -0
  404. package/build/server/chunks/error.svelte-DGngrZ2V.js +18 -0
  405. package/build/server/chunks/error.svelte-DGngrZ2V.js.map +1 -0
  406. package/build/server/chunks/exports-CcmcYU0M.js +124 -0
  407. package/build/server/chunks/exports-CcmcYU0M.js.map +1 -0
  408. package/build/server/chunks/exports2-BjzhbhYA.js +691 -0
  409. package/build/server/chunks/exports2-BjzhbhYA.js.map +1 -0
  410. package/build/server/chunks/features-0lgyQreD.js +116 -0
  411. package/build/server/chunks/features-0lgyQreD.js.map +1 -0
  412. package/build/server/chunks/helpers-q4Ng8QTq.js +320 -0
  413. package/build/server/chunks/helpers-q4Ng8QTq.js.map +1 -0
  414. package/build/server/chunks/hooks.server-BTXqUhpH.js +121 -0
  415. package/build/server/chunks/hooks.server-BTXqUhpH.js.map +1 -0
  416. package/build/server/chunks/http-jBNJXVHg.js +31 -0
  417. package/build/server/chunks/http-jBNJXVHg.js.map +1 -0
  418. package/build/server/chunks/internal-G-Uk-kCA.js +915 -0
  419. package/build/server/chunks/internal-G-Uk-kCA.js.map +1 -0
  420. package/build/server/chunks/landing-BR5KUuDz.js +132 -0
  421. package/build/server/chunks/landing-BR5KUuDz.js.map +1 -0
  422. package/build/server/chunks/paths-tzRSDsKc.js +17 -0
  423. package/build/server/chunks/paths-tzRSDsKc.js.map +1 -0
  424. package/build/server/chunks/provider-constants-1s1k8kbj.js +68 -0
  425. package/build/server/chunks/provider-constants-1s1k8kbj.js.map +1 -0
  426. package/build/server/chunks/runtime-context.svelte-C5zNEC6u.js +72 -0
  427. package/build/server/chunks/runtime-context.svelte-C5zNEC6u.js.map +1 -0
  428. package/build/server/chunks/session-cookie-qHDuQboc.js +74 -0
  429. package/build/server/chunks/session-cookie-qHDuQboc.js.map +1 -0
  430. package/build/server/chunks/setup-deploy-DleJTifu.js +75 -0
  431. package/build/server/chunks/setup-deploy-DleJTifu.js.map +1 -0
  432. package/build/server/chunks/speakable-text-BflxDDdY.js +65 -0
  433. package/build/server/chunks/speakable-text-BflxDDdY.js.map +1 -0
  434. package/build/server/chunks/src-BwQUi60U.js +17213 -0
  435. package/build/server/chunks/src-BwQUi60U.js.map +1 -0
  436. package/build/server/chunks/state-Dm7U51xT.js +24 -0
  437. package/build/server/chunks/state-Dm7U51xT.js.map +1 -0
  438. package/build/server/chunks/state2-BhKHITEo.js +62 -0
  439. package/build/server/chunks/state2-BhKHITEo.js.map +1 -0
  440. package/build/server/chunks/utils-OXHIhUb5.js +150 -0
  441. package/build/server/chunks/utils-OXHIhUb5.js.map +1 -0
  442. package/build/server/chunks/voice-state.svelte-BAiqUOIX.js +1214 -0
  443. package/build/server/chunks/voice-state.svelte-BAiqUOIX.js.map +1 -0
  444. package/build/server/index.js +33 -33
  445. package/build/server/index.js.map +1 -1
  446. package/build/server/manifest.js +279 -243
  447. package/build/server/manifest.js.map +1 -1
  448. package/package.json +3 -2
  449. package/build/client/_app/immutable/assets/0.C-UsFwN5.css +0 -1
  450. package/build/client/_app/immutable/assets/0.C-UsFwN5.css.br +0 -0
  451. package/build/client/_app/immutable/assets/0.C-UsFwN5.css.gz +0 -0
  452. package/build/client/_app/immutable/assets/10.p7qpuBHR.css +0 -1
  453. package/build/client/_app/immutable/assets/10.p7qpuBHR.css.br +0 -2
  454. package/build/client/_app/immutable/assets/10.p7qpuBHR.css.gz +0 -0
  455. package/build/client/_app/immutable/assets/4.DKS7ivN-.css +0 -1
  456. package/build/client/_app/immutable/assets/4.DKS7ivN-.css.br +0 -0
  457. package/build/client/_app/immutable/assets/4.DKS7ivN-.css.gz +0 -0
  458. package/build/client/_app/immutable/assets/5.B9kVBENv.css +0 -1
  459. package/build/client/_app/immutable/assets/5.B9kVBENv.css.br +0 -0
  460. package/build/client/_app/immutable/assets/5.B9kVBENv.css.gz +0 -0
  461. package/build/client/_app/immutable/assets/7.CcyzbXoG.css +0 -1
  462. package/build/client/_app/immutable/assets/7.CcyzbXoG.css.br +0 -0
  463. package/build/client/_app/immutable/assets/7.CcyzbXoG.css.gz +0 -0
  464. package/build/client/_app/immutable/assets/8.DdhLOSFx.css +0 -1
  465. package/build/client/_app/immutable/assets/8.DdhLOSFx.css.br +0 -0
  466. package/build/client/_app/immutable/assets/8.DdhLOSFx.css.gz +0 -0
  467. package/build/client/_app/immutable/assets/9.4QFZFijM.css +0 -1
  468. package/build/client/_app/immutable/assets/9.4QFZFijM.css.br +0 -0
  469. package/build/client/_app/immutable/assets/9.4QFZFijM.css.gz +0 -0
  470. package/build/client/_app/immutable/assets/IconClock.CudG-UM6.css +0 -1
  471. package/build/client/_app/immutable/assets/IconClock.CudG-UM6.css.br +0 -0
  472. package/build/client/_app/immutable/assets/IconClock.CudG-UM6.css.gz +0 -0
  473. package/build/client/_app/immutable/assets/Navbar.D3rckLpW.css +0 -1
  474. package/build/client/_app/immutable/assets/Navbar.D3rckLpW.css.br +0 -0
  475. package/build/client/_app/immutable/assets/Navbar.D3rckLpW.css.gz +0 -0
  476. package/build/client/_app/immutable/assets/Spinner.CCwieGti.css +0 -1
  477. package/build/client/_app/immutable/assets/Spinner.CCwieGti.css.br +0 -0
  478. package/build/client/_app/immutable/assets/Spinner.CCwieGti.css.gz +0 -0
  479. package/build/client/_app/immutable/chunks/B6a5LPQe.js +0 -3
  480. package/build/client/_app/immutable/chunks/B6a5LPQe.js.br +0 -0
  481. package/build/client/_app/immutable/chunks/B6a5LPQe.js.gz +0 -0
  482. package/build/client/_app/immutable/chunks/BDvA7M6l.js +0 -1
  483. package/build/client/_app/immutable/chunks/BDvA7M6l.js.br +0 -0
  484. package/build/client/_app/immutable/chunks/BDvA7M6l.js.gz +0 -0
  485. package/build/client/_app/immutable/chunks/BFVV1YJb.js +0 -1
  486. package/build/client/_app/immutable/chunks/BFVV1YJb.js.br +0 -0
  487. package/build/client/_app/immutable/chunks/BFVV1YJb.js.gz +0 -0
  488. package/build/client/_app/immutable/chunks/BM4jJmEk.js +0 -1
  489. package/build/client/_app/immutable/chunks/BM4jJmEk.js.br +0 -0
  490. package/build/client/_app/immutable/chunks/BM4jJmEk.js.gz +0 -0
  491. package/build/client/_app/immutable/chunks/BeDFZ0w6.js +0 -1
  492. package/build/client/_app/immutable/chunks/BeDFZ0w6.js.br +0 -0
  493. package/build/client/_app/immutable/chunks/BeDFZ0w6.js.gz +0 -0
  494. package/build/client/_app/immutable/chunks/BiuKIdz2.js +0 -1
  495. package/build/client/_app/immutable/chunks/BiuKIdz2.js.br +0 -0
  496. package/build/client/_app/immutable/chunks/BiuKIdz2.js.gz +0 -0
  497. package/build/client/_app/immutable/chunks/C4c5Y6rY.js +0 -5
  498. package/build/client/_app/immutable/chunks/C4c5Y6rY.js.br +0 -0
  499. package/build/client/_app/immutable/chunks/C4c5Y6rY.js.gz +0 -0
  500. package/build/client/_app/immutable/chunks/C4j7gGnm.js +0 -14
  501. package/build/client/_app/immutable/chunks/C4j7gGnm.js.br +0 -0
  502. package/build/client/_app/immutable/chunks/C4j7gGnm.js.gz +0 -0
  503. package/build/client/_app/immutable/chunks/C7x_T9zu.js +0 -3
  504. package/build/client/_app/immutable/chunks/C7x_T9zu.js.br +0 -0
  505. package/build/client/_app/immutable/chunks/C7x_T9zu.js.gz +0 -0
  506. package/build/client/_app/immutable/chunks/C8Qdq8nY.js +0 -1
  507. package/build/client/_app/immutable/chunks/C8Qdq8nY.js.br +0 -0
  508. package/build/client/_app/immutable/chunks/C8Qdq8nY.js.gz +0 -0
  509. package/build/client/_app/immutable/chunks/DI0CI0UJ.js +0 -1
  510. package/build/client/_app/immutable/chunks/DI0CI0UJ.js.br +0 -2
  511. package/build/client/_app/immutable/chunks/DI0CI0UJ.js.gz +0 -0
  512. package/build/client/_app/immutable/chunks/DWwJdNrB.js +0 -1
  513. package/build/client/_app/immutable/chunks/DWwJdNrB.js.br +0 -1
  514. package/build/client/_app/immutable/chunks/DWwJdNrB.js.gz +0 -0
  515. package/build/client/_app/immutable/chunks/DoTCwfyJ.js +0 -1
  516. package/build/client/_app/immutable/chunks/DoTCwfyJ.js.br +0 -2
  517. package/build/client/_app/immutable/chunks/DoTCwfyJ.js.gz +0 -0
  518. package/build/client/_app/immutable/chunks/DwEShcLP.js +0 -1
  519. package/build/client/_app/immutable/chunks/DwEShcLP.js.br +0 -0
  520. package/build/client/_app/immutable/chunks/DwEShcLP.js.gz +0 -0
  521. package/build/client/_app/immutable/chunks/HbvxHNCX.js +0 -1
  522. package/build/client/_app/immutable/chunks/HbvxHNCX.js.br +0 -0
  523. package/build/client/_app/immutable/chunks/HbvxHNCX.js.gz +0 -0
  524. package/build/client/_app/immutable/chunks/jopA0ZFl.js +0 -1
  525. package/build/client/_app/immutable/chunks/jopA0ZFl.js.br +0 -0
  526. package/build/client/_app/immutable/chunks/jopA0ZFl.js.gz +0 -0
  527. package/build/client/_app/immutable/chunks/mVxTG_mC.js +0 -1
  528. package/build/client/_app/immutable/chunks/mVxTG_mC.js.br +0 -3
  529. package/build/client/_app/immutable/chunks/mVxTG_mC.js.gz +0 -0
  530. package/build/client/_app/immutable/chunks/zMaWNBEE.js +0 -1
  531. package/build/client/_app/immutable/chunks/zMaWNBEE.js.br +0 -0
  532. package/build/client/_app/immutable/chunks/zMaWNBEE.js.gz +0 -0
  533. package/build/client/_app/immutable/entry/app.D5lUGJr1.js +0 -2
  534. package/build/client/_app/immutable/entry/app.D5lUGJr1.js.br +0 -0
  535. package/build/client/_app/immutable/entry/app.D5lUGJr1.js.gz +0 -0
  536. package/build/client/_app/immutable/entry/start.CKoCEnYJ.js +0 -1
  537. package/build/client/_app/immutable/entry/start.CKoCEnYJ.js.br +0 -0
  538. package/build/client/_app/immutable/entry/start.CKoCEnYJ.js.gz +0 -0
  539. package/build/client/_app/immutable/nodes/0.anwXhDvm.js +0 -1
  540. package/build/client/_app/immutable/nodes/0.anwXhDvm.js.br +0 -0
  541. package/build/client/_app/immutable/nodes/0.anwXhDvm.js.gz +0 -0
  542. package/build/client/_app/immutable/nodes/1.DrRwtvKf.js +0 -1
  543. package/build/client/_app/immutable/nodes/1.DrRwtvKf.js.br +0 -1
  544. package/build/client/_app/immutable/nodes/1.DrRwtvKf.js.gz +0 -0
  545. package/build/client/_app/immutable/nodes/10.BLqUjjTI.js +0 -1
  546. package/build/client/_app/immutable/nodes/10.BLqUjjTI.js.br +0 -0
  547. package/build/client/_app/immutable/nodes/10.BLqUjjTI.js.gz +0 -0
  548. package/build/client/_app/immutable/nodes/2.Di1bEoG2.js +0 -1
  549. package/build/client/_app/immutable/nodes/2.Di1bEoG2.js.br +0 -0
  550. package/build/client/_app/immutable/nodes/2.Di1bEoG2.js.gz +0 -0
  551. package/build/client/_app/immutable/nodes/3.DNLsgB0V.js +0 -1
  552. package/build/client/_app/immutable/nodes/3.DNLsgB0V.js.br +0 -0
  553. package/build/client/_app/immutable/nodes/3.DNLsgB0V.js.gz +0 -0
  554. package/build/client/_app/immutable/nodes/4.paHt3QH9.js +0 -124
  555. package/build/client/_app/immutable/nodes/4.paHt3QH9.js.br +0 -0
  556. package/build/client/_app/immutable/nodes/4.paHt3QH9.js.gz +0 -0
  557. package/build/client/_app/immutable/nodes/5.bKLnh085.js +0 -4
  558. package/build/client/_app/immutable/nodes/5.bKLnh085.js.br +0 -0
  559. package/build/client/_app/immutable/nodes/5.bKLnh085.js.gz +0 -0
  560. package/build/client/_app/immutable/nodes/6.DRi42KoD.js +0 -1
  561. package/build/client/_app/immutable/nodes/6.DRi42KoD.js.br +0 -0
  562. package/build/client/_app/immutable/nodes/6.DRi42KoD.js.gz +0 -0
  563. package/build/client/_app/immutable/nodes/7.BvgWYGnm.js +0 -2
  564. package/build/client/_app/immutable/nodes/7.BvgWYGnm.js.br +0 -0
  565. package/build/client/_app/immutable/nodes/7.BvgWYGnm.js.gz +0 -0
  566. package/build/client/_app/immutable/nodes/8.BKAKOw6V.js +0 -1
  567. package/build/client/_app/immutable/nodes/8.BKAKOw6V.js.br +0 -0
  568. package/build/client/_app/immutable/nodes/8.BKAKOw6V.js.gz +0 -0
  569. package/build/client/_app/immutable/nodes/9.DwWxN6-k.js +0 -6
  570. package/build/client/_app/immutable/nodes/9.DwWxN6-k.js.br +0 -0
  571. package/build/client/_app/immutable/nodes/9.DwWxN6-k.js.gz +0 -0
  572. package/build/server/chunks/0-BiE1oF-J.js +0 -22
  573. package/build/server/chunks/0-BiE1oF-J.js.map +0 -1
  574. package/build/server/chunks/1-B-LNip7q.js +0 -9
  575. package/build/server/chunks/1-B-LNip7q.js.map +0 -1
  576. package/build/server/chunks/10-CS2lFzh1.js +0 -69
  577. package/build/server/chunks/10-CS2lFzh1.js.map +0 -1
  578. package/build/server/chunks/2-BcxV9Utx.js +0 -9
  579. package/build/server/chunks/2-BcxV9Utx.js.map +0 -1
  580. package/build/server/chunks/3-EodZ49YI.js +0 -23
  581. package/build/server/chunks/3-EodZ49YI.js.map +0 -1
  582. package/build/server/chunks/4-CliJOxWK.js +0 -9
  583. package/build/server/chunks/4-CliJOxWK.js.map +0 -1
  584. package/build/server/chunks/5-DkkL3QsU.js +0 -9
  585. package/build/server/chunks/5-DkkL3QsU.js.map +0 -1
  586. package/build/server/chunks/6-B6ZHxJZG.js +0 -9
  587. package/build/server/chunks/6-B6ZHxJZG.js.map +0 -1
  588. package/build/server/chunks/7-CIl66k8R.js +0 -9
  589. package/build/server/chunks/7-CIl66k8R.js.map +0 -1
  590. package/build/server/chunks/8-Dbz3fLZs.js +0 -35
  591. package/build/server/chunks/8-Dbz3fLZs.js.map +0 -1
  592. package/build/server/chunks/9-CnaXNk2w.js +0 -9
  593. package/build/server/chunks/9-CnaXNk2w.js.map +0 -1
  594. package/build/server/chunks/IconAlert-eLDsz7qz.js +0 -5496
  595. package/build/server/chunks/IconAlert-eLDsz7qz.js.map +0 -1
  596. package/build/server/chunks/IconDone-YB1DYJFs.js +0 -10
  597. package/build/server/chunks/IconDone-YB1DYJFs.js.map +0 -1
  598. package/build/server/chunks/IconInfo-yYiI9uGe.js +0 -10
  599. package/build/server/chunks/IconInfo-yYiI9uGe.js.map +0 -1
  600. package/build/server/chunks/IconLock-DHiqGiiZ.js +0 -10
  601. package/build/server/chunks/IconLock-DHiqGiiZ.js.map +0 -1
  602. package/build/server/chunks/IconLogo-Iv-7q8aY.js +0 -10
  603. package/build/server/chunks/IconLogo-Iv-7q8aY.js.map +0 -1
  604. package/build/server/chunks/IconMic-DMJf4zcn.js +0 -1295
  605. package/build/server/chunks/IconMic-DMJf4zcn.js.map +0 -1
  606. package/build/server/chunks/Navbar-CbBudHU6.js +0 -403
  607. package/build/server/chunks/Navbar-CbBudHU6.js.map +0 -1
  608. package/build/server/chunks/Spinner-jfNKSy3m.js +0 -12
  609. package/build/server/chunks/Spinner-jfNKSy3m.js.map +0 -1
  610. package/build/server/chunks/_helpers-B_lb4-jB.js +0 -74
  611. package/build/server/chunks/_helpers-B_lb4-jB.js.map +0 -1
  612. package/build/server/chunks/_layout.svelte-B5opDXuf.js +0 -66
  613. package/build/server/chunks/_layout.svelte-B5opDXuf.js.map +0 -1
  614. package/build/server/chunks/_page.svelte-1VhBiAl_.js +0 -385
  615. package/build/server/chunks/_page.svelte-1VhBiAl_.js.map +0 -1
  616. package/build/server/chunks/_page.svelte-6gpwjZv0.js +0 -122
  617. package/build/server/chunks/_page.svelte-6gpwjZv0.js.map +0 -1
  618. package/build/server/chunks/_page.svelte-Bd16jege.js +0 -47
  619. package/build/server/chunks/_page.svelte-Bd16jege.js.map +0 -1
  620. package/build/server/chunks/_page.svelte-Boq5WJfs.js +0 -3289
  621. package/build/server/chunks/_page.svelte-Boq5WJfs.js.map +0 -1
  622. package/build/server/chunks/_page.svelte-DM-4V1_g.js +0 -79
  623. package/build/server/chunks/_page.svelte-DM-4V1_g.js.map +0 -1
  624. package/build/server/chunks/_page.svelte-jdDbUptn.js +0 -89
  625. package/build/server/chunks/_page.svelte-jdDbUptn.js.map +0 -1
  626. package/build/server/chunks/_page.svelte-yAnFAnHi.js +0 -74
  627. package/build/server/chunks/_page.svelte-yAnFAnHi.js.map +0 -1
  628. package/build/server/chunks/_server.ts-0x3ZsRoq.js +0 -41
  629. package/build/server/chunks/_server.ts-0x3ZsRoq.js.map +0 -1
  630. package/build/server/chunks/_server.ts-1fytrAUC.js +0 -105
  631. package/build/server/chunks/_server.ts-1fytrAUC.js.map +0 -1
  632. package/build/server/chunks/_server.ts-2trnHYNR.js +0 -103
  633. package/build/server/chunks/_server.ts-2trnHYNR.js.map +0 -1
  634. package/build/server/chunks/_server.ts-33LuQvHu.js +0 -19
  635. package/build/server/chunks/_server.ts-33LuQvHu.js.map +0 -1
  636. package/build/server/chunks/_server.ts-3IGr8J7j.js +0 -103
  637. package/build/server/chunks/_server.ts-3IGr8J7j.js.map +0 -1
  638. package/build/server/chunks/_server.ts-4HApbECL.js +0 -49
  639. package/build/server/chunks/_server.ts-4HApbECL.js.map +0 -1
  640. package/build/server/chunks/_server.ts-4cGCnV5A.js +0 -172
  641. package/build/server/chunks/_server.ts-4cGCnV5A.js.map +0 -1
  642. package/build/server/chunks/_server.ts-5mKh6tgD.js +0 -56
  643. package/build/server/chunks/_server.ts-5mKh6tgD.js.map +0 -1
  644. package/build/server/chunks/_server.ts-B-gZIXCx.js +0 -120
  645. package/build/server/chunks/_server.ts-B-gZIXCx.js.map +0 -1
  646. package/build/server/chunks/_server.ts-B1LApKwc.js +0 -48
  647. package/build/server/chunks/_server.ts-B1LApKwc.js.map +0 -1
  648. package/build/server/chunks/_server.ts-B5s8k9IW.js +0 -53
  649. package/build/server/chunks/_server.ts-B5s8k9IW.js.map +0 -1
  650. package/build/server/chunks/_server.ts-B7oDgVRm.js +0 -208
  651. package/build/server/chunks/_server.ts-B7oDgVRm.js.map +0 -1
  652. package/build/server/chunks/_server.ts-BA7OxoAM.js +0 -69
  653. package/build/server/chunks/_server.ts-BA7OxoAM.js.map +0 -1
  654. package/build/server/chunks/_server.ts-BCqZP9mX.js +0 -94
  655. package/build/server/chunks/_server.ts-BCqZP9mX.js.map +0 -1
  656. package/build/server/chunks/_server.ts-BE9eO04W.js +0 -100
  657. package/build/server/chunks/_server.ts-BE9eO04W.js.map +0 -1
  658. package/build/server/chunks/_server.ts-BL9qmwrJ.js +0 -152
  659. package/build/server/chunks/_server.ts-BL9qmwrJ.js.map +0 -1
  660. package/build/server/chunks/_server.ts-BUf-IIIm.js +0 -85
  661. package/build/server/chunks/_server.ts-BUf-IIIm.js.map +0 -1
  662. package/build/server/chunks/_server.ts-BW13CurN.js +0 -43
  663. package/build/server/chunks/_server.ts-BW13CurN.js.map +0 -1
  664. package/build/server/chunks/_server.ts-BWh3c-xu.js +0 -44
  665. package/build/server/chunks/_server.ts-BWh3c-xu.js.map +0 -1
  666. package/build/server/chunks/_server.ts-BYDgL8Wh.js +0 -68
  667. package/build/server/chunks/_server.ts-BYDgL8Wh.js.map +0 -1
  668. package/build/server/chunks/_server.ts-B_9-b1wk.js +0 -82
  669. package/build/server/chunks/_server.ts-B_9-b1wk.js.map +0 -1
  670. package/build/server/chunks/_server.ts-Bbc4zzJy.js +0 -39
  671. package/build/server/chunks/_server.ts-Bbc4zzJy.js.map +0 -1
  672. package/build/server/chunks/_server.ts-BhmHIGs6.js +0 -45
  673. package/build/server/chunks/_server.ts-BhmHIGs6.js.map +0 -1
  674. package/build/server/chunks/_server.ts-BhuoSeRy.js +0 -64
  675. package/build/server/chunks/_server.ts-BhuoSeRy.js.map +0 -1
  676. package/build/server/chunks/_server.ts-BnL_ReBS.js +0 -50
  677. package/build/server/chunks/_server.ts-BnL_ReBS.js.map +0 -1
  678. package/build/server/chunks/_server.ts-BoOQ7F2z.js +0 -40
  679. package/build/server/chunks/_server.ts-BoOQ7F2z.js.map +0 -1
  680. package/build/server/chunks/_server.ts-Bry3Z40C.js +0 -160
  681. package/build/server/chunks/_server.ts-Bry3Z40C.js.map +0 -1
  682. package/build/server/chunks/_server.ts-BtVLVJf0.js +0 -80
  683. package/build/server/chunks/_server.ts-BtVLVJf0.js.map +0 -1
  684. package/build/server/chunks/_server.ts-BzISiSHa.js +0 -57
  685. package/build/server/chunks/_server.ts-BzISiSHa.js.map +0 -1
  686. package/build/server/chunks/_server.ts-C7PeR-ll.js +0 -112
  687. package/build/server/chunks/_server.ts-C7PeR-ll.js.map +0 -1
  688. package/build/server/chunks/_server.ts-C8NW6VWR.js +0 -55
  689. package/build/server/chunks/_server.ts-C8NW6VWR.js.map +0 -1
  690. package/build/server/chunks/_server.ts-CF0aKxAL.js +0 -59
  691. package/build/server/chunks/_server.ts-CF0aKxAL.js.map +0 -1
  692. package/build/server/chunks/_server.ts-CH-OPdXJ.js +0 -56
  693. package/build/server/chunks/_server.ts-CH-OPdXJ.js.map +0 -1
  694. package/build/server/chunks/_server.ts-CPsQ5aGi.js +0 -79
  695. package/build/server/chunks/_server.ts-CPsQ5aGi.js.map +0 -1
  696. package/build/server/chunks/_server.ts-CQ8JX5O7.js +0 -89
  697. package/build/server/chunks/_server.ts-CQ8JX5O7.js.map +0 -1
  698. package/build/server/chunks/_server.ts-CQPRTbTX.js +0 -63
  699. package/build/server/chunks/_server.ts-CQPRTbTX.js.map +0 -1
  700. package/build/server/chunks/_server.ts-CTVpEmAc.js +0 -517
  701. package/build/server/chunks/_server.ts-CTVpEmAc.js.map +0 -1
  702. package/build/server/chunks/_server.ts-CWVi9VhR.js +0 -76
  703. package/build/server/chunks/_server.ts-CWVi9VhR.js.map +0 -1
  704. package/build/server/chunks/_server.ts-CXQd0L0u.js +0 -57
  705. package/build/server/chunks/_server.ts-CXQd0L0u.js.map +0 -1
  706. package/build/server/chunks/_server.ts-Cgg_3L-k.js +0 -44
  707. package/build/server/chunks/_server.ts-Cgg_3L-k.js.map +0 -1
  708. package/build/server/chunks/_server.ts-ChvbGMR6.js +0 -50
  709. package/build/server/chunks/_server.ts-ChvbGMR6.js.map +0 -1
  710. package/build/server/chunks/_server.ts-CnByyw9m.js +0 -35
  711. package/build/server/chunks/_server.ts-CnByyw9m.js.map +0 -1
  712. package/build/server/chunks/_server.ts-Ct_0qiMK.js +0 -76
  713. package/build/server/chunks/_server.ts-Ct_0qiMK.js.map +0 -1
  714. package/build/server/chunks/_server.ts-Cu1u6Fq3.js +0 -244
  715. package/build/server/chunks/_server.ts-Cu1u6Fq3.js.map +0 -1
  716. package/build/server/chunks/_server.ts-Cuq4zRUh.js +0 -66
  717. package/build/server/chunks/_server.ts-Cuq4zRUh.js.map +0 -1
  718. package/build/server/chunks/_server.ts-Cx8pH99_.js +0 -43
  719. package/build/server/chunks/_server.ts-Cx8pH99_.js.map +0 -1
  720. package/build/server/chunks/_server.ts-D-eORdC8.js +0 -57
  721. package/build/server/chunks/_server.ts-D-eORdC8.js.map +0 -1
  722. package/build/server/chunks/_server.ts-D1cvo-nO.js +0 -55
  723. package/build/server/chunks/_server.ts-D1cvo-nO.js.map +0 -1
  724. package/build/server/chunks/_server.ts-D4nuqQNX.js +0 -85
  725. package/build/server/chunks/_server.ts-D4nuqQNX.js.map +0 -1
  726. package/build/server/chunks/_server.ts-D6aAJoCf.js +0 -70
  727. package/build/server/chunks/_server.ts-D6aAJoCf.js.map +0 -1
  728. package/build/server/chunks/_server.ts-D9PUEjiN.js +0 -47
  729. package/build/server/chunks/_server.ts-D9PUEjiN.js.map +0 -1
  730. package/build/server/chunks/_server.ts-DAiD8z-P.js +0 -47
  731. package/build/server/chunks/_server.ts-DAiD8z-P.js.map +0 -1
  732. package/build/server/chunks/_server.ts-DDKL_uuS.js +0 -203
  733. package/build/server/chunks/_server.ts-DDKL_uuS.js.map +0 -1
  734. package/build/server/chunks/_server.ts-DGkgd0uc.js +0 -166
  735. package/build/server/chunks/_server.ts-DGkgd0uc.js.map +0 -1
  736. package/build/server/chunks/_server.ts-DHig-2Ii.js +0 -58
  737. package/build/server/chunks/_server.ts-DHig-2Ii.js.map +0 -1
  738. package/build/server/chunks/_server.ts-DJdHVo2c.js +0 -36
  739. package/build/server/chunks/_server.ts-DJdHVo2c.js.map +0 -1
  740. package/build/server/chunks/_server.ts-DLrsnGKc.js +0 -64
  741. package/build/server/chunks/_server.ts-DLrsnGKc.js.map +0 -1
  742. package/build/server/chunks/_server.ts-DRYh6JJM.js +0 -36
  743. package/build/server/chunks/_server.ts-DRYh6JJM.js.map +0 -1
  744. package/build/server/chunks/_server.ts-DUbqsB2y.js +0 -43
  745. package/build/server/chunks/_server.ts-DUbqsB2y.js.map +0 -1
  746. package/build/server/chunks/_server.ts-DVRwJs1D.js +0 -89
  747. package/build/server/chunks/_server.ts-DVRwJs1D.js.map +0 -1
  748. package/build/server/chunks/_server.ts-DYZ1SnMq.js +0 -44
  749. package/build/server/chunks/_server.ts-DYZ1SnMq.js.map +0 -1
  750. package/build/server/chunks/_server.ts-DdpgDdUI.js +0 -59
  751. package/build/server/chunks/_server.ts-DdpgDdUI.js.map +0 -1
  752. package/build/server/chunks/_server.ts-DhVR_dEn.js +0 -67
  753. package/build/server/chunks/_server.ts-DhVR_dEn.js.map +0 -1
  754. package/build/server/chunks/_server.ts-DorWUEnZ.js +0 -762
  755. package/build/server/chunks/_server.ts-DorWUEnZ.js.map +0 -1
  756. package/build/server/chunks/_server.ts-DptdgCp1.js +0 -92
  757. package/build/server/chunks/_server.ts-DptdgCp1.js.map +0 -1
  758. package/build/server/chunks/_server.ts-DyFhMY-d.js +0 -84
  759. package/build/server/chunks/_server.ts-DyFhMY-d.js.map +0 -1
  760. package/build/server/chunks/_server.ts-FBHhAciM.js +0 -149
  761. package/build/server/chunks/_server.ts-FBHhAciM.js.map +0 -1
  762. package/build/server/chunks/_server.ts-H0_rl9HF.js +0 -66
  763. package/build/server/chunks/_server.ts-H0_rl9HF.js.map +0 -1
  764. package/build/server/chunks/_server.ts-MGCXhBlP.js +0 -52
  765. package/build/server/chunks/_server.ts-MGCXhBlP.js.map +0 -1
  766. package/build/server/chunks/_server.ts-OXR06_zO.js +0 -167
  767. package/build/server/chunks/_server.ts-OXR06_zO.js.map +0 -1
  768. package/build/server/chunks/_server.ts-QbGAW-It.js +0 -58
  769. package/build/server/chunks/_server.ts-QbGAW-It.js.map +0 -1
  770. package/build/server/chunks/_server.ts-TAvt1Rlb.js +0 -57
  771. package/build/server/chunks/_server.ts-TAvt1Rlb.js.map +0 -1
  772. package/build/server/chunks/_server.ts-VXMfJF_F.js +0 -62
  773. package/build/server/chunks/_server.ts-VXMfJF_F.js.map +0 -1
  774. package/build/server/chunks/_server.ts-XiInWDAF.js +0 -82
  775. package/build/server/chunks/_server.ts-XiInWDAF.js.map +0 -1
  776. package/build/server/chunks/_server.ts-d08IyVdj.js +0 -54
  777. package/build/server/chunks/_server.ts-d08IyVdj.js.map +0 -1
  778. package/build/server/chunks/_server.ts-dtw_InfP.js +0 -36
  779. package/build/server/chunks/_server.ts-dtw_InfP.js.map +0 -1
  780. package/build/server/chunks/_server.ts-eTP3NGlu.js +0 -49
  781. package/build/server/chunks/_server.ts-eTP3NGlu.js.map +0 -1
  782. package/build/server/chunks/_server.ts-fm-L_1WH.js +0 -56
  783. package/build/server/chunks/_server.ts-fm-L_1WH.js.map +0 -1
  784. package/build/server/chunks/_server.ts-g5H0gdQB.js +0 -70
  785. package/build/server/chunks/_server.ts-g5H0gdQB.js.map +0 -1
  786. package/build/server/chunks/_server.ts-gBvSTaRH.js +0 -78
  787. package/build/server/chunks/_server.ts-gBvSTaRH.js.map +0 -1
  788. package/build/server/chunks/_server.ts-lMB9A2Vx.js +0 -92
  789. package/build/server/chunks/_server.ts-lMB9A2Vx.js.map +0 -1
  790. package/build/server/chunks/_server.ts-tww34LXr.js +0 -42
  791. package/build/server/chunks/_server.ts-tww34LXr.js.map +0 -1
  792. package/build/server/chunks/_server.ts-xgg0Rj1C.js +0 -129
  793. package/build/server/chunks/_server.ts-xgg0Rj1C.js.map +0 -1
  794. package/build/server/chunks/_server.ts-yO3j4YDH.js +0 -169
  795. package/build/server/chunks/_server.ts-yO3j4YDH.js.map +0 -1
  796. package/build/server/chunks/addon-helpers-DnZ1IPC7.js +0 -51
  797. package/build/server/chunks/addon-helpers-DnZ1IPC7.js.map +0 -1
  798. package/build/server/chunks/akm-BVM3F-FY.js +0 -151
  799. package/build/server/chunks/akm-BVM3F-FY.js.map +0 -1
  800. package/build/server/chunks/catalog-B_9Qf_Tj.js +0 -217
  801. package/build/server/chunks/catalog-B_9Qf_Tj.js.map +0 -1
  802. package/build/server/chunks/client-CEfPhREO.js +0 -202
  803. package/build/server/chunks/client-CEfPhREO.js.map +0 -1
  804. package/build/server/chunks/config-VJ5wAdKd.js +0 -121
  805. package/build/server/chunks/config-VJ5wAdKd.js.map +0 -1
  806. package/build/server/chunks/dist-DOFcG0Zp.js +0 -6617
  807. package/build/server/chunks/dist-DOFcG0Zp.js.map +0 -1
  808. package/build/server/chunks/docker-7rKo0FDm.js +0 -20
  809. package/build/server/chunks/docker-7rKo0FDm.js.map +0 -1
  810. package/build/server/chunks/endpoints-DUs5zmwI.js +0 -358
  811. package/build/server/chunks/endpoints-DUs5zmwI.js.map +0 -1
  812. package/build/server/chunks/environment-DqfL567G.js +0 -38
  813. package/build/server/chunks/environment-DqfL567G.js.map +0 -1
  814. package/build/server/chunks/error.svelte-DXUxoirZ.js +0 -18
  815. package/build/server/chunks/error.svelte-DXUxoirZ.js.map +0 -1
  816. package/build/server/chunks/exports-D1quPX8S.js +0 -124
  817. package/build/server/chunks/exports-D1quPX8S.js.map +0 -1
  818. package/build/server/chunks/exports2-DECEtwH0.js +0 -691
  819. package/build/server/chunks/exports2-DECEtwH0.js.map +0 -1
  820. package/build/server/chunks/features-h0rPqe2e.js +0 -15
  821. package/build/server/chunks/features-h0rPqe2e.js.map +0 -1
  822. package/build/server/chunks/features.svelte-DsfDrPnq.js +0 -11
  823. package/build/server/chunks/features.svelte-DsfDrPnq.js.map +0 -1
  824. package/build/server/chunks/helpers-GEmeDI6e.js +0 -293
  825. package/build/server/chunks/helpers-GEmeDI6e.js.map +0 -1
  826. package/build/server/chunks/hooks.server-CwgeONEs.js +0 -155
  827. package/build/server/chunks/hooks.server-CwgeONEs.js.map +0 -1
  828. package/build/server/chunks/http-BzGcbSMh.js +0 -31
  829. package/build/server/chunks/http-BzGcbSMh.js.map +0 -1
  830. package/build/server/chunks/internal-CWT3-fy-.js +0 -915
  831. package/build/server/chunks/internal-CWT3-fy-.js.map +0 -1
  832. package/build/server/chunks/paths-D8yGDgAD.js +0 -17
  833. package/build/server/chunks/paths-D8yGDgAD.js.map +0 -1
  834. package/build/server/chunks/provider-constants-DPrj3yBX.js +0 -63
  835. package/build/server/chunks/provider-constants-DPrj3yBX.js.map +0 -1
  836. package/build/server/chunks/session-cookie-IMj1chTO.js +0 -74
  837. package/build/server/chunks/session-cookie-IMj1chTO.js.map +0 -1
  838. package/build/server/chunks/setup-deploy-DhMA_slP.js +0 -75
  839. package/build/server/chunks/setup-deploy-DhMA_slP.js.map +0 -1
  840. package/build/server/chunks/src-DBYue8Tb.js +0 -9682
  841. package/build/server/chunks/src-DBYue8Tb.js.map +0 -1
  842. package/build/server/chunks/state-Bpt5dC1X.js +0 -24
  843. package/build/server/chunks/state-Bpt5dC1X.js.map +0 -1
  844. package/build/server/chunks/state2-D20PkMjF.js +0 -62
  845. package/build/server/chunks/state2-D20PkMjF.js.map +0 -1
  846. package/build/server/chunks/theme-state.svelte-DPdcwIRf.js +0 -837
  847. package/build/server/chunks/theme-state.svelte-DPdcwIRf.js.map +0 -1
  848. package/build/server/chunks/utils-BSRjJDrZ.js +0 -150
  849. package/build/server/chunks/utils-BSRjJDrZ.js.map +0 -1
  850. /package/build/client/_app/immutable/assets/{6.BXlLAfIE.css → 4.BXlLAfIE.css} +0 -0
  851. /package/build/client/_app/immutable/assets/{6.BXlLAfIE.css.br → 4.BXlLAfIE.css.br} +0 -0
  852. /package/build/client/_app/immutable/assets/{6.BXlLAfIE.css.gz → 4.BXlLAfIE.css.gz} +0 -0
@@ -1,3289 +0,0 @@
1
- import { F as head, q as ensure_array_like, e as attr_class, d as attr, s as escape_html, a9 as stringify, p as derived, g as bind_props } from './dev-D85DamNs.js';
2
- import { o as onDestroy, g as goto } from './client-CEfPhREO.js';
3
- import { r as require_dist } from './dist-DOFcG0Zp.js';
4
- import { g as fetchContainers, f as fetchAutomations, D as voiceState, B as toolIconType, z as toolAriaLabel, b as buildHeaders, i as fetchServiceLogs, a as detectAkmEmbedding, w as testAkmEmbedding, n as notifications } from './theme-state.svelte-DPdcwIRf.js';
5
- import { I as IconDone } from './IconDone-YB1DYJFs.js';
6
- import { I as IconInfo } from './IconInfo-yYiI9uGe.js';
7
- import { i as SvelteMap, c as IconMic, r as formatTime, q as endpointsService, j as SvelteSet } from './IconMic-DMJf4zcn.js';
8
- import { N as Navbar, I as IconServer, D as Drawer } from './Navbar-CbBudHU6.js';
9
- import { S as Spinner } from './Spinner-jfNKSy3m.js';
10
- import { I as IconActivity, g as IconLink, a as IconAgent, b as IconAlert, d as IconDoneCircle, j as IconTerminal, C as ChatMessage, h as IconRefresh, i as IconSearch, f as IconFile, e as IconEdit, c as IconClock } from './IconAlert-eLDsz7qz.js';
11
- import { I as IconLock } from './IconLock-DHiqGiiZ.js';
12
- import './exports2-DECEtwH0.js';
13
- import './utils-BSRjJDrZ.js';
14
- import 'node:module';
15
- import './internal-CWT3-fy-.js';
16
- import './chunk-CLZ62Ad-.js';
17
- import './features.svelte-DsfDrPnq.js';
18
- import './paths-D8yGDgAD.js';
19
- import './environment-DqfL567G.js';
20
- import './state2-D20PkMjF.js';
21
- import './IconLogo-Iv-7q8aY.js';
22
-
23
- //#region src/lib/components/icons/IconOverview.svelte
24
- function IconOverview($$renderer, $$props) {
25
- let { size = 20, class: className = "" } = $$props;
26
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><rect fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" x="4" y="4" width="7" height="7" rx="1.4"></rect><rect fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" x="13" y="4" width="7" height="7" rx="1.4"></rect><rect fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" x="4" y="13" width="7" height="7" rx="1.4"></rect><rect fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" x="13" y="13" width="7" height="7" rx="1.4"></rect></svg>`);
27
- }
28
- //#endregion
29
- //#region src/lib/components/icons/IconJournal.svelte
30
- function IconJournal($$renderer, $$props) {
31
- let { size = 20, class: className = "" } = $$props;
32
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M6 4.5h10.5a1.8 1.8 0 0 1 1.8 1.8v13.2H7.5a1.5 1.5 0 0 1-1.5-1.5z"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M6 17.5h12.3"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M9.5 8.5h6"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M9.5 12h4"></path></svg>`);
33
- }
34
- //#endregion
35
- //#region src/lib/components/icons/IconMemory.svelte
36
- function IconMemory($$renderer, $$props) {
37
- let { size = 20, class: className = "" } = $$props;
38
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M12 7.5a5.5 5.5 0 0 0-9.5 0v10.5a5.5 5.5 0 0 1 9.5 0"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M12 7.5a5.5 5.5 0 0 1 9.5 0v10.5a5.5 5.5 0 0 0-9.5 0"></path></svg>`);
39
- }
40
- //#endregion
41
- //#region src/lib/components/icons/IconSharing.svelte
42
- function IconSharing($$renderer, $$props) {
43
- let { size = 20, class: className = "" } = $$props;
44
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><rect fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" x="3" y="9" width="7" height="6" rx="1.5"></rect><rect fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" x="14" y="9" width="7" height="6" rx="1.5"></rect><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M10 12h4"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M12 10l2 2-2 2"></path></svg>`);
45
- }
46
- //#endregion
47
- //#region src/lib/components/icons/IconAddons.svelte
48
- function IconAddons($$renderer, $$props) {
49
- let { size = 20, class: className = "" } = $$props;
50
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M12 5L3 9.5l9 4.5 9-4.5z"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M3 14.5l9 4.5 9-4.5"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M3 18.5l9 4.5 9-4.5"></path></svg>`);
51
- }
52
- //#endregion
53
- //#region src/lib/components/icons/IconAutomations.svelte
54
- function IconAutomations($$renderer, $$props) {
55
- let { size = 20, class: className = "" } = $$props;
56
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><circle fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" cx="12" cy="12" r="8.5"></circle><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M13.5 6.5l-4.5 6h4.5l-4.5 7"></path></svg>`);
57
- }
58
- //#endregion
59
- //#region src/lib/components/icons/IconCloudDownload.svelte
60
- function IconCloudDownload($$renderer, $$props) {
61
- let { size = 20, class: className = "" } = $$props;
62
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M6.5 18.5a4.5 4.5 0 0 1 .5-9H8a6 6 0 0 1 11.5 2.5 3.5 3.5 0 0 1-.5 6.5"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M12 11v7"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M9.5 15.5l2.5 2.5 2.5-2.5"></path></svg>`);
63
- }
64
- //#endregion
65
- //#region src/lib/components/icons/IconHome.svelte
66
- function IconHome($$renderer, $$props) {
67
- let { size = 20, class: className = "" } = $$props;
68
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M4 11L12 4l8 7"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M6 10v9.5h12V10"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M10 19.5v-5.5h4v5.5"></path></svg>`);
69
- }
70
- //#endregion
71
- //#region src/lib/components/chrome/TabBar.svelte
72
- function TabBar($$renderer, $$props) {
73
- $$renderer.component(($$renderer) => {
74
- let { active} = $$props;
75
- const SECTIONS = [
76
- {
77
- id: "health",
78
- label: "Health",
79
- tabs: [
80
- {
81
- id: "overview",
82
- label: "Overview",
83
- icon: IconOverview
84
- },
85
- {
86
- id: "activity",
87
- label: "Activity",
88
- icon: IconActivity
89
- },
90
- {
91
- id: "containers",
92
- label: "Systems",
93
- icon: IconServer
94
- },
95
- {
96
- id: "logs",
97
- label: "Journal",
98
- icon: IconJournal
99
- },
100
- {
101
- id: "updates",
102
- label: "Check-up",
103
- icon: IconCloudDownload
104
- },
105
- {
106
- id: "recovery",
107
- label: "Recovery",
108
- icon: IconHome
109
- }
110
- ]
111
- },
112
- {
113
- id: "mind",
114
- label: "Mind",
115
- tabs: [{
116
- id: "connections",
117
- label: "AI Providers",
118
- icon: IconLink
119
- }]
120
- },
121
- {
122
- id: "voice",
123
- label: "Voice",
124
- tabs: [{
125
- id: "voice",
126
- label: "Voice",
127
- icon: IconMic
128
- }]
129
- },
130
- {
131
- id: "routines",
132
- label: "Routines",
133
- tabs: [{
134
- id: "automations",
135
- label: "Automations",
136
- icon: IconAutomations
137
- }]
138
- },
139
- {
140
- id: "capabilities",
141
- label: "Capabilities",
142
- tabs: [{
143
- id: "addons",
144
- label: "Add-ons",
145
- icon: IconAddons
146
- }]
147
- },
148
- {
149
- id: "knowledge",
150
- label: "Knowledge",
151
- tabs: [
152
- {
153
- id: "akm",
154
- label: "Memory",
155
- icon: IconMemory
156
- },
157
- {
158
- id: "assistant",
159
- label: "Assistant",
160
- icon: IconAgent
161
- },
162
- {
163
- id: "secrets",
164
- label: "Secrets",
165
- icon: IconLock
166
- },
167
- {
168
- id: "host-sharing",
169
- label: "Sharing",
170
- icon: IconSharing
171
- }
172
- ]
173
- }
174
- ];
175
- let activeSection = derived(() => SECTIONS.find((s) => s.tabs.some((t) => t.id === active)) ?? SECTIONS[0]);
176
- $$renderer.push(`<nav class="nav-shell svelte-7673iv" aria-label="Admin sections"><div class="section-strip svelte-7673iv" role="tablist" aria-label="Sections"><!--[-->`);
177
- const each_array = ensure_array_like(SECTIONS);
178
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
179
- let section = each_array[$$index];
180
- $$renderer.push(`<button${attr_class("section-tab svelte-7673iv", void 0, { "section-tab-active": activeSection().id === section.id })} role="tab"${attr("aria-selected", activeSection().id === section.id)}>${escape_html(section.label)}</button>`);
181
- }
182
- $$renderer.push(`<!--]--></div> `);
183
- if (activeSection().tabs.length > 1) {
184
- $$renderer.push("<!--[0-->");
185
- $$renderer.push(`<div class="subtab-row svelte-7673iv"><div class="tabs svelte-7673iv" role="tablist"${attr("aria-label", `${stringify(activeSection().label)} tabs`)}><!--[-->`);
186
- const each_array_1 = ensure_array_like(activeSection().tabs);
187
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
188
- let tab = each_array_1[$$index_1];
189
- $$renderer.push(`<button${attr_class("tab svelte-7673iv", void 0, { "tab-active": active === tab.id })} role="tab"${attr("aria-selected", active === tab.id)}>`);
190
- if (tab.icon) {
191
- $$renderer.push("<!--[-->");
192
- tab.icon($$renderer, { size: 13 });
193
- $$renderer.push("<!--]-->");
194
- } else {
195
- $$renderer.push("<!--[!-->");
196
- $$renderer.push("<!--]-->");
197
- }
198
- $$renderer.push(` ${escape_html(tab.label)}</button>`);
199
- }
200
- $$renderer.push(`<!--]--></div></div>`);
201
- } else $$renderer.push("<!--[-1-->");
202
- $$renderer.push(`<!--]--></nav>`);
203
- });
204
- }
205
- //#endregion
206
- //#region src/lib/components/admin/overview/StatusHero.svelte
207
- function StatusHero($$renderer, $$props) {
208
- $$renderer.component(($$renderer) => {
209
- let { status, title, detail, healthLoading} = $$props;
210
- $$renderer.push(`<section${attr_class(`hero hero--${stringify(status)}`, "svelte-10n23hu")} role="status" aria-live="polite"><span class="hero-icon svelte-10n23hu" aria-hidden="true">`);
211
- if (status === "warning") {
212
- $$renderer.push("<!--[0-->");
213
- IconAlert($$renderer, { size: 22 });
214
- } else if (status === "ok") {
215
- $$renderer.push("<!--[1-->");
216
- IconDoneCircle($$renderer, { size: 22 });
217
- } else {
218
- $$renderer.push("<!--[-1-->");
219
- IconInfo($$renderer, { size: 22 });
220
- }
221
- $$renderer.push(`<!--]--></span> <div class="hero-text svelte-10n23hu"><h2 class="hero-title svelte-10n23hu">${escape_html(title)}</h2> <p class="hero-detail svelte-10n23hu">${escape_html(detail)}</p></div> <div class="hero-actions svelte-10n23hu"><button class="btn btn-secondary"${attr("disabled", healthLoading, true)}>${escape_html(healthLoading ? "Checking…" : "Re-check")}</button> `);
222
- if (status === "warning") {
223
- $$renderer.push("<!--[0-->");
224
- $$renderer.push(`<button class="btn btn-secondary">View containers</button>`);
225
- } else $$renderer.push("<!--[-1-->");
226
- $$renderer.push(`<!--]--> <button class="btn btn-secondary">Check for updates</button></div></section>`);
227
- });
228
- }
229
- //#endregion
230
- //#region src/lib/components/admin/overview/MetricTile.svelte
231
- function MetricTile($$renderer, $$props) {
232
- /** Primary metric value (rendered when no icon snippet is supplied). */
233
- /** Secondary "/total" fragment shown next to the value. */
234
- /** Whether enough data has loaded to show value/sub (else shows an em dash). */
235
- /** Decorative icon, mutually exclusive with value. */
236
- /** Status for value and badge color: 'ok' (moss) or 'warn' (seal). */
237
- /** Optional status badge text (e.g. "configured", "3 active"). */
238
- let { label, onClick, value = null, sub = null, loaded = true, icon, status, badge } = $$props;
239
- $$renderer.push(`<button class="tile svelte-19hpfg">`);
240
- if (icon) {
241
- $$renderer.push("<!--[0-->");
242
- $$renderer.push(`<span class="tile-metric tile-metric--icon svelte-19hpfg" aria-hidden="true">`);
243
- icon($$renderer);
244
- $$renderer.push(`<!----></span>`);
245
- } else {
246
- $$renderer.push("<!--[-1-->");
247
- $$renderer.push(`<span${attr_class("tile-metric svelte-19hpfg", void 0, {
248
- "tile-metric--ok": status === "ok",
249
- "tile-metric--warn": status === "warn"
250
- })}>`);
251
- if (loaded) {
252
- $$renderer.push("<!--[0-->");
253
- $$renderer.push(`${escape_html(value)}`);
254
- if (sub) {
255
- $$renderer.push("<!--[0-->");
256
- $$renderer.push(`<span class="tile-metric-sub svelte-19hpfg">${escape_html(sub)}</span>`);
257
- } else $$renderer.push("<!--[-1-->");
258
- $$renderer.push(`<!--]-->`);
259
- } else {
260
- $$renderer.push("<!--[-1-->");
261
- $$renderer.push(`—`);
262
- }
263
- $$renderer.push(`<!--]--></span>`);
264
- }
265
- $$renderer.push(`<!--]--> <span class="tile-label svelte-19hpfg">${escape_html(label)}</span> `);
266
- if (badge) {
267
- $$renderer.push("<!--[0-->");
268
- $$renderer.push(`<span${attr_class("s-tile-badge svelte-19hpfg", void 0, {
269
- "s-tile-badge--ok": status === "ok",
270
- "s-tile-badge--warn": status === "warn"
271
- })}>${escape_html(badge)}</span>`);
272
- } else $$renderer.push("<!--[-1-->");
273
- $$renderer.push(`<!--]--></button>`);
274
- }
275
- //#endregion
276
- //#region src/lib/components/admin/overview/AkmHealthCard.svelte
277
- function AkmHealthCard($$renderer, $$props) {
278
- $$renderer.component(($$renderer) => {
279
- let { badge} = $$props;
280
- $$renderer.push(`<button class="akm-card svelte-dcgqe1" aria-label="AKM health — open Knowledge settings"><div class="akm-head svelte-dcgqe1"><span class="akm-title svelte-dcgqe1">AKM runtime health</span> <span${attr_class(`badge ${stringify(badge.cls)}`, "svelte-dcgqe1")}>${escape_html(badge.label)}</span></div> `);
281
- {
282
- $$renderer.push("<!--[-1-->");
283
- $$renderer.push(`<p class="akm-unavailable svelte-dcgqe1">Metrics unavailable — the akm CLI isn't reachable from the admin host.</p>`);
284
- }
285
- $$renderer.push(`<!--]--></button>`);
286
- });
287
- }
288
- //#endregion
289
- //#region src/lib/components/admin/overview/ConfigureShortcuts.svelte
290
- function ConfigureShortcuts($$renderer, $$props) {
291
- $$renderer.component(($$renderer) => {
292
- $$renderer.push(`<div class="shortcut-grid svelte-8y2vdf"><button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">AI Providers</span> <span class="shortcut-desc svelte-8y2vdf">Models &amp; provider credentials</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Knowledge</span> <span class="shortcut-desc svelte-8y2vdf">Assistant memory &amp; behavior</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Voice</span> <span class="shortcut-desc svelte-8y2vdf">Speech-to-text &amp; text-to-speech</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Portals &amp; add-ons</span> <span class="shortcut-desc svelte-8y2vdf">Discord, Slack, API &amp; more</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Secrets</span> <span class="shortcut-desc svelte-8y2vdf">Stack &amp; portal credentials</span></button> <a class="shortcut svelte-8y2vdf" href="/setup?rerun=1"><span class="shortcut-name svelte-8y2vdf">Re-run setup</span> <span class="shortcut-desc svelte-8y2vdf">Walk through the setup wizard again</span></a></div>`);
293
- });
294
- }
295
- //#endregion
296
- //#region src/lib/components/admin/overview/OverviewTab.svelte
297
- function OverviewTab($$renderer, $$props) {
298
- $$renderer.component(($$renderer) => {
299
- /**
300
- * Services this stack actually deploys (compose model resolved with active
301
- * profiles). Health is measured against THIS set so a service the stack
302
- * never deploys (e.g. guardian on a no-portal install) is never counted as
303
- * a failed container. Falls back to the merged container keys when empty.
304
- */
305
- let { healthLoading, mergedServices, managedServices, onNavigate } = $$props;
306
- let akmBadge = derived(() => {
307
- return {
308
- label: "Unavailable",
309
- cls: "badge-neutral"
310
- };
311
- });
312
- let akmCheckTotal = derived(() => 0);
313
- let healthServices = derived(() => managedServices.length > 0 ? managedServices : [...mergedServices.keys()]);
314
- let containerCounts = derived(() => {
315
- if (healthServices().length === 0) return null;
316
- const running = healthServices().filter((name) => mergedServices.get(name) === "running").length;
317
- return {
318
- total: healthServices().length,
319
- running
320
- };
321
- });
322
- let downServices = derived(() => healthServices().filter((name) => mergedServices.get(name) !== "running"));
323
- let health = derived(() => {
324
- if (!containerCounts()) return {
325
- status: "unknown",
326
- title: "Checking services…",
327
- detail: "Fetching the latest status from Docker."
328
- };
329
- if (containerCounts().running === containerCounts().total && containerCounts().total > 0) return {
330
- status: "ok",
331
- title: "All systems operational",
332
- detail: `${containerCounts().total} of ${containerCounts().total} services are running normally.`
333
- };
334
- const down = containerCounts().total - containerCounts().running;
335
- const names = downServices().map((n) => n.charAt(0).toUpperCase() + n.slice(1)).join(", ");
336
- return {
337
- status: "warning",
338
- title: `${down} of ${containerCounts().total} services not running`,
339
- detail: names ? `Not running: ${names}.` : "One or more services need attention."
340
- };
341
- });
342
- StatusHero($$renderer, {
343
- status: health().status,
344
- title: health().title,
345
- detail: health().detail,
346
- healthLoading});
347
- $$renderer.push(`<!----> <div class="tile-grid svelte-xz862u">`);
348
- MetricTile($$renderer, {
349
- label: "Services running",
350
- onClick: () => onNavigate("containers"),
351
- value: containerCounts()?.running,
352
- sub: containerCounts() ? `/${containerCounts().total}` : null,
353
- loaded: !!containerCounts(),
354
- status: containerCounts()?.running === containerCounts()?.total ? "ok" : "warn",
355
- badge: containerCounts()?.running === containerCounts()?.total ? "operational" : `${(containerCounts()?.total ?? 0) - (containerCounts()?.running ?? 0)} down`
356
- });
357
- $$renderer.push(`<!----> `);
358
- {
359
- function icon($$renderer) {
360
- IconTerminal($$renderer, { size: 22 });
361
- }
362
- MetricTile($$renderer, {
363
- label: "View logs",
364
- onClick: () => onNavigate("logs"),
365
- icon});
366
- }
367
- $$renderer.push(`<!----> `);
368
- {
369
- function icon($$renderer) {
370
- IconCloudDownload($$renderer, { size: 22 });
371
- }
372
- MetricTile($$renderer, {
373
- label: "Check for updates",
374
- onClick: () => onNavigate("updates"),
375
- icon});
376
- }
377
- $$renderer.push(`<!----></div> <h3 class="section-heading svelte-xz862u">Knowledge base (AKM)</h3> `);
378
- AkmHealthCard($$renderer, {
379
- badge: akmBadge(),
380
- checkTotal: akmCheckTotal()});
381
- $$renderer.push(`<!----> <h3 class="section-heading svelte-xz862u">Configure</h3> `);
382
- ConfigureShortcuts($$renderer);
383
- $$renderer.push(`<!---->`);
384
- });
385
- }
386
- //#endregion
387
- //#region src/lib/components/admin/updates/UpdatesTab.svelte
388
- function UpdatesTab($$renderer, $$props) {
389
- $$renderer.component(($$renderer) => {
390
- let rowApplying = {};
391
- let allApplying = false;
392
- let uiApplying = false;
393
- const anyApplying = derived(() => Object.values(rowApplying).some(Boolean));
394
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header svelte-7mkeya"><div><h2>Updates</h2> <p class="panel-subtitle">Update individual components or everything at once.</p> <p class="control-plane-line svelte-7mkeya">Control plane: <strong class="svelte-7mkeya">${escape_html("—")}</strong></p></div> <div class="header-actions svelte-7mkeya"><button class="btn btn-primary"${attr("disabled", anyApplying(), true)}${attr("aria-busy", allApplying)}>`);
395
- $$renderer.push("<!--[-1-->");
396
- $$renderer.push(`Update everything`);
397
- $$renderer.push(`<!--]--></button> <button class="btn btn-outline"${attr("disabled", anyApplying(), true)}${attr("aria-busy", uiApplying)}>`);
398
- $$renderer.push("<!--[-1-->");
399
- $$renderer.push(`Update UI`);
400
- $$renderer.push(`<!--]--></button></div></div> `);
401
- $$renderer.push("<!--[-1-->");
402
- $$renderer.push(`<!--]--> `);
403
- $$renderer.push("<!--[-1-->");
404
- $$renderer.push(`<!--]--> `);
405
- $$renderer.push("<!--[-1-->");
406
- $$renderer.push(`<!--]--> `);
407
- $$renderer.push("<!--[-1-->");
408
- $$renderer.push(`<!--]--> <div class="panel-body">`);
409
- $$renderer.push("<!--[-1-->");
410
- $$renderer.push(`<!--]--> `);
411
- $$renderer.push("<!--[0-->");
412
- $$renderer.push(`<p class="loading-line svelte-7mkeya">`);
413
- Spinner($$renderer, {});
414
- $$renderer.push(`<!----> Loading versions…</p>`);
415
- $$renderer.push(`<!--]--> `);
416
- $$renderer.push("<!--[-1-->");
417
- $$renderer.push(`<!--]--></div></div>`);
418
- });
419
- }
420
- //#endregion
421
- //#region src/lib/components/admin/updates/RecoveryTab.svelte
422
- function RecoveryTab($$renderer, $$props) {
423
- $$renderer.component(($$renderer) => {
424
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Recovery</h2> <p class="panel-subtitle">Backups · recovery · migration</p></div></div> <div class="panel-body">`);
425
- $$renderer.push("<!--[-1-->");
426
- $$renderer.push(`<!--]--> `);
427
- $$renderer.push("<!--[-1-->");
428
- $$renderer.push(`<!--]--> <section class="backups-section svelte-54nov7" aria-labelledby="backups-title"><div class="backups-header svelte-54nov7"><div><h3 id="backups-title" class="backups-title svelte-54nov7">Backups</h3> `);
429
- $$renderer.push("<!--[-1-->");
430
- $$renderer.push(`<!--]--></div> `);
431
- $$renderer.push("<!--[-1-->");
432
- $$renderer.push(`<!--]--></div> <p class="backups-desc svelte-54nov7">Each update copies your settings here first. To restore, run <code>openpalm rollback</code> for the last update, or point OpenPalm at a snapshot directory manually.
433
- Nothing is ever deleted automatically.</p> `);
434
- $$renderer.push("<!--[2-->");
435
- $$renderer.push(`<p class="backups-empty svelte-54nov7">No backups yet — one is created the first time you update.</p>`);
436
- $$renderer.push(`<!--]--> `);
437
- $$renderer.push("<!--[-1-->");
438
- $$renderer.push(`<!--]--></section></div></div>`);
439
- });
440
- }
441
- //#endregion
442
- //#region src/lib/components/common/EmptyState.svelte
443
- function EmptyState($$renderer, $$props) {
444
- /** Icon markup (typically an inline SVG). */
445
- /** Message body (paragraphs, hints, etc.). */
446
- /** Optional action(s) — buttons/links shown below the message. */
447
- let { icon, children, action } = $$props;
448
- $$renderer.push(`<div class="empty-state svelte-1dv4ads">`);
449
- if (icon) {
450
- $$renderer.push("<!--[0-->");
451
- icon($$renderer);
452
- $$renderer.push(`<!---->`);
453
- } else $$renderer.push("<!--[-1-->");
454
- $$renderer.push(`<!--]--> `);
455
- children($$renderer);
456
- $$renderer.push(`<!----> `);
457
- if (action) {
458
- $$renderer.push("<!--[0-->");
459
- action($$renderer);
460
- $$renderer.push(`<!---->`);
461
- } else $$renderer.push("<!--[-1-->");
462
- $$renderer.push(`<!--]--></div>`);
463
- }
464
- //#endregion
465
- //#region src/lib/components/addons/AddonsTab.svelte
466
- function AddonsTab($$renderer, $$props) {
467
- $$renderer.component(($$renderer) => {
468
- const ADDON_ACRONYMS = {
469
- api: "API",
470
- ssh: "SSH",
471
- ui: "UI"
472
- };
473
- function formatAddonName(name) {
474
- return name.split(/[-_]/).filter(Boolean).map((w) => ADDON_ACRONYMS[w.toLowerCase()] ?? w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
475
- }
476
- let addons = [];
477
- let loading = false;
478
- let actionLoading = null;
479
- let $$settled = true;
480
- let $$inner_renderer;
481
- function $$render_inner($$renderer) {
482
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Addons</h2> <p class="panel-subtitle">Optional features · capabilities</p></div> <button class="btn btn-secondary btn-sm"${attr("disabled", loading, true)}>`);
483
- $$renderer.push("<!--[-1-->");
484
- $$renderer.push(`<!--]--> Refresh</button></div> <div class="panel-body panel-body--flush">`);
485
- if (addons.length === 0) {
486
- $$renderer.push("<!--[2-->");
487
- {
488
- function icon($$renderer) {
489
- IconAddons($$renderer, { size: 40 });
490
- }
491
- EmptyState($$renderer, {
492
- icon,
493
- children: ($$renderer) => {
494
- $$renderer.push(`<p>No addons found in registry/addons/.</p>`);
495
- }});
496
- }
497
- } else {
498
- $$renderer.push("<!--[-1-->");
499
- $$renderer.push(`<div class="addon-table svelte-87zh26"><div class="addon-table-header svelte-87zh26"><span class="addon-col addon-col--name svelte-87zh26">Addon</span> <span class="addon-col addon-col--status svelte-87zh26">Status</span> <span class="addon-col addon-col--actions svelte-87zh26"></span></div> <!--[-->`);
500
- const each_array = ensure_array_like(addons);
501
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
502
- let addon = each_array[$$index];
503
- $$renderer.push(`<div class="addon-row svelte-87zh26"><span class="addon-col addon-col--name addon-name svelte-87zh26"${attr("title", addon.name)}>${escape_html(formatAddonName(addon.name))}</span> <span class="addon-col addon-col--status svelte-87zh26"><span${attr_class("badge", void 0, {
504
- "badge-enabled": addon.enabled,
505
- "badge-disabled": !addon.enabled
506
- })}>${escape_html(addon.enabled ? "Enabled" : "Disabled")}</span></span> <span class="addon-col addon-col--actions svelte-87zh26">`);
507
- if (addon.name === "voice" && addon.enabled) {
508
- $$renderer.push("<!--[0-->");
509
- $$renderer.push(`<button class="btn btn-sm btn-secondary" aria-label="Configure Voice addon settings">Configure</button>`);
510
- } else {
511
- $$renderer.push("<!--[-1-->");
512
- $$renderer.push(`<button class="btn btn-sm btn-secondary"${attr("disabled", !addon.available, true)}>Credentials</button>`);
513
- }
514
- $$renderer.push(`<!--]--> <button${attr_class("btn btn-sm", void 0, {
515
- "btn-danger": addon.enabled,
516
- "btn-outline": !addon.enabled
517
- })}${attr("disabled", actionLoading === addon.name || !addon.available, true)}>`);
518
- if (actionLoading === addon.name) {
519
- $$renderer.push("<!--[0-->");
520
- Spinner($$renderer, {});
521
- } else {
522
- $$renderer.push("<!--[-1-->");
523
- $$renderer.push(`${escape_html(addon.enabled ? "Disable" : "Enable")}`);
524
- }
525
- $$renderer.push(`<!--]--></button></span></div>`);
526
- }
527
- $$renderer.push(`<!--]--></div>`);
528
- }
529
- $$renderer.push(`<!--]--></div> `);
530
- $$renderer.push("<!--[-1-->");
531
- $$renderer.push(`<!--]--></div>`);
532
- }
533
- do {
534
- $$settled = true;
535
- $$inner_renderer = $$renderer.copy();
536
- $$render_inner($$inner_renderer);
537
- } while (!$$settled);
538
- $$renderer.subsume($$inner_renderer);
539
- });
540
- }
541
- //#endregion
542
- //#region src/lib/components/common/Panel.svelte
543
- function Panel($$renderer, $$props) {
544
- /** Heading text rendered in the panel header. */
545
- /** Action button(s) shown at the right of the header. */
546
- /** Panel content below the header (typically a `.panel-body`). */
547
- /** ARIA role for the panel container (e.g. "tabpanel"). */
548
- let { title, actions, children, role } = $$props;
549
- $$renderer.push(`<div class="panel"${attr("role", role)}><div class="panel-header"><h2>${escape_html(title)}</h2> `);
550
- if (actions) {
551
- $$renderer.push("<!--[0-->");
552
- $$renderer.push(`<div class="panel-header-actions">`);
553
- actions($$renderer);
554
- $$renderer.push(`<!----></div>`);
555
- } else $$renderer.push("<!--[-1-->");
556
- $$renderer.push(`<!--]--></div> `);
557
- children($$renderer);
558
- $$renderer.push(`<!----></div>`);
559
- }
560
- //#endregion
561
- //#region src/lib/components/admin/containers/container-format.ts
562
- function parseImageTag(image) {
563
- const atIdx = image.indexOf("@");
564
- const base = atIdx > -1 ? image.slice(0, atIdx) : image;
565
- const colonIdx = base.lastIndexOf(":");
566
- if (colonIdx > -1) return {
567
- name: base.slice(0, colonIdx),
568
- tag: base.slice(colonIdx + 1)
569
- };
570
- return {
571
- name: base,
572
- tag: "latest"
573
- };
574
- }
575
- function containerStatusColor(state) {
576
- if (state === "running") return "success";
577
- if (state === "exited" || state === "dead" || state === "stopped") return "danger";
578
- if (state === "restarting" || state === "paused") return "warning";
579
- return "idle";
580
- }
581
- function fmtState(s) {
582
- if (!s) return s ?? "";
583
- return s.charAt(0).toUpperCase() + s.slice(1);
584
- }
585
- //#endregion
586
- //#region src/lib/components/icons/IconExpand.svelte
587
- function IconExpand($$renderer, $$props) {
588
- let { size = 20, class: className = "" } = $$props;
589
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M5 9l7 7 7-7"></path></svg>`);
590
- }
591
- //#endregion
592
- //#region src/lib/components/admin/containers/ContainerRow.svelte
593
- function ContainerRow($$renderer, $$props) {
594
- $$renderer.component(($$renderer) => {
595
- let { entry, selected} = $$props;
596
- let img = derived(() => entry.docker ? parseImageTag(entry.docker.Image) : null);
597
- $$renderer.push(`<button class="container-table-row container-table-row--clickable svelte-1clpuus"${attr("aria-expanded", selected)}><span class="ct-col ct-col--name"><span${attr_class(`ct-indicator ct-indicator--${stringify(containerStatusColor(entry.state))}`, "svelte-1clpuus")}></span> <span class="ct-service-name svelte-1clpuus">${escape_html(entry.service)}</span></span> <span class="ct-col ct-col--image ct-mono svelte-1clpuus">`);
598
- if (img()) {
599
- $$renderer.push("<!--[0-->");
600
- $$renderer.push(`${escape_html(img().name)}`);
601
- } else {
602
- $$renderer.push("<!--[-1-->");
603
- $$renderer.push(`<span class="ct-not-created svelte-1clpuus">--</span>`);
604
- }
605
- $$renderer.push(`<!--]--></span> <span class="ct-col ct-col--tag">`);
606
- if (img()) {
607
- $$renderer.push("<!--[0-->");
608
- $$renderer.push(`<span class="tag-badge">${escape_html(img().tag)}</span>`);
609
- } else {
610
- $$renderer.push("<!--[-1-->");
611
- $$renderer.push(`<span class="ct-not-created svelte-1clpuus">--</span>`);
612
- }
613
- $$renderer.push(`<!--]--></span> <span class="ct-col ct-col--status"><span${attr_class(`badge badge-${stringify(containerStatusColor(entry.state))}`, "svelte-1clpuus")}>${escape_html(fmtState(entry.state))}</span></span> <span class="ct-col ct-col--actions">`);
614
- IconExpand($$renderer, {
615
- size: 14,
616
- class: selected ? "ct-chevron-open" : ""
617
- });
618
- $$renderer.push(`<!----></span></button>`);
619
- });
620
- }
621
- //#endregion
622
- //#region src/lib/components/admin/containers/ContainerDetail.svelte
623
- function ContainerDetail($$renderer, $$props) {
624
- $$renderer.component(($$renderer) => {
625
- let { entry, actionInFlight, confirmAction, feedback} = $$props;
626
- let img = derived(() => entry.docker ? parseImageTag(entry.docker.Image) : null);
627
- let isAnyActionInFlight = derived(() => actionInFlight !== null);
628
- let isNotCreated = derived(() => !entry.docker);
629
- $$renderer.push(`<div class="container-detail svelte-17lh9yz">`);
630
- if (entry.docker) {
631
- $$renderer.push("<!--[0-->");
632
- const container = entry.docker;
633
- $$renderer.push(`<div class="detail-grid svelte-17lh9yz"><div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Container ID</span> <span class="detail-value detail-mono svelte-17lh9yz">${escape_html(container.ID)}</span></div> <div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Name</span> <span class="detail-value detail-mono svelte-17lh9yz">${escape_html(container.Name || container.Names)}</span></div> <div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Image</span> <span class="detail-value detail-mono svelte-17lh9yz">${escape_html(container.Image)}</span></div> `);
634
- if (img()) {
635
- $$renderer.push("<!--[0-->");
636
- $$renderer.push(`<div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Image Name</span> <span class="detail-value detail-mono svelte-17lh9yz">${escape_html(img().name)}</span></div> <div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Tag / Digest</span> <span class="detail-value svelte-17lh9yz"><span class="tag-badge tag-badge--lg">${escape_html(img().tag)}</span> `);
637
- if (container.Image.includes("@")) {
638
- $$renderer.push("<!--[0-->");
639
- $$renderer.push(`<span class="detail-mono detail-digest svelte-17lh9yz">${escape_html(container.Image.split("@")[1]?.slice(0, 19))}...</span>`);
640
- } else $$renderer.push("<!--[-1-->");
641
- $$renderer.push(`<!--]--></span></div>`);
642
- } else $$renderer.push("<!--[-1-->");
643
- $$renderer.push(`<!--]--> <div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">State</span> <span class="detail-value svelte-17lh9yz"><span${attr_class(`badge badge-${stringify(containerStatusColor(container.State))}`, "svelte-17lh9yz")}>${escape_html(fmtState(container.State))}</span></span></div> <div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Status</span> <span class="detail-value svelte-17lh9yz">${escape_html(container.Status)}</span></div> `);
644
- if (container.Health) {
645
- $$renderer.push("<!--[0-->");
646
- $$renderer.push(`<div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Health</span> <span class="detail-value svelte-17lh9yz"><span${attr_class("badge", void 0, {
647
- "badge-success": container.Health === "healthy",
648
- "badge-warning": container.Health === "starting",
649
- "badge-danger": container.Health === "unhealthy",
650
- "badge-idle": ![
651
- "healthy",
652
- "starting",
653
- "unhealthy"
654
- ].includes(container.Health)
655
- })}>${escape_html(container.Health)}</span></span></div>`);
656
- } else $$renderer.push("<!--[-1-->");
657
- $$renderer.push(`<!--]--> `);
658
- if (container.Ports) {
659
- $$renderer.push("<!--[0-->");
660
- $$renderer.push(`<div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Ports</span> <span class="detail-value detail-mono svelte-17lh9yz">${escape_html(container.Ports)}</span></div>`);
661
- } else $$renderer.push("<!--[-1-->");
662
- $$renderer.push(`<!--]--> `);
663
- if (container.RunningFor) {
664
- $$renderer.push("<!--[0-->");
665
- $$renderer.push(`<div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Uptime</span> <span class="detail-value svelte-17lh9yz">${escape_html(container.RunningFor)}</span></div>`);
666
- } else $$renderer.push("<!--[-1-->");
667
- $$renderer.push(`<!--]--> `);
668
- if (container.CreatedAt) {
669
- $$renderer.push("<!--[0-->");
670
- $$renderer.push(`<div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Created</span> <span class="detail-value svelte-17lh9yz">${escape_html(container.CreatedAt)}</span></div>`);
671
- } else $$renderer.push("<!--[-1-->");
672
- $$renderer.push(`<!--]--> `);
673
- if (container.Project) {
674
- $$renderer.push("<!--[0-->");
675
- $$renderer.push(`<div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Project</span> <span class="detail-value detail-mono svelte-17lh9yz">${escape_html(container.Project)}</span></div>`);
676
- } else $$renderer.push("<!--[-1-->");
677
- $$renderer.push(`<!--]--></div>`);
678
- } else {
679
- $$renderer.push("<!--[-1-->");
680
- $$renderer.push(`<div class="detail-not-created svelte-17lh9yz"><p class="svelte-17lh9yz">Container has not been created yet. Use <strong>Start</strong> to create and start it.</p></div>`);
681
- }
682
- $$renderer.push(`<!--]--> `);
683
- if (feedback) {
684
- $$renderer.push("<!--[0-->");
685
- $$renderer.push(`<div${attr_class(`action-feedback action-feedback--${stringify(feedback.type)}`, "svelte-17lh9yz")} role="status">${escape_html(feedback.message)}</div>`);
686
- } else $$renderer.push("<!--[-1-->");
687
- $$renderer.push(`<!--]--> `);
688
- if (confirmAction) {
689
- $$renderer.push("<!--[0-->");
690
- $$renderer.push(`<div class="confirm-bar svelte-17lh9yz" role="alert"><span class="confirm-text svelte-17lh9yz">${escape_html(confirmAction.charAt(0).toUpperCase() + confirmAction.slice(1))} <strong>${escape_html(entry.service)}</strong>?</span> <div class="confirm-actions svelte-17lh9yz"><button class="btn btn-danger btn-sm">Confirm</button> <button class="btn btn-secondary btn-sm">Cancel</button></div></div>`);
691
- } else {
692
- $$renderer.push("<!--[-1-->");
693
- $$renderer.push(`<div class="detail-actions svelte-17lh9yz">`);
694
- if (isNotCreated()) {
695
- $$renderer.push("<!--[0-->");
696
- $$renderer.push(`<button class="btn btn-primary btn-sm"${attr("disabled", isAnyActionInFlight(), true)}>`);
697
- if (actionInFlight === "start") {
698
- $$renderer.push("<!--[0-->");
699
- Spinner($$renderer, { size: 12 });
700
- } else $$renderer.push("<!--[-1-->");
701
- $$renderer.push(`<!--]--> Start</button>`);
702
- } else {
703
- $$renderer.push("<!--[-1-->");
704
- $$renderer.push(`<button class="btn btn-secondary btn-sm"${attr("disabled", isAnyActionInFlight(), true)}>`);
705
- if (actionInFlight === "start") {
706
- $$renderer.push("<!--[0-->");
707
- Spinner($$renderer, { size: 12 });
708
- } else $$renderer.push("<!--[-1-->");
709
- $$renderer.push(`<!--]--> Start</button> <button class="btn btn-danger btn-sm"${attr("disabled", isAnyActionInFlight(), true)}>`);
710
- if (actionInFlight === "stop") {
711
- $$renderer.push("<!--[0-->");
712
- Spinner($$renderer, { size: 12 });
713
- } else $$renderer.push("<!--[-1-->");
714
- $$renderer.push(`<!--]--> Stop</button> <button class="btn btn-secondary btn-sm"${attr("disabled", isAnyActionInFlight(), true)}>`);
715
- if (actionInFlight === "restart") {
716
- $$renderer.push("<!--[0-->");
717
- Spinner($$renderer, { size: 12 });
718
- } else $$renderer.push("<!--[-1-->");
719
- $$renderer.push(`<!--]--> Restart</button>`);
720
- }
721
- $$renderer.push(`<!--]--></div>`);
722
- }
723
- $$renderer.push(`<!--]--></div>`);
724
- });
725
- }
726
- //#endregion
727
- //#region src/lib/components/admin/containers/ContainersEmptyState.svelte
728
- function ContainersEmptyState($$renderer, $$props) {
729
- $$renderer.component(($$renderer) => {
730
- let { loading, error, containerData} = $$props;
731
- $$renderer.push(`<div class="empty-state svelte-llpoy7">`);
732
- IconServer($$renderer, { size: 40 });
733
- $$renderer.push(`<!----> `);
734
- if (loading) {
735
- $$renderer.push("<!--[0-->");
736
- $$renderer.push(`<p>Loading container status...</p>`);
737
- } else if (error) {
738
- $$renderer.push("<!--[1-->");
739
- $$renderer.push(`<p class="text-danger svelte-llpoy7">${escape_html(error)}</p> <button class="btn btn-secondary btn-sm svelte-llpoy7"${attr("disabled", false, true)}>Try Again</button>`);
740
- } else if (containerData && !containerData.dockerAvailable) {
741
- $$renderer.push("<!--[2-->");
742
- $$renderer.push(`<p>Docker is not available on this host.</p> <p class="hint svelte-llpoy7">Ensure Docker is running and the admin service has access to the Docker socket.</p>`);
743
- } else {
744
- $$renderer.push("<!--[-1-->");
745
- $$renderer.push(`<p>No containers found. Services may not be installed yet.</p>`);
746
- }
747
- $$renderer.push(`<!--]--></div>`);
748
- });
749
- }
750
- //#endregion
751
- //#region src/lib/components/admin/containers/ContainersTab.svelte
752
- function ContainersTab($$renderer, $$props) {
753
- $$renderer.component(($$renderer) => {
754
- let { containerData, serviceEntries, loading, error, selectedContainerId, lastUpdated} = $$props;
755
- let hasEntries = derived(() => serviceEntries.length > 0);
756
- let rowState = {};
757
- {
758
- function actions($$renderer) {
759
- if (lastUpdated) {
760
- $$renderer.push("<!--[0-->");
761
- $$renderer.push(`<span class="last-updated svelte-fnc5b8">Updated ${escape_html(lastUpdated)}</span>`);
762
- } else $$renderer.push("<!--[-1-->");
763
- $$renderer.push(`<!--]--> <button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>`);
764
- $$renderer.push("<!--[-1-->");
765
- $$renderer.push(`<!--]--> Pull Images</button> <button class="btn btn-secondary btn-sm"${attr("disabled", loading || false, true)}>`);
766
- if (loading) {
767
- $$renderer.push("<!--[0-->");
768
- Spinner($$renderer, {});
769
- } else $$renderer.push("<!--[-1-->");
770
- $$renderer.push(`<!--]--> Refresh</button>`);
771
- }
772
- Panel($$renderer, {
773
- title: "Container Status",
774
- role: "tabpanel",
775
- actions,
776
- children: ($$renderer) => {
777
- $$renderer.push(`<div class="panel-body panel-body--flush">`);
778
- if (hasEntries()) {
779
- $$renderer.push("<!--[0-->");
780
- $$renderer.push(`<div class="container-table svelte-fnc5b8"><div class="container-table-header svelte-fnc5b8"><span class="ct-col ct-col--name">Container</span> <span class="ct-col ct-col--image">Image</span> <span class="ct-col ct-col--tag">Tag</span> <span class="ct-col ct-col--status">Status</span> <span class="ct-col ct-col--actions"></span></div> <!--[-->`);
781
- const each_array = ensure_array_like(serviceEntries);
782
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
783
- let entry = each_array[$$index];
784
- const selected = selectedContainerId === entry.id;
785
- ContainerRow($$renderer, {
786
- entry,
787
- selected});
788
- $$renderer.push(`<!----> `);
789
- if (selected) {
790
- $$renderer.push("<!--[0-->");
791
- ContainerDetail($$renderer, {
792
- entry,
793
- actionInFlight: rowState[entry.id]?.inFlight ?? null,
794
- confirmAction: rowState[entry.id]?.confirm ?? null,
795
- feedback: rowState[entry.id]?.feedback ?? null});
796
- } else $$renderer.push("<!--[-1-->");
797
- $$renderer.push(`<!--]-->`);
798
- }
799
- $$renderer.push(`<!--]--></div>`);
800
- } else {
801
- $$renderer.push("<!--[-1-->");
802
- ContainersEmptyState($$renderer, {
803
- loading,
804
- error,
805
- containerData});
806
- }
807
- $$renderer.push(`<!--]--></div>`);
808
- }});
809
- }
810
- });
811
- }
812
- require_dist();
813
- var SCHEDULE_PRESETS = [
814
- {
815
- id: "every-15-minutes",
816
- label: "Every 15 minutes",
817
- cron: "*/15 * * * *"
818
- },
819
- {
820
- id: "every-hour",
821
- label: "Every hour",
822
- cron: "0 * * * *"
823
- },
824
- {
825
- id: "daily",
826
- label: "Daily at…",
827
- cron: null
828
- },
829
- {
830
- id: "weekly",
831
- label: "Weekly on…",
832
- cron: null
833
- },
834
- {
835
- id: "monthly",
836
- label: "Monthly on day…",
837
- cron: null
838
- },
839
- {
840
- id: "advanced",
841
- label: "Advanced (cron)",
842
- cron: null
843
- }
844
- ];
845
- /** Map a cron expression to the best-matching preset id, or 'advanced'. */
846
- function cronToPresetId(cron) {
847
- const trimmed = cron.trim();
848
- if (trimmed === "*/15 * * * *") return "every-15-minutes";
849
- if (trimmed === "0 * * * *") return "every-hour";
850
- if (/^0 \d{1,2} \* \* \*$/.test(trimmed)) return "daily";
851
- if (/^0 \d{1,2} \* \* [0-6]$/.test(trimmed)) return "weekly";
852
- if (/^0 \d{1,2} ([1-9]|[12]\d|3[01]) \* \*$/.test(trimmed)) return "monthly";
853
- return "advanced";
854
- }
855
- var DOW_LABELS = [
856
- "Sunday",
857
- "Monday",
858
- "Tuesday",
859
- "Wednesday",
860
- "Thursday",
861
- "Friday",
862
- "Saturday"
863
- ];
864
- /** Human-readable summary of the resolved cron expression. */
865
- function describeCron(presetId, hour, dow, dom, rawCron) {
866
- const pad = (n) => String(n).padStart(2, "0");
867
- const timeStr = `${pad(hour)}:00`;
868
- switch (presetId) {
869
- case "every-15-minutes": return "Runs every 15 minutes";
870
- case "every-hour": return "Runs at the start of every hour";
871
- case "daily": return `Runs daily at ${timeStr}`;
872
- case "weekly": return `Runs every ${DOW_LABELS[dow] ?? "Sunday"} at ${timeStr}`;
873
- case "monthly": return `Runs on day ${dom} of every month at ${timeStr}`;
874
- case "advanced": {
875
- if (!rawCron.trim()) return "Enter a valid cron expression";
876
- const err = validateCron(rawCron);
877
- return err ? err : `Runs on schedule: ${rawCron.trim()}`;
878
- }
879
- default: return "";
880
- }
881
- }
882
- /** Returns an error message or null if valid. */
883
- function validateCron(cron) {
884
- const parts = cron.trim().split(/\s+/);
885
- if (parts.length !== 5) return "Must have exactly 5 fields: minute hour day month weekday";
886
- const ranges = [
887
- [0, 59],
888
- [0, 23],
889
- [1, 31],
890
- [1, 12],
891
- [0, 7]
892
- ];
893
- for (let i = 0; i < 5; i++) {
894
- const field = parts[i];
895
- if (field === "*" || /^\*\/\d+$/.test(field)) continue;
896
- const n = parseInt(field, 10);
897
- if (isNaN(n)) return `Field ${i + 1} is not a valid number or wildcard`;
898
- const [min, max] = ranges[i];
899
- if (n < min || n > max) return `Field ${i + 1} must be ${min}–${max}`;
900
- }
901
- return null;
902
- }
903
- /** Returns an error message or null if valid. */
904
- function validateTaskFilename(name) {
905
- if (!name.trim()) return "File name is required";
906
- if (!/^[a-z0-9][a-z0-9_-]*\.(yml|yaml|md)$/.test(name.trim())) return "Use lowercase letters, digits, hyphens, and underscores. Must end in .yml, .yaml, or .md";
907
- return null;
908
- }
909
- //#endregion
910
- //#region src/lib/components/admin/automations/TaskDrawer.svelte
911
- function TaskDrawer($$renderer, $$props) {
912
- $$renderer.component(($$renderer) => {
913
- /** null = new task; non-null = editing existing */
914
- let { open, draft, saving, saveError, onClose} = $$props;
915
- let isNew = derived(() => draft !== null && draft.fileName === "");
916
- let newFileName = "";
917
- let description = "";
918
- let enabled = false;
919
- let commandShell = "echo hello";
920
- let presetId = "daily";
921
- let hour = 9;
922
- let dow = 1;
923
- let dom = 1;
924
- let rawCron = "0 9 * * *";
925
- let advancedOpen = false;
926
- let fileNameError = derived(() => isNew() ? validateTaskFilename(newFileName) : null);
927
- let cronError = derived(() => presetId === "advanced" ? validateCron(rawCron) : null);
928
- let cronSummary = derived(() => describeCron(presetId, hour, dow, dom, rawCron));
929
- let canSave = derived(() => !saving && (isNew() ? fileNameError() === null && newFileName.trim() !== "" : true) && cronError() === null);
930
- function onPresetChange(e) {
931
- const val = e.currentTarget.value;
932
- presetId = val;
933
- advancedOpen = val === "advanced";
934
- }
935
- {
936
- function footer($$renderer) {
937
- $$renderer.push(`<button class="btn btn-secondary"${attr("disabled", saving, true)}>Cancel</button> <button class="btn btn-primary"${attr("disabled", !canSave(), true)}>`);
938
- if (saving) {
939
- $$renderer.push("<!--[0-->");
940
- Spinner($$renderer, {});
941
- } else $$renderer.push("<!--[-1-->");
942
- $$renderer.push(`<!--]--> ${escape_html(isNew() ? "Create" : "Save")}</button>`);
943
- }
944
- Drawer($$renderer, {
945
- open,
946
- title: isNew() ? "New automation" : `Edit — ${draft?.fileName ?? ""}`,
947
- onClose,
948
- width: "36rem",
949
- footer,
950
- children: ($$renderer) => {
951
- if (draft !== null) {
952
- $$renderer.push("<!--[0-->");
953
- $$renderer.push(`<form class="task-form svelte-m3wayn">`);
954
- if (isNew()) {
955
- $$renderer.push("<!--[0-->");
956
- $$renderer.push(`<div${attr_class("field-group svelte-m3wayn", void 0, { "field-group--error": fileNameError() !== null && false })}><label class="field-label svelte-m3wayn" for="tf-filename">File name</label> <input id="tf-filename" class="field-input svelte-m3wayn" type="text" placeholder="my-task.yml" autocomplete="off" spellcheck="false"${attr("value", newFileName)}${attr("disabled", saving, true)}/> `);
957
- if (fileNameError() && false);
958
- else {
959
- $$renderer.push("<!--[-1-->");
960
- $$renderer.push(`<span class="field-hint svelte-m3wayn">Lowercase letters, digits, hyphens. Must end in .yml, .yaml, or .md</span>`);
961
- }
962
- $$renderer.push(`<!--]--></div>`);
963
- } else $$renderer.push("<!--[-1-->");
964
- $$renderer.push(`<!--]--> <div class="field-group svelte-m3wayn"><label class="field-label svelte-m3wayn" for="tf-desc">Description</label> <input id="tf-desc" class="field-input svelte-m3wayn" type="text" placeholder="What does this task do?"${attr("value", description)}${attr("disabled", saving, true)}/></div> <label class="toggle-row svelte-m3wayn"><input type="checkbox"${attr("checked", enabled, true)}${attr("disabled", saving, true)} class="svelte-m3wayn"/> <span class="toggle-label svelte-m3wayn">Enabled</span> <span class="toggle-hint svelte-m3wayn">Disabled tasks are saved but not registered with cron</span></label> <fieldset class="schedule-fieldset svelte-m3wayn"${attr("disabled", saving, true)}><legend class="field-label svelte-m3wayn">Schedule</legend> <div class="schedule-row svelte-m3wayn">`);
965
- $$renderer.select({
966
- class: "field-select",
967
- value: presetId,
968
- onchange: onPresetChange
969
- }, ($$renderer) => {
970
- $$renderer.push(`<!--[-->`);
971
- const each_array = ensure_array_like(SCHEDULE_PRESETS);
972
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
973
- let p = each_array[$$index];
974
- $$renderer.option({ value: p.id }, ($$renderer) => {
975
- $$renderer.push(`${escape_html(p.label)}`);
976
- });
977
- }
978
- $$renderer.push(`<!--]-->`);
979
- }, "svelte-m3wayn");
980
- $$renderer.push(` `);
981
- if (presetId === "daily" || presetId === "weekly" || presetId === "monthly") {
982
- $$renderer.push("<!--[0-->");
983
- $$renderer.push(`<div class="schedule-params svelte-m3wayn">`);
984
- if (presetId === "weekly") {
985
- $$renderer.push("<!--[0-->");
986
- $$renderer.push(`<label class="param-label svelte-m3wayn" for="tf-dow">Day</label> `);
987
- $$renderer.select({
988
- id: "tf-dow",
989
- class: "field-select field-select--narrow",
990
- value: dow
991
- }, ($$renderer) => {
992
- $$renderer.push(`<!--[-->`);
993
- const each_array_1 = ensure_array_like(DOW_LABELS);
994
- for (let i = 0, $$length = each_array_1.length; i < $$length; i++) {
995
- let label = each_array_1[i];
996
- $$renderer.option({ value: i }, ($$renderer) => {
997
- $$renderer.push(`${escape_html(label)}`);
998
- });
999
- }
1000
- $$renderer.push(`<!--]-->`);
1001
- }, "svelte-m3wayn");
1002
- } else $$renderer.push("<!--[-1-->");
1003
- $$renderer.push(`<!--]--> `);
1004
- if (presetId === "monthly") {
1005
- $$renderer.push("<!--[0-->");
1006
- $$renderer.push(`<label class="param-label svelte-m3wayn" for="tf-dom">Day of month</label> <input id="tf-dom" class="field-input field-input--narrow svelte-m3wayn" type="number" min="1" max="31"${attr("value", dom)}/>`);
1007
- } else $$renderer.push("<!--[-1-->");
1008
- $$renderer.push(`<!--]--> <label class="param-label svelte-m3wayn" for="tf-hour">Hour (0–23)</label> <input id="tf-hour" class="field-input field-input--narrow svelte-m3wayn" type="number" min="0" max="23"${attr("value", hour)}/></div>`);
1009
- } else $$renderer.push("<!--[-1-->");
1010
- $$renderer.push(`<!--]--></div> <p${attr_class("schedule-summary svelte-m3wayn", void 0, { "schedule-summary--error": cronError() !== null })}>${escape_html(cronSummary())}</p> <details${attr("open", advancedOpen, true)} class="advanced-details svelte-m3wayn"><summary class="advanced-summary svelte-m3wayn">Advanced (raw cron)</summary> <div class="advanced-body svelte-m3wayn"><label class="field-label svelte-m3wayn" for="tf-rawcron">Cron expression</label> <input id="tf-rawcron"${attr_class("field-input field-mono svelte-m3wayn", void 0, { "field-input--error": cronError() !== null })} type="text" placeholder="* * * * *" spellcheck="false"${attr("value", rawCron)}${attr("disabled", saving, true)}/> `);
1011
- if (cronError()) {
1012
- $$renderer.push("<!--[0-->");
1013
- $$renderer.push(`<span class="field-error svelte-m3wayn" role="alert">${escape_html(cronError())}</span>`);
1014
- } else {
1015
- $$renderer.push("<!--[-1-->");
1016
- $$renderer.push(`<span class="field-hint svelte-m3wayn">5 fields: minute hour day-of-month month day-of-week</span>`);
1017
- }
1018
- $$renderer.push(`<!--]--></div></details></fieldset> <fieldset class="field-group svelte-m3wayn"${attr("disabled", saving, true)}><legend class="field-label svelte-m3wayn">Action type</legend> <div class="radio-row svelte-m3wayn"><label class="radio-label svelte-m3wayn"><input type="radio" name="tf-kind" value="command"${attr("checked", true, true)}/> Shell command</label> <label class="radio-label svelte-m3wayn"><input type="radio" name="tf-kind" value="prompt"${attr("checked", false, true)}/> Assistant prompt</label> <label class="radio-label svelte-m3wayn"><input type="radio" name="tf-kind" value="workflow"${attr("checked", false, true)}/> Workflow</label></div> `);
1019
- $$renderer.push("<!--[0-->");
1020
- $$renderer.push(`<div class="field-group svelte-m3wayn" style="margin-top: var(--s-sp-3)"><label class="field-label svelte-m3wayn" for="tf-cmd">Shell command</label> <input id="tf-cmd" class="field-input field-mono svelte-m3wayn" type="text" placeholder="echo hello" spellcheck="false"${attr("value", commandShell)}/> <span class="field-hint svelte-m3wayn">Runs as: <code class="svelte-m3wayn">sh -c "&lt;command>"</code></span></div>`);
1021
- $$renderer.push(`<!--]--></fieldset> `);
1022
- if (Object.keys(draft.unknownKeys).length > 0) {
1023
- $$renderer.push("<!--[0-->");
1024
- $$renderer.push(`<p class="unknown-keys-notice svelte-m3wayn">This task file contains additional fields
1025
- (<code class="svelte-m3wayn">${escape_html(Object.keys(draft.unknownKeys).join(", "))}</code>)
1026
- that are not editable here but will be preserved when saved.</p>`);
1027
- } else $$renderer.push("<!--[-1-->");
1028
- $$renderer.push(`<!--]--> `);
1029
- if (saveError) {
1030
- $$renderer.push("<!--[0-->");
1031
- $$renderer.push(`<p class="save-error svelte-m3wayn" role="alert">${escape_html(saveError)}</p>`);
1032
- } else $$renderer.push("<!--[-1-->");
1033
- $$renderer.push(`<!--]--></form>`);
1034
- } else $$renderer.push("<!--[-1-->");
1035
- $$renderer.push(`<!--]-->`);
1036
- }});
1037
- }
1038
- });
1039
- }
1040
- //#endregion
1041
- //#region src/lib/components/admin/automations/AutomationsTab.svelte
1042
- function AutomationsTab($$renderer, $$props) {
1043
- $$renderer.component(($$renderer) => {
1044
- let { data, loading, error} = $$props;
1045
- let hasAutomations = derived(() => data !== null && Array.isArray(data.automations) && data.automations.length > 0);
1046
- let drawerOpen = false;
1047
- let drawerDraft = null;
1048
- let drawerSaving = false;
1049
- let drawerError = "";
1050
- let runningTaskName = "";
1051
- let logDrawerOpen = false;
1052
- let logTaskName = "";
1053
- let logLines = [];
1054
- let logLoading = false;
1055
- let logError = "";
1056
- function closeDrawer() {
1057
- drawerOpen = false;
1058
- drawerDraft = null;
1059
- drawerError = "";
1060
- }
1061
- function closeLogDrawer() {
1062
- logDrawerOpen = false;
1063
- logTaskName = "";
1064
- logLines = [];
1065
- logLoading = false;
1066
- logError = "";
1067
- }
1068
- /** Map a cron expression to a friendly display string. */
1069
- function formatSchedule(cron) {
1070
- switch (cronToPresetId(cron)) {
1071
- case "every-15-minutes": return "Every 15 minutes";
1072
- case "every-hour": return "Every hour";
1073
- case "daily": {
1074
- const h = parseInt(cron.split(" ")[1] ?? "0", 10);
1075
- return `Daily at ${String(h).padStart(2, "0")}:00`;
1076
- }
1077
- case "weekly": {
1078
- const parts = cron.split(" ");
1079
- const h = parseInt(parts[1] ?? "0", 10);
1080
- return `Weekly (${[
1081
- "Sun",
1082
- "Mon",
1083
- "Tue",
1084
- "Wed",
1085
- "Thu",
1086
- "Fri",
1087
- "Sat"
1088
- ][parseInt(parts[4] ?? "0", 10)] ?? "Sun"}) at ${String(h).padStart(2, "0")}:00`;
1089
- }
1090
- case "monthly": {
1091
- const parts = cron.split(" ");
1092
- const h = parseInt(parts[1] ?? "0", 10);
1093
- return `Monthly (day ${parseInt(parts[2] ?? "1", 10)}) at ${String(h).padStart(2, "0")}:00`;
1094
- }
1095
- default: return cron;
1096
- }
1097
- }
1098
- function describeAction(automation) {
1099
- switch (automation.action.type) {
1100
- case "assistant": return automation.action.content?.trim() ? "Assistant prompt" : "Assistant task";
1101
- case "shell": return automation.action.content?.trim() ? automation.action.content.trim() : "Shell command";
1102
- case "api": return automation.action.path ? `${automation.action.method ?? "Call"} ${automation.action.path}` : "API request";
1103
- case "http": return automation.action.url ? `${automation.action.method ?? "Request"} ${automation.action.url}` : "HTTP request";
1104
- case "workflow": return "Workflow";
1105
- default: return automation.action.type;
1106
- }
1107
- }
1108
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="ph svelte-1xltcby"><div><h2 class="ph-title svelte-1xltcby">Routines</h2> <p class="ph-sub svelte-1xltcby">Scheduled tasks from knowledge/tasks/</p></div> <div class="ph-actions svelte-1xltcby"><button class="btn btn-primary btn-outline btn-sm"${attr("disabled", false, true)}>New task</button> <button class="btn btn-primary btn-outline btn-sm"${attr("disabled", loading || false, true)}>`);
1109
- if (loading) {
1110
- $$renderer.push("<!--[0-->");
1111
- Spinner($$renderer, {});
1112
- } else $$renderer.push("<!--[-1-->");
1113
- $$renderer.push(`<!--]--> Refresh</button></div></div> <div class="panel-body">`);
1114
- if (hasAutomations() && data) {
1115
- $$renderer.push("<!--[0-->");
1116
- $$renderer.push(`<div class="automation-list svelte-1xltcby"><!--[-->`);
1117
- const each_array = ensure_array_like(data.automations);
1118
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1119
- let automation = each_array[$$index];
1120
- $$renderer.push(`<div class="automation-card svelte-1xltcby"><div class="automation-row svelte-1xltcby"><div class="automation-main svelte-1xltcby"><div class="automation-name svelte-1xltcby">${escape_html(automation.name)} <span${attr_class("badge svelte-1xltcby", void 0, {
1121
- "badge-enabled": automation.enabled,
1122
- "badge-disabled": !automation.enabled
1123
- })}>${escape_html(automation.enabled ? "Enabled" : "Disabled")}</span> <span class="badge badge-type svelte-1xltcby">${escape_html(automation.action.type)}</span></div> `);
1124
- if (automation.description) {
1125
- $$renderer.push("<!--[0-->");
1126
- $$renderer.push(`<div class="automation-desc svelte-1xltcby">${escape_html(automation.description)}</div>`);
1127
- } else $$renderer.push("<!--[-1-->");
1128
- $$renderer.push(`<!--]--></div> <div class="automation-meta svelte-1xltcby"><span class="meta-item svelte-1xltcby">${escape_html(formatSchedule(automation.schedule))}</span> <span class="meta-item meta-item-action svelte-1xltcby">${escape_html(describeAction(automation))}</span></div></div> <div class="automation-footer svelte-1xltcby"><span class="automation-file svelte-1xltcby">${escape_html(automation.fileName)}</span> <div class="automation-actions svelte-1xltcby"><button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>`);
1129
- if (runningTaskName === automation.name) {
1130
- $$renderer.push("<!--[0-->");
1131
- Spinner($$renderer, {});
1132
- $$renderer.push(`<!----> Running...`);
1133
- } else {
1134
- $$renderer.push("<!--[-1-->");
1135
- $$renderer.push(`Run now`);
1136
- }
1137
- $$renderer.push(`<!--]--></button> <button class="btn btn-ghost btn-sm"${attr("disabled", logLoading || false, true)}>View latest log</button> <button class="btn btn-ghost btn-sm"${attr("disabled", false, true)}>Edit</button> <button class="btn btn-ghost btn-sm"${attr("disabled", false, true)}${attr("aria-label", `Delete ${stringify(automation.fileName)}`)}>Delete</button></div></div></div>`);
1138
- }
1139
- $$renderer.push(`<!--]--></div>`);
1140
- } else {
1141
- $$renderer.push("<!--[-1-->");
1142
- {
1143
- function icon($$renderer) {
1144
- $$renderer.push(`<svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>`);
1145
- }
1146
- EmptyState($$renderer, {
1147
- icon,
1148
- children: ($$renderer) => {
1149
- if (loading) {
1150
- $$renderer.push("<!--[0-->");
1151
- $$renderer.push(`<p>Loading automations...</p>`);
1152
- } else if (error) {
1153
- $$renderer.push("<!--[1-->");
1154
- $$renderer.push(`<p class="text-danger svelte-1xltcby">${escape_html(error)}</p> <button class="btn btn-secondary btn-sm empty-state-btn svelte-1xltcby">Try Again</button>`);
1155
- } else {
1156
- $$renderer.push("<!--[-1-->");
1157
- $$renderer.push(`<p>No automations configured.</p> <button class="btn btn-secondary btn-sm empty-state-btn svelte-1xltcby"${attr("disabled", false, true)}>Create your first task</button> <p class="empty-state-hint svelte-1xltcby">Or drop <code class="svelte-1xltcby">.md</code>/<code class="svelte-1xltcby">.yml</code> files into <code class="svelte-1xltcby">~/.openpalm/knowledge/tasks/</code>.</p>`);
1158
- }
1159
- $$renderer.push(`<!--]-->`);
1160
- }});
1161
- }
1162
- }
1163
- $$renderer.push(`<!--]--></div></div> <!---->`);
1164
- TaskDrawer($$renderer, {
1165
- open: drawerOpen,
1166
- draft: drawerDraft,
1167
- saving: drawerSaving,
1168
- saveError: drawerError,
1169
- onClose: closeDrawer});
1170
- $$renderer.push(`<!----> `);
1171
- Drawer($$renderer, {
1172
- open: logDrawerOpen,
1173
- title: logTaskName ? `Latest log — ${logTaskName}` : "Latest log",
1174
- onClose: closeLogDrawer,
1175
- width: "42rem",
1176
- children: ($$renderer) => {
1177
- $$renderer.push(`<div class="log-drawer-body svelte-1xltcby"><p class="log-drawer-copy svelte-1xltcby">Showing the most recent routine output available for <strong>${escape_html(logTaskName || "this task")}</strong>.</p> <div class="log-drawer-actions svelte-1xltcby"><button class="btn btn-secondary btn-sm"${attr("disabled", logLoading || !logTaskName, true)}>`);
1178
- if (logLoading) {
1179
- $$renderer.push("<!--[0-->");
1180
- Spinner($$renderer, {});
1181
- } else $$renderer.push("<!--[-1-->");
1182
- $$renderer.push(`<!--]--> Refresh log</button> <span class="log-drawer-hint svelte-1xltcby">Up to 200 recent lines</span></div> `);
1183
- if (logError) {
1184
- $$renderer.push("<!--[0-->");
1185
- $$renderer.push(`<div class="feedback feedback--error" role="alert"><span>${escape_html(logError)}</span></div>`);
1186
- } else $$renderer.push("<!--[-1-->");
1187
- $$renderer.push(`<!--]--> `);
1188
- if (logLoading && logLines.length === 0) {
1189
- $$renderer.push("<!--[0-->");
1190
- $$renderer.push(`<div class="loading-state">`);
1191
- Spinner($$renderer, {});
1192
- $$renderer.push(`<!----> <span>Loading the latest output…</span></div>`);
1193
- } else if (logLines.length > 0) {
1194
- $$renderer.push("<!--[1-->");
1195
- $$renderer.push(`<pre class="log-output svelte-1xltcby">${escape_html(logLines.join("\n"))}</pre>`);
1196
- } else if (!logError) {
1197
- $$renderer.push("<!--[2-->");
1198
- {
1199
- function icon($$renderer) {
1200
- $$renderer.push(`<svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line></svg>`);
1201
- }
1202
- EmptyState($$renderer, {
1203
- icon,
1204
- children: ($$renderer) => {
1205
- $$renderer.push(`<p>No recent output yet.</p> <p class="empty-state-hint svelte-1xltcby">Run the routine first, then open this drawer to see the output.</p>`);
1206
- }});
1207
- }
1208
- } else $$renderer.push("<!--[-1-->");
1209
- $$renderer.push(`<!--]--></div>`);
1210
- }});
1211
- $$renderer.push(`<!---->`);
1212
- });
1213
- }
1214
- //#endregion
1215
- //#region src/lib/components/providers/ProvidersPanel.svelte
1216
- function ProvidersPanel($$renderer, $$props) {
1217
- $$renderer.component(($$renderer) => {
1218
- let pageState = {
1219
- providers: []};
1220
- let loading = true;
1221
- let activeSubtab = "opencode";
1222
- const connected = derived(() => pageState.providers.filter((p) => p.connected));
1223
- let mainModelChoice = "";
1224
- let smallModelChoice = "";
1225
- let modelSaveError = null;
1226
- async function saveModel(target, value) {
1227
- modelSaveError = null;
1228
- try {
1229
- const res = await fetch("/admin/opencode/model", {
1230
- method: "POST",
1231
- headers: {
1232
- ...buildHeaders(),
1233
- "content-type": "application/json"
1234
- },
1235
- body: JSON.stringify({ [target]: value || null })
1236
- });
1237
- if (!res.ok) modelSaveError = (await res.json().catch(() => ({}))).message ?? `Save failed (${res.status})`;
1238
- } catch (err) {
1239
- modelSaveError = err instanceof Error ? err.message : "Request failed.";
1240
- }
1241
- }
1242
- let disconnectingId = null;
1243
- const BADGE_LABEL = {
1244
- env: "env",
1245
- api: "api key",
1246
- oauth: "oauth",
1247
- config: "config",
1248
- custom: "custom"
1249
- };
1250
- function authBadge(p) {
1251
- return p.credentialType ? BADGE_LABEL[p.credentialType] : "";
1252
- }
1253
- const assistantCliTabs = [
1254
- {
1255
- id: "codex",
1256
- label: "Codex"
1257
- },
1258
- {
1259
- id: "claude",
1260
- label: "Claude Code"
1261
- },
1262
- {
1263
- id: "copilot",
1264
- label: "Copilot"
1265
- },
1266
- {
1267
- id: "pi",
1268
- label: "Pi"
1269
- }
1270
- ];
1271
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Connections</h2> <p class="panel-subtitle">AI providers · model defaults</p></div> <div class="panel-header-actions"><button type="button" class="btn btn-secondary btn-sm"${attr("disabled", true, true)}${attr("title", "No host OpenCode installation detected")}>Import from host</button> <button type="button" class="btn btn-primary btn-sm">Add provider</button> <button class="btn btn-secondary btn-sm"${attr("disabled", loading, true)}>`);
1272
- {
1273
- $$renderer.push("<!--[0-->");
1274
- Spinner($$renderer, {});
1275
- }
1276
- $$renderer.push(`<!--]--> Refresh</button></div></div> `);
1277
- $$renderer.push("<!--[-1-->");
1278
- $$renderer.push(`<!--]--> <div class="panel-body panel-body--flush"><div class="connections-subtabs svelte-19zt4ct"><button type="button"${attr_class("svelte-19zt4ct", void 0, { "active": true })}>OpenCode</button> <!--[-->`);
1279
- const each_array = ensure_array_like(assistantCliTabs);
1280
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1281
- let tab = each_array[$$index];
1282
- $$renderer.push(`<button type="button"${attr_class("svelte-19zt4ct", void 0, { "active": activeSubtab === tab.id })}>${escape_html(tab.label)}</button>`);
1283
- }
1284
- $$renderer.push(`<!--]--></div> `);
1285
- $$renderer.push("<!--[0-->");
1286
- if (pageState.providers.length === 0) {
1287
- $$renderer.push("<!--[1-->");
1288
- $$renderer.push(`<div class="loading-state">`);
1289
- Spinner($$renderer, {});
1290
- $$renderer.push(`<!----> <span>Loading providers…</span></div>`);
1291
- } else if (connected().length === 0) {
1292
- $$renderer.push("<!--[2-->");
1293
- {
1294
- function icon($$renderer) {
1295
- IconLock($$renderer, { size: 40 });
1296
- }
1297
- EmptyState($$renderer, {
1298
- icon,
1299
- children: ($$renderer) => {
1300
- $$renderer.push(`<p>No providers connected yet.</p> <p class="empty-hint svelte-19zt4ct">Click <strong>Add provider</strong> above to sign in to one.</p>`);
1301
- }});
1302
- }
1303
- } else {
1304
- $$renderer.push("<!--[-1-->");
1305
- $$renderer.push(`<div class="model-defaults svelte-19zt4ct"><div class="model-field svelte-19zt4ct"><label class="form-label" for="default-model">Default model</label> `);
1306
- $$renderer.select({
1307
- id: "default-model",
1308
- class: "form-input",
1309
- value: mainModelChoice,
1310
- onchange: (e) => void saveModel("model", e.currentTarget.value)
1311
- }, ($$renderer) => {
1312
- $$renderer.option({ value: "" }, ($$renderer) => {
1313
- $$renderer.push(`— OpenCode default —`);
1314
- });
1315
- $$renderer.push(`<!--[-->`);
1316
- const each_array_1 = ensure_array_like(connected());
1317
- for (let $$index_2 = 0, $$length = each_array_1.length; $$index_2 < $$length; $$index_2++) {
1318
- let p = each_array_1[$$index_2];
1319
- if (p.models.length > 0) {
1320
- $$renderer.push("<!--[0-->");
1321
- $$renderer.push(`<optgroup${attr("label", p.name)}><!--[-->`);
1322
- const each_array_2 = ensure_array_like(p.models);
1323
- for (let $$index_1 = 0, $$length = each_array_2.length; $$index_1 < $$length; $$index_1++) {
1324
- let m = each_array_2[$$index_1];
1325
- $$renderer.option({ value: `${stringify(p.id)}/${stringify(m.id)}` }, ($$renderer) => {
1326
- $$renderer.push(`${escape_html(m.name || m.id)}`);
1327
- });
1328
- }
1329
- $$renderer.push(`<!--]--></optgroup>`);
1330
- } else $$renderer.push("<!--[-1-->");
1331
- $$renderer.push(`<!--]-->`);
1332
- }
1333
- $$renderer.push(`<!--]-->`);
1334
- });
1335
- $$renderer.push(`</div> <div class="model-field svelte-19zt4ct"><label class="form-label" for="small-model">Small model</label> `);
1336
- $$renderer.select({
1337
- id: "small-model",
1338
- class: "form-input",
1339
- value: smallModelChoice,
1340
- onchange: (e) => void saveModel("small_model", e.currentTarget.value)
1341
- }, ($$renderer) => {
1342
- $$renderer.option({ value: "" }, ($$renderer) => {
1343
- $$renderer.push(`— OpenCode default —`);
1344
- });
1345
- $$renderer.push(`<!--[-->`);
1346
- const each_array_3 = ensure_array_like(connected());
1347
- for (let $$index_4 = 0, $$length = each_array_3.length; $$index_4 < $$length; $$index_4++) {
1348
- let p = each_array_3[$$index_4];
1349
- if (p.models.length > 0) {
1350
- $$renderer.push("<!--[0-->");
1351
- $$renderer.push(`<optgroup${attr("label", p.name)}><!--[-->`);
1352
- const each_array_4 = ensure_array_like(p.models);
1353
- for (let $$index_3 = 0, $$length = each_array_4.length; $$index_3 < $$length; $$index_3++) {
1354
- let m = each_array_4[$$index_3];
1355
- $$renderer.option({ value: `${stringify(p.id)}/${stringify(m.id)}` }, ($$renderer) => {
1356
- $$renderer.push(`${escape_html(m.name || m.id)}`);
1357
- });
1358
- }
1359
- $$renderer.push(`<!--]--></optgroup>`);
1360
- } else $$renderer.push("<!--[-1-->");
1361
- $$renderer.push(`<!--]-->`);
1362
- }
1363
- $$renderer.push(`<!--]-->`);
1364
- });
1365
- $$renderer.push(`</div> `);
1366
- if (modelSaveError) {
1367
- $$renderer.push("<!--[0-->");
1368
- $$renderer.push(`<p class="model-error svelte-19zt4ct">${escape_html(modelSaveError)}</p>`);
1369
- } else $$renderer.push("<!--[-1-->");
1370
- $$renderer.push(`<!--]--></div> <div class="providers-container svelte-19zt4ct"><!--[-->`);
1371
- const each_array_5 = ensure_array_like(connected());
1372
- for (let $$index_5 = 0, $$length = each_array_5.length; $$index_5 < $$length; $$index_5++) {
1373
- let p = each_array_5[$$index_5];
1374
- $$renderer.push(`<div class="provider-row svelte-19zt4ct"><div class="provider-id svelte-19zt4ct"><div class="svelte-19zt4ct"><span class="provider-name svelte-19zt4ct">${escape_html(p.name)}</span> <span class="provider-desc svelte-19zt4ct">${escape_html(authBadge(p))}</span></div></div> <button class="btn btn-outline btn-sm"${attr("disabled", disconnectingId === p.id, true)}>`);
1375
- if (disconnectingId === p.id) {
1376
- $$renderer.push("<!--[0-->");
1377
- Spinner($$renderer, {});
1378
- } else $$renderer.push("<!--[-1-->");
1379
- $$renderer.push(`<!--]--> Disconnect</button></div>`);
1380
- }
1381
- $$renderer.push(`<!--]--></div>`);
1382
- }
1383
- $$renderer.push(`<!--]-->`);
1384
- $$renderer.push(`<!--]--></div></div> `);
1385
- $$renderer.push("<!--[-1-->");
1386
- $$renderer.push(`<!--]--> `);
1387
- $$renderer.push("<!--[-1-->");
1388
- $$renderer.push(`<!--]--> `);
1389
- $$renderer.push("<!--[-1-->");
1390
- $$renderer.push(`<!--]--> `);
1391
- $$renderer.push("<!--[-1-->");
1392
- $$renderer.push(`<!--]-->`);
1393
- });
1394
- }
1395
- //#endregion
1396
- //#region src/lib/components/admin/logs/LogsTab.svelte
1397
- function LogsTab($$renderer, $$props) {
1398
- $$renderer.component(($$renderer) => {
1399
- let { services} = $$props;
1400
- let logs = "";
1401
- let logsLoaded = false;
1402
- let loading = false;
1403
- let error = "";
1404
- let selectedService = "";
1405
- let tailLines = 100;
1406
- let autoScroll = true;
1407
- async function loadLogs() {
1408
- loading = true;
1409
- error = "";
1410
- try {
1411
- {
1412
- const result = await fetchServiceLogs({
1413
- service: void 0,
1414
- tail: tailLines
1415
- });
1416
- if (result.ok) {
1417
- logs = result.logs;
1418
- logsLoaded = true;
1419
- } else error = result.error ?? "Failed to fetch logs.";
1420
- }
1421
- } catch (e) {
1422
- error = e instanceof Error ? e.message : "Failed to fetch logs.";
1423
- } finally {
1424
- loading = false;
1425
- }
1426
- }
1427
- {
1428
- function actions($$renderer) {
1429
- $$renderer.push(`<button class="btn btn-secondary btn-sm"${attr("disabled", !logs, true)}>${escape_html("Copy")}</button> <button class="btn btn-secondary btn-sm"${attr("disabled", loading || false, true)}>`);
1430
- if (loading) {
1431
- $$renderer.push("<!--[0-->");
1432
- Spinner($$renderer, {});
1433
- } else $$renderer.push("<!--[-1-->");
1434
- $$renderer.push(`<!--]--> Refresh</button>`);
1435
- }
1436
- Panel($$renderer, {
1437
- title: "Journal",
1438
- role: "tabpanel",
1439
- actions,
1440
- children: ($$renderer) => {
1441
- $$renderer.push(`<div class="controls svelte-coqj2u"><div class="control-group control-group--source svelte-coqj2u"><span class="control-label svelte-coqj2u">Source</span> <div class="source-switch svelte-coqj2u" role="tablist" aria-label="Journal source"><button${attr_class("source-pill svelte-coqj2u", void 0, { "source-pill--active": true })} type="button" role="tab"${attr("aria-selected", true)}>Service logs</button> <button${attr_class("source-pill svelte-coqj2u", void 0, { "source-pill--active": false })} type="button" role="tab"${attr("aria-selected", false)}>Routine logs</button></div></div> `);
1442
- $$renderer.push("<!--[0-->");
1443
- $$renderer.push(`<div class="control-group svelte-coqj2u"><label for="log-service" class="control-label svelte-coqj2u">Service</label> `);
1444
- $$renderer.select({
1445
- id: "log-service",
1446
- class: "control-input",
1447
- value: selectedService,
1448
- onchange: () => void loadLogs()
1449
- }, ($$renderer) => {
1450
- $$renderer.option({ value: "" }, ($$renderer) => {
1451
- $$renderer.push(`All services`);
1452
- });
1453
- $$renderer.push(`<!--[-->`);
1454
- const each_array = ensure_array_like(services);
1455
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1456
- let svc = each_array[$$index];
1457
- $$renderer.option({ value: svc }, ($$renderer) => {
1458
- $$renderer.push(`${escape_html(svc)}`);
1459
- });
1460
- }
1461
- $$renderer.push(`<!--]-->`);
1462
- }, "svelte-coqj2u");
1463
- $$renderer.push(`</div>`);
1464
- $$renderer.push(`<!--]--> <div class="control-group svelte-coqj2u"><label for="log-tail" class="control-label svelte-coqj2u">Recent lines</label> `);
1465
- $$renderer.select({
1466
- id: "log-tail",
1467
- class: "control-input",
1468
- value: tailLines,
1469
- onchange: () => void loadLogs()
1470
- }, ($$renderer) => {
1471
- $$renderer.option({ value: 50 }, ($$renderer) => {
1472
- $$renderer.push(`50`);
1473
- });
1474
- $$renderer.option({ value: 100 }, ($$renderer) => {
1475
- $$renderer.push(`100`);
1476
- });
1477
- $$renderer.option({ value: 250 }, ($$renderer) => {
1478
- $$renderer.push(`250`);
1479
- });
1480
- $$renderer.option({ value: 500 }, ($$renderer) => {
1481
- $$renderer.push(`500`);
1482
- });
1483
- $$renderer.option({ value: 1e3 }, ($$renderer) => {
1484
- $$renderer.push(`1000`);
1485
- });
1486
- }, "svelte-coqj2u");
1487
- $$renderer.push(`</div> `);
1488
- $$renderer.push("<!--[0-->");
1489
- $$renderer.push(`<div class="control-group control-group--toggle svelte-coqj2u"><label class="toggle-label svelte-coqj2u"><input type="checkbox"${attr("checked", autoScroll, true)}/> <span>Auto-scroll</span></label></div>`);
1490
- $$renderer.push(`<!--]--> <button class="btn btn-primary btn-sm"${attr("disabled", loading || false, true)}>`);
1491
- if (loading) {
1492
- $$renderer.push("<!--[0-->");
1493
- Spinner($$renderer, {});
1494
- } else $$renderer.push("<!--[-1-->");
1495
- $$renderer.push(`<!--]--> ${escape_html("Load service logs")}</button></div> <div class="panel-body panel-body--flush">`);
1496
- if (error) {
1497
- $$renderer.push("<!--[0-->");
1498
- $$renderer.push(`<div class="error-banner svelte-coqj2u"><span>${escape_html(error)}</span></div>`);
1499
- } else $$renderer.push("<!--[-1-->");
1500
- $$renderer.push(`<!--]--> `);
1501
- if (logs) {
1502
- $$renderer.push("<!--[0-->");
1503
- $$renderer.push(`<pre class="log-output svelte-coqj2u">${escape_html(logs)}</pre>`);
1504
- } else if (!loading) {
1505
- $$renderer.push("<!--[1-->");
1506
- {
1507
- function icon($$renderer) {
1508
- $$renderer.push(`<svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line></svg>`);
1509
- }
1510
- EmptyState($$renderer, {
1511
- icon,
1512
- children: ($$renderer) => {
1513
- if (logsLoaded) {
1514
- $$renderer.push("<!--[0-->");
1515
- $$renderer.push("<!--[0-->");
1516
- $$renderer.push(`<p>No log output — the container may not be running or has no recent output.</p>`);
1517
- $$renderer.push(`<!--]-->`);
1518
- } else {
1519
- $$renderer.push("<!--[-1-->");
1520
- $$renderer.push("<!--[0-->");
1521
- $$renderer.push(`<p>Select a service and click "Load service logs" to view container output.</p>`);
1522
- $$renderer.push(`<!--]-->`);
1523
- }
1524
- $$renderer.push(`<!--]-->`);
1525
- }});
1526
- }
1527
- } else $$renderer.push("<!--[-1-->");
1528
- $$renderer.push(`<!--]--></div>`);
1529
- }});
1530
- }
1531
- });
1532
- }
1533
- //#endregion
1534
- //#region src/lib/components/admin/secrets/SecretsTab.svelte
1535
- function SecretsTab($$renderer, $$props) {
1536
- $$renderer.component(($$renderer) => {
1537
- let busy = false;
1538
- let files = [];
1539
- let selected = null;
1540
- let newName = "";
1541
- function fmtSize(n) {
1542
- if (n < 1024) return `${n} B`;
1543
- return `${(n / 1024).toFixed(1)} KB`;
1544
- }
1545
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Secrets</h2> <p class="panel-subtitle">Encrypted key files under knowledge/secrets/</p></div> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>`);
1546
- $$renderer.push("<!--[-1-->");
1547
- $$renderer.push(`<!--]--> Refresh</button></div></div> `);
1548
- $$renderer.push("<!--[-1-->");
1549
- $$renderer.push(`<!--]--> <div class="secrets-layout svelte-epscb2"><div class="secrets-list svelte-epscb2">`);
1550
- if (files.length === 0 && true) {
1551
- $$renderer.push("<!--[0-->");
1552
- $$renderer.push(`<p class="empty-note svelte-epscb2">No secret files found.</p>`);
1553
- } else $$renderer.push("<!--[-1-->");
1554
- $$renderer.push(`<!--]--> <!--[-->`);
1555
- const each_array = ensure_array_like(files);
1556
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1557
- let f = each_array[$$index];
1558
- $$renderer.push(`<div${attr_class(`secret-row ${selected === f.name ? "active" : ""}`, "svelte-epscb2")}><button class="secret-name svelte-epscb2"${attr("disabled", busy, true)}${attr("aria-label", `Edit ${stringify(f.name)}`)}><span class="mono svelte-epscb2">${escape_html(f.name)}</span> <span class="secret-size svelte-epscb2">${escape_html(fmtSize(f.size))}</span></button> <button class="btn btn-ghost btn-sm"${attr("disabled", busy, true)}${attr("aria-label", `Delete ${stringify(f.name)}`)}>✕</button></div>`);
1559
- }
1560
- $$renderer.push(`<!--]--> <div class="new-secret svelte-epscb2"><label class="new-secret-label svelte-epscb2" for="new-secret-name">New secret file</label> <div class="new-secret-row svelte-epscb2"><input id="new-secret-name" class="control-input" type="text" spellcheck="false" placeholder="new-file-name"${attr("value", newName)}${attr("disabled", busy, true)}/> <button class="btn btn-secondary btn-sm"${attr("disabled", !newName.trim(), true)}>Add</button></div></div></div> <div class="secrets-editor svelte-epscb2">`);
1561
- $$renderer.push("<!--[-1-->");
1562
- $$renderer.push(`<div class="editor-empty svelte-epscb2">`);
1563
- IconLock($$renderer, { size: 24 });
1564
- $$renderer.push(`<!----> <p class="svelte-epscb2">Select a file to view or edit its contents.</p> <button class="btn btn-secondary btn-sm">New secret</button></div>`);
1565
- $$renderer.push(`<!--]--></div></div></div>`);
1566
- });
1567
- }
1568
- //#endregion
1569
- //#region src/lib/components/admin/assistant/AssistantTab.svelte
1570
- function AssistantTab($$renderer, $$props) {
1571
- $$renderer.component(($$renderer) => {
1572
- let saving = false;
1573
- let projectName = "openpalm";
1574
- let lanExposureEnabled = false;
1575
- let personaPath = "config/assistant/persona.md";
1576
- let stackEnvPath = "knowledge/env/stack.env";
1577
- let personaContent = "";
1578
- let isDirty = derived(() => false);
1579
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Assistant</h2> <p class="panel-subtitle">Persona · stack config</p></div> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>`);
1580
- $$renderer.push("<!--[-1-->");
1581
- $$renderer.push(`<!--]--> Refresh</button> `);
1582
- if (isDirty()) {
1583
- $$renderer.push("<!--[0-->");
1584
- $$renderer.push(`<span class="unsaved-hint svelte-obkjlq" aria-live="polite">Unsaved changes</span>`);
1585
- } else $$renderer.push("<!--[-1-->");
1586
- $$renderer.push(`<!--]--> <button class="btn btn-primary btn-sm"${attr("disabled", !isDirty(), true)}>`);
1587
- $$renderer.push("<!--[-1-->");
1588
- $$renderer.push(`<!--]--> Save</button></div></div> `);
1589
- $$renderer.push("<!--[-1-->");
1590
- $$renderer.push(`<!--]--> <div class="settings-grid svelte-obkjlq"><section class="settings-card svelte-obkjlq"><h3 class="svelte-obkjlq">Compose Project Name</h3> <p class="section-note svelte-obkjlq">This writes <code>OP_PROJECT_NAME</code> in <code>${escape_html(stackEnvPath)}</code>. If unset, OpenPalm defaults to <code>openpalm</code>.</p> <label class="field svelte-obkjlq" for="project-name"><span>Project name</span> <input id="project-name" class="control-input mono svelte-obkjlq" type="text" spellcheck="false" placeholder="openpalm"${attr("value", projectName)}${attr("disabled", saving, true)}/></label> <p class="field-hint svelte-obkjlq">Lowercase letters, numbers, dashes, and underscores only. This affects Docker Compose naming and collision detection.</p></section> <section class="settings-card svelte-obkjlq"><h3 class="svelte-obkjlq">LAN Exposure</h3> <p class="section-note svelte-obkjlq">This writes <code>OP_ASSISTANT_BIND_ADDRESS</code> in <code>${escape_html(stackEnvPath)}</code>.</p> <label class="field-inline svelte-obkjlq" for="assistant-lan-exposure"><input id="assistant-lan-exposure" type="checkbox"${attr("checked", lanExposureEnabled, true)}${attr("disabled", saving, true)} class="svelte-obkjlq"/> <span>Expose the assistant OpenCode server on the host LAN</span></label> <p class="field-hint svelte-obkjlq">Off keeps the host bind on <code>127.0.0.1</code>. On switches it to <code>0.0.0.0</code> so other devices on your LAN can reach the host port.</p></section> <section class="settings-card svelte-obkjlq"><h3 class="svelte-obkjlq">Persona</h3> <p class="section-note svelte-obkjlq">Edit the assistant persona markdown mounted into the assistant OpenCode instance.</p> <div class="path-chip svelte-obkjlq">${escape_html(personaPath)}</div> <textarea class="control-input persona-editor mono svelte-obkjlq" rows="20" spellcheck="false"${attr("disabled", saving, true)}>`);
1591
- const $$body = escape_html(personaContent);
1592
- if ($$body) $$renderer.push(`${$$body}`);
1593
- $$renderer.push(`</textarea></section></div></div>`);
1594
- });
1595
- }
1596
- //#endregion
1597
- //#region src/lib/components/chat/ToolStrip.svelte
1598
- function ToolStrip($$renderer, $$props) {
1599
- $$renderer.component(($$renderer) => {
1600
- let { items, muted = false, bordered = false, ariaLabel = "Assistant tool activity" } = $$props;
1601
- let selectedToolId = null;
1602
- if (items.length > 0) {
1603
- $$renderer.push("<!--[0-->");
1604
- $$renderer.push(`<div${attr_class("tool-strip svelte-icksz3", void 0, {
1605
- "tool-strip-muted": muted,
1606
- "tool-strip-bordered": bordered
1607
- })}${attr("aria-label", ariaLabel)}><!--[-->`);
1608
- const each_array = ensure_array_like(items);
1609
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1610
- let tool = each_array[$$index];
1611
- const toolType = toolIconType(tool.tool, tool.status);
1612
- $$renderer.push(`<button${attr_class("tool-icon-btn svelte-icksz3", void 0, { "selected": selectedToolId === tool.id })} type="button"${attr("aria-label", toolAriaLabel(tool))}${attr("title", toolAriaLabel(tool))}>`);
1613
- if (toolType === "alert") {
1614
- $$renderer.push("<!--[0-->");
1615
- $$renderer.push(`<span class="tool-icon svelte-icksz3" aria-hidden="true">`);
1616
- IconAlert($$renderer, { size: 13 });
1617
- $$renderer.push(`<!----></span>`);
1618
- } else if (toolType === "done-circle") {
1619
- $$renderer.push("<!--[1-->");
1620
- $$renderer.push(`<span class="tool-icon svelte-icksz3" aria-hidden="true">`);
1621
- IconDoneCircle($$renderer, { size: 13 });
1622
- $$renderer.push(`<!----></span>`);
1623
- } else if (toolType === "refresh") {
1624
- $$renderer.push("<!--[2-->");
1625
- $$renderer.push(`<span class="tool-icon svelte-icksz3" aria-hidden="true">`);
1626
- IconRefresh($$renderer, { size: 13 });
1627
- $$renderer.push(`<!----></span>`);
1628
- } else if (toolType === "terminal") {
1629
- $$renderer.push("<!--[3-->");
1630
- $$renderer.push(`<span class="tool-icon svelte-icksz3" aria-hidden="true">`);
1631
- IconTerminal($$renderer, { size: 13 });
1632
- $$renderer.push(`<!----></span>`);
1633
- } else if (toolType === "search") {
1634
- $$renderer.push("<!--[4-->");
1635
- $$renderer.push(`<span class="tool-icon svelte-icksz3" aria-hidden="true">`);
1636
- IconSearch($$renderer, { size: 13 });
1637
- $$renderer.push(`<!----></span>`);
1638
- } else if (toolType === "file") {
1639
- $$renderer.push("<!--[5-->");
1640
- $$renderer.push(`<span class="tool-icon svelte-icksz3" aria-hidden="true">`);
1641
- IconFile($$renderer, { size: 13 });
1642
- $$renderer.push(`<!----></span>`);
1643
- } else if (toolType === "edit") {
1644
- $$renderer.push("<!--[6-->");
1645
- $$renderer.push(`<span class="tool-icon svelte-icksz3" aria-hidden="true">`);
1646
- IconEdit($$renderer, { size: 13 });
1647
- $$renderer.push(`<!----></span>`);
1648
- } else if (toolType === "link") {
1649
- $$renderer.push("<!--[7-->");
1650
- $$renderer.push(`<span class="tool-icon svelte-icksz3" aria-hidden="true">`);
1651
- IconLink($$renderer, { size: 13 });
1652
- $$renderer.push(`<!----></span>`);
1653
- } else if (toolType === "agent") {
1654
- $$renderer.push("<!--[8-->");
1655
- $$renderer.push(`<span class="tool-icon svelte-icksz3" aria-hidden="true">`);
1656
- IconAgent($$renderer, { size: 13 });
1657
- $$renderer.push(`<!----></span>`);
1658
- } else if (toolType === "done") {
1659
- $$renderer.push("<!--[9-->");
1660
- $$renderer.push(`<span class="tool-icon svelte-icksz3" aria-hidden="true">`);
1661
- IconDone($$renderer, { size: 13 });
1662
- $$renderer.push(`<!----></span>`);
1663
- } else {
1664
- $$renderer.push("<!--[-1-->");
1665
- $$renderer.push(`<span class="tool-icon svelte-icksz3" aria-hidden="true">`);
1666
- IconClock($$renderer, { size: 13 });
1667
- $$renderer.push(`<!----></span>`);
1668
- }
1669
- $$renderer.push(`<!--]--></button>`);
1670
- }
1671
- $$renderer.push(`<!--]--></div>`);
1672
- } else $$renderer.push("<!--[-1-->");
1673
- $$renderer.push(`<!--]--> `);
1674
- $$renderer.push("<!--[-1-->");
1675
- $$renderer.push(`<!--]-->`);
1676
- });
1677
- }
1678
- //#endregion
1679
- //#region src/lib/components/admin/activity/ActivityTab.svelte
1680
- function ActivityTab($$renderer, $$props) {
1681
- $$renderer.component(($$renderer) => {
1682
- let loading = false;
1683
- let messagesLoading = false;
1684
- let streamState = "connecting";
1685
- let sessions = [];
1686
- let selectedSessionId = null;
1687
- let selectedMessages = [];
1688
- let attentionFeed = [];
1689
- let eventFeed = [];
1690
- let eventCounts = {};
1691
- let sessionEventCounts = {};
1692
- let minuteTimestamps = [];
1693
- let lastEventAt = null;
1694
- let clock = Date.now();
1695
- function fmtTime(timestamp) {
1696
- if (!timestamp) return "n/a";
1697
- const d = new Date(timestamp);
1698
- const today = /* @__PURE__ */ new Date();
1699
- if (d.getFullYear() === today.getFullYear() && d.getMonth() === today.getMonth() && d.getDate() === today.getDate()) return d.toLocaleTimeString([], {
1700
- hour: "2-digit",
1701
- minute: "2-digit",
1702
- second: "2-digit"
1703
- });
1704
- return d.toLocaleString([], {
1705
- month: "short",
1706
- day: "numeric",
1707
- hour: "2-digit",
1708
- minute: "2-digit"
1709
- });
1710
- }
1711
- function fmtDateTime(timestamp) {
1712
- return new Date(timestamp).toLocaleString([], {
1713
- month: "short",
1714
- day: "numeric",
1715
- hour: "2-digit",
1716
- minute: "2-digit",
1717
- second: "2-digit"
1718
- });
1719
- }
1720
- let selectedSession = derived(() => sessions.find((session) => session.id === selectedSessionId) ?? null);
1721
- let waitingItems = derived(() => attentionFeed.filter((item) => item.kind === "permission" || item.kind === "question").length);
1722
- let failingItems = derived(() => attentionFeed.filter((item) => item.severity === "high").length);
1723
- let activeSessions = derived(() => sessions.filter((session) => clock - session.updatedAt <= 5 * 6e4).length);
1724
- let latestAttention = derived(() => attentionFeed.slice(0, 10));
1725
- let eventsLastMinute = derived(() => minuteTimestamps.filter((timestamp) => clock - timestamp <= 6e4).length);
1726
- let eventsLastFiveMinutes = derived(() => minuteTimestamps.filter((timestamp) => clock - timestamp <= 5 * 6e4).length);
1727
- let eventTypeRows = derived(() => Object.entries(eventCounts).sort((left, right) => right[1] - left[1]).slice(0, 8));
1728
- let hotSessions = derived(() => sessions.map((session) => ({
1729
- ...session,
1730
- events: sessionEventCounts[session.id] ?? 0
1731
- })).sort((left, right) => right.events - left.events || right.updatedAt - left.updatedAt).slice(0, 8));
1732
- onDestroy(() => {});
1733
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Activity</h2> <p class="panel-subtitle">Operator telemetry · live</p></div> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"${attr("disabled", loading, true)}>`);
1734
- $$renderer.push("<!--[-1-->");
1735
- $$renderer.push(`<!--]--> Refresh</button></div></div> `);
1736
- $$renderer.push("<!--[-1-->");
1737
- $$renderer.push(`<!--]--> `);
1738
- $$renderer.push("<!--[-1-->");
1739
- $$renderer.push(`<!--]--> <div class="endpoint-banner svelte-z6w8je"><div><div class="endpoint-label svelte-z6w8je">Endpoint</div> <div class="endpoint-value svelte-z6w8je">${escape_html(endpointsService.active?.label ?? "Active assistant endpoint")}</div> <div class="endpoint-url mono svelte-z6w8je">${escape_html(endpointsService.active?.url ?? "Loading endpoint URL...")}</div></div> <div${attr_class(`stream-badge stream-badge--${stringify(streamState)}`, "svelte-z6w8je")}>${escape_html(streamState)}</div></div> <div class="summary-grid svelte-z6w8je"><div class="summary-card svelte-z6w8je"><span class="summary-label svelte-z6w8je">Events / minute</span> <strong class="summary-value svelte-z6w8je">${escape_html(eventsLastMinute())}</strong> <small class="svelte-z6w8je">${escape_html(eventsLastFiveMinutes())} events seen in the last 5 minutes</small></div> <div class="summary-card svelte-z6w8je"><span class="summary-label svelte-z6w8je">Sessions</span> <strong class="summary-value svelte-z6w8je">${escape_html(sessions.length)}</strong> <small class="svelte-z6w8je">${escape_html(activeSessions())} active in the last 5 minutes</small></div> <div class="summary-card summary-card--warning svelte-z6w8je"><span class="summary-label svelte-z6w8je">Waiting on people</span> <strong class="summary-value svelte-z6w8je">${escape_html(waitingItems())}</strong> <small class="svelte-z6w8je">Permissions and answers that block the assistant.</small></div> <div${attr_class("summary-card svelte-z6w8je", void 0, { "summary-card--danger": failingItems() > 0 })}><span class="summary-label svelte-z6w8je">Last event</span> <strong class="summary-value summary-value--small svelte-z6w8je">${escape_html(fmtTime(lastEventAt))}</strong> <small class="svelte-z6w8je">${escape_html(failingItems() > 0 ? `${failingItems()} failure${failingItems() === 1 ? "" : "s"} need review.` : "Reconnect needed.")}</small></div> <div class="summary-card svelte-z6w8je"><span class="summary-label svelte-z6w8je">Observed types</span> <strong class="summary-value svelte-z6w8je">${escape_html(Object.keys(eventCounts).length)}</strong> <small class="svelte-z6w8je">${escape_html(eventFeed.length)} recent events buffered</small></div> <div${attr_class("summary-card svelte-z6w8je", void 0, { "summary-card--danger": failingItems() > 0 })}><span class="summary-label svelte-z6w8je">Failures seen</span> <strong class="summary-value svelte-z6w8je">${escape_html(failingItems())}</strong> <small class="svelte-z6w8je">${escape_html(failingItems() > 0 ? "Tool or session failures need review." : "No current failures seen.")}</small></div></div> <div class="activity-layout svelte-z6w8je"><section class="card-section svelte-z6w8je"><div class="card-head svelte-z6w8je"><h3 class="svelte-z6w8je">Needs attention</h3> <span class="svelte-z6w8je">${escape_html(latestAttention().length)}</span></div> <div class="attention-list svelte-z6w8je">`);
1740
- if (latestAttention().length === 0) {
1741
- $$renderer.push("<!--[0-->");
1742
- $$renderer.push(`<div class="empty-card svelte-z6w8je">Nothing urgent has happened yet.</div>`);
1743
- } else $$renderer.push("<!--[-1-->");
1744
- $$renderer.push(`<!--]--> <!--[-->`);
1745
- const each_array = ensure_array_like(latestAttention());
1746
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1747
- let item = each_array[$$index];
1748
- $$renderer.push(`<article${attr_class(`attention-item attention-item--${stringify(item.severity)}`, "svelte-z6w8je")}><div class="attention-top svelte-z6w8je"><strong class="svelte-z6w8je">${escape_html(item.title)}</strong> <span class="svelte-z6w8je">${escape_html(fmtTime(item.timestamp))}</span></div> <p class="svelte-z6w8je">${escape_html(item.detail)}</p> `);
1749
- if (item.sessionId) {
1750
- $$renderer.push("<!--[0-->");
1751
- const sessionTitle = sessions.find((s) => s.id === item.sessionId)?.title;
1752
- $$renderer.push(`<button class="attention-session mono svelte-z6w8je" type="button"${attr("aria-label", item.sessionId)}>${escape_html(sessionTitle || `Session ${item.sessionId.slice(0, 8)}…`)}</button>`);
1753
- } else $$renderer.push("<!--[-1-->");
1754
- $$renderer.push(`<!--]--></article>`);
1755
- }
1756
- $$renderer.push(`<!--]--></div> <div class="subsection-head svelte-z6w8je"><h4 class="svelte-z6w8je">Live event feed</h4> <span class="svelte-z6w8je">${escape_html(eventFeed.length)}</span></div> <div class="feed-list svelte-z6w8je">`);
1757
- if (eventFeed.length === 0) {
1758
- $$renderer.push("<!--[0-->");
1759
- $$renderer.push(`<div class="empty-card svelte-z6w8je">Waiting for OpenCode events...</div>`);
1760
- } else $$renderer.push("<!--[-1-->");
1761
- $$renderer.push(`<!--]--> <!--[-->`);
1762
- const each_array_1 = ensure_array_like(eventFeed.slice(0, 12));
1763
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
1764
- let event = each_array_1[$$index_1];
1765
- $$renderer.push(`<article class="feed-row svelte-z6w8je"><div class="feed-top svelte-z6w8je"><span class="feed-type mono svelte-z6w8je">${escape_html(event.type)}</span> <span class="svelte-z6w8je">${escape_html(fmtTime(event.timestamp))}</span></div> <strong class="svelte-z6w8je">${escape_html(event.title)}</strong> `);
1766
- if (event.toolState) {
1767
- $$renderer.push("<!--[0-->");
1768
- ToolStrip($$renderer, {
1769
- items: [event.toolState],
1770
- ariaLabel: "Activity tool event"
1771
- });
1772
- } else if (event.detail) {
1773
- $$renderer.push("<!--[1-->");
1774
- $$renderer.push(`<p class="svelte-z6w8je">${escape_html(event.detail)}</p>`);
1775
- } else $$renderer.push("<!--[-1-->");
1776
- $$renderer.push(`<!--]--> `);
1777
- if (event.sessionId) {
1778
- $$renderer.push("<!--[0-->");
1779
- const sessionTitle = sessions.find((s) => s.id === event.sessionId)?.title;
1780
- $$renderer.push(`<button class="attention-session mono svelte-z6w8je" type="button"${attr("aria-label", event.sessionId)}>${escape_html(sessionTitle || `Session ${event.sessionId.slice(0, 8)}…`)}</button>`);
1781
- } else $$renderer.push("<!--[-1-->");
1782
- $$renderer.push(`<!--]--></article>`);
1783
- }
1784
- $$renderer.push(`<!--]--></div></section> <section class="card-section svelte-z6w8je"><div class="card-head svelte-z6w8je"><h3 class="svelte-z6w8je">Recent sessions</h3> <span class="svelte-z6w8je">${escape_html(sessions.length)}</span></div> <div class="session-list svelte-z6w8je">`);
1785
- if (sessions.length === 0 && true) {
1786
- $$renderer.push("<!--[0-->");
1787
- $$renderer.push(`<div class="empty-card svelte-z6w8je">No sessions found on the active assistant endpoint.</div>`);
1788
- } else $$renderer.push("<!--[-1-->");
1789
- $$renderer.push(`<!--]--> <!--[-->`);
1790
- const each_array_2 = ensure_array_like(sessions.slice(0, 12));
1791
- for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {
1792
- let session = each_array_2[$$index_2];
1793
- $$renderer.push(`<button${attr_class("session-row svelte-z6w8je", void 0, { "selected": selectedSessionId === session.id })}><div><div class="session-title svelte-z6w8je">${escape_html(session.title || "Untitled session")}</div> <div class="session-meta svelte-z6w8je">Updated ${escape_html(fmtDateTime(session.updatedAt))}</div></div> <div class="session-stats svelte-z6w8je"><strong>${escape_html(sessionEventCounts[session.id] ?? 0)} evt</strong> <span class="session-id mono svelte-z6w8je">${escape_html(session.id.slice(0, 12))}...</span></div></button>`);
1794
- }
1795
- $$renderer.push(`<!--]--></div> <div class="subsection-head svelte-z6w8je"><h4 class="svelte-z6w8je">Event breakdown</h4> <span class="svelte-z6w8je">${escape_html(eventTypeRows().length)}</span></div> <div class="table-scroll svelte-z6w8je"><table class="data-table svelte-z6w8je"><thead><tr><th class="svelte-z6w8je">Type</th><th class="svelte-z6w8je">Total</th></tr></thead><tbody>`);
1796
- if (eventTypeRows().length === 0) {
1797
- $$renderer.push("<!--[0-->");
1798
- $$renderer.push(`<tr class="svelte-z6w8je"><td colspan="2" class="empty-cell svelte-z6w8je">No events observed yet.</td></tr>`);
1799
- } else $$renderer.push("<!--[-1-->");
1800
- $$renderer.push(`<!--]--><!--[-->`);
1801
- const each_array_3 = ensure_array_like(eventTypeRows());
1802
- for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
1803
- let [type, count] = each_array_3[$$index_3];
1804
- $$renderer.push(`<tr class="svelte-z6w8je"><td class="mono svelte-z6w8je">${escape_html(type)}</td><td class="svelte-z6w8je">${escape_html(count)}</td></tr>`);
1805
- }
1806
- $$renderer.push(`<!--]--></tbody></table></div> <div class="subsection-head svelte-z6w8je"><h4 class="svelte-z6w8je">Most active sessions</h4> <span class="svelte-z6w8je">${escape_html(hotSessions().length)}</span></div> <div class="hot-session-list svelte-z6w8je">`);
1807
- if (hotSessions().length === 0) {
1808
- $$renderer.push("<!--[0-->");
1809
- $$renderer.push(`<div class="empty-card svelte-z6w8je">No session activity captured yet.</div>`);
1810
- } else $$renderer.push("<!--[-1-->");
1811
- $$renderer.push(`<!--]--> <!--[-->`);
1812
- const each_array_4 = ensure_array_like(hotSessions());
1813
- for (let $$index_4 = 0, $$length = each_array_4.length; $$index_4 < $$length; $$index_4++) {
1814
- let session = each_array_4[$$index_4];
1815
- $$renderer.push(`<div class="hot-session-row svelte-z6w8je"><div><div class="session-title svelte-z6w8je">${escape_html(session.title || "Untitled session")}</div> <div class="session-meta mono svelte-z6w8je">${escape_html(session.id)}</div></div> <strong>${escape_html(session.events)}</strong></div>`);
1816
- }
1817
- $$renderer.push(`<!--]--></div></section></div> <section class="card-section session-details svelte-z6w8je"><div class="card-head svelte-z6w8je"><h3 class="svelte-z6w8je">Selected session</h3> `);
1818
- if (selectedSession()) {
1819
- $$renderer.push("<!--[0-->");
1820
- $$renderer.push(`<span class="svelte-z6w8je">${escape_html(selectedSession().title || selectedSession().id)}</span>`);
1821
- } else $$renderer.push("<!--[-1-->");
1822
- $$renderer.push(`<!--]--></div> `);
1823
- if (selectedSession()) {
1824
- $$renderer.push("<!--[0-->");
1825
- $$renderer.push(`<div class="selected-meta svelte-z6w8je"><div class="svelte-z6w8je"><span class="svelte-z6w8je">Created</span><strong class="svelte-z6w8je">${escape_html(fmtDateTime(selectedSession().createdAt))}</strong></div> <div class="svelte-z6w8je"><span class="svelte-z6w8je">Updated</span><strong class="svelte-z6w8je">${escape_html(fmtDateTime(selectedSession().updatedAt))}</strong></div> <div class="svelte-z6w8je"><span class="svelte-z6w8je">Session ID</span><strong class="mono svelte-z6w8je">${escape_html(selectedSession().id)}</strong></div> <div class="svelte-z6w8je"><span class="svelte-z6w8je">Events seen</span><strong class="svelte-z6w8je">${escape_html(sessionEventCounts[selectedSession().id] ?? 0)}</strong></div></div> <div class="message-panel-head svelte-z6w8je"><span>Recent activity</span> <button class="btn btn-ghost btn-sm"${attr("disabled", messagesLoading, true)}>`);
1826
- $$renderer.push("<!--[-1-->");
1827
- $$renderer.push(`<!--]--> Refresh</button></div> `);
1828
- if (selectedMessages.length === 0 && true) {
1829
- $$renderer.push("<!--[0-->");
1830
- $$renderer.push(`<div class="empty-card svelte-z6w8je">No chat or tool activity available for this session yet.</div>`);
1831
- } else $$renderer.push("<!--[-1-->");
1832
- $$renderer.push(`<!--]--> <div class="selected-message-list svelte-z6w8je"><!--[-->`);
1833
- const each_array_5 = ensure_array_like(selectedMessages.slice(-12));
1834
- for (let $$index_5 = 0, $$length = each_array_5.length; $$index_5 < $$length; $$index_5++) {
1835
- let entry = each_array_5[$$index_5];
1836
- ChatMessage($$renderer, { entry });
1837
- }
1838
- $$renderer.push(`<!--]--></div>`);
1839
- } else {
1840
- $$renderer.push("<!--[-1-->");
1841
- $$renderer.push(`<div class="empty-card svelte-z6w8je">Select a session to inspect its recent chat and tool activity.</div>`);
1842
- }
1843
- $$renderer.push(`<!--]--></section></div>`);
1844
- });
1845
- }
1846
- //#endregion
1847
- //#region src/lib/components/akm/AkmKnowledgeStatsSection.svelte
1848
- function AkmKnowledgeStatsSection($$renderer, $$props) {
1849
- $$renderer.component(($$renderer) => {
1850
- let { disabled } = $$props;
1851
- $$renderer.push(`<section class="stats-section svelte-1jrmvb5"><div class="stats-header svelte-1jrmvb5"><div><h3 class="svelte-1jrmvb5">Knowledge &amp; Learning</h3> <p class="section-note">Read-only AKM health, memory counts, improve activity, and pending proposals from live CLI JSON output.</p></div> <button class="btn btn-secondary btn-sm" type="button"${attr("disabled", disabled, true)}>`);
1852
- $$renderer.push("<!--[-1-->");
1853
- $$renderer.push(`<!--]--> Refresh stats</button></div> `);
1854
- $$renderer.push("<!--[1-->");
1855
- $$renderer.push(`<div class="stats-loading svelte-1jrmvb5">`);
1856
- Spinner($$renderer, {});
1857
- $$renderer.push(`<!----> <span>Loading knowledge stats…</span></div>`);
1858
- $$renderer.push(`<!--]--></section>`);
1859
- });
1860
- }
1861
- //#endregion
1862
- //#region src/lib/components/common/PasswordInput.svelte
1863
- function PasswordInput($$renderer, $$props) {
1864
- $$renderer.component(($$renderer) => {
1865
- let { value = "", id, placeholder, disabled = false } = $$props;
1866
- $$renderer.push(`<div class="input-with-toggle svelte-176sy43"><input${attr("id", id)} class="control-input svelte-176sy43"${attr("type", "password")} spellcheck="false" autocomplete="new-password"${attr("placeholder", placeholder)}${attr("value", value)}${attr("disabled", disabled, true)}/> <button type="button" class="btn-icon svelte-176sy43"${attr("aria-label", "Show value")}${attr("disabled", disabled, true)}>${escape_html("Show")}</button></div>`);
1867
- bind_props($$props, { value });
1868
- });
1869
- }
1870
- //#endregion
1871
- //#region src/lib/components/akm/EmbeddingSection.svelte
1872
- function EmbeddingSection($$renderer, $$props) {
1873
- $$renderer.component(($$renderer) => {
1874
- let { endpoint = "", model = "", provider = "", apiKey = "", dimension = 1536, localModel = "", batchSize = "", chunkSize = "", contextLength = "", ollamaNumCtx = "", disabled = false, detecting = false, testing = false, ondetect, ontest } = $$props;
1875
- let $$settled = true;
1876
- let $$inner_renderer;
1877
- function $$render_inner($$renderer) {
1878
- $$renderer.push(`<section class="config-section svelte-y5k1u8"><div class="section-header svelte-y5k1u8"><h3 class="section-title svelte-y5k1u8">Semantic search (embeddings)</h3> <div class="section-actions svelte-y5k1u8"><button class="btn btn-secondary btn-sm" type="button"${attr("disabled", disabled || detecting || testing, true)}>`);
1879
- if (detecting) {
1880
- $$renderer.push("<!--[0-->");
1881
- Spinner($$renderer, {});
1882
- } else $$renderer.push("<!--[-1-->");
1883
- $$renderer.push(`<!--]--> Detect</button> <button class="btn btn-secondary btn-sm" type="button"${attr("disabled", disabled || detecting || testing, true)}>`);
1884
- if (testing) {
1885
- $$renderer.push("<!--[0-->");
1886
- Spinner($$renderer, {});
1887
- } else $$renderer.push("<!--[-1-->");
1888
- $$renderer.push(`<!--]--> Test</button></div></div> <p class="section-note svelte-y5k1u8">Vector embedding provider for semantic search. Leave Endpoint and Model blank to use built-in local embeddings.</p> <div class="controls--grid svelte-y5k1u8"><div class="control-group control-group--wide svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embEndpoint">Endpoint</label> <input id="embEndpoint" class="control-input svelte-y5k1u8" type="url" spellcheck="false" placeholder="https://api.openai.com/v1/embeddings"${attr("value", endpoint)}${attr("disabled", disabled, true)}/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embModel">Model</label> <input id="embModel" class="control-input svelte-y5k1u8" type="text" spellcheck="false" placeholder="text-embedding-3-small"${attr("value", model)}${attr("disabled", disabled, true)}/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embProvider">Provider (label)</label> <input id="embProvider" class="control-input svelte-y5k1u8" type="text" spellcheck="false" placeholder="openai"${attr("value", provider)}${attr("disabled", disabled, true)}/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embApiKey">API Key</label> `);
1889
- PasswordInput($$renderer, {
1890
- id: "embApiKey",
1891
- placeholder: "${AKM_EMBED_API_KEY}",
1892
- disabled,
1893
- get value() {
1894
- return apiKey;
1895
- },
1896
- set value($$value) {
1897
- apiKey = $$value;
1898
- $$settled = false;
1899
- }
1900
- });
1901
- $$renderer.push(`<!----></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embDimension">Dimensions</label> <input id="embDimension" class="control-input control-input--narrow svelte-y5k1u8" type="number" min="1"${attr("value", dimension)}${attr("disabled", disabled, true)}/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embLocalModel">Local model</label> <input id="embLocalModel" class="control-input svelte-y5k1u8" type="text" spellcheck="false" placeholder="Xenova/bge-small-en-v1.5"${attr("value", localModel)}${attr("disabled", disabled, true)}/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embBatchSize">Batch size</label> <input id="embBatchSize" class="control-input control-input--narrow svelte-y5k1u8" type="number" min="1"${attr("value", batchSize)}${attr("disabled", disabled, true)}/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embChunkSize">Chunk size (chars)</label> <input id="embChunkSize" class="control-input control-input--narrow svelte-y5k1u8" type="number" min="1"${attr("value", chunkSize)}${attr("disabled", disabled, true)}/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embContextLength">Context length</label> <input id="embContextLength" class="control-input control-input--narrow svelte-y5k1u8" type="number" min="1"${attr("value", contextLength)}${attr("disabled", disabled, true)}/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embOllamaNumCtx">Ollama num_ctx</label> <input id="embOllamaNumCtx" class="control-input control-input--narrow svelte-y5k1u8" type="number" min="1"${attr("value", ollamaNumCtx)}${attr("disabled", disabled, true)}/></div></div></section>`);
1902
- }
1903
- do {
1904
- $$settled = true;
1905
- $$inner_renderer = $$renderer.copy();
1906
- $$render_inner($$inner_renderer);
1907
- } while (!$$settled);
1908
- $$renderer.subsume($$inner_renderer);
1909
- bind_props($$props, {
1910
- endpoint,
1911
- model,
1912
- provider,
1913
- apiKey,
1914
- dimension,
1915
- localModel,
1916
- batchSize,
1917
- chunkSize,
1918
- contextLength,
1919
- ollamaNumCtx
1920
- });
1921
- });
1922
- }
1923
- //#endregion
1924
- //#region src/lib/components/akm/ProfileRow.svelte
1925
- function ProfileRow($$renderer, $$props) {
1926
- /** Optional badges/extras rendered after the name (e.g. platform, description). */
1927
- let { name, isDefault, disabled = false, extra, onsetdefault, onedit, onremove } = $$props;
1928
- $$renderer.push(`<div class="profile-row svelte-zzh9mp"><span class="profile-row-name svelte-zzh9mp">${escape_html(name || "(unnamed)")}</span> `);
1929
- if (extra) {
1930
- $$renderer.push("<!--[0-->");
1931
- extra($$renderer);
1932
- $$renderer.push(`<!---->`);
1933
- } else $$renderer.push("<!--[-1-->");
1934
- $$renderer.push(`<!--]--> `);
1935
- if (isDefault && name) {
1936
- $$renderer.push("<!--[0-->");
1937
- $$renderer.push(`<span class="badge badge--default svelte-zzh9mp">Default</span>`);
1938
- } else $$renderer.push("<!--[-1-->");
1939
- $$renderer.push(`<!--]--> <div class="profile-row-actions svelte-zzh9mp">`);
1940
- if (name && !isDefault) {
1941
- $$renderer.push("<!--[0-->");
1942
- $$renderer.push(`<button class="btn btn-sm"${attr("disabled", disabled, true)}>Set Default</button>`);
1943
- } else $$renderer.push("<!--[-1-->");
1944
- $$renderer.push(`<!--]--> <button class="btn btn-sm"${attr("disabled", disabled, true)}>Edit</button> <button class="btn btn-sm btn-danger"${attr("disabled", disabled, true)}>Remove</button></div></div>`);
1945
- }
1946
- //#endregion
1947
- //#region src/lib/components/icons/IconDatabase.svelte
1948
- function IconDatabase($$renderer, $$props) {
1949
- let { size = 20, class: className = "" } = $$props;
1950
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M5 6.5c0-1.4 3.1-2.5 7-2.5s7 1.1 7 2.5-3.1 2.5-7 2.5-7-1.1-7-2.5z"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M5 6.5v11c0 1.4 3.1 2.5 7 2.5s7-1.1 7-2.5v-11"></path><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M5 12c0 1.4 3.1 2.5 7 2.5s7-1.1 7-2.5"></path></svg>`);
1951
- }
1952
- //#endregion
1953
- //#region src/lib/components/akm/LlmProfilesSection.svelte
1954
- function LlmProfilesSection($$renderer, $$props) {
1955
- $$renderer.component(($$renderer) => {
1956
- let { profiles = [], defaultName = "", disabled = false, onedit, onadd, onremove } = $$props;
1957
- $$renderer.push(`<section class="config-section svelte-zwwvog"><h3 class="section-title svelte-zwwvog">Language models <span class="section-title-aka svelte-zwwvog">akm LLM profiles</span></h3> <p class="section-note svelte-zwwvog">The language models your assistant uses to organize and improve its memory. Add one per LLM service.</p> `);
1958
- if (profiles.length === 0) {
1959
- $$renderer.push("<!--[0-->");
1960
- $$renderer.push(`<div class="profile-empty svelte-zwwvog">`);
1961
- IconDatabase($$renderer, { size: 24 });
1962
- $$renderer.push(`<!----> <p class="empty-note svelte-zwwvog">No LLM profiles configured — add one below.</p></div>`);
1963
- } else {
1964
- $$renderer.push("<!--[-1-->");
1965
- $$renderer.push(`<div class="profile-list svelte-zwwvog"><!--[-->`);
1966
- const each_array = ensure_array_like(profiles);
1967
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1968
- let p = each_array[$$index];
1969
- ProfileRow($$renderer, {
1970
- name: p.name,
1971
- isDefault: defaultName === p.name,
1972
- disabled,
1973
- onsetdefault: () => {
1974
- defaultName = p.name;
1975
- },
1976
- onedit: () => onedit(p),
1977
- onremove: () => onremove(p.id)
1978
- });
1979
- }
1980
- $$renderer.push(`<!--]--></div>`);
1981
- }
1982
- $$renderer.push(`<!--]--> <button class="btn btn-secondary btn-sm"${attr("disabled", disabled, true)}>+ Add LLM Profile</button></section>`);
1983
- bind_props($$props, {
1984
- profiles,
1985
- defaultName
1986
- });
1987
- });
1988
- }
1989
- //#endregion
1990
- //#region src/lib/components/akm/AgentProfilesSection.svelte
1991
- function AgentProfilesSection($$renderer, $$props) {
1992
- $$renderer.component(($$renderer) => {
1993
- let { profiles = [], defaultName = "", disabled = false, onedit, onadd, onremove } = $$props;
1994
- $$renderer.push(`<section class="config-section svelte-anyxpa"><h3 class="section-title svelte-anyxpa">Agent runners <span class="section-title-aka svelte-anyxpa">akm agent profiles</span></h3> <p class="section-note svelte-anyxpa">Runner configs for maintenance steps that spawn a subprocess (opencode or claude CLI).</p> `);
1995
- if (profiles.length === 0) {
1996
- $$renderer.push("<!--[0-->");
1997
- $$renderer.push(`<div class="profile-empty svelte-anyxpa">`);
1998
- IconAgent($$renderer, { size: 24 });
1999
- $$renderer.push(`<!----> <p class="empty-note svelte-anyxpa">No agent profiles defined.</p></div>`);
2000
- } else {
2001
- $$renderer.push("<!--[-1-->");
2002
- $$renderer.push(`<div class="profile-list svelte-anyxpa"><!--[-->`);
2003
- const each_array = ensure_array_like(profiles);
2004
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
2005
- let p = each_array[$$index];
2006
- {
2007
- function extra($$renderer) {
2008
- $$renderer.push(`<span class="badge svelte-anyxpa">${escape_html(p.platform)}</span>`);
2009
- }
2010
- ProfileRow($$renderer, {
2011
- name: p.name,
2012
- isDefault: defaultName === p.name,
2013
- disabled,
2014
- onsetdefault: () => {
2015
- defaultName = p.name;
2016
- },
2017
- onedit: () => onedit(p),
2018
- onremove: () => onremove(p.id),
2019
- extra});
2020
- }
2021
- }
2022
- $$renderer.push(`<!--]--></div>`);
2023
- }
2024
- $$renderer.push(`<!--]--> <button class="btn btn-secondary btn-sm"${attr("disabled", disabled, true)}>+ Add Agent Profile</button></section>`);
2025
- bind_props($$props, {
2026
- profiles,
2027
- defaultName
2028
- });
2029
- });
2030
- }
2031
- //#endregion
2032
- //#region src/lib/components/icons/IconFlame.svelte
2033
- function IconFlame($$renderer, $$props) {
2034
- let { size = 20, class: className = "" } = $$props;
2035
- $$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M12 22c-3.3 0-5.5-2-5.5-4.5 0-3 2.5-5 3.5-7 .5 1.5 1.5 2 2 3 .5-2.5 1-5.5 1.5-8 1.5 2.5 2 5.5 1.5 8.5.5-1.5 1-3 .5-4.5 1 2 1.5 4 0 5.5 0 2.5-1.5 7-3.5 7z"></path></svg>`);
2036
- }
2037
- //#endregion
2038
- //#region src/lib/components/akm/ImproveProfilesSection.svelte
2039
- function ImproveProfilesSection($$renderer, $$props) {
2040
- $$renderer.component(($$renderer) => {
2041
- let { profiles = [], defaultName = "", disabled = false, onedit, onadd, onremove } = $$props;
2042
- $$renderer.push(`<section class="config-section svelte-1ngozvb"><h3 class="section-title svelte-1ngozvb">Memory maintenance <span class="section-title-aka svelte-1ngozvb">akm improve</span></h3> <p class="section-note svelte-1ngozvb">Scheduled runs that distill, deduplicate, and improve stored memories. Each configuration picks which steps run and which language model they use — add a language model above first.</p> `);
2043
- if (profiles.length === 0) {
2044
- $$renderer.push("<!--[0-->");
2045
- $$renderer.push(`<div class="profile-empty svelte-1ngozvb">`);
2046
- IconFlame($$renderer, { size: 24 });
2047
- $$renderer.push(`<!----> <p class="empty-note svelte-1ngozvb">No improve profiles defined — add one below.</p></div>`);
2048
- } else {
2049
- $$renderer.push("<!--[-1-->");
2050
- $$renderer.push(`<div class="profile-list svelte-1ngozvb"><!--[-->`);
2051
- const each_array = ensure_array_like(profiles);
2052
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
2053
- let ip = each_array[$$index];
2054
- {
2055
- function extra($$renderer) {
2056
- if (ip.description) {
2057
- $$renderer.push("<!--[0-->");
2058
- $$renderer.push(`<span class="profile-row-desc svelte-1ngozvb">${escape_html(ip.description)}</span>`);
2059
- } else $$renderer.push("<!--[-1-->");
2060
- $$renderer.push(`<!--]-->`);
2061
- }
2062
- ProfileRow($$renderer, {
2063
- name: ip.name,
2064
- isDefault: defaultName === ip.name,
2065
- disabled,
2066
- onsetdefault: () => {
2067
- defaultName = ip.name;
2068
- },
2069
- onedit: () => onedit(ip),
2070
- onremove: () => onremove(ip.id),
2071
- extra});
2072
- }
2073
- }
2074
- $$renderer.push(`<!--]--></div>`);
2075
- }
2076
- $$renderer.push(`<!--]--> <button class="btn btn-secondary btn-sm"${attr("disabled", disabled, true)}>+ Add Improve Profile</button></section>`);
2077
- bind_props($$props, {
2078
- profiles,
2079
- defaultName
2080
- });
2081
- });
2082
- }
2083
- //#endregion
2084
- //#region src/lib/components/akm/LlmProfileDrawer.svelte
2085
- function LlmProfileDrawer($$renderer, $$props) {
2086
- $$renderer.component(($$renderer) => {
2087
- let { draft = void 0, oncancel, onapply } = $$props;
2088
- let $$settled = true;
2089
- let $$inner_renderer;
2090
- function $$render_inner($$renderer) {
2091
- $$renderer.push(`<div class="drawer-scrim svelte-1gmn25z" role="presentation"></div> <div class="drawer svelte-1gmn25z" role="dialog" aria-modal="true" aria-label="Edit profile"><div class="drawer-header svelte-1gmn25z"><h3 class="drawer-title svelte-1gmn25z">LLM Profile</h3> <button class="drawer-close svelte-1gmn25z" aria-label="Close">✕</button></div> <div class="drawer-body svelte-1gmn25z"><div class="controls controls--grid svelte-1gmn25z"><div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-name">Profile Name</label> <input id="d-llm-name" class="control-input svelte-1gmn25z" type="text" spellcheck="false" placeholder="e.g. default"${attr("value", draft.name)}/></div> <div class="control-group control-group--wide svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-endpoint">Endpoint</label> <input id="d-llm-endpoint" class="control-input svelte-1gmn25z" type="url" spellcheck="false" placeholder="https://api.openai.com/v1/chat/completions"${attr("value", draft.endpoint)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-model">Model</label> <input id="d-llm-model" class="control-input svelte-1gmn25z" type="text" spellcheck="false" placeholder="gpt-4o-mini"${attr("value", draft.model)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-provider">Provider (label)</label> <input id="d-llm-provider" class="control-input svelte-1gmn25z" type="text" spellcheck="false" placeholder="openai"${attr("value", draft.provider)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-apikey">API Key</label> `);
2092
- PasswordInput($$renderer, {
2093
- id: "d-llm-apikey",
2094
- placeholder: "${AKM_LLM_API_KEY}",
2095
- get value() {
2096
- return draft.apiKey;
2097
- },
2098
- set value($$value) {
2099
- draft.apiKey = $$value;
2100
- $$settled = false;
2101
- }
2102
- });
2103
- $$renderer.push(`<!----></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-temperature">Temperature (0–2)</label> <input id="d-llm-temperature" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="0" max="2" step="0.1"${attr("value", draft.temperature)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-maxtokens">Max tokens</label> <input id="d-llm-maxtokens" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"${attr("value", draft.maxTokens)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-timeout">Timeout (ms)</label> <input id="d-llm-timeout" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"${attr("value", draft.timeoutMs)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-concurrency">Concurrency</label> <input id="d-llm-concurrency" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"${attr("value", draft.concurrency)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-contextlength">Context length</label> <input id="d-llm-contextlength" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"${attr("value", draft.contextLength)}/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-judgemodel">Judge model</label> <input id="d-llm-judgemodel" class="control-input svelte-1gmn25z" type="text" spellcheck="false" placeholder="gpt-4o"${attr("value", draft.judgeModel)}/></div></div> <label class="toggle-row svelte-1gmn25z" style="margin-top: var(--s-sp-4)"><input type="checkbox"${attr("checked", draft.supportsJsonSchema, true)} class="svelte-1gmn25z"/> <span class="toggle-label svelte-1gmn25z">Supports JSON schema</span> <span class="toggle-hint svelte-1gmn25z">Use response_format: json_schema for structured output</span></label> <label class="toggle-row svelte-1gmn25z"><input type="checkbox"${attr("checked", draft.structuredOutput, true)} class="svelte-1gmn25z"/> <span class="toggle-label svelte-1gmn25z">Structured output capability</span> <span class="toggle-hint svelte-1gmn25z">capabilities.structuredOutput — model reliably returns valid structured JSON</span></label> <label class="toggle-row svelte-1gmn25z"><input type="checkbox"${attr("checked", draft.enableThinking, true)} class="svelte-1gmn25z"/> <span class="toggle-label svelte-1gmn25z">Enable thinking</span> <span class="toggle-hint svelte-1gmn25z">Allow extended/thinking tokens for reasoning models</span></label> <div class="control-group control-group--wide svelte-1gmn25z" style="margin-top: var(--s-sp-4)"><label class="control-label svelte-1gmn25z" for="d-llm-extra">Extra params (JSON)</label> <textarea id="d-llm-extra" class="control-input svelte-1gmn25z" rows="3" spellcheck="false" placeholder="{ &quot;top_p&quot;: 0.9 }">`);
2104
- const $$body = escape_html(draft.extraParams);
2105
- if ($$body) $$renderer.push(`${$$body}`);
2106
- $$renderer.push(`</textarea> <span class="feat-hint svelte-1gmn25z">Merged into the provider request body. Must be a JSON object.</span></div></div> <div class="drawer-footer svelte-1gmn25z"><button class="btn btn-secondary">Cancel</button> <button class="btn btn-primary">Apply</button></div></div>`);
2107
- }
2108
- do {
2109
- $$settled = true;
2110
- $$inner_renderer = $$renderer.copy();
2111
- $$render_inner($$inner_renderer);
2112
- } while (!$$settled);
2113
- $$renderer.subsume($$inner_renderer);
2114
- bind_props($$props, { draft });
2115
- });
2116
- }
2117
- //#endregion
2118
- //#region src/lib/components/akm/AgentProfileDrawer.svelte
2119
- function AgentProfileDrawer($$renderer, $$props) {
2120
- $$renderer.component(($$renderer) => {
2121
- let { draft = void 0, oncancel, onapply } = $$props;
2122
- $$renderer.push(`<div class="drawer-scrim svelte-1evj0pt" role="presentation"></div> <div class="drawer svelte-1evj0pt" role="dialog" aria-modal="true" aria-label="Edit profile"><div class="drawer-header svelte-1evj0pt"><h3 class="drawer-title svelte-1evj0pt">Agent Profile</h3> <button class="drawer-close svelte-1evj0pt" aria-label="Close">✕</button></div> <div class="drawer-body svelte-1evj0pt"><div class="controls controls--grid svelte-1evj0pt"><div class="control-group svelte-1evj0pt"><label class="control-label svelte-1evj0pt" for="d-agent-name">Profile Name</label> <input id="d-agent-name" class="control-input svelte-1evj0pt" type="text" spellcheck="false" placeholder="e.g. opencode"${attr("value", draft.name)}/></div> <div class="control-group svelte-1evj0pt"><label class="control-label svelte-1evj0pt" for="d-agent-platform">Platform</label> `);
2123
- $$renderer.select({
2124
- id: "d-agent-platform",
2125
- class: "control-input",
2126
- value: draft.platform
2127
- }, ($$renderer) => {
2128
- $$renderer.option({ value: "opencode" }, ($$renderer) => {
2129
- $$renderer.push(`opencode`);
2130
- });
2131
- $$renderer.option({ value: "claude" }, ($$renderer) => {
2132
- $$renderer.push(`claude`);
2133
- });
2134
- $$renderer.option({ value: "opencode-sdk" }, ($$renderer) => {
2135
- $$renderer.push(`opencode-sdk`);
2136
- });
2137
- }, "svelte-1evj0pt");
2138
- $$renderer.push(`</div> `);
2139
- if (draft.platform !== "opencode-sdk") {
2140
- $$renderer.push("<!--[0-->");
2141
- $$renderer.push(`<div class="control-group svelte-1evj0pt"><label class="control-label svelte-1evj0pt" for="d-agent-bin">Binary</label> <input id="d-agent-bin" class="control-input svelte-1evj0pt" type="text" spellcheck="false" placeholder="opencode"${attr("value", draft.bin)}/></div> <div class="control-group control-group--wide svelte-1evj0pt"><label class="control-label svelte-1evj0pt" for="d-agent-args">Extra args (space-separated)</label> <input id="d-agent-args" class="control-input svelte-1evj0pt" type="text" spellcheck="false" placeholder="run --model gpt-4o"${attr("value", draft.args)}/></div>`);
2142
- } else {
2143
- $$renderer.push("<!--[-1-->");
2144
- $$renderer.push(`<div class="control-group svelte-1evj0pt"><label class="control-label svelte-1evj0pt" for="d-agent-model">Model</label> <input id="d-agent-model" class="control-input svelte-1evj0pt" type="text" spellcheck="false" placeholder="anthropic/claude-sonnet-4-5"${attr("value", draft.model)}/></div> <div class="control-group svelte-1evj0pt"><label class="control-label svelte-1evj0pt" for="d-agent-workspace">Workspace</label> <input id="d-agent-workspace" class="control-input svelte-1evj0pt" type="text" spellcheck="false" placeholder="\${PWD}"${attr("value", draft.workspace)}/></div>`);
2145
- }
2146
- $$renderer.push(`<!--]--></div></div> <div class="drawer-footer svelte-1evj0pt"><button class="btn btn-secondary">Cancel</button> <button class="btn btn-primary">Apply</button></div></div>`);
2147
- bind_props($$props, { draft });
2148
- });
2149
- }
2150
- //#endregion
2151
- //#region src/lib/components/akm/improve-process-helpers.ts
2152
- var PROCESS_KEYS = [
2153
- "reflect",
2154
- "distill",
2155
- "consolidate",
2156
- "validation",
2157
- "memoryInference",
2158
- "graphExtraction",
2159
- "extract",
2160
- "triage"
2161
- ];
2162
- var PROCESS_HINTS = {
2163
- reflect: "Propose stash updates via self-reflection",
2164
- distill: "Quality-judge and distill feedback",
2165
- consolidate: "Deduplicate and merge overlapping memories",
2166
- validation: "Third-model confidence and staleness scoring",
2167
- memoryInference: "Derive structured memories from pending files",
2168
- graphExtraction: "Extract entities and relations for graph search",
2169
- extract: "Read session logs and queue insight proposals",
2170
- triage: "Auto-review and accept/promote queued proposals"
2171
- };
2172
- var DEFAULT_ENABLED = {
2173
- reflect: true,
2174
- distill: true,
2175
- consolidate: false,
2176
- validation: false,
2177
- memoryInference: true,
2178
- graphExtraction: true,
2179
- extract: true,
2180
- triage: false
2181
- };
2182
- function emptyFEntry(enabled) {
2183
- return {
2184
- enabled,
2185
- mode: "",
2186
- profile: "",
2187
- timeoutMs: "",
2188
- allowedTypes: "",
2189
- qualityGate: "",
2190
- contradictionDetection: "",
2191
- defaultSince: "",
2192
- maxTotalChars: "",
2193
- maxChunkSize: "",
2194
- applyMode: "",
2195
- policy: "",
2196
- maxAcceptsPerRun: "",
2197
- maxDiffLines: "",
2198
- rejectEmpty: false,
2199
- judgment: {
2200
- mode: "",
2201
- profile: "",
2202
- timeoutMs: ""
2203
- },
2204
- rest: {}
2205
- };
2206
- }
2207
- //#endregion
2208
- //#region src/lib/components/akm/ImproveProfileDrawer.svelte
2209
- function ImproveProfileDrawer($$renderer, $$props) {
2210
- $$renderer.component(($$renderer) => {
2211
- let { draft = void 0, llmProfileNames, oncancel, onapply } = $$props;
2212
- $$renderer.push(`<datalist id="llm-profiles-list"><!--[-->`);
2213
- const each_array = ensure_array_like(llmProfileNames);
2214
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
2215
- let name = each_array[$$index];
2216
- $$renderer.option({ value: name }, ($$renderer) => {});
2217
- }
2218
- $$renderer.push(`<!--]--></datalist> <div class="drawer-scrim svelte-1ndbe78" role="presentation"></div> <div class="drawer svelte-1ndbe78" role="dialog" aria-modal="true" aria-label="Edit profile"><div class="drawer-header svelte-1ndbe78"><h3 class="drawer-title svelte-1ndbe78">Improve Profile</h3> <button class="drawer-close svelte-1ndbe78" aria-label="Close">✕</button></div> <div class="drawer-body svelte-1ndbe78"><div class="controls controls--grid svelte-1ndbe78"><div class="control-group svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-name">Profile Name</label> <input id="d-imp-name" class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="e.g. default"${attr("value", draft.name)}/></div> <div class="control-group control-group--wide svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-desc">Description</label> <input id="d-imp-desc" class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="Optional description"${attr("value", draft.description)}/></div> <div class="control-group svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-limit">Max proposals per run</label> <input id="d-imp-limit" class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1" max="100"${attr("value", draft.limit)}/></div> <div class="control-group svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-autoacc">Auto-accept threshold (0 = manual)</label> <input id="d-imp-autoacc" class="control-input control-input--narrow svelte-1ndbe78" type="number" min="0" max="1" step="0.05"${attr("value", draft.autoAccept)}/></div></div> <div class="proc-list svelte-1ndbe78"><!--[-->`);
2219
- const each_array_1 = ensure_array_like(PROCESS_KEYS);
2220
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
2221
- let key = each_array_1[$$index_1];
2222
- const proc = draft.processes[key];
2223
- $$renderer.push(`<div class="proc-card svelte-1ndbe78"><div class="proc-head svelte-1ndbe78"><input type="checkbox"${attr("checked", proc.enabled, true)}${attr("aria-label", `${stringify(key)} enabled`)} class="svelte-1ndbe78"/> <div class="proc-name svelte-1ndbe78"><span class="feat-name svelte-1ndbe78">${escape_html(key)}</span><span class="feat-hint svelte-1ndbe78">${escape_html(PROCESS_HINTS[key])}</span></div> `);
2224
- $$renderer.select({
2225
- class: "control-input",
2226
- value: proc.mode,
2227
- "aria-label": `${stringify(key)} mode`
2228
- }, ($$renderer) => {
2229
- $$renderer.option({ value: "" }, ($$renderer) => {
2230
- $$renderer.push(`Default mode`);
2231
- });
2232
- $$renderer.option({ value: "llm" }, ($$renderer) => {
2233
- $$renderer.push(`LLM (direct call)`);
2234
- });
2235
- $$renderer.option({ value: "agent" }, ($$renderer) => {
2236
- $$renderer.push(`Agent (subprocess)`);
2237
- });
2238
- $$renderer.option({ value: "sdk" }, ($$renderer) => {
2239
- $$renderer.push(`SDK (programmatic)`);
2240
- });
2241
- }, "svelte-1ndbe78");
2242
- $$renderer.push(` <input class="control-input svelte-1ndbe78" type="text" spellcheck="false" list="llm-profiles-list" placeholder="— default profile —"${attr("value", proc.profile)}${attr("aria-label", `${stringify(key)} profile`)}/> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1" placeholder="timeout ms"${attr("value", proc.timeoutMs)}${attr("aria-label", `${stringify(key)} timeout`)}/></div> <details class="proc-adv svelte-1ndbe78"><summary class="svelte-1ndbe78">Advanced</summary> <div class="proc-adv-grid svelte-1ndbe78"><label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Allowed types (comma-separated)</span> <input class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="skill, knowledge, …"${attr("value", proc.allowedTypes)}/></label> `);
2243
- if (key === "reflect" || key === "distill") {
2244
- $$renderer.push("<!--[0-->");
2245
- $$renderer.push(`<label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Quality gate</span> `);
2246
- $$renderer.select({
2247
- class: "control-input",
2248
- value: proc.qualityGate
2249
- }, ($$renderer) => {
2250
- $$renderer.option({ value: "" }, ($$renderer) => {
2251
- $$renderer.push(`Default`);
2252
- });
2253
- $$renderer.option({ value: "on" }, ($$renderer) => {
2254
- $$renderer.push(`Enabled`);
2255
- });
2256
- $$renderer.option({ value: "off" }, ($$renderer) => {
2257
- $$renderer.push(`Disabled`);
2258
- });
2259
- }, "svelte-1ndbe78");
2260
- $$renderer.push(`</label>`);
2261
- } else $$renderer.push("<!--[-1-->");
2262
- $$renderer.push(`<!--]--> `);
2263
- if (key === "consolidate") {
2264
- $$renderer.push("<!--[0-->");
2265
- $$renderer.push(`<label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Contradiction detection</span> `);
2266
- $$renderer.select({
2267
- class: "control-input",
2268
- value: proc.contradictionDetection
2269
- }, ($$renderer) => {
2270
- $$renderer.option({ value: "" }, ($$renderer) => {
2271
- $$renderer.push(`Default`);
2272
- });
2273
- $$renderer.option({ value: "on" }, ($$renderer) => {
2274
- $$renderer.push(`Enabled`);
2275
- });
2276
- $$renderer.option({ value: "off" }, ($$renderer) => {
2277
- $$renderer.push(`Disabled`);
2278
- });
2279
- }, "svelte-1ndbe78");
2280
- $$renderer.push(`</label>`);
2281
- } else $$renderer.push("<!--[-1-->");
2282
- $$renderer.push(`<!--]--> `);
2283
- if (key === "extract") {
2284
- $$renderer.push("<!--[0-->");
2285
- $$renderer.push(`<label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Default since</span> <input class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="e.g. 7d, 2026-01-01"${attr("value", proc.defaultSince)}/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Max total chars</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1"${attr("value", proc.maxTotalChars)}/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Max chunk size (1–50)</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1" max="50"${attr("value", proc.maxChunkSize)}/></label>`);
2286
- } else $$renderer.push("<!--[-1-->");
2287
- $$renderer.push(`<!--]--> `);
2288
- if (key === "triage") {
2289
- $$renderer.push("<!--[0-->");
2290
- $$renderer.push(`<label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Apply mode</span> `);
2291
- $$renderer.select({
2292
- class: "control-input",
2293
- value: proc.applyMode
2294
- }, ($$renderer) => {
2295
- $$renderer.option({ value: "" }, ($$renderer) => {
2296
- $$renderer.push(`Default`);
2297
- });
2298
- $$renderer.option({ value: "queue" }, ($$renderer) => {
2299
- $$renderer.push(`Queue`);
2300
- });
2301
- $$renderer.option({ value: "promote" }, ($$renderer) => {
2302
- $$renderer.push(`Promote`);
2303
- });
2304
- }, "svelte-1ndbe78");
2305
- $$renderer.push(`</label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Policy</span> <input class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="policy name/ref"${attr("value", proc.policy)}/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Max accepts per run</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1"${attr("value", proc.maxAcceptsPerRun)}/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Max diff lines</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1"${attr("value", proc.maxDiffLines)}/></label> <label class="adv-field adv-field--check svelte-1ndbe78"><input type="checkbox"${attr("checked", proc.rejectEmpty, true)} class="svelte-1ndbe78"/> <span class="svelte-1ndbe78">Reject empty diffs</span></label> <div class="adv-field adv-field--wide svelte-1ndbe78"><span class="adv-sublabel svelte-1ndbe78">Judgment (overrides for the accept/reject decision)</span> <div class="proc-adv-grid svelte-1ndbe78"><label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Mode</span> `);
2306
- $$renderer.select({
2307
- class: "control-input",
2308
- value: proc.judgment.mode
2309
- }, ($$renderer) => {
2310
- $$renderer.option({ value: "" }, ($$renderer) => {
2311
- $$renderer.push(`Default`);
2312
- });
2313
- $$renderer.option({ value: "llm" }, ($$renderer) => {
2314
- $$renderer.push(`LLM`);
2315
- });
2316
- $$renderer.option({ value: "agent" }, ($$renderer) => {
2317
- $$renderer.push(`Agent`);
2318
- });
2319
- $$renderer.option({ value: "sdk" }, ($$renderer) => {
2320
- $$renderer.push(`SDK`);
2321
- });
2322
- }, "svelte-1ndbe78");
2323
- $$renderer.push(`</label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Profile</span> <input class="control-input svelte-1ndbe78" type="text" spellcheck="false" list="llm-profiles-list"${attr("value", proc.judgment.profile)}/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Timeout (ms)</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1"${attr("value", proc.judgment.timeoutMs)}/></label></div></div>`);
2324
- } else $$renderer.push("<!--[-1-->");
2325
- $$renderer.push(`<!--]--></div></details></div>`);
2326
- }
2327
- $$renderer.push(`<!--]--></div> <div class="controls controls--grid svelte-1ndbe78"><div class="control-group svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-sync">Git sync after run</label> `);
2328
- $$renderer.select({
2329
- id: "d-imp-sync",
2330
- class: "control-input",
2331
- value: draft.syncEnabled
2332
- }, ($$renderer) => {
2333
- $$renderer.option({ value: "" }, ($$renderer) => {
2334
- $$renderer.push(`Default`);
2335
- });
2336
- $$renderer.option({ value: "on" }, ($$renderer) => {
2337
- $$renderer.push(`Enabled`);
2338
- });
2339
- $$renderer.option({ value: "off" }, ($$renderer) => {
2340
- $$renderer.push(`Disabled`);
2341
- });
2342
- }, "svelte-1ndbe78");
2343
- $$renderer.push(`</div> <div class="control-group svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-syncpush">Push to remote</label> `);
2344
- $$renderer.select({
2345
- id: "d-imp-syncpush",
2346
- class: "control-input",
2347
- value: draft.syncPush
2348
- }, ($$renderer) => {
2349
- $$renderer.option({ value: "" }, ($$renderer) => {
2350
- $$renderer.push(`Default`);
2351
- });
2352
- $$renderer.option({ value: "on" }, ($$renderer) => {
2353
- $$renderer.push(`Enabled`);
2354
- });
2355
- $$renderer.option({ value: "off" }, ($$renderer) => {
2356
- $$renderer.push(`Disabled`);
2357
- });
2358
- }, "svelte-1ndbe78");
2359
- $$renderer.push(`</div> <div class="control-group control-group--wide svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-syncmsg">Commit message</label> <input id="d-imp-syncmsg" class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="Optional commit message"${attr("value", draft.syncMessage)}/></div></div></div> <div class="drawer-footer svelte-1ndbe78"><button class="btn btn-secondary">Cancel</button> <button class="btn btn-primary">Apply</button></div></div>`);
2360
- bind_props($$props, { draft });
2361
- });
2362
- }
2363
- //#endregion
2364
- //#region src/lib/components/akm/AkmTab.svelte
2365
- function AkmTab($$renderer, $$props) {
2366
- $$renderer.component(($$renderer) => {
2367
- let saving = false;
2368
- let detectingEmbedding = false;
2369
- let testingEmbedding = false;
2370
- let reindexing = false;
2371
- let error = "";
2372
- let llmProfiles = [];
2373
- let defaultLlmProfile = "";
2374
- let agentProfiles = [];
2375
- let defaultAgentProfile = "";
2376
- let improveProfiles = [];
2377
- let defaultImproveProfile = "";
2378
- let embEndpoint = "";
2379
- let embModel = "";
2380
- let embProvider = "";
2381
- let embApiKey = "";
2382
- let embDimension = 1536;
2383
- let embLocalModel = "";
2384
- let embBatchSize = "";
2385
- let embChunkSize = "";
2386
- let embContextLength = "";
2387
- let embOllamaNumCtx = "";
2388
- let drawerType = null;
2389
- let drawerLlm = null;
2390
- let drawerAgent = null;
2391
- let drawerImprove = null;
2392
- let llmProfileNames = derived(() => llmProfiles.map((p) => p.name).filter((n) => n));
2393
- function newLlmProfile() {
2394
- return {
2395
- id: crypto.randomUUID(),
2396
- name: "",
2397
- endpoint: "",
2398
- model: "",
2399
- provider: "",
2400
- apiKey: "",
2401
- showApiKey: false,
2402
- temperature: "",
2403
- maxTokens: "",
2404
- timeoutMs: "",
2405
- concurrency: "",
2406
- contextLength: "",
2407
- judgeModel: "",
2408
- supportsJsonSchema: false,
2409
- enableThinking: false,
2410
- structuredOutput: false,
2411
- extraParams: ""
2412
- };
2413
- }
2414
- function newAgentProfile() {
2415
- return {
2416
- id: crypto.randomUUID(),
2417
- name: "",
2418
- platform: "opencode",
2419
- bin: "",
2420
- args: "",
2421
- workspace: "",
2422
- model: ""
2423
- };
2424
- }
2425
- function newImproveProfile() {
2426
- const processes = {};
2427
- for (const k of PROCESS_KEYS) processes[k] = emptyFEntry(DEFAULT_ENABLED[k]);
2428
- return {
2429
- id: crypto.randomUUID(),
2430
- name: "",
2431
- description: "",
2432
- limit: 25,
2433
- autoAccept: 0,
2434
- processes,
2435
- syncEnabled: "",
2436
- syncPush: "",
2437
- syncMessage: ""
2438
- };
2439
- }
2440
- function openLlmDrawer(p) {
2441
- drawerLlm = { ...p };
2442
- drawerType = "llm";
2443
- }
2444
- function openAgentDrawer(p) {
2445
- drawerAgent = { ...p };
2446
- drawerType = "agent";
2447
- }
2448
- function openImproveDrawer(ip) {
2449
- const processes = {};
2450
- for (const k of PROCESS_KEYS) {
2451
- const src = ip.processes[k];
2452
- processes[k] = {
2453
- ...src,
2454
- judgment: { ...src.judgment },
2455
- rest: { ...src.rest }
2456
- };
2457
- }
2458
- drawerImprove = {
2459
- ...ip,
2460
- processes
2461
- };
2462
- drawerType = "improve";
2463
- }
2464
- function applyDrawer() {
2465
- if (drawerType === "llm" && drawerLlm) {
2466
- const copy = { ...drawerLlm };
2467
- const idx = llmProfiles.findIndex((p) => p.id === copy.id);
2468
- const oldName = idx >= 0 ? llmProfiles[idx].name : "";
2469
- llmProfiles = idx >= 0 ? llmProfiles.map((p, i) => i === idx ? copy : p) : [...llmProfiles, copy];
2470
- if (defaultLlmProfile === oldName) defaultLlmProfile = copy.name;
2471
- } else if (drawerType === "agent" && drawerAgent) {
2472
- const copy = { ...drawerAgent };
2473
- const idx = agentProfiles.findIndex((p) => p.id === copy.id);
2474
- const oldName = idx >= 0 ? agentProfiles[idx].name : "";
2475
- agentProfiles = idx >= 0 ? agentProfiles.map((p, i) => i === idx ? copy : p) : [...agentProfiles, copy];
2476
- if (defaultAgentProfile === oldName) defaultAgentProfile = copy.name;
2477
- } else if (drawerType === "improve" && drawerImprove) {
2478
- const copy = {
2479
- ...drawerImprove,
2480
- processes: { ...drawerImprove.processes }
2481
- };
2482
- const idx = improveProfiles.findIndex((ip) => ip.id === copy.id);
2483
- const oldName = idx >= 0 ? improveProfiles[idx].name : "";
2484
- improveProfiles = idx >= 0 ? improveProfiles.map((ip, i) => i === idx ? copy : ip) : [...improveProfiles, copy];
2485
- if (defaultImproveProfile === oldName) defaultImproveProfile = copy.name;
2486
- }
2487
- closeDrawer();
2488
- }
2489
- function closeDrawer() {
2490
- drawerType = null;
2491
- drawerLlm = null;
2492
- drawerAgent = null;
2493
- drawerImprove = null;
2494
- }
2495
- function removeProfile(type, id) {
2496
- if (type === "llm") {
2497
- const name = llmProfiles.find((p) => p.id === id)?.name ?? "";
2498
- if (defaultLlmProfile === name) defaultLlmProfile = "";
2499
- llmProfiles = llmProfiles.filter((p) => p.id !== id);
2500
- } else if (type === "agent") {
2501
- const name = agentProfiles.find((p) => p.id === id)?.name ?? "";
2502
- if (defaultAgentProfile === name) defaultAgentProfile = "";
2503
- agentProfiles = agentProfiles.filter((p) => p.id !== id);
2504
- } else {
2505
- const name = improveProfiles.find((ip) => ip.id === id)?.name ?? "";
2506
- if (defaultImproveProfile === name) defaultImproveProfile = "";
2507
- improveProfiles = improveProfiles.filter((ip) => ip.id !== id);
2508
- }
2509
- if (drawerType === type) closeDrawer();
2510
- }
2511
- async function detectEmbedding() {
2512
- detectingEmbedding = true;
2513
- error = "";
2514
- try {
2515
- const detected = await detectAkmEmbedding();
2516
- embEndpoint = detected.endpoint;
2517
- embModel = detected.model;
2518
- embProvider = detected.provider;
2519
- embDimension = detected.dimension;
2520
- notifications.push("success", detected.message);
2521
- } catch (e) {
2522
- const msg = e instanceof Error ? e.message : "Failed to detect embedding settings.";
2523
- notifications.push("error", msg);
2524
- } finally {
2525
- detectingEmbedding = false;
2526
- }
2527
- }
2528
- async function testEmbedding() {
2529
- testingEmbedding = true;
2530
- error = "";
2531
- try {
2532
- let endpoint = embEndpoint.trim();
2533
- let model = embModel.trim();
2534
- let provider = embProvider.trim();
2535
- if (!endpoint || !model) {
2536
- const detected = await detectAkmEmbedding();
2537
- endpoint = detected.endpoint;
2538
- model = detected.model;
2539
- provider = detected.provider;
2540
- embEndpoint = detected.endpoint;
2541
- embModel = detected.model;
2542
- embProvider = detected.provider;
2543
- embDimension = detected.dimension;
2544
- }
2545
- const result = await testAkmEmbedding({
2546
- endpoint,
2547
- model,
2548
- provider,
2549
- apiKey: embApiKey,
2550
- dimension: embDimension
2551
- });
2552
- embDimension = result.dimension;
2553
- notifications.push("success", result.message);
2554
- } catch (e) {
2555
- const msg = e instanceof Error ? e.message : "Failed to test embedding settings.";
2556
- notifications.push("error", msg);
2557
- } finally {
2558
- testingEmbedding = false;
2559
- }
2560
- }
2561
- let $$settled = true;
2562
- let $$inner_renderer;
2563
- function $$render_inner($$renderer) {
2564
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2 class="svelte-19wb2va">Knowledge</h2> <p class="panel-header-sub svelte-19wb2va">Memory · LLM · embedding config</p></div> <div class="panel-header-actions svelte-19wb2va"><button class="btn btn-secondary btn-sm"${attr("disabled", detectingEmbedding || testingEmbedding || false, true)}>`);
2565
- $$renderer.push("<!--[-1-->");
2566
- $$renderer.push(`<!--]--> Refresh</button> <button class="btn btn-secondary btn-sm"${attr("disabled", detectingEmbedding || testingEmbedding || false, true)}>`);
2567
- $$renderer.push("<!--[-1-->");
2568
- $$renderer.push(`<!--]--> Re-index</button> <button class="btn btn-primary btn-sm"${attr("disabled", detectingEmbedding || testingEmbedding || false, true)}>`);
2569
- $$renderer.push("<!--[-1-->");
2570
- $$renderer.push(`<!--]--> Save</button></div></div> `);
2571
- if (error) {
2572
- $$renderer.push("<!--[0-->");
2573
- $$renderer.push(`<div class="error-banner svelte-19wb2va"><span>${escape_html(error)}</span></div>`);
2574
- } else $$renderer.push("<!--[-1-->");
2575
- $$renderer.push(`<!--]--> <div class="panel-body svelte-19wb2va"><div class="k-tabs svelte-19wb2va" role="tablist" aria-label="Knowledge sections"><button role="tab"${attr_class("k-tab svelte-19wb2va", void 0, { "k-tab--active": true })}${attr("aria-selected", true)}>AI Services</button> <button role="tab"${attr_class("k-tab svelte-19wb2va", void 0, { "k-tab--active": false })}${attr("aria-selected", false)}>Behavior</button> <button role="tab"${attr_class("k-tab svelte-19wb2va", void 0, { "k-tab--active": false })}${attr("aria-selected", false)}>Health Report</button></div> `);
2576
- $$renderer.push("<!--[0-->");
2577
- AkmKnowledgeStatsSection($$renderer, { disabled: detectingEmbedding || testingEmbedding || false });
2578
- $$renderer.push(`<!----> <p class="section-note section-note--lead svelte-19wb2va">The AI services your assistant uses to build and search its memory — the language models that organize memories, the embedding provider for semantic search, and the maintenance pipeline.</p> `);
2579
- LlmProfilesSection($$renderer, {
2580
- disabled: saving,
2581
- onedit: (p) => openLlmDrawer(p),
2582
- onadd: () => {
2583
- drawerLlm = newLlmProfile();
2584
- drawerType = "llm";
2585
- },
2586
- onremove: (id) => removeProfile("llm", id),
2587
- get profiles() {
2588
- return llmProfiles;
2589
- },
2590
- set profiles($$value) {
2591
- llmProfiles = $$value;
2592
- $$settled = false;
2593
- },
2594
- get defaultName() {
2595
- return defaultLlmProfile;
2596
- },
2597
- set defaultName($$value) {
2598
- defaultLlmProfile = $$value;
2599
- $$settled = false;
2600
- }
2601
- });
2602
- $$renderer.push(`<!----> `);
2603
- AgentProfilesSection($$renderer, {
2604
- disabled: saving,
2605
- onedit: (p) => openAgentDrawer(p),
2606
- onadd: () => {
2607
- drawerAgent = newAgentProfile();
2608
- drawerType = "agent";
2609
- },
2610
- onremove: (id) => removeProfile("agent", id),
2611
- get profiles() {
2612
- return agentProfiles;
2613
- },
2614
- set profiles($$value) {
2615
- agentProfiles = $$value;
2616
- $$settled = false;
2617
- },
2618
- get defaultName() {
2619
- return defaultAgentProfile;
2620
- },
2621
- set defaultName($$value) {
2622
- defaultAgentProfile = $$value;
2623
- $$settled = false;
2624
- }
2625
- });
2626
- $$renderer.push(`<!----> `);
2627
- ImproveProfilesSection($$renderer, {
2628
- disabled: saving,
2629
- onedit: (ip) => openImproveDrawer(ip),
2630
- onadd: () => {
2631
- drawerImprove = newImproveProfile();
2632
- drawerType = "improve";
2633
- },
2634
- onremove: (id) => removeProfile("improve", id),
2635
- get profiles() {
2636
- return improveProfiles;
2637
- },
2638
- set profiles($$value) {
2639
- improveProfiles = $$value;
2640
- $$settled = false;
2641
- },
2642
- get defaultName() {
2643
- return defaultImproveProfile;
2644
- },
2645
- set defaultName($$value) {
2646
- defaultImproveProfile = $$value;
2647
- $$settled = false;
2648
- }
2649
- });
2650
- $$renderer.push(`<!----> `);
2651
- EmbeddingSection($$renderer, {
2652
- detecting: detectingEmbedding,
2653
- testing: testingEmbedding,
2654
- ondetect: () => void detectEmbedding(),
2655
- ontest: () => void testEmbedding(),
2656
- disabled: detectingEmbedding || testingEmbedding || reindexing,
2657
- get endpoint() {
2658
- return embEndpoint;
2659
- },
2660
- set endpoint($$value) {
2661
- embEndpoint = $$value;
2662
- $$settled = false;
2663
- },
2664
- get model() {
2665
- return embModel;
2666
- },
2667
- set model($$value) {
2668
- embModel = $$value;
2669
- $$settled = false;
2670
- },
2671
- get provider() {
2672
- return embProvider;
2673
- },
2674
- set provider($$value) {
2675
- embProvider = $$value;
2676
- $$settled = false;
2677
- },
2678
- get apiKey() {
2679
- return embApiKey;
2680
- },
2681
- set apiKey($$value) {
2682
- embApiKey = $$value;
2683
- $$settled = false;
2684
- },
2685
- get dimension() {
2686
- return embDimension;
2687
- },
2688
- set dimension($$value) {
2689
- embDimension = $$value;
2690
- $$settled = false;
2691
- },
2692
- get localModel() {
2693
- return embLocalModel;
2694
- },
2695
- set localModel($$value) {
2696
- embLocalModel = $$value;
2697
- $$settled = false;
2698
- },
2699
- get batchSize() {
2700
- return embBatchSize;
2701
- },
2702
- set batchSize($$value) {
2703
- embBatchSize = $$value;
2704
- $$settled = false;
2705
- },
2706
- get chunkSize() {
2707
- return embChunkSize;
2708
- },
2709
- set chunkSize($$value) {
2710
- embChunkSize = $$value;
2711
- $$settled = false;
2712
- },
2713
- get contextLength() {
2714
- return embContextLength;
2715
- },
2716
- set contextLength($$value) {
2717
- embContextLength = $$value;
2718
- $$settled = false;
2719
- },
2720
- get ollamaNumCtx() {
2721
- return embOllamaNumCtx;
2722
- },
2723
- set ollamaNumCtx($$value) {
2724
- embOllamaNumCtx = $$value;
2725
- $$settled = false;
2726
- }
2727
- });
2728
- $$renderer.push(`<!---->`);
2729
- $$renderer.push(`<!--]--> `);
2730
- $$renderer.push("<!--[-1-->");
2731
- $$renderer.push(`<!--]--> `);
2732
- $$renderer.push("<!--[-1-->");
2733
- $$renderer.push(`<!--]--></div> `);
2734
- if (drawerType === "llm" && drawerLlm) {
2735
- $$renderer.push("<!--[0-->");
2736
- LlmProfileDrawer($$renderer, {
2737
- oncancel: closeDrawer,
2738
- onapply: applyDrawer,
2739
- get draft() {
2740
- return drawerLlm;
2741
- },
2742
- set draft($$value) {
2743
- drawerLlm = $$value;
2744
- $$settled = false;
2745
- }
2746
- });
2747
- } else if (drawerType === "agent" && drawerAgent) {
2748
- $$renderer.push("<!--[1-->");
2749
- AgentProfileDrawer($$renderer, {
2750
- oncancel: closeDrawer,
2751
- onapply: applyDrawer,
2752
- get draft() {
2753
- return drawerAgent;
2754
- },
2755
- set draft($$value) {
2756
- drawerAgent = $$value;
2757
- $$settled = false;
2758
- }
2759
- });
2760
- } else if (drawerType === "improve" && drawerImprove) {
2761
- $$renderer.push("<!--[2-->");
2762
- ImproveProfileDrawer($$renderer, {
2763
- llmProfileNames: llmProfileNames(),
2764
- oncancel: closeDrawer,
2765
- onapply: applyDrawer,
2766
- get draft() {
2767
- return drawerImprove;
2768
- },
2769
- set draft($$value) {
2770
- drawerImprove = $$value;
2771
- $$settled = false;
2772
- }
2773
- });
2774
- } else $$renderer.push("<!--[-1-->");
2775
- $$renderer.push(`<!--]--></div>`);
2776
- }
2777
- do {
2778
- $$settled = true;
2779
- $$inner_renderer = $$renderer.copy();
2780
- $$render_inner($$inner_renderer);
2781
- } while (!$$settled);
2782
- $$renderer.subsume($$inner_renderer);
2783
- });
2784
- }
2785
- //#endregion
2786
- //#region src/lib/components/akm/HostSharingSection.svelte
2787
- function HostSharingSection($$renderer, $$props) {
2788
- $$renderer.component(($$renderer) => {
2789
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header svelte-fv9i73"><h2 class="svelte-fv9i73">Host knowledge sharing</h2></div> <div class="panel-body">`);
2790
- $$renderer.push("<!--[0-->");
2791
- $$renderer.push(`<div class="hs-loading svelte-fv9i73">`);
2792
- Spinner($$renderer, {});
2793
- $$renderer.push(`<!----> Checking host stash…</div>`);
2794
- $$renderer.push(`<!--]--></div></div>`);
2795
- });
2796
- }
2797
- //#endregion
2798
- //#region src/lib/components/voice/VoiceProfileSelector.svelte
2799
- function VoiceProfileSelector($$renderer, $$props) {
2800
- $$renderer.component(($$renderer) => {
2801
- let { profiles, selectedProfile, onchange, showDescription } = $$props;
2802
- const selectedInfo = derived(() => profiles.find((p) => p.id === selectedProfile) ?? profiles[0]);
2803
- showDescription ??= true;
2804
- if (profiles.length === 0) $$renderer.push("<!--[0-->");
2805
- else if (profiles.length === 1) {
2806
- $$renderer.push("<!--[1-->");
2807
- $$renderer.push(`<p class="profile-single svelte-11ub9pr">Using ${escape_html(selectedInfo()?.label ?? selectedInfo()?.id ?? "selected")}.</p>`);
2808
- } else {
2809
- $$renderer.push("<!--[-1-->");
2810
- if (showDescription) {
2811
- $$renderer.push("<!--[0-->");
2812
- $$renderer.push(`<p class="profile-desc svelte-11ub9pr">Select the profile that matches your hardware. GPU profiles are auto-selected when available.</p>`);
2813
- } else $$renderer.push("<!--[-1-->");
2814
- $$renderer.push(`<!--]--> <div class="form-field"><label class="form-label" for="voice-profile">Profile</label> `);
2815
- $$renderer.select({
2816
- id: "voice-profile",
2817
- class: "form-input",
2818
- value: selectedProfile,
2819
- onchange: (e) => onchange(e.currentTarget.value)
2820
- }, ($$renderer) => {
2821
- $$renderer.push(`<!--[-->`);
2822
- const each_array = ensure_array_like(profiles);
2823
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
2824
- let profile = each_array[$$index];
2825
- $$renderer.option({
2826
- value: profile.id,
2827
- disabled: profile.available === false,
2828
- title: profile.available === false ? profile.reason ?? "Not available on this host" : void 0
2829
- }, ($$renderer) => {
2830
- $$renderer.push(`${escape_html(profile.label ?? profile.id)}${escape_html(profile.available === false ? " — unavailable" : "")}`);
2831
- });
2832
- }
2833
- $$renderer.push(`<!--]-->`);
2834
- });
2835
- $$renderer.push(` `);
2836
- if (selectedInfo()?.requires) {
2837
- $$renderer.push("<!--[0-->");
2838
- $$renderer.push(`<span class="field-hint svelte-11ub9pr">Requires: ${escape_html(selectedInfo().requires)}</span>`);
2839
- } else $$renderer.push("<!--[-1-->");
2840
- $$renderer.push(`<!--]--> `);
2841
- if (selectedInfo()?.available === false) {
2842
- $$renderer.push("<!--[0-->");
2843
- $$renderer.push(`<span class="field-hint field-hint--warning svelte-11ub9pr">${escape_html(selectedInfo().reason ?? "This profile is not available on the current host.")}</span>`);
2844
- } else $$renderer.push("<!--[-1-->");
2845
- $$renderer.push(`<!--]--></div>`);
2846
- }
2847
- $$renderer.push(`<!--]-->`);
2848
- });
2849
- }
2850
- //#endregion
2851
- //#region src/lib/components/voice/VoiceAddonProfileSection.svelte
2852
- function VoiceAddonProfileSection($$renderer, $$props) {
2853
- let { profiles, selectedProfile, onchange } = $$props;
2854
- $$renderer.push(`<section class="engine-section svelte-1r7l91t"><h3 class="engine-heading svelte-1r7l91t">Hardware profile</h3> `);
2855
- VoiceProfileSelector($$renderer, {
2856
- profiles,
2857
- selectedProfile,
2858
- onchange
2859
- });
2860
- $$renderer.push(`<!----></section>`);
2861
- }
2862
- //#endregion
2863
- //#region src/lib/components/voice/VoiceTab.svelte
2864
- function VoiceTab($$renderer, $$props) {
2865
- $$renderer.component(($$renderer) => {
2866
- const ADMIN_TTS_OPTIONS = [
2867
- {
2868
- id: "openpalm-voice",
2869
- name: "OpenPalm Voice",
2870
- type: "local",
2871
- recommended: true,
2872
- desc: "Local Kokoro TTS + Whisper STT bundled together."
2873
- },
2874
- {
2875
- id: "remote",
2876
- name: "Remote (OpenAI-compatible)",
2877
- type: "cloud",
2878
- desc: "Point at any /v1/audio/speech endpoint (OpenAI, Kokoro, Piper, …)."
2879
- },
2880
- {
2881
- id: "browser",
2882
- name: "Browser",
2883
- type: "builtin",
2884
- desc: "Web Speech API on this device. No setup, voice quality varies."
2885
- }
2886
- ];
2887
- const ADMIN_STT_OPTIONS = [
2888
- {
2889
- id: "openpalm-voice",
2890
- name: "OpenPalm Voice",
2891
- type: "local",
2892
- recommended: true,
2893
- desc: "Local Kokoro TTS + Whisper STT bundled together."
2894
- },
2895
- {
2896
- id: "remote",
2897
- name: "Remote (OpenAI-compatible)",
2898
- type: "cloud",
2899
- desc: "Point at any /v1/audio/transcriptions endpoint (Whisper, …)."
2900
- },
2901
- {
2902
- id: "browser",
2903
- name: "Browser",
2904
- type: "builtin",
2905
- desc: "Web Speech API on this device. Chrome/Edge only on desktop."
2906
- }
2907
- ];
2908
- const ADMIN_TTS_ENGINES = {
2909
- "openpalm-voice": {
2910
- id: "openpalm-voice",
2911
- fields: []
2912
- },
2913
- remote: {
2914
- id: "remote",
2915
- fields: [
2916
- {
2917
- key: "baseURL",
2918
- label: "Endpoint URL",
2919
- placeholder: "http://host.docker.internal:8880/v1",
2920
- hint: "OpenAI-compatible /v1/audio/speech endpoint."
2921
- },
2922
- {
2923
- key: "model",
2924
- label: "Model",
2925
- placeholder: "tts-1"
2926
- },
2927
- {
2928
- key: "voice",
2929
- label: "Voice",
2930
- placeholder: "alloy"
2931
- }
2932
- ]
2933
- },
2934
- browser: {
2935
- id: "browser",
2936
- fields: []
2937
- }
2938
- };
2939
- const ADMIN_STT_ENGINES = {
2940
- "openpalm-voice": {
2941
- id: "openpalm-voice",
2942
- fields: []
2943
- },
2944
- remote: {
2945
- id: "remote",
2946
- fields: [
2947
- {
2948
- key: "baseURL",
2949
- label: "Endpoint URL",
2950
- placeholder: "http://host.docker.internal:9000/v1",
2951
- hint: "OpenAI-compatible /v1/audio/transcriptions endpoint."
2952
- },
2953
- {
2954
- key: "model",
2955
- label: "Model",
2956
- placeholder: "whisper-1"
2957
- },
2958
- {
2959
- key: "language",
2960
- label: "Language",
2961
- placeholder: "en",
2962
- hint: "A code like `en` or `fr`, or leave blank to detect."
2963
- }
2964
- ]
2965
- },
2966
- browser: {
2967
- id: "browser",
2968
- fields: [{
2969
- key: "language",
2970
- label: "Language",
2971
- placeholder: "en-US"
2972
- }]
2973
- }
2974
- };
2975
- const EMPTY_SECTION = () => ({
2976
- engine: "",
2977
- baseURL: "",
2978
- model: "",
2979
- voice: "",
2980
- language: ""
2981
- });
2982
- let tts = EMPTY_SECTION();
2983
- let stt = EMPTY_SECTION();
2984
- let addonProfiles = [];
2985
- let selectedProfile = "";
2986
- const wantsOpenpalmVoice = derived(() => tts.engine === "openpalm-voice" || stt.engine === "openpalm-voice");
2987
- let browserSttAvailable = false;
2988
- const browserSttDisabled = derived(() => browserSttAvailable);
2989
- const browserSttDisabledReason = derived(() => voiceState.browserSttUnsupportedReason ?? "");
2990
- $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Voice</h2> <p class="panel-subtitle">Speech-to-text · text-to-speech</p></div> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"${attr("disabled", false, true)}>`);
2991
- $$renderer.push("<!--[-1-->");
2992
- $$renderer.push(`<!--]--> Refresh</button> <button class="btn btn-primary btn-sm"${attr("disabled", false, true)}>`);
2993
- $$renderer.push("<!--[-1-->");
2994
- $$renderer.push(`<!--]--> Save</button></div></div> `);
2995
- $$renderer.push("<!--[-1-->");
2996
- $$renderer.push(`<!--]--> <div class="panel-body svelte-nokcxu"><div class="voice-grid svelte-nokcxu"><div class="section-card svelte-nokcxu"><div class="sc-title svelte-nokcxu">Speech-to-text (STT)</div> <div class="field svelte-nokcxu"><label class="field-label svelte-nokcxu" for="stt-engine">Engine</label> `);
2997
- $$renderer.select({
2998
- id: "stt-engine",
2999
- class: "field-select",
3000
- value: stt.engine,
3001
- onchange: (e) => {
3002
- stt.engine = e.currentTarget.value;
3003
- },
3004
- disabled: false
3005
- }, ($$renderer) => {
3006
- $$renderer.option({ value: "" }, ($$renderer) => {
3007
- $$renderer.push(`— select engine —`);
3008
- });
3009
- $$renderer.push(`<!--[-->`);
3010
- const each_array = ensure_array_like(ADMIN_STT_OPTIONS);
3011
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
3012
- let o = each_array[$$index];
3013
- if (o.id !== "browser") {
3014
- $$renderer.push("<!--[0-->");
3015
- $$renderer.option({
3016
- value: o.id,
3017
- disabled: o.id === "browser" && browserSttDisabled()
3018
- }, ($$renderer) => {
3019
- $$renderer.push(`${escape_html(o.name)}`);
3020
- });
3021
- } else $$renderer.push("<!--[-1-->");
3022
- $$renderer.push(`<!--]-->`);
3023
- }
3024
- $$renderer.push(`<!--]-->`);
3025
- }, "svelte-nokcxu");
3026
- $$renderer.push(` `);
3027
- $$renderer.push("<!--[-1-->");
3028
- $$renderer.push(`<!--]--></div> `);
3029
- if (stt.engine) {
3030
- $$renderer.push("<!--[0-->");
3031
- $$renderer.push(`<!--[-->`);
3032
- const each_array_1 = ensure_array_like(ADMIN_STT_ENGINES[stt.engine]?.fields ?? []);
3033
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
3034
- let field = each_array_1[$$index_1];
3035
- $$renderer.push(`<div class="field svelte-nokcxu"><label class="field-label svelte-nokcxu"${attr("for", `stt-${stringify(field.key)}`)}>${escape_html(field.label)}</label> <input${attr("id", `stt-${stringify(field.key)}`)}${attr("type", field.key === "baseURL" ? "url" : "text")} class="field-input svelte-nokcxu"${attr("placeholder", field.placeholder ?? "")}${attr("value", field.key === "baseURL" ? stt.baseURL : field.key === "model" ? stt.model : stt.language)}${attr("disabled", false, true)} autocomplete="off"/> `);
3036
- if (field.hint) {
3037
- $$renderer.push("<!--[0-->");
3038
- $$renderer.push(`<p class="field-hint svelte-nokcxu">${escape_html(field.hint)}</p>`);
3039
- } else $$renderer.push("<!--[-1-->");
3040
- $$renderer.push(`<!--]--></div>`);
3041
- }
3042
- $$renderer.push(`<!--]--> `);
3043
- if (stt.engine === "browser" && browserSttDisabled()) {
3044
- $$renderer.push("<!--[0-->");
3045
- $$renderer.push(`<p class="field-hint field-hint--warn svelte-nokcxu">${escape_html(browserSttDisabledReason())}</p>`);
3046
- } else $$renderer.push("<!--[-1-->");
3047
- $$renderer.push(`<!--]-->`);
3048
- } else $$renderer.push("<!--[-1-->");
3049
- $$renderer.push(`<!--]--></div> <div class="section-card svelte-nokcxu"><div class="sc-title svelte-nokcxu">Text-to-speech (TTS)</div> <div class="field svelte-nokcxu"><label class="field-label svelte-nokcxu" for="tts-engine">Engine</label> `);
3050
- $$renderer.select({
3051
- id: "tts-engine",
3052
- class: "field-select",
3053
- value: tts.engine,
3054
- onchange: (e) => {
3055
- tts.engine = e.currentTarget.value;
3056
- },
3057
- disabled: false
3058
- }, ($$renderer) => {
3059
- $$renderer.option({ value: "" }, ($$renderer) => {
3060
- $$renderer.push(`— select engine —`);
3061
- });
3062
- $$renderer.push(`<!--[-->`);
3063
- const each_array_2 = ensure_array_like(ADMIN_TTS_OPTIONS);
3064
- for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {
3065
- let o = each_array_2[$$index_2];
3066
- if (o.id !== "browser") {
3067
- $$renderer.push("<!--[0-->");
3068
- $$renderer.option({ value: o.id }, ($$renderer) => {
3069
- $$renderer.push(`${escape_html(o.name)}`);
3070
- });
3071
- } else $$renderer.push("<!--[-1-->");
3072
- $$renderer.push(`<!--]-->`);
3073
- }
3074
- $$renderer.push(`<!--]-->`);
3075
- }, "svelte-nokcxu");
3076
- $$renderer.push(` `);
3077
- $$renderer.push("<!--[-1-->");
3078
- $$renderer.push(`<!--]--></div> `);
3079
- if (tts.engine) {
3080
- $$renderer.push("<!--[0-->");
3081
- $$renderer.push(`<!--[-->`);
3082
- const each_array_3 = ensure_array_like(ADMIN_TTS_ENGINES[tts.engine]?.fields ?? []);
3083
- for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
3084
- let field = each_array_3[$$index_3];
3085
- $$renderer.push(`<div class="field svelte-nokcxu"><label class="field-label svelte-nokcxu"${attr("for", `tts-${stringify(field.key)}`)}>${escape_html(field.label)}</label> <input${attr("id", `tts-${stringify(field.key)}`)}${attr("type", field.key === "baseURL" ? "url" : "text")} class="field-input svelte-nokcxu"${attr("placeholder", field.placeholder ?? "")}${attr("value", field.key === "baseURL" ? tts.baseURL : field.key === "model" ? tts.model : tts.voice)}${attr("disabled", false, true)} autocomplete="off"/> `);
3086
- if (field.hint) {
3087
- $$renderer.push("<!--[0-->");
3088
- $$renderer.push(`<p class="field-hint svelte-nokcxu">${escape_html(field.hint)}</p>`);
3089
- } else $$renderer.push("<!--[-1-->");
3090
- $$renderer.push(`<!--]--></div>`);
3091
- }
3092
- $$renderer.push(`<!--]-->`);
3093
- } else $$renderer.push("<!--[-1-->");
3094
- $$renderer.push(`<!--]--> <div class="sc-foot svelte-nokcxu"><div class="test-row svelte-nokcxu"><button type="button" class="btn btn-secondary btn-sm"${attr("disabled", !tts.engine, true)}>`);
3095
- $$renderer.push("<!--[-1-->");
3096
- $$renderer.push(`<!--]--> Test speaker</button> `);
3097
- $$renderer.push("<!--[-1-->");
3098
- $$renderer.push(`<!--]--></div> <label class="auto-speak-toggle svelte-nokcxu"><input type="checkbox"${attr("checked", voiceState.ttsAutoEnabled, true)} class="svelte-nokcxu"/> <span>Speak replies automatically</span></label></div></div></div> `);
3099
- if (wantsOpenpalmVoice() && addonProfiles.length > 0) {
3100
- $$renderer.push("<!--[0-->");
3101
- VoiceAddonProfileSection($$renderer, {
3102
- profiles: addonProfiles,
3103
- selectedProfile,
3104
- onchange: (id) => selectedProfile = id
3105
- });
3106
- } else $$renderer.push("<!--[-1-->");
3107
- $$renderer.push(`<!--]--></div></div>`);
3108
- });
3109
- }
3110
- //#endregion
3111
- //#region src/routes/admin/+page.svelte
3112
- function _page($$renderer, $$props) {
3113
- $$renderer.component(($$renderer) => {
3114
- let healthLoading = false;
3115
- let containersLoading = false;
3116
- let automationsLoading = false;
3117
- let containerData = null;
3118
- let containerError = "";
3119
- let containersLastUpdated = null;
3120
- let automationsData = null;
3121
- let automationsError = "";
3122
- let selectedContainerId = null;
3123
- let activeTab = "overview";
3124
- onDestroy(() => {
3125
- });
3126
- /** Merged service → state map (used by OverviewTab for health indicators) */
3127
- let mergedServices = derived(() => {
3128
- if (!containerData) return new SvelteMap();
3129
- const merged = new SvelteMap();
3130
- if (containerData.containers) for (const [name, state] of Object.entries(containerData.containers)) merged.set(name, state);
3131
- if (containerData.dockerContainers) for (const c of containerData.dockerContainers) merged.set(c.Service, c.State);
3132
- return merged;
3133
- });
3134
- /** Full merged ServiceEntry list (used by ContainersTab for detail rows) */
3135
- let serviceEntries = derived(() => {
3136
- if (!containerData) return [];
3137
- const byService = new SvelteMap();
3138
- if (containerData.containers) for (const [name, state] of Object.entries(containerData.containers)) byService.set(name, {
3139
- id: name,
3140
- service: name,
3141
- state,
3142
- docker: null
3143
- });
3144
- if (containerData.dockerContainers) for (const c of containerData.dockerContainers) {
3145
- const existing = byService.get(c.Service);
3146
- if (existing) {
3147
- existing.state = c.State;
3148
- existing.docker = c;
3149
- existing.id = c.ID;
3150
- } else byService.set(c.Service, {
3151
- id: c.ID,
3152
- service: c.Service || c.Name,
3153
- state: c.State,
3154
- docker: c
3155
- });
3156
- }
3157
- return [...byService.values()].sort((a, b) => {
3158
- if (a.state === "running" && b.state !== "running") return -1;
3159
- if (a.state !== "running" && b.state === "running") return 1;
3160
- return a.service.localeCompare(b.service);
3161
- });
3162
- });
3163
- function applyInvalidTokenState() {
3164
- goto();
3165
- }
3166
- async function loadContainers() {
3167
- containersLoading = true;
3168
- containerError = "";
3169
- try {
3170
- containerData = await fetchContainers();
3171
- } catch (e) {
3172
- containerData = null;
3173
- const err = e;
3174
- if (err.status === 401) {
3175
- containerError = "Invalid password.";
3176
- applyInvalidTokenState();
3177
- } else containerError = `Failed to load containers: ${err.message ?? e}`;
3178
- }
3179
- containersLoading = false;
3180
- if (containerData) containersLastUpdated = formatTime(Date.now());
3181
- }
3182
- async function loadAutomations() {
3183
- automationsLoading = true;
3184
- automationsError = "";
3185
- try {
3186
- automationsData = await fetchAutomations();
3187
- } catch (e) {
3188
- automationsData = null;
3189
- const err = e;
3190
- if (err.status === 401) {
3191
- automationsError = "Invalid password.";
3192
- applyInvalidTokenState();
3193
- } else automationsError = `Failed to load automations: ${err.message ?? e}`;
3194
- }
3195
- automationsLoading = false;
3196
- }
3197
- /** Derive service names from container data for the logs tab */
3198
- let serviceNames = derived(() => {
3199
- if (!containerData) return [];
3200
- const names = new SvelteSet();
3201
- if (containerData.containers) for (const name of Object.keys(containerData.containers)) names.add(name);
3202
- if (containerData.dockerContainers) {
3203
- for (const c of containerData.dockerContainers) if (c.Service) names.add(c.Service);
3204
- }
3205
- return [...names].sort();
3206
- });
3207
- function handleTabSelect(tab) {
3208
- activeTab = tab;
3209
- if (tab === "containers" && !containerData) loadContainers();
3210
- if (tab === "automations" && !automationsData) loadAutomations();
3211
- }
3212
- head("1jef3w8", $$renderer, ($$renderer) => {
3213
- $$renderer.title(($$renderer) => {
3214
- $$renderer.push(`<title>OpenPalm Console</title>`);
3215
- });
3216
- });
3217
- Navbar($$renderer);
3218
- $$renderer.push(`<!----> `);
3219
- TabBar($$renderer, {
3220
- active: activeTab});
3221
- $$renderer.push(`<!----> <main class="svelte-1jef3w8">`);
3222
- if (activeTab === "overview") {
3223
- $$renderer.push("<!--[0-->");
3224
- OverviewTab($$renderer, {
3225
- healthLoading,
3226
- mergedServices: mergedServices(),
3227
- managedServices: containerData?.managedServices ?? [],
3228
- onNavigate: handleTabSelect
3229
- });
3230
- } else if (activeTab === "updates") {
3231
- $$renderer.push("<!--[1-->");
3232
- UpdatesTab($$renderer);
3233
- } else if (activeTab === "recovery") {
3234
- $$renderer.push("<!--[2-->");
3235
- RecoveryTab($$renderer);
3236
- } else if (activeTab === "addons") {
3237
- $$renderer.push("<!--[3-->");
3238
- AddonsTab($$renderer);
3239
- } else if (activeTab === "containers") {
3240
- $$renderer.push("<!--[4-->");
3241
- ContainersTab($$renderer, {
3242
- containerData,
3243
- serviceEntries: serviceEntries(),
3244
- loading: containersLoading,
3245
- error: containerError,
3246
- selectedContainerId,
3247
- lastUpdated: containersLastUpdated});
3248
- } else if (activeTab === "automations") {
3249
- $$renderer.push("<!--[5-->");
3250
- AutomationsTab($$renderer, {
3251
- data: automationsData,
3252
- loading: automationsLoading,
3253
- error: automationsError});
3254
- } else if (activeTab === "activity") {
3255
- $$renderer.push("<!--[6-->");
3256
- ActivityTab($$renderer);
3257
- } else if (activeTab === "connections") {
3258
- $$renderer.push("<!--[7-->");
3259
- ProvidersPanel($$renderer);
3260
- } else if (activeTab === "assistant") {
3261
- $$renderer.push("<!--[8-->");
3262
- AssistantTab($$renderer);
3263
- } else if (activeTab === "secrets") {
3264
- $$renderer.push("<!--[9-->");
3265
- SecretsTab($$renderer);
3266
- } else $$renderer.push("<!--[-1-->");
3267
- $$renderer.push(`<!--]--> `);
3268
- if (activeTab === "voice") {
3269
- $$renderer.push("<!--[0-->");
3270
- VoiceTab($$renderer);
3271
- } else if (activeTab === "akm") {
3272
- $$renderer.push("<!--[1-->");
3273
- AkmTab($$renderer);
3274
- } else if (activeTab === "host-sharing") {
3275
- $$renderer.push("<!--[2-->");
3276
- HostSharingSection($$renderer);
3277
- } else if (activeTab === "logs") {
3278
- $$renderer.push("<!--[3-->");
3279
- LogsTab($$renderer, {
3280
- services: serviceNames(),
3281
- automations: automationsData?.automations.map((automation) => automation.name) ?? []
3282
- });
3283
- } else $$renderer.push("<!--[-1-->");
3284
- $$renderer.push(`<!--]--></main>`);
3285
- });
3286
- }
3287
-
3288
- export { _page as default };
3289
- //# sourceMappingURL=_page.svelte-Boq5WJfs.js.map