@openpalm/ui 0.12.39 → 0.12.40

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 (301) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/chunks/Bsg7sBlb.js +3 -0
  3. package/build/client/_app/immutable/chunks/Bsg7sBlb.js.br +0 -0
  4. package/build/client/_app/immutable/chunks/Bsg7sBlb.js.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{CbjV9aWv.js → Czcr5HB0.js} +1 -1
  6. package/build/client/_app/immutable/chunks/Czcr5HB0.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/Czcr5HB0.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{Db-TLwUL.js → DUJX2MYt.js} +1 -1
  9. package/build/client/_app/immutable/chunks/DUJX2MYt.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/DUJX2MYt.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/DlYBvMRy.js +1 -0
  12. package/build/client/_app/immutable/chunks/DlYBvMRy.js.br +2 -0
  13. package/build/client/_app/immutable/chunks/DlYBvMRy.js.gz +0 -0
  14. package/build/client/_app/immutable/entry/{app.DnBBy3p-.js → app.x5ZVslqs.js} +2 -2
  15. package/build/client/_app/immutable/entry/app.x5ZVslqs.js.br +0 -0
  16. package/build/client/_app/immutable/entry/app.x5ZVslqs.js.gz +0 -0
  17. package/build/client/_app/immutable/entry/start.DCJDp6vd.js +1 -0
  18. package/build/client/_app/immutable/entry/start.DCJDp6vd.js.br +1 -0
  19. package/build/client/_app/immutable/entry/start.DCJDp6vd.js.gz +0 -0
  20. package/build/client/_app/immutable/nodes/{1.BZwp0xOZ.js → 1.ogX3FFAz.js} +1 -1
  21. package/build/client/_app/immutable/nodes/1.ogX3FFAz.js.br +0 -0
  22. package/build/client/_app/immutable/nodes/1.ogX3FFAz.js.gz +0 -0
  23. package/build/client/_app/immutable/nodes/{4.CWFpIl_V.js → 4.Manm8y12.js} +2 -2
  24. package/build/client/_app/immutable/nodes/4.Manm8y12.js.br +0 -0
  25. package/build/client/_app/immutable/nodes/4.Manm8y12.js.gz +0 -0
  26. package/build/client/_app/immutable/nodes/{5.BjjtMuH9.js → 5.Be7F1t9M.js} +1 -1
  27. package/build/client/_app/immutable/nodes/5.Be7F1t9M.js.br +0 -0
  28. package/build/client/_app/immutable/nodes/5.Be7F1t9M.js.gz +0 -0
  29. package/build/client/_app/immutable/nodes/{6.BmRYMxmN.js → 6.BJuDlVTi.js} +1 -1
  30. package/build/client/_app/immutable/nodes/6.BJuDlVTi.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/6.BJuDlVTi.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{7.Ckz2SrmP.js → 7.KhiZ1Qr0.js} +1 -1
  33. package/build/client/_app/immutable/nodes/7.KhiZ1Qr0.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/7.KhiZ1Qr0.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{8.BUpRt-6y.js → 8.BH307vA6.js} +1 -1
  36. package/build/client/_app/immutable/nodes/8.BH307vA6.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/8.BH307vA6.js.gz +0 -0
  38. package/build/client/_app/version.json +1 -1
  39. package/build/client/_app/version.json.br +1 -1
  40. package/build/client/_app/version.json.gz +0 -0
  41. package/build/server/chunks/1-Cz5RQYrU.js +9 -0
  42. package/build/server/chunks/{1-DI42Ccm8.js.map → 1-Cz5RQYrU.js.map} +1 -1
  43. package/build/server/chunks/{10-DygJsCTt.js → 10-GWklmSZJ.js} +5 -5
  44. package/build/server/chunks/{10-DygJsCTt.js.map → 10-GWklmSZJ.js.map} +1 -1
  45. package/build/server/chunks/{4-OI7kefFJ.js → 4-D0d1egcA.js} +3 -3
  46. package/build/server/chunks/{4-OI7kefFJ.js.map → 4-D0d1egcA.js.map} +1 -1
  47. package/build/server/chunks/{5-1Fo1493W.js → 5-Qirv8w3l.js} +3 -3
  48. package/build/server/chunks/{5-1Fo1493W.js.map → 5-Qirv8w3l.js.map} +1 -1
  49. package/build/server/chunks/{6-C0miH3m9.js → 6-nw0G5ylV.js} +3 -3
  50. package/build/server/chunks/{6-C0miH3m9.js.map → 6-nw0G5ylV.js.map} +1 -1
  51. package/build/server/chunks/{7-D1tRpH-T.js → 7-DB0kUWf8.js} +3 -3
  52. package/build/server/chunks/{7-D1tRpH-T.js.map → 7-DB0kUWf8.js.map} +1 -1
  53. package/build/server/chunks/{8-BUn30EAI.js → 8-BzkBAq7X.js} +3 -3
  54. package/build/server/chunks/{8-BUn30EAI.js.map → 8-BzkBAq7X.js.map} +1 -1
  55. package/build/server/chunks/{Navbar-V5WYYroV.js → Navbar-MfQzgadK.js} +3 -3
  56. package/build/server/chunks/{Navbar-V5WYYroV.js.map → Navbar-MfQzgadK.js.map} +1 -1
  57. package/build/server/chunks/{_page.svelte-B0LQjTTl.js → _page.svelte-Bo3seukm.js} +3 -3
  58. package/build/server/chunks/{_page.svelte-B0LQjTTl.js.map → _page.svelte-Bo3seukm.js.map} +1 -1
  59. package/build/server/chunks/{_page.svelte-BUtdAAHy.js → _page.svelte-BxgZa05w.js} +5 -5
  60. package/build/server/chunks/{_page.svelte-BUtdAAHy.js.map → _page.svelte-BxgZa05w.js.map} +1 -1
  61. package/build/server/chunks/{_page.svelte-BvgIrB0l.js → _page.svelte-HvXtL0OF.js} +5 -5
  62. package/build/server/chunks/{_page.svelte-BvgIrB0l.js.map → _page.svelte-HvXtL0OF.js.map} +1 -1
  63. package/build/server/chunks/{_page.svelte-DC5mfPYI.js → _page.svelte-K7mqxOfx.js} +5 -5
  64. package/build/server/chunks/{_page.svelte-DC5mfPYI.js.map → _page.svelte-K7mqxOfx.js.map} +1 -1
  65. package/build/server/chunks/{_page.svelte-rMzAcw6P.js → _page.svelte-yYYXLkkv.js} +3 -3
  66. package/build/server/chunks/{_page.svelte-rMzAcw6P.js.map → _page.svelte-yYYXLkkv.js.map} +1 -1
  67. package/build/server/chunks/{_server.ts-DtzCH63P.js → _server.ts--ZkUtGm5.js} +4 -4
  68. package/build/server/chunks/{_server.ts-DtzCH63P.js.map → _server.ts--ZkUtGm5.js.map} +1 -1
  69. package/build/server/chunks/{_server.ts-BTcHO5bX.js → _server.ts-2yT-HeDo.js} +5 -5
  70. package/build/server/chunks/{_server.ts-BTcHO5bX.js.map → _server.ts-2yT-HeDo.js.map} +1 -1
  71. package/build/server/chunks/{_server.ts-Cnm-gOvs.js → _server.ts-9bpEdxei.js} +7 -7
  72. package/build/server/chunks/{_server.ts-Cnm-gOvs.js.map → _server.ts-9bpEdxei.js.map} +1 -1
  73. package/build/server/chunks/{_server.ts-6nz9WpjA.js → _server.ts-B0Q7kabg.js} +5 -5
  74. package/build/server/chunks/{_server.ts-6nz9WpjA.js.map → _server.ts-B0Q7kabg.js.map} +1 -1
  75. package/build/server/chunks/{_server.ts-BnMSj5yz.js → _server.ts-B8e761jl.js} +6 -6
  76. package/build/server/chunks/{_server.ts-BnMSj5yz.js.map → _server.ts-B8e761jl.js.map} +1 -1
  77. package/build/server/chunks/{_server.ts-DnbvDRgj.js → _server.ts-B9oPs4BP.js} +6 -6
  78. package/build/server/chunks/{_server.ts-DnbvDRgj.js.map → _server.ts-B9oPs4BP.js.map} +1 -1
  79. package/build/server/chunks/{_server.ts-DFf5g6zS.js → _server.ts-BEQKCY3C.js} +6 -6
  80. package/build/server/chunks/{_server.ts-DFf5g6zS.js.map → _server.ts-BEQKCY3C.js.map} +1 -1
  81. package/build/server/chunks/{_server.ts-D_FDcuWo.js → _server.ts-BFeaJaPP.js} +5 -5
  82. package/build/server/chunks/{_server.ts-D_FDcuWo.js.map → _server.ts-BFeaJaPP.js.map} +1 -1
  83. package/build/server/chunks/{_server.ts-CAryEfg5.js → _server.ts-BJ8iu9GG.js} +5 -5
  84. package/build/server/chunks/{_server.ts-CAryEfg5.js.map → _server.ts-BJ8iu9GG.js.map} +1 -1
  85. package/build/server/chunks/{_server.ts-5uPW017t.js → _server.ts-BRXhpPBA.js} +5 -5
  86. package/build/server/chunks/{_server.ts-5uPW017t.js.map → _server.ts-BRXhpPBA.js.map} +1 -1
  87. package/build/server/chunks/{_server.ts-DcFHX6Eq.js → _server.ts-BSEDW53_.js} +5 -5
  88. package/build/server/chunks/{_server.ts-DcFHX6Eq.js.map → _server.ts-BSEDW53_.js.map} +1 -1
  89. package/build/server/chunks/{_server.ts-BK7Faygt.js → _server.ts-BXZITnq1.js} +7 -7
  90. package/build/server/chunks/{_server.ts-BK7Faygt.js.map → _server.ts-BXZITnq1.js.map} +1 -1
  91. package/build/server/chunks/{_server.ts-BNoCPvGI.js → _server.ts-Bj4apCtM.js} +5 -5
  92. package/build/server/chunks/{_server.ts-BNoCPvGI.js.map → _server.ts-Bj4apCtM.js.map} +1 -1
  93. package/build/server/chunks/{_server.ts-CcxP6ryz.js → _server.ts-BkRngUey.js} +5 -5
  94. package/build/server/chunks/{_server.ts-CcxP6ryz.js.map → _server.ts-BkRngUey.js.map} +1 -1
  95. package/build/server/chunks/{_server.ts-Pd-Jn9ra.js → _server.ts-Bkb73mr9.js} +7 -7
  96. package/build/server/chunks/{_server.ts-Pd-Jn9ra.js.map → _server.ts-Bkb73mr9.js.map} +1 -1
  97. package/build/server/chunks/{_server.ts-Db7dBiHY.js → _server.ts-Br2dODCL.js} +5 -5
  98. package/build/server/chunks/{_server.ts-Db7dBiHY.js.map → _server.ts-Br2dODCL.js.map} +1 -1
  99. package/build/server/chunks/{_server.ts-hwbxaTbX.js → _server.ts-Brrms0Fc.js} +6 -6
  100. package/build/server/chunks/{_server.ts-hwbxaTbX.js.map → _server.ts-Brrms0Fc.js.map} +1 -1
  101. package/build/server/chunks/{_server.ts-B1Mt06_U.js → _server.ts-BtaY1y3y.js} +2 -2
  102. package/build/server/chunks/{_server.ts-B1Mt06_U.js.map → _server.ts-BtaY1y3y.js.map} +1 -1
  103. package/build/server/chunks/{_server.ts-B54alxy9.js → _server.ts-BxRl9hS5.js} +5 -5
  104. package/build/server/chunks/{_server.ts-B54alxy9.js.map → _server.ts-BxRl9hS5.js.map} +1 -1
  105. package/build/server/chunks/{_server.ts-DSgNeCHN.js → _server.ts-Bxz62kXm.js} +5 -5
  106. package/build/server/chunks/{_server.ts-DSgNeCHN.js.map → _server.ts-Bxz62kXm.js.map} +1 -1
  107. package/build/server/chunks/{_server.ts-DKSJKE2w.js → _server.ts-ByyvEmAQ.js} +6 -6
  108. package/build/server/chunks/{_server.ts-DKSJKE2w.js.map → _server.ts-ByyvEmAQ.js.map} +1 -1
  109. package/build/server/chunks/{_server.ts-B6gM3i7f.js → _server.ts-C-Xiy-iY.js} +5 -5
  110. package/build/server/chunks/{_server.ts-B6gM3i7f.js.map → _server.ts-C-Xiy-iY.js.map} +1 -1
  111. package/build/server/chunks/{_server.ts-DRqaoQDK.js → _server.ts-C4TgNZH0.js} +5 -5
  112. package/build/server/chunks/{_server.ts-DRqaoQDK.js.map → _server.ts-C4TgNZH0.js.map} +1 -1
  113. package/build/server/chunks/{_server.ts-CVJbAy4Q.js → _server.ts-C6SCNV2o.js} +5 -5
  114. package/build/server/chunks/{_server.ts-CVJbAy4Q.js.map → _server.ts-C6SCNV2o.js.map} +1 -1
  115. package/build/server/chunks/{_server.ts-BtUfRMI8.js → _server.ts-CA4hOrnY.js} +5 -5
  116. package/build/server/chunks/{_server.ts-BtUfRMI8.js.map → _server.ts-CA4hOrnY.js.map} +1 -1
  117. package/build/server/chunks/{_server.ts-CxUuC7uQ.js → _server.ts-CD7Ib3A4.js} +5 -5
  118. package/build/server/chunks/{_server.ts-CxUuC7uQ.js.map → _server.ts-CD7Ib3A4.js.map} +1 -1
  119. package/build/server/chunks/{_server.ts-x1SEistQ.js → _server.ts-CGN2odjK.js} +5 -5
  120. package/build/server/chunks/{_server.ts-x1SEistQ.js.map → _server.ts-CGN2odjK.js.map} +1 -1
  121. package/build/server/chunks/{_server.ts-C6uGNPXd.js → _server.ts-CGyN5jXH.js} +2 -2
  122. package/build/server/chunks/{_server.ts-C6uGNPXd.js.map → _server.ts-CGyN5jXH.js.map} +1 -1
  123. package/build/server/chunks/{_server.ts-BEdiBrmg.js → _server.ts-CK6_9G3w.js} +5 -5
  124. package/build/server/chunks/{_server.ts-BEdiBrmg.js.map → _server.ts-CK6_9G3w.js.map} +1 -1
  125. package/build/server/chunks/{_server.ts-CeOAlknT.js → _server.ts-CKvJq7Mj.js} +5 -5
  126. package/build/server/chunks/{_server.ts-CeOAlknT.js.map → _server.ts-CKvJq7Mj.js.map} +1 -1
  127. package/build/server/chunks/{_server.ts-B1dKp4Xy.js → _server.ts-CMTGEK8b.js} +5 -5
  128. package/build/server/chunks/{_server.ts-B1dKp4Xy.js.map → _server.ts-CMTGEK8b.js.map} +1 -1
  129. package/build/server/chunks/{_server.ts-V3m3UigC.js → _server.ts-CTmNXikA.js} +5 -5
  130. package/build/server/chunks/{_server.ts-V3m3UigC.js.map → _server.ts-CTmNXikA.js.map} +1 -1
  131. package/build/server/chunks/{_server.ts-CoESpzvX.js → _server.ts-C__j2tre.js} +5 -5
  132. package/build/server/chunks/{_server.ts-CoESpzvX.js.map → _server.ts-C__j2tre.js.map} +1 -1
  133. package/build/server/chunks/{_server.ts-kj-V1b1t.js → _server.ts-Cb6UITYH.js} +6 -6
  134. package/build/server/chunks/{_server.ts-kj-V1b1t.js.map → _server.ts-Cb6UITYH.js.map} +1 -1
  135. package/build/server/chunks/{_server.ts-B8QHjkBw.js → _server.ts-Cbz8aj-X.js} +5 -5
  136. package/build/server/chunks/{_server.ts-B8QHjkBw.js.map → _server.ts-Cbz8aj-X.js.map} +1 -1
  137. package/build/server/chunks/{_server.ts-B4si1bjV.js → _server.ts-Cg2y0otm.js} +5 -5
  138. package/build/server/chunks/{_server.ts-B4si1bjV.js.map → _server.ts-Cg2y0otm.js.map} +1 -1
  139. package/build/server/chunks/{_server.ts-DcDLi8Qf.js → _server.ts-CkJ-gL3U.js} +5 -5
  140. package/build/server/chunks/{_server.ts-DcDLi8Qf.js.map → _server.ts-CkJ-gL3U.js.map} +1 -1
  141. package/build/server/chunks/{_server.ts-CrJC5xTb.js → _server.ts-CmECdczB.js} +5 -5
  142. package/build/server/chunks/{_server.ts-CrJC5xTb.js.map → _server.ts-CmECdczB.js.map} +1 -1
  143. package/build/server/chunks/{_server.ts-gmUUZpH3.js → _server.ts-CnFlmnho.js} +5 -5
  144. package/build/server/chunks/{_server.ts-gmUUZpH3.js.map → _server.ts-CnFlmnho.js.map} +1 -1
  145. package/build/server/chunks/{_server.ts-BsxDObRY.js → _server.ts-Ct5iAA3a.js} +5 -5
  146. package/build/server/chunks/{_server.ts-BsxDObRY.js.map → _server.ts-Ct5iAA3a.js.map} +1 -1
  147. package/build/server/chunks/{_server.ts-BCKbgdwP.js → _server.ts-CwYwlWaT.js} +6 -6
  148. package/build/server/chunks/{_server.ts-BCKbgdwP.js.map → _server.ts-CwYwlWaT.js.map} +1 -1
  149. package/build/server/chunks/{_server.ts-DAHBdspJ.js → _server.ts-CxLoJOEq.js} +2 -2
  150. package/build/server/chunks/{_server.ts-DAHBdspJ.js.map → _server.ts-CxLoJOEq.js.map} +1 -1
  151. package/build/server/chunks/{_server.ts-2PRYL_4c.js → _server.ts-Cz-sL67f.js} +6 -6
  152. package/build/server/chunks/{_server.ts-2PRYL_4c.js.map → _server.ts-Cz-sL67f.js.map} +1 -1
  153. package/build/server/chunks/{_server.ts-DfkUsytF.js → _server.ts-CzdwyjbW.js} +5 -5
  154. package/build/server/chunks/{_server.ts-DfkUsytF.js.map → _server.ts-CzdwyjbW.js.map} +1 -1
  155. package/build/server/chunks/{_server.ts-J3KbaPxH.js → _server.ts-D0k0kBup.js} +5 -5
  156. package/build/server/chunks/{_server.ts-J3KbaPxH.js.map → _server.ts-D0k0kBup.js.map} +1 -1
  157. package/build/server/chunks/{_server.ts-C87ZtG9i.js → _server.ts-D5Z-pC-W.js} +5 -5
  158. package/build/server/chunks/{_server.ts-C87ZtG9i.js.map → _server.ts-D5Z-pC-W.js.map} +1 -1
  159. package/build/server/chunks/{_server.ts-DGwTMfbh.js → _server.ts-D70c-Aqa.js} +2 -2
  160. package/build/server/chunks/{_server.ts-DGwTMfbh.js.map → _server.ts-D70c-Aqa.js.map} +1 -1
  161. package/build/server/chunks/{_server.ts-DhCru5sp.js → _server.ts-DBTPrMhg.js} +5 -5
  162. package/build/server/chunks/{_server.ts-DhCru5sp.js.map → _server.ts-DBTPrMhg.js.map} +1 -1
  163. package/build/server/chunks/{_server.ts-CpucwebI.js → _server.ts-DI0pMYif.js} +5 -5
  164. package/build/server/chunks/{_server.ts-CpucwebI.js.map → _server.ts-DI0pMYif.js.map} +1 -1
  165. package/build/server/chunks/{_server.ts-Dp1xtf0U.js → _server.ts-DMCQqcJv.js} +5 -5
  166. package/build/server/chunks/{_server.ts-Dp1xtf0U.js.map → _server.ts-DMCQqcJv.js.map} +1 -1
  167. package/build/server/chunks/{_server.ts-EGQ6i8V3.js → _server.ts-DQMqeajx.js} +5 -5
  168. package/build/server/chunks/{_server.ts-EGQ6i8V3.js.map → _server.ts-DQMqeajx.js.map} +1 -1
  169. package/build/server/chunks/{_server.ts-BxI2nF8q.js → _server.ts-DQuDx-Ds.js} +4 -4
  170. package/build/server/chunks/{_server.ts-BxI2nF8q.js.map → _server.ts-DQuDx-Ds.js.map} +1 -1
  171. package/build/server/chunks/{_server.ts-n58AjSu6.js → _server.ts-DR4cbcRn.js} +5 -5
  172. package/build/server/chunks/{_server.ts-n58AjSu6.js.map → _server.ts-DR4cbcRn.js.map} +1 -1
  173. package/build/server/chunks/{_server.ts-Ta0swYhp.js → _server.ts-DRpzDudm.js} +6 -6
  174. package/build/server/chunks/{_server.ts-Ta0swYhp.js.map → _server.ts-DRpzDudm.js.map} +1 -1
  175. package/build/server/chunks/{_server.ts-CCjVfk1l.js → _server.ts-DUoqgeUZ.js} +5 -5
  176. package/build/server/chunks/{_server.ts-CCjVfk1l.js.map → _server.ts-DUoqgeUZ.js.map} +1 -1
  177. package/build/server/chunks/{_server.ts-CwXIED0N.js → _server.ts-D_1OrRQF.js} +5 -5
  178. package/build/server/chunks/{_server.ts-CwXIED0N.js.map → _server.ts-D_1OrRQF.js.map} +1 -1
  179. package/build/server/chunks/{_server.ts-C8wAyyXo.js → _server.ts-DcLzi8vU.js} +5 -5
  180. package/build/server/chunks/{_server.ts-C8wAyyXo.js.map → _server.ts-DcLzi8vU.js.map} +1 -1
  181. package/build/server/chunks/{_server.ts-CpL-a7h0.js → _server.ts-Dd0KwCud.js} +5 -5
  182. package/build/server/chunks/{_server.ts-CpL-a7h0.js.map → _server.ts-Dd0KwCud.js.map} +1 -1
  183. package/build/server/chunks/{_server.ts-D1H15sgw.js → _server.ts-De6P98pT.js} +6 -6
  184. package/build/server/chunks/{_server.ts-D1H15sgw.js.map → _server.ts-De6P98pT.js.map} +1 -1
  185. package/build/server/chunks/{_server.ts-Bo-SuQhE.js → _server.ts-DeFmBzxl.js} +7 -7
  186. package/build/server/chunks/{_server.ts-Bo-SuQhE.js.map → _server.ts-DeFmBzxl.js.map} +1 -1
  187. package/build/server/chunks/{_server.ts-Cb_27o_D.js → _server.ts-DgYL3Rf8.js} +6 -6
  188. package/build/server/chunks/{_server.ts-Cb_27o_D.js.map → _server.ts-DgYL3Rf8.js.map} +1 -1
  189. package/build/server/chunks/{_server.ts-DF-u2j3p.js → _server.ts-DhWwpNRX.js} +6 -6
  190. package/build/server/chunks/{_server.ts-DF-u2j3p.js.map → _server.ts-DhWwpNRX.js.map} +1 -1
  191. package/build/server/chunks/{_server.ts-CY1Jr9Km.js → _server.ts-DjBqs3sh.js} +5 -5
  192. package/build/server/chunks/{_server.ts-CY1Jr9Km.js.map → _server.ts-DjBqs3sh.js.map} +1 -1
  193. package/build/server/chunks/{_server.ts-CfLjcz8_.js → _server.ts-DjRgrCXP.js} +5 -5
  194. package/build/server/chunks/{_server.ts-CfLjcz8_.js.map → _server.ts-DjRgrCXP.js.map} +1 -1
  195. package/build/server/chunks/{_server.ts-CAjC-Ve4.js → _server.ts-DrWr-f4D.js} +8 -8
  196. package/build/server/chunks/{_server.ts-CAjC-Ve4.js.map → _server.ts-DrWr-f4D.js.map} +1 -1
  197. package/build/server/chunks/{_server.ts-BZl4_sRT.js → _server.ts-DsCCbc7p.js} +5 -5
  198. package/build/server/chunks/{_server.ts-BZl4_sRT.js.map → _server.ts-DsCCbc7p.js.map} +1 -1
  199. package/build/server/chunks/{_server.ts-B660haVW.js → _server.ts-DwF8M0kr.js} +2 -2
  200. package/build/server/chunks/{_server.ts-B660haVW.js.map → _server.ts-DwF8M0kr.js.map} +1 -1
  201. package/build/server/chunks/{_server.ts-DTsLjBNM.js → _server.ts-Dz-C2Nmu.js} +5 -5
  202. package/build/server/chunks/{_server.ts-DTsLjBNM.js.map → _server.ts-Dz-C2Nmu.js.map} +1 -1
  203. package/build/server/chunks/{_server.ts-CKdbcBzl.js → _server.ts-DzXKnq2N.js} +5 -5
  204. package/build/server/chunks/{_server.ts-CKdbcBzl.js.map → _server.ts-DzXKnq2N.js.map} +1 -1
  205. package/build/server/chunks/{_server.ts-KjM3wUGG.js → _server.ts-IouWelbn.js} +5 -5
  206. package/build/server/chunks/{_server.ts-KjM3wUGG.js.map → _server.ts-IouWelbn.js.map} +1 -1
  207. package/build/server/chunks/{_server.ts-DsKCoQso.js → _server.ts-Ju9K1rbS.js} +7 -7
  208. package/build/server/chunks/{_server.ts-DsKCoQso.js.map → _server.ts-Ju9K1rbS.js.map} +1 -1
  209. package/build/server/chunks/{_server.ts-Ba03_roq.js → _server.ts-MjwQ0EuY.js} +5 -5
  210. package/build/server/chunks/{_server.ts-Ba03_roq.js.map → _server.ts-MjwQ0EuY.js.map} +1 -1
  211. package/build/server/chunks/{_server.ts-sIwypueh.js → _server.ts-Ohcmf-UU.js} +7 -7
  212. package/build/server/chunks/{_server.ts-sIwypueh.js.map → _server.ts-Ohcmf-UU.js.map} +1 -1
  213. package/build/server/chunks/{_server.ts-DhEtmqoq.js → _server.ts-UoCdkgne.js} +5 -5
  214. package/build/server/chunks/{_server.ts-DhEtmqoq.js.map → _server.ts-UoCdkgne.js.map} +1 -1
  215. package/build/server/chunks/{_server.ts-BjncDl6d.js → _server.ts-Y40KAQmG.js} +5 -5
  216. package/build/server/chunks/{_server.ts-BjncDl6d.js.map → _server.ts-Y40KAQmG.js.map} +1 -1
  217. package/build/server/chunks/{_server.ts-C10U7CqH.js → _server.ts-ZMUj6upt.js} +5 -5
  218. package/build/server/chunks/{_server.ts-C10U7CqH.js.map → _server.ts-ZMUj6upt.js.map} +1 -1
  219. package/build/server/chunks/{_server.ts-Bbx8jcyu.js → _server.ts-aJxs9gSo.js} +5 -5
  220. package/build/server/chunks/{_server.ts-Bbx8jcyu.js.map → _server.ts-aJxs9gSo.js.map} +1 -1
  221. package/build/server/chunks/{_server.ts-BMc7celt.js → _server.ts-dZf0ei-L.js} +5 -5
  222. package/build/server/chunks/{_server.ts-BMc7celt.js.map → _server.ts-dZf0ei-L.js.map} +1 -1
  223. package/build/server/chunks/{_server.ts-BhrOidm_.js → _server.ts-i1Mau1S1.js} +5 -5
  224. package/build/server/chunks/{_server.ts-BhrOidm_.js.map → _server.ts-i1Mau1S1.js.map} +1 -1
  225. package/build/server/chunks/{_server.ts-F71eVdtD.js → _server.ts-q7jCzCNZ.js} +5 -5
  226. package/build/server/chunks/{_server.ts-F71eVdtD.js.map → _server.ts-q7jCzCNZ.js.map} +1 -1
  227. package/build/server/chunks/{_server.ts-DN5atb3V.js → _server.ts-wTH21Gfs.js} +5 -5
  228. package/build/server/chunks/{_server.ts-DN5atb3V.js.map → _server.ts-wTH21Gfs.js.map} +1 -1
  229. package/build/server/chunks/{_server.ts-CEREugmq.js → _server.ts-wrbya1ju.js} +5 -5
  230. package/build/server/chunks/{_server.ts-CEREugmq.js.map → _server.ts-wrbya1ju.js.map} +1 -1
  231. package/build/server/chunks/{_server.ts-BV-7x9MV.js → _server.ts-zg42LX8r.js} +5 -5
  232. package/build/server/chunks/{_server.ts-BV-7x9MV.js.map → _server.ts-zg42LX8r.js.map} +1 -1
  233. package/build/server/chunks/{addon-helpers-B6DRQ3aQ.js → addon-helpers-ued1MZ--.js} +3 -3
  234. package/build/server/chunks/{addon-helpers-B6DRQ3aQ.js.map → addon-helpers-ued1MZ--.js.map} +1 -1
  235. package/build/server/chunks/{akm-T56LQBSh.js → akm-CrbKHwz0.js} +2 -2
  236. package/build/server/chunks/{akm-T56LQBSh.js.map → akm-CrbKHwz0.js.map} +1 -1
  237. package/build/server/chunks/{catalog-BJWRR5YI.js → catalog-22TIo25l.js} +5 -5
  238. package/build/server/chunks/{catalog-BJWRR5YI.js.map → catalog-22TIo25l.js.map} +1 -1
  239. package/build/server/chunks/{client-CGdYxeP_.js → client-BOU1UMzN.js} +2 -2
  240. package/build/server/chunks/{client-CGdYxeP_.js.map → client-BOU1UMzN.js.map} +1 -1
  241. package/build/server/chunks/{config-Rsp7hkzb.js → config-CRy04H0c.js} +2 -2
  242. package/build/server/chunks/{config-Rsp7hkzb.js.map → config-CRy04H0c.js.map} +1 -1
  243. package/build/server/chunks/{docker-BErZemMD.js → docker-CiD7GCZ5.js} +2 -2
  244. package/build/server/chunks/{docker-BErZemMD.js.map → docker-CiD7GCZ5.js.map} +1 -1
  245. package/build/server/chunks/{endpoints-V56dw3W-.js → endpoints-Bt-t-ppF.js} +2 -2
  246. package/build/server/chunks/{endpoints-V56dw3W-.js.map → endpoints-Bt-t-ppF.js.map} +1 -1
  247. package/build/server/chunks/{error.svelte-CZeU9Oo-.js → error.svelte-BnVNIAYT.js} +4 -4
  248. package/build/server/chunks/{error.svelte-CZeU9Oo-.js.map → error.svelte-BnVNIAYT.js.map} +1 -1
  249. package/build/server/chunks/{helpers-BMquHUT_.js → helpers-BQUg4t3R.js} +3 -3
  250. package/build/server/chunks/{helpers-BMquHUT_.js.map → helpers-BQUg4t3R.js.map} +1 -1
  251. package/build/server/chunks/{hooks.server-Jfc2jjaF.js → hooks.server-CxXGUS34.js} +7 -7
  252. package/build/server/chunks/{hooks.server-Jfc2jjaF.js.map → hooks.server-CxXGUS34.js.map} +1 -1
  253. package/build/server/chunks/{http-ByElKmSy.js → http-vdLAxOhP.js} +2 -2
  254. package/build/server/chunks/{http-ByElKmSy.js.map → http-vdLAxOhP.js.map} +1 -1
  255. package/build/server/chunks/{internal-GqVcyxCX.js → internal-Wp089UCl.js} +3 -3
  256. package/build/server/chunks/{internal-GqVcyxCX.js.map → internal-Wp089UCl.js.map} +1 -1
  257. package/build/server/chunks/{migration-status-CG6Rlbre.js → migration-status-BTbMIQh2.js} +2 -2
  258. package/build/server/chunks/{migration-status-CG6Rlbre.js.map → migration-status-BTbMIQh2.js.map} +1 -1
  259. package/build/server/chunks/{session-cookie-DMI7Gl0P.js → session-cookie-CWm3gU2J.js} +2 -2
  260. package/build/server/chunks/{session-cookie-DMI7Gl0P.js.map → session-cookie-CWm3gU2J.js.map} +1 -1
  261. package/build/server/chunks/{setup-deploy-CdPn1xFW.js → setup-deploy-BzNm_sts.js} +2 -2
  262. package/build/server/chunks/{setup-deploy-CdPn1xFW.js.map → setup-deploy-BzNm_sts.js.map} +1 -1
  263. package/build/server/chunks/{src-Bn-AiiUV.js → src-DlScVN9s.js} +2 -2
  264. package/build/server/chunks/{src-Bn-AiiUV.js.map → src-DlScVN9s.js.map} +1 -1
  265. package/build/server/chunks/{state-BPtnWnun.js → state-OR3c9Jry.js} +2 -2
  266. package/build/server/chunks/{state-BPtnWnun.js.map → state-OR3c9Jry.js.map} +1 -1
  267. package/build/server/chunks/{state2-BVIN60Rn.js → state2-Dpf9TSKk.js} +2 -2
  268. package/build/server/chunks/{state2-BVIN60Rn.js.map → state2-Dpf9TSKk.js.map} +1 -1
  269. package/build/server/index.js +1 -1
  270. package/build/server/index.js.map +1 -1
  271. package/build/server/manifest.js +91 -91
  272. package/build/server/manifest.js.map +1 -1
  273. package/package.json +2 -2
  274. package/build/client/_app/immutable/chunks/B_vqAUCS.js +0 -3
  275. package/build/client/_app/immutable/chunks/B_vqAUCS.js.br +0 -0
  276. package/build/client/_app/immutable/chunks/B_vqAUCS.js.gz +0 -0
  277. package/build/client/_app/immutable/chunks/CLwjxMfU.js +0 -1
  278. package/build/client/_app/immutable/chunks/CLwjxMfU.js.br +0 -2
  279. package/build/client/_app/immutable/chunks/CLwjxMfU.js.gz +0 -0
  280. package/build/client/_app/immutable/chunks/CbjV9aWv.js.br +0 -0
  281. package/build/client/_app/immutable/chunks/CbjV9aWv.js.gz +0 -0
  282. package/build/client/_app/immutable/chunks/Db-TLwUL.js.br +0 -0
  283. package/build/client/_app/immutable/chunks/Db-TLwUL.js.gz +0 -0
  284. package/build/client/_app/immutable/entry/app.DnBBy3p-.js.br +0 -0
  285. package/build/client/_app/immutable/entry/app.DnBBy3p-.js.gz +0 -0
  286. package/build/client/_app/immutable/entry/start.DXxvAlLx.js +0 -1
  287. package/build/client/_app/immutable/entry/start.DXxvAlLx.js.br +0 -0
  288. package/build/client/_app/immutable/entry/start.DXxvAlLx.js.gz +0 -0
  289. package/build/client/_app/immutable/nodes/1.BZwp0xOZ.js.br +0 -1
  290. package/build/client/_app/immutable/nodes/1.BZwp0xOZ.js.gz +0 -0
  291. package/build/client/_app/immutable/nodes/4.CWFpIl_V.js.br +0 -0
  292. package/build/client/_app/immutable/nodes/4.CWFpIl_V.js.gz +0 -0
  293. package/build/client/_app/immutable/nodes/5.BjjtMuH9.js.br +0 -0
  294. package/build/client/_app/immutable/nodes/5.BjjtMuH9.js.gz +0 -0
  295. package/build/client/_app/immutable/nodes/6.BmRYMxmN.js.br +0 -0
  296. package/build/client/_app/immutable/nodes/6.BmRYMxmN.js.gz +0 -0
  297. package/build/client/_app/immutable/nodes/7.Ckz2SrmP.js.br +0 -0
  298. package/build/client/_app/immutable/nodes/7.Ckz2SrmP.js.gz +0 -0
  299. package/build/client/_app/immutable/nodes/8.BUpRt-6y.js.br +0 -0
  300. package/build/client/_app/immutable/nodes/8.BUpRt-6y.js.gz +0 -0
  301. package/build/server/chunks/1-DI42Ccm8.js +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-6nz9WpjA.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/voice/_server.ts.js"],"sourcesContent":["import { Ct as listEnabledAddonIds, Et as addonProfileId, I as buildComposeOptions, P as parseComposeStderr, Pt as readStackEnv, Tt as setAddonProfileSelection, _t as getAddonProfileAvailability, at as composeUp, gt as annotateAddonProfileAvailability, it as composeStop, s as writeVoiceVars, vt as getAddonProfileSelection, wt as setAddonEnabled, yt as getAddonProfiles } from \"../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../chunks/state.js\";\nimport { d as requireAdmin, i as errorResponse, l as jsonResponse, o as getRequestId } from \"../../../../chunks/helpers.js\";\nimport { t as withSerialQueue } from \"../../../../chunks/serial-queue.js\";\nimport { existsSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { execFile } from \"node:child_process\";\nimport { connect } from \"node:net\";\n//#region src/lib/server/voice-errors.ts\n/**\n* Translate raw docker / compose stderr into operator-actionable copy.\n*\n* Lives in $lib/server so the route can import it without violating\n* SvelteKit's +server.ts export rules (handlers + `_`-prefixed only).\n*\n* Pattern matches are intentionally case-insensitive and tolerant of\n* compose-CLI prefix decoration. Order matters: more specific patterns\n* first.\n*/\nfunction translateDockerError(stderr) {\n\tconst raw = (stderr ?? \"\").trim();\n\tif (!raw) return \"Docker reported an unknown error (no stderr).\";\n\tif (/spawn .*docker.*ENOENT|no such file or directory.*docker|docker:\\s*command not found/i.test(raw)) return \"Docker isn't installed on this host. Install Docker Engine or Docker Desktop, then retry.\";\n\tif (/pull access denied|manifest unknown|repository does not exist|not found: manifest unknown/i.test(raw)) return \"The voice image for this profile isn't published yet. Try the CPU profile.\";\n\tif (/failed to resolve reference|dial tcp.*lookup .+docker\\.io|i\\/o timeout.*registry|connection refused.*registry/i.test(raw)) return \"Can't reach Docker Hub. Check your internet connection, corporate firewall, or configure a registry mirror.\";\n\tif (/no space left on device|insufficient.*disk space|ENOSPC|write.*disk full/i.test(raw)) return \"Out of disk space. Free space and try again, or run `docker image prune -a` to reclaim unused images.\";\n\tif (/port is already allocated|bind.*address already in use|address already in use|failed to bind host port/i.test(raw)) return \"Port 8880 is already in use on this host. Free it or change the host port (set OP_VOICE_PORT_HOST).\";\n\tif (/unknown[^\\n]*runtime[^\\n]*nvidia|runtime\\s+\"nvidia\"\\s+not\\s+found|nvidia.*runtime.*not[^a-z]+(found|registered)/i.test(raw)) return \"The NVIDIA Docker runtime isn't registered on this machine. Try the CPU profile, or install nvidia-container-toolkit.\";\n\tif (/invoking the NVIDIA Container Runtime Hook/i.test(raw)) return \"Docker is in CDI mode but no CDI spec is registered. Try the CPU profile.\";\n\treturn raw.length > 300 ? raw.slice(0, 297) + \"…\" : raw;\n}\n//#endregion\n//#region src/routes/admin/voice/+server.ts\n/**\n* GET /admin/voice — Return current TTS/STT env vars from stack.env plus\n* an `availability` block (best-effort reachability of\n* the configured remote endpoints).\n* PUT /admin/voice — Write TTS/STT env vars to stack.env. Auto-enables\n* the openpalm-voice addon, brings the chosen profile\n* up, waits for /health, and translates Docker errors\n* to operator-actionable copy.\n*/\nvar VOICE_ADDON = \"voice\";\nvar VOICE_PROBE_TIMEOUT_MS = 18e4;\nvar VOICE_PROBE_INTERVAL_MS = 1e3;\nvar JOB_RETAIN_MS = 5 * 6e4;\nvar activeJobs = /* @__PURE__ */ new Map();\nfunction setJob(addon, patch) {\n\tconst existing = activeJobs.get(addon);\n\tconst next = existing ? {\n\t\t...existing,\n\t\t...patch\n\t} : {\n\t\tstate: \"pulling\",\n\t\tsteps: [],\n\t\tstartedAt: Date.now(),\n\t\t...patch\n\t};\n\tactiveJobs.set(addon, next);\n\treturn next;\n}\nfunction getActiveJob(addon) {\n\tconst job = activeJobs.get(addon);\n\tif (!job) return void 0;\n\tif (Date.now() - (job.finishedAt ?? job.startedAt) > JOB_RETAIN_MS) {\n\t\tactiveJobs.delete(addon);\n\t\treturn;\n\t}\n\treturn job;\n}\nvar REACHABILITY_TIMEOUT_MS = 1500;\nvar PORT_PROBE_TIMEOUT_MS = 750;\nasync function probeReachable(baseURL) {\n\tif (!baseURL) return false;\n\tconst url = baseURL.replace(/\\/+$/, \"\") + \"/v1/models\";\n\ttry {\n\t\treturn (await fetch(url, {\n\t\t\tmethod: \"GET\",\n\t\t\tsignal: AbortSignal.timeout(REACHABILITY_TIMEOUT_MS)\n\t\t})).status < 500;\n\t} catch {\n\t\treturn false;\n\t}\n}\n/**\n* Pick the best profile for this host. Prefers the first available GPU\n* profile (anything that isn't the canonical CPU profile) so operators with NVIDIA/AMD hardware\n* get the accelerated variant auto-selected. Falls back to the labelled\n* default, then first available, then first profile.\n*/\nfunction resolveDefaultProfile(profiles) {\n\tif (profiles.length === 0) return null;\n\tconst availableGpu = profiles.find((p) => p.id !== addonProfileId(VOICE_ADDON, \"cpu\") && p.available !== false);\n\tif (availableGpu) return availableGpu.id;\n\tconst labelledDefault = profiles.find((p) => p.default);\n\tif (labelledDefault && labelledDefault.available !== false) return labelledDefault.id;\n\tconst firstAvailable = profiles.find((p) => p.available !== false);\n\tif (firstAvailable) return firstAvailable.id;\n\treturn profiles[0].id;\n}\nvar GET = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst state = getState();\n\tconst env = readStackEnv(state.stackDir);\n\tconst ttsBaseURL = env[\"OP_TTS_BASE_URL\"] ?? \"\";\n\tconst sttBaseURL = env[\"OP_STT_BASE_URL\"] ?? \"\";\n\tconst profiles = await annotateAddonProfileAvailability(getAddonProfiles(state.homeDir, VOICE_ADDON));\n\tconst selectedProfile = getAddonProfileSelection(state.stackDir, VOICE_ADDON) ?? resolveDefaultProfile(profiles);\n\tconst [sttReachable, ttsReachable] = await Promise.all([probeReachable(sttBaseURL), probeReachable(ttsBaseURL)]);\n\treturn jsonResponse(200, {\n\t\ttts: {\n\t\t\tenabled: true,\n\t\t\tengine: env[\"OP_TTS_ENGINE\"] ?? \"\",\n\t\t\tprovider: env[\"OP_TTS_PROVIDER\"] ?? \"\",\n\t\t\tbaseURL: ttsBaseURL,\n\t\t\tmodel: env[\"OP_TTS_MODEL\"] ?? \"\",\n\t\t\tvoice: env[\"OP_TTS_VOICE\"] ?? \"\"\n\t\t},\n\t\tstt: {\n\t\t\tenabled: true,\n\t\t\tengine: env[\"OP_STT_ENGINE\"] ?? \"\",\n\t\t\tprovider: env[\"OP_STT_PROVIDER\"] ?? \"\",\n\t\t\tbaseURL: sttBaseURL,\n\t\t\tmodel: env[\"OP_STT_MODEL\"] ?? \"\",\n\t\t\tlanguage: env[\"OP_STT_LANGUAGE\"] ?? \"\"\n\t\t},\n\t\tavailability: {\n\t\t\tstt: {\n\t\t\t\tremoteConfigured: Boolean(sttBaseURL),\n\t\t\t\tremoteReachable: sttReachable\n\t\t\t},\n\t\t\ttts: {\n\t\t\t\tremoteConfigured: Boolean(ttsBaseURL),\n\t\t\t\tremoteReachable: ttsReachable\n\t\t\t}\n\t\t},\n\t\taddon: {\n\t\t\tprofiles,\n\t\t\tselectedProfile,\n\t\t\t...getActiveJob(VOICE_ADDON) ? { activeJob: getActiveJob(VOICE_ADDON) } : {}\n\t\t}\n\t}, requestId);\n};\nfunction readSection(raw, kind) {\n\tif (!raw || typeof raw !== \"object\") return null;\n\tconst section = {\n\t\tenabled: raw.enabled !== false,\n\t\tengine: typeof raw.engine === \"string\" ? raw.engine : void 0,\n\t\tprovider: typeof raw.provider === \"string\" ? raw.provider : void 0,\n\t\tbaseURL: typeof raw.baseURL === \"string\" ? raw.baseURL : void 0,\n\t\tmodel: typeof raw.model === \"string\" ? raw.model : void 0\n\t};\n\tif (kind === \"tts\" && typeof raw.voice === \"string\") section.voice = raw.voice;\n\tif (kind === \"stt\" && typeof raw.language === \"string\") section.language = raw.language;\n\treturn section;\n}\nfunction voiceHostPort() {\n\tconst raw = process.env.OP_VOICE_PORT_HOST?.trim();\n\tconst n = raw ? Number(raw) : NaN;\n\treturn Number.isFinite(n) && n > 0 ? n : 8880;\n}\nfunction openpalmVoiceBaseURL() {\n\treturn `http://127.0.0.1:${voiceHostPort()}`;\n}\nvar OPENPALM_VOICE_TTS_MODEL = \"kokoro\";\nvar OPENPALM_VOICE_STT_MODEL = \"whisper-1\";\nvar OPENPALM_VOICE_DEFAULT_VOICE = \"bf_isabella\";\n/**\n* For `engine === 'openpalm-voice'`, fill in baseURL/model with the addon's\n* preset values when the user didn't provide them. This is the auto-config\n* that makes \"select OpenPalm Voice → Save\" Just Work as long as the addon\n* is enabled. The user can still override (e.g. point at a different\n* voice host on the LAN).\n*/\nfunction applyOpenPalmVoicePreset(section, kind) {\n\tif (section.engine !== \"openpalm-voice\") return;\n\tif (!section.baseURL || !section.baseURL.trim()) section.baseURL = openpalmVoiceBaseURL();\n\tif (!section.model || !section.model.trim()) section.model = kind === \"tts\" ? OPENPALM_VOICE_TTS_MODEL : OPENPALM_VOICE_STT_MODEL;\n\tif (kind === \"tts\" && (!section.voice || !section.voice.trim())) section.voice = OPENPALM_VOICE_DEFAULT_VOICE;\n}\nfunction validateSection(section, kind) {\n\tif (!section || !section.engine) return null;\n\tif (section.engine === \"browser\" || section.engine === \"browser-stt\" || section.engine === \"browser-tts\") return null;\n\tif (section.engine.startsWith(\"skip-\")) return null;\n\tif (!section.baseURL || !section.baseURL.trim()) return `Remote ${kind.toUpperCase()} requires an endpoint URL.`;\n\treturn null;\n}\nfunction execFileNoThrow(cmd, args, timeoutMs) {\n\treturn new Promise((resolve) => {\n\t\texecFile(cmd, args, { timeout: timeoutMs }, (error, stdout, stderr) => {\n\t\t\tlet mergedStderr = stderr?.toString() ?? \"\";\n\t\t\tconst code = error?.code;\n\t\t\tif (code && !mergedStderr) if (code === \"ENOENT\") mergedStderr = `spawn ${cmd} ENOENT: command not found`;\n\t\t\telse mergedStderr = `spawn ${cmd} ${code}`;\n\t\t\tresolve({\n\t\t\t\tok: !error,\n\t\t\t\tstdout: stdout?.toString() ?? \"\",\n\t\t\t\tstderr: mergedStderr\n\t\t\t});\n\t\t});\n\t});\n}\n/**\n* True when the local docker daemon already has the named image cached.\n* `docker image inspect` exits 0 only when the image is present locally.\n*/\nasync function dockerImagePresent(imageRef) {\n\tif (!imageRef) return true;\n\treturn (await execFileNoThrow(\"docker\", [\n\t\t\"image\",\n\t\t\"inspect\",\n\t\timageRef\n\t], 5e3)).ok;\n}\n/**\n* Heuristic: image tags that include `-cu121` / `-rocm6` / `-cpu` are the\n* multi-GB voice images. Show the \"this may take a few minutes\" toast for\n* first pulls so the operator knows the upcoming compose-up isn't stuck.\n*/\nfunction isLargeImageTag(imageRef) {\n\treturn /(-cu\\d+|-rocm\\d+|-cpu)(\\s|$|@|\\b)/i.test(imageRef);\n}\n/**\n* Read the resolved image for a service from the merged compose config.\n* Best-effort — returns \"\" on any failure so callers can skip the pre-pull\n* check rather than blocking save.\n*/\nasync function resolveServiceImage(composeFiles, service) {\n\tconst args = [\"compose\"];\n\tfor (const f of composeFiles) args.push(\"-f\", f);\n\targs.push(\"--project-name\", resolveProjectName(), \"config\", \"--format\", \"json\");\n\tconst res = await execFileNoThrow(\"docker\", args, 15e3);\n\tif (!res.ok) return \"\";\n\ttry {\n\t\treturn JSON.parse(res.stdout).services?.[service]?.image ?? \"\";\n\t} catch {\n\t\treturn \"\";\n\t}\n}\nfunction resolveProjectName() {\n\treturn process.env.OP_PROJECT_NAME?.trim() || process.env.COMPOSE_PROJECT_NAME?.trim() || \"openpalm\";\n}\n/**\n* Probe a TCP port on 127.0.0.1. Resolves true when the connect succeeds\n* within PORT_PROBE_TIMEOUT_MS — meaning something is already listening.\n*/\nfunction isPortListening(port) {\n\treturn new Promise((resolve) => {\n\t\tconst socket = connect({\n\t\t\thost: \"127.0.0.1\",\n\t\t\tport\n\t\t});\n\t\tlet done = false;\n\t\tconst finish = (listening) => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\ttry {\n\t\t\t\tsocket.destroy();\n\t\t\t} catch {}\n\t\t\tresolve(listening);\n\t\t};\n\t\tsocket.setTimeout(PORT_PROBE_TIMEOUT_MS, () => finish(false));\n\t\tsocket.once(\"connect\", () => finish(true));\n\t\tsocket.once(\"error\", () => finish(false));\n\t});\n}\n/**\n* True when a docker container whose name matches openpalm-voice* is\n* already running and presumably owns the host port. Used by the port\n* pre-flight to avoid false positives when our own voice container is\n* the listener.\n*/\nasync function ourVoiceContainerRunning() {\n\tconst res = await execFileNoThrow(\"docker\", [\n\t\t\"ps\",\n\t\t\"--filter\",\n\t\t\"name=openpalm-voice\",\n\t\t\"--format\",\n\t\t\"{{.Names}}\"\n\t], 5e3);\n\tif (!res.ok) return false;\n\treturn res.stdout.trim().length > 0;\n}\n/**\n* Read the Docker healthcheck state of a container.\n* Returns \"starting\" while compose's start_period grace window is in\n* effect; \"healthy\" / \"unhealthy\" / \"none\" / \"\" otherwise.\n*/\nasync function readContainerHealthStatus(containerNamePrefix) {\n\tconst name = (await execFileNoThrow(\"docker\", [\n\t\t\"ps\",\n\t\t\"--filter\",\n\t\t`name=${containerNamePrefix}`,\n\t\t\"--format\",\n\t\t\"{{.Names}}\"\n\t], 5e3)).stdout.split(\"\\n\").map((s) => s.trim()).find(Boolean);\n\tif (!name) return \"\";\n\treturn (await execFileNoThrow(\"docker\", [\n\t\t\"inspect\",\n\t\tname,\n\t\t\"--format\",\n\t\t\"{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}\"\n\t], 5e3)).stdout.trim();\n}\n/**\n* Write a sibling compose overlay that switches `voice-cuda` from the\n* legacy `runtime: nvidia` form to the CDI `driver: cdi` form. Caller\n* includes it in the composeUp file list ONLY when the host probe\n* indicates the runtime is missing but a CDI spec exists.\n*\n* The canonical compose.yml stays as the runtime-nvidia form (the case\n* that needs no manual setup beyond installing nvidia-container-toolkit).\n*\n* Returns the absolute path of the overlay, or null when there is no\n* voice compose overlay to patch.\n*/\nfunction writeCdiOverlayIfNeeded(homeDir) {\n\tconst stackDir = join(homeDir, \"config\", \"stack\");\n\tif (!existsSync(join(stackDir, \"services.compose.yml\"))) return null;\n\tconst overlayPath = join(stackDir, \"voice.compose.cdi.yml\");\n\twriteFileSync(overlayPath, [\n\t\t\"# Generated overlay — switches voice-cuda from runtime:nvidia to CDI.\",\n\t\t\"# Applied only when the host probe shows the legacy NVIDIA runtime is\",\n\t\t\"# missing but /etc/cdi/nvidia.yaml is present.\",\n\t\t\"services:\",\n\t\t\" voice-cuda:\",\n\t\t\" runtime: \\\"\\\"\",\n\t\t\" deploy:\",\n\t\t\" resources:\",\n\t\t\" reservations:\",\n\t\t\" devices:\",\n\t\t\" - driver: cdi\",\n\t\t\" device_ids:\",\n\t\t\" - nvidia.com/gpu=all\",\n\t\t\"\"\n\t].join(\"\\n\"));\n\treturn overlayPath;\n}\n/**\n* Detect rootless Docker. The compose `user: \"${OP_UID:-1000}:${OP_GID:-1000}\"`\n* directive bakes the host UID into the container — but on a rootless\n* daemon the bind-mount UID inside the container is subuid-remapped, so\n* the resulting container UID has no write permission against\n* `${OP_HOME}/data/voice/models`. Removing the `user:` directive lets\n* Docker pick whatever UID the rootless mapping translates to inside the\n* user namespace, which DOES have write access to the bind-mount.\n*\n* `docker info` is the authoritative source: rootless daemons advertise\n* `SecurityOptions: ... name=rootless` and `CgroupDriver: ... rootless`.\n* We accept either signal.\n*/\nasync function detectRootlessDocker() {\n\tconst res = await execFileNoThrow(\"docker\", [\n\t\t\"info\",\n\t\t\"--format\",\n\t\t\"{{json .}}\"\n\t], 5e3);\n\tif (!res.ok || !res.stdout) return false;\n\ttry {\n\t\tconst parsed = JSON.parse(res.stdout);\n\t\tif ((Array.isArray(parsed.SecurityOptions) ? parsed.SecurityOptions.map((s) => String(s)) : []).some((s) => /name=rootless/i.test(s))) return true;\n\t\tif (typeof parsed.CgroupDriver === \"string\" && /rootless/i.test(parsed.CgroupDriver)) return true;\n\t\treturn false;\n\t} catch {\n\t\treturn /name=rootless|cgroup\\s*driver:.*rootless/i.test(res.stdout);\n\t}\n}\n/**\n* Write a sibling overlay that drops the `user:` directive from each\n* voice service. Mirrors writeCdiOverlayIfNeeded: caller includes the\n* returned path in composeUp's file list. Returns null when there is\n* no voice compose overlay to patch (so the file list stays valid and Docker\n* doesn't blow up on a missing -f arg).\n*/\nfunction writeRootlessOverlayIfNeeded(homeDir) {\n\tconst stackDir = join(homeDir, \"config\", \"stack\");\n\tif (!existsSync(join(stackDir, \"services.compose.yml\"))) return null;\n\tconst overlayPath = join(stackDir, \"voice.compose.rootless.yml\");\n\twriteFileSync(overlayPath, [\n\t\t\"# Generated overlay — removes the `user:` directive from voice services.\",\n\t\t\"# Applied only when `docker info` reports a rootless daemon. On rootless\",\n\t\t\"# Docker the compose-baked UID has no write access to the bind-mounted\",\n\t\t\"# state directory; letting Docker pick the namespaced UID restores it.\",\n\t\t\"services:\",\n\t\t\" voice:\",\n\t\t\" user: null\",\n\t\t\" voice-cuda:\",\n\t\t\" user: null\",\n\t\t\" voice-rocm:\",\n\t\t\" user: null\",\n\t\t\"\"\n\t].join(\"\\n\"));\n\treturn overlayPath;\n}\nvar PUT = (event) => {\n\treturn withSerialQueue(\"admin:voice:put\", () => handlePut(event));\n};\nasync function handlePut(event) {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst state = getState();\n\tlet body;\n\ttry {\n\t\tbody = await event.request.json();\n\t} catch {\n\t\treturn errorResponse(400, \"Bad Request\", \"Invalid JSON body\", {}, requestId);\n\t}\n\tif (!body || typeof body !== \"object\") return errorResponse(400, \"Bad Request\", \"Body must be an object\", {}, requestId);\n\tconst b = body;\n\tconst ttsSection = readSection(b.tts, \"tts\");\n\tconst sttSection = readSection(b.stt, \"stt\");\n\tif (ttsSection) applyOpenPalmVoicePreset(ttsSection, \"tts\");\n\tif (sttSection) applyOpenPalmVoicePreset(sttSection, \"stt\");\n\tconst ttsErr = validateSection(ttsSection, \"tts\");\n\tif (ttsErr) return errorResponse(400, \"invalid_tts\", ttsErr, {}, requestId);\n\tconst sttErr = validateSection(sttSection, \"stt\");\n\tif (sttErr) return errorResponse(400, \"invalid_stt\", sttErr, {}, requestId);\n\tconst config = {};\n\tif (ttsSection) config.tts = {\n\t\tenabled: ttsSection.enabled,\n\t\tengine: ttsSection.engine,\n\t\tprovider: ttsSection.provider,\n\t\tbaseURL: ttsSection.baseURL,\n\t\tmodel: ttsSection.model,\n\t\tvoice: ttsSection.voice\n\t};\n\tif (sttSection) config.stt = {\n\t\tenabled: sttSection.enabled,\n\t\tengine: sttSection.engine,\n\t\tprovider: sttSection.provider,\n\t\tbaseURL: sttSection.baseURL,\n\t\tmodel: sttSection.model,\n\t\tlanguage: sttSection.language\n\t};\n\twriteVoiceVars(config, state.stackDir);\n\tif (!(ttsSection?.engine === \"openpalm-voice\" || sttSection?.engine === \"openpalm-voice\")) {\n\t\tif (listEnabledAddonIds(state.homeDir).includes(VOICE_ADDON)) try {\n\t\t\tconst voiceServiceNames = getAddonProfiles(state.homeDir, VOICE_ADDON).flatMap((p) => p.services);\n\t\t\tconst unique = Array.from(new Set(voiceServiceNames));\n\t\t\tif (unique.length > 0) await composeStop(unique, buildComposeOptions(state));\n\t\t} catch (e) {\n\t\t\tconsole.warn(\"[voice] composeStop on disengage failed:\", e);\n\t\t}\n\t\treturn jsonResponse(200, { ok: true }, requestId);\n\t}\n\tconst availableProfiles = await annotateAddonProfileAvailability(getAddonProfiles(state.homeDir, VOICE_ADDON));\n\tconst requestedProfile = typeof b.profile === \"string\" ? b.profile.trim() : \"\";\n\tlet activeProfile = null;\n\tif (requestedProfile) {\n\t\tif (!availableProfiles.some((p) => p.id === requestedProfile)) return errorResponse(400, \"invalid_profile\", `Unknown voice profile \"${requestedProfile}\". Available: ${availableProfiles.map((p) => p.id).join(\", \") || \"(none)\"}`, {}, requestId);\n\t\tactiveProfile = requestedProfile;\n\t\tsetAddonProfileSelection(state.stackDir, VOICE_ADDON, activeProfile);\n\t} else activeProfile = getAddonProfileSelection(state.stackDir, VOICE_ADDON) ?? resolveDefaultProfile(availableProfiles);\n\tconst wasAlreadyEnabled = listEnabledAddonIds(state.homeDir).includes(VOICE_ADDON);\n\tconst steps = [];\n\tif (!wasAlreadyEnabled) try {\n\t\tsetAddonEnabled(state.homeDir, state.stackDir, VOICE_ADDON, true, state);\n\t\tsteps.push({\n\t\t\tstep: \"enable\",\n\t\t\tok: true\n\t\t});\n\t} catch (e) {\n\t\tconst detail = e instanceof Error ? e.message : String(e);\n\t\tsteps.push({\n\t\t\tstep: \"enable\",\n\t\t\tok: false,\n\t\t\tdetail\n\t\t});\n\t\treturn jsonResponse(502, {\n\t\t\tok: false,\n\t\t\tvoiceAddon: {\n\t\t\t\twasAlreadyEnabled,\n\t\t\t\tsteps,\n\t\t\t\terror: `Could not enable voice addon: ${detail}`\n\t\t\t}\n\t\t}, requestId);\n\t}\n\telse steps.push({\n\t\tstep: \"enable\",\n\t\tok: true,\n\t\tdetail: \"already enabled\"\n\t});\n\tconst hostPort = voiceHostPort();\n\tconst inVitest = !!process.env.VITEST;\n\tif (inVitest ? false : await isPortListening(hostPort)) {\n\t\tif (!await ourVoiceContainerRunning()) {\n\t\t\tconst msg = translateDockerError(`Bind for 127.0.0.1:${hostPort} failed: port is already allocated`);\n\t\t\tsteps.push({\n\t\t\t\tstep: \"port-check\",\n\t\t\t\tok: false,\n\t\t\t\tdetail: msg\n\t\t\t});\n\t\t\treturn jsonResponse(502, {\n\t\t\t\tok: false,\n\t\t\t\tvoiceAddon: {\n\t\t\t\t\twasAlreadyEnabled,\n\t\t\t\t\tsteps,\n\t\t\t\t\terror: msg\n\t\t\t\t}\n\t\t\t}, requestId);\n\t\t}\n\t\tsteps.push({\n\t\t\tstep: \"port-check\",\n\t\t\tok: true,\n\t\t\tdetail: \"our container is the listener\"\n\t\t});\n\t} else steps.push({\n\t\tstep: \"port-check\",\n\t\tok: true\n\t});\n\tconst profileServices = activeProfile ? availableProfiles.find((p) => p.id === activeProfile)?.services ?? [] : [];\n\tconst services = profileServices.length > 0 ? profileServices : [VOICE_ADDON];\n\tconst composeFilesBase = buildComposeOptions(state).files;\n\tconst primaryService = services[0];\n\tlet backgroundPull = false;\n\tif (primaryService && !inVitest) {\n\t\tconst imageRef = await resolveServiceImage(composeFilesBase, primaryService);\n\t\tif (imageRef && isLargeImageTag(imageRef)) {\n\t\t\tif (!await dockerImagePresent(imageRef)) {\n\t\t\t\tbackgroundPull = true;\n\t\t\t\tsteps.push({\n\t\t\t\t\tstep: \"pulling\",\n\t\t\t\t\tok: true,\n\t\t\t\t\tdetail: \"first-time download — several minutes for several GB\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tconst extraFiles = [];\n\tconst cdiFallbackSupported = process.platform !== \"win32\";\n\tif (activeProfile === addonProfileId(VOICE_ADDON, \"cuda\") && !inVitest && cdiFallbackSupported) {\n\t\tconst runtimeMissing = (await getAddonProfileAvailability({ id: addonProfileId(VOICE_ADDON, \"cuda\") })).available === false || !await dockerHasNvidiaRuntime();\n\t\tconst cdiSpecPresent = existsSync(\"/etc/cdi/nvidia.yaml\");\n\t\tif (runtimeMissing && cdiSpecPresent) {\n\t\t\tconst overlay = writeCdiOverlayIfNeeded(state.homeDir);\n\t\t\tif (overlay) {\n\t\t\t\textraFiles.push(overlay);\n\t\t\t\tsteps.push({\n\t\t\t\t\tstep: \"cdi-fallback\",\n\t\t\t\t\tok: true,\n\t\t\t\t\tdetail: \"using CDI device reservation\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tif (!inVitest) try {\n\t\tif (await detectRootlessDocker()) {\n\t\t\tconst overlay = writeRootlessOverlayIfNeeded(state.homeDir);\n\t\t\tif (overlay) {\n\t\t\t\textraFiles.push(overlay);\n\t\t\t\tsteps.push({\n\t\t\t\t\tstep: \"rootless-fallback\",\n\t\t\t\t\tok: true,\n\t\t\t\t\tdetail: \"dropping user: directive for rootless Docker\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn(\"[voice] rootless detection failed:\", e);\n\t}\n\tif (backgroundPull) {\n\t\tsetJob(VOICE_ADDON, {\n\t\t\tstate: \"pulling\",\n\t\t\tsteps: [...steps],\n\t\t\tstartedAt: Date.now(),\n\t\t\tprofile: activeProfile ?? void 0,\n\t\t\tfinishedAt: void 0,\n\t\t\terror: void 0\n\t\t});\n\t\trunBringUpJob({\n\t\t\tstate,\n\t\t\tservices,\n\t\t\tactiveProfile,\n\t\t\textraFiles,\n\t\t\tavailableProfiles,\n\t\t\tbaseSteps: [...steps]\n\t\t});\n\t\treturn jsonResponse(202, {\n\t\t\tok: true,\n\t\t\tvoiceAddon: {\n\t\t\t\twasAlreadyEnabled,\n\t\t\t\tstatus: \"pulling\",\n\t\t\t\tsteps,\n\t\t\t\tmessage: \"Voice image is downloading in the background (~2–8 GB). Poll GET /admin/voice for progress; UI auto-refreshes.\"\n\t\t\t}\n\t\t}, requestId);\n\t}\n\tconst outcome = await runBringUp({\n\t\tstate,\n\t\tservices,\n\t\tactiveProfile,\n\t\textraFiles,\n\t\tavailableProfiles,\n\t\tsteps\n\t});\n\tif (!outcome.composeOk) return jsonResponse(502, {\n\t\tok: false,\n\t\tvoiceAddon: {\n\t\t\twasAlreadyEnabled,\n\t\t\tsteps: outcome.steps,\n\t\t\terror: `Voice addon failed to start: ${outcome.composeErr ?? \"unknown error\"}`\n\t\t}\n\t}, requestId);\n\treturn jsonResponse(outcome.healthy || outcome.warming ? 200 : 502, {\n\t\tok: outcome.healthy || outcome.warming,\n\t\tvoiceAddon: {\n\t\t\twasAlreadyEnabled,\n\t\t\tsteps: outcome.steps,\n\t\t\t...outcome.warming ? { warming: true } : {},\n\t\t\t...outcome.healthy || outcome.warming ? {} : { error: \"Voice addon is starting but did not become healthy in time.\" }\n\t\t}\n\t}, requestId);\n}\n/**\n* Inline composeStop-other-profiles + composeUp + /health poll. Returns\n* the terminal state. Pushed `steps` get mutated in place so the caller\n* (sync or background) can read progress as it happens.\n*/\nasync function runBringUp(input) {\n\tconst { state, services, activeProfile, extraFiles, availableProfiles, steps } = input;\n\tlet composeOk = true;\n\tlet composeErr;\n\ttry {\n\t\tconst otherProfileServices = availableProfiles.filter((p) => p.id !== activeProfile).flatMap((p) => p.services).filter((svc) => !services.includes(svc));\n\t\tif (otherProfileServices.length > 0) try {\n\t\t\tawait composeStop(otherProfileServices, buildComposeOptions(state));\n\t\t} catch (e) {\n\t\t\tconsole.warn(\"[voice] composeStop other profiles failed:\", e);\n\t\t}\n\t\tconst baseOpts = buildComposeOptions(state);\n\t\tconst result = await composeUp({\n\t\t\t...baseOpts,\n\t\t\tfiles: [...baseOpts.files, ...extraFiles],\n\t\t\tservices,\n\t\t\tforceRecreate: true,\n\t\t\t...activeProfile ? { profiles: [activeProfile] } : {}\n\t\t});\n\t\tcomposeOk = result.ok;\n\t\tif (!result.ok) composeErr = translateDockerError(parseComposeStderr(result.stderr).find((f) => services.includes(f.service))?.reason ?? result.stderr ?? `compose up exited ${result.code}`);\n\t} catch (e) {\n\t\tcomposeOk = false;\n\t\tcomposeErr = translateDockerError(e instanceof Error ? e.message : String(e));\n\t}\n\tsteps.push({\n\t\tstep: \"compose-up\",\n\t\tok: composeOk,\n\t\t...composeErr ? { detail: composeErr.slice(0, 500) } : {}\n\t});\n\tif (!composeOk) return {\n\t\tcomposeOk,\n\t\tcomposeErr,\n\t\thealthy: false,\n\t\twarming: false,\n\t\tsteps\n\t};\n\tconst probeUrl = `${openpalmVoiceBaseURL()}/health`;\n\tconst deadline = Date.now() + VOICE_PROBE_TIMEOUT_MS;\n\tlet healthy = false;\n\twhile (Date.now() < deadline) {\n\t\ttry {\n\t\t\tif ((await fetch(probeUrl, { signal: AbortSignal.timeout(1500) })).ok) {\n\t\t\t\thealthy = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {}\n\t\tawait new Promise((r) => setTimeout(r, VOICE_PROBE_INTERVAL_MS));\n\t}\n\tlet warming = false;\n\tif (!healthy) try {\n\t\tif (await readContainerHealthStatus(\"openpalm-voice\") === \"starting\") warming = true;\n\t} catch {}\n\tsteps.push({\n\t\tstep: \"healthy\",\n\t\tok: healthy || warming,\n\t\t...healthy ? {} : warming ? { detail: \"still warming up — refresh in a moment\" } : { detail: `did not respond at ${probeUrl} within ${VOICE_PROBE_TIMEOUT_MS / 1e3}s` }\n\t});\n\treturn {\n\t\tcomposeOk,\n\t\thealthy,\n\t\twarming,\n\t\tsteps\n\t};\n}\n/**\n* Background variant: runs runBringUp and persists state transitions\n* into the activeJobs map. Returns nothing — the UI polls GET\n* /admin/voice to observe completion.\n*/\nasync function runBringUpJob(input) {\n\tconst steps = [...input.baseSteps];\n\ttry {\n\t\tsetJob(VOICE_ADDON, {\n\t\t\tstate: \"starting\",\n\t\t\tsteps\n\t\t});\n\t\tconst outcome = await runBringUp({\n\t\t\t...input,\n\t\t\tsteps\n\t\t});\n\t\tif (!outcome.composeOk) {\n\t\t\tsetJob(VOICE_ADDON, {\n\t\t\t\tstate: \"error\",\n\t\t\t\tsteps: outcome.steps,\n\t\t\t\terror: `Voice addon failed to start: ${outcome.composeErr ?? \"unknown error\"}`,\n\t\t\t\tfinishedAt: Date.now()\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tsetJob(VOICE_ADDON, {\n\t\t\tstate: outcome.healthy ? \"healthy\" : outcome.warming ? \"starting\" : \"error\",\n\t\t\tsteps: outcome.steps,\n\t\t\t...outcome.healthy || outcome.warming ? { error: void 0 } : { error: \"Voice addon is starting but did not become healthy in time.\" },\n\t\t\tfinishedAt: Date.now()\n\t\t});\n\t} catch (e) {\n\t\tsetJob(VOICE_ADDON, {\n\t\t\tstate: \"error\",\n\t\t\tsteps,\n\t\t\terror: e instanceof Error ? e.message : String(e),\n\t\t\tfinishedAt: Date.now()\n\t\t});\n\t}\n}\n/**\n* Lightweight wrapper around `docker info` to check whether the\n* `nvidia` runtime is registered. Used as a second signal alongside the\n* cached canonical CUDA profile availability result.\n*/\nasync function dockerHasNvidiaRuntime() {\n\tconst res = await execFileNoThrow(\"docker\", [\n\t\t\"info\",\n\t\t\"--format\",\n\t\t\"{{json .Runtimes}}\"\n\t], 2e3);\n\treturn res.ok && res.stdout.includes(\"\\\"nvidia\\\"\");\n}\n//#endregion\nexport { GET, PUT };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_server.ts-B0Q7kabg.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/voice/_server.ts.js"],"sourcesContent":["import { Ct as listEnabledAddonIds, Et as addonProfileId, I as buildComposeOptions, P as parseComposeStderr, Pt as readStackEnv, Tt as setAddonProfileSelection, _t as getAddonProfileAvailability, at as composeUp, gt as annotateAddonProfileAvailability, it as composeStop, s as writeVoiceVars, vt as getAddonProfileSelection, wt as setAddonEnabled, yt as getAddonProfiles } from \"../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../chunks/state.js\";\nimport { d as requireAdmin, i as errorResponse, l as jsonResponse, o as getRequestId } from \"../../../../chunks/helpers.js\";\nimport { t as withSerialQueue } from \"../../../../chunks/serial-queue.js\";\nimport { existsSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { execFile } from \"node:child_process\";\nimport { connect } from \"node:net\";\n//#region src/lib/server/voice-errors.ts\n/**\n* Translate raw docker / compose stderr into operator-actionable copy.\n*\n* Lives in $lib/server so the route can import it without violating\n* SvelteKit's +server.ts export rules (handlers + `_`-prefixed only).\n*\n* Pattern matches are intentionally case-insensitive and tolerant of\n* compose-CLI prefix decoration. Order matters: more specific patterns\n* first.\n*/\nfunction translateDockerError(stderr) {\n\tconst raw = (stderr ?? \"\").trim();\n\tif (!raw) return \"Docker reported an unknown error (no stderr).\";\n\tif (/spawn .*docker.*ENOENT|no such file or directory.*docker|docker:\\s*command not found/i.test(raw)) return \"Docker isn't installed on this host. Install Docker Engine or Docker Desktop, then retry.\";\n\tif (/pull access denied|manifest unknown|repository does not exist|not found: manifest unknown/i.test(raw)) return \"The voice image for this profile isn't published yet. Try the CPU profile.\";\n\tif (/failed to resolve reference|dial tcp.*lookup .+docker\\.io|i\\/o timeout.*registry|connection refused.*registry/i.test(raw)) return \"Can't reach Docker Hub. Check your internet connection, corporate firewall, or configure a registry mirror.\";\n\tif (/no space left on device|insufficient.*disk space|ENOSPC|write.*disk full/i.test(raw)) return \"Out of disk space. Free space and try again, or run `docker image prune -a` to reclaim unused images.\";\n\tif (/port is already allocated|bind.*address already in use|address already in use|failed to bind host port/i.test(raw)) return \"Port 8880 is already in use on this host. Free it or change the host port (set OP_VOICE_PORT_HOST).\";\n\tif (/unknown[^\\n]*runtime[^\\n]*nvidia|runtime\\s+\"nvidia\"\\s+not\\s+found|nvidia.*runtime.*not[^a-z]+(found|registered)/i.test(raw)) return \"The NVIDIA Docker runtime isn't registered on this machine. Try the CPU profile, or install nvidia-container-toolkit.\";\n\tif (/invoking the NVIDIA Container Runtime Hook/i.test(raw)) return \"Docker is in CDI mode but no CDI spec is registered. Try the CPU profile.\";\n\treturn raw.length > 300 ? raw.slice(0, 297) + \"…\" : raw;\n}\n//#endregion\n//#region src/routes/admin/voice/+server.ts\n/**\n* GET /admin/voice — Return current TTS/STT env vars from stack.env plus\n* an `availability` block (best-effort reachability of\n* the configured remote endpoints).\n* PUT /admin/voice — Write TTS/STT env vars to stack.env. Auto-enables\n* the openpalm-voice addon, brings the chosen profile\n* up, waits for /health, and translates Docker errors\n* to operator-actionable copy.\n*/\nvar VOICE_ADDON = \"voice\";\nvar VOICE_PROBE_TIMEOUT_MS = 18e4;\nvar VOICE_PROBE_INTERVAL_MS = 1e3;\nvar JOB_RETAIN_MS = 5 * 6e4;\nvar activeJobs = /* @__PURE__ */ new Map();\nfunction setJob(addon, patch) {\n\tconst existing = activeJobs.get(addon);\n\tconst next = existing ? {\n\t\t...existing,\n\t\t...patch\n\t} : {\n\t\tstate: \"pulling\",\n\t\tsteps: [],\n\t\tstartedAt: Date.now(),\n\t\t...patch\n\t};\n\tactiveJobs.set(addon, next);\n\treturn next;\n}\nfunction getActiveJob(addon) {\n\tconst job = activeJobs.get(addon);\n\tif (!job) return void 0;\n\tif (Date.now() - (job.finishedAt ?? job.startedAt) > JOB_RETAIN_MS) {\n\t\tactiveJobs.delete(addon);\n\t\treturn;\n\t}\n\treturn job;\n}\nvar REACHABILITY_TIMEOUT_MS = 1500;\nvar PORT_PROBE_TIMEOUT_MS = 750;\nasync function probeReachable(baseURL) {\n\tif (!baseURL) return false;\n\tconst url = baseURL.replace(/\\/+$/, \"\") + \"/v1/models\";\n\ttry {\n\t\treturn (await fetch(url, {\n\t\t\tmethod: \"GET\",\n\t\t\tsignal: AbortSignal.timeout(REACHABILITY_TIMEOUT_MS)\n\t\t})).status < 500;\n\t} catch {\n\t\treturn false;\n\t}\n}\n/**\n* Pick the best profile for this host. Prefers the first available GPU\n* profile (anything that isn't the canonical CPU profile) so operators with NVIDIA/AMD hardware\n* get the accelerated variant auto-selected. Falls back to the labelled\n* default, then first available, then first profile.\n*/\nfunction resolveDefaultProfile(profiles) {\n\tif (profiles.length === 0) return null;\n\tconst availableGpu = profiles.find((p) => p.id !== addonProfileId(VOICE_ADDON, \"cpu\") && p.available !== false);\n\tif (availableGpu) return availableGpu.id;\n\tconst labelledDefault = profiles.find((p) => p.default);\n\tif (labelledDefault && labelledDefault.available !== false) return labelledDefault.id;\n\tconst firstAvailable = profiles.find((p) => p.available !== false);\n\tif (firstAvailable) return firstAvailable.id;\n\treturn profiles[0].id;\n}\nvar GET = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst state = getState();\n\tconst env = readStackEnv(state.stackDir);\n\tconst ttsBaseURL = env[\"OP_TTS_BASE_URL\"] ?? \"\";\n\tconst sttBaseURL = env[\"OP_STT_BASE_URL\"] ?? \"\";\n\tconst profiles = await annotateAddonProfileAvailability(getAddonProfiles(state.homeDir, VOICE_ADDON));\n\tconst selectedProfile = getAddonProfileSelection(state.stackDir, VOICE_ADDON) ?? resolveDefaultProfile(profiles);\n\tconst [sttReachable, ttsReachable] = await Promise.all([probeReachable(sttBaseURL), probeReachable(ttsBaseURL)]);\n\treturn jsonResponse(200, {\n\t\ttts: {\n\t\t\tenabled: true,\n\t\t\tengine: env[\"OP_TTS_ENGINE\"] ?? \"\",\n\t\t\tprovider: env[\"OP_TTS_PROVIDER\"] ?? \"\",\n\t\t\tbaseURL: ttsBaseURL,\n\t\t\tmodel: env[\"OP_TTS_MODEL\"] ?? \"\",\n\t\t\tvoice: env[\"OP_TTS_VOICE\"] ?? \"\"\n\t\t},\n\t\tstt: {\n\t\t\tenabled: true,\n\t\t\tengine: env[\"OP_STT_ENGINE\"] ?? \"\",\n\t\t\tprovider: env[\"OP_STT_PROVIDER\"] ?? \"\",\n\t\t\tbaseURL: sttBaseURL,\n\t\t\tmodel: env[\"OP_STT_MODEL\"] ?? \"\",\n\t\t\tlanguage: env[\"OP_STT_LANGUAGE\"] ?? \"\"\n\t\t},\n\t\tavailability: {\n\t\t\tstt: {\n\t\t\t\tremoteConfigured: Boolean(sttBaseURL),\n\t\t\t\tremoteReachable: sttReachable\n\t\t\t},\n\t\t\ttts: {\n\t\t\t\tremoteConfigured: Boolean(ttsBaseURL),\n\t\t\t\tremoteReachable: ttsReachable\n\t\t\t}\n\t\t},\n\t\taddon: {\n\t\t\tprofiles,\n\t\t\tselectedProfile,\n\t\t\t...getActiveJob(VOICE_ADDON) ? { activeJob: getActiveJob(VOICE_ADDON) } : {}\n\t\t}\n\t}, requestId);\n};\nfunction readSection(raw, kind) {\n\tif (!raw || typeof raw !== \"object\") return null;\n\tconst section = {\n\t\tenabled: raw.enabled !== false,\n\t\tengine: typeof raw.engine === \"string\" ? raw.engine : void 0,\n\t\tprovider: typeof raw.provider === \"string\" ? raw.provider : void 0,\n\t\tbaseURL: typeof raw.baseURL === \"string\" ? raw.baseURL : void 0,\n\t\tmodel: typeof raw.model === \"string\" ? raw.model : void 0\n\t};\n\tif (kind === \"tts\" && typeof raw.voice === \"string\") section.voice = raw.voice;\n\tif (kind === \"stt\" && typeof raw.language === \"string\") section.language = raw.language;\n\treturn section;\n}\nfunction voiceHostPort() {\n\tconst raw = process.env.OP_VOICE_PORT_HOST?.trim();\n\tconst n = raw ? Number(raw) : NaN;\n\treturn Number.isFinite(n) && n > 0 ? n : 8880;\n}\nfunction openpalmVoiceBaseURL() {\n\treturn `http://127.0.0.1:${voiceHostPort()}`;\n}\nvar OPENPALM_VOICE_TTS_MODEL = \"kokoro\";\nvar OPENPALM_VOICE_STT_MODEL = \"whisper-1\";\nvar OPENPALM_VOICE_DEFAULT_VOICE = \"bf_isabella\";\n/**\n* For `engine === 'openpalm-voice'`, fill in baseURL/model with the addon's\n* preset values when the user didn't provide them. This is the auto-config\n* that makes \"select OpenPalm Voice → Save\" Just Work as long as the addon\n* is enabled. The user can still override (e.g. point at a different\n* voice host on the LAN).\n*/\nfunction applyOpenPalmVoicePreset(section, kind) {\n\tif (section.engine !== \"openpalm-voice\") return;\n\tif (!section.baseURL || !section.baseURL.trim()) section.baseURL = openpalmVoiceBaseURL();\n\tif (!section.model || !section.model.trim()) section.model = kind === \"tts\" ? OPENPALM_VOICE_TTS_MODEL : OPENPALM_VOICE_STT_MODEL;\n\tif (kind === \"tts\" && (!section.voice || !section.voice.trim())) section.voice = OPENPALM_VOICE_DEFAULT_VOICE;\n}\nfunction validateSection(section, kind) {\n\tif (!section || !section.engine) return null;\n\tif (section.engine === \"browser\" || section.engine === \"browser-stt\" || section.engine === \"browser-tts\") return null;\n\tif (section.engine.startsWith(\"skip-\")) return null;\n\tif (!section.baseURL || !section.baseURL.trim()) return `Remote ${kind.toUpperCase()} requires an endpoint URL.`;\n\treturn null;\n}\nfunction execFileNoThrow(cmd, args, timeoutMs) {\n\treturn new Promise((resolve) => {\n\t\texecFile(cmd, args, { timeout: timeoutMs }, (error, stdout, stderr) => {\n\t\t\tlet mergedStderr = stderr?.toString() ?? \"\";\n\t\t\tconst code = error?.code;\n\t\t\tif (code && !mergedStderr) if (code === \"ENOENT\") mergedStderr = `spawn ${cmd} ENOENT: command not found`;\n\t\t\telse mergedStderr = `spawn ${cmd} ${code}`;\n\t\t\tresolve({\n\t\t\t\tok: !error,\n\t\t\t\tstdout: stdout?.toString() ?? \"\",\n\t\t\t\tstderr: mergedStderr\n\t\t\t});\n\t\t});\n\t});\n}\n/**\n* True when the local docker daemon already has the named image cached.\n* `docker image inspect` exits 0 only when the image is present locally.\n*/\nasync function dockerImagePresent(imageRef) {\n\tif (!imageRef) return true;\n\treturn (await execFileNoThrow(\"docker\", [\n\t\t\"image\",\n\t\t\"inspect\",\n\t\timageRef\n\t], 5e3)).ok;\n}\n/**\n* Heuristic: image tags that include `-cu121` / `-rocm6` / `-cpu` are the\n* multi-GB voice images. Show the \"this may take a few minutes\" toast for\n* first pulls so the operator knows the upcoming compose-up isn't stuck.\n*/\nfunction isLargeImageTag(imageRef) {\n\treturn /(-cu\\d+|-rocm\\d+|-cpu)(\\s|$|@|\\b)/i.test(imageRef);\n}\n/**\n* Read the resolved image for a service from the merged compose config.\n* Best-effort — returns \"\" on any failure so callers can skip the pre-pull\n* check rather than blocking save.\n*/\nasync function resolveServiceImage(composeFiles, service) {\n\tconst args = [\"compose\"];\n\tfor (const f of composeFiles) args.push(\"-f\", f);\n\targs.push(\"--project-name\", resolveProjectName(), \"config\", \"--format\", \"json\");\n\tconst res = await execFileNoThrow(\"docker\", args, 15e3);\n\tif (!res.ok) return \"\";\n\ttry {\n\t\treturn JSON.parse(res.stdout).services?.[service]?.image ?? \"\";\n\t} catch {\n\t\treturn \"\";\n\t}\n}\nfunction resolveProjectName() {\n\treturn process.env.OP_PROJECT_NAME?.trim() || process.env.COMPOSE_PROJECT_NAME?.trim() || \"openpalm\";\n}\n/**\n* Probe a TCP port on 127.0.0.1. Resolves true when the connect succeeds\n* within PORT_PROBE_TIMEOUT_MS — meaning something is already listening.\n*/\nfunction isPortListening(port) {\n\treturn new Promise((resolve) => {\n\t\tconst socket = connect({\n\t\t\thost: \"127.0.0.1\",\n\t\t\tport\n\t\t});\n\t\tlet done = false;\n\t\tconst finish = (listening) => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\ttry {\n\t\t\t\tsocket.destroy();\n\t\t\t} catch {}\n\t\t\tresolve(listening);\n\t\t};\n\t\tsocket.setTimeout(PORT_PROBE_TIMEOUT_MS, () => finish(false));\n\t\tsocket.once(\"connect\", () => finish(true));\n\t\tsocket.once(\"error\", () => finish(false));\n\t});\n}\n/**\n* True when a docker container whose name matches openpalm-voice* is\n* already running and presumably owns the host port. Used by the port\n* pre-flight to avoid false positives when our own voice container is\n* the listener.\n*/\nasync function ourVoiceContainerRunning() {\n\tconst res = await execFileNoThrow(\"docker\", [\n\t\t\"ps\",\n\t\t\"--filter\",\n\t\t\"name=openpalm-voice\",\n\t\t\"--format\",\n\t\t\"{{.Names}}\"\n\t], 5e3);\n\tif (!res.ok) return false;\n\treturn res.stdout.trim().length > 0;\n}\n/**\n* Read the Docker healthcheck state of a container.\n* Returns \"starting\" while compose's start_period grace window is in\n* effect; \"healthy\" / \"unhealthy\" / \"none\" / \"\" otherwise.\n*/\nasync function readContainerHealthStatus(containerNamePrefix) {\n\tconst name = (await execFileNoThrow(\"docker\", [\n\t\t\"ps\",\n\t\t\"--filter\",\n\t\t`name=${containerNamePrefix}`,\n\t\t\"--format\",\n\t\t\"{{.Names}}\"\n\t], 5e3)).stdout.split(\"\\n\").map((s) => s.trim()).find(Boolean);\n\tif (!name) return \"\";\n\treturn (await execFileNoThrow(\"docker\", [\n\t\t\"inspect\",\n\t\tname,\n\t\t\"--format\",\n\t\t\"{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}\"\n\t], 5e3)).stdout.trim();\n}\n/**\n* Write a sibling compose overlay that switches `voice-cuda` from the\n* legacy `runtime: nvidia` form to the CDI `driver: cdi` form. Caller\n* includes it in the composeUp file list ONLY when the host probe\n* indicates the runtime is missing but a CDI spec exists.\n*\n* The canonical compose.yml stays as the runtime-nvidia form (the case\n* that needs no manual setup beyond installing nvidia-container-toolkit).\n*\n* Returns the absolute path of the overlay, or null when there is no\n* voice compose overlay to patch.\n*/\nfunction writeCdiOverlayIfNeeded(homeDir) {\n\tconst stackDir = join(homeDir, \"config\", \"stack\");\n\tif (!existsSync(join(stackDir, \"services.compose.yml\"))) return null;\n\tconst overlayPath = join(stackDir, \"voice.compose.cdi.yml\");\n\twriteFileSync(overlayPath, [\n\t\t\"# Generated overlay — switches voice-cuda from runtime:nvidia to CDI.\",\n\t\t\"# Applied only when the host probe shows the legacy NVIDIA runtime is\",\n\t\t\"# missing but /etc/cdi/nvidia.yaml is present.\",\n\t\t\"services:\",\n\t\t\" voice-cuda:\",\n\t\t\" runtime: \\\"\\\"\",\n\t\t\" deploy:\",\n\t\t\" resources:\",\n\t\t\" reservations:\",\n\t\t\" devices:\",\n\t\t\" - driver: cdi\",\n\t\t\" device_ids:\",\n\t\t\" - nvidia.com/gpu=all\",\n\t\t\"\"\n\t].join(\"\\n\"));\n\treturn overlayPath;\n}\n/**\n* Detect rootless Docker. The compose `user: \"${OP_UID:-1000}:${OP_GID:-1000}\"`\n* directive bakes the host UID into the container — but on a rootless\n* daemon the bind-mount UID inside the container is subuid-remapped, so\n* the resulting container UID has no write permission against\n* `${OP_HOME}/data/voice/models`. Removing the `user:` directive lets\n* Docker pick whatever UID the rootless mapping translates to inside the\n* user namespace, which DOES have write access to the bind-mount.\n*\n* `docker info` is the authoritative source: rootless daemons advertise\n* `SecurityOptions: ... name=rootless` and `CgroupDriver: ... rootless`.\n* We accept either signal.\n*/\nasync function detectRootlessDocker() {\n\tconst res = await execFileNoThrow(\"docker\", [\n\t\t\"info\",\n\t\t\"--format\",\n\t\t\"{{json .}}\"\n\t], 5e3);\n\tif (!res.ok || !res.stdout) return false;\n\ttry {\n\t\tconst parsed = JSON.parse(res.stdout);\n\t\tif ((Array.isArray(parsed.SecurityOptions) ? parsed.SecurityOptions.map((s) => String(s)) : []).some((s) => /name=rootless/i.test(s))) return true;\n\t\tif (typeof parsed.CgroupDriver === \"string\" && /rootless/i.test(parsed.CgroupDriver)) return true;\n\t\treturn false;\n\t} catch {\n\t\treturn /name=rootless|cgroup\\s*driver:.*rootless/i.test(res.stdout);\n\t}\n}\n/**\n* Write a sibling overlay that drops the `user:` directive from each\n* voice service. Mirrors writeCdiOverlayIfNeeded: caller includes the\n* returned path in composeUp's file list. Returns null when there is\n* no voice compose overlay to patch (so the file list stays valid and Docker\n* doesn't blow up on a missing -f arg).\n*/\nfunction writeRootlessOverlayIfNeeded(homeDir) {\n\tconst stackDir = join(homeDir, \"config\", \"stack\");\n\tif (!existsSync(join(stackDir, \"services.compose.yml\"))) return null;\n\tconst overlayPath = join(stackDir, \"voice.compose.rootless.yml\");\n\twriteFileSync(overlayPath, [\n\t\t\"# Generated overlay — removes the `user:` directive from voice services.\",\n\t\t\"# Applied only when `docker info` reports a rootless daemon. On rootless\",\n\t\t\"# Docker the compose-baked UID has no write access to the bind-mounted\",\n\t\t\"# state directory; letting Docker pick the namespaced UID restores it.\",\n\t\t\"services:\",\n\t\t\" voice:\",\n\t\t\" user: null\",\n\t\t\" voice-cuda:\",\n\t\t\" user: null\",\n\t\t\" voice-rocm:\",\n\t\t\" user: null\",\n\t\t\"\"\n\t].join(\"\\n\"));\n\treturn overlayPath;\n}\nvar PUT = (event) => {\n\treturn withSerialQueue(\"admin:voice:put\", () => handlePut(event));\n};\nasync function handlePut(event) {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst state = getState();\n\tlet body;\n\ttry {\n\t\tbody = await event.request.json();\n\t} catch {\n\t\treturn errorResponse(400, \"Bad Request\", \"Invalid JSON body\", {}, requestId);\n\t}\n\tif (!body || typeof body !== \"object\") return errorResponse(400, \"Bad Request\", \"Body must be an object\", {}, requestId);\n\tconst b = body;\n\tconst ttsSection = readSection(b.tts, \"tts\");\n\tconst sttSection = readSection(b.stt, \"stt\");\n\tif (ttsSection) applyOpenPalmVoicePreset(ttsSection, \"tts\");\n\tif (sttSection) applyOpenPalmVoicePreset(sttSection, \"stt\");\n\tconst ttsErr = validateSection(ttsSection, \"tts\");\n\tif (ttsErr) return errorResponse(400, \"invalid_tts\", ttsErr, {}, requestId);\n\tconst sttErr = validateSection(sttSection, \"stt\");\n\tif (sttErr) return errorResponse(400, \"invalid_stt\", sttErr, {}, requestId);\n\tconst config = {};\n\tif (ttsSection) config.tts = {\n\t\tenabled: ttsSection.enabled,\n\t\tengine: ttsSection.engine,\n\t\tprovider: ttsSection.provider,\n\t\tbaseURL: ttsSection.baseURL,\n\t\tmodel: ttsSection.model,\n\t\tvoice: ttsSection.voice\n\t};\n\tif (sttSection) config.stt = {\n\t\tenabled: sttSection.enabled,\n\t\tengine: sttSection.engine,\n\t\tprovider: sttSection.provider,\n\t\tbaseURL: sttSection.baseURL,\n\t\tmodel: sttSection.model,\n\t\tlanguage: sttSection.language\n\t};\n\twriteVoiceVars(config, state.stackDir);\n\tif (!(ttsSection?.engine === \"openpalm-voice\" || sttSection?.engine === \"openpalm-voice\")) {\n\t\tif (listEnabledAddonIds(state.homeDir).includes(VOICE_ADDON)) try {\n\t\t\tconst voiceServiceNames = getAddonProfiles(state.homeDir, VOICE_ADDON).flatMap((p) => p.services);\n\t\t\tconst unique = Array.from(new Set(voiceServiceNames));\n\t\t\tif (unique.length > 0) await composeStop(unique, buildComposeOptions(state));\n\t\t} catch (e) {\n\t\t\tconsole.warn(\"[voice] composeStop on disengage failed:\", e);\n\t\t}\n\t\treturn jsonResponse(200, { ok: true }, requestId);\n\t}\n\tconst availableProfiles = await annotateAddonProfileAvailability(getAddonProfiles(state.homeDir, VOICE_ADDON));\n\tconst requestedProfile = typeof b.profile === \"string\" ? b.profile.trim() : \"\";\n\tlet activeProfile = null;\n\tif (requestedProfile) {\n\t\tif (!availableProfiles.some((p) => p.id === requestedProfile)) return errorResponse(400, \"invalid_profile\", `Unknown voice profile \"${requestedProfile}\". Available: ${availableProfiles.map((p) => p.id).join(\", \") || \"(none)\"}`, {}, requestId);\n\t\tactiveProfile = requestedProfile;\n\t\tsetAddonProfileSelection(state.stackDir, VOICE_ADDON, activeProfile);\n\t} else activeProfile = getAddonProfileSelection(state.stackDir, VOICE_ADDON) ?? resolveDefaultProfile(availableProfiles);\n\tconst wasAlreadyEnabled = listEnabledAddonIds(state.homeDir).includes(VOICE_ADDON);\n\tconst steps = [];\n\tif (!wasAlreadyEnabled) try {\n\t\tsetAddonEnabled(state.homeDir, state.stackDir, VOICE_ADDON, true, state);\n\t\tsteps.push({\n\t\t\tstep: \"enable\",\n\t\t\tok: true\n\t\t});\n\t} catch (e) {\n\t\tconst detail = e instanceof Error ? e.message : String(e);\n\t\tsteps.push({\n\t\t\tstep: \"enable\",\n\t\t\tok: false,\n\t\t\tdetail\n\t\t});\n\t\treturn jsonResponse(502, {\n\t\t\tok: false,\n\t\t\tvoiceAddon: {\n\t\t\t\twasAlreadyEnabled,\n\t\t\t\tsteps,\n\t\t\t\terror: `Could not enable voice addon: ${detail}`\n\t\t\t}\n\t\t}, requestId);\n\t}\n\telse steps.push({\n\t\tstep: \"enable\",\n\t\tok: true,\n\t\tdetail: \"already enabled\"\n\t});\n\tconst hostPort = voiceHostPort();\n\tconst inVitest = !!process.env.VITEST;\n\tif (inVitest ? false : await isPortListening(hostPort)) {\n\t\tif (!await ourVoiceContainerRunning()) {\n\t\t\tconst msg = translateDockerError(`Bind for 127.0.0.1:${hostPort} failed: port is already allocated`);\n\t\t\tsteps.push({\n\t\t\t\tstep: \"port-check\",\n\t\t\t\tok: false,\n\t\t\t\tdetail: msg\n\t\t\t});\n\t\t\treturn jsonResponse(502, {\n\t\t\t\tok: false,\n\t\t\t\tvoiceAddon: {\n\t\t\t\t\twasAlreadyEnabled,\n\t\t\t\t\tsteps,\n\t\t\t\t\terror: msg\n\t\t\t\t}\n\t\t\t}, requestId);\n\t\t}\n\t\tsteps.push({\n\t\t\tstep: \"port-check\",\n\t\t\tok: true,\n\t\t\tdetail: \"our container is the listener\"\n\t\t});\n\t} else steps.push({\n\t\tstep: \"port-check\",\n\t\tok: true\n\t});\n\tconst profileServices = activeProfile ? availableProfiles.find((p) => p.id === activeProfile)?.services ?? [] : [];\n\tconst services = profileServices.length > 0 ? profileServices : [VOICE_ADDON];\n\tconst composeFilesBase = buildComposeOptions(state).files;\n\tconst primaryService = services[0];\n\tlet backgroundPull = false;\n\tif (primaryService && !inVitest) {\n\t\tconst imageRef = await resolveServiceImage(composeFilesBase, primaryService);\n\t\tif (imageRef && isLargeImageTag(imageRef)) {\n\t\t\tif (!await dockerImagePresent(imageRef)) {\n\t\t\t\tbackgroundPull = true;\n\t\t\t\tsteps.push({\n\t\t\t\t\tstep: \"pulling\",\n\t\t\t\t\tok: true,\n\t\t\t\t\tdetail: \"first-time download — several minutes for several GB\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tconst extraFiles = [];\n\tconst cdiFallbackSupported = process.platform !== \"win32\";\n\tif (activeProfile === addonProfileId(VOICE_ADDON, \"cuda\") && !inVitest && cdiFallbackSupported) {\n\t\tconst runtimeMissing = (await getAddonProfileAvailability({ id: addonProfileId(VOICE_ADDON, \"cuda\") })).available === false || !await dockerHasNvidiaRuntime();\n\t\tconst cdiSpecPresent = existsSync(\"/etc/cdi/nvidia.yaml\");\n\t\tif (runtimeMissing && cdiSpecPresent) {\n\t\t\tconst overlay = writeCdiOverlayIfNeeded(state.homeDir);\n\t\t\tif (overlay) {\n\t\t\t\textraFiles.push(overlay);\n\t\t\t\tsteps.push({\n\t\t\t\t\tstep: \"cdi-fallback\",\n\t\t\t\t\tok: true,\n\t\t\t\t\tdetail: \"using CDI device reservation\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tif (!inVitest) try {\n\t\tif (await detectRootlessDocker()) {\n\t\t\tconst overlay = writeRootlessOverlayIfNeeded(state.homeDir);\n\t\t\tif (overlay) {\n\t\t\t\textraFiles.push(overlay);\n\t\t\t\tsteps.push({\n\t\t\t\t\tstep: \"rootless-fallback\",\n\t\t\t\t\tok: true,\n\t\t\t\t\tdetail: \"dropping user: directive for rootless Docker\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn(\"[voice] rootless detection failed:\", e);\n\t}\n\tif (backgroundPull) {\n\t\tsetJob(VOICE_ADDON, {\n\t\t\tstate: \"pulling\",\n\t\t\tsteps: [...steps],\n\t\t\tstartedAt: Date.now(),\n\t\t\tprofile: activeProfile ?? void 0,\n\t\t\tfinishedAt: void 0,\n\t\t\terror: void 0\n\t\t});\n\t\trunBringUpJob({\n\t\t\tstate,\n\t\t\tservices,\n\t\t\tactiveProfile,\n\t\t\textraFiles,\n\t\t\tavailableProfiles,\n\t\t\tbaseSteps: [...steps]\n\t\t});\n\t\treturn jsonResponse(202, {\n\t\t\tok: true,\n\t\t\tvoiceAddon: {\n\t\t\t\twasAlreadyEnabled,\n\t\t\t\tstatus: \"pulling\",\n\t\t\t\tsteps,\n\t\t\t\tmessage: \"Voice image is downloading in the background (~2–8 GB). Poll GET /admin/voice for progress; UI auto-refreshes.\"\n\t\t\t}\n\t\t}, requestId);\n\t}\n\tconst outcome = await runBringUp({\n\t\tstate,\n\t\tservices,\n\t\tactiveProfile,\n\t\textraFiles,\n\t\tavailableProfiles,\n\t\tsteps\n\t});\n\tif (!outcome.composeOk) return jsonResponse(502, {\n\t\tok: false,\n\t\tvoiceAddon: {\n\t\t\twasAlreadyEnabled,\n\t\t\tsteps: outcome.steps,\n\t\t\terror: `Voice addon failed to start: ${outcome.composeErr ?? \"unknown error\"}`\n\t\t}\n\t}, requestId);\n\treturn jsonResponse(outcome.healthy || outcome.warming ? 200 : 502, {\n\t\tok: outcome.healthy || outcome.warming,\n\t\tvoiceAddon: {\n\t\t\twasAlreadyEnabled,\n\t\t\tsteps: outcome.steps,\n\t\t\t...outcome.warming ? { warming: true } : {},\n\t\t\t...outcome.healthy || outcome.warming ? {} : { error: \"Voice addon is starting but did not become healthy in time.\" }\n\t\t}\n\t}, requestId);\n}\n/**\n* Inline composeStop-other-profiles + composeUp + /health poll. Returns\n* the terminal state. Pushed `steps` get mutated in place so the caller\n* (sync or background) can read progress as it happens.\n*/\nasync function runBringUp(input) {\n\tconst { state, services, activeProfile, extraFiles, availableProfiles, steps } = input;\n\tlet composeOk = true;\n\tlet composeErr;\n\ttry {\n\t\tconst otherProfileServices = availableProfiles.filter((p) => p.id !== activeProfile).flatMap((p) => p.services).filter((svc) => !services.includes(svc));\n\t\tif (otherProfileServices.length > 0) try {\n\t\t\tawait composeStop(otherProfileServices, buildComposeOptions(state));\n\t\t} catch (e) {\n\t\t\tconsole.warn(\"[voice] composeStop other profiles failed:\", e);\n\t\t}\n\t\tconst baseOpts = buildComposeOptions(state);\n\t\tconst result = await composeUp({\n\t\t\t...baseOpts,\n\t\t\tfiles: [...baseOpts.files, ...extraFiles],\n\t\t\tservices,\n\t\t\tforceRecreate: true,\n\t\t\t...activeProfile ? { profiles: [activeProfile] } : {}\n\t\t});\n\t\tcomposeOk = result.ok;\n\t\tif (!result.ok) composeErr = translateDockerError(parseComposeStderr(result.stderr).find((f) => services.includes(f.service))?.reason ?? result.stderr ?? `compose up exited ${result.code}`);\n\t} catch (e) {\n\t\tcomposeOk = false;\n\t\tcomposeErr = translateDockerError(e instanceof Error ? e.message : String(e));\n\t}\n\tsteps.push({\n\t\tstep: \"compose-up\",\n\t\tok: composeOk,\n\t\t...composeErr ? { detail: composeErr.slice(0, 500) } : {}\n\t});\n\tif (!composeOk) return {\n\t\tcomposeOk,\n\t\tcomposeErr,\n\t\thealthy: false,\n\t\twarming: false,\n\t\tsteps\n\t};\n\tconst probeUrl = `${openpalmVoiceBaseURL()}/health`;\n\tconst deadline = Date.now() + VOICE_PROBE_TIMEOUT_MS;\n\tlet healthy = false;\n\twhile (Date.now() < deadline) {\n\t\ttry {\n\t\t\tif ((await fetch(probeUrl, { signal: AbortSignal.timeout(1500) })).ok) {\n\t\t\t\thealthy = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {}\n\t\tawait new Promise((r) => setTimeout(r, VOICE_PROBE_INTERVAL_MS));\n\t}\n\tlet warming = false;\n\tif (!healthy) try {\n\t\tif (await readContainerHealthStatus(\"openpalm-voice\") === \"starting\") warming = true;\n\t} catch {}\n\tsteps.push({\n\t\tstep: \"healthy\",\n\t\tok: healthy || warming,\n\t\t...healthy ? {} : warming ? { detail: \"still warming up — refresh in a moment\" } : { detail: `did not respond at ${probeUrl} within ${VOICE_PROBE_TIMEOUT_MS / 1e3}s` }\n\t});\n\treturn {\n\t\tcomposeOk,\n\t\thealthy,\n\t\twarming,\n\t\tsteps\n\t};\n}\n/**\n* Background variant: runs runBringUp and persists state transitions\n* into the activeJobs map. Returns nothing — the UI polls GET\n* /admin/voice to observe completion.\n*/\nasync function runBringUpJob(input) {\n\tconst steps = [...input.baseSteps];\n\ttry {\n\t\tsetJob(VOICE_ADDON, {\n\t\t\tstate: \"starting\",\n\t\t\tsteps\n\t\t});\n\t\tconst outcome = await runBringUp({\n\t\t\t...input,\n\t\t\tsteps\n\t\t});\n\t\tif (!outcome.composeOk) {\n\t\t\tsetJob(VOICE_ADDON, {\n\t\t\t\tstate: \"error\",\n\t\t\t\tsteps: outcome.steps,\n\t\t\t\terror: `Voice addon failed to start: ${outcome.composeErr ?? \"unknown error\"}`,\n\t\t\t\tfinishedAt: Date.now()\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tsetJob(VOICE_ADDON, {\n\t\t\tstate: outcome.healthy ? \"healthy\" : outcome.warming ? \"starting\" : \"error\",\n\t\t\tsteps: outcome.steps,\n\t\t\t...outcome.healthy || outcome.warming ? { error: void 0 } : { error: \"Voice addon is starting but did not become healthy in time.\" },\n\t\t\tfinishedAt: Date.now()\n\t\t});\n\t} catch (e) {\n\t\tsetJob(VOICE_ADDON, {\n\t\t\tstate: \"error\",\n\t\t\tsteps,\n\t\t\terror: e instanceof Error ? e.message : String(e),\n\t\t\tfinishedAt: Date.now()\n\t\t});\n\t}\n}\n/**\n* Lightweight wrapper around `docker info` to check whether the\n* `nvidia` runtime is registered. Used as a second signal alongside the\n* cached canonical CUDA profile availability result.\n*/\nasync function dockerHasNvidiaRuntime() {\n\tconst res = await execFileNoThrow(\"docker\", [\n\t\t\"info\",\n\t\t\"--format\",\n\t\t\"{{json .Runtimes}}\"\n\t], 2e3);\n\treturn res.ok && res.stdout.includes(\"\\\"nvidia\\\"\");\n}\n//#endregion\nexport { GET, PUT };\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { d as getRequestId, e as errorResponse, f as getUiLoginPassword, s as safeTokenCompare, b as createSession } from './helpers-BMquHUT_.js';
2
- import { s as sessionCookieHeader } from './session-cookie-DMI7Gl0P.js';
3
- import './src-Bn-AiiUV.js';
1
+ import { d as getRequestId, e as errorResponse, f as getUiLoginPassword, s as safeTokenCompare, b as createSession } from './helpers-BQUg4t3R.js';
2
+ import { s as sessionCookieHeader } from './session-cookie-CWm3gU2J.js';
3
+ import './src-DlScVN9s.js';
4
4
  import './chunk-CLZ62Ad-.js';
5
5
  import 'node:module';
6
6
  import './provider-constants-DPrj3yBX.js';
@@ -22,8 +22,8 @@ import 'zlib';
22
22
  import 'node:assert';
23
23
  import 'node:fs/promises';
24
24
  import 'node:os';
25
- import './endpoints-V56dw3W-.js';
26
- import './state-BPtnWnun.js';
25
+ import './endpoints-Bt-t-ppF.js';
26
+ import './state-OR3c9Jry.js';
27
27
 
28
28
  //#region src/routes/admin/auth/login/+server.ts
29
29
  var POST = async (event) => {
@@ -54,4 +54,4 @@ var POST = async (event) => {
54
54
  };
55
55
 
56
56
  export { POST };
57
- //# sourceMappingURL=_server.ts-BnMSj5yz.js.map
57
+ //# sourceMappingURL=_server.ts-B8e761jl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-BnMSj5yz.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/auth/login/_server.ts.js"],"sourcesContent":["import { f as safeTokenCompare, g as getUiLoginPassword, h as createSession, i as errorResponse, o as getRequestId } from \"../../../../../chunks/helpers.js\";\nimport { r as sessionCookieHeader } from \"../../../../../chunks/session-cookie.js\";\n//#region src/routes/admin/auth/login/+server.ts\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tlet body;\n\ttry {\n\t\tbody = await event.request.json();\n\t} catch {\n\t\treturn errorResponse(400, \"bad_request\", \"Invalid JSON body\", {}, requestId);\n\t}\n\tconst password = typeof body.password === \"string\" ? body.password : \"\";\n\tif (!password) return errorResponse(400, \"bad_request\", \"password is required\", {}, requestId);\n\tconst configured = getUiLoginPassword();\n\tif (!configured) return errorResponse(503, \"admin_not_configured\", \"OP_UI_LOGIN_PASSWORD has not been set. Complete setup first.\", {}, requestId);\n\tif (!safeTokenCompare(password, configured)) return errorResponse(401, \"unauthorized\", \"Invalid password\", {}, requestId);\n\tconst sessionToken = createSession();\n\treturn new Response(JSON.stringify({\n\t\tok: true,\n\t\trole: \"admin\"\n\t}), {\n\t\tstatus: 200,\n\t\theaders: {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t\"set-cookie\": sessionCookieHeader(sessionToken, event.request),\n\t\t\t\"x-request-id\": requestId\n\t\t}\n\t});\n};\n//#endregion\nexport { POST };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACG,IAAC,IAAI,GAAG,OAAO,KAAK,KAAK;AAC5B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,IAAI,IAAI;AACT,CAAC,IAAI;AACL,EAAE,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;AACnC,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,mBAAmB,EAAE,EAAE,EAAE,SAAS,CAAC;AAC9E,CAAC;AACD,CAAC,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE;AACxE,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,sBAAsB,EAAE,EAAE,EAAE,SAAS,CAAC;AAC/F,CAAC,MAAM,UAAU,GAAG,kBAAkB,EAAE;AACxC,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,sBAAsB,EAAE,8DAA8D,EAAE,EAAE,EAAE,SAAS,CAAC;AAClJ,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,CAAC;AAC1H,CAAC,MAAM,YAAY,GAAG,aAAa,EAAE;AACrC,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AACpC,EAAE,EAAE,EAAE,IAAI;AACV,EAAE,IAAI,EAAE;AACR,EAAE,CAAC,EAAE;AACL,EAAE,MAAM,EAAE,GAAG;AACb,EAAE,OAAO,EAAE;AACX,GAAG,cAAc,EAAE,kBAAkB;AACrC,GAAG,YAAY,EAAE,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;AACjE,GAAG,cAAc,EAAE;AACnB;AACA,EAAE,CAAC;AACH;;;;"}
1
+ {"version":3,"file":"_server.ts-B8e761jl.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/auth/login/_server.ts.js"],"sourcesContent":["import { f as safeTokenCompare, g as getUiLoginPassword, h as createSession, i as errorResponse, o as getRequestId } from \"../../../../../chunks/helpers.js\";\nimport { r as sessionCookieHeader } from \"../../../../../chunks/session-cookie.js\";\n//#region src/routes/admin/auth/login/+server.ts\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tlet body;\n\ttry {\n\t\tbody = await event.request.json();\n\t} catch {\n\t\treturn errorResponse(400, \"bad_request\", \"Invalid JSON body\", {}, requestId);\n\t}\n\tconst password = typeof body.password === \"string\" ? body.password : \"\";\n\tif (!password) return errorResponse(400, \"bad_request\", \"password is required\", {}, requestId);\n\tconst configured = getUiLoginPassword();\n\tif (!configured) return errorResponse(503, \"admin_not_configured\", \"OP_UI_LOGIN_PASSWORD has not been set. Complete setup first.\", {}, requestId);\n\tif (!safeTokenCompare(password, configured)) return errorResponse(401, \"unauthorized\", \"Invalid password\", {}, requestId);\n\tconst sessionToken = createSession();\n\treturn new Response(JSON.stringify({\n\t\tok: true,\n\t\trole: \"admin\"\n\t}), {\n\t\tstatus: 200,\n\t\theaders: {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t\"set-cookie\": sessionCookieHeader(sessionToken, event.request),\n\t\t\t\"x-request-id\": requestId\n\t\t}\n\t});\n};\n//#endregion\nexport { POST };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACG,IAAC,IAAI,GAAG,OAAO,KAAK,KAAK;AAC5B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,IAAI,IAAI;AACT,CAAC,IAAI;AACL,EAAE,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;AACnC,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,mBAAmB,EAAE,EAAE,EAAE,SAAS,CAAC;AAC9E,CAAC;AACD,CAAC,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE;AACxE,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,sBAAsB,EAAE,EAAE,EAAE,SAAS,CAAC;AAC/F,CAAC,MAAM,UAAU,GAAG,kBAAkB,EAAE;AACxC,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,sBAAsB,EAAE,8DAA8D,EAAE,EAAE,EAAE,SAAS,CAAC;AAClJ,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,CAAC;AAC1H,CAAC,MAAM,YAAY,GAAG,aAAa,EAAE;AACrC,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AACpC,EAAE,EAAE,EAAE,IAAI;AACV,EAAE,IAAI,EAAE;AACR,EAAE,CAAC,EAAE;AACL,EAAE,MAAM,EAAE,GAAG;AACb,EAAE,OAAO,EAAE;AACX,GAAG,cAAc,EAAE,kBAAkB;AACrC,GAAG,YAAY,EAAE,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;AACjE,GAAG,cAAc,EAAE;AACnB;AACA,EAAE,CAAC;AACH;;;;"}
@@ -1,6 +1,6 @@
1
- import { d as getRequestId, h as invalidateSession } from './helpers-BMquHUT_.js';
2
- import { S as SESSION_COOKIE_NAME, c as clearSessionCookieHeader } from './session-cookie-DMI7Gl0P.js';
3
- import './src-Bn-AiiUV.js';
1
+ import { d as getRequestId, h as invalidateSession } from './helpers-BQUg4t3R.js';
2
+ import { S as SESSION_COOKIE_NAME, c as clearSessionCookieHeader } from './session-cookie-CWm3gU2J.js';
3
+ import './src-DlScVN9s.js';
4
4
  import './chunk-CLZ62Ad-.js';
5
5
  import 'node:module';
6
6
  import './provider-constants-DPrj3yBX.js';
@@ -22,8 +22,8 @@ import 'zlib';
22
22
  import 'node:assert';
23
23
  import 'node:fs/promises';
24
24
  import 'node:os';
25
- import './endpoints-V56dw3W-.js';
26
- import './state-BPtnWnun.js';
25
+ import './endpoints-Bt-t-ppF.js';
26
+ import './state-OR3c9Jry.js';
27
27
 
28
28
  //#region src/routes/admin/auth/logout/+server.ts
29
29
  var POST = async (event) => {
@@ -41,4 +41,4 @@ var POST = async (event) => {
41
41
  };
42
42
 
43
43
  export { POST };
44
- //# sourceMappingURL=_server.ts-DnbvDRgj.js.map
44
+ //# sourceMappingURL=_server.ts-B9oPs4BP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-DnbvDRgj.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/auth/logout/_server.ts.js"],"sourcesContent":["import { _ as invalidateSession, o as getRequestId } from \"../../../../../chunks/helpers.js\";\nimport { n as clearSessionCookieHeader, t as SESSION_COOKIE_NAME } from \"../../../../../chunks/session-cookie.js\";\n//#region src/routes/admin/auth/logout/+server.ts\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst match = (event.request.headers.get(\"cookie\") ?? \"\").match(new RegExp(`(?:^|;\\\\s*)${SESSION_COOKIE_NAME}=([^;]+)`));\n\tif (match) invalidateSession(match[1]);\n\treturn new Response(JSON.stringify({ ok: true }), {\n\t\tstatus: 200,\n\t\theaders: {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t\"set-cookie\": clearSessionCookieHeader(event.request),\n\t\t\t\"x-request-id\": requestId\n\t\t}\n\t});\n};\n//#endregion\nexport { POST };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACG,IAAC,IAAI,GAAG,OAAO,KAAK,KAAK;AAC5B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzH,CAAC,IAAI,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AACnD,EAAE,MAAM,EAAE,GAAG;AACb,EAAE,OAAO,EAAE;AACX,GAAG,cAAc,EAAE,kBAAkB;AACrC,GAAG,YAAY,EAAE,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC;AACxD,GAAG,cAAc,EAAE;AACnB;AACA,EAAE,CAAC;AACH;;;;"}
1
+ {"version":3,"file":"_server.ts-B9oPs4BP.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/auth/logout/_server.ts.js"],"sourcesContent":["import { _ as invalidateSession, o as getRequestId } from \"../../../../../chunks/helpers.js\";\nimport { n as clearSessionCookieHeader, t as SESSION_COOKIE_NAME } from \"../../../../../chunks/session-cookie.js\";\n//#region src/routes/admin/auth/logout/+server.ts\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst match = (event.request.headers.get(\"cookie\") ?? \"\").match(new RegExp(`(?:^|;\\\\s*)${SESSION_COOKIE_NAME}=([^;]+)`));\n\tif (match) invalidateSession(match[1]);\n\treturn new Response(JSON.stringify({ ok: true }), {\n\t\tstatus: 200,\n\t\theaders: {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t\"set-cookie\": clearSessionCookieHeader(event.request),\n\t\t\t\"x-request-id\": requestId\n\t\t}\n\t});\n};\n//#endregion\nexport { POST };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACG,IAAC,IAAI,GAAG,OAAO,KAAK,KAAK;AAC5B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzH,CAAC,IAAI,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AACnD,EAAE,MAAM,EAAE,GAAG;AACb,EAAE,OAAO,EAAE;AACX,GAAG,cAAc,EAAE,kBAAkB;AACrC,GAAG,YAAY,EAAE,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC;AACxD,GAAG,cAAc,EAAE;AACnB;AACA,EAAE,CAAC;AACH;;;;"}
@@ -1,6 +1,6 @@
1
- import { d as getRequestId, r as requireAdmin, p as parseJsonBody, j as jsonBodyError, e as errorResponse, k as jsonResponse } from './helpers-BMquHUT_.js';
2
- import { t as testEmbeddingSettings } from './akm-T56LQBSh.js';
3
- import './src-Bn-AiiUV.js';
1
+ import { d as getRequestId, r as requireAdmin, p as parseJsonBody, j as jsonBodyError, e as errorResponse, k as jsonResponse } from './helpers-BQUg4t3R.js';
2
+ import { t as testEmbeddingSettings } from './akm-CrbKHwz0.js';
3
+ import './src-DlScVN9s.js';
4
4
  import './chunk-CLZ62Ad-.js';
5
5
  import 'node:module';
6
6
  import './provider-constants-DPrj3yBX.js';
@@ -22,8 +22,8 @@ import 'zlib';
22
22
  import 'node:assert';
23
23
  import 'node:fs/promises';
24
24
  import 'node:os';
25
- import './endpoints-V56dw3W-.js';
26
- import './state-BPtnWnun.js';
25
+ import './endpoints-Bt-t-ppF.js';
26
+ import './state-OR3c9Jry.js';
27
27
 
28
28
  //#region src/routes/admin/akm/embedding/test/+server.ts
29
29
  var POST = async (event) => {
@@ -51,4 +51,4 @@ var POST = async (event) => {
51
51
  };
52
52
 
53
53
  export { POST };
54
- //# sourceMappingURL=_server.ts-DFf5g6zS.js.map
54
+ //# sourceMappingURL=_server.ts-BEQKCY3C.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-DFf5g6zS.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/akm/embedding/test/_server.ts.js"],"sourcesContent":["import { c as jsonBodyError, d as requireAdmin, i as errorResponse, l as jsonResponse, o as getRequestId, u as parseJsonBody } from \"../../../../../../chunks/helpers.js\";\nimport { r as testEmbeddingSettings } from \"../../../../../../chunks/akm.js\";\n//#region src/routes/admin/akm/embedding/test/+server.ts\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst parsed = await parseJsonBody(event.request);\n\tif (\"error\" in parsed) return jsonBodyError(parsed, requestId);\n\tconst body = parsed.data;\n\tconst endpoint = typeof body.endpoint === \"string\" ? body.endpoint : \"\";\n\tconst model = typeof body.model === \"string\" ? body.model : \"\";\n\tconst provider = typeof body.provider === \"string\" ? body.provider : \"\";\n\tconst apiKey = typeof body.apiKey === \"string\" ? body.apiKey : \"\";\n\tconst dimension = typeof body.dimension === \"number\" ? body.dimension : void 0;\n\tif (!endpoint.trim() || !model.trim()) return errorResponse(400, \"bad_request\", \"Endpoint and model are required.\", {}, requestId);\n\tconst result = await testEmbeddingSettings({\n\t\tendpoint,\n\t\tmodel,\n\t\tprovider,\n\t\tapiKey,\n\t\tdimension\n\t});\n\tif (!result.ok) return errorResponse(502, \"embedding_test_failed\", result.message, {}, requestId);\n\treturn jsonResponse(200, result, requestId);\n};\n//#endregion\nexport { POST };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACG,IAAC,IAAI,GAAG,OAAO,KAAK,KAAK;AAC5B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;AACjD,CAAC,IAAI,SAAS,EAAE,OAAO,SAAS;AAChC,CAAC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;AAClD,CAAC,IAAI,OAAO,IAAI,MAAM,EAAE,OAAO,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC;AAC/D,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;AACzB,CAAC,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE;AACxE,CAAC,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE;AAC/D,CAAC,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE;AACxE,CAAC,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE;AAClE,CAAC,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM;AAC/E,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,kCAAkC,EAAE,EAAE,EAAE,SAAS,CAAC;AACnI,CAAC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;AAC5C,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,QAAQ;AACV,EAAE,MAAM;AACR,EAAE;AACF,EAAE,CAAC;AACH,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,uBAAuB,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC;AAClG,CAAC,OAAO,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC;AAC5C;;;;"}
1
+ {"version":3,"file":"_server.ts-BEQKCY3C.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/akm/embedding/test/_server.ts.js"],"sourcesContent":["import { c as jsonBodyError, d as requireAdmin, i as errorResponse, l as jsonResponse, o as getRequestId, u as parseJsonBody } from \"../../../../../../chunks/helpers.js\";\nimport { r as testEmbeddingSettings } from \"../../../../../../chunks/akm.js\";\n//#region src/routes/admin/akm/embedding/test/+server.ts\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst parsed = await parseJsonBody(event.request);\n\tif (\"error\" in parsed) return jsonBodyError(parsed, requestId);\n\tconst body = parsed.data;\n\tconst endpoint = typeof body.endpoint === \"string\" ? body.endpoint : \"\";\n\tconst model = typeof body.model === \"string\" ? body.model : \"\";\n\tconst provider = typeof body.provider === \"string\" ? body.provider : \"\";\n\tconst apiKey = typeof body.apiKey === \"string\" ? body.apiKey : \"\";\n\tconst dimension = typeof body.dimension === \"number\" ? body.dimension : void 0;\n\tif (!endpoint.trim() || !model.trim()) return errorResponse(400, \"bad_request\", \"Endpoint and model are required.\", {}, requestId);\n\tconst result = await testEmbeddingSettings({\n\t\tendpoint,\n\t\tmodel,\n\t\tprovider,\n\t\tapiKey,\n\t\tdimension\n\t});\n\tif (!result.ok) return errorResponse(502, \"embedding_test_failed\", result.message, {}, requestId);\n\treturn jsonResponse(200, result, requestId);\n};\n//#endregion\nexport { POST };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACG,IAAC,IAAI,GAAG,OAAO,KAAK,KAAK;AAC5B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;AACjD,CAAC,IAAI,SAAS,EAAE,OAAO,SAAS;AAChC,CAAC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;AAClD,CAAC,IAAI,OAAO,IAAI,MAAM,EAAE,OAAO,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC;AAC/D,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;AACzB,CAAC,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE;AACxE,CAAC,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE;AAC/D,CAAC,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE;AACxE,CAAC,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE;AAClE,CAAC,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM;AAC/E,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,kCAAkC,EAAE,EAAE,EAAE,SAAS,CAAC;AACnI,CAAC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;AAC5C,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,QAAQ;AACV,EAAE,MAAM;AACR,EAAE;AACF,EAAE,CAAC;AACH,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,uBAAuB,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC;AAClG,CAAC,OAAO,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC;AAC5C;;;;"}
@@ -1,6 +1,6 @@
1
- import { ah as listEnabledAddonIds } from './src-Bn-AiiUV.js';
2
- import { g as getState } from './state-BPtnWnun.js';
3
- import { d as getRequestId, k as jsonResponse } from './helpers-BMquHUT_.js';
1
+ import { ah as listEnabledAddonIds } from './src-DlScVN9s.js';
2
+ import { g as getState } from './state-OR3c9Jry.js';
3
+ import { d as getRequestId, k as jsonResponse } from './helpers-BQUg4t3R.js';
4
4
  import { execFile } from 'node:child_process';
5
5
  import { promisify } from 'node:util';
6
6
  import './chunk-CLZ62Ad-.js';
@@ -23,7 +23,7 @@ import 'zlib';
23
23
  import 'node:assert';
24
24
  import 'node:fs/promises';
25
25
  import 'node:os';
26
- import './endpoints-V56dw3W-.js';
26
+ import './endpoints-Bt-t-ppF.js';
27
27
 
28
28
  //#region src/routes/guardian/health/+server.ts
29
29
  var execFileAsync = promisify(execFile);
@@ -82,4 +82,4 @@ var GET = async (event) => {
82
82
  };
83
83
 
84
84
  export { GET };
85
- //# sourceMappingURL=_server.ts-D_FDcuWo.js.map
85
+ //# sourceMappingURL=_server.ts-BFeaJaPP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-D_FDcuWo.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/guardian/health/_server.ts.js"],"sourcesContent":["import { Ct as listEnabledAddonIds } from \"../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../chunks/state.js\";\nimport { l as jsonResponse, o as getRequestId } from \"../../../../chunks/helpers.js\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n//#region src/routes/guardian/health/+server.ts\nvar execFileAsync = promisify(execFile);\nvar PORTAL_ADDON_IDS = [\n\t\"api\",\n\t\"chat\",\n\t\"discord\",\n\t\"slack\"\n];\n/**\n* Guardian health — queries the running container directly.\n*\n* Guardian has no host port mapping in the 0.11.0+ layout (it's reachable\n* only on the internal portal_net/assistant_net networks). The previous\n* implementation read the UI's in-memory ControlPlaneState, which is stale\n* whenever the stack was started by something other than the UI itself\n* (CLI, docker compose directly, AppImage on a pre-existing stack).\n*\n* `docker container inspect ... --format '{{.State.Health.Status}}'` is the\n* authoritative source: it reads the compose-defined healthcheck the\n* guardian container already runs internally. Same approach as the\n* admin-tools-plugin host-side health-check tool.\n*/\nvar GET = async (event) => {\n\tconst requestId = getRequestId(event);\n\ttry {\n\t\tif (!listEnabledAddonIds(getState().homeDir).some((a) => PORTAL_ADDON_IDS.includes(a))) return jsonResponse(200, {\n\t\t\tstatus: \"not_deployed\",\n\t\t\tservice: \"guardian\"\n\t\t}, requestId);\n\t} catch {}\n\ttry {\n\t\tconst { stdout } = await execFileAsync(\"docker\", [\n\t\t\t\"container\",\n\t\t\t\"inspect\",\n\t\t\t\"openpalm-guardian-1\",\n\t\t\t\"--format\",\n\t\t\t\"{{.State.Health.Status}}\"\n\t\t], { timeout: 5e3 });\n\t\tconst status = stdout.trim();\n\t\tif (status === \"healthy\") return jsonResponse(200, {\n\t\t\tstatus: \"ok\",\n\t\t\tservice: \"guardian\"\n\t\t}, requestId);\n\t\treturn jsonResponse(503, {\n\t\t\tstatus: status || \"unknown\",\n\t\t\tservice: \"guardian\"\n\t\t}, requestId);\n\t} catch (err) {\n\t\treturn jsonResponse(503, {\n\t\t\tstatus: \"unreachable\",\n\t\t\tservice: \"guardian\",\n\t\t\terror: err instanceof Error ? err.message : String(err)\n\t\t}, requestId);\n\t}\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;AACA,IAAI,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC;AACvC,IAAI,gBAAgB,GAAG;AACvB,CAAC,KAAK;AACN,CAAC,MAAM;AACP,CAAC,SAAS;AACV,CAAC;AACD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,GAAG,GAAG,OAAO,KAAK,KAAK;AAC3B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,IAAI;AACL,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE;AACnH,GAAG,MAAM,EAAE,cAAc;AACzB,GAAG,OAAO,EAAE;AACZ,GAAG,EAAE,SAAS,CAAC;AACf,CAAC,CAAC,CAAC,MAAM,CAAC;AACV,CAAC,IAAI;AACL,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE;AACnD,GAAG,WAAW;AACd,GAAG,SAAS;AACZ,GAAG,qBAAqB;AACxB,GAAG,UAAU;AACb,GAAG;AACH,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACtB,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE;AAC9B,EAAE,IAAI,MAAM,KAAK,SAAS,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE;AACrD,GAAG,MAAM,EAAE,IAAI;AACf,GAAG,OAAO,EAAE;AACZ,GAAG,EAAE,SAAS,CAAC;AACf,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE;AAC3B,GAAG,MAAM,EAAE,MAAM,IAAI,SAAS;AAC9B,GAAG,OAAO,EAAE;AACZ,GAAG,EAAE,SAAS,CAAC;AACf,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACf,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE;AAC3B,GAAG,MAAM,EAAE,aAAa;AACxB,GAAG,OAAO,EAAE,UAAU;AACtB,GAAG,KAAK,EAAE,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG;AACzD,GAAG,EAAE,SAAS,CAAC;AACf,CAAC;AACD;;;;"}
1
+ {"version":3,"file":"_server.ts-BFeaJaPP.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/guardian/health/_server.ts.js"],"sourcesContent":["import { Ct as listEnabledAddonIds } from \"../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../chunks/state.js\";\nimport { l as jsonResponse, o as getRequestId } from \"../../../../chunks/helpers.js\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n//#region src/routes/guardian/health/+server.ts\nvar execFileAsync = promisify(execFile);\nvar PORTAL_ADDON_IDS = [\n\t\"api\",\n\t\"chat\",\n\t\"discord\",\n\t\"slack\"\n];\n/**\n* Guardian health — queries the running container directly.\n*\n* Guardian has no host port mapping in the 0.11.0+ layout (it's reachable\n* only on the internal portal_net/assistant_net networks). The previous\n* implementation read the UI's in-memory ControlPlaneState, which is stale\n* whenever the stack was started by something other than the UI itself\n* (CLI, docker compose directly, AppImage on a pre-existing stack).\n*\n* `docker container inspect ... --format '{{.State.Health.Status}}'` is the\n* authoritative source: it reads the compose-defined healthcheck the\n* guardian container already runs internally. Same approach as the\n* admin-tools-plugin host-side health-check tool.\n*/\nvar GET = async (event) => {\n\tconst requestId = getRequestId(event);\n\ttry {\n\t\tif (!listEnabledAddonIds(getState().homeDir).some((a) => PORTAL_ADDON_IDS.includes(a))) return jsonResponse(200, {\n\t\t\tstatus: \"not_deployed\",\n\t\t\tservice: \"guardian\"\n\t\t}, requestId);\n\t} catch {}\n\ttry {\n\t\tconst { stdout } = await execFileAsync(\"docker\", [\n\t\t\t\"container\",\n\t\t\t\"inspect\",\n\t\t\t\"openpalm-guardian-1\",\n\t\t\t\"--format\",\n\t\t\t\"{{.State.Health.Status}}\"\n\t\t], { timeout: 5e3 });\n\t\tconst status = stdout.trim();\n\t\tif (status === \"healthy\") return jsonResponse(200, {\n\t\t\tstatus: \"ok\",\n\t\t\tservice: \"guardian\"\n\t\t}, requestId);\n\t\treturn jsonResponse(503, {\n\t\t\tstatus: status || \"unknown\",\n\t\t\tservice: \"guardian\"\n\t\t}, requestId);\n\t} catch (err) {\n\t\treturn jsonResponse(503, {\n\t\t\tstatus: \"unreachable\",\n\t\t\tservice: \"guardian\",\n\t\t\terror: err instanceof Error ? err.message : String(err)\n\t\t}, requestId);\n\t}\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;AACA,IAAI,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC;AACvC,IAAI,gBAAgB,GAAG;AACvB,CAAC,KAAK;AACN,CAAC,MAAM;AACP,CAAC,SAAS;AACV,CAAC;AACD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,GAAG,GAAG,OAAO,KAAK,KAAK;AAC3B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,IAAI;AACL,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE;AACnH,GAAG,MAAM,EAAE,cAAc;AACzB,GAAG,OAAO,EAAE;AACZ,GAAG,EAAE,SAAS,CAAC;AACf,CAAC,CAAC,CAAC,MAAM,CAAC;AACV,CAAC,IAAI;AACL,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE;AACnD,GAAG,WAAW;AACd,GAAG,SAAS;AACZ,GAAG,qBAAqB;AACxB,GAAG,UAAU;AACb,GAAG;AACH,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACtB,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE;AAC9B,EAAE,IAAI,MAAM,KAAK,SAAS,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE;AACrD,GAAG,MAAM,EAAE,IAAI;AACf,GAAG,OAAO,EAAE;AACZ,GAAG,EAAE,SAAS,CAAC;AACf,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE;AAC3B,GAAG,MAAM,EAAE,MAAM,IAAI,SAAS;AAC9B,GAAG,OAAO,EAAE;AACZ,GAAG,EAAE,SAAS,CAAC;AACf,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACf,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE;AAC3B,GAAG,MAAM,EAAE,aAAa;AACxB,GAAG,OAAO,EAAE,UAAU;AACtB,GAAG,KAAK,EAAE,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG;AACzD,GAAG,EAAE,SAAS,CAAC;AACf,CAAC;AACD;;;;"}
@@ -1,6 +1,6 @@
1
- import { aK as runAssistantAkmCommand } from './src-Bn-AiiUV.js';
2
- import { g as getState } from './state-BPtnWnun.js';
3
- import { d as getRequestId, r as requireAdmin, e as errorResponse, k as jsonResponse } from './helpers-BMquHUT_.js';
1
+ import { aK as runAssistantAkmCommand } from './src-DlScVN9s.js';
2
+ import { g as getState } from './state-OR3c9Jry.js';
3
+ import { d as getRequestId, r as requireAdmin, e as errorResponse, k as jsonResponse } from './helpers-BQUg4t3R.js';
4
4
  import './chunk-CLZ62Ad-.js';
5
5
  import 'node:module';
6
6
  import './provider-constants-DPrj3yBX.js';
@@ -22,7 +22,7 @@ import 'zlib';
22
22
  import 'node:assert';
23
23
  import 'node:fs/promises';
24
24
  import 'node:os';
25
- import './endpoints-V56dw3W-.js';
25
+ import './endpoints-Bt-t-ppF.js';
26
26
 
27
27
  //#region src/routes/admin/akm/reindex/+server.ts
28
28
  var POST = async (event) => {
@@ -39,4 +39,4 @@ var POST = async (event) => {
39
39
  };
40
40
 
41
41
  export { POST };
42
- //# sourceMappingURL=_server.ts-CAryEfg5.js.map
42
+ //# sourceMappingURL=_server.ts-BJ8iu9GG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-CAryEfg5.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/akm/reindex/_server.ts.js"],"sourcesContent":["import { r as runAssistantAkmCommand } from \"../../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../../chunks/state.js\";\nimport { d as requireAdmin, i as errorResponse, l as jsonResponse, o as getRequestId } from \"../../../../../chunks/helpers.js\";\n//#region src/routes/admin/akm/reindex/+server.ts\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst result = await runAssistantAkmCommand(getState(), [\"index\", \"--full\"], 15 * 6e4);\n\tif (!result.ok) return errorResponse(502, \"akm_reindex_failed\", result.stderr.trim() || result.stdout.trim() || \"AKM re-index failed.\", {}, requestId);\n\treturn jsonResponse(200, {\n\t\tok: true,\n\t\tmessage: \"AKM index rebuilt successfully.\",\n\t\toutput: result.stdout.trim()\n\t}, requestId);\n};\n//#endregion\nexport { POST };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AACG,IAAC,IAAI,GAAG,OAAO,KAAK,KAAK;AAC5B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;AACjD,CAAC,IAAI,SAAS,EAAE,OAAO,SAAS;AAChC,CAAC,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC;AACvF,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,sBAAsB,EAAE,EAAE,EAAE,SAAS,CAAC;AACvJ,CAAC,OAAO,YAAY,CAAC,GAAG,EAAE;AAC1B,EAAE,EAAE,EAAE,IAAI;AACV,EAAE,OAAO,EAAE,iCAAiC;AAC5C,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;AAC5B,EAAE,EAAE,SAAS,CAAC;AACd;;;;"}
1
+ {"version":3,"file":"_server.ts-BJ8iu9GG.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/akm/reindex/_server.ts.js"],"sourcesContent":["import { r as runAssistantAkmCommand } from \"../../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../../chunks/state.js\";\nimport { d as requireAdmin, i as errorResponse, l as jsonResponse, o as getRequestId } from \"../../../../../chunks/helpers.js\";\n//#region src/routes/admin/akm/reindex/+server.ts\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst result = await runAssistantAkmCommand(getState(), [\"index\", \"--full\"], 15 * 6e4);\n\tif (!result.ok) return errorResponse(502, \"akm_reindex_failed\", result.stderr.trim() || result.stdout.trim() || \"AKM re-index failed.\", {}, requestId);\n\treturn jsonResponse(200, {\n\t\tok: true,\n\t\tmessage: \"AKM index rebuilt successfully.\",\n\t\toutput: result.stdout.trim()\n\t}, requestId);\n};\n//#endregion\nexport { POST };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AACG,IAAC,IAAI,GAAG,OAAO,KAAK,KAAK;AAC5B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;AACjD,CAAC,IAAI,SAAS,EAAE,OAAO,SAAS;AAChC,CAAC,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC;AACvF,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,sBAAsB,EAAE,EAAE,EAAE,SAAS,CAAC;AACvJ,CAAC,OAAO,YAAY,CAAC,GAAG,EAAE;AAC1B,EAAE,EAAE,EAAE,IAAI;AACV,EAAE,OAAO,EAAE,iCAAiC;AAC5C,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;AAC5B,EAAE,EAAE,SAAS,CAAC;AACd;;;;"}
@@ -1,6 +1,6 @@
1
- import { K as deleteUserEnvKey, X as ensureAkmUserEnv, aB as readUserEnvFile, G as createLogger, A as AKM_USER_ENV_REF, aY as writeUserEnvKey } from './src-Bn-AiiUV.js';
2
- import { g as getState } from './state-BPtnWnun.js';
3
- import { d as getRequestId, r as requireAdmin, e as errorResponse, k as jsonResponse, w as withAdminBody } from './helpers-BMquHUT_.js';
1
+ import { K as deleteUserEnvKey, X as ensureAkmUserEnv, aB as readUserEnvFile, G as createLogger, A as AKM_USER_ENV_REF, aY as writeUserEnvKey } from './src-DlScVN9s.js';
2
+ import { g as getState } from './state-OR3c9Jry.js';
3
+ import { d as getRequestId, r as requireAdmin, e as errorResponse, k as jsonResponse, w as withAdminBody } from './helpers-BQUg4t3R.js';
4
4
  import './chunk-CLZ62Ad-.js';
5
5
  import 'node:module';
6
6
  import './provider-constants-DPrj3yBX.js';
@@ -22,7 +22,7 @@ import 'zlib';
22
22
  import 'node:assert';
23
23
  import 'node:fs/promises';
24
24
  import 'node:os';
25
- import './endpoints-V56dw3W-.js';
25
+ import './endpoints-Bt-t-ppF.js';
26
26
 
27
27
  //#region src/routes/admin/secrets/user-env/+server.ts
28
28
  var logger = createLogger("admin.secrets.user-env");
@@ -97,4 +97,4 @@ var DELETE = async (event) => {
97
97
  };
98
98
 
99
99
  export { DELETE, GET, POST };
100
- //# sourceMappingURL=_server.ts-5uPW017t.js.map
100
+ //# sourceMappingURL=_server.ts-BRXhpPBA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-5uPW017t.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/secrets/user-env/_server.ts.js"],"sourcesContent":["import { _ as ensureAkmUserEnv, g as deleteUserEnvKey, ln as createLogger, m as AKM_USER_ENV_REF, v as readUserEnvFile, y as writeUserEnvKey } from \"../../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../../chunks/state.js\";\nimport { d as requireAdmin, i as errorResponse, l as jsonResponse, o as getRequestId, p as withAdminBody } from \"../../../../../chunks/helpers.js\";\n//#region src/routes/admin/secrets/user-env/+server.ts\nvar logger = createLogger(\"admin.secrets.user-env\");\nvar KEY_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;\n/**\n* GET — list keys in the akm env:user store. Values are NEVER returned.\n*/\nvar GET = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst envPath = ensureAkmUserEnv(getState());\n\treturn jsonResponse(200, {\n\t\tprovider: \"akm\",\n\t\tenvRef: AKM_USER_ENV_REF,\n\t\tkeys: Object.keys(readUserEnvFile(envPath)).sort()\n\t}, requestId);\n};\n/**\n* POST — write a key into the user env file. The value is shell-quoted and\n* written directly to `knowledge/env/user.env` (mode 0600); it never appears on\n* a process argv. The assistant sources the env file at startup, so a key\n* written here is visible to OpenCode after the next assistant restart.\n*/\nvar POST = (event) => withAdminBody(event, async ({ requestId, body }) => {\n\tconst state = getState();\n\tconst key = typeof body.key === \"string\" ? body.key.trim() : \"\";\n\tconst value = typeof body.value === \"string\" ? body.value : null;\n\tif (!key || value === null) return errorResponse(400, \"bad_request\", \"key and value are required\", {}, requestId);\n\tif (!KEY_RE.test(key)) return errorResponse(400, \"invalid_key\", \"key must match [A-Za-z_][A-Za-z0-9_]*\", {}, requestId);\n\tif (value.length === 0) return errorResponse(400, \"bad_request\", \"value must be non-empty; use DELETE to remove a key\", {}, requestId);\n\tif (/[\\x00-\\x08\\x0a-\\x1f\\x7f]/.test(value)) return errorResponse(400, \"invalid_value\", \"value must not contain newlines or control characters\", {}, requestId);\n\ttry {\n\t\twriteUserEnvKey(state, key, value);\n\t} catch (err) {\n\t\tconst reason = err instanceof Error ? err.message : String(err);\n\t\tlogger.warn(\"user env write failed\", {\n\t\t\tkey,\n\t\t\treason,\n\t\t\trequestId\n\t\t});\n\t\treturn errorResponse(500, \"write_failed\", `Failed to write user env key: ${reason}`, {}, requestId);\n\t}\n\treturn jsonResponse(200, {\n\t\tok: true,\n\t\tkey\n\t}, requestId);\n});\n/** DELETE — remove a key from the user env file. */\nvar DELETE = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst state = getState();\n\tconst key = new URL(event.request.url).searchParams.get(\"key\")?.trim() ?? \"\";\n\tif (!key || !KEY_RE.test(key)) return errorResponse(400, \"bad_request\", \"valid key query parameter is required\", {}, requestId);\n\ttry {\n\t\tdeleteUserEnvKey(state, key);\n\t} catch (err) {\n\t\tconst reason = err instanceof Error ? err.message : String(err);\n\t\tlogger.warn(\"user env delete failed\", {\n\t\t\tkey,\n\t\t\treason,\n\t\t\trequestId\n\t\t});\n\t\treturn errorResponse(500, \"delete_failed\", `Failed to remove user env key: ${reason}`, {}, requestId);\n\t}\n\treturn jsonResponse(200, {\n\t\tok: true,\n\t\tkey\n\t}, requestId);\n};\n//#endregion\nexport { DELETE, GET, POST };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_server.ts-BRXhpPBA.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/secrets/user-env/_server.ts.js"],"sourcesContent":["import { _ as ensureAkmUserEnv, g as deleteUserEnvKey, ln as createLogger, m as AKM_USER_ENV_REF, v as readUserEnvFile, y as writeUserEnvKey } from \"../../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../../chunks/state.js\";\nimport { d as requireAdmin, i as errorResponse, l as jsonResponse, o as getRequestId, p as withAdminBody } from \"../../../../../chunks/helpers.js\";\n//#region src/routes/admin/secrets/user-env/+server.ts\nvar logger = createLogger(\"admin.secrets.user-env\");\nvar KEY_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;\n/**\n* GET — list keys in the akm env:user store. Values are NEVER returned.\n*/\nvar GET = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst envPath = ensureAkmUserEnv(getState());\n\treturn jsonResponse(200, {\n\t\tprovider: \"akm\",\n\t\tenvRef: AKM_USER_ENV_REF,\n\t\tkeys: Object.keys(readUserEnvFile(envPath)).sort()\n\t}, requestId);\n};\n/**\n* POST — write a key into the user env file. The value is shell-quoted and\n* written directly to `knowledge/env/user.env` (mode 0600); it never appears on\n* a process argv. The assistant sources the env file at startup, so a key\n* written here is visible to OpenCode after the next assistant restart.\n*/\nvar POST = (event) => withAdminBody(event, async ({ requestId, body }) => {\n\tconst state = getState();\n\tconst key = typeof body.key === \"string\" ? body.key.trim() : \"\";\n\tconst value = typeof body.value === \"string\" ? body.value : null;\n\tif (!key || value === null) return errorResponse(400, \"bad_request\", \"key and value are required\", {}, requestId);\n\tif (!KEY_RE.test(key)) return errorResponse(400, \"invalid_key\", \"key must match [A-Za-z_][A-Za-z0-9_]*\", {}, requestId);\n\tif (value.length === 0) return errorResponse(400, \"bad_request\", \"value must be non-empty; use DELETE to remove a key\", {}, requestId);\n\tif (/[\\x00-\\x08\\x0a-\\x1f\\x7f]/.test(value)) return errorResponse(400, \"invalid_value\", \"value must not contain newlines or control characters\", {}, requestId);\n\ttry {\n\t\twriteUserEnvKey(state, key, value);\n\t} catch (err) {\n\t\tconst reason = err instanceof Error ? err.message : String(err);\n\t\tlogger.warn(\"user env write failed\", {\n\t\t\tkey,\n\t\t\treason,\n\t\t\trequestId\n\t\t});\n\t\treturn errorResponse(500, \"write_failed\", `Failed to write user env key: ${reason}`, {}, requestId);\n\t}\n\treturn jsonResponse(200, {\n\t\tok: true,\n\t\tkey\n\t}, requestId);\n});\n/** DELETE — remove a key from the user env file. */\nvar DELETE = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst state = getState();\n\tconst key = new URL(event.request.url).searchParams.get(\"key\")?.trim() ?? \"\";\n\tif (!key || !KEY_RE.test(key)) return errorResponse(400, \"bad_request\", \"valid key query parameter is required\", {}, requestId);\n\ttry {\n\t\tdeleteUserEnvKey(state, key);\n\t} catch (err) {\n\t\tconst reason = err instanceof Error ? err.message : String(err);\n\t\tlogger.warn(\"user env delete failed\", {\n\t\t\tkey,\n\t\t\treason,\n\t\t\trequestId\n\t\t});\n\t\treturn errorResponse(500, \"delete_failed\", `Failed to remove user env key: ${reason}`, {}, requestId);\n\t}\n\treturn jsonResponse(200, {\n\t\tok: true,\n\t\tkey\n\t}, requestId);\n};\n//#endregion\nexport { DELETE, GET, POST };\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { g as getActiveEndpoint } from './endpoints-V56dw3W-.js';
2
- import { d as getRequestId, r as requireAdmin } from './helpers-BMquHUT_.js';
3
- import './state-BPtnWnun.js';
4
- import './src-Bn-AiiUV.js';
1
+ import { g as getActiveEndpoint } from './endpoints-Bt-t-ppF.js';
2
+ import { d as getRequestId, r as requireAdmin } from './helpers-BQUg4t3R.js';
3
+ import './state-OR3c9Jry.js';
4
+ import './src-DlScVN9s.js';
5
5
  import './chunk-CLZ62Ad-.js';
6
6
  import 'node:module';
7
7
  import './provider-constants-DPrj3yBX.js';
@@ -109,4 +109,4 @@ var PUT = handler;
109
109
  var DELETE = handler;
110
110
 
111
111
  export { DELETE, GET, POST, PUT };
112
- //# sourceMappingURL=_server.ts-DcFHX6Eq.js.map
112
+ //# sourceMappingURL=_server.ts-BSEDW53_.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-DcFHX6Eq.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/proxy/assistant/_...path_/_server.ts.js"],"sourcesContent":["import { r as getActiveEndpoint } from \"../../../../../chunks/endpoints.js\";\nimport { d as requireAdmin, o as getRequestId } from \"../../../../../chunks/helpers.js\";\n//#region src/routes/proxy/assistant/[...path]/+server.ts\n/**\n* Proxy route: forward /proxy/assistant/[...path] → assistant OpenCode server.\n*\n* Auth: requires the operator's `op_session` cookie (cookie-only since\n* Phase 2 of the auth/proxy refactor — the `x-admin-token` header fallback\n* was removed).\n* Forwards the full request body and method unchanged.\n* The target URL and per-endpoint Basic-auth password are resolved per-request\n* from the active endpoint store, so switching endpoints in the UI takes\n* effect immediately without restarting the server.\n*\n* Streaming: the upstream response body is forwarded as-is (no buffering) so\n* SSE responses (text/event-stream) pass through chunk-by-chunk. We do not\n* impose a fixed timeout on the upstream fetch — OpenCode SSE streams can run\n* for minutes. Instead the per-request AbortController is wired to the client\n* disconnect signal (`event.request.signal`); when the browser aborts (tab\n* close, navigation away), we propagate the abort to upstream.\n*/\nfunction buildForwardHeaders(incomingContentType, username, password) {\n\tconst headers = {};\n\tif (incomingContentType) headers[\"content-type\"] = incomingContentType;\n\tif (password) headers[\"authorization\"] = `Basic ${btoa(`${username || \"openpalm\"}:${password}`)}`;\n\treturn headers;\n}\nfunction buildResponseHeaders(upstream, requestId, endpointId, endpointLabel) {\n\tconst headers = new Headers();\n\theaders.set(\"content-type\", upstream.headers.get(\"content-type\") ?? \"application/json\");\n\tconst cacheControl = upstream.headers.get(\"cache-control\");\n\tif (cacheControl) headers.set(\"cache-control\", cacheControl);\n\tconst transferEncoding = upstream.headers.get(\"transfer-encoding\");\n\tif (transferEncoding) headers.set(\"transfer-encoding\", transferEncoding);\n\theaders.set(\"x-request-id\", requestId);\n\theaders.set(\"x-endpoint-id\", endpointId);\n\theaders.set(\"x-endpoint-label\", encodeURIComponent(endpointLabel));\n\treturn headers;\n}\nvar handler = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst endpoint = getActiveEndpoint();\n\tconst { path } = event.params;\n\tconst targetUrl = `${endpoint.url}/${path}${event.url.search}`;\n\tconst method = event.request.method;\n\tconst contentType = event.request.headers.get(\"content-type\");\n\tconst body = method !== \"GET\" && method !== \"HEAD\" ? await event.request.arrayBuffer() : void 0;\n\tconst controller = new AbortController();\n\tconst onClientAbort = () => controller.abort();\n\tevent.request.signal.addEventListener(\"abort\", onClientAbort, { once: true });\n\ttry {\n\t\tconst upstream = await fetch(targetUrl, {\n\t\t\tmethod,\n\t\t\theaders: buildForwardHeaders(contentType, endpoint.username, endpoint.password),\n\t\t\tbody,\n\t\t\tsignal: controller.signal\n\t\t});\n\t\treturn new Response(upstream.body, {\n\t\t\tstatus: upstream.status,\n\t\t\theaders: buildResponseHeaders(upstream, requestId, endpoint.id, endpoint.label)\n\t\t});\n\t} catch (e) {\n\t\tevent.request.signal.removeEventListener(\"abort\", onClientAbort);\n\t\tconsole.warn(\"[proxy/assistant] Upstream request failed:\", e);\n\t\treturn new Response(JSON.stringify({\n\t\t\terror: \"endpoint_unreachable\",\n\t\t\tmessage: `Assistant endpoint \"${endpoint.label}\" is not reachable`,\n\t\t\tendpointId: endpoint.id,\n\t\t\tendpointLabel: endpoint.label,\n\t\t\turl: endpoint.url\n\t\t}), {\n\t\t\tstatus: 503,\n\t\t\theaders: {\n\t\t\t\t\"content-type\": \"application/json\",\n\t\t\t\t\"x-request-id\": requestId\n\t\t\t}\n\t\t});\n\t}\n};\nvar GET = handler;\nvar POST = handler;\nvar PUT = handler;\nvar DELETE = handler;\n//#endregion\nexport { DELETE, GET, POST, PUT };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_server.ts-BSEDW53_.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/proxy/assistant/_...path_/_server.ts.js"],"sourcesContent":["import { r as getActiveEndpoint } from \"../../../../../chunks/endpoints.js\";\nimport { d as requireAdmin, o as getRequestId } from \"../../../../../chunks/helpers.js\";\n//#region src/routes/proxy/assistant/[...path]/+server.ts\n/**\n* Proxy route: forward /proxy/assistant/[...path] → assistant OpenCode server.\n*\n* Auth: requires the operator's `op_session` cookie (cookie-only since\n* Phase 2 of the auth/proxy refactor — the `x-admin-token` header fallback\n* was removed).\n* Forwards the full request body and method unchanged.\n* The target URL and per-endpoint Basic-auth password are resolved per-request\n* from the active endpoint store, so switching endpoints in the UI takes\n* effect immediately without restarting the server.\n*\n* Streaming: the upstream response body is forwarded as-is (no buffering) so\n* SSE responses (text/event-stream) pass through chunk-by-chunk. We do not\n* impose a fixed timeout on the upstream fetch — OpenCode SSE streams can run\n* for minutes. Instead the per-request AbortController is wired to the client\n* disconnect signal (`event.request.signal`); when the browser aborts (tab\n* close, navigation away), we propagate the abort to upstream.\n*/\nfunction buildForwardHeaders(incomingContentType, username, password) {\n\tconst headers = {};\n\tif (incomingContentType) headers[\"content-type\"] = incomingContentType;\n\tif (password) headers[\"authorization\"] = `Basic ${btoa(`${username || \"openpalm\"}:${password}`)}`;\n\treturn headers;\n}\nfunction buildResponseHeaders(upstream, requestId, endpointId, endpointLabel) {\n\tconst headers = new Headers();\n\theaders.set(\"content-type\", upstream.headers.get(\"content-type\") ?? \"application/json\");\n\tconst cacheControl = upstream.headers.get(\"cache-control\");\n\tif (cacheControl) headers.set(\"cache-control\", cacheControl);\n\tconst transferEncoding = upstream.headers.get(\"transfer-encoding\");\n\tif (transferEncoding) headers.set(\"transfer-encoding\", transferEncoding);\n\theaders.set(\"x-request-id\", requestId);\n\theaders.set(\"x-endpoint-id\", endpointId);\n\theaders.set(\"x-endpoint-label\", encodeURIComponent(endpointLabel));\n\treturn headers;\n}\nvar handler = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst endpoint = getActiveEndpoint();\n\tconst { path } = event.params;\n\tconst targetUrl = `${endpoint.url}/${path}${event.url.search}`;\n\tconst method = event.request.method;\n\tconst contentType = event.request.headers.get(\"content-type\");\n\tconst body = method !== \"GET\" && method !== \"HEAD\" ? await event.request.arrayBuffer() : void 0;\n\tconst controller = new AbortController();\n\tconst onClientAbort = () => controller.abort();\n\tevent.request.signal.addEventListener(\"abort\", onClientAbort, { once: true });\n\ttry {\n\t\tconst upstream = await fetch(targetUrl, {\n\t\t\tmethod,\n\t\t\theaders: buildForwardHeaders(contentType, endpoint.username, endpoint.password),\n\t\t\tbody,\n\t\t\tsignal: controller.signal\n\t\t});\n\t\treturn new Response(upstream.body, {\n\t\t\tstatus: upstream.status,\n\t\t\theaders: buildResponseHeaders(upstream, requestId, endpoint.id, endpoint.label)\n\t\t});\n\t} catch (e) {\n\t\tevent.request.signal.removeEventListener(\"abort\", onClientAbort);\n\t\tconsole.warn(\"[proxy/assistant] Upstream request failed:\", e);\n\t\treturn new Response(JSON.stringify({\n\t\t\terror: \"endpoint_unreachable\",\n\t\t\tmessage: `Assistant endpoint \"${endpoint.label}\" is not reachable`,\n\t\t\tendpointId: endpoint.id,\n\t\t\tendpointLabel: endpoint.label,\n\t\t\turl: endpoint.url\n\t\t}), {\n\t\t\tstatus: 503,\n\t\t\theaders: {\n\t\t\t\t\"content-type\": \"application/json\",\n\t\t\t\t\"x-request-id\": requestId\n\t\t\t}\n\t\t});\n\t}\n};\nvar GET = handler;\nvar POST = handler;\nvar PUT = handler;\nvar DELETE = handler;\n//#endregion\nexport { DELETE, GET, POST, PUT };\n"],"names":[],"mappings":"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"}