@openpalm/ui 0.13.0-beta.7 → 0.13.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/build/.openpalm-ui-version +1 -1
- package/build/client/_app/immutable/assets/7.DHMKw-HL.css +1 -0
- package/build/client/_app/immutable/assets/7.DHMKw-HL.css.br +0 -0
- package/build/client/_app/immutable/assets/7.DHMKw-HL.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.CmCaAuiy.css +1 -0
- package/build/client/_app/immutable/assets/9.CmCaAuiy.css.br +0 -0
- package/build/client/_app/immutable/assets/9.CmCaAuiy.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{BE_4J5sS.js → B9uMOgDZ.js} +2 -2
- package/build/client/_app/immutable/chunks/B9uMOgDZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/B9uMOgDZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BwKrb5qD.js +1 -0
- package/build/client/_app/immutable/chunks/BwKrb5qD.js.br +2 -0
- package/build/client/_app/immutable/chunks/BwKrb5qD.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{mNzUu332.js → C092q_Hl.js} +1 -1
- package/build/client/_app/immutable/chunks/C092q_Hl.js.br +0 -0
- package/build/client/_app/immutable/chunks/C092q_Hl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C7g46Pjm.js +1 -0
- package/build/client/_app/immutable/chunks/C7g46Pjm.js.br +0 -0
- package/build/client/_app/immutable/chunks/C7g46Pjm.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CuKFR3Qo.js → CR3nChHO.js} +2 -2
- package/build/client/_app/immutable/chunks/CR3nChHO.js.br +0 -0
- package/build/client/_app/immutable/chunks/CR3nChHO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Clt9pCG1.js → CXv_deBx.js} +1 -1
- package/build/client/_app/immutable/chunks/CXv_deBx.js.br +0 -0
- package/build/client/_app/immutable/chunks/CXv_deBx.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D-DB6zTo.js +9 -0
- package/build/client/_app/immutable/chunks/D-DB6zTo.js.br +0 -0
- package/build/client/_app/immutable/chunks/D-DB6zTo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DDSqq1hR.js +1 -0
- package/build/client/_app/immutable/chunks/DDSqq1hR.js.br +0 -0
- package/build/client/_app/immutable/chunks/DDSqq1hR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/d1cxvUgj.js +1 -0
- package/build/client/_app/immutable/chunks/d1cxvUgj.js.br +0 -0
- package/build/client/_app/immutable/chunks/d1cxvUgj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BdIq5WIo.js → qrqTdjh7.js} +1 -1
- package/build/client/_app/immutable/chunks/qrqTdjh7.js.br +0 -0
- package/build/client/_app/immutable/chunks/qrqTdjh7.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.DKG33-gU.js → app.CXHi3StM.js} +2 -2
- package/build/client/_app/immutable/entry/app.CXHi3StM.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CXHi3StM.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.eS_-xLIC.js +1 -0
- package/build/client/_app/immutable/entry/start.eS_-xLIC.js.br +1 -0
- package/build/client/_app/immutable/entry/start.eS_-xLIC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.eA5H3idZ.js → 0.Bfv0aXoG.js} +1 -1
- package/build/client/_app/immutable/nodes/0.Bfv0aXoG.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.Bfv0aXoG.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.CvKFymDh.js → 1.B8Ebge5I.js} +1 -1
- package/build/client/_app/immutable/nodes/1.B8Ebge5I.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.B8Ebge5I.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{10.DFMf8WUQ.js → 10.Di4b61Rb.js} +1 -1
- package/build/client/_app/immutable/nodes/10.Di4b61Rb.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.Di4b61Rb.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.CUlazdDv.js +8 -0
- package/build/client/_app/immutable/nodes/11.CUlazdDv.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.CUlazdDv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.DQOL0qY_.js +1 -0
- package/build/client/_app/immutable/nodes/4.DQOL0qY_.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.DQOL0qY_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.bgdUYUlr.js → 5.BGqmDWpO.js} +1 -1
- package/build/client/_app/immutable/nodes/5.BGqmDWpO.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.BGqmDWpO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.Cf2kRGl-.js +2 -0
- package/build/client/_app/immutable/nodes/6.Cf2kRGl-.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.Cf2kRGl-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.CvaILUo5.js +16 -0
- package/build/client/_app/immutable/nodes/7.CvaILUo5.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.CvaILUo5.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.DvOR66Q0.js +128 -0
- package/build/client/_app/immutable/nodes/9.DvOR66Q0.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.DvOR66Q0.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +1 -1
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/{0-D9FIO-Bk.js → 0-D8UAPThv.js} +12 -6
- package/build/server/chunks/0-D8UAPThv.js.map +1 -0
- package/build/server/chunks/1-bS23Eg-d.js +9 -0
- package/build/server/chunks/{1-ItPJxTHP.js.map → 1-bS23Eg-d.js.map} +1 -1
- package/build/server/chunks/{10-B4fDiATl.js → 10-C5TUqG1t.js} +3 -3
- package/build/server/chunks/{10-B4fDiATl.js.map → 10-C5TUqG1t.js.map} +1 -1
- package/build/server/chunks/11-DSjZgp33.js +9 -0
- package/build/server/chunks/11-DSjZgp33.js.map +1 -0
- package/build/server/chunks/{3-DpC38K23.js → 3-D0iTJ9v2.js} +6 -6
- package/build/server/chunks/{3-DpC38K23.js.map → 3-D0iTJ9v2.js.map} +1 -1
- package/build/server/chunks/{4-DrJ64j1x.js → 4-CHJRF8qs.js} +3 -3
- package/build/server/chunks/{4-DrJ64j1x.js.map → 4-CHJRF8qs.js.map} +1 -1
- package/build/server/chunks/{5-BxzwX0rY.js → 5-CwCiwnFt.js} +3 -3
- package/build/server/chunks/{5-BxzwX0rY.js.map → 5-CwCiwnFt.js.map} +1 -1
- package/build/server/chunks/6-raswytzE.js +9 -0
- package/build/server/chunks/{6-DxXeT1e3.js.map → 6-raswytzE.js.map} +1 -1
- package/build/server/chunks/7-NC4-KlW9.js +9 -0
- package/build/server/chunks/7-NC4-KlW9.js.map +1 -0
- package/build/server/chunks/9-rIsHxfiY.js +9 -0
- package/build/server/chunks/9-rIsHxfiY.js.map +1 -0
- package/build/server/chunks/{ChatNavbar-CJYo_Hbc.js → ChatNavbar-DqdxDR5U.js} +9 -9
- package/build/server/chunks/{ChatNavbar-CJYo_Hbc.js.map → ChatNavbar-DqdxDR5U.js.map} +1 -1
- package/build/server/chunks/IconMic-CZN60P6B.js +10 -0
- package/build/server/chunks/IconMic-CZN60P6B.js.map +1 -0
- package/build/server/chunks/{IconServer-DkywyVFu.js → IconServer-BwcRjcsS.js} +4 -4
- package/build/server/chunks/{IconServer-DkywyVFu.js.map → IconServer-BwcRjcsS.js.map} +1 -1
- package/build/server/chunks/{IconSoundOn-DoAiK-qp.js → IconSoundOn-DTZuBn2-.js} +4 -4
- package/build/server/chunks/{IconSoundOn-DoAiK-qp.js.map → IconSoundOn-DTZuBn2-.js.map} +1 -1
- package/build/server/chunks/{IconStop-DKVpXPKq.js → IconStop-BxUfqTaV.js} +114 -847
- package/build/server/chunks/IconStop-BxUfqTaV.js.map +1 -0
- package/build/server/chunks/{QuestionCard-BCfoxMiS.js → QuestionCard-DOLuSSbI.js} +2 -2
- package/build/server/chunks/{QuestionCard-BCfoxMiS.js.map → QuestionCard-DOLuSSbI.js.map} +1 -1
- package/build/server/chunks/Spinner-2WZW6r_I.js +12 -0
- package/build/server/chunks/Spinner-2WZW6r_I.js.map +1 -0
- package/build/server/chunks/{_layout.svelte-DArOWGd3.js → _layout.svelte-CBBWJ3m3.js} +2 -3
- package/build/server/chunks/{_layout.svelte-DArOWGd3.js.map → _layout.svelte-CBBWJ3m3.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-S90xJHRa.js → _page.svelte-CYzntFY4.js} +10 -10
- package/build/server/chunks/{_page.svelte-S90xJHRa.js.map → _page.svelte-CYzntFY4.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-CGEtuNmS.js → _page.svelte-CysG6Te2.js} +13 -13
- package/build/server/chunks/_page.svelte-CysG6Te2.js.map +1 -0
- package/build/server/chunks/{_page.svelte-Dpf94Jor.js → _page.svelte-D-_cPU8e.js} +3 -3
- package/build/server/chunks/{_page.svelte-Dpf94Jor.js.map → _page.svelte-D-_cPU8e.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-qxgG6hsh.js → _page.svelte-D4hOWjfm.js} +61 -351
- package/build/server/chunks/_page.svelte-D4hOWjfm.js.map +1 -0
- package/build/server/chunks/_page.svelte-D9au75wl.js +183 -0
- package/build/server/chunks/_page.svelte-D9au75wl.js.map +1 -0
- package/build/server/chunks/{_page.svelte-FOm-OMQe.js → _page.svelte-DjldYxQn.js} +25 -133
- package/build/server/chunks/_page.svelte-DjldYxQn.js.map +1 -0
- package/build/server/chunks/{_page.svelte-B2cX_j9w.js → _page.svelte-DsJgu4mW.js} +3 -3
- package/build/server/chunks/{_page.svelte-B2cX_j9w.js.map → _page.svelte-DsJgu4mW.js.map} +1 -1
- package/build/server/chunks/_server.ts-1qbl_1NY.js +87 -0
- package/build/server/chunks/_server.ts-1qbl_1NY.js.map +1 -0
- package/build/server/chunks/{_server.ts-DQI9hYcE.js → _server.ts-2VPdIZFH.js} +6 -6
- package/build/server/chunks/{_server.ts-DQI9hYcE.js.map → _server.ts-2VPdIZFH.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C5T_Zuoy.js → _server.ts-68MuZYx_.js} +7 -7
- package/build/server/chunks/{_server.ts-C5T_Zuoy.js.map → _server.ts-68MuZYx_.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cph8nHvr.js → _server.ts-8AfutA1j.js} +6 -6
- package/build/server/chunks/{_server.ts-Cph8nHvr.js.map → _server.ts-8AfutA1j.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ZKEBn-qW.js → _server.ts-B-5y1hA4.js} +8 -8
- package/build/server/chunks/{_server.ts-ZKEBn-qW.js.map → _server.ts-B-5y1hA4.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cjo35hc1.js → _server.ts-B1CunPF7.js} +6 -6
- package/build/server/chunks/{_server.ts-Cjo35hc1.js.map → _server.ts-B1CunPF7.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DYLc6Os9.js → _server.ts-B1KGSkdl.js} +6 -6
- package/build/server/chunks/{_server.ts-DYLc6Os9.js.map → _server.ts-B1KGSkdl.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B_7lGoo_.js → _server.ts-B2NALEcR.js} +6 -6
- package/build/server/chunks/{_server.ts-B_7lGoo_.js.map → _server.ts-B2NALEcR.js.map} +1 -1
- package/build/server/chunks/{_server.ts-i9TaUbWr.js → _server.ts-B2iUBxXh.js} +8 -8
- package/build/server/chunks/{_server.ts-i9TaUbWr.js.map → _server.ts-B2iUBxXh.js.map} +1 -1
- package/build/server/chunks/{_server.ts-IEM_8o6U.js → _server.ts-BN8EkPAZ.js} +7 -7
- package/build/server/chunks/{_server.ts-IEM_8o6U.js.map → _server.ts-BN8EkPAZ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-N_mH0t0f.js → _server.ts-BQJfEfl9.js} +6 -6
- package/build/server/chunks/{_server.ts-N_mH0t0f.js.map → _server.ts-BQJfEfl9.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C4tBc7fm.js → _server.ts-BQSMacks.js} +9 -9
- package/build/server/chunks/{_server.ts-C4tBc7fm.js.map → _server.ts-BQSMacks.js.map} +1 -1
- package/build/server/chunks/{_server.ts-vJBq3idp.js → _server.ts-BYt64wi5.js} +2 -2
- package/build/server/chunks/{_server.ts-vJBq3idp.js.map → _server.ts-BYt64wi5.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BWMJRzwx.js → _server.ts-Ba0MJSs9.js} +6 -6
- package/build/server/chunks/{_server.ts-BWMJRzwx.js.map → _server.ts-Ba0MJSs9.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B1vQkdVA.js → _server.ts-BdIM_pWg.js} +8 -8
- package/build/server/chunks/{_server.ts-B1vQkdVA.js.map → _server.ts-BdIM_pWg.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DYg52Wyj.js → _server.ts-BfxTJHa-.js} +6 -6
- package/build/server/chunks/{_server.ts-DYg52Wyj.js.map → _server.ts-BfxTJHa-.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CMfz71Do.js → _server.ts-BiVyFRNv.js} +6 -6
- package/build/server/chunks/{_server.ts-CMfz71Do.js.map → _server.ts-BiVyFRNv.js.map} +1 -1
- package/build/server/chunks/{_server.ts-vlaPk3to.js → _server.ts-BrgEQhDo.js} +6 -6
- package/build/server/chunks/{_server.ts-vlaPk3to.js.map → _server.ts-BrgEQhDo.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BKnCIXe5.js → _server.ts-BtZN_8lV.js} +6 -6
- package/build/server/chunks/{_server.ts-BKnCIXe5.js.map → _server.ts-BtZN_8lV.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BhA9ywuA.js → _server.ts-Bx0PXf1w.js} +6 -6
- package/build/server/chunks/{_server.ts-BhA9ywuA.js.map → _server.ts-Bx0PXf1w.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CkVeEW46.js → _server.ts-Byaj9iKd.js} +6 -6
- package/build/server/chunks/{_server.ts-CkVeEW46.js.map → _server.ts-Byaj9iKd.js.map} +1 -1
- package/build/server/chunks/{_server.ts-oSGbQw4A.js → _server.ts-C1kDLq6m.js} +6 -6
- package/build/server/chunks/{_server.ts-oSGbQw4A.js.map → _server.ts-C1kDLq6m.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CLMsuxkK.js → _server.ts-C28zIW49.js} +6 -6
- package/build/server/chunks/{_server.ts-CLMsuxkK.js.map → _server.ts-C28zIW49.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BHaFrgm9.js → _server.ts-C2F80x6V.js} +7 -7
- package/build/server/chunks/{_server.ts-BHaFrgm9.js.map → _server.ts-C2F80x6V.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BOn4TCRw.js → _server.ts-C70sKEjH.js} +7 -7
- package/build/server/chunks/{_server.ts-BOn4TCRw.js.map → _server.ts-C70sKEjH.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CYu5XSM8.js → _server.ts-C754EzJA.js} +6 -6
- package/build/server/chunks/{_server.ts-CYu5XSM8.js.map → _server.ts-C754EzJA.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B7319d6O.js → _server.ts-C8n83Xl1.js} +6 -6
- package/build/server/chunks/{_server.ts-B7319d6O.js.map → _server.ts-C8n83Xl1.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DQTJ_bFp.js → _server.ts-CC6Bt-9t.js} +7 -7
- package/build/server/chunks/{_server.ts-DQTJ_bFp.js.map → _server.ts-CC6Bt-9t.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Y5pBzFz4.js → _server.ts-CJ76gcOX.js} +6 -6
- package/build/server/chunks/{_server.ts-Y5pBzFz4.js.map → _server.ts-CJ76gcOX.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B3iKXyUo.js → _server.ts-CMW6wbwP.js} +6 -6
- package/build/server/chunks/{_server.ts-B3iKXyUo.js.map → _server.ts-CMW6wbwP.js.map} +1 -1
- package/build/server/chunks/{_server.ts-pf6WrGLo.js → _server.ts-CNjG4x1a.js} +6 -6
- package/build/server/chunks/{_server.ts-pf6WrGLo.js.map → _server.ts-CNjG4x1a.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DhcBS9KQ.js → _server.ts-CRl7GqvU.js} +6 -6
- package/build/server/chunks/{_server.ts-DhcBS9KQ.js.map → _server.ts-CRl7GqvU.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D6-C5ctd.js → _server.ts-CUBWjRlp.js} +7 -7
- package/build/server/chunks/{_server.ts-D6-C5ctd.js.map → _server.ts-CUBWjRlp.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B-uAgtQC.js → _server.ts-CYoKjlbj.js} +6 -6
- package/build/server/chunks/{_server.ts-B-uAgtQC.js.map → _server.ts-CYoKjlbj.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cu48eVwM.js → _server.ts-CafJDVBQ.js} +2 -2
- package/build/server/chunks/{_server.ts-Cu48eVwM.js.map → _server.ts-CafJDVBQ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CvjVUcFR.js → _server.ts-Cd9hDiKk.js} +6 -6
- package/build/server/chunks/{_server.ts-CvjVUcFR.js.map → _server.ts-Cd9hDiKk.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BgL3_hTS.js → _server.ts-CgQfVR3g.js} +7 -7
- package/build/server/chunks/{_server.ts-BgL3_hTS.js.map → _server.ts-CgQfVR3g.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BtZ9-ZYu.js → _server.ts-CilbVIRO.js} +2 -2
- package/build/server/chunks/{_server.ts-BtZ9-ZYu.js.map → _server.ts-CilbVIRO.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CSBd_6yC.js → _server.ts-Ck25Xm32.js} +7 -7
- package/build/server/chunks/{_server.ts-CSBd_6yC.js.map → _server.ts-Ck25Xm32.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DvUVX3X0.js → _server.ts-Cp-_qWC_.js} +7 -7
- package/build/server/chunks/{_server.ts-DvUVX3X0.js.map → _server.ts-Cp-_qWC_.js.map} +1 -1
- package/build/server/chunks/{_server.ts-7pcCO8Pf.js → _server.ts-CuEFmJ07.js} +7 -7
- package/build/server/chunks/{_server.ts-7pcCO8Pf.js.map → _server.ts-CuEFmJ07.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DR0kmbl9.js → _server.ts-D5vc4lGC.js} +6 -6
- package/build/server/chunks/{_server.ts-DR0kmbl9.js.map → _server.ts-D5vc4lGC.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CtkA_Ld0.js → _server.ts-DDLE66QT.js} +7 -7
- package/build/server/chunks/{_server.ts-CtkA_Ld0.js.map → _server.ts-DDLE66QT.js.map} +1 -1
- package/build/server/chunks/{_server.ts-xQhNjF_X.js → _server.ts-DEF1ChPD.js} +6 -6
- package/build/server/chunks/{_server.ts-xQhNjF_X.js.map → _server.ts-DEF1ChPD.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BH8Y1mmb.js → _server.ts-DHUtPRWK.js} +4 -4
- package/build/server/chunks/{_server.ts-BH8Y1mmb.js.map → _server.ts-DHUtPRWK.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B0MK-ynu.js → _server.ts-DHoTyKXL.js} +14 -10
- package/build/server/chunks/_server.ts-DHoTyKXL.js.map +1 -0
- package/build/server/chunks/{_server.ts-BaEUZaLH.js → _server.ts-DSB9Fzwa.js} +4 -4
- package/build/server/chunks/{_server.ts-BaEUZaLH.js.map → _server.ts-DSB9Fzwa.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dc1s3sLN.js → _server.ts-DW36Vbiq.js} +6 -6
- package/build/server/chunks/{_server.ts-Dc1s3sLN.js.map → _server.ts-DW36Vbiq.js.map} +1 -1
- package/build/server/chunks/{_server.ts-v3cF2xWi.js → _server.ts-DWG4CKWG.js} +6 -6
- package/build/server/chunks/{_server.ts-v3cF2xWi.js.map → _server.ts-DWG4CKWG.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CCTZbI7L.js → _server.ts-DXxQIT2o.js} +7 -7
- package/build/server/chunks/{_server.ts-CCTZbI7L.js.map → _server.ts-DXxQIT2o.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CSYdjKAH.js → _server.ts-Da8_J1a4.js} +7 -7
- package/build/server/chunks/{_server.ts-CSYdjKAH.js.map → _server.ts-Da8_J1a4.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DeuURP8u.js → _server.ts-DcH5edss.js} +6 -6
- package/build/server/chunks/{_server.ts-DeuURP8u.js.map → _server.ts-DcH5edss.js.map} +1 -1
- package/build/server/chunks/{_server.ts-iXjPBf7J.js → _server.ts-DiHLYNbQ.js} +7 -7
- package/build/server/chunks/{_server.ts-iXjPBf7J.js.map → _server.ts-DiHLYNbQ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-fenM6Iln.js → _server.ts-Dio2CslE.js} +7 -7
- package/build/server/chunks/_server.ts-Dio2CslE.js.map +1 -0
- package/build/server/chunks/{_server.ts-DcpOpD6s.js → _server.ts-Dlt1obi9.js} +6 -6
- package/build/server/chunks/{_server.ts-DcpOpD6s.js.map → _server.ts-Dlt1obi9.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CEUFtmpE.js → _server.ts-Ds0U_zKR.js} +7 -7
- package/build/server/chunks/{_server.ts-CEUFtmpE.js.map → _server.ts-Ds0U_zKR.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DlKT-RbM.js → _server.ts-DsVsFcf8.js} +15 -10
- package/build/server/chunks/_server.ts-DsVsFcf8.js.map +1 -0
- package/build/server/chunks/{_server.ts-BCpQ8Qdr.js → _server.ts-Du3PIYf8.js} +6 -6
- package/build/server/chunks/{_server.ts-BCpQ8Qdr.js.map → _server.ts-Du3PIYf8.js.map} +1 -1
- package/build/server/chunks/{_server.ts-3bBG0DBN.js → _server.ts-Duzj6Wm_.js} +6 -18
- package/build/server/chunks/_server.ts-Duzj6Wm_.js.map +1 -0
- package/build/server/chunks/{_server.ts-BGTw6w-C.js → _server.ts-DyaoaWIS.js} +7 -7
- package/build/server/chunks/{_server.ts-BGTw6w-C.js.map → _server.ts-DyaoaWIS.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CxH-7UEc.js → _server.ts-EYtSo6HZ.js} +6 -6
- package/build/server/chunks/{_server.ts-CxH-7UEc.js.map → _server.ts-EYtSo6HZ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BgOS_sDK.js → _server.ts-JvnkkOhX.js} +7 -7
- package/build/server/chunks/{_server.ts-BgOS_sDK.js.map → _server.ts-JvnkkOhX.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DzV6EO26.js → _server.ts-N0u5ruZe.js} +6 -6
- package/build/server/chunks/{_server.ts-DzV6EO26.js.map → _server.ts-N0u5ruZe.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D0XsGdhx.js → _server.ts-NdCztCBP.js} +6 -6
- package/build/server/chunks/{_server.ts-D0XsGdhx.js.map → _server.ts-NdCztCBP.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CFKGqT4L.js → _server.ts-OGUKP5Tu.js} +6 -6
- package/build/server/chunks/{_server.ts-CFKGqT4L.js.map → _server.ts-OGUKP5Tu.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DuO_GU5A.js → _server.ts-Q1KEyBck.js} +6 -6
- package/build/server/chunks/{_server.ts-DuO_GU5A.js.map → _server.ts-Q1KEyBck.js.map} +1 -1
- package/build/server/chunks/{_server.ts-z5C3PAAB.js → _server.ts-TIRuudir.js} +2 -2
- package/build/server/chunks/{_server.ts-z5C3PAAB.js.map → _server.ts-TIRuudir.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DXwG4w1_.js → _server.ts-WTZtC5sX.js} +10 -4
- package/build/server/chunks/_server.ts-WTZtC5sX.js.map +1 -0
- package/build/server/chunks/{_server.ts-DR_9WXW4.js → _server.ts-WsWoJE5V.js} +8 -8
- package/build/server/chunks/{_server.ts-DR_9WXW4.js.map → _server.ts-WsWoJE5V.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CjeMP5Vf.js → _server.ts-X8GX4ChJ.js} +6 -6
- package/build/server/chunks/{_server.ts-CjeMP5Vf.js.map → _server.ts-X8GX4ChJ.js.map} +1 -1
- package/build/server/chunks/{_server.ts--F22byeV.js → _server.ts-XIc2PDRd.js} +7 -7
- package/build/server/chunks/{_server.ts--F22byeV.js.map → _server.ts-XIc2PDRd.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CQeqwCqj.js → _server.ts-YsFgaaVd.js} +6 -6
- package/build/server/chunks/{_server.ts-CQeqwCqj.js.map → _server.ts-YsFgaaVd.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CpyfojV9.js → _server.ts-bOcb37D9.js} +7 -7
- package/build/server/chunks/{_server.ts-CpyfojV9.js.map → _server.ts-bOcb37D9.js.map} +1 -1
- package/build/server/chunks/{_server.ts-yZ8CGJNE.js → _server.ts-e_8LykNe.js} +7 -7
- package/build/server/chunks/{_server.ts-yZ8CGJNE.js.map → _server.ts-e_8LykNe.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CY-GNKZT.js → _server.ts-hLimfy8i.js} +6 -6
- package/build/server/chunks/{_server.ts-CY-GNKZT.js.map → _server.ts-hLimfy8i.js.map} +1 -1
- package/build/server/chunks/{_server.ts-AC1zqetQ.js → _server.ts-khI1sqja.js} +2 -2
- package/build/server/chunks/{_server.ts-AC1zqetQ.js.map → _server.ts-khI1sqja.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BF5JzSrs.js → _server.ts-p1Z3DBlr.js} +6 -6
- package/build/server/chunks/{_server.ts-BF5JzSrs.js.map → _server.ts-p1Z3DBlr.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DvfnkNfI.js → _server.ts-uzB454LO.js} +7 -7
- package/build/server/chunks/{_server.ts-DvfnkNfI.js.map → _server.ts-uzB454LO.js.map} +1 -1
- package/build/server/chunks/{_server.ts-jqktLs6L.js → _server.ts-wKSTgSwf.js} +6 -6
- package/build/server/chunks/{_server.ts-jqktLs6L.js.map → _server.ts-wKSTgSwf.js.map} +1 -1
- package/build/server/chunks/addon-helpers-DaC3GR9u.js +153 -0
- package/build/server/chunks/addon-helpers-DaC3GR9u.js.map +1 -0
- package/build/server/chunks/{admin-update-lock-B-z4UE8R.js → admin-update-lock-Bu3VvAoN.js} +3 -3
- package/build/server/chunks/{admin-update-lock-B-z4UE8R.js.map → admin-update-lock-Bu3VvAoN.js.map} +1 -1
- package/build/server/chunks/{akm-C4NCZfJB.js → akm-DsJ8_uuW.js} +2 -2
- package/build/server/chunks/{akm-C4NCZfJB.js.map → akm-DsJ8_uuW.js.map} +1 -1
- package/build/server/chunks/{_server.ts-08JCSzPu.js → bring-up-BBKMJltU.js} +30 -228
- package/build/server/chunks/bring-up-BBKMJltU.js.map +1 -0
- package/build/server/chunks/{catalog-Czlhb_2V.js → catalog-8d-U0FbY.js} +5 -5
- package/build/server/chunks/{catalog-Czlhb_2V.js.map → catalog-8d-U0FbY.js.map} +1 -1
- package/build/server/chunks/{client-HEAniq5u.js → client-CHoZA_w9.js} +2 -2
- package/build/server/chunks/{client-HEAniq5u.js.map → client-CHoZA_w9.js.map} +1 -1
- package/build/server/chunks/{compose-args2-B1cYvF5r.js → compose-args2-C9sLS6QR.js} +2 -2
- package/build/server/chunks/compose-args2-C9sLS6QR.js.map +1 -0
- package/build/server/chunks/{config-C15S-ENd.js → config-ChxZZk6h.js} +2 -2
- package/build/server/chunks/{config-C15S-ENd.js.map → config-ChxZZk6h.js.map} +1 -1
- package/build/server/chunks/{docker2-CF7qyd1U.js → docker2-DGq6J3Kp.js} +2 -2
- package/build/server/chunks/docker2-DGq6J3Kp.js.map +1 -0
- package/build/server/chunks/{docker3-BsPagEza.js → docker3-DFlJ-o_d.js} +2 -2
- package/build/server/chunks/{docker3-BsPagEza.js.map → docker3-DFlJ-o_d.js.map} +1 -1
- package/build/server/chunks/environment-BYp8JQYM.js.map +1 -1
- package/build/server/chunks/{error.svelte-C-lukbaB.js → error.svelte-BXxIEYd4.js} +4 -4
- package/build/server/chunks/{error.svelte-C-lukbaB.js.map → error.svelte-BXxIEYd4.js.map} +1 -1
- package/build/server/chunks/{features-DltizIi4.js → features-D8Ez2vwC.js} +26 -4
- package/build/server/chunks/features-D8Ez2vwC.js.map +1 -0
- package/build/server/chunks/{helpers-DWpoPvHz.js → helpers-BrD1e__f.js} +4 -4
- package/build/server/chunks/{helpers-DWpoPvHz.js.map → helpers-BrD1e__f.js.map} +1 -1
- package/build/server/chunks/{hooks.server-BcdEyWVU.js → hooks.server-Blba-Qw7.js} +9 -9
- package/build/server/chunks/{hooks.server-BcdEyWVU.js.map → hooks.server-Blba-Qw7.js.map} +1 -1
- package/build/server/chunks/{http-7E5W3vGt.js → http-B4Us23Mo.js} +2 -2
- package/build/server/chunks/{http-7E5W3vGt.js.map → http-B4Us23Mo.js.map} +1 -1
- package/build/server/chunks/{internal-BNSUwl-r.js → internal-CSnzBDeT.js} +3 -3
- package/build/server/chunks/{internal-BNSUwl-r.js.map → internal-CSnzBDeT.js.map} +1 -1
- package/build/server/chunks/{landing-DY53l_CN.js → landing-DxFOhZxH.js} +5 -5
- package/build/server/chunks/{landing-DY53l_CN.js.map → landing-DxFOhZxH.js.map} +1 -1
- package/build/server/chunks/{opencode-target-DYD2zQ4l.js → opencode-target-D4BxXYHJ.js} +3 -3
- package/build/server/chunks/{opencode-target-DYD2zQ4l.js.map → opencode-target-D4BxXYHJ.js.map} +1 -1
- package/build/server/chunks/{paths-BVdkvR9U.js → paths-6f-5gYkd.js} +2 -2
- package/build/server/chunks/{paths-BVdkvR9U.js.map → paths-6f-5gYkd.js.map} +1 -1
- package/build/server/chunks/{session-cookie-D2_H1UEW.js → session-cookie-5J3xCH94.js} +2 -2
- package/build/server/chunks/{session-cookie-D2_H1UEW.js.map → session-cookie-5J3xCH94.js.map} +1 -1
- package/build/server/chunks/{setup-deploy-C1h733rH.js → setup-deploy-DUbX3fHm.js} +2 -2
- package/build/server/chunks/{setup-deploy-C1h733rH.js.map → setup-deploy-DUbX3fHm.js.map} +1 -1
- package/build/server/chunks/{src-B2-r_9oB.js → src-B2wHibme.js} +55 -70
- package/build/server/chunks/src-B2wHibme.js.map +1 -0
- package/build/server/chunks/{state-Dkjz2T4C.js → state-JIy0tegD.js} +2 -2
- package/build/server/chunks/{state-Dkjz2T4C.js.map → state-JIy0tegD.js.map} +1 -1
- package/build/server/chunks/{state2-CS9rhust.js → state2-Br2snAqo.js} +2 -2
- package/build/server/chunks/{state2-CS9rhust.js.map → state2-Br2snAqo.js.map} +1 -1
- package/build/server/chunks/voice-state.svelte-DU9g_xEh.js +1610 -0
- package/build/server/chunks/voice-state.svelte-DU9g_xEh.js.map +1 -0
- package/build/server/index.js +1 -1
- package/build/server/manifest.js +96 -110
- package/build/server/manifest.js.map +1 -1
- package/package.json +3 -3
- package/build/client/_app/immutable/assets/7.BsquVIMw.css +0 -1
- package/build/client/_app/immutable/assets/7.BsquVIMw.css.br +0 -0
- package/build/client/_app/immutable/assets/7.BsquVIMw.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.D8zTZB7v.css +0 -1
- package/build/client/_app/immutable/assets/9.D8zTZB7v.css.br +0 -0
- package/build/client/_app/immutable/assets/9.D8zTZB7v.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BE_4J5sS.js.br +0 -0
- package/build/client/_app/immutable/chunks/BE_4J5sS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BdIq5WIo.js.br +0 -5
- package/build/client/_app/immutable/chunks/BdIq5WIo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Clt9pCG1.js.br +0 -0
- package/build/client/_app/immutable/chunks/Clt9pCG1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CuKFR3Qo.js.br +0 -0
- package/build/client/_app/immutable/chunks/CuKFR3Qo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D1VTYdXF.js +0 -1
- package/build/client/_app/immutable/chunks/D1VTYdXF.js.br +0 -0
- package/build/client/_app/immutable/chunks/D1VTYdXF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DF5Aoa59.js +0 -1
- package/build/client/_app/immutable/chunks/DF5Aoa59.js.br +0 -2
- package/build/client/_app/immutable/chunks/DF5Aoa59.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DaRQZQEK.js +0 -5
- package/build/client/_app/immutable/chunks/DaRQZQEK.js.br +0 -0
- package/build/client/_app/immutable/chunks/DaRQZQEK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dz-hw4Sz.js +0 -5
- package/build/client/_app/immutable/chunks/Dz-hw4Sz.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dz-hw4Sz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/mNzUu332.js.br +0 -0
- package/build/client/_app/immutable/chunks/mNzUu332.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DKG33-gU.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DKG33-gU.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.vDtUfDrT.js +0 -1
- package/build/client/_app/immutable/entry/start.vDtUfDrT.js.br +0 -1
- package/build/client/_app/immutable/entry/start.vDtUfDrT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.eA5H3idZ.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.eA5H3idZ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.CvKFymDh.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.CvKFymDh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.DFMf8WUQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.DFMf8WUQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.BZQW5Y67.js +0 -8
- package/build/client/_app/immutable/nodes/11.BZQW5Y67.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.BZQW5Y67.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.B-36aGPk.js +0 -1
- package/build/client/_app/immutable/nodes/4.B-36aGPk.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.B-36aGPk.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.bgdUYUlr.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.bgdUYUlr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.D0P837Li.js +0 -2
- package/build/client/_app/immutable/nodes/6.D0P837Li.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.D0P837Li.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.C4seSCJq.js +0 -14
- package/build/client/_app/immutable/nodes/7.C4seSCJq.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.C4seSCJq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.DCgNAMuD.js +0 -128
- package/build/client/_app/immutable/nodes/9.DCgNAMuD.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.DCgNAMuD.js.gz +0 -0
- package/build/server/chunks/0-D9FIO-Bk.js.map +0 -1
- package/build/server/chunks/1-ItPJxTHP.js +0 -9
- package/build/server/chunks/11-CZj9K6K7.js +0 -9
- package/build/server/chunks/11-CZj9K6K7.js.map +0 -1
- package/build/server/chunks/6-DxXeT1e3.js +0 -9
- package/build/server/chunks/7-CuHe_mFY.js +0 -9
- package/build/server/chunks/7-CuHe_mFY.js.map +0 -1
- package/build/server/chunks/9-CVIPxN5B.js +0 -9
- package/build/server/chunks/9-CVIPxN5B.js.map +0 -1
- package/build/server/chunks/IconMic-BbjkE_nG.js +0 -18
- package/build/server/chunks/IconMic-BbjkE_nG.js.map +0 -1
- package/build/server/chunks/IconStop-DKVpXPKq.js.map +0 -1
- package/build/server/chunks/_page.svelte-BcpGl-vl.js +0 -91
- package/build/server/chunks/_page.svelte-BcpGl-vl.js.map +0 -1
- package/build/server/chunks/_page.svelte-CGEtuNmS.js.map +0 -1
- package/build/server/chunks/_page.svelte-FOm-OMQe.js.map +0 -1
- package/build/server/chunks/_page.svelte-qxgG6hsh.js.map +0 -1
- package/build/server/chunks/_server.ts-08JCSzPu.js.map +0 -1
- package/build/server/chunks/_server.ts-3bBG0DBN.js.map +0 -1
- package/build/server/chunks/_server.ts-B0MK-ynu.js.map +0 -1
- package/build/server/chunks/_server.ts-BS4UTF4H.js +0 -93
- package/build/server/chunks/_server.ts-BS4UTF4H.js.map +0 -1
- package/build/server/chunks/_server.ts-DXwG4w1_.js.map +0 -1
- package/build/server/chunks/_server.ts-DlKT-RbM.js.map +0 -1
- package/build/server/chunks/_server.ts-fenM6Iln.js.map +0 -1
- package/build/server/chunks/_server.ts-zt3yI2wU.js +0 -97
- package/build/server/chunks/_server.ts-zt3yI2wU.js.map +0 -1
- package/build/server/chunks/addon-helpers-B7bkHg-K.js +0 -64
- package/build/server/chunks/addon-helpers-B7bkHg-K.js.map +0 -1
- package/build/server/chunks/compose-args2-B1cYvF5r.js.map +0 -1
- package/build/server/chunks/docker2-CF7qyd1U.js.map +0 -1
- package/build/server/chunks/features-DltizIi4.js.map +0 -1
- package/build/server/chunks/speakable-text-BflxDDdY.js +0 -65
- package/build/server/chunks/speakable-text-BflxDDdY.js.map +0 -1
- package/build/server/chunks/src-B2-r_9oB.js.map +0 -1
- package/build/server/chunks/voice-state.svelte-CSmyLPRH.js +0 -561
- package/build/server/chunks/voice-state.svelte-CSmyLPRH.js.map +0 -1
- /package/build/client/_app/immutable/chunks/{DD22UF1L.js → DD22UF1L2.js} +0 -0
- /package/build/client/_app/immutable/chunks/{DD22UF1L.js.br → DD22UF1L2.js.br} +0 -0
- /package/build/client/_app/immutable/chunks/{DD22UF1L.js.gz → DD22UF1L2.js.gz} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-08JCSzPu.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/host/voice/_server.ts.js"],"sourcesContent":["import { A as setAddonProfileSelection, C as getAddonProfiles, M as getAddonProfileAvailability, N as addonProfileId, O as listEnabledAddonIds, S as getAddonProfileSelection, St as stackDirFor, Y as readStackEnv, j as execFileNoThrow, k as setAddonEnabled, t as buildComposeOptions, x as annotateAddonProfileAvailability } from \"../../../../../chunks/compose-args.js\";\nimport { t as applyStack, v as composeStop } from \"../../../../../chunks/docker.js\";\nimport { X as dockerHasNvidiaRuntime, Y as detectRootlessDocker, u as writeVoiceVars } from \"../../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../../chunks/state.js\";\nimport { a as getRequestId, c as jsonResponse, d as requireCapability, r as errorResponse, u as requireAdmin } from \"../../../../../chunks/helpers.js\";\nimport { t as withAdminUpdateLock } from \"../../../../../chunks/admin-update-lock.js\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\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/lib/server/voice/bring-up.ts\n/**\n* Voice addon bring-up engine — the Docker/compose infrastructure behind\n* PUT /api/host/voice. Extracted from the route so the HTTP handler stays a\n* thin request-validation + delegation layer (the thin-route-over-service\n* pattern used across the host-admin API).\n*\n* Responsibilities:\n* - Docker image inspection + resolution (dockerImagePresent / resolveServiceImage)\n* - UI-local host probes (TCP port, container health) — the rootless /\n* nvidia-runtime host-fact probes live in lib (control-plane/voice-host-probes.ts)\n* beside hardware-detect.ts, since they inspect the host, not addon/UI state.\n* - Fallback-overlay SELECTION only: voice.compose.cdi.yml and\n* voice.compose.rootless.yml ship as static files in the skeleton's\n* managed system/stack/ tree (packages/skeleton/system/stack/) — nothing\n* here generates compose YAML.\n* - The in-memory background-job registry (activeJobs)\n* - The engageVoiceAddon orchestration that the route delegates to; the\n* actual compose-up + health-wait lifecycle (runBringUp) is a thin\n* shim over `@openpalm/lib`'s single `applyStack` driver (plan 2.2) —\n* this file keeps only job registry + progress-step rendering, plus the\n* \"warming\" re-probe and voice-specific error-copy translation that\n* applyStack's generic result doesn't carry.\n*\n* Everything here is server-only (uses node:child_process / node:net /\n* node:fs) and returns plain data — the route maps the results to HTTP\n* responses.\n*/\nvar VOICE_ADDON = \"voice\";\nvar VOICE_PROBE_TIMEOUT_MS = 18e4;\nvar PORT_PROBE_TIMEOUT_MS = 750;\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}\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\", \"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}\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}\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}\nfunction resolveProjectName() {\n\treturn process.env.OP_PROJECT_NAME?.trim() || process.env.COMPOSE_PROJECT_NAME?.trim() || \"openpalm\";\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}\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/** Path of the static CDI overlay, or null when the managed tree isn't seeded yet. */\nfunction voiceCdiOverlayPath(homeDir) {\n\tconst overlayPath = join(stackDirFor(homeDir), \"voice.compose.cdi.yml\");\n\treturn existsSync(overlayPath) ? overlayPath : null;\n}\n/** Path of the static rootless overlay, or null when the managed tree isn't seeded yet. */\nfunction voiceRootlessOverlayPath(homeDir) {\n\tconst overlayPath = join(stackDirFor(homeDir), \"voice.compose.rootless.yml\");\n\treturn existsSync(overlayPath) ? overlayPath : null;\n}\n/**\n* Stops services from OTHER profiles, then routes the actual compose-up +\n* health-wait through `@openpalm/lib`'s single {@link applyStack} driver\n* (plan 2.2) — this function no longer runs its own composeUp or /health\n* poll. `applyStack`'s health-wait reads the SAME docker HEALTHCHECK every\n* voice compose service already declares (`curl .../health` inside the\n* container, `start_period: 180s`), so it observes exactly what the removed\n* manual HTTP poll observed, just via `docker inspect` instead of a\n* host-side fetch loop.\n*\n* Returns the terminal state. Pushed `steps` get mutated in place so the\n* caller (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;\n\tlet composeErr;\n\tlet healthy = false;\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 applyStack({\n\t\t\tkind: \"services\",\n\t\t\tservices\n\t\t}, {\n\t\t\tfiles: [...baseOpts.files, ...extraFiles],\n\t\t\tenvFiles: baseOpts.envFiles,\n\t\t\tprofiles: activeProfile ? [activeProfile] : baseOpts.profiles\n\t\t}, void 0, { healthTimeoutMs: VOICE_PROBE_TIMEOUT_MS });\n\t\tif (result.upFailed) {\n\t\t\tcomposeOk = false;\n\t\t\tcomposeErr = translateDockerError(result.rawStderr || result.error || \"compose up failed\");\n\t\t} else {\n\t\t\tcomposeOk = true;\n\t\t\thealthy = result.ok;\n\t\t}\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\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 become healthy 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* /api/host/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* The full PUT /api/host/voice bring-up lifecycle after request validation:\n* auto-stop when disengaging, else resolve profile → enable addon →\n* port pre-flight → image inspect → host fallback overlays → background\n* short-circuit or synchronous compose-up + /health poll.\n*/\nasync function engageVoiceAddon(input) {\n\tconst { state, wantsVoiceAddon, requestedProfile } = input;\n\tif (!wantsVoiceAddon) {\n\t\tif (listEnabledAddonIds(state.homeDir).includes(\"voice\")) 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 { status: \"disengaged\" };\n\t}\n\tconst availableProfiles = await annotateAddonProfileAvailability(getAddonProfiles(state.homeDir, VOICE_ADDON));\n\tlet activeProfile = null;\n\tif (requestedProfile) {\n\t\tif (!availableProfiles.some((p) => p.id === requestedProfile)) return {\n\t\t\tstatus: \"invalid_profile\",\n\t\t\tmessage: `Unknown voice profile \"${requestedProfile}\". Available: ${availableProfiles.map((p) => p.id).join(\", \") || \"(none)\"}`\n\t\t};\n\t\tactiveProfile = requestedProfile;\n\t\tsetAddonProfileSelection(state.homeDir, VOICE_ADDON, activeProfile);\n\t} else activeProfile = getAddonProfileSelection(state.homeDir, \"voice\") ?? resolveDefaultProfile(availableProfiles);\n\tconst wasAlreadyEnabled = listEnabledAddonIds(state.homeDir).includes(VOICE_ADDON);\n\tconst steps = [];\n\tif (!wasAlreadyEnabled) try {\n\t\tsetAddonEnabled(state.homeDir, 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 {\n\t\t\tstatus: \"error\",\n\t\t\twasAlreadyEnabled,\n\t\t\tsteps,\n\t\t\terror: `Could not enable voice addon: ${detail}`\n\t\t};\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 {\n\t\t\t\tstatus: \"error\",\n\t\t\t\twasAlreadyEnabled,\n\t\t\t\tsteps,\n\t\t\t\terror: msg\n\t\t\t};\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\", \"cuda\") && !inVitest && cdiFallbackSupported) {\n\t\tconst runtimeMissing = (await getAddonProfileAvailability({ id: addonProfileId(\"voice\", \"cuda\") })).available === false || !await dockerHasNvidiaRuntime();\n\t\tconst cdiSpecPresent = existsSync(\"/etc/cdi/nvidia.yaml\");\n\t\tif (runtimeMissing && cdiSpecPresent) {\n\t\t\tconst overlay = voiceCdiOverlayPath(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 = voiceRootlessOverlayPath(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\treturn {\n\t\t\tstatus: \"background\",\n\t\t\twasAlreadyEnabled,\n\t\t\tsteps,\n\t\t\tmessage: \"Voice image is downloading in the background (~2–8 GB). Poll GET /api/host/voice for progress; UI auto-refreshes.\",\n\t\t\tcompletion: runBringUpJob({\n\t\t\t\tstate,\n\t\t\t\tservices,\n\t\t\t\tactiveProfile,\n\t\t\t\textraFiles,\n\t\t\t\tavailableProfiles,\n\t\t\t\tbaseSteps: [...steps]\n\t\t\t})\n\t\t};\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 {\n\t\tstatus: \"error\",\n\t\twasAlreadyEnabled,\n\t\tsteps: outcome.steps,\n\t\terror: `Voice addon failed to start: ${outcome.composeErr ?? \"unknown error\"}`\n\t};\n\treturn {\n\t\tstatus: \"final\",\n\t\twasAlreadyEnabled,\n\t\tsteps: outcome.steps,\n\t\thealthy: outcome.healthy,\n\t\twarming: outcome.warming\n\t};\n}\n//#endregion\n//#region src/routes/api/host/voice/+server.ts\nvar REACHABILITY_TIMEOUT_MS = 1500;\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}\nvar GET = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst capabilityError = requireCapability(event, \"host:stack:read\", requestId);\n\tif (capabilityError) return capabilityError;\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst state = getState();\n\tconst env = readStackEnv(state.homeDir);\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.homeDir, \"voice\") ?? 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\") ? { 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}\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?.trim()) section.baseURL = openpalmVoiceBaseURL();\n\tif (!section.model?.trim()) section.model = kind === \"tts\" ? OPENPALM_VOICE_TTS_MODEL : OPENPALM_VOICE_STT_MODEL;\n\tif (kind === \"tts\" && !section.voice?.trim()) section.voice = OPENPALM_VOICE_DEFAULT_VOICE;\n}\nfunction validateSection(section, kind) {\n\tif (!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?.trim()) return `Remote ${kind.toUpperCase()} requires an endpoint URL.`;\n\treturn null;\n}\nvar PUT = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst capabilityError = requireCapability(event, \"host:stack:write\", requestId);\n\tif (capabilityError) return capabilityError;\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\treturn withAdminUpdateLock(state, requestId, async (_lock, deferReleaseUntil) => {\n\t\twriteVoiceVars(config, state.homeDir);\n\t\tconst result = await engageVoiceAddon({\n\t\t\tstate,\n\t\t\twantsVoiceAddon: ttsSection?.engine === \"openpalm-voice\" || sttSection?.engine === \"openpalm-voice\",\n\t\t\trequestedProfile: typeof b.profile === \"string\" ? b.profile.trim() : \"\"\n\t\t});\n\t\tswitch (result.status) {\n\t\t\tcase \"disengaged\": return jsonResponse(200, { ok: true }, requestId);\n\t\t\tcase \"invalid_profile\": return errorResponse(400, \"invalid_profile\", result.message, {}, requestId);\n\t\t\tcase \"error\": return jsonResponse(502, {\n\t\t\t\tok: false,\n\t\t\t\tvoiceAddon: {\n\t\t\t\t\twasAlreadyEnabled: result.wasAlreadyEnabled,\n\t\t\t\t\tsteps: result.steps,\n\t\t\t\t\terror: result.error\n\t\t\t\t}\n\t\t\t}, requestId);\n\t\t\tcase \"background\":\n\t\t\t\tdeferReleaseUntil(result.completion);\n\t\t\t\treturn jsonResponse(202, {\n\t\t\t\t\tok: true,\n\t\t\t\t\tvoiceAddon: {\n\t\t\t\t\t\twasAlreadyEnabled: result.wasAlreadyEnabled,\n\t\t\t\t\t\tstatus: \"pulling\",\n\t\t\t\t\t\tsteps: result.steps,\n\t\t\t\t\t\tmessage: result.message\n\t\t\t\t\t}\n\t\t\t\t}, requestId);\n\t\t\tcase \"final\": return jsonResponse(result.healthy || result.warming ? 200 : 502, {\n\t\t\t\tok: result.healthy || result.warming,\n\t\t\t\tvoiceAddon: {\n\t\t\t\t\twasAlreadyEnabled: result.wasAlreadyEnabled,\n\t\t\t\t\tsteps: result.steps,\n\t\t\t\t\t...result.warming ? { warming: true } : {},\n\t\t\t\t\t...result.healthy || result.warming ? {} : { error: \"Voice addon is starting but did not become healthy in time.\" }\n\t\t\t\t}\n\t\t\t}, requestId);\n\t\t}\n\t});\n};\n//#endregion\nexport { GET, PUT };\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-3bBG0DBN.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/setup/current-config/_server.ts.js"],"sourcesContent":["import { r as json } from \"../../../../../chunks/exports.js\";\nimport { C as getAddonProfiles, O as listEnabledAddonIds, S as getAddonProfileSelection, Y as readStackEnv, Z as readStackSecretEnv, x as annotateAddonProfileAvailability } from \"../../../../../chunks/compose-args.js\";\nimport \"../../../../../chunks/src.js\";\nimport { i as detectNetworkPreset } from \"../../../../../chunks/network-preset.js\";\nimport { t as getState } from \"../../../../../chunks/state.js\";\nimport { a as getRequestId, g as getUiLoginPassword, u as requireAdmin } from \"../../../../../chunks/helpers.js\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n//#region src/routes/api/setup/current-config/+server.ts\nfunction readAkmConfig(configDir) {\n\tconst path = join(configDir, \"akm\", \"config.json\");\n\tif (!existsSync(path)) return {};\n\ttry {\n\t\treturn JSON.parse(readFileSync(path, \"utf-8\"));\n\t} catch {\n\t\treturn {};\n\t}\n}\n/**\n* Read model preferences persisted by importHostOpenCode into\n* <configDir>/assistant/opencode.json. This is the on-disk source of truth\n* after a host import; reusing it means wizard reruns restore the same\n* preferences without re-detecting the (possibly absent) host install.\n* Returns undefined if the file doesn't exist or contains no model keys.\n*/\nfunction readPersistedModelPreferences(configDir) {\n\tconst path = join(configDir, \"assistant\", \"opencode.json\");\n\tif (!existsSync(path)) return void 0;\n\ttry {\n\t\tconst parsed = JSON.parse(readFileSync(path, \"utf-8\"));\n\t\tconst prefs = {};\n\t\tif (typeof parsed.model === \"string\" && parsed.model) prefs.model = parsed.model;\n\t\tif (typeof parsed.small_model === \"string\" && parsed.small_model) prefs.small_model = parsed.small_model;\n\t\treturn prefs.model || prefs.small_model ? prefs : void 0;\n\t} catch {\n\t\treturn;\n\t}\n}\nfunction deriveBaseUrl(endpoint) {\n\tif (!endpoint) return \"\";\n\treturn endpoint.replace(/\\/chat\\/completions\\/?$/, \"\").replace(/\\/embeddings\\/?$/, \"\").replace(/\\/+$/, \"\");\n}\nvar GET = async (event) => {\n\tconst authError = requireAdmin(event, getRequestId(event));\n\tif (authError) return authError;\n\tconst state = getState();\n\tconst configured = getUiLoginPassword();\n\tconst env = readStackEnv(state.homeDir);\n\tconst secretEnv = readStackSecretEnv(state.homeDir);\n\tconst akm = readAkmConfig(state.configDir);\n\tconst importedModelPreferences = readPersistedModelPreferences(state.configDir);\n\tconst voiceProfiles = await annotateAddonProfileAvailability(getAddonProfiles(state.homeDir, \"voice\"));\n\tconst selectedVoiceProfile = getAddonProfileSelection(state.homeDir, \"voice\");\n\tconst ollamaProfiles = await annotateAddonProfileAvailability(getAddonProfiles(state.homeDir, \"ollama\"));\n\tconst selectedOllamaProfile = getAddonProfileSelection(state.homeDir, \"ollama\");\n\tconst hostHome = process.env.HOME ?? process.env.USERPROFILE ?? \"\";\n\tconst hostAkm = !!hostHome && env.OP_AKM_STASH === `${hostHome}/akm` && env.OP_AKM_CONFIG === `${hostHome}/.config/akm`;\n\tconst meta = (envKey) => ({\n\t\tenvKey,\n\t\tpresent: Boolean(secretEnv[envKey])\n\t});\n\tconst discord = {};\n\tfor (const [field, envKey] of Object.entries({\n\t\tbotToken: \"DISCORD_BOT_TOKEN\",\n\t\tapplicationId: \"DISCORD_APPLICATION_ID\",\n\t\tregisterCommands: \"DISCORD_REGISTER_COMMANDS\",\n\t\tallowedGuilds: \"DISCORD_ALLOWED_GUILDS\",\n\t\tallowedRoles: \"DISCORD_ALLOWED_ROLES\",\n\t\tallowedUsers: \"DISCORD_ALLOWED_USERS\",\n\t\tblockedUsers: \"DISCORD_BLOCKED_USERS\"\n\t})) if (secretEnv[envKey]) discord[field] = meta(envKey);\n\tconst slack = {};\n\tfor (const [field, envKey] of Object.entries({\n\t\tslackBotToken: \"SLACK_BOT_TOKEN\",\n\t\tslackAppToken: \"SLACK_APP_TOKEN\",\n\t\tallowedChannels: \"SLACK_ALLOWED_CHANNELS\",\n\t\tallowedUsers: \"SLACK_ALLOWED_USERS\",\n\t\tblockedUsers: \"SLACK_BLOCKED_USERS\"\n\t})) if (secretEnv[envKey]) slack[field] = meta(envKey);\n\tconst portalCredentials = {};\n\tif (Object.keys(discord).length > 0) portalCredentials.discord = discord;\n\tif (Object.keys(slack).length > 0) portalCredentials.slack = slack;\n\treturn json({\n\t\tok: true,\n\t\thasPassword: typeof configured === \"string\" && configured.length > 0,\n\t\tassistantVersion: env.OP_ASSISTANT_VERSION ?? \"\",\n\t\tguardianVersion: env.OP_GUARDIAN_VERSION ?? \"\",\n\t\tportalVersion: env.OP_PORTAL_VERSION ?? \"\",\n\t\tvoiceVersion: env.OP_VOICE_VERSION ?? \"\",\n\t\thostAkm,\n\t\tllm: akm.llm ? {\n\t\t\tprovider: akm.llm.provider ?? \"\",\n\t\t\tmodel: akm.llm.model ?? \"\",\n\t\t\tbaseUrl: deriveBaseUrl(akm.llm.endpoint)\n\t\t} : null,\n\t\tembedding: akm.embedding ? {\n\t\t\tprovider: akm.embedding.provider ?? \"\",\n\t\t\tmodel: akm.embedding.model ?? \"\",\n\t\t\tdims: akm.embedding.dimension ?? 0,\n\t\t\tbaseUrl: deriveBaseUrl(akm.embedding.endpoint)\n\t\t} : null,\n\t\tvoice: {\n\t\t\ttts: {\n\t\t\t\tengine: env.OP_TTS_ENGINE ?? \"\",\n\t\t\t\tbaseURL: env.OP_TTS_BASE_URL ?? \"\",\n\t\t\t\tmodel: env.OP_TTS_MODEL ?? \"\",\n\t\t\t\tvoice: env.OP_TTS_VOICE ?? \"\"\n\t\t\t},\n\t\t\tstt: {\n\t\t\t\tengine: env.OP_STT_ENGINE ?? \"\",\n\t\t\t\tbaseURL: env.OP_STT_BASE_URL ?? \"\",\n\t\t\t\tmodel: env.OP_STT_MODEL ?? \"\",\n\t\t\t\tlanguage: env.OP_STT_LANGUAGE ?? \"\"\n\t\t\t},\n\t\t\tprofiles: voiceProfiles,\n\t\t\tselectedProfile: selectedVoiceProfile\n\t\t},\n\t\tollama: {\n\t\t\tprofiles: ollamaProfiles,\n\t\t\tselectedProfile: selectedOllamaProfile\n\t\t},\n\t\tenabledAddons: listEnabledAddonIds(state.homeDir),\n\t\tportalCredentials,\n\t\timportedModelPreferences: importedModelPreferences ?? null,\n\t\tnetwork: { preset: detectNetworkPreset(env) },\n\t\thasOpencodePassword: Boolean(secretEnv.OP_OPENCODE_PASSWORD)\n\t});\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA;AACA,SAAS,aAAa,CAAC,SAAS,EAAE;AAClC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC;AACnD,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE;AACjC,CAAC,IAAI;AACL,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,EAAE;AACX,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,6BAA6B,CAAC,SAAS,EAAE;AAClD,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,eAAe,CAAC;AAC3D,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,MAAM;AACrC,CAAC,IAAI;AACL,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACxD,EAAE,MAAM,KAAK,GAAG,EAAE;AAClB,EAAE,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AAClF,EAAE,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;AAC1G,EAAE,OAAO,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC;AAC1D,CAAC,CAAC,CAAC,MAAM;AACT,EAAE;AACF,CAAC;AACD;AACA,SAAS,aAAa,CAAC,QAAQ,EAAE;AACjC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE;AACzB,CAAC,OAAO,QAAQ,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AAC3G;AACG,IAAC,GAAG,GAAG,OAAO,KAAK,KAAK;AAC3B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC,IAAI,SAAS,EAAE,OAAO,SAAS;AAChC,CAAC,MAAM,KAAK,GAAG,QAAQ,EAAE;AACzB,CAAC,MAAM,UAAU,GAAG,kBAAkB,EAAE;AACxC,CAAC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;AACxC,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC;AACpD,CAAC,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;AAC3C,CAAC,MAAM,wBAAwB,GAAG,6BAA6B,CAAC,KAAK,CAAC,SAAS,CAAC;AAChF,CAAC,MAAM,aAAa,GAAG,MAAM,gCAAgC,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACvG,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;AAC9E,CAAC,MAAM,cAAc,GAAG,MAAM,gCAAgC,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACzG,CAAC,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;AAChF,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;AACnE,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,YAAY,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,aAAa,KAAK,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC;AACxH,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM;AAC3B,EAAE,MAAM;AACR,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;AACpC,EAAE,CAAC;AACH,CAAC,MAAM,OAAO,GAAG,EAAE;AACnB,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;AAC9C,EAAE,QAAQ,EAAE,mBAAmB;AAC/B,EAAE,aAAa,EAAE,wBAAwB;AACzC,EAAE,gBAAgB,EAAE,2BAA2B;AAC/C,EAAE,aAAa,EAAE,wBAAwB;AACzC,EAAE,YAAY,EAAE,uBAAuB;AACvC,EAAE,YAAY,EAAE,uBAAuB;AACvC,EAAE,YAAY,EAAE;AAChB,EAAE,CAAC,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACzD,CAAC,MAAM,KAAK,GAAG,EAAE;AACjB,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;AAC9C,EAAE,aAAa,EAAE,iBAAiB;AAClC,EAAE,aAAa,EAAE,iBAAiB;AAClC,EAAE,eAAe,EAAE,wBAAwB;AAC3C,EAAE,YAAY,EAAE,qBAAqB;AACrC,EAAE,YAAY,EAAE;AAChB,EAAE,CAAC,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACvD,CAAC,MAAM,iBAAiB,GAAG,EAAE;AAC7B,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,iBAAiB,CAAC,OAAO,GAAG,OAAO;AACzE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,iBAAiB,CAAC,KAAK,GAAG,KAAK;AACnE,CAAC,OAAO,IAAI,CAAC;AACb,EAAE,EAAE,EAAE,IAAI;AACV,EAAE,WAAW,EAAE,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;AACtE,EAAE,gBAAgB,EAAE,GAAG,CAAC,oBAAoB,IAAI,EAAE;AAClD,EAAE,eAAe,EAAE,GAAG,CAAC,mBAAmB,IAAI,EAAE;AAChD,EAAE,aAAa,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;AAC5C,EAAE,YAAY,EAAE,GAAG,CAAC,gBAAgB,IAAI,EAAE;AAC1C,EAAE,OAAO;AACT,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG;AACjB,GAAG,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE;AACnC,GAAG,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;AAC7B,GAAG,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ;AAC1C,GAAG,GAAG,IAAI;AACV,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,GAAG;AAC7B,GAAG,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE;AACzC,GAAG,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;AACnC,GAAG,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC;AACrC,GAAG,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ;AAChD,GAAG,GAAG,IAAI;AACV,EAAE,KAAK,EAAE;AACT,GAAG,GAAG,EAAE;AACR,IAAI,MAAM,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;AACnC,IAAI,OAAO,EAAE,GAAG,CAAC,eAAe,IAAI,EAAE;AACtC,IAAI,KAAK,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;AACjC,IAAI,KAAK,EAAE,GAAG,CAAC,YAAY,IAAI;AAC/B,IAAI;AACJ,GAAG,GAAG,EAAE;AACR,IAAI,MAAM,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;AACnC,IAAI,OAAO,EAAE,GAAG,CAAC,eAAe,IAAI,EAAE;AACtC,IAAI,KAAK,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;AACjC,IAAI,QAAQ,EAAE,GAAG,CAAC,eAAe,IAAI;AACrC,IAAI;AACJ,GAAG,QAAQ,EAAE,aAAa;AAC1B,GAAG,eAAe,EAAE;AACpB,GAAG;AACH,EAAE,MAAM,EAAE;AACV,GAAG,QAAQ,EAAE,cAAc;AAC3B,GAAG,eAAe,EAAE;AACpB,GAAG;AACH,EAAE,aAAa,EAAE,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC;AACnD,EAAE,iBAAiB;AACnB,EAAE,wBAAwB,EAAE,wBAAwB,IAAI,IAAI;AAC5D,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE;AAC/C,EAAE,mBAAmB,EAAE,OAAO,CAAC,SAAS,CAAC,oBAAoB;AAC7D,EAAE,CAAC;AACH;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-B0MK-ynu.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/host/addons/_name_/_server.ts.js"],"sourcesContent":["import { D as listAvailableAddonIds, O as listEnabledAddonIds, Ot as createLogger, T as getRegistryAddonConfig } from \"../../../../../../chunks/compose-args.js\";\nimport \"../../../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../../../chunks/state.js\";\nimport { a as getRequestId, c as jsonResponse, d as requireCapability, l as parseJsonBody, r as errorResponse, s as jsonBodyError, u as requireAdmin } from \"../../../../../../chunks/helpers.js\";\nimport { t as performAddonToggle } from \"../../../../../../chunks/addon-helpers.js\";\n//#region src/routes/api/host/addons/[name]/+server.ts\nvar logger = createLogger(\"addons.name\");\nvar GET = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst capabilityError = requireCapability(event, \"host:addons\", requestId);\n\tif (capabilityError) return capabilityError;\n\tconst authErr = requireAdmin(event, requestId);\n\tif (authErr) return authErr;\n\tconst state = getState();\n\tconst name = event.params.name;\n\tif (!listAvailableAddonIds().includes(name)) return errorResponse(404, \"not_found\", `Addon \"${name}\" is not available`, { name }, requestId);\n\tconst enabled = listEnabledAddonIds(state.homeDir).includes(name);\n\tlet config;\n\ttry {\n\t\tconfig = getRegistryAddonConfig(name);\n\t} catch (error) {\n\t\tlogger.error(\"failed to read addon schema\", {\n\t\t\tname,\n\t\t\terror: String(error),\n\t\t\trequestId\n\t\t});\n\t\treturn errorResponse(500, \"internal_error\", `Addon \"${name}\" schema is unavailable`, {}, requestId);\n\t}\n\treturn jsonResponse(200, {\n\t\tname,\n\t\tenabled,\n\t\tconfig\n\t}, requestId);\n};\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst capabilityError = requireCapability(event, \"host:addons\", requestId);\n\tif (capabilityError) return capabilityError;\n\tconst authErr = requireAdmin(event, requestId);\n\tif (authErr) return authErr;\n\tconst state = getState();\n\tconst name = event.params.name;\n\tif (!listAvailableAddonIds().includes(name)) return errorResponse(404, \"not_found\", `Addon \"${name}\" is not available`, { name }, requestId);\n\tconst result = await parseJsonBody(event.request);\n\tif (\"error\" in result) return jsonBodyError(result, requestId);\n\tconst body = result.data;\n\treturn performAddonToggle(state, name, typeof body.enabled === \"boolean\" ? body.enabled : void 0, requestId);\n};\n//#endregion\nexport { GET, POST };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;AACA,IAAI,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC;AACrC,IAAC,GAAG,GAAG,OAAO,KAAK,KAAK;AAC3B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC;AAC3E,CAAC,IAAI,eAAe,EAAE,OAAO,eAAe;AAC5C,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/C,CAAC,IAAI,OAAO,EAAE,OAAO,OAAO;AAC5B,CAAC,MAAM,KAAK,GAAG,QAAQ,EAAE;AACzB,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI;AAC/B,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,CAAC;AAC7I,CAAC,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAClE,CAAC,IAAI,MAAM;AACX,CAAC,IAAI;AACL,EAAE,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC;AACvC,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE;AACjB,EAAE,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;AAC9C,GAAG,IAAI;AACP,GAAG,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;AACvB,GAAG;AACH,GAAG,CAAC;AACJ,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC;AACrG,CAAC;AACD,CAAC,OAAO,YAAY,CAAC,GAAG,EAAE;AAC1B,EAAE,IAAI;AACN,EAAE,OAAO;AACT,EAAE;AACF,EAAE,EAAE,SAAS,CAAC;AACd;AACG,IAAC,IAAI,GAAG,OAAO,KAAK,KAAK;AAC5B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC;AAC3E,CAAC,IAAI,eAAe,EAAE,OAAO,eAAe;AAC5C,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/C,CAAC,IAAI,OAAO,EAAE,OAAO,OAAO;AAC5B,CAAC,MAAM,KAAK,GAAG,QAAQ,EAAE;AACzB,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI;AAC/B,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,CAAC;AAC7I,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,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,SAAS,CAAC;AAC7G;;;;"}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { ax as readStackEnv } from './src-B2-r_9oB.js';
|
|
2
|
-
import { g as getState } from './state-Dkjz2T4C.js';
|
|
3
|
-
import { d as getRequestId, r as requireAdmin, e as errorResponse, k as jsonResponse } from './helpers-DWpoPvHz.js';
|
|
4
|
-
import './chunk-DOvWTNp_.js';
|
|
5
|
-
import 'node:module';
|
|
6
|
-
import './network-preset-BvVAoagy.js';
|
|
7
|
-
import './dist-DtzrgNJ1.js';
|
|
8
|
-
import 'node:fs';
|
|
9
|
-
import 'node:child_process';
|
|
10
|
-
import 'node:path';
|
|
11
|
-
import 'buffer';
|
|
12
|
-
import 'node:url';
|
|
13
|
-
import 'node:os';
|
|
14
|
-
import 'node:crypto';
|
|
15
|
-
import 'events';
|
|
16
|
-
import 'fs';
|
|
17
|
-
import 'node:events';
|
|
18
|
-
import 'node:stream';
|
|
19
|
-
import 'node:string_decoder';
|
|
20
|
-
import 'path';
|
|
21
|
-
import 'assert';
|
|
22
|
-
import 'zlib';
|
|
23
|
-
import 'node:assert';
|
|
24
|
-
import 'node:fs/promises';
|
|
25
|
-
import './opencode-target-DYD2zQ4l.js';
|
|
26
|
-
import './features-DltizIi4.js';
|
|
27
|
-
|
|
28
|
-
//#region src/routes/api/transcribe/+server.ts
|
|
29
|
-
var DEFAULT_MODEL = "whisper-1";
|
|
30
|
-
var UPSTREAM_TIMEOUT_MS = 6e4;
|
|
31
|
-
function redactKey(s) {
|
|
32
|
-
return s.replace(/(sk-[A-Za-z0-9_-]{4,})/g, "sk-***").replace(/(hf_[A-Za-z0-9_-]{4,})/gi, "hf_***").replace(/(Bearer\s+)[A-Za-z0-9._-]+/gi, "$1***");
|
|
33
|
-
}
|
|
34
|
-
var POST = async (event) => {
|
|
35
|
-
const requestId = getRequestId(event);
|
|
36
|
-
const authError = requireAdmin(event, requestId);
|
|
37
|
-
if (authError) return authError;
|
|
38
|
-
const stackEnv = readStackEnv(getState().homeDir);
|
|
39
|
-
const sttBaseURL = (stackEnv.OP_STT_BASE_URL || process.env.OP_STT_BASE_URL || "").trim();
|
|
40
|
-
const sttModel = (stackEnv.OP_STT_MODEL || process.env.OP_STT_MODEL || "").trim() || DEFAULT_MODEL;
|
|
41
|
-
const sttLanguageEnv = (stackEnv.OP_STT_LANGUAGE || process.env.OP_STT_LANGUAGE || "").trim();
|
|
42
|
-
const sttApiKey = (process.env.OP_STT_API_KEY ?? "").trim();
|
|
43
|
-
if (!sttBaseURL) return errorResponse(503, "stt_not_configured", "Configure an STT engine in Admin → Voice settings.", {}, requestId);
|
|
44
|
-
let inboundForm;
|
|
45
|
-
try {
|
|
46
|
-
inboundForm = await event.request.formData();
|
|
47
|
-
} catch {
|
|
48
|
-
return errorResponse(400, "bad_request", "Body must be multipart/form-data", {}, requestId);
|
|
49
|
-
}
|
|
50
|
-
const audio = inboundForm.get("audio");
|
|
51
|
-
if (!(audio instanceof Blob)) return errorResponse(400, "bad_request", "Missing \"audio\" field (Blob)", {}, requestId);
|
|
52
|
-
const languageReq = inboundForm.get("language");
|
|
53
|
-
const promptReq = inboundForm.get("prompt");
|
|
54
|
-
const language = typeof languageReq === "string" && languageReq.trim() ? languageReq.trim() : sttLanguageEnv;
|
|
55
|
-
const outForm = new FormData();
|
|
56
|
-
const filename = audio.name || "recording.webm";
|
|
57
|
-
outForm.append("file", audio, filename);
|
|
58
|
-
outForm.append("model", sttModel);
|
|
59
|
-
outForm.append("response_format", "json");
|
|
60
|
-
if (language) outForm.append("language", language);
|
|
61
|
-
if (typeof promptReq === "string" && promptReq.trim()) outForm.append("prompt", promptReq.trim());
|
|
62
|
-
const upstreamUrl = `${sttBaseURL.replace(/\/+$/, "")}/v1/audio/transcriptions`;
|
|
63
|
-
const headers = {};
|
|
64
|
-
if (sttApiKey) headers.authorization = `Bearer ${sttApiKey}`;
|
|
65
|
-
let upstream;
|
|
66
|
-
try {
|
|
67
|
-
upstream = await fetch(upstreamUrl, {
|
|
68
|
-
method: "POST",
|
|
69
|
-
headers,
|
|
70
|
-
body: outForm,
|
|
71
|
-
signal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS)
|
|
72
|
-
});
|
|
73
|
-
} catch (err) {
|
|
74
|
-
return errorResponse(502, "upstream_error", `Could not reach STT endpoint: ${redactKey(err instanceof Error ? err.message : String(err))}`, { upstream: upstreamUrl }, requestId);
|
|
75
|
-
}
|
|
76
|
-
if (!upstream.ok) {
|
|
77
|
-
const snippet = redactKey(await upstream.text().catch(() => "")).slice(0, 500);
|
|
78
|
-
return errorResponse(502, "upstream_error", `STT endpoint returned ${upstream.status}`, {
|
|
79
|
-
upstreamStatus: upstream.status,
|
|
80
|
-
body: snippet
|
|
81
|
-
}, requestId);
|
|
82
|
-
}
|
|
83
|
-
let payload;
|
|
84
|
-
try {
|
|
85
|
-
payload = await upstream.json();
|
|
86
|
-
} catch {
|
|
87
|
-
return errorResponse(502, "upstream_error", "STT endpoint returned a non-JSON response", { upstreamStatus: upstream.status }, requestId);
|
|
88
|
-
}
|
|
89
|
-
return jsonResponse(200, { text: typeof payload?.text === "string" ? payload.text : "" }, requestId);
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
export { POST };
|
|
93
|
-
//# sourceMappingURL=_server.ts-BS4UTF4H.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-BS4UTF4H.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/transcribe/_server.ts.js"],"sourcesContent":["import { Y as readStackEnv } from \"../../../../chunks/compose-args.js\";\nimport \"../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../chunks/state.js\";\nimport { a as getRequestId, c as jsonResponse, r as errorResponse, u as requireAdmin } from \"../../../../chunks/helpers.js\";\n//#region src/routes/api/transcribe/+server.ts\nvar DEFAULT_MODEL = \"whisper-1\";\nvar UPSTREAM_TIMEOUT_MS = 6e4;\nfunction redactKey(s) {\n\treturn s.replace(/(sk-[A-Za-z0-9_-]{4,})/g, \"sk-***\").replace(/(hf_[A-Za-z0-9_-]{4,})/gi, \"hf_***\").replace(/(Bearer\\s+)[A-Za-z0-9._-]+/gi, \"$1***\");\n}\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst stackEnv = readStackEnv(getState().homeDir);\n\tconst sttBaseURL = (stackEnv.OP_STT_BASE_URL || process.env.OP_STT_BASE_URL || \"\").trim();\n\tconst sttModel = (stackEnv.OP_STT_MODEL || process.env.OP_STT_MODEL || \"\").trim() || DEFAULT_MODEL;\n\tconst sttLanguageEnv = (stackEnv.OP_STT_LANGUAGE || process.env.OP_STT_LANGUAGE || \"\").trim();\n\tconst sttApiKey = (process.env.OP_STT_API_KEY ?? \"\").trim();\n\tif (!sttBaseURL) return errorResponse(503, \"stt_not_configured\", \"Configure an STT engine in Admin → Voice settings.\", {}, requestId);\n\tlet inboundForm;\n\ttry {\n\t\tinboundForm = await event.request.formData();\n\t} catch {\n\t\treturn errorResponse(400, \"bad_request\", \"Body must be multipart/form-data\", {}, requestId);\n\t}\n\tconst audio = inboundForm.get(\"audio\");\n\tif (!(audio instanceof Blob)) return errorResponse(400, \"bad_request\", \"Missing \\\"audio\\\" field (Blob)\", {}, requestId);\n\tconst languageReq = inboundForm.get(\"language\");\n\tconst promptReq = inboundForm.get(\"prompt\");\n\tconst language = typeof languageReq === \"string\" && languageReq.trim() ? languageReq.trim() : sttLanguageEnv;\n\tconst outForm = new FormData();\n\tconst filename = audio.name || \"recording.webm\";\n\toutForm.append(\"file\", audio, filename);\n\toutForm.append(\"model\", sttModel);\n\toutForm.append(\"response_format\", \"json\");\n\tif (language) outForm.append(\"language\", language);\n\tif (typeof promptReq === \"string\" && promptReq.trim()) outForm.append(\"prompt\", promptReq.trim());\n\tconst upstreamUrl = `${sttBaseURL.replace(/\\/+$/, \"\")}/v1/audio/transcriptions`;\n\tconst headers = {};\n\tif (sttApiKey) headers.authorization = `Bearer ${sttApiKey}`;\n\tlet upstream;\n\ttry {\n\t\tupstream = await fetch(upstreamUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders,\n\t\t\tbody: outForm,\n\t\t\tsignal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS)\n\t\t});\n\t} catch (err) {\n\t\treturn errorResponse(502, \"upstream_error\", `Could not reach STT endpoint: ${redactKey(err instanceof Error ? err.message : String(err))}`, { upstream: upstreamUrl }, requestId);\n\t}\n\tif (!upstream.ok) {\n\t\tconst snippet = redactKey(await upstream.text().catch(() => \"\")).slice(0, 500);\n\t\treturn errorResponse(502, \"upstream_error\", `STT endpoint returned ${upstream.status}`, {\n\t\t\tupstreamStatus: upstream.status,\n\t\t\tbody: snippet\n\t\t}, requestId);\n\t}\n\tlet payload;\n\ttry {\n\t\tpayload = await upstream.json();\n\t} catch {\n\t\treturn errorResponse(502, \"upstream_error\", \"STT endpoint returned a non-JSON response\", { upstreamStatus: upstream.status }, requestId);\n\t}\n\treturn jsonResponse(200, { text: typeof payload?.text === \"string\" ? payload.text : \"\" }, requestId);\n};\n//#endregion\nexport { POST };\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-DXwG4w1_.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/runtime/_server.ts.js"],"sourcesContent":["import { r as json } from \"../../../../chunks/exports.js\";\nimport { t as computeServerRuntimeContext } from \"../../../../chunks/features.js\";\n//#region src/routes/api/runtime/+server.ts\n/**\n* GET /api/runtime — public runtime-context endpoint (issue #509).\n*\n* PUBLIC by design: no auth is consulted. The body is the ServerRuntimeContext\n* whose `version` field is the contract-version handshake remote/hosted\n* clients use to detect version skew before enabling features. It carries no\n* secrets — mode, capability names, versions, and route pointers only.\n*/\nvar GET = (event) => {\n\treturn json(computeServerRuntimeContext(event));\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,GAAG,GAAG,CAAC,KAAK,KAAK;AACrB,CAAC,OAAO,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;AAChD;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-DlKT-RbM.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/host/addons/_server.ts.js"],"sourcesContent":["import { D as listAvailableAddonIds, O as listEnabledAddonIds } from \"../../../../../chunks/compose-args.js\";\nimport \"../../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../../chunks/state.js\";\nimport { a as getRequestId, c as jsonResponse, d as requireCapability, l as parseJsonBody, r as errorResponse, s as jsonBodyError, u as requireAdmin } from \"../../../../../chunks/helpers.js\";\nimport { t as performAddonToggle } from \"../../../../../chunks/addon-helpers.js\";\n//#region src/routes/api/host/addons/+server.ts\nfunction buildAddonList(availableIds, enabledIds) {\n\tconst enabledSet = new Set(enabledIds);\n\treturn availableIds.map((name) => ({\n\t\tname,\n\t\tenabled: enabledSet.has(name),\n\t\tavailable: true\n\t}));\n}\nvar GET = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst capabilityError = requireCapability(event, \"host:addons\", requestId);\n\tif (capabilityError) return capabilityError;\n\tconst authErr = requireAdmin(event, requestId);\n\tif (authErr) return authErr;\n\tconst state = getState();\n\treturn jsonResponse(200, { addons: buildAddonList(listAvailableAddonIds(), listEnabledAddonIds(state.homeDir)) }, requestId);\n};\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst capabilityError = requireCapability(event, \"host:addons\", requestId);\n\tif (capabilityError) return capabilityError;\n\tconst authErr = requireAdmin(event, requestId);\n\tif (authErr) return authErr;\n\tconst state = getState();\n\tconst result = await parseJsonBody(event.request);\n\tif (\"error\" in result) return jsonBodyError(result, requestId);\n\tconst body = result.data;\n\tconst name = typeof body.name === \"string\" ? body.name.trim() : \"\";\n\tif (!name) return errorResponse(400, \"bad_request\", \"name is required\", {}, requestId);\n\tif (!listAvailableAddonIds().includes(name)) return errorResponse(404, \"not_found\", `Addon \"${name}\" is not available`, { name }, requestId);\n\treturn performAddonToggle(state, name, typeof body.enabled === \"boolean\" ? body.enabled : void 0, requestId);\n};\n//#endregion\nexport { GET, POST };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;AACA,SAAS,cAAc,CAAC,YAAY,EAAE,UAAU,EAAE;AAClD,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC;AACvC,CAAC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AACpC,EAAE,IAAI;AACN,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,EAAE,SAAS,EAAE;AACb,EAAE,CAAC,CAAC;AACJ;AACG,IAAC,GAAG,GAAG,OAAO,KAAK,KAAK;AAC3B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC;AAC3E,CAAC,IAAI,eAAe,EAAE,OAAO,eAAe;AAC5C,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/C,CAAC,IAAI,OAAO,EAAE,OAAO,OAAO;AAC5B,CAAC,MAAM,KAAK,GAAG,QAAQ,EAAE;AACzB,CAAC,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,qBAAqB,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC;AAC7H;AACG,IAAC,IAAI,GAAG,OAAO,KAAK,KAAK;AAC5B,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACtC,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC;AAC3E,CAAC,IAAI,eAAe,EAAE,OAAO,eAAe;AAC5C,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/C,CAAC,IAAI,OAAO,EAAE,OAAO,OAAO;AAC5B,CAAC,MAAM,KAAK,GAAG,QAAQ,EAAE;AACzB,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,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AACnE,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,CAAC;AACvF,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,CAAC;AAC7I,CAAC,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,SAAS,CAAC;AAC7G;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-fenM6Iln.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/host/addons/_name_/credentials/_server.ts.js"],"sourcesContent":["import { D as listAvailableAddonIds, Ot as createLogger, T as getRegistryAddonConfig, Y as readStackEnv, Z as readStackSecretEnv, et as writeStackSecretEnv, q as patchSecretsEnvFile } from \"../../../../../../../chunks/compose-args.js\";\nimport \"../../../../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../../../../chunks/state.js\";\nimport { a as getRequestId, c as jsonResponse, d as requireCapability, l as parseJsonBody, r as errorResponse, s as jsonBodyError, u as requireAdmin } from \"../../../../../../../chunks/helpers.js\";\nimport { t as withAdminUpdateLock } from \"../../../../../../../chunks/admin-update-lock.js\";\n//#region src/routes/api/host/addons/[name]/credentials/+server.ts\nvar logger = createLogger(\"addons.name.credentials\");\n/**\n* Parse a `.env.schema` file into structured fields.\n*\n* Schema conventions:\n* - Lines starting with `#` are comments; consecutive comment lines\n* accumulate as the *description* of the next KEY=VALUE line.\n* - `# @sensitive` marks the next field as sensitive (renders as a\n* password input and is masked on GET).\n* - `# ---` resets the accumulator (used as a section separator).\n* - `KEY=DEFAULT` declares the field; default may be empty.\n*/\nfunction parseEnvSchema(text) {\n\tconst fields = [];\n\tlet commentBuffer = [];\n\tlet sensitive = false;\n\tfor (const rawLine of text.split(/\\r?\\n/)) {\n\t\tconst line = rawLine.trim();\n\t\tif (!line) continue;\n\t\tif (line.startsWith(\"#\")) {\n\t\t\tconst body = line.slice(1).trim();\n\t\t\tif (body === \"---\") {\n\t\t\t\tcommentBuffer = [];\n\t\t\t\tsensitive = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (body.startsWith(\"@\")) {\n\t\t\t\tif (/\\B@sensitive\\b/.test(body)) sensitive = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcommentBuffer.push(body);\n\t\t\tcontinue;\n\t\t}\n\t\tconst eq = line.indexOf(\"=\");\n\t\tif (eq <= 0) continue;\n\t\tconst key = line.slice(0, eq).trim();\n\t\tif (!key) continue;\n\t\tconst def = line.slice(eq + 1).trim();\n\t\tfields.push({\n\t\t\tkey,\n\t\t\tsensitive,\n\t\t\tdescription: commentBuffer.join(\" \").trim(),\n\t\t\tdefault: def\n\t\t});\n\t\tcommentBuffer = [];\n\t\tsensitive = false;\n\t}\n\treturn fields;\n}\nvar GET = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst capabilityError = requireCapability(event, \"host:addons\", requestId);\n\tif (capabilityError) return capabilityError;\n\tconst authErr = requireAdmin(event, requestId);\n\tif (authErr) return authErr;\n\tconst state = getState();\n\tconst name = event.params.name;\n\tif (!listAvailableAddonIds().includes(name)) return errorResponse(404, \"not_found\", `Addon \"${name}\" is not available`, { name }, requestId);\n\tlet config;\n\ttry {\n\t\tconfig = getRegistryAddonConfig(name);\n\t} catch (error) {\n\t\tlogger.error(\"schema read failed\", {\n\t\t\tname,\n\t\t\terror: String(error),\n\t\t\trequestId\n\t\t});\n\t\treturn errorResponse(500, \"internal_error\", `Addon \"${name}\" schema is unavailable`, {}, requestId);\n\t}\n\tconst schemaFields = parseEnvSchema(config.envSchema);\n\tconst secretEnv = readStackSecretEnv(state.homeDir);\n\tconst stackEnv = readStackEnv(state.homeDir);\n\treturn jsonResponse(200, {\n\t\tname,\n\t\tfields: schemaFields.map((f) => {\n\t\t\tconst set = ((f.sensitive ? secretEnv[f.key] : stackEnv[f.key]) ?? \"\").length > 0;\n\t\t\treturn {\n\t\t\t\tkey: f.key,\n\t\t\t\tsensitive: f.sensitive,\n\t\t\t\tdescription: f.description,\n\t\t\t\tdefault: f.default,\n\t\t\t\tset,\n\t\t\t\tsecret: {\n\t\t\t\t\tenvKey: f.key,\n\t\t\t\t\tpresent: set\n\t\t\t\t},\n\t\t\t\tvalue: \"\"\n\t\t\t};\n\t\t})\n\t}, requestId);\n};\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst capabilityError = requireCapability(event, \"host:addons\", requestId);\n\tif (capabilityError) return capabilityError;\n\tconst authErr = requireAdmin(event, requestId);\n\tif (authErr) return authErr;\n\tconst state = getState();\n\tconst name = event.params.name;\n\tif (!listAvailableAddonIds().includes(name)) return errorResponse(404, \"not_found\", `Addon \"${name}\" is not available`, { name }, requestId);\n\tconst parsed = await parseJsonBody(event.request);\n\tif (\"error\" in parsed) return jsonBodyError(parsed, requestId);\n\tconst valuesRaw = parsed.data.values ?? {};\n\tlet config;\n\ttry {\n\t\tconfig = getRegistryAddonConfig(name);\n\t} catch (error) {\n\t\tlogger.error(\"schema read failed (post)\", {\n\t\t\tname,\n\t\t\terror: String(error),\n\t\t\trequestId\n\t\t});\n\t\treturn errorResponse(500, \"internal_error\", `Addon \"${name}\" schema is unavailable`, {}, requestId);\n\t}\n\tconst schemaFields = parseEnvSchema(config.envSchema);\n\tconst sensitiveKeys = new Set(schemaFields.filter((f) => f.sensitive).map((f) => f.key));\n\tconst allowedKeys = new Set(schemaFields.map((f) => f.key));\n\tconst sensitiveUpdates = {};\n\tconst configUpdates = {};\n\tfor (const [k, v] of Object.entries(valuesRaw)) {\n\t\tif (!allowedKeys.has(k)) continue;\n\t\tconst val = typeof v === \"string\" ? v : \"\";\n\t\tif (sensitiveKeys.has(k)) sensitiveUpdates[k] = val;\n\t\telse configUpdates[k] = val;\n\t}\n\tif (Object.keys(sensitiveUpdates).length === 0 && Object.keys(configUpdates).length === 0) return errorResponse(400, \"bad_request\", \"no schema-declared keys supplied\", {}, requestId);\n\treturn withAdminUpdateLock(state, requestId, () => {\n\t\ttry {\n\t\t\tif (Object.keys(sensitiveUpdates).length > 0) writeStackSecretEnv(state, sensitiveUpdates);\n\t\t\tif (Object.keys(configUpdates).length > 0) patchSecretsEnvFile(state.homeDir, configUpdates);\n\t\t} catch (err) {\n\t\t\tlogger.error(\"write failed\", {\n\t\t\t\tname,\n\t\t\t\terror: String(err),\n\t\t\t\trequestId\n\t\t\t});\n\t\t\treturn errorResponse(500, \"internal_error\", err instanceof Error ? err.message : \"write failed\", {}, requestId);\n\t\t}\n\t\treturn jsonResponse(200, {\n\t\t\tok: true,\n\t\t\tname,\n\t\t\tupdated: [...Object.keys(sensitiveUpdates), ...Object.keys(configUpdates)].sort()\n\t\t}, requestId);\n\t});\n};\n//#endregion\nexport { GET, POST };\n"],"names":[],"mappings":"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"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { ax as readStackEnv } from './src-B2-r_9oB.js';
|
|
2
|
-
import { g as getState } from './state-Dkjz2T4C.js';
|
|
3
|
-
import { d as getRequestId, r as requireAdmin, e as errorResponse } from './helpers-DWpoPvHz.js';
|
|
4
|
-
import { t as toSpeakableText } from './speakable-text-BflxDDdY.js';
|
|
5
|
-
import './chunk-DOvWTNp_.js';
|
|
6
|
-
import 'node:module';
|
|
7
|
-
import './network-preset-BvVAoagy.js';
|
|
8
|
-
import './dist-DtzrgNJ1.js';
|
|
9
|
-
import 'node:fs';
|
|
10
|
-
import 'node:child_process';
|
|
11
|
-
import 'node:path';
|
|
12
|
-
import 'buffer';
|
|
13
|
-
import 'node:url';
|
|
14
|
-
import 'node:os';
|
|
15
|
-
import 'node:crypto';
|
|
16
|
-
import 'events';
|
|
17
|
-
import 'fs';
|
|
18
|
-
import 'node:events';
|
|
19
|
-
import 'node:stream';
|
|
20
|
-
import 'node:string_decoder';
|
|
21
|
-
import 'path';
|
|
22
|
-
import 'assert';
|
|
23
|
-
import 'zlib';
|
|
24
|
-
import 'node:assert';
|
|
25
|
-
import 'node:fs/promises';
|
|
26
|
-
import './opencode-target-DYD2zQ4l.js';
|
|
27
|
-
import './features-DltizIi4.js';
|
|
28
|
-
|
|
29
|
-
//#region src/routes/api/speak/+server.ts
|
|
30
|
-
var DEFAULT_MODEL = "kokoro";
|
|
31
|
-
var DEFAULT_VOICE = "bf_isabella";
|
|
32
|
-
var DEFAULT_FORMAT = "wav";
|
|
33
|
-
var UPSTREAM_TIMEOUT_MS = 6e4;
|
|
34
|
-
function redactKey(s) {
|
|
35
|
-
return s.replace(/(sk-[A-Za-z0-9_-]{4,})/g, "sk-***").replace(/(Bearer\s+)[A-Za-z0-9._-]+/gi, "$1***");
|
|
36
|
-
}
|
|
37
|
-
var POST = async (event) => {
|
|
38
|
-
const requestId = getRequestId(event);
|
|
39
|
-
const authError = requireAdmin(event, requestId);
|
|
40
|
-
if (authError) return authError;
|
|
41
|
-
const stackEnv = readStackEnv(getState().homeDir);
|
|
42
|
-
const ttsBaseURL = (stackEnv.OP_TTS_BASE_URL || process.env.OP_TTS_BASE_URL || "").trim();
|
|
43
|
-
const ttsModel = (stackEnv.OP_TTS_MODEL || process.env.OP_TTS_MODEL || "").trim() || DEFAULT_MODEL;
|
|
44
|
-
const ttsVoice = (stackEnv.OP_TTS_VOICE || process.env.OP_TTS_VOICE || "").trim() || DEFAULT_VOICE;
|
|
45
|
-
const ttsApiKey = (process.env.OP_TTS_API_KEY ?? "").trim();
|
|
46
|
-
if (!ttsBaseURL) return errorResponse(503, "tts_not_configured", "Configure a TTS engine in Admin → Voice settings.", {}, requestId);
|
|
47
|
-
let body;
|
|
48
|
-
try {
|
|
49
|
-
body = await event.request.json();
|
|
50
|
-
} catch {
|
|
51
|
-
return errorResponse(400, "bad_request", "Invalid JSON body", {}, requestId);
|
|
52
|
-
}
|
|
53
|
-
const b = body ?? {};
|
|
54
|
-
const text = typeof b.text === "string" ? b.text.trim() : "";
|
|
55
|
-
if (!text) return errorResponse(400, "bad_request", "\"text\" is required", {}, requestId);
|
|
56
|
-
const voice = typeof b.voice === "string" && b.voice.trim() ? b.voice.trim() : ttsVoice;
|
|
57
|
-
const format = typeof b.format === "string" && b.format.trim() ? b.format.trim() : DEFAULT_FORMAT;
|
|
58
|
-
const speechText = toSpeakableText(text);
|
|
59
|
-
const upstreamUrl = `${ttsBaseURL.replace(/\/+$/, "")}/v1/audio/speech`;
|
|
60
|
-
const headers = { "content-type": "application/json" };
|
|
61
|
-
if (ttsApiKey) headers.authorization = `Bearer ${ttsApiKey}`;
|
|
62
|
-
let upstream;
|
|
63
|
-
try {
|
|
64
|
-
upstream = await fetch(upstreamUrl, {
|
|
65
|
-
method: "POST",
|
|
66
|
-
headers,
|
|
67
|
-
body: JSON.stringify({
|
|
68
|
-
model: ttsModel,
|
|
69
|
-
voice,
|
|
70
|
-
input: speechText,
|
|
71
|
-
response_format: format
|
|
72
|
-
}),
|
|
73
|
-
signal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS)
|
|
74
|
-
});
|
|
75
|
-
} catch (err) {
|
|
76
|
-
return errorResponse(502, "upstream_error", `Could not reach TTS endpoint: ${redactKey(err instanceof Error ? err.message : String(err))}`, { upstream: upstreamUrl }, requestId);
|
|
77
|
-
}
|
|
78
|
-
if (!upstream.ok) {
|
|
79
|
-
const body = await upstream.text().catch(() => "");
|
|
80
|
-
return errorResponse(502, "upstream_error", `TTS endpoint returned ${upstream.status}`, {
|
|
81
|
-
upstreamStatus: upstream.status,
|
|
82
|
-
body: redactKey(body).slice(0, 500)
|
|
83
|
-
}, requestId);
|
|
84
|
-
}
|
|
85
|
-
const responseHeaders = new Headers();
|
|
86
|
-
responseHeaders.set("content-type", upstream.headers.get("content-type") ?? "audio/wav");
|
|
87
|
-
const contentLength = upstream.headers.get("content-length");
|
|
88
|
-
if (contentLength) responseHeaders.set("content-length", contentLength);
|
|
89
|
-
responseHeaders.set("x-request-id", requestId);
|
|
90
|
-
return new Response(upstream.body, {
|
|
91
|
-
status: 200,
|
|
92
|
-
headers: responseHeaders
|
|
93
|
-
});
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
export { POST };
|
|
97
|
-
//# sourceMappingURL=_server.ts-zt3yI2wU.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-zt3yI2wU.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/speak/_server.ts.js"],"sourcesContent":["import { Y as readStackEnv } from \"../../../../chunks/compose-args.js\";\nimport \"../../../../chunks/src.js\";\nimport { t as getState } from \"../../../../chunks/state.js\";\nimport { a as getRequestId, r as errorResponse, u as requireAdmin } from \"../../../../chunks/helpers.js\";\nimport { t as toSpeakableText } from \"../../../../chunks/speakable-text.js\";\n//#region src/routes/api/speak/+server.ts\nvar DEFAULT_MODEL = \"kokoro\";\nvar DEFAULT_VOICE = \"bf_isabella\";\nvar DEFAULT_FORMAT = \"wav\";\nvar UPSTREAM_TIMEOUT_MS = 6e4;\nfunction redactKey(s) {\n\treturn s.replace(/(sk-[A-Za-z0-9_-]{4,})/g, \"sk-***\").replace(/(Bearer\\s+)[A-Za-z0-9._-]+/gi, \"$1***\");\n}\nvar POST = async (event) => {\n\tconst requestId = getRequestId(event);\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst stackEnv = readStackEnv(getState().homeDir);\n\tconst ttsBaseURL = (stackEnv.OP_TTS_BASE_URL || process.env.OP_TTS_BASE_URL || \"\").trim();\n\tconst ttsModel = (stackEnv.OP_TTS_MODEL || process.env.OP_TTS_MODEL || \"\").trim() || DEFAULT_MODEL;\n\tconst ttsVoice = (stackEnv.OP_TTS_VOICE || process.env.OP_TTS_VOICE || \"\").trim() || DEFAULT_VOICE;\n\tconst ttsApiKey = (process.env.OP_TTS_API_KEY ?? \"\").trim();\n\tif (!ttsBaseURL) return errorResponse(503, \"tts_not_configured\", \"Configure a TTS engine in Admin → Voice settings.\", {}, requestId);\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 b = body ?? {};\n\tconst text = typeof b.text === \"string\" ? b.text.trim() : \"\";\n\tif (!text) return errorResponse(400, \"bad_request\", \"\\\"text\\\" is required\", {}, requestId);\n\tconst voice = typeof b.voice === \"string\" && b.voice.trim() ? b.voice.trim() : ttsVoice;\n\tconst format = typeof b.format === \"string\" && b.format.trim() ? b.format.trim() : DEFAULT_FORMAT;\n\tconst speechText = toSpeakableText(text);\n\tconst upstreamUrl = `${ttsBaseURL.replace(/\\/+$/, \"\")}/v1/audio/speech`;\n\tconst headers = { \"content-type\": \"application/json\" };\n\tif (ttsApiKey) headers.authorization = `Bearer ${ttsApiKey}`;\n\tlet upstream;\n\ttry {\n\t\tupstream = await fetch(upstreamUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders,\n\t\t\tbody: JSON.stringify({\n\t\t\t\tmodel: ttsModel,\n\t\t\t\tvoice,\n\t\t\t\tinput: speechText,\n\t\t\t\tresponse_format: format\n\t\t\t}),\n\t\t\tsignal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS)\n\t\t});\n\t} catch (err) {\n\t\treturn errorResponse(502, \"upstream_error\", `Could not reach TTS endpoint: ${redactKey(err instanceof Error ? err.message : String(err))}`, { upstream: upstreamUrl }, requestId);\n\t}\n\tif (!upstream.ok) {\n\t\tconst body = await upstream.text().catch(() => \"\");\n\t\treturn errorResponse(502, \"upstream_error\", `TTS endpoint returned ${upstream.status}`, {\n\t\t\tupstreamStatus: upstream.status,\n\t\t\tbody: redactKey(body).slice(0, 500)\n\t\t}, requestId);\n\t}\n\tconst responseHeaders = new Headers();\n\tresponseHeaders.set(\"content-type\", upstream.headers.get(\"content-type\") ?? \"audio/wav\");\n\tconst contentLength = upstream.headers.get(\"content-length\");\n\tif (contentLength) responseHeaders.set(\"content-length\", contentLength);\n\tresponseHeaders.set(\"x-request-id\", requestId);\n\treturn new Response(upstream.body, {\n\t\tstatus: 200,\n\t\theaders: responseHeaders\n\t});\n};\n//#endregion\nexport { POST };\n"],"names":[],"mappings":"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"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { ah as listEnabledAddonIds, a3 as getAddonServiceNames, p as checkDocker, C as composeStop, m as buildComposeOptions, aU as setAddonEnabled, D as createLogger } from './src-B2-r_9oB.js';
|
|
2
|
-
import { r as resetState } from './state-Dkjz2T4C.js';
|
|
3
|
-
import { e as errorResponse, k as jsonResponse } from './helpers-DWpoPvHz.js';
|
|
4
|
-
import { w as withAdminUpdateLock } from './admin-update-lock-B-z4UE8R.js';
|
|
5
|
-
|
|
6
|
-
//#region src/lib/server/addon-helpers.ts
|
|
7
|
-
/**
|
|
8
|
-
* Shared addon enable/disable logic for admin route handlers.
|
|
9
|
-
*
|
|
10
|
-
* Both /admin/addons and /admin/addons/:name share the same POST flow:
|
|
11
|
-
* validate → stop running services if disabling → mutate state → audit.
|
|
12
|
-
* This module houses the shared mutation step so neither route duplicates it.
|
|
13
|
-
*/
|
|
14
|
-
var logger = createLogger("addon-helpers");
|
|
15
|
-
/**
|
|
16
|
-
* Stop running services if disabling, then call setAddonEnabled.
|
|
17
|
-
*/
|
|
18
|
-
async function performAddonToggleMutation(state, name, requestedEnabled, requestId) {
|
|
19
|
-
const wasEnabled = listEnabledAddonIds(state.homeDir).includes(name);
|
|
20
|
-
const nextEnabled = requestedEnabled !== void 0 ? requestedEnabled : wasEnabled;
|
|
21
|
-
if (!nextEnabled && wasEnabled) {
|
|
22
|
-
const serviceNames = getAddonServiceNames(state.homeDir, name);
|
|
23
|
-
if (serviceNames.length > 0) {
|
|
24
|
-
if ((await checkDocker()).ok) try {
|
|
25
|
-
await composeStop(serviceNames, buildComposeOptions(state));
|
|
26
|
-
logger.info("stopped addon services before disable", {
|
|
27
|
-
name,
|
|
28
|
-
services: serviceNames,
|
|
29
|
-
requestId
|
|
30
|
-
});
|
|
31
|
-
} catch (err) {
|
|
32
|
-
logger.warn("failed to stop addon services before disable", {
|
|
33
|
-
name,
|
|
34
|
-
services: serviceNames,
|
|
35
|
-
error: String(err),
|
|
36
|
-
requestId
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
const mutation = setAddonEnabled(state.homeDir, name, nextEnabled, state);
|
|
42
|
-
if (!mutation.ok) return mutation;
|
|
43
|
-
if (mutation.changed) resetState();
|
|
44
|
-
return {
|
|
45
|
-
ok: true,
|
|
46
|
-
enabled: listEnabledAddonIds(state.homeDir).includes(name),
|
|
47
|
-
changed: mutation.changed
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
function performAddonToggle(state, name, requestedEnabled, requestId) {
|
|
51
|
-
return withAdminUpdateLock(state, requestId, async () => {
|
|
52
|
-
const toggle = await performAddonToggleMutation(state, name, requestedEnabled, requestId);
|
|
53
|
-
if (!toggle.ok) return errorResponse(500, "internal_error", toggle.error, {}, requestId);
|
|
54
|
-
return jsonResponse(200, {
|
|
55
|
-
ok: true,
|
|
56
|
-
addon: name,
|
|
57
|
-
enabled: toggle.enabled,
|
|
58
|
-
changed: toggle.changed
|
|
59
|
-
}, requestId);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export { performAddonToggle as p };
|
|
64
|
-
//# sourceMappingURL=addon-helpers-B7bkHg-K.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"addon-helpers-B7bkHg-K.js","sources":["../../../.svelte-kit/adapter-node/chunks/addon-helpers.js"],"sourcesContent":["import { O as listEnabledAddonIds, Ot as createLogger, k as setAddonEnabled, t as buildComposeOptions, w as getAddonServiceNames } from \"./compose-args.js\";\nimport { i as checkDocker, v as composeStop } from \"./docker.js\";\nimport \"./src.js\";\nimport { n as resetState } from \"./state.js\";\nimport { c as jsonResponse, r as errorResponse } from \"./helpers.js\";\nimport { t as withAdminUpdateLock } from \"./admin-update-lock.js\";\n//#region src/lib/server/addon-helpers.ts\n/**\n* Shared addon enable/disable logic for admin route handlers.\n*\n* Both /admin/addons and /admin/addons/:name share the same POST flow:\n* validate → stop running services if disabling → mutate state → audit.\n* This module houses the shared mutation step so neither route duplicates it.\n*/\nvar logger = createLogger(\"addon-helpers\");\n/**\n* Stop running services if disabling, then call setAddonEnabled.\n*/\nasync function performAddonToggleMutation(state, name, requestedEnabled, requestId) {\n\tconst wasEnabled = listEnabledAddonIds(state.homeDir).includes(name);\n\tconst nextEnabled = requestedEnabled !== void 0 ? requestedEnabled : wasEnabled;\n\tif (!nextEnabled && wasEnabled) {\n\t\tconst serviceNames = getAddonServiceNames(state.homeDir, name);\n\t\tif (serviceNames.length > 0) {\n\t\t\tif ((await checkDocker()).ok) try {\n\t\t\t\tawait composeStop(serviceNames, buildComposeOptions(state));\n\t\t\t\tlogger.info(\"stopped addon services before disable\", {\n\t\t\t\t\tname,\n\t\t\t\t\tservices: serviceNames,\n\t\t\t\t\trequestId\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\tlogger.warn(\"failed to stop addon services before disable\", {\n\t\t\t\t\tname,\n\t\t\t\t\tservices: serviceNames,\n\t\t\t\t\terror: String(err),\n\t\t\t\t\trequestId\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tconst mutation = setAddonEnabled(state.homeDir, name, nextEnabled, state);\n\tif (!mutation.ok) return mutation;\n\tif (mutation.changed) resetState();\n\treturn {\n\t\tok: true,\n\t\tenabled: listEnabledAddonIds(state.homeDir).includes(name),\n\t\tchanged: mutation.changed\n\t};\n}\nfunction performAddonToggle(state, name, requestedEnabled, requestId) {\n\treturn withAdminUpdateLock(state, requestId, async () => {\n\t\tconst toggle = await performAddonToggleMutation(state, name, requestedEnabled, requestId);\n\t\tif (!toggle.ok) return errorResponse(500, \"internal_error\", toggle.error, {}, requestId);\n\t\treturn jsonResponse(200, {\n\t\t\tok: true,\n\t\t\taddon: name,\n\t\t\tenabled: toggle.enabled,\n\t\t\tchanged: toggle.changed\n\t\t}, requestId);\n\t});\n}\n//#endregion\nexport { performAddonToggle as t };\n"],"names":[],"mappings":";;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC;AAC1C;AACA;AACA;AACA,eAAe,0BAA0B,CAAC,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE;AACpF,CAAC,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrE,CAAC,MAAM,WAAW,GAAG,gBAAgB,KAAK,MAAM,GAAG,gBAAgB,GAAG,UAAU;AAChF,CAAC,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE;AACjC,EAAE,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;AAChE,EAAE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,GAAG,IAAI,CAAC,MAAM,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI;AACrC,IAAI,MAAM,WAAW,CAAC,YAAY,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC/D,IAAI,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE;AACzD,KAAK,IAAI;AACT,KAAK,QAAQ,EAAE,YAAY;AAC3B,KAAK;AACL,KAAK,CAAC;AACN,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE;AACjB,IAAI,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE;AAChE,KAAK,IAAI;AACT,KAAK,QAAQ,EAAE,YAAY;AAC3B,KAAK,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;AACvB,KAAK;AACL,KAAK,CAAC;AACN,GAAG;AACH,EAAE;AACF,CAAC;AACD,CAAC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC;AAC1E,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,QAAQ;AAClC,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE;AACnC,CAAC,OAAO;AACR,EAAE,EAAE,EAAE,IAAI;AACV,EAAE,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC5D,EAAE,OAAO,EAAE,QAAQ,CAAC;AACpB,EAAE;AACF;AACA,SAAS,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE;AACtE,CAAC,OAAO,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY;AAC1D,EAAE,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAAC;AAC3F,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,CAAC;AAC1F,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE;AAC3B,GAAG,EAAE,EAAE,IAAI;AACX,GAAG,KAAK,EAAE,IAAI;AACd,GAAG,OAAO,EAAE,MAAM,CAAC,OAAO;AAC1B,GAAG,OAAO,EAAE,MAAM,CAAC;AACnB,GAAG,EAAE,SAAS,CAAC;AACf,CAAC,CAAC,CAAC;AACH;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compose-args2-B1cYvF5r.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"docker2-CF7qyd1U.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"features-DltizIi4.js","sources":["../../../.svelte-kit/adapter-node/chunks/features.js"],"sourcesContent":["import { mt as PLATFORM_VERSION } from \"./compose-args.js\";\nimport \"./src.js\";\nvar package_default = {\n\tname: \"@openpalm/ui\",\n\tdescription: \"SvelteKit web UI and API for OpenPalm stack management\",\n\tversion: \"0.13.0-beta.7\",\n\tlicense: \"MPL-2.0\",\n\ttype: \"module\",\n\t\"//minHarnessContract\": \"Minimum native Electron harness contract this UI build requires (design §5.3). The harness refuses to self-update onto a build whose minHarnessContract exceeds the contract it provides and prompts an app re-download instead. Bump ONLY when the UI starts depending on a new IPC method / spawn env key; keep in lockstep with packages/electron/src/harness-contract.ts HARNESS_CONTRACT_VERSION.\",\n\tminHarnessContract: 1,\n\trepository: {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/itlackey/openpalm.git\",\n\t\t\"directory\": \"packages/ui\"\n\t},\n\tpublishConfig: { \"access\": \"public\" },\n\tfiles: [\"build\"],\n\tscripts: {\n\t\t\"dev\": \"PORT=${PORT:-5173} vite dev\",\n\t\t\"ux:audit\": \"NODE_PATH=\\\"$PWD/node_modules\\\" bun \\\"${AKM_HOME:-$HOME/akm}/skills/web-ux/ux-dom-audit/scripts/audit.ts\\\" e2e/ux-audit.config.json\",\n\t\t\"ux:audit:wizard\": \"NODE_PATH=\\\"$PWD/node_modules\\\" bun \\\"${AKM_HOME:-$HOME/akm}/skills/web-ux/ux-dom-audit/scripts/audit.ts\\\" e2e/ux-audit.wizard.config.json\",\n\t\t\"dev:local\": \"PORT=${PORT:-5173} OP_OPENCODE_URL=${OP_OPENCODE_URL:-http://localhost:3800} vite dev\",\n\t\t\"build\": \"svelte-kit sync && vite build && node scripts/stamp-version.mjs\",\n\t\t\"clean:build\": \"rm -rf .svelte-kit build\",\n\t\t\"preview\": \"vite preview\",\n\t\t\"check\": \"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json\",\n\t\t\"test:e2e\": \"playwright test\",\n\t\t\"test\": \"npm run test:unit -- --run && npm run test:e2e\",\n\t\t\"test:unit\": \"vitest\",\n\t\t\"test:browsers\": \"playwright install --with-deps chromium\",\n\t\t\"lint\": \"eslint .\",\n\t\t\"format\": \"prettier --write .\",\n\t\t\"start\": \"node build/index.js\"\n\t},\n\tdevDependencies: {\n\t\t\"@axe-core/playwright\": \"^4.11.3\",\n\t\t\"@eslint/compat\": \"^2.0.2\",\n\t\t\"@eslint/js\": \"^10.0.1\",\n\t\t\"@openpalm/lib\": \"workspace:*\",\n\t\t\"@openpalm/ui-kit\": \"workspace:*\",\n\t\t\"@playwright/test\": \"^1.58.1\",\n\t\t\"@sveltejs/adapter-node\": \"^5.5.4\",\n\t\t\"@sveltejs/kit\": \"^2.53.3\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^7.1.2\",\n\t\t\"@types/markdown-it\": \"^14.1.2\",\n\t\t\"@types/node\": \"^25.9.1\",\n\t\t\"@vitest/browser-playwright\": \"^4.0.18\",\n\t\t\"@vitest/coverage-v8\": \"^4.0.18\",\n\t\t\"croner\": \"^10.0.1\",\n\t\t\"dotenv\": \"^17.4.2\",\n\t\t\"eslint\": \"^10.4.0\",\n\t\t\"eslint-config-prettier\": \"^10.1.8\",\n\t\t\"eslint-plugin-svelte\": \"^3.14.0\",\n\t\t\"globals\": \"^17.3.0\",\n\t\t\"markdown-it\": \"^14.1.1\",\n\t\t\"playwright\": \"^1.58.1\",\n\t\t\"prettier\": \"^3.8.1\",\n\t\t\"prettier-plugin-svelte\": \"^4.0.1\",\n\t\t\"svelte\": \"^5.53.5\",\n\t\t\"svelte-check\": \"^4.1.1\",\n\t\t\"typescript\": \"^6.0.3\",\n\t\t\"typescript-eslint\": \"^8.54.0\",\n\t\t\"uqr\": \"0.1.3\",\n\t\t\"vite\": \"^8.0.14\",\n\t\t\"vite-plugin-devtools-json\": \"^1.0.0\",\n\t\t\"vitest\": \"^4.0.18\",\n\t\t\"vitest-browser-svelte\": \"^2.0.2\",\n\t\t\"yaml\": \"^2.8.0\"\n\t}\n};\n//#endregion\n//#region src/lib/server/features.ts\n/**\n* Server runtime context — RuntimeContext v2 (issue #509). Computed server-side on every request via\n* +layout.server.ts and served publicly at GET /api/runtime (the\n* contract-version handshake for remote/hosted clients).\n*\n* Admin capability is an Electron-or-CLI-only security boundary — there is no\n* per-mode capability matrix and no env self-grant footgun (a served/container\n* build must never be able to claim host mode). A single boolean:\n* OP_INSIDE_ELECTRON=1 (injected by packages/electron/src/main.ts) OR\n* OP_ENABLE_ADMIN=1 (local dev / `openpalm admin`) → adminCapable\n* Every process gets the base capability set; only an adminCapable process\n* additionally gets host:*.\n*/\n/**\n* True when this process is admin-capable — running inside Electron or\n* explicitly opted into admin. This is the ONLY gate for host:* capabilities;\n* a served/container/PWA build is never admin-capable.\n*/\nfunction isAdminCapable() {\n\treturn process.env.OP_INSIDE_ELECTRON === \"1\" || process.env.OP_ENABLE_ADMIN === \"1\";\n}\n/** Base capabilities granted to EVERY process. The browser owns\n* connections uniformly — multiple assistants + switching work everywhere. */\nvar BASE_CAPABILITIES = [\n\t\"chat\",\n\t\"connections:read\",\n\t\"connections:manage\",\n\t\"connections:switch\",\n\t\"assistant-settings:read\",\n\t\"assistant-settings:write\",\n\t\"pwa:install\"\n];\n/** The host:* capability set — added only when adminCapable. */\nvar HOST_CAPABILITIES = [\n\t\"host:setup\",\n\t\"host:stack:read\",\n\t\"host:stack:write\",\n\t\"host:containers\",\n\t\"host:addons\",\n\t\"host:updates\",\n\t\"host:logs\",\n\t\"host:secrets\",\n\t\"host:recovery\",\n\t\"host:akm-sharing\"\n];\nfunction computeServerRuntimeContext(event) {\n\tconst admin = isAdminCapable();\n\treturn {\n\t\tversion: 2,\n\t\tadmin,\n\t\tserverCapabilities: admin ? [...BASE_CAPABILITIES, ...HOST_CAPABILITIES] : [...BASE_CAPABILITIES],\n\t\tpublicBaseUrl: event.url?.origin ?? \"\",\n\t\tuiVersion: package_default.version,\n\t\tskeletonVersion: process.env.OP_SKELETON_VERSION?.trim() || PLATFORM_VERSION,\n\t\troutes: admin ? {\n\t\t\tchat: \"/chat\",\n\t\t\tconnections: \"/connections\",\n\t\t\thost: \"/host\",\n\t\t\tsetup: \"/setup\"\n\t\t} : {\n\t\t\tchat: \"/chat\",\n\t\t\tconnections: \"/connections\"\n\t\t},\n\t\tsecurity: {\n\t\t\thostAdminLoopbackOnly: true,\n\t\t\trequiresHttpsForRemoteConnections: !admin,\n\t\t\tcsrfMode: admin ? \"loopback-origin\" : \"same-site\"\n\t\t}\n\t};\n}\n//#endregion\nexport { computeServerRuntimeContext as t };\n"],"names":[],"mappings":";;AAEA,IAAI,eAAe,GAAG;AACtB,CAEC,OAAO,EAAE,eAgEV,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,GAAG;AAC1B,CAAC,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG;AACrF;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,CAAC,MAAM;AACP,CAAC,kBAAkB;AACnB,CAAC,oBAAoB;AACrB,CAAC,oBAAoB;AACrB,CAAC,yBAAyB;AAC1B,CAAC,0BAA0B;AAC3B,CAAC;AACD,CAAC;AACD;AACA,IAAI,iBAAiB,GAAG;AACxB,CAAC,YAAY;AACb,CAAC,iBAAiB;AAClB,CAAC,kBAAkB;AACnB,CAAC,iBAAiB;AAClB,CAAC,aAAa;AACd,CAAC,cAAc;AACf,CAAC,WAAW;AACZ,CAAC,cAAc;AACf,CAAC,eAAe;AAChB,CAAC;AACD,CAAC;AACD,SAAS,2BAA2B,CAAC,KAAK,EAAE;AAC5C,CAAC,MAAM,KAAK,GAAG,cAAc,EAAE;AAC/B,CAAC,OAAO;AACR,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE,KAAK;AACP,EAAE,kBAAkB,EAAE,KAAK,GAAG,CAAC,GAAG,iBAAiB,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC;AACnG,EAAE,aAAa,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE;AACxC,EAAE,SAAS,EAAE,eAAe,CAAC,OAAO;AACpC,EAAE,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,gBAAgB;AAC9E,EAAE,MAAM,EAAE,KAAK,GAAG;AAClB,GAAG,IAAI,EAAE,OAAO;AAChB,GAAG,WAAW,EAAE,cAAc;AAC9B,GAAG,IAAI,EAAE,OAAO;AAChB,GAAG,KAAK,EAAE;AACV,GAAG,GAAG;AACN,GAAG,IAAI,EAAE,OAAO;AAChB,GAAG,WAAW,EAAE;AAChB,GAAG;AACH,EAAE,QAAQ,EAAE;AACZ,GAAG,qBAAqB,EAAE,IAAI;AAC9B,GAAG,iCAAiC,EAAE,CAAC,KAAK;AAC5C,GAAG,QAAQ,EAAE,KAAK,GAAG,iBAAiB,GAAG;AACzC;AACA,EAAE;AACF;;;;"}
|