@openpalm/ui 0.13.0-beta.3 → 0.13.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/{11.BF9IcRAW.css → 11.D7iX4s2y.css} +1 -1
  3. package/build/client/_app/immutable/assets/11.D7iX4s2y.css.br +0 -0
  4. package/build/client/_app/immutable/assets/11.D7iX4s2y.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/7.CNzyzDDZ.css +1 -0
  6. package/build/client/_app/immutable/assets/7.CNzyzDDZ.css.br +0 -0
  7. package/build/client/_app/immutable/assets/7.CNzyzDDZ.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/{9.vqGkbIg9.css → 9.DeeTO7Ju.css} +1 -1
  9. package/build/client/_app/immutable/assets/9.DeeTO7Ju.css.br +0 -0
  10. package/build/client/_app/immutable/assets/{9.vqGkbIg9.css.gz → 9.DeeTO7Ju.css.gz} +0 -0
  11. package/build/client/_app/immutable/chunks/{Gis7OmMK.js → BKLMDjUE.js} +1 -1
  12. package/build/client/_app/immutable/chunks/BKLMDjUE.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/BKLMDjUE.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/BNJvGRjX.js +3 -0
  15. package/build/client/_app/immutable/chunks/BNJvGRjX.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/BNJvGRjX.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{DuFsBiCS.js → C5iiO0W9.js} +1 -1
  18. package/build/client/_app/immutable/chunks/C5iiO0W9.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/C5iiO0W9.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/C718MJXm.js +5 -0
  21. package/build/client/_app/immutable/chunks/C718MJXm.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/C718MJXm.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{S17SDfo_.js → CBV2kBE1.js} +1 -1
  24. package/build/client/_app/immutable/chunks/CBV2kBE1.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/CBV2kBE1.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/DD22UF1L.js +1 -0
  27. package/build/client/_app/immutable/chunks/DD22UF1L.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/DD22UF1L.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/{BApqEZP1.js → DWtm_qwJ.js} +1 -1
  30. package/build/client/_app/immutable/chunks/DWtm_qwJ.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/DWtm_qwJ.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/ccncQf9O.js +1 -0
  33. package/build/client/_app/immutable/chunks/ccncQf9O.js.br +2 -0
  34. package/build/client/_app/immutable/chunks/ccncQf9O.js.gz +0 -0
  35. package/build/client/_app/immutable/entry/{app.C4X372ym.js → app.DAzfwrA7.js} +2 -2
  36. package/build/client/_app/immutable/entry/app.DAzfwrA7.js.br +0 -0
  37. package/build/client/_app/immutable/entry/app.DAzfwrA7.js.gz +0 -0
  38. package/build/client/_app/immutable/entry/start.7FiodlpO.js +1 -0
  39. package/build/client/_app/immutable/entry/start.7FiodlpO.js.br +1 -0
  40. package/build/client/_app/immutable/entry/start.7FiodlpO.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/{1.CAn1ptt2.js → 1.BYTQ4CJf.js} +1 -1
  42. package/build/client/_app/immutable/nodes/1.BYTQ4CJf.js.br +2 -0
  43. package/build/client/_app/immutable/nodes/1.BYTQ4CJf.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/{10.3GZpnfRU.js → 10.CHYaVWP2.js} +1 -1
  45. package/build/client/_app/immutable/nodes/10.CHYaVWP2.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/10.CHYaVWP2.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/11.DXwuRFxA.js +8 -0
  48. package/build/client/_app/immutable/nodes/11.DXwuRFxA.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/11.DXwuRFxA.js.gz +0 -0
  50. package/build/client/_app/immutable/nodes/{4.6EwsExLl.js → 4.n8OmCUUb.js} +1 -1
  51. package/build/client/_app/immutable/nodes/4.n8OmCUUb.js.br +0 -0
  52. package/build/client/_app/immutable/nodes/4.n8OmCUUb.js.gz +0 -0
  53. package/build/client/_app/immutable/nodes/{5.DLFettGd.js → 5.DgnQcqeL.js} +1 -1
  54. package/build/client/_app/immutable/nodes/5.DgnQcqeL.js.br +0 -0
  55. package/build/client/_app/immutable/nodes/5.DgnQcqeL.js.gz +0 -0
  56. package/build/client/_app/immutable/nodes/{6.inuW_1g7.js → 6.RedvZarw.js} +1 -1
  57. package/build/client/_app/immutable/nodes/6.RedvZarw.js.br +0 -0
  58. package/build/client/_app/immutable/nodes/6.RedvZarw.js.gz +0 -0
  59. package/build/client/_app/immutable/nodes/7.BqgE43w1.js +14 -0
  60. package/build/client/_app/immutable/nodes/7.BqgE43w1.js.br +0 -0
  61. package/build/client/_app/immutable/nodes/7.BqgE43w1.js.gz +0 -0
  62. package/build/client/_app/immutable/nodes/{9.CJ5rBqR8.js → 9.CQfpYNnj.js} +65 -65
  63. package/build/client/_app/immutable/nodes/9.CQfpYNnj.js.br +0 -0
  64. package/build/client/_app/immutable/nodes/9.CQfpYNnj.js.gz +0 -0
  65. package/build/client/_app/version.json +1 -1
  66. package/build/client/_app/version.json.br +1 -1
  67. package/build/client/_app/version.json.gz +0 -0
  68. package/build/server/chunks/{0-C44Ua1bY.js → 0-CxqNryz-.js} +5 -5
  69. package/build/server/chunks/{0-C44Ua1bY.js.map → 0-CxqNryz-.js.map} +1 -1
  70. package/build/server/chunks/1-Dxk_eEPL.js +9 -0
  71. package/build/server/chunks/{1-DPdXHBBi.js.map → 1-Dxk_eEPL.js.map} +1 -1
  72. package/build/server/chunks/{10-B6ZAGGzR.js → 10-DcTjX0aZ.js} +3 -3
  73. package/build/server/chunks/{10-B6ZAGGzR.js.map → 10-DcTjX0aZ.js.map} +1 -1
  74. package/build/server/chunks/11-Ddav4pvQ.js +9 -0
  75. package/build/server/chunks/11-Ddav4pvQ.js.map +1 -0
  76. package/build/server/chunks/{3-DqhvOSLm.js → 3-xtalXCwW.js} +8 -8
  77. package/build/server/chunks/{3-DqhvOSLm.js.map → 3-xtalXCwW.js.map} +1 -1
  78. package/build/server/chunks/4-CEASlyNx.js +9 -0
  79. package/build/server/chunks/{4-bICPXf8d.js.map → 4-CEASlyNx.js.map} +1 -1
  80. package/build/server/chunks/{5-pYxB3IGQ.js → 5-3gkFDIAU.js} +3 -3
  81. package/build/server/chunks/{5-pYxB3IGQ.js.map → 5-3gkFDIAU.js.map} +1 -1
  82. package/build/server/chunks/{6-2tNBfccH.js → 6-BSR29JnK.js} +3 -3
  83. package/build/server/chunks/{6-2tNBfccH.js.map → 6-BSR29JnK.js.map} +1 -1
  84. package/build/server/chunks/7-gx5m5R1u.js +9 -0
  85. package/build/server/chunks/{7-IbStFnJM.js.map → 7-gx5m5R1u.js.map} +1 -1
  86. package/build/server/chunks/{9-PfezrnbG.js → 9-BKXk6mfI.js} +7 -7
  87. package/build/server/chunks/9-BKXk6mfI.js.map +1 -0
  88. package/build/server/chunks/{ChatNavbar-f5OrMEL5.js → ChatNavbar-D2J3UbpW.js} +5 -5
  89. package/build/server/chunks/{ChatNavbar-f5OrMEL5.js.map → ChatNavbar-D2J3UbpW.js.map} +1 -1
  90. package/build/server/chunks/{IconActivity-BVrMC8FH.js → IconActivity-DrgUhxxi.js} +2 -2
  91. package/build/server/chunks/{IconActivity-BVrMC8FH.js.map → IconActivity-DrgUhxxi.js.map} +1 -1
  92. package/build/server/chunks/{IconServer-C0heXLme.js → IconServer-jRvjNs7I.js} +2 -2
  93. package/build/server/chunks/{IconServer-C0heXLme.js.map → IconServer-jRvjNs7I.js.map} +1 -1
  94. package/build/server/chunks/{_page.svelte-Cqsoa84V.js → _page.svelte--qXsMm-T.js} +23 -10
  95. package/build/server/chunks/_page.svelte--qXsMm-T.js.map +1 -0
  96. package/build/server/chunks/{_page.svelte-BgKDQB1v.js → _page.svelte-BgzOKhmH.js} +4 -4
  97. package/build/server/chunks/{_page.svelte-BgKDQB1v.js.map → _page.svelte-BgzOKhmH.js.map} +1 -1
  98. package/build/server/chunks/{_page.svelte-DpFvF_2S.js → _page.svelte-BnZ0Fgkw.js} +13 -10
  99. package/build/server/chunks/_page.svelte-BnZ0Fgkw.js.map +1 -0
  100. package/build/server/chunks/{_page.svelte-BXLl2Q4a.js → _page.svelte-C36XsgXY.js} +146 -13
  101. package/build/server/chunks/_page.svelte-C36XsgXY.js.map +1 -0
  102. package/build/server/chunks/{_page.svelte-fk6X6VPw.js → _page.svelte-Cc-OjlMF.js} +8 -8
  103. package/build/server/chunks/{_page.svelte-fk6X6VPw.js.map → _page.svelte-Cc-OjlMF.js.map} +1 -1
  104. package/build/server/chunks/{_page.svelte-DV50Zgo7.js → _page.svelte-DGQP3UIP.js} +3 -3
  105. package/build/server/chunks/{_page.svelte-DV50Zgo7.js.map → _page.svelte-DGQP3UIP.js.map} +1 -1
  106. package/build/server/chunks/{_page.svelte-MAzX_A0b.js → _page.svelte-DGsMxwfZ.js} +6 -6
  107. package/build/server/chunks/{_page.svelte-MAzX_A0b.js.map → _page.svelte-DGsMxwfZ.js.map} +1 -1
  108. package/build/server/chunks/{_server.ts-Bsxn3ZEt.js → _server.ts-0T6OWJc0.js} +8 -8
  109. package/build/server/chunks/{_server.ts-Bsxn3ZEt.js.map → _server.ts-0T6OWJc0.js.map} +1 -1
  110. package/build/server/chunks/{_server.ts-DdWIcyaa.js → _server.ts-4NsYfdU1.js} +4 -4
  111. package/build/server/chunks/{_server.ts-DdWIcyaa.js.map → _server.ts-4NsYfdU1.js.map} +1 -1
  112. package/build/server/chunks/{_server.ts-Bd15KCCI.js → _server.ts-B-9mLZog.js} +8 -8
  113. package/build/server/chunks/{_server.ts-Bd15KCCI.js.map → _server.ts-B-9mLZog.js.map} +1 -1
  114. package/build/server/chunks/{_server.ts-CPolXmaB.js → _server.ts-B3MvWwzq.js} +9 -9
  115. package/build/server/chunks/{_server.ts-CPolXmaB.js.map → _server.ts-B3MvWwzq.js.map} +1 -1
  116. package/build/server/chunks/{_server.ts-CEgqNbg2.js → _server.ts-B64JQevs.js} +13 -9
  117. package/build/server/chunks/_server.ts-B64JQevs.js.map +1 -0
  118. package/build/server/chunks/{_server.ts-CtNaQ39q.js → _server.ts-BEhHNijd.js} +8 -8
  119. package/build/server/chunks/{_server.ts-CtNaQ39q.js.map → _server.ts-BEhHNijd.js.map} +1 -1
  120. package/build/server/chunks/{_server.ts-C8Tvzew7.js → _server.ts-BJqxSP1B.js} +4 -4
  121. package/build/server/chunks/{_server.ts-C8Tvzew7.js.map → _server.ts-BJqxSP1B.js.map} +1 -1
  122. package/build/server/chunks/{_server.ts-2o4Kzn8i.js → _server.ts-BK4NRqMj.js} +9 -9
  123. package/build/server/chunks/{_server.ts-2o4Kzn8i.js.map → _server.ts-BK4NRqMj.js.map} +1 -1
  124. package/build/server/chunks/{_server.ts-DPJJQkZp.js → _server.ts-BN6ghyoO.js} +8 -8
  125. package/build/server/chunks/{_server.ts-DPJJQkZp.js.map → _server.ts-BN6ghyoO.js.map} +1 -1
  126. package/build/server/chunks/{_server.ts-Cu39Y3ON.js → _server.ts-BNoq5yoF.js} +8 -8
  127. package/build/server/chunks/{_server.ts-Cu39Y3ON.js.map → _server.ts-BNoq5yoF.js.map} +1 -1
  128. package/build/server/chunks/{_server.ts-DtY45qj6.js → _server.ts-BRvNe0fS.js} +8 -8
  129. package/build/server/chunks/{_server.ts-DtY45qj6.js.map → _server.ts-BRvNe0fS.js.map} +1 -1
  130. package/build/server/chunks/{_server.ts-C24KcaLY.js → _server.ts-BWcxJLLV.js} +8 -8
  131. package/build/server/chunks/{_server.ts-C24KcaLY.js.map → _server.ts-BWcxJLLV.js.map} +1 -1
  132. package/build/server/chunks/{_server.ts-BNnRODmS.js → _server.ts-B_c9x_NC.js} +9 -9
  133. package/build/server/chunks/{_server.ts-BNnRODmS.js.map → _server.ts-B_c9x_NC.js.map} +1 -1
  134. package/build/server/chunks/{_server.ts-CyHlj4Xc.js → _server.ts-BbyfVT-W.js} +8 -8
  135. package/build/server/chunks/{_server.ts-CyHlj4Xc.js.map → _server.ts-BbyfVT-W.js.map} +1 -1
  136. package/build/server/chunks/{_server.ts-CpwGXL04.js → _server.ts-Bl1EtTKF.js} +8 -8
  137. package/build/server/chunks/{_server.ts-CpwGXL04.js.map → _server.ts-Bl1EtTKF.js.map} +1 -1
  138. package/build/server/chunks/{_server.ts-BlCDDGQe.js → _server.ts-Bm2nv-W4.js} +8 -8
  139. package/build/server/chunks/{_server.ts-BlCDDGQe.js.map → _server.ts-Bm2nv-W4.js.map} +1 -1
  140. package/build/server/chunks/{_server.ts-WTL-RZDk.js → _server.ts-BrwSj7L5.js} +8 -8
  141. package/build/server/chunks/{_server.ts-WTL-RZDk.js.map → _server.ts-BrwSj7L5.js.map} +1 -1
  142. package/build/server/chunks/{_server.ts-C17zuPHB.js → _server.ts-BuGFzejC.js} +8 -8
  143. package/build/server/chunks/{_server.ts-C17zuPHB.js.map → _server.ts-BuGFzejC.js.map} +1 -1
  144. package/build/server/chunks/{_server.ts-RjE7mkg4.js → _server.ts-BvOQbLFG.js} +8 -8
  145. package/build/server/chunks/{_server.ts-RjE7mkg4.js.map → _server.ts-BvOQbLFG.js.map} +1 -1
  146. package/build/server/chunks/{_server.ts-BiGuckTs.js → _server.ts-Bvb6lo7O.js} +10 -10
  147. package/build/server/chunks/{_server.ts-BiGuckTs.js.map → _server.ts-Bvb6lo7O.js.map} +1 -1
  148. package/build/server/chunks/{_server.ts-CA37rdjz.js → _server.ts-C0rcwOPL.js} +19 -12
  149. package/build/server/chunks/_server.ts-C0rcwOPL.js.map +1 -0
  150. package/build/server/chunks/{_server.ts-BageNPqU.js → _server.ts-C2qIUpva.js} +9 -9
  151. package/build/server/chunks/{_server.ts-BageNPqU.js.map → _server.ts-C2qIUpva.js.map} +1 -1
  152. package/build/server/chunks/{_server.ts-DsRKY-Kc.js → _server.ts-C31rtz7B.js} +8 -8
  153. package/build/server/chunks/{_server.ts-DsRKY-Kc.js.map → _server.ts-C31rtz7B.js.map} +1 -1
  154. package/build/server/chunks/{_server.ts-ukIYk-_Z.js → _server.ts-C6GZY_v3.js} +8 -8
  155. package/build/server/chunks/{_server.ts-ukIYk-_Z.js.map → _server.ts-C6GZY_v3.js.map} +1 -1
  156. package/build/server/chunks/{_server.ts-DxbCMYot.js → _server.ts-C6r0d7SR.js} +8 -8
  157. package/build/server/chunks/{_server.ts-DxbCMYot.js.map → _server.ts-C6r0d7SR.js.map} +1 -1
  158. package/build/server/chunks/{_server.ts-ByVaX_Hp.js → _server.ts-C900vqOm.js} +8 -8
  159. package/build/server/chunks/{_server.ts-ByVaX_Hp.js.map → _server.ts-C900vqOm.js.map} +1 -1
  160. package/build/server/chunks/{_server.ts-BunhH3W1.js → _server.ts-CCdP5Eqx.js} +8 -8
  161. package/build/server/chunks/{_server.ts-BunhH3W1.js.map → _server.ts-CCdP5Eqx.js.map} +1 -1
  162. package/build/server/chunks/{_server.ts-CZ-P41xW.js → _server.ts-CDJ7WouZ.js} +8 -8
  163. package/build/server/chunks/{_server.ts-CZ-P41xW.js.map → _server.ts-CDJ7WouZ.js.map} +1 -1
  164. package/build/server/chunks/{_server.ts-C-VVdGFH.js → _server.ts-CFNNoZVF.js} +8 -8
  165. package/build/server/chunks/{_server.ts-C-VVdGFH.js.map → _server.ts-CFNNoZVF.js.map} +1 -1
  166. package/build/server/chunks/{_server.ts-BM6hefLc.js → _server.ts-CGE7AyDg.js} +8 -8
  167. package/build/server/chunks/{_server.ts-BM6hefLc.js.map → _server.ts-CGE7AyDg.js.map} +1 -1
  168. package/build/server/chunks/{_server.ts-DcZIXa7_.js → _server.ts-CGggA6h4.js} +8 -8
  169. package/build/server/chunks/{_server.ts-DcZIXa7_.js.map → _server.ts-CGggA6h4.js.map} +1 -1
  170. package/build/server/chunks/{_server.ts-DQFO2xa9.js → _server.ts-CIReEz3d.js} +8 -8
  171. package/build/server/chunks/{_server.ts-DQFO2xa9.js.map → _server.ts-CIReEz3d.js.map} +1 -1
  172. package/build/server/chunks/{_server.ts-BQzhAVgc.js → _server.ts-CMO7LL0e.js} +4 -4
  173. package/build/server/chunks/{_server.ts-BQzhAVgc.js.map → _server.ts-CMO7LL0e.js.map} +1 -1
  174. package/build/server/chunks/{_server.ts-CcFK2dxk.js → _server.ts-CPYtZ7sE.js} +16 -10
  175. package/build/server/chunks/_server.ts-CPYtZ7sE.js.map +1 -0
  176. package/build/server/chunks/{_server.ts-G80g1-Vi.js → _server.ts-CR85H0KR.js} +8 -8
  177. package/build/server/chunks/{_server.ts-G80g1-Vi.js.map → _server.ts-CR85H0KR.js.map} +1 -1
  178. package/build/server/chunks/{_server.ts-Dr7DPWfx.js → _server.ts-CRvbt_Ny.js} +9 -9
  179. package/build/server/chunks/{_server.ts-Dr7DPWfx.js.map → _server.ts-CRvbt_Ny.js.map} +1 -1
  180. package/build/server/chunks/{_server.ts-BNQHTPJK.js → _server.ts-CS8n28qm.js} +8 -8
  181. package/build/server/chunks/{_server.ts-BNQHTPJK.js.map → _server.ts-CS8n28qm.js.map} +1 -1
  182. package/build/server/chunks/{_server.ts-CydVYzX1.js → _server.ts-CWYonOeQ.js} +8 -8
  183. package/build/server/chunks/{_server.ts-CydVYzX1.js.map → _server.ts-CWYonOeQ.js.map} +1 -1
  184. package/build/server/chunks/{_server.ts-DkWPvbVT.js → _server.ts-CZ83fA4I.js} +8 -8
  185. package/build/server/chunks/{_server.ts-DkWPvbVT.js.map → _server.ts-CZ83fA4I.js.map} +1 -1
  186. package/build/server/chunks/{_server.ts-B-6OFzv-.js → _server.ts-Cfm_KDhO.js} +9 -9
  187. package/build/server/chunks/{_server.ts-B-6OFzv-.js.map → _server.ts-Cfm_KDhO.js.map} +1 -1
  188. package/build/server/chunks/{_server.ts-DzO2o8u_.js → _server.ts-CiBxLSg4.js} +8 -8
  189. package/build/server/chunks/{_server.ts-DzO2o8u_.js.map → _server.ts-CiBxLSg4.js.map} +1 -1
  190. package/build/server/chunks/{_server.ts-CrUHXfa7.js → _server.ts-ClrrzZI6.js} +8 -8
  191. package/build/server/chunks/{_server.ts-CrUHXfa7.js.map → _server.ts-ClrrzZI6.js.map} +1 -1
  192. package/build/server/chunks/{_server.ts-6-piDAMf.js → _server.ts-Cm3uzCwu.js} +16 -10
  193. package/build/server/chunks/_server.ts-Cm3uzCwu.js.map +1 -0
  194. package/build/server/chunks/{_server.ts-DiY7qGzB.js → _server.ts-Co4yATq8.js} +4 -4
  195. package/build/server/chunks/{_server.ts-DiY7qGzB.js.map → _server.ts-Co4yATq8.js.map} +1 -1
  196. package/build/server/chunks/{_server.ts-YQAFFkYo.js → _server.ts-CqX61boo.js} +9 -9
  197. package/build/server/chunks/{_server.ts-YQAFFkYo.js.map → _server.ts-CqX61boo.js.map} +1 -1
  198. package/build/server/chunks/{_server.ts-DprY8V8n.js → _server.ts-CsP1RzbQ.js} +8 -8
  199. package/build/server/chunks/{_server.ts-DprY8V8n.js.map → _server.ts-CsP1RzbQ.js.map} +1 -1
  200. package/build/server/chunks/{_server.ts-BBxdJ3b2.js → _server.ts-CtcAZ3lM.js} +9 -9
  201. package/build/server/chunks/{_server.ts-BBxdJ3b2.js.map → _server.ts-CtcAZ3lM.js.map} +1 -1
  202. package/build/server/chunks/{_server.ts-ChK8wuma.js → _server.ts-D-Vv5Qkp.js} +8 -8
  203. package/build/server/chunks/{_server.ts-ChK8wuma.js.map → _server.ts-D-Vv5Qkp.js.map} +1 -1
  204. package/build/server/chunks/{_server.ts-BQyuBKbf.js → _server.ts-D0EyuOqv.js} +8 -8
  205. package/build/server/chunks/{_server.ts-BQyuBKbf.js.map → _server.ts-D0EyuOqv.js.map} +1 -1
  206. package/build/server/chunks/{_server.ts-BwMkzx-i.js → _server.ts-D2-CHx_d.js} +9 -9
  207. package/build/server/chunks/{_server.ts-BwMkzx-i.js.map → _server.ts-D2-CHx_d.js.map} +1 -1
  208. package/build/server/chunks/{_server.ts-TecIejZG.js → _server.ts-D3skirMd.js} +9 -9
  209. package/build/server/chunks/{_server.ts-TecIejZG.js.map → _server.ts-D3skirMd.js.map} +1 -1
  210. package/build/server/chunks/{_server.ts-BTey3b5e.js → _server.ts-D5Xa36tp.js} +8 -8
  211. package/build/server/chunks/{_server.ts-BTey3b5e.js.map → _server.ts-D5Xa36tp.js.map} +1 -1
  212. package/build/server/chunks/{_server.ts-DmuQV3XR.js → _server.ts-D8iJaYan.js} +6 -6
  213. package/build/server/chunks/{_server.ts-DmuQV3XR.js.map → _server.ts-D8iJaYan.js.map} +1 -1
  214. package/build/server/chunks/{_server.ts-DDweV2eg.js → _server.ts-DD4ouya8.js} +8 -8
  215. package/build/server/chunks/{_server.ts-DDweV2eg.js.map → _server.ts-DD4ouya8.js.map} +1 -1
  216. package/build/server/chunks/{_server.ts-DhZ0i-VZ.js → _server.ts-DHjMyNwJ.js} +9 -9
  217. package/build/server/chunks/{_server.ts-DhZ0i-VZ.js.map → _server.ts-DHjMyNwJ.js.map} +1 -1
  218. package/build/server/chunks/{_server.ts-BJ27moeF.js → _server.ts-DM8N7von.js} +8 -8
  219. package/build/server/chunks/{_server.ts-BJ27moeF.js.map → _server.ts-DM8N7von.js.map} +1 -1
  220. package/build/server/chunks/{_server.ts-Cc6blM9a.js → _server.ts-DNVQMHzn.js} +8 -8
  221. package/build/server/chunks/{_server.ts-Cc6blM9a.js.map → _server.ts-DNVQMHzn.js.map} +1 -1
  222. package/build/server/chunks/{_server.ts-BtlVh8sp.js → _server.ts-DObIzyoT.js} +5 -5
  223. package/build/server/chunks/{_server.ts-BtlVh8sp.js.map → _server.ts-DObIzyoT.js.map} +1 -1
  224. package/build/server/chunks/{_server.ts-BB6y3ZlT.js → _server.ts-DPfGAMG4.js} +8 -8
  225. package/build/server/chunks/{_server.ts-BB6y3ZlT.js.map → _server.ts-DPfGAMG4.js.map} +1 -1
  226. package/build/server/chunks/{_server.ts-CpMO1w5D.js → _server.ts-D_93w1gb.js} +10 -10
  227. package/build/server/chunks/{_server.ts-CpMO1w5D.js.map → _server.ts-D_93w1gb.js.map} +1 -1
  228. package/build/server/chunks/{_server.ts-DFq2AVjG.js → _server.ts-DebCCwjH.js} +9 -9
  229. package/build/server/chunks/_server.ts-DebCCwjH.js.map +1 -0
  230. package/build/server/chunks/_server.ts-DjAGbGD-.js +964 -0
  231. package/build/server/chunks/_server.ts-DjAGbGD-.js.map +1 -0
  232. package/build/server/chunks/{_server.ts-CF6j3bbg.js → _server.ts-DmNziNap.js} +9 -9
  233. package/build/server/chunks/{_server.ts-CF6j3bbg.js.map → _server.ts-DmNziNap.js.map} +1 -1
  234. package/build/server/chunks/{_server.ts-ClJrWUgt.js → _server.ts-DrxBKPKB.js} +4 -4
  235. package/build/server/chunks/{_server.ts-ClJrWUgt.js.map → _server.ts-DrxBKPKB.js.map} +1 -1
  236. package/build/server/chunks/{_server.ts-s_DZwJLK.js → _server.ts-DuOVzmV5.js} +8 -8
  237. package/build/server/chunks/{_server.ts-s_DZwJLK.js.map → _server.ts-DuOVzmV5.js.map} +1 -1
  238. package/build/server/chunks/{_server.ts-CMi1odxU.js → _server.ts-Ey4BEvRd.js} +9 -9
  239. package/build/server/chunks/{_server.ts-CMi1odxU.js.map → _server.ts-Ey4BEvRd.js.map} +1 -1
  240. package/build/server/chunks/{_server.ts-CyiErd_B.js → _server.ts-KHK30kUK.js} +11 -11
  241. package/build/server/chunks/{_server.ts-CyiErd_B.js.map → _server.ts-KHK30kUK.js.map} +1 -1
  242. package/build/server/chunks/{_server.ts-CfB1cDLU.js → _server.ts-Kp3wrrbF.js} +9 -9
  243. package/build/server/chunks/{_server.ts-CfB1cDLU.js.map → _server.ts-Kp3wrrbF.js.map} +1 -1
  244. package/build/server/chunks/{_server.ts-DcBrsY-a.js → _server.ts-LHKCcBS1.js} +12 -10
  245. package/build/server/chunks/_server.ts-LHKCcBS1.js.map +1 -0
  246. package/build/server/chunks/{_server.ts-6BViNoJ6.js → _server.ts-MZYYoM8z.js} +8 -8
  247. package/build/server/chunks/{_server.ts-6BViNoJ6.js.map → _server.ts-MZYYoM8z.js.map} +1 -1
  248. package/build/server/chunks/{_server.ts-Bx0tx6Hd.js → _server.ts-QSEYZqU0.js} +11 -9
  249. package/build/server/chunks/_server.ts-QSEYZqU0.js.map +1 -0
  250. package/build/server/chunks/{_server.ts-Czl57SUr.js → _server.ts-Sx6mXrwK.js} +8 -8
  251. package/build/server/chunks/{_server.ts-Czl57SUr.js.map → _server.ts-Sx6mXrwK.js.map} +1 -1
  252. package/build/server/chunks/{_server.ts-CBv61dGN.js → _server.ts-SxcH-cms.js} +9 -9
  253. package/build/server/chunks/{_server.ts-CBv61dGN.js.map → _server.ts-SxcH-cms.js.map} +1 -1
  254. package/build/server/chunks/{_server.ts-opJkoWRS.js → _server.ts-TTSjZaYY.js} +8 -8
  255. package/build/server/chunks/{_server.ts-opJkoWRS.js.map → _server.ts-TTSjZaYY.js.map} +1 -1
  256. package/build/server/chunks/{_server.ts-BcsSKsVE.js → _server.ts-V6a8P9IB.js} +8 -8
  257. package/build/server/chunks/{_server.ts-BcsSKsVE.js.map → _server.ts-V6a8P9IB.js.map} +1 -1
  258. package/build/server/chunks/{_server.ts-CFlF9O0n.js → _server.ts-XEVuthfs.js} +8 -8
  259. package/build/server/chunks/{_server.ts-CFlF9O0n.js.map → _server.ts-XEVuthfs.js.map} +1 -1
  260. package/build/server/chunks/{_server.ts-DYS4PknE.js → _server.ts-eF4CAfpP.js} +8 -8
  261. package/build/server/chunks/{_server.ts-DYS4PknE.js.map → _server.ts-eF4CAfpP.js.map} +1 -1
  262. package/build/server/chunks/{_server.ts-B2iTN8SC.js → _server.ts-eov7yZvT.js} +10 -10
  263. package/build/server/chunks/{_server.ts-B2iTN8SC.js.map → _server.ts-eov7yZvT.js.map} +1 -1
  264. package/build/server/chunks/{_server.ts-vXf4p_i0.js → _server.ts-jB_3zRrF.js} +9 -9
  265. package/build/server/chunks/{_server.ts-vXf4p_i0.js.map → _server.ts-jB_3zRrF.js.map} +1 -1
  266. package/build/server/chunks/{_server.ts-SqpxZ5hM.js → _server.ts-p16c9Uzl.js} +8 -8
  267. package/build/server/chunks/{_server.ts-SqpxZ5hM.js.map → _server.ts-p16c9Uzl.js.map} +1 -1
  268. package/build/server/chunks/{_server.ts-CyMs8VXZ.js → _server.ts-p4v6noBK.js} +6 -6
  269. package/build/server/chunks/{_server.ts-CyMs8VXZ.js.map → _server.ts-p4v6noBK.js.map} +1 -1
  270. package/build/server/chunks/{_server.ts-BWeAmxEz.js → _server.ts-qgPpNGL8.js} +8 -8
  271. package/build/server/chunks/{_server.ts-BWeAmxEz.js.map → _server.ts-qgPpNGL8.js.map} +1 -1
  272. package/build/server/chunks/{_server.ts-D7I9KZ4H.js → _server.ts-sdkTYy6A.js} +8 -8
  273. package/build/server/chunks/{_server.ts-D7I9KZ4H.js.map → _server.ts-sdkTYy6A.js.map} +1 -1
  274. package/build/server/chunks/{_server.ts-UMlNzGum.js → _server.ts-st_pTUHI.js} +8 -8
  275. package/build/server/chunks/{_server.ts-UMlNzGum.js.map → _server.ts-st_pTUHI.js.map} +1 -1
  276. package/build/server/chunks/{_server.ts-CM8lR2Jk.js → _server.ts-yWyCj-R5.js} +8 -8
  277. package/build/server/chunks/{_server.ts-CM8lR2Jk.js.map → _server.ts-yWyCj-R5.js.map} +1 -1
  278. package/build/server/chunks/{_server.ts-ZkptKFXP.js → _server.ts-zDEENUSw.js} +8 -8
  279. package/build/server/chunks/{_server.ts-ZkptKFXP.js.map → _server.ts-zDEENUSw.js.map} +1 -1
  280. package/build/server/chunks/{addon-helpers-CEjIrSBN.js → addon-helpers-TpOYibOg.js} +3 -3
  281. package/build/server/chunks/{addon-helpers-CEjIrSBN.js.map → addon-helpers-TpOYibOg.js.map} +1 -1
  282. package/build/server/chunks/{akm-rRfSaKvH.js → akm-Bvt9WaTk.js} +3 -3
  283. package/build/server/chunks/{akm-rRfSaKvH.js.map → akm-Bvt9WaTk.js.map} +1 -1
  284. package/build/server/chunks/{catalog-DMG_Bwji.js → catalog-w0L1ZRPK.js} +5 -5
  285. package/build/server/chunks/{catalog-DMG_Bwji.js.map → catalog-w0L1ZRPK.js.map} +1 -1
  286. package/build/server/chunks/chunk-DOvWTNp_.js +37 -0
  287. package/build/server/chunks/chunk-DOvWTNp_.js.map +1 -0
  288. package/build/server/chunks/{client-BvFq2PRx.js → client-ClRLlB_c.js} +3 -3
  289. package/build/server/chunks/{client-BvFq2PRx.js.map → client-ClRLlB_c.js.map} +1 -1
  290. package/build/server/chunks/{compose-args2-C39WGM9r.js → compose-args2-DiDeQtPu.js} +4 -4
  291. package/build/server/chunks/compose-args2-DiDeQtPu.js.map +1 -0
  292. package/build/server/chunks/{config-BndRz7Yl.js → config-Jiy06DlE.js} +2 -2
  293. package/build/server/chunks/{config-BndRz7Yl.js.map → config-Jiy06DlE.js.map} +1 -1
  294. package/build/server/chunks/{connections-api-BvJpsZBj.js → connections-api-J-nrQ1KK.js} +2 -2
  295. package/build/server/chunks/{connections-api-BvJpsZBj.js.map → connections-api-J-nrQ1KK.js.map} +1 -1
  296. package/build/server/chunks/{constants-B7J5DDaI.js → constants-1vPYIIwP.js} +2 -2
  297. package/build/server/chunks/{constants-B7J5DDaI.js.map → constants-1vPYIIwP.js.map} +1 -1
  298. package/build/server/chunks/{docker2-Ba2Whd9Y.js → docker2-oBEn_Si9.js} +4 -4
  299. package/build/server/chunks/docker2-oBEn_Si9.js.map +1 -0
  300. package/build/server/chunks/{docker3-DhaO_Pxj.js → docker3-Dn-Mm2cT.js} +2 -2
  301. package/build/server/chunks/{docker3-DhaO_Pxj.js.map → docker3-Dn-Mm2cT.js.map} +1 -1
  302. package/build/server/chunks/{endpoints-CuL8lAcu.js → endpoints-WTxemTcn.js} +87 -12
  303. package/build/server/chunks/endpoints-WTxemTcn.js.map +1 -0
  304. package/build/server/chunks/environment-BYp8JQYM.js.map +1 -1
  305. package/build/server/chunks/{error.svelte-C8Qx6FF6.js → error.svelte-C2CWdm9K.js} +5 -5
  306. package/build/server/chunks/{error.svelte-C8Qx6FF6.js.map → error.svelte-C2CWdm9K.js.map} +1 -1
  307. package/build/server/chunks/{features-WsEodW5F.js → features-BE2x1a_a.js} +5 -3
  308. package/build/server/chunks/features-BE2x1a_a.js.map +1 -0
  309. package/build/server/chunks/{helpers-XmKveZFr.js → helpers-CfpNg3il.js} +15 -10
  310. package/build/server/chunks/helpers-CfpNg3il.js.map +1 -0
  311. package/build/server/chunks/{hooks.server-o4bkPFRD.js → hooks.server-DEVjSu3V.js} +18 -22
  312. package/build/server/chunks/hooks.server-DEVjSu3V.js.map +1 -0
  313. package/build/server/chunks/{http-CL5QncYd.js → http-WP5cji9-.js} +3 -6
  314. package/build/server/chunks/http-WP5cji9-.js.map +1 -0
  315. package/build/server/chunks/{internal-D66tKQSe.js → internal-D9Kp0SbJ.js} +3 -3
  316. package/build/server/chunks/{internal-D66tKQSe.js.map → internal-D9Kp0SbJ.js.map} +1 -1
  317. package/build/server/chunks/{landing-DvVXSE_x.js → landing-DKXNel0Q.js} +5 -5
  318. package/build/server/chunks/{landing-DvVXSE_x.js.map → landing-DKXNel0Q.js.map} +1 -1
  319. package/build/server/chunks/network-preset-CJ1RRnki.js +431 -0
  320. package/build/server/chunks/network-preset-CJ1RRnki.js.map +1 -0
  321. package/build/server/chunks/{paths-BpdOajoE.js → paths-DRVrMQrI.js} +2 -2
  322. package/build/server/chunks/{paths-BpdOajoE.js.map → paths-DRVrMQrI.js.map} +1 -1
  323. package/build/server/chunks/{session-cookie-B0Fc-L8S.js → session-cookie-CDynAOx3.js} +2 -2
  324. package/build/server/chunks/{session-cookie-B0Fc-L8S.js.map → session-cookie-CDynAOx3.js.map} +1 -1
  325. package/build/server/chunks/{setup-deploy-BjJIt1Gf.js → setup-deploy-CRW2KpZR.js} +2 -2
  326. package/build/server/chunks/{setup-deploy-BjJIt1Gf.js.map → setup-deploy-CRW2KpZR.js.map} +1 -1
  327. package/build/server/chunks/{src-i2v6xhSC.js → src-CQ2F7hgb.js} +2621 -157
  328. package/build/server/chunks/src-CQ2F7hgb.js.map +1 -0
  329. package/build/server/chunks/{state-fVG29xFj.js → state-CsIDHNPN.js} +2 -2
  330. package/build/server/chunks/{state-fVG29xFj.js.map → state-CsIDHNPN.js.map} +1 -1
  331. package/build/server/chunks/{state2-Dl7-d1h_.js → state2-jnbE3tAu.js} +2 -2
  332. package/build/server/chunks/{state2-Dl7-d1h_.js.map → state2-jnbE3tAu.js.map} +1 -1
  333. package/build/server/index.js +2 -2
  334. package/build/server/manifest.js +103 -96
  335. package/build/server/manifest.js.map +1 -1
  336. package/package.json +4 -3
  337. package/build/client/_app/immutable/assets/11.BF9IcRAW.css.br +0 -0
  338. package/build/client/_app/immutable/assets/11.BF9IcRAW.css.gz +0 -0
  339. package/build/client/_app/immutable/assets/7.CEu3B1cr.css +0 -1
  340. package/build/client/_app/immutable/assets/7.CEu3B1cr.css.br +0 -0
  341. package/build/client/_app/immutable/assets/7.CEu3B1cr.css.gz +0 -0
  342. package/build/client/_app/immutable/assets/9.vqGkbIg9.css.br +0 -0
  343. package/build/client/_app/immutable/chunks/BApqEZP1.js.br +0 -0
  344. package/build/client/_app/immutable/chunks/BApqEZP1.js.gz +0 -0
  345. package/build/client/_app/immutable/chunks/B_jhBV5Z.js +0 -5
  346. package/build/client/_app/immutable/chunks/B_jhBV5Z.js.br +0 -0
  347. package/build/client/_app/immutable/chunks/B_jhBV5Z.js.gz +0 -0
  348. package/build/client/_app/immutable/chunks/C3ad4Ajc.js +0 -1
  349. package/build/client/_app/immutable/chunks/C3ad4Ajc.js.br +0 -2
  350. package/build/client/_app/immutable/chunks/C3ad4Ajc.js.gz +0 -0
  351. package/build/client/_app/immutable/chunks/CItB5oU8.js +0 -3
  352. package/build/client/_app/immutable/chunks/CItB5oU8.js.br +0 -0
  353. package/build/client/_app/immutable/chunks/CItB5oU8.js.gz +0 -0
  354. package/build/client/_app/immutable/chunks/DuFsBiCS.js.br +0 -0
  355. package/build/client/_app/immutable/chunks/DuFsBiCS.js.gz +0 -0
  356. package/build/client/_app/immutable/chunks/Gis7OmMK.js.br +0 -0
  357. package/build/client/_app/immutable/chunks/Gis7OmMK.js.gz +0 -0
  358. package/build/client/_app/immutable/chunks/S17SDfo_.js.br +0 -0
  359. package/build/client/_app/immutable/chunks/S17SDfo_.js.gz +0 -0
  360. package/build/client/_app/immutable/entry/app.C4X372ym.js.br +0 -0
  361. package/build/client/_app/immutable/entry/app.C4X372ym.js.gz +0 -0
  362. package/build/client/_app/immutable/entry/start.ggMsTuLf.js +0 -1
  363. package/build/client/_app/immutable/entry/start.ggMsTuLf.js.br +0 -0
  364. package/build/client/_app/immutable/entry/start.ggMsTuLf.js.gz +0 -0
  365. package/build/client/_app/immutable/nodes/1.CAn1ptt2.js.br +0 -1
  366. package/build/client/_app/immutable/nodes/1.CAn1ptt2.js.gz +0 -0
  367. package/build/client/_app/immutable/nodes/10.3GZpnfRU.js.br +0 -0
  368. package/build/client/_app/immutable/nodes/10.3GZpnfRU.js.gz +0 -0
  369. package/build/client/_app/immutable/nodes/11.D1-UoUiI.js +0 -6
  370. package/build/client/_app/immutable/nodes/11.D1-UoUiI.js.br +0 -0
  371. package/build/client/_app/immutable/nodes/11.D1-UoUiI.js.gz +0 -0
  372. package/build/client/_app/immutable/nodes/4.6EwsExLl.js.br +0 -0
  373. package/build/client/_app/immutable/nodes/4.6EwsExLl.js.gz +0 -0
  374. package/build/client/_app/immutable/nodes/5.DLFettGd.js.br +0 -0
  375. package/build/client/_app/immutable/nodes/5.DLFettGd.js.gz +0 -0
  376. package/build/client/_app/immutable/nodes/6.inuW_1g7.js.br +0 -0
  377. package/build/client/_app/immutable/nodes/6.inuW_1g7.js.gz +0 -0
  378. package/build/client/_app/immutable/nodes/7.Dc4BVu5u.js +0 -4
  379. package/build/client/_app/immutable/nodes/7.Dc4BVu5u.js.br +0 -0
  380. package/build/client/_app/immutable/nodes/7.Dc4BVu5u.js.gz +0 -0
  381. package/build/client/_app/immutable/nodes/9.CJ5rBqR8.js.br +0 -0
  382. package/build/client/_app/immutable/nodes/9.CJ5rBqR8.js.gz +0 -0
  383. package/build/server/chunks/1-DPdXHBBi.js +0 -9
  384. package/build/server/chunks/11-Bi4ih8mU.js +0 -9
  385. package/build/server/chunks/11-Bi4ih8mU.js.map +0 -1
  386. package/build/server/chunks/4-bICPXf8d.js +0 -9
  387. package/build/server/chunks/7-IbStFnJM.js +0 -9
  388. package/build/server/chunks/9-PfezrnbG.js.map +0 -1
  389. package/build/server/chunks/_page.svelte-BXLl2Q4a.js.map +0 -1
  390. package/build/server/chunks/_page.svelte-Cqsoa84V.js.map +0 -1
  391. package/build/server/chunks/_page.svelte-DpFvF_2S.js.map +0 -1
  392. package/build/server/chunks/_server.ts-6-piDAMf.js.map +0 -1
  393. package/build/server/chunks/_server.ts-Bx0tx6Hd.js.map +0 -1
  394. package/build/server/chunks/_server.ts-CA37rdjz.js.map +0 -1
  395. package/build/server/chunks/_server.ts-CEgqNbg2.js.map +0 -1
  396. package/build/server/chunks/_server.ts-CcFK2dxk.js.map +0 -1
  397. package/build/server/chunks/_server.ts-DFq2AVjG.js.map +0 -1
  398. package/build/server/chunks/_server.ts-DcBrsY-a.js.map +0 -1
  399. package/build/server/chunks/chunk-CLZ62Ad-.js +0 -18
  400. package/build/server/chunks/chunk-CLZ62Ad-.js.map +0 -1
  401. package/build/server/chunks/compose-args2-C39WGM9r.js.map +0 -1
  402. package/build/server/chunks/docker2-Ba2Whd9Y.js.map +0 -1
  403. package/build/server/chunks/endpoints-CuL8lAcu.js.map +0 -1
  404. package/build/server/chunks/features-WsEodW5F.js.map +0 -1
  405. package/build/server/chunks/helpers-XmKveZFr.js.map +0 -1
  406. package/build/server/chunks/hooks.server-o4bkPFRD.js.map +0 -1
  407. package/build/server/chunks/http-CL5QncYd.js.map +0 -1
  408. package/build/server/chunks/provider-constants-1s1k8kbj.js +0 -68
  409. package/build/server/chunks/provider-constants-1s1k8kbj.js.map +0 -1
  410. package/build/server/chunks/src-i2v6xhSC.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"landing-DvVXSE_x.js","sources":["../../../.svelte-kit/adapter-node/chunks/landing.js"],"sourcesContent":["import { t as buildComposeOptions } from \"./compose-args.js\";\nimport { m as composePs } from \"./docker.js\";\nimport { F as classifyLocalInstall, I as deriveLaunchStatus, L as deriveLocalStackState, R as detectRuntime } from \"./src.js\";\nimport { t as getState } from \"./state.js\";\nimport { a as listRemoteStatuses } from \"./endpoints.js\";\nimport { t as computeServerRuntimeContext } from \"./features.js\";\nimport { i as resolveCapabilities } from \"./runtime-context.svelte.js\";\n//#region src/lib/resolve-landing.ts\n/**\n* Where the host admin surface lives. Phase 4 moved it from /admin to /host\n* (/admin/* is a dead namespace — router 404, no alias).\n*/\nvar HOST_ADMIN_LANDING = \"/host\";\n/**\n* The blocking-migration landing surface.\n*\n* K4 (review 2026-07-11): callers that need to know whether a resolved\n* landing is BLOCKING (usage routes must not bypass it) must check\n* membership in BLOCKING_LANDINGS below — never string-compare against this\n* literal directly. Blocking-ness is a property of the landing STATE, not a\n* magic string duplicated at each call site; encoding it only as a literal\n* comparison means a future second blocking landing would return a new\n* string and every literal-match call site would silently keep exempting\n* usage routes from it.\n*/\nvar HOST_ATTENTION_LANDING = \"/attention\";\n/**\n* Landings that block the usage routes (/chat, /advanced, /connections)\n* from bypassing the launch-routing redirect (hooks.server.ts). Today only\n* HOST_ATTENTION_LANDING is blocking; adding a future second blocking\n* landing means adding it here — the usage-route gate then covers it\n* automatically, with no call-site changes required.\n*/\nvar BLOCKING_LANDINGS = new Set([HOST_ATTENTION_LANDING]);\n/** Resolve the landing path for a session (plan §6.5). Pure — no I/O, no\n* global state; the gate is CAPABILITY-driven, not hostMode-driven. */\nfunction resolveLanding(ctx, state) {\n\tif (ctx.effectiveCapabilities.includes(\"host:setup\")) {\n\t\tif (state.migration.status === \"pending\") return HOST_ATTENTION_LANDING;\n\t\tif (state.local.state === \"not_installed\") return state.connections.length === 0 ? \"/setup\" : \"/chat\";\n\t\tif (state.local.state === \"setup_incomplete\") return \"/setup\";\n\t\tif (state.local.state === \"installed_offline\") return HOST_ADMIN_LANDING;\n\t\tif (state.local.state === \"installed_broken\") return `${HOST_ADMIN_LANDING}?tab=diagnostics`;\n\t\treturn \"/chat\";\n\t}\n\tif (ctx.hostMode === \"assistant-container\") return \"/chat\";\n\tif (ctx.hostMode === \"pwa-static\") return state.connections.length === 0 ? \"/connections/new\" : \"/chat\";\n\treturn \"/chat\";\n}\n//#endregion\n//#region src/lib/server/landing.ts\nvar launchRoutingCache = null;\nvar installStateCache = null;\n/** Test-only: clear the 5s launch-routing cache so each test resolves fresh. */\nfunction _resetLaunchCache() {\n\tlaunchRoutingCache = null;\n\tinstallStateCache = null;\n}\n/**\n* classifyLocalInstall, cached for 5s (K3). Shared by hooks.server.ts's\n* setup guard and resolveLaunchRouting() below, so a request that touches\n* both call sites only classifies the install once.\n*/\nfunction getCachedLocalInstallState(stackDir, homeDir) {\n\tif (installStateCache && installStateCache.expiresAt > Date.now()) return installStateCache.value;\n\tconst value = classifyLocalInstall(stackDir, homeDir);\n\tinstallStateCache = {\n\t\tvalue,\n\t\texpiresAt: Date.now() + 5e3\n\t};\n\treturn value;\n}\nfunction parseComposePsServices(stdout) {\n\tconst services = [];\n\tfor (const line of stdout.split(\"\\n\")) {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) continue;\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(trimmed);\n\t\t\tservices.push({\n\t\t\t\tservice: String(parsed.Service ?? parsed.Name ?? \"\"),\n\t\t\t\tstate: String(parsed.State ?? \"\"),\n\t\t\t\thealth: String(parsed.Health ?? \"\")\n\t\t\t});\n\t\t} catch {}\n\t}\n\treturn services;\n}\nasync function resolveLaunchRouting() {\n\tif (launchRoutingCache && launchRoutingCache.expiresAt > Date.now()) return launchRoutingCache.value;\n\tconst state = getState();\n\tconst installState = getCachedLocalInstallState(state.stackDir, state.homeDir);\n\tconst composeResult = await composePs(buildComposeOptions(state));\n\tconst value = {\n\t\tinstallState,\n\t\tlaunch: deriveLaunchStatus({\n\t\t\tlocal: {\n\t\t\t\tstate: deriveLocalStackState(installState, composeResult.ok ? parseComposePsServices(composeResult.stdout) : []),\n\t\t\t\truntime: installState === \"not_installed\" ? await detectRuntime() : void 0,\n\t\t\t\tdetail: { installState }\n\t\t\t},\n\t\t\tremotes: await listRemoteStatuses()\n\t\t})\n\t};\n\tlaunchRoutingCache = {\n\t\tvalue,\n\t\texpiresAt: Date.now() + 5e3\n\t};\n\treturn value;\n}\n/**\n* Resolve the landing path for a request via resolveLanding() (plan §6.5).\n* May return a path with a query string (e.g. '/host?tab=diagnostics').\n*/\nasync function resolveRequestLanding(event) {\n\tconst serverCtx = computeServerRuntimeContext(event);\n\tconst clientContext = { displayMode: \"browser\" };\n\tconst ctx = {\n\t\t...serverCtx,\n\t\tclientContext,\n\t\teffectiveCapabilities: resolveCapabilities(serverCtx.serverCapabilities, clientContext)\n\t};\n\tconst { installState, launch } = await resolveLaunchRouting();\n\tconst localState = installState === \"setup_incomplete\" && launch.local.state === \"running\" ? \"setup_incomplete\" : launch.local.state;\n\tconst connections = [...launch.hasHealthyLocal ? [{ id: \"default\" }] : [], ...launch.remotes.filter((r) => r.state === \"accessible\")];\n\treturn resolveLanding(ctx, {\n\t\tmigration: { status: \"none\" },\n\t\tlocal: { state: localState },\n\t\tconnections\n\t});\n}\n//#endregion\nexport { BLOCKING_LANDINGS as i, getCachedLocalInstallState as n, resolveRequestLanding as r, _resetLaunchCache as t };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"landing-DKXNel0Q.js","sources":["../../../.svelte-kit/adapter-node/chunks/landing.js"],"sourcesContent":["import { t as buildComposeOptions } from \"./compose-args.js\";\nimport { m as composePs } from \"./docker.js\";\nimport { I as classifyLocalInstall, L as deriveLaunchStatus, R as deriveLocalStackState, z as detectRuntime } from \"./src.js\";\nimport { t as getState } from \"./state.js\";\nimport { o as listRemoteStatuses } from \"./endpoints.js\";\nimport { t as computeServerRuntimeContext } from \"./features.js\";\nimport { i as resolveCapabilities } from \"./runtime-context.svelte.js\";\n//#region src/lib/resolve-landing.ts\n/**\n* Where the host admin surface lives. Phase 4 moved it from /admin to /host\n* (/admin/* is a dead namespace — router 404, no alias).\n*/\nvar HOST_ADMIN_LANDING = \"/host\";\n/**\n* The blocking-migration landing surface.\n*\n* K4 (review 2026-07-11): callers that need to know whether a resolved\n* landing is BLOCKING (usage routes must not bypass it) must check\n* membership in BLOCKING_LANDINGS below — never string-compare against this\n* literal directly. Blocking-ness is a property of the landing STATE, not a\n* magic string duplicated at each call site; encoding it only as a literal\n* comparison means a future second blocking landing would return a new\n* string and every literal-match call site would silently keep exempting\n* usage routes from it.\n*/\nvar HOST_ATTENTION_LANDING = \"/attention\";\n/**\n* Landings that block the usage routes (/chat, /advanced, /connections)\n* from bypassing the launch-routing redirect (hooks.server.ts). Today only\n* HOST_ATTENTION_LANDING is blocking; adding a future second blocking\n* landing means adding it here — the usage-route gate then covers it\n* automatically, with no call-site changes required.\n*/\nvar BLOCKING_LANDINGS = new Set([HOST_ATTENTION_LANDING]);\n/** Resolve the landing path for a session (plan §6.5). Pure — no I/O, no\n* global state; the gate is CAPABILITY-driven, not hostMode-driven. */\nfunction resolveLanding(ctx, state) {\n\tif (ctx.effectiveCapabilities.includes(\"host:setup\")) {\n\t\tif (state.migration.status === \"pending\") return HOST_ATTENTION_LANDING;\n\t\tif (state.local.state === \"not_installed\") return state.connections.length === 0 ? \"/setup\" : \"/chat\";\n\t\tif (state.local.state === \"setup_incomplete\") return \"/setup\";\n\t\tif (state.local.state === \"installed_offline\") return HOST_ADMIN_LANDING;\n\t\tif (state.local.state === \"installed_broken\") return `${HOST_ADMIN_LANDING}?tab=diagnostics`;\n\t\treturn \"/chat\";\n\t}\n\tif (ctx.hostMode === \"assistant-container\") return \"/chat\";\n\tif (ctx.hostMode === \"pwa-static\") return state.connections.length === 0 ? \"/connections/new\" : \"/chat\";\n\treturn \"/chat\";\n}\n//#endregion\n//#region src/lib/server/landing.ts\nvar launchRoutingCache = null;\nvar installStateCache = null;\n/** Test-only: clear the 5s launch-routing cache so each test resolves fresh. */\nfunction _resetLaunchCache() {\n\tlaunchRoutingCache = null;\n\tinstallStateCache = null;\n}\n/**\n* classifyLocalInstall, cached for 5s (K3). Shared by hooks.server.ts's\n* setup guard and resolveLaunchRouting() below, so a request that touches\n* both call sites only classifies the install once.\n*/\nfunction getCachedLocalInstallState(stackDir, homeDir) {\n\tif (installStateCache && installStateCache.expiresAt > Date.now()) return installStateCache.value;\n\tconst value = classifyLocalInstall(stackDir, homeDir);\n\tinstallStateCache = {\n\t\tvalue,\n\t\texpiresAt: Date.now() + 5e3\n\t};\n\treturn value;\n}\nfunction parseComposePsServices(stdout) {\n\tconst services = [];\n\tfor (const line of stdout.split(\"\\n\")) {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) continue;\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(trimmed);\n\t\t\tservices.push({\n\t\t\t\tservice: String(parsed.Service ?? parsed.Name ?? \"\"),\n\t\t\t\tstate: String(parsed.State ?? \"\"),\n\t\t\t\thealth: String(parsed.Health ?? \"\")\n\t\t\t});\n\t\t} catch {}\n\t}\n\treturn services;\n}\nasync function resolveLaunchRouting() {\n\tif (launchRoutingCache && launchRoutingCache.expiresAt > Date.now()) return launchRoutingCache.value;\n\tconst state = getState();\n\tconst installState = getCachedLocalInstallState(state.stackDir, state.homeDir);\n\tconst composeResult = await composePs(buildComposeOptions(state));\n\tconst value = {\n\t\tinstallState,\n\t\tlaunch: deriveLaunchStatus({\n\t\t\tlocal: {\n\t\t\t\tstate: deriveLocalStackState(installState, composeResult.ok ? parseComposePsServices(composeResult.stdout) : []),\n\t\t\t\truntime: installState === \"not_installed\" ? await detectRuntime() : void 0,\n\t\t\t\tdetail: { installState }\n\t\t\t},\n\t\t\tremotes: await listRemoteStatuses()\n\t\t})\n\t};\n\tlaunchRoutingCache = {\n\t\tvalue,\n\t\texpiresAt: Date.now() + 5e3\n\t};\n\treturn value;\n}\n/**\n* Resolve the landing path for a request via resolveLanding() (plan §6.5).\n* May return a path with a query string (e.g. '/host?tab=diagnostics').\n*/\nasync function resolveRequestLanding(event) {\n\tconst serverCtx = computeServerRuntimeContext(event);\n\tconst clientContext = { displayMode: \"browser\" };\n\tconst ctx = {\n\t\t...serverCtx,\n\t\tclientContext,\n\t\teffectiveCapabilities: resolveCapabilities(serverCtx.serverCapabilities, clientContext)\n\t};\n\tconst { installState, launch } = await resolveLaunchRouting();\n\tconst localState = installState === \"setup_incomplete\" && launch.local.state === \"running\" ? \"setup_incomplete\" : launch.local.state;\n\tconst connections = [...launch.hasHealthyLocal ? [{ id: \"default\" }] : [], ...launch.remotes.filter((r) => r.state === \"accessible\")];\n\treturn resolveLanding(ctx, {\n\t\tmigration: { status: \"none\" },\n\t\tlocal: { state: localState },\n\t\tconnections\n\t});\n}\n//#endregion\nexport { BLOCKING_LANDINGS as i, getCachedLocalInstallState as n, resolveRequestLanding as r, _resetLaunchCache as t };\n"],"names":[],"mappings":";;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAsB,GAAG,YAAY;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,sBAAsB,CAAC;AACxD;AACA;AACA,SAAS,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE;AACpC,CAAC,IAAI,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACvD,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,EAAE,OAAO,sBAAsB;AACzE,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,eAAe,EAAE,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,OAAO;AACvG,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,kBAAkB,EAAE,OAAO,QAAQ;AAC/D,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,mBAAmB,EAAE,OAAO,kBAAkB;AAC1E,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,kBAAkB,EAAE,OAAO,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC;AAC9F,EAAE,OAAO,OAAO;AAChB,CAAC;AACD,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,qBAAqB,EAAE,OAAO,OAAO;AAC3D,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,kBAAkB,GAAG,OAAO;AACxG,CAAC,OAAO,OAAO;AACf;AACA;AACA;AACA,IAAI,kBAAkB,GAAG,IAAI;AAC7B,IAAI,iBAAiB,GAAG,IAAI;AAC5B;AACA,SAAS,iBAAiB,GAAG;AAC7B,CAAC,kBAAkB,GAAG,IAAI;AAC1B,CAAC,iBAAiB,GAAG,IAAI;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE;AACvD,CAAC,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,iBAAiB,CAAC,KAAK;AAClG,CAAC,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC;AACtD,CAAC,iBAAiB,GAAG;AACrB,EAAE,KAAK;AACP,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG;AAC1B,EAAE;AACF,CAAC,OAAO,KAAK;AACb;AACA,SAAS,sBAAsB,CAAC,MAAM,EAAE;AACxC,CAAC,MAAM,QAAQ,GAAG,EAAE;AACpB,CAAC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACxC,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AAC7B,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,EAAE,IAAI;AACN,GAAG,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACrC,GAAG,QAAQ,CAAC,IAAI,CAAC;AACjB,IAAI,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AACxD,IAAI,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;AACrC,IAAI,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE;AACtC,IAAI,CAAC;AACL,EAAE,CAAC,CAAC,MAAM,CAAC;AACX,CAAC;AACD,CAAC,OAAO,QAAQ;AAChB;AACA,eAAe,oBAAoB,GAAG;AACtC,CAAC,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,kBAAkB,CAAC,KAAK;AACrG,CAAC,MAAM,KAAK,GAAG,QAAQ,EAAE;AACzB,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;AAC/E,CAAC,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC,MAAM,KAAK,GAAG;AACf,EAAE,YAAY;AACd,EAAE,MAAM,EAAE,kBAAkB,CAAC;AAC7B,GAAG,KAAK,EAAE;AACV,IAAI,KAAK,EAAE,qBAAqB,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,GAAG,sBAAsB,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACpH,IAAI,OAAO,EAAE,YAAY,KAAK,eAAe,GAAG,MAAM,aAAa,EAAE,GAAG,MAAM;AAC9E,IAAI,MAAM,EAAE,EAAE,YAAY;AAC1B,IAAI;AACJ,GAAG,OAAO,EAAE,MAAM,kBAAkB;AACpC,GAAG;AACH,EAAE;AACF,CAAC,kBAAkB,GAAG;AACtB,EAAE,KAAK;AACP,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG;AAC1B,EAAE;AACF,CAAC,OAAO,KAAK;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAqB,CAAC,KAAK,EAAE;AAC5C,CAAC,MAAM,SAAS,GAAG,2BAA2B,CAAC,KAAK,CAAC;AACrD,CAAC,MAAM,aAAa,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE;AACjD,CAAC,MAAM,GAAG,GAAG;AACb,EAAE,GAAG,SAAS;AACd,EACE,qBAAqB,EAAE,mBAAmB,CAAC,SAAS,CAAC,kBAAkB,EAAE,aAAa;AACxF,EAAE;AACF,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,oBAAoB,EAAE;AAC9D,CAAC,MAAM,UAAU,GAAG,YAAY,KAAK,kBAAkB,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,GAAG,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK;AACrI,CAAC,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;AACtI,CAAC,OAAO,cAAc,CAAC,GAAG,EAAE;AAC5B,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;AAC/B,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;AAC9B,EAAE;AACF,EAAE,CAAC;AACH;;;;"}
@@ -0,0 +1,431 @@
1
+ //#region ../lib/src/control-plane/addon-ids.ts
2
+ /**
3
+ * Canonical list of built-in addon IDs.
4
+ *
5
+ * Single source of truth — imported by both addons.ts and migrations.ts.
6
+ * Update THIS file (and only this file) when adding or removing a built-in addon.
7
+ *
8
+ * Intentionally a pure-constants file with no imports so it can be safely
9
+ * imported from anywhere without risk of circular dependencies.
10
+ */
11
+ var BUILTIN_ADDON_IDS = [
12
+ "api",
13
+ "chat",
14
+ "discord",
15
+ "gateway",
16
+ "ollama",
17
+ "slack",
18
+ "voice"
19
+ ];
20
+ /**
21
+ * Addons whose ingress is served by the guardian container.
22
+ *
23
+ * Single source of truth for guardian deploy gating. Must mirror the Compose
24
+ * profile gate on the guardian service in
25
+ * `packages/skeleton/system/stack/portals.compose.yml`
26
+ * (`profiles: [addon.chat, addon.api, addon.discord, addon.slack, addon.gateway]`):
27
+ * enabling any of these requires the guardian, so the deploy set, the
28
+ * expected-service seed, and the activation loop all deploy/health-wait on it.
29
+ *
30
+ * NOTE: broader than PORTAL_SECRET_ADDON_IDS — `gateway` uses the guardian but
31
+ * has no portal secret of its own (see below). Keep the two lists distinct.
32
+ */
33
+ var GUARDIAN_INGRESS_ADDON_IDS = [
34
+ "api",
35
+ "chat",
36
+ "discord",
37
+ "gateway",
38
+ "slack"
39
+ ];
40
+ /**
41
+ * First-party portals that own a dedicated `portal_<id>_secret`.
42
+ *
43
+ * Single source of truth for portal-secret provisioning (`ensurePortalSecret`).
44
+ * Must mirror the `portal_*_secret` set the guardian mounts in
45
+ * `portals.compose.yml` (chat, api, discord, slack). Excludes `gateway`, which
46
+ * is guardian ingress but has no portal secret of its own.
47
+ */
48
+ var PORTAL_SECRET_ADDON_IDS = [
49
+ "api",
50
+ "chat",
51
+ "discord",
52
+ "slack"
53
+ ];
54
+
55
+ //#region ../lib/src/provider-constants.ts
56
+ /** Default base URLs per provider. */
57
+ var PROVIDER_DEFAULT_URLS = {
58
+ openai: "https://api.openai.com",
59
+ groq: "https://api.groq.com/openai",
60
+ mistral: "https://api.mistral.ai",
61
+ together: "https://api.together.xyz",
62
+ deepseek: "https://api.deepseek.com",
63
+ xai: "https://api.x.ai",
64
+ lmstudio: "http://host.docker.internal:1234",
65
+ ollama: "http://host.docker.internal:11434",
66
+ "model-runner": "http://model-runner.docker.internal/engines",
67
+ google: "https://generativelanguage.googleapis.com",
68
+ huggingface: "https://router.huggingface.co/v1"
69
+ };
70
+ /** Map provider name → env var for the API key. */
71
+ var PROVIDER_KEY_MAP = {
72
+ openai: "OPENAI_API_KEY",
73
+ groq: "GROQ_API_KEY",
74
+ mistral: "MISTRAL_API_KEY",
75
+ google: "GOOGLE_API_KEY",
76
+ deepseek: "DEEPSEEK_API_KEY",
77
+ together: "TOGETHER_API_KEY",
78
+ xai: "XAI_API_KEY",
79
+ huggingface: "HF_TOKEN"
80
+ };
81
+ /** Known embedding model dimensions. Keyed by `provider/model`. */
82
+ var EMBEDDING_DIMS = {
83
+ "openai/text-embedding-3-small": 1536,
84
+ "openai/text-embedding-3-large": 3072,
85
+ "openai/text-embedding-ada-002": 1536,
86
+ "ollama/nomic-embed-text": 768,
87
+ "ollama/mxbai-embed-large": 1024,
88
+ "ollama/mxbai-embed-large-v1": 1024,
89
+ "ollama/all-minilm": 384,
90
+ "ollama/snowflake-arctic-embed": 1024,
91
+ "model-runner/ai/mxbai-embed-large-v1": 1024,
92
+ "mistral/mistral-embed": 1024,
93
+ "google/text-embedding-004": 768,
94
+ "huggingface/sentence-transformers/all-MiniLM-L6-v2": 384,
95
+ "huggingface/intfloat/multilingual-e5-large": 1024
96
+ };
97
+ /** Bare model-name lookup used by the browser wizard helpers. */
98
+ var KNOWN_EMBEDDING_MODEL_DIMS = Object.fromEntries(Object.entries(EMBEDDING_DIMS).map(([key, dims]) => [key.slice(key.indexOf("/") + 1), dims]));
99
+ /**
100
+ * Look up embedding model dimensions. Tries the full key first, then strips
101
+ * any trailing `:tag` from the model name (Ollama-style versions).
102
+ * Returns 0 when no match is found.
103
+ */
104
+ function lookupEmbeddingDims(provider, model) {
105
+ if (!provider || !model) return 0;
106
+ const key = `${provider}/${model}`;
107
+ if (EMBEDDING_DIMS[key]) return EMBEDDING_DIMS[key];
108
+ const colon = model.lastIndexOf(":");
109
+ if (colon > 0) {
110
+ const bare = `${provider}/${model.slice(0, colon)}`;
111
+ if (EMBEDDING_DIMS[bare]) return EMBEDDING_DIMS[bare];
112
+ }
113
+ return 0;
114
+ }
115
+ var OLLAMA_DEFAULT_CHAT_MODEL = {
116
+ chat: "llama3.2:latest"}.chat;
117
+ function addonProfileId(addon, variant) {
118
+ return `addon.${addon}.${variant}`;
119
+ }
120
+
121
+ //#region ../lib/src/control-plane/bind-warning.ts
122
+ /**
123
+ * Startup warning for non-loopback bind addresses.
124
+ *
125
+ * When OP_BIND_ADDRESS is set to a non-loopback value (anything other than
126
+ * 127.0.0.1, localhost, or ::1), services are exposed on the host network
127
+ * interface. This helper produces a structured list of warning lines that
128
+ * callers should log at WARN level so operators are aware.
129
+ *
130
+ * Per-service overrides (e.g. OP_CHAT_BIND_ADDRESS, OP_VOICE_BIND_ADDRESS)
131
+ * are also checked and reported individually.
132
+ */
133
+ /**
134
+ * True when OP_ENABLED_ADDONS names at least one guardian-ingress addon — i.e.
135
+ * a guardian proxy is actually deployed in front of the exposed services.
136
+ * Parses the comma-separated OP_ENABLED_ADDONS directly (no dependency on
137
+ * addons.ts, to keep this module import-light and cycle-free).
138
+ */
139
+ function hasGuardianIngress(env) {
140
+ return (env.OP_ENABLED_ADDONS ?? "").split(",").map((s) => s.trim()).filter(Boolean).some((a) => GUARDIAN_INGRESS_ADDON_IDS.includes(a));
141
+ }
142
+ /** Known per-service bind address env var names (mirrors compose files). */
143
+ var PER_SERVICE_BIND_VARS = [
144
+ "OP_ASSISTANT_BIND_ADDRESS",
145
+ "OP_CLIENT_BIND_ADDRESS",
146
+ "OP_CHAT_BIND_ADDRESS",
147
+ "OP_API_BIND_ADDRESS",
148
+ "OP_VOICE_BIND_ADDRESS"
149
+ ];
150
+ /**
151
+ * #563 D9 — per-var warnings lead with WHAT is exposed and which network
152
+ * access preset (packages/lib/src/control-plane/network-preset.ts)
153
+ * deliberately configures that exposure, so operators reading the log can
154
+ * tell "I did this on purpose" from "something hand-edited this". Only
155
+ * `OP_ASSISTANT_BIND_ADDRESS` (the Home network presets) and
156
+ * `OP_BIND_ADDRESS` (the Shared network preset) are ever set by a preset;
157
+ * the other per-service vars (client/chat/api/voice) are never preset-managed
158
+ * so they keep generic wording naming no preset.
159
+ */
160
+ var PRESET_FRAMING = {
161
+ OP_BIND_ADDRESS: "Shared network, guardian protected",
162
+ OP_ASSISTANT_BIND_ADDRESS: "Home network"
163
+ };
164
+ /** Exported for reuse by mdns-responder.ts's bind-gating logic (#488). */
165
+ function isLoopback(value) {
166
+ const v = value.trim();
167
+ return v === "127.0.0.1" || v === "localhost" || v === "::1";
168
+ }
169
+ /**
170
+ * Opt-in: allow the web UI (including the first-run setup wizard) to be reached
171
+ * from a remote machine. When set, the UI server binds all interfaces and the
172
+ * Host/Origin allowlist + the setup-localhost-only gate are relaxed.
173
+ *
174
+ * This deliberately reopens the owner-race the setup gate normally prevents, so
175
+ * it is OFF by default and must be explicitly enabled by the operator. Reach the
176
+ * UI over an SSH tunnel or a reverse proxy instead when you can.
177
+ */
178
+ function isRemoteSetupAllowed(env = process.env) {
179
+ const v = env.OP_ALLOW_REMOTE_SETUP?.trim().toLowerCase();
180
+ return v === "1" || v === "true" || v === "yes";
181
+ }
182
+ /**
183
+ * Inspect `env` for non-loopback bind address settings and return one warning
184
+ * line per problematic variable. Returns an empty array when everything is
185
+ * loopback (or unset, since the compose default is 127.0.0.1).
186
+ *
187
+ * @param env - The environment to inspect; typically `process.env`.
188
+ */
189
+ function collectBindAddressWarnings(env) {
190
+ const warnings = [];
191
+ const globalBind = env.OP_BIND_ADDRESS;
192
+ if (globalBind && !isLoopback(globalBind)) warnings.push(hasGuardianIngress(env) ? `${PRESET_FRAMING.OP_BIND_ADDRESS} exposure — OP_BIND_ADDRESS is set to "${globalBind}", exposing services on the host network interface, not just loopback. Ensure a firewall is in place if this host is reachable from untrusted networks.` : `Unprotected LAN exposure — OP_BIND_ADDRESS is set to "${globalBind}" but no guardian-ingress addon is enabled, so services are exposed directly on the host network interface with no guardian proxy in front. Enable a guardian-ingress addon (chat/api/gateway/discord/slack) or keep this loopback-only.`);
193
+ for (const key of PER_SERVICE_BIND_VARS) {
194
+ const val = env[key];
195
+ if (val && !isLoopback(val)) {
196
+ const framing = PRESET_FRAMING[key];
197
+ warnings.push(framing ? `${framing} exposure — ${key} is set to "${val}", exposing this service on the host network interface.` : `${key} is set to "${val}" — this service will be exposed on the host network interface.`);
198
+ }
199
+ }
200
+ if (isRemoteSetupAllowed(env)) warnings.push("OP_ALLOW_REMOTE_SETUP is enabled — the web UI is reachable from remote machines and the setup wizard is no longer restricted to the host. Only use this on a trusted network behind a firewall.");
201
+ return warnings;
202
+ }
203
+ //#endregion
204
+ //#region ../lib/src/control-plane/network-preset.ts
205
+ /**
206
+ * Network access preset resolver (#563).
207
+ *
208
+ * A single "network access" choice bundles bind-address exposure, OpenCode
209
+ * Basic auth, and mDNS advertisement intent into one operator-facing decision
210
+ * instead of four independently-tunable env vars. This module is the ONLY
211
+ * place that knows the preset → env-var mapping; the wizard, the CLI headless
212
+ * spec path, and the admin "detect current preset" surface all resolve
213
+ * through it so they can never drift from each other.
214
+ *
215
+ * Browser-safe: this module imports ONLY `isLoopback`, `collectBindAddressWarnings`,
216
+ * and `isRemoteSetupAllowed` from `./bind-warning.js` — no `node:*` imports and
217
+ * never `./mdns-responder.js` (which pulls in `node:dgram`). The wizard
218
+ * (packages/ui, a browser bundle) imports this module directly via the
219
+ * `@openpalm/lib/control-plane/network-preset.js` subpath, precedent:
220
+ * `provider-constants.ts`.
221
+ *
222
+ * D1 (mDNS mechanism): per-preset mDNS is delivered entirely by the #488 host
223
+ * mDNS responder (`mdns-responder.ts`), which gates advertisement on exactly
224
+ * the bind vars this resolver writes (`OP_ASSISTANT_BIND_ADDRESS` for the
225
+ * assistant name, `OP_BIND_ADDRESS` for the guardian name). This resolver only
226
+ * exposes `assistantMdns`/`guardianMdns` INTENT flags mirroring those gates —
227
+ * it never touches mDNS config directly. `network-preset.test.ts` T7 pins the
228
+ * two together so they can never silently diverge.
229
+ *
230
+ * D4 (managed key matrix): every preset writes ALL of `OP_BIND_ADDRESS`,
231
+ * `OP_ASSISTANT_BIND_ADDRESS`, `OP_CLIENT_BIND_ADDRESS`, `OP_VOICE_BIND_ADDRESS`,
232
+ * and `OPENCODE_AUTH` explicitly (loopback rather than "leave unset"), so
233
+ * switching between presets always converges regardless of prior state.
234
+ * `OP_CHAT_BIND_ADDRESS` / `OP_API_BIND_ADDRESS` are deliberately NOT managed —
235
+ * those are listeners inside the guardian container, fail-closed
236
+ * API-key-authenticated, so they are left to ride the `OP_BIND_ADDRESS`
237
+ * cascade (guardian-protected exposure is the intended behavior under
238
+ * shared-guardian). `GUARDIAN_DIRECT_INGRESS` is never touched by any preset —
239
+ * presets configure exposure, not ingress enablement.
240
+ */
241
+ var NETWORK_ACCESS_PRESETS = [
242
+ "this-pc",
243
+ "home-password",
244
+ "home-open",
245
+ "shared-guardian"
246
+ ];
247
+ /** Single source of copy for the wizard, the admin tab, and warning text. */
248
+ var NETWORK_PRESET_LABELS = {
249
+ "this-pc": "This PC only",
250
+ "home-password": "Home network, with password",
251
+ "home-open": "Home network, open access",
252
+ "shared-guardian": "Shared network, guardian protected"
253
+ };
254
+ function isNetworkAccessPreset(value) {
255
+ return typeof value === "string" && NETWORK_ACCESS_PRESETS.includes(value);
256
+ }
257
+ var LOOPBACK_DEFAULT = "127.0.0.1";
258
+ var LAN_VALUE = "0.0.0.0";
259
+ /** Managed bind-address env keys every preset writes explicitly. */
260
+ var MANAGED_BIND_KEYS = [
261
+ "OP_BIND_ADDRESS",
262
+ "OP_ASSISTANT_BIND_ADDRESS",
263
+ "OP_CLIENT_BIND_ADDRESS",
264
+ "OP_VOICE_BIND_ADDRESS"
265
+ ];
266
+ var ALL_LOOPBACK = {
267
+ OP_BIND_ADDRESS: LOOPBACK_DEFAULT,
268
+ OP_ASSISTANT_BIND_ADDRESS: LOOPBACK_DEFAULT,
269
+ OP_CLIENT_BIND_ADDRESS: LOOPBACK_DEFAULT,
270
+ OP_VOICE_BIND_ADDRESS: LOOPBACK_DEFAULT,
271
+ OPENCODE_AUTH: "false"
272
+ };
273
+ /**
274
+ * Resolve one of the four network access presets into its complete managed
275
+ * env row + mDNS intent flags. Throws on a password-contract violation
276
+ * (missing/empty password for `home-password`, or a password supplied for any
277
+ * other preset) — these are operator errors, not silent drops.
278
+ */
279
+ function resolveNetworkPreset(preset, opts) {
280
+ const password = opts?.opencodePassword;
281
+ if (preset === "home-password") {
282
+ if (!password) throw new Error("network.opencodePassword is required for the \"home-password\" network access preset.");
283
+ } else if (password) throw new Error(`network.opencodePassword must not be supplied for the "${preset}" network access preset.`);
284
+ switch (preset) {
285
+ case "this-pc": return {
286
+ preset,
287
+ env: { ...ALL_LOOPBACK },
288
+ assistantMdns: false,
289
+ guardianMdns: false
290
+ };
291
+ case "home-password": return {
292
+ preset,
293
+ env: {
294
+ ...ALL_LOOPBACK,
295
+ OP_ASSISTANT_BIND_ADDRESS: LAN_VALUE,
296
+ OPENCODE_AUTH: "true"
297
+ },
298
+ opencodePassword: password,
299
+ assistantMdns: true,
300
+ guardianMdns: false
301
+ };
302
+ case "home-open": return {
303
+ preset,
304
+ env: {
305
+ ...ALL_LOOPBACK,
306
+ OP_ASSISTANT_BIND_ADDRESS: LAN_VALUE
307
+ },
308
+ assistantMdns: true,
309
+ guardianMdns: false
310
+ };
311
+ case "shared-guardian": return {
312
+ preset,
313
+ env: {
314
+ ...ALL_LOOPBACK,
315
+ OP_BIND_ADDRESS: LAN_VALUE
316
+ },
317
+ assistantMdns: false,
318
+ guardianMdns: true
319
+ };
320
+ default: throw new Error(`Unknown network access preset: ${String(preset)}`);
321
+ }
322
+ }
323
+ /**
324
+ * Per-service binds whose compose host-port default NESTS `${OP_BIND_ADDRESS}`
325
+ * (core.compose.yml OP_CLIENT / services.compose.yml OP_VOICE:
326
+ * `${OP_X_BIND_ADDRESS:-${OP_BIND_ADDRESS:-127.0.0.1}}`). An unset value
327
+ * therefore inherits the GLOBAL bind, not loopback. `OP_ASSISTANT_BIND_ADDRESS`
328
+ * is deliberately absent — its host-port line defaults straight to 127.0.0.1
329
+ * with no OP_BIND_ADDRESS fallback.
330
+ */
331
+ var OP_BIND_CASCADING_KEYS = new Set(["OP_CLIENT_BIND_ADDRESS", "OP_VOICE_BIND_ADDRESS"]);
332
+ function boundValue(env, key) {
333
+ const raw = env[key]?.trim();
334
+ if (raw) return raw;
335
+ if (OP_BIND_CASCADING_KEYS.has(key)) {
336
+ const globalBind = env.OP_BIND_ADDRESS?.trim();
337
+ if (globalBind) return globalBind;
338
+ }
339
+ return LOOPBACK_DEFAULT;
340
+ }
341
+ function isExposed(env, key) {
342
+ return !isLoopback(boundValue(env, key));
343
+ }
344
+ function isAuthOn(env) {
345
+ const v = (env.OPENCODE_AUTH ?? "").trim().toLowerCase();
346
+ return v === "true" || v === "1" || v === "yes";
347
+ }
348
+ /**
349
+ * Reverse the resolver: given a (possibly hand-edited) env record, identify
350
+ * which preset it matches, if any. Unset managed keys are treated as the
351
+ * compose loopback default. Unmanaged keys (e.g. `OP_CHAT_BIND_ADDRESS`) are
352
+ * ignored entirely — they are reported by `collectNetworkExposureWarnings`
353
+ * instead, never by detection. Returns `null` on drift (a combination no
354
+ * preset produces), which the caller reports as "custom".
355
+ */
356
+ function detectNetworkPreset(env) {
357
+ const globalExposed = isExposed(env, "OP_BIND_ADDRESS");
358
+ const assistantExposed = isExposed(env, "OP_ASSISTANT_BIND_ADDRESS");
359
+ const clientExposed = isExposed(env, "OP_CLIENT_BIND_ADDRESS");
360
+ const voiceExposed = isExposed(env, "OP_VOICE_BIND_ADDRESS");
361
+ const authOn = isAuthOn(env);
362
+ if (!globalExposed && !assistantExposed && !clientExposed && !voiceExposed && !authOn) return "this-pc";
363
+ if (!globalExposed && assistantExposed && !clientExposed && !voiceExposed) return authOn ? "home-password" : "home-open";
364
+ if (globalExposed && !assistantExposed && !clientExposed && !voiceExposed && !authOn) return "shared-guardian";
365
+ return null;
366
+ }
367
+ /**
368
+ * Validate a target preset against the HOST PROCESS env (as opposed to
369
+ * stack.env) it will be layered under. Compose gives process env precedence
370
+ * over `--env-file`, so a leftover `OP_ASSISTANT_BIND_ADDRESS=0.0.0.0` in the
371
+ * host process would silently defeat a preset's loopback pin even though the
372
+ * resolver correctly writes the loopback row to stack.env.
373
+ *
374
+ * Presets that pin a bind to loopback must fail closed if the host env would
375
+ * override it: `shared-guardian` pins the assistant (PR #564), and `this-pc`
376
+ * pins BOTH the assistant and the guardian (PR #564 r3566887693 — otherwise a
377
+ * leftover host-env bind exposes an unauthenticated OpenCode / guardian on the
378
+ * LAN despite the operator's "This PC only" choice). The home presets
379
+ * deliberately expose the assistant, so they have nothing to guard.
380
+ */
381
+ function validateNetworkPresetEnv(preset, env) {
382
+ const label = NETWORK_PRESET_LABELS[preset];
383
+ const errors = [];
384
+ const rejectExposed = (key) => {
385
+ if (isExposed(env, key)) errors.push(`The "${preset}" (${label}) network access preset requires ${key} to stay loopback-only, but the current environment already exposes ${key}="${env[key]}". Unset it (or set it to 127.0.0.1) in the host process environment before switching to ${preset}.`);
386
+ };
387
+ if (preset === "this-pc") {
388
+ rejectExposed("OP_ASSISTANT_BIND_ADDRESS");
389
+ rejectExposed("OP_BIND_ADDRESS");
390
+ } else if (preset === "shared-guardian") rejectExposed("OP_ASSISTANT_BIND_ADDRESS");
391
+ return {
392
+ valid: errors.length === 0,
393
+ errors
394
+ };
395
+ }
396
+ /** The env var shown as the deliberate-exposure detail for each preset's line. */
397
+ function presetExposureLine(preset) {
398
+ switch (preset) {
399
+ case "home-password": return `${NETWORK_PRESET_LABELS["home-password"]} is configured — the assistant is reachable from other devices on your network and requires the sign-in password you set (env: OP_ASSISTANT_BIND_ADDRESS).`;
400
+ case "home-open": return `${NETWORK_PRESET_LABELS["home-open"]} is configured — the assistant is reachable from any device on your network WITHOUT a password (env: OP_ASSISTANT_BIND_ADDRESS). Anyone on this network can use it.`;
401
+ case "shared-guardian": return `${NETWORK_PRESET_LABELS["shared-guardian"]} is configured — the guardian's protected front door is reachable from your network (env: OP_BIND_ADDRESS); the assistant itself stays private on this PC (loopback, 127.0.0.1).`;
402
+ case "this-pc": return "";
403
+ }
404
+ }
405
+ /** Force the managed keys back to their loopback default so collectBindAddressWarnings skips them. */
406
+ function suppressManagedKeys(env) {
407
+ const copy = { ...env };
408
+ for (const key of MANAGED_BIND_KEYS) copy[key] = LOOPBACK_DEFAULT;
409
+ return copy;
410
+ }
411
+ /**
412
+ * Compose the operator-facing exposure warning list for `env`. When `env`
413
+ * exactly matches a preset row, the managed-var noise collapses into ONE
414
+ * preset-framed line (informational — this exposure was deliberately
415
+ * configured), plus per-var warnings for any non-loopback var OUTSIDE the
416
+ * managed set (e.g. a hand-set `OP_CHAT_BIND_ADDRESS`) and the unchanged
417
+ * `OP_ALLOW_REMOTE_SETUP` line. When nothing matches (drifted/custom env),
418
+ * the full per-var list from `collectBindAddressWarnings` is returned
419
+ * unchanged — unexplained exposure stays loud.
420
+ */
421
+ function collectNetworkExposureWarnings(env) {
422
+ const preset = detectNetworkPreset(env);
423
+ const warnings = [];
424
+ if (preset && preset !== "this-pc") warnings.push(presetExposureLine(preset));
425
+ const effectiveEnv = preset ? suppressManagedKeys(env) : env;
426
+ warnings.push(...collectBindAddressWarnings(effectiveEnv));
427
+ return warnings;
428
+ }
429
+
430
+ export { BUILTIN_ADDON_IDS as B, GUARDIAN_INGRESS_ADDON_IDS as G, KNOWN_EMBEDDING_MODEL_DIMS as K, NETWORK_ACCESS_PRESETS as N, OLLAMA_DEFAULT_CHAT_MODEL as O, PORTAL_SECRET_ADDON_IDS as P, NETWORK_PRESET_LABELS as a, PROVIDER_DEFAULT_URLS as b, PROVIDER_KEY_MAP as c, addonProfileId as d, collectNetworkExposureWarnings as e, detectNetworkPreset as f, isNetworkAccessPreset as g, isRemoteSetupAllowed as h, isLoopback as i, lookupEmbeddingDims as l, resolveNetworkPreset as r, validateNetworkPresetEnv as v };
431
+ //# sourceMappingURL=network-preset-CJ1RRnki.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-preset-CJ1RRnki.js","sources":["../../../.svelte-kit/adapter-node/chunks/addon-ids.js","../../../.svelte-kit/adapter-node/chunks/provider-constants.js","../../../.svelte-kit/adapter-node/chunks/network-preset.js"],"sourcesContent":["//#region ../lib/src/control-plane/addon-ids.ts\n/**\n* Canonical list of built-in addon IDs.\n*\n* Single source of truth — imported by both addons.ts and migrations.ts.\n* Update THIS file (and only this file) when adding or removing a built-in addon.\n*\n* Intentionally a pure-constants file with no imports so it can be safely\n* imported from anywhere without risk of circular dependencies.\n*/\nvar BUILTIN_ADDON_IDS = [\n\t\"api\",\n\t\"chat\",\n\t\"discord\",\n\t\"gateway\",\n\t\"ollama\",\n\t\"slack\",\n\t\"voice\"\n];\n/**\n* Addons whose ingress is served by the guardian container.\n*\n* Single source of truth for guardian deploy gating. Must mirror the Compose\n* profile gate on the guardian service in\n* `packages/skeleton/system/stack/portals.compose.yml`\n* (`profiles: [addon.chat, addon.api, addon.discord, addon.slack, addon.gateway]`):\n* enabling any of these requires the guardian, so the deploy set, the\n* expected-service seed, and the activation loop all deploy/health-wait on it.\n*\n* NOTE: broader than PORTAL_SECRET_ADDON_IDS — `gateway` uses the guardian but\n* has no portal secret of its own (see below). Keep the two lists distinct.\n*/\nvar GUARDIAN_INGRESS_ADDON_IDS = [\n\t\"api\",\n\t\"chat\",\n\t\"discord\",\n\t\"gateway\",\n\t\"slack\"\n];\n/**\n* First-party portals that own a dedicated `portal_<id>_secret`.\n*\n* Single source of truth for portal-secret provisioning (`ensurePortalSecret`).\n* Must mirror the `portal_*_secret` set the guardian mounts in\n* `portals.compose.yml` (chat, api, discord, slack). Excludes `gateway`, which\n* is guardian ingress but has no portal secret of its own.\n*/\nvar PORTAL_SECRET_ADDON_IDS = [\n\t\"api\",\n\t\"chat\",\n\t\"discord\",\n\t\"slack\"\n];\n//#endregion\nexport { GUARDIAN_INGRESS_ADDON_IDS as n, PORTAL_SECRET_ADDON_IDS as r, BUILTIN_ADDON_IDS as t };\n","//#region ../lib/src/provider-constants.ts\n/** Default base URLs per provider. */\nvar PROVIDER_DEFAULT_URLS = {\n\topenai: \"https://api.openai.com\",\n\tgroq: \"https://api.groq.com/openai\",\n\tmistral: \"https://api.mistral.ai\",\n\ttogether: \"https://api.together.xyz\",\n\tdeepseek: \"https://api.deepseek.com\",\n\txai: \"https://api.x.ai\",\n\tlmstudio: \"http://host.docker.internal:1234\",\n\tollama: \"http://host.docker.internal:11434\",\n\t\"model-runner\": \"http://model-runner.docker.internal/engines\",\n\tgoogle: \"https://generativelanguage.googleapis.com\",\n\thuggingface: \"https://router.huggingface.co/v1\"\n};\n/** Map provider name → env var for the API key. */\nvar PROVIDER_KEY_MAP = {\n\topenai: \"OPENAI_API_KEY\",\n\tgroq: \"GROQ_API_KEY\",\n\tmistral: \"MISTRAL_API_KEY\",\n\tgoogle: \"GOOGLE_API_KEY\",\n\tdeepseek: \"DEEPSEEK_API_KEY\",\n\ttogether: \"TOGETHER_API_KEY\",\n\txai: \"XAI_API_KEY\",\n\thuggingface: \"HF_TOKEN\"\n};\n/** Known embedding model dimensions. Keyed by `provider/model`. */\nvar EMBEDDING_DIMS = {\n\t\"openai/text-embedding-3-small\": 1536,\n\t\"openai/text-embedding-3-large\": 3072,\n\t\"openai/text-embedding-ada-002\": 1536,\n\t\"ollama/nomic-embed-text\": 768,\n\t\"ollama/mxbai-embed-large\": 1024,\n\t\"ollama/mxbai-embed-large-v1\": 1024,\n\t\"ollama/all-minilm\": 384,\n\t\"ollama/snowflake-arctic-embed\": 1024,\n\t\"model-runner/ai/mxbai-embed-large-v1\": 1024,\n\t\"mistral/mistral-embed\": 1024,\n\t\"google/text-embedding-004\": 768,\n\t\"huggingface/sentence-transformers/all-MiniLM-L6-v2\": 384,\n\t\"huggingface/intfloat/multilingual-e5-large\": 1024\n};\n/** Bare model-name lookup used by the browser wizard helpers. */\nvar KNOWN_EMBEDDING_MODEL_DIMS = Object.fromEntries(Object.entries(EMBEDDING_DIMS).map(([key, dims]) => [key.slice(key.indexOf(\"/\") + 1), dims]));\n/**\n* Look up embedding model dimensions. Tries the full key first, then strips\n* any trailing `:tag` from the model name (Ollama-style versions).\n* Returns 0 when no match is found.\n*/\nfunction lookupEmbeddingDims(provider, model) {\n\tif (!provider || !model) return 0;\n\tconst key = `${provider}/${model}`;\n\tif (EMBEDDING_DIMS[key]) return EMBEDDING_DIMS[key];\n\tconst colon = model.lastIndexOf(\":\");\n\tif (colon > 0) {\n\t\tconst bare = `${provider}/${model.slice(0, colon)}`;\n\t\tif (EMBEDDING_DIMS[bare]) return EMBEDDING_DIMS[bare];\n\t}\n\treturn 0;\n}\nvar OLLAMA_DEFAULT_CHAT_MODEL = {\n\tchat: \"llama3.2:latest\",\n\tembedding: \"nomic-embed-text\"\n}.chat;\nfunction addonProfileId(addon, variant) {\n\treturn `addon.${addon}.${variant}`;\n}\n//#endregion\nexport { addonProfileId as a, PROVIDER_KEY_MAP as i, OLLAMA_DEFAULT_CHAT_MODEL as n, lookupEmbeddingDims as o, PROVIDER_DEFAULT_URLS as r, KNOWN_EMBEDDING_MODEL_DIMS as t };\n","import { n as GUARDIAN_INGRESS_ADDON_IDS } from \"./addon-ids.js\";\n//#region ../lib/src/control-plane/bind-warning.ts\n/**\n* Startup warning for non-loopback bind addresses.\n*\n* When OP_BIND_ADDRESS is set to a non-loopback value (anything other than\n* 127.0.0.1, localhost, or ::1), services are exposed on the host network\n* interface. This helper produces a structured list of warning lines that\n* callers should log at WARN level so operators are aware.\n*\n* Per-service overrides (e.g. OP_CHAT_BIND_ADDRESS, OP_VOICE_BIND_ADDRESS)\n* are also checked and reported individually.\n*/\n/**\n* True when OP_ENABLED_ADDONS names at least one guardian-ingress addon — i.e.\n* a guardian proxy is actually deployed in front of the exposed services.\n* Parses the comma-separated OP_ENABLED_ADDONS directly (no dependency on\n* addons.ts, to keep this module import-light and cycle-free).\n*/\nfunction hasGuardianIngress(env) {\n\treturn (env.OP_ENABLED_ADDONS ?? \"\").split(\",\").map((s) => s.trim()).filter(Boolean).some((a) => GUARDIAN_INGRESS_ADDON_IDS.includes(a));\n}\n/** Known per-service bind address env var names (mirrors compose files). */\nvar PER_SERVICE_BIND_VARS = [\n\t\"OP_ASSISTANT_BIND_ADDRESS\",\n\t\"OP_CLIENT_BIND_ADDRESS\",\n\t\"OP_CHAT_BIND_ADDRESS\",\n\t\"OP_API_BIND_ADDRESS\",\n\t\"OP_VOICE_BIND_ADDRESS\"\n];\n/**\n* #563 D9 — per-var warnings lead with WHAT is exposed and which network\n* access preset (packages/lib/src/control-plane/network-preset.ts)\n* deliberately configures that exposure, so operators reading the log can\n* tell \"I did this on purpose\" from \"something hand-edited this\". Only\n* `OP_ASSISTANT_BIND_ADDRESS` (the Home network presets) and\n* `OP_BIND_ADDRESS` (the Shared network preset) are ever set by a preset;\n* the other per-service vars (client/chat/api/voice) are never preset-managed\n* so they keep generic wording naming no preset.\n*/\nvar PRESET_FRAMING = {\n\tOP_BIND_ADDRESS: \"Shared network, guardian protected\",\n\tOP_ASSISTANT_BIND_ADDRESS: \"Home network\"\n};\n/** Exported for reuse by mdns-responder.ts's bind-gating logic (#488). */\nfunction isLoopback(value) {\n\tconst v = value.trim();\n\treturn v === \"127.0.0.1\" || v === \"localhost\" || v === \"::1\";\n}\n/**\n* Opt-in: allow the web UI (including the first-run setup wizard) to be reached\n* from a remote machine. When set, the UI server binds all interfaces and the\n* Host/Origin allowlist + the setup-localhost-only gate are relaxed.\n*\n* This deliberately reopens the owner-race the setup gate normally prevents, so\n* it is OFF by default and must be explicitly enabled by the operator. Reach the\n* UI over an SSH tunnel or a reverse proxy instead when you can.\n*/\nfunction isRemoteSetupAllowed(env = process.env) {\n\tconst v = env.OP_ALLOW_REMOTE_SETUP?.trim().toLowerCase();\n\treturn v === \"1\" || v === \"true\" || v === \"yes\";\n}\n/**\n* Inspect `env` for non-loopback bind address settings and return one warning\n* line per problematic variable. Returns an empty array when everything is\n* loopback (or unset, since the compose default is 127.0.0.1).\n*\n* @param env - The environment to inspect; typically `process.env`.\n*/\nfunction collectBindAddressWarnings(env) {\n\tconst warnings = [];\n\tconst globalBind = env.OP_BIND_ADDRESS;\n\tif (globalBind && !isLoopback(globalBind)) warnings.push(hasGuardianIngress(env) ? `${PRESET_FRAMING.OP_BIND_ADDRESS} exposure — OP_BIND_ADDRESS is set to \"${globalBind}\", exposing services on the host network interface, not just loopback. Ensure a firewall is in place if this host is reachable from untrusted networks.` : `Unprotected LAN exposure — OP_BIND_ADDRESS is set to \"${globalBind}\" but no guardian-ingress addon is enabled, so services are exposed directly on the host network interface with no guardian proxy in front. Enable a guardian-ingress addon (chat/api/gateway/discord/slack) or keep this loopback-only.`);\n\tfor (const key of PER_SERVICE_BIND_VARS) {\n\t\tconst val = env[key];\n\t\tif (val && !isLoopback(val)) {\n\t\t\tconst framing = PRESET_FRAMING[key];\n\t\t\twarnings.push(framing ? `${framing} exposure — ${key} is set to \"${val}\", exposing this service on the host network interface.` : `${key} is set to \"${val}\" — this service will be exposed on the host network interface.`);\n\t\t}\n\t}\n\tif (isRemoteSetupAllowed(env)) warnings.push(\"OP_ALLOW_REMOTE_SETUP is enabled — the web UI is reachable from remote machines and the setup wizard is no longer restricted to the host. Only use this on a trusted network behind a firewall.\");\n\treturn warnings;\n}\n//#endregion\n//#region ../lib/src/control-plane/network-preset.ts\n/**\n* Network access preset resolver (#563).\n*\n* A single \"network access\" choice bundles bind-address exposure, OpenCode\n* Basic auth, and mDNS advertisement intent into one operator-facing decision\n* instead of four independently-tunable env vars. This module is the ONLY\n* place that knows the preset → env-var mapping; the wizard, the CLI headless\n* spec path, and the admin \"detect current preset\" surface all resolve\n* through it so they can never drift from each other.\n*\n* Browser-safe: this module imports ONLY `isLoopback`, `collectBindAddressWarnings`,\n* and `isRemoteSetupAllowed` from `./bind-warning.js` — no `node:*` imports and\n* never `./mdns-responder.js` (which pulls in `node:dgram`). The wizard\n* (packages/ui, a browser bundle) imports this module directly via the\n* `@openpalm/lib/control-plane/network-preset.js` subpath, precedent:\n* `provider-constants.ts`.\n*\n* D1 (mDNS mechanism): per-preset mDNS is delivered entirely by the #488 host\n* mDNS responder (`mdns-responder.ts`), which gates advertisement on exactly\n* the bind vars this resolver writes (`OP_ASSISTANT_BIND_ADDRESS` for the\n* assistant name, `OP_BIND_ADDRESS` for the guardian name). This resolver only\n* exposes `assistantMdns`/`guardianMdns` INTENT flags mirroring those gates —\n* it never touches mDNS config directly. `network-preset.test.ts` T7 pins the\n* two together so they can never silently diverge.\n*\n* D4 (managed key matrix): every preset writes ALL of `OP_BIND_ADDRESS`,\n* `OP_ASSISTANT_BIND_ADDRESS`, `OP_CLIENT_BIND_ADDRESS`, `OP_VOICE_BIND_ADDRESS`,\n* and `OPENCODE_AUTH` explicitly (loopback rather than \"leave unset\"), so\n* switching between presets always converges regardless of prior state.\n* `OP_CHAT_BIND_ADDRESS` / `OP_API_BIND_ADDRESS` are deliberately NOT managed —\n* those are listeners inside the guardian container, fail-closed\n* API-key-authenticated, so they are left to ride the `OP_BIND_ADDRESS`\n* cascade (guardian-protected exposure is the intended behavior under\n* shared-guardian). `GUARDIAN_DIRECT_INGRESS` is never touched by any preset —\n* presets configure exposure, not ingress enablement.\n*/\nvar NETWORK_ACCESS_PRESETS = [\n\t\"this-pc\",\n\t\"home-password\",\n\t\"home-open\",\n\t\"shared-guardian\"\n];\n/** Single source of copy for the wizard, the admin tab, and warning text. */\nvar NETWORK_PRESET_LABELS = {\n\t\"this-pc\": \"This PC only\",\n\t\"home-password\": \"Home network, with password\",\n\t\"home-open\": \"Home network, open access\",\n\t\"shared-guardian\": \"Shared network, guardian protected\"\n};\nfunction isNetworkAccessPreset(value) {\n\treturn typeof value === \"string\" && NETWORK_ACCESS_PRESETS.includes(value);\n}\nvar LOOPBACK_DEFAULT = \"127.0.0.1\";\nvar LAN_VALUE = \"0.0.0.0\";\n/** Managed bind-address env keys every preset writes explicitly. */\nvar MANAGED_BIND_KEYS = [\n\t\"OP_BIND_ADDRESS\",\n\t\"OP_ASSISTANT_BIND_ADDRESS\",\n\t\"OP_CLIENT_BIND_ADDRESS\",\n\t\"OP_VOICE_BIND_ADDRESS\"\n];\nvar ALL_LOOPBACK = {\n\tOP_BIND_ADDRESS: LOOPBACK_DEFAULT,\n\tOP_ASSISTANT_BIND_ADDRESS: LOOPBACK_DEFAULT,\n\tOP_CLIENT_BIND_ADDRESS: LOOPBACK_DEFAULT,\n\tOP_VOICE_BIND_ADDRESS: LOOPBACK_DEFAULT,\n\tOPENCODE_AUTH: \"false\"\n};\n/**\n* Resolve one of the four network access presets into its complete managed\n* env row + mDNS intent flags. Throws on a password-contract violation\n* (missing/empty password for `home-password`, or a password supplied for any\n* other preset) — these are operator errors, not silent drops.\n*/\nfunction resolveNetworkPreset(preset, opts) {\n\tconst password = opts?.opencodePassword;\n\tif (preset === \"home-password\") {\n\t\tif (!password) throw new Error(\"network.opencodePassword is required for the \\\"home-password\\\" network access preset.\");\n\t} else if (password) throw new Error(`network.opencodePassword must not be supplied for the \"${preset}\" network access preset.`);\n\tswitch (preset) {\n\t\tcase \"this-pc\": return {\n\t\t\tpreset,\n\t\t\tenv: { ...ALL_LOOPBACK },\n\t\t\tassistantMdns: false,\n\t\t\tguardianMdns: false\n\t\t};\n\t\tcase \"home-password\": return {\n\t\t\tpreset,\n\t\t\tenv: {\n\t\t\t\t...ALL_LOOPBACK,\n\t\t\t\tOP_ASSISTANT_BIND_ADDRESS: LAN_VALUE,\n\t\t\t\tOPENCODE_AUTH: \"true\"\n\t\t\t},\n\t\t\topencodePassword: password,\n\t\t\tassistantMdns: true,\n\t\t\tguardianMdns: false\n\t\t};\n\t\tcase \"home-open\": return {\n\t\t\tpreset,\n\t\t\tenv: {\n\t\t\t\t...ALL_LOOPBACK,\n\t\t\t\tOP_ASSISTANT_BIND_ADDRESS: LAN_VALUE\n\t\t\t},\n\t\t\tassistantMdns: true,\n\t\t\tguardianMdns: false\n\t\t};\n\t\tcase \"shared-guardian\": return {\n\t\t\tpreset,\n\t\t\tenv: {\n\t\t\t\t...ALL_LOOPBACK,\n\t\t\t\tOP_BIND_ADDRESS: LAN_VALUE\n\t\t\t},\n\t\t\tassistantMdns: false,\n\t\t\tguardianMdns: true\n\t\t};\n\t\tdefault: throw new Error(`Unknown network access preset: ${String(preset)}`);\n\t}\n}\n/**\n* Per-service binds whose compose host-port default NESTS `${OP_BIND_ADDRESS}`\n* (core.compose.yml OP_CLIENT / services.compose.yml OP_VOICE:\n* `${OP_X_BIND_ADDRESS:-${OP_BIND_ADDRESS:-127.0.0.1}}`). An unset value\n* therefore inherits the GLOBAL bind, not loopback. `OP_ASSISTANT_BIND_ADDRESS`\n* is deliberately absent — its host-port line defaults straight to 127.0.0.1\n* with no OP_BIND_ADDRESS fallback.\n*/\nvar OP_BIND_CASCADING_KEYS = new Set([\"OP_CLIENT_BIND_ADDRESS\", \"OP_VOICE_BIND_ADDRESS\"]);\nfunction boundValue(env, key) {\n\tconst raw = env[key]?.trim();\n\tif (raw) return raw;\n\tif (OP_BIND_CASCADING_KEYS.has(key)) {\n\t\tconst globalBind = env.OP_BIND_ADDRESS?.trim();\n\t\tif (globalBind) return globalBind;\n\t}\n\treturn LOOPBACK_DEFAULT;\n}\nfunction isExposed(env, key) {\n\treturn !isLoopback(boundValue(env, key));\n}\nfunction isAuthOn(env) {\n\tconst v = (env.OPENCODE_AUTH ?? \"\").trim().toLowerCase();\n\treturn v === \"true\" || v === \"1\" || v === \"yes\";\n}\n/**\n* Reverse the resolver: given a (possibly hand-edited) env record, identify\n* which preset it matches, if any. Unset managed keys are treated as the\n* compose loopback default. Unmanaged keys (e.g. `OP_CHAT_BIND_ADDRESS`) are\n* ignored entirely — they are reported by `collectNetworkExposureWarnings`\n* instead, never by detection. Returns `null` on drift (a combination no\n* preset produces), which the caller reports as \"custom\".\n*/\nfunction detectNetworkPreset(env) {\n\tconst globalExposed = isExposed(env, \"OP_BIND_ADDRESS\");\n\tconst assistantExposed = isExposed(env, \"OP_ASSISTANT_BIND_ADDRESS\");\n\tconst clientExposed = isExposed(env, \"OP_CLIENT_BIND_ADDRESS\");\n\tconst voiceExposed = isExposed(env, \"OP_VOICE_BIND_ADDRESS\");\n\tconst authOn = isAuthOn(env);\n\tif (!globalExposed && !assistantExposed && !clientExposed && !voiceExposed && !authOn) return \"this-pc\";\n\tif (!globalExposed && assistantExposed && !clientExposed && !voiceExposed) return authOn ? \"home-password\" : \"home-open\";\n\tif (globalExposed && !assistantExposed && !clientExposed && !voiceExposed && !authOn) return \"shared-guardian\";\n\treturn null;\n}\n/**\n* Validate a target preset against the HOST PROCESS env (as opposed to\n* stack.env) it will be layered under. Compose gives process env precedence\n* over `--env-file`, so a leftover `OP_ASSISTANT_BIND_ADDRESS=0.0.0.0` in the\n* host process would silently defeat a preset's loopback pin even though the\n* resolver correctly writes the loopback row to stack.env.\n*\n* Presets that pin a bind to loopback must fail closed if the host env would\n* override it: `shared-guardian` pins the assistant (PR #564), and `this-pc`\n* pins BOTH the assistant and the guardian (PR #564 r3566887693 — otherwise a\n* leftover host-env bind exposes an unauthenticated OpenCode / guardian on the\n* LAN despite the operator's \"This PC only\" choice). The home presets\n* deliberately expose the assistant, so they have nothing to guard.\n*/\nfunction validateNetworkPresetEnv(preset, env) {\n\tconst label = NETWORK_PRESET_LABELS[preset];\n\tconst errors = [];\n\tconst rejectExposed = (key) => {\n\t\tif (isExposed(env, key)) errors.push(`The \"${preset}\" (${label}) network access preset requires ${key} to stay loopback-only, but the current environment already exposes ${key}=\"${env[key]}\". Unset it (or set it to 127.0.0.1) in the host process environment before switching to ${preset}.`);\n\t};\n\tif (preset === \"this-pc\") {\n\t\trejectExposed(\"OP_ASSISTANT_BIND_ADDRESS\");\n\t\trejectExposed(\"OP_BIND_ADDRESS\");\n\t} else if (preset === \"shared-guardian\") rejectExposed(\"OP_ASSISTANT_BIND_ADDRESS\");\n\treturn {\n\t\tvalid: errors.length === 0,\n\t\terrors\n\t};\n}\n/** The env var shown as the deliberate-exposure detail for each preset's line. */\nfunction presetExposureLine(preset) {\n\tswitch (preset) {\n\t\tcase \"home-password\": return `${NETWORK_PRESET_LABELS[\"home-password\"]} is configured — the assistant is reachable from other devices on your network and requires the sign-in password you set (env: OP_ASSISTANT_BIND_ADDRESS).`;\n\t\tcase \"home-open\": return `${NETWORK_PRESET_LABELS[\"home-open\"]} is configured — the assistant is reachable from any device on your network WITHOUT a password (env: OP_ASSISTANT_BIND_ADDRESS). Anyone on this network can use it.`;\n\t\tcase \"shared-guardian\": return `${NETWORK_PRESET_LABELS[\"shared-guardian\"]} is configured — the guardian's protected front door is reachable from your network (env: OP_BIND_ADDRESS); the assistant itself stays private on this PC (loopback, 127.0.0.1).`;\n\t\tcase \"this-pc\": return \"\";\n\t}\n}\n/** Force the managed keys back to their loopback default so collectBindAddressWarnings skips them. */\nfunction suppressManagedKeys(env) {\n\tconst copy = { ...env };\n\tfor (const key of MANAGED_BIND_KEYS) copy[key] = LOOPBACK_DEFAULT;\n\treturn copy;\n}\n/**\n* Compose the operator-facing exposure warning list for `env`. When `env`\n* exactly matches a preset row, the managed-var noise collapses into ONE\n* preset-framed line (informational — this exposure was deliberately\n* configured), plus per-var warnings for any non-loopback var OUTSIDE the\n* managed set (e.g. a hand-set `OP_CHAT_BIND_ADDRESS`) and the unchanged\n* `OP_ALLOW_REMOTE_SETUP` line. When nothing matches (drifted/custom env),\n* the full per-var list from `collectBindAddressWarnings` is returned\n* unchanged — unexplained exposure stays loud.\n*/\nfunction collectNetworkExposureWarnings(env) {\n\tconst preset = detectNetworkPreset(env);\n\tconst warnings = [];\n\tif (preset && preset !== \"this-pc\") warnings.push(presetExposureLine(preset));\n\tconst effectiveEnv = preset ? suppressManagedKeys(env) : env;\n\twarnings.push(...collectBindAddressWarnings(effectiveEnv));\n\treturn warnings;\n}\n//#endregion\nexport { isNetworkAccessPreset as a, isLoopback as c, detectNetworkPreset as i, isRemoteSetupAllowed as l, NETWORK_PRESET_LABELS as n, resolveNetworkPreset as o, collectNetworkExposureWarnings as r, validateNetworkPresetEnv as s, NETWORK_ACCESS_PRESETS as t };\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { e as resolve_route, t as try_get_request_store } from './internal-D66tKQSe.js';
1
+ import { e as resolve_route, t as try_get_request_store } from './internal-D9Kp0SbJ.js';
2
2
  import { i as initial_base, c as base } from './environment-BYp8JQYM.js';
3
3
 
4
4
  //#region ../../node_modules/.bun/@sveltejs+kit@2.61.0+a890f0b024b6eaa9/node_modules/@sveltejs/kit/src/runtime/app/paths/server.js
@@ -14,4 +14,4 @@ function resolve(id, params) {
14
14
  }
15
15
 
16
16
  export { resolve as r };
17
- //# sourceMappingURL=paths-BpdOajoE.js.map
17
+ //# sourceMappingURL=paths-DRVrMQrI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths-BpdOajoE.js","sources":["../../../.svelte-kit/adapter-node/chunks/paths.js"],"sourcesContent":["import { r as try_get_request_store } from \"./server.js\";\nimport { d as initial_base, u as base } from \"./environment.js\";\nimport { n as resolve_route } from \"./routing.js\";\nimport \"./internal.js\";\n//#region ../../node_modules/.bun/@sveltejs+kit@2.61.0+a890f0b024b6eaa9/node_modules/@sveltejs/kit/src/runtime/app/paths/server.js\n/** @type {import('./client.js').resolve} */\nfunction resolve(id, params) {\n\tif (!id.startsWith(\"/\")) throw new Error(`Cannot use \\`resolve(...)\\` with a non-absolute pathname or route ID (got \"${id}\"). \\`resolve\\` is only for internal pathnames and route IDs; external URLs should be used directly.`);\n\tconst resolved = resolve_route(id, params);\n\t{\n\t\tconst store = try_get_request_store();\n\t\tif (store && !store.state.prerendering?.fallback) return (store.event.url.pathname.slice(initial_base.length).split(\"/\").slice(2).map(() => \"..\").join(\"/\") || \".\") + resolved;\n\t}\n\treturn base + resolved;\n}\n//#endregion\nexport { resolve as t };\n"],"names":[],"mappings":";;;AAIA;AACA;AACA,SAAS,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE;AAC7B,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,2EAA2E,EAAE,EAAE,CAAC,oGAAoG,CAAC,CAAC;AACjO,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC;AAC3C,CAAC;AACD,EAAE,MAAM,KAAK,GAAG,qBAAqB,EAAE;AACvC,EAAE,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,QAAQ;AAChL,CAAC;AACD,CAAC,OAAO,IAAI,GAAG,QAAQ;AACvB;;;;"}
1
+ {"version":3,"file":"paths-DRVrMQrI.js","sources":["../../../.svelte-kit/adapter-node/chunks/paths.js"],"sourcesContent":["import { r as try_get_request_store } from \"./server.js\";\nimport { d as initial_base, u as base } from \"./environment.js\";\nimport { n as resolve_route } from \"./routing.js\";\nimport \"./internal.js\";\n//#region ../../node_modules/.bun/@sveltejs+kit@2.61.0+a890f0b024b6eaa9/node_modules/@sveltejs/kit/src/runtime/app/paths/server.js\n/** @type {import('./client.js').resolve} */\nfunction resolve(id, params) {\n\tif (!id.startsWith(\"/\")) throw new Error(`Cannot use \\`resolve(...)\\` with a non-absolute pathname or route ID (got \"${id}\"). \\`resolve\\` is only for internal pathnames and route IDs; external URLs should be used directly.`);\n\tconst resolved = resolve_route(id, params);\n\t{\n\t\tconst store = try_get_request_store();\n\t\tif (store && !store.state.prerendering?.fallback) return (store.event.url.pathname.slice(initial_base.length).split(\"/\").slice(2).map(() => \"..\").join(\"/\") || \".\") + resolved;\n\t}\n\treturn base + resolved;\n}\n//#endregion\nexport { resolve as t };\n"],"names":[],"mappings":";;;AAIA;AACA;AACA,SAAS,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE;AAC7B,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,2EAA2E,EAAE,EAAE,CAAC,oGAAoG,CAAC,CAAC;AACjO,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC;AAC3C,CAAC;AACD,EAAE,MAAM,KAAK,GAAG,qBAAqB,EAAE;AACvC,EAAE,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,QAAQ;AAChL,CAAC;AACD,CAAC,OAAO,IAAI,GAAG,QAAQ;AACvB;;;;"}
@@ -1,4 +1,4 @@
1
- import { S as SESSION_TTL_SECONDS } from './helpers-XmKveZFr.js';
1
+ import { S as SESSION_TTL_SECONDS } from './helpers-CfpNg3il.js';
2
2
 
3
3
  //#region src/lib/server/session-cookie.ts
4
4
  /**
@@ -71,4 +71,4 @@ function clearSessionCookieHeader(request) {
71
71
  }
72
72
 
73
73
  export { SESSION_COOKIE_NAME as S, clearSessionCookieHeader as c, sessionCookieHeader as s };
74
- //# sourceMappingURL=session-cookie-B0Fc-L8S.js.map
74
+ //# sourceMappingURL=session-cookie-CDynAOx3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-cookie-B0Fc-L8S.js","sources":["../../../.svelte-kit/adapter-node/chunks/session-cookie.js"],"sourcesContent":["import { m as SESSION_TTL_SECONDS } from \"./helpers.js\";\n//#region src/lib/server/session-cookie.ts\n/**\n* Single source of truth for the `op_session` cookie's Set-Cookie attributes.\n*\n* Every issuer (login, session, setup/complete) and the sliding-renewal path in\n* hooks.server.ts builds the cookie through these helpers so the attributes can\n* never drift apart. Logout uses `clearSessionCookie()` with the SAME path so\n* the browser actually drops the cookie.\n*\n* Attribute rationale:\n* - HttpOnly — the cookie is the only credential the browser holds; XSS\n* must not be able to read it.\n* - SameSite=Lax — the cookie must ride along on top-level GET navigations\n* (typing the admin URL, following a bookmark) so a valid\n* session loads admin with no prompt. SameSite=Strict drops\n* the cookie on cross-site top-level GETs (e.g. opening the\n* console from a link in another app on the LAN), which\n* would force a needless re-prompt. State-mutating requests\n* are independently CSRF-guarded by the Origin check\n* (SEC-2) in hooks.server.ts, so Lax is safe here.\n* - Secure — set ONLY when the request arrived over HTTPS. LAN installs\n* are commonly plain HTTP; hardcoding Secure would make the\n* browser refuse to send the cookie and break login entirely\n* on those deployments. We honour `x-forwarded-proto` first\n* (reverse-proxy TLS termination) then the request URL.\n* - Path=/ — valid for the whole app; matched by the clear on logout.\n* - Max-Age — SESSION_TTL_SECONDS (14 days), in lockstep with the token expiry.\n*/\nvar SESSION_COOKIE_NAME = \"op_session\";\n/** True when the request reached us over HTTPS (direct or via TLS-terminating proxy). */\nfunction isSecureRequest(request) {\n\tconst forwarded = request.headers.get(\"x-forwarded-proto\");\n\tif (forwarded) return forwarded.split(\",\")[0].trim().toLowerCase() === \"https\";\n\ttry {\n\t\treturn new URL(request.url).protocol === \"https:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n/**\n* Build the `Set-Cookie` value that issues/renews the session cookie.\n* `secure` is derived from the request so LAN-over-HTTP installs still work.\n*/\nfunction sessionCookieHeader(token, request) {\n\tconst parts = [\n\t\t`${SESSION_COOKIE_NAME}=${token}`,\n\t\t\"HttpOnly\",\n\t\t\"SameSite=Lax\",\n\t\t\"Path=/\",\n\t\t`Max-Age=${SESSION_TTL_SECONDS}`\n\t];\n\tif (isSecureRequest(request)) parts.push(\"Secure\");\n\treturn parts.join(\"; \");\n}\n/**\n* Build the `Set-Cookie` value that clears the session cookie (logout).\n* Must mirror name/path/attributes of the issued cookie so the browser deletes it.\n*/\nfunction clearSessionCookieHeader(request) {\n\tconst parts = [\n\t\t`${SESSION_COOKIE_NAME}=`,\n\t\t\"HttpOnly\",\n\t\t\"SameSite=Lax\",\n\t\t\"Path=/\",\n\t\t\"Max-Age=0\"\n\t];\n\tif (isSecureRequest(request)) parts.push(\"Secure\");\n\treturn parts.join(\"; \");\n}\n//#endregion\nexport { clearSessionCookieHeader as n, sessionCookieHeader as r, SESSION_COOKIE_NAME as t };\n"],"names":[],"mappings":";;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,mBAAmB,GAAG;AAC1B;AACA,SAAS,eAAe,CAAC,OAAO,EAAE;AAClC,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC3D,CAAC,IAAI,SAAS,EAAE,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO;AAC/E,CAAC,IAAI;AACL,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ;AACnD,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,KAAK;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7C,CAAC,MAAM,KAAK,GAAG;AACf,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACnC,EAAE,UAAU;AACZ,EAAE,cAAc;AAChB,EAAE,QAAQ;AACV,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AACjC,EAAE;AACF,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA,SAAS,wBAAwB,CAAC,OAAO,EAAE;AAC3C,CAAC,MAAM,KAAK,GAAG;AACf,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAC3B,EAAE,UAAU;AACZ,EAAE,cAAc;AAChB,EAAE,QAAQ;AACV,EAAE;AACF,EAAE;AACF,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB;;;;"}
1
+ {"version":3,"file":"session-cookie-CDynAOx3.js","sources":["../../../.svelte-kit/adapter-node/chunks/session-cookie.js"],"sourcesContent":["import { m as SESSION_TTL_SECONDS } from \"./helpers.js\";\n//#region src/lib/server/session-cookie.ts\n/**\n* Single source of truth for the `op_session` cookie's Set-Cookie attributes.\n*\n* Every issuer (login, session, setup/complete) and the sliding-renewal path in\n* hooks.server.ts builds the cookie through these helpers so the attributes can\n* never drift apart. Logout uses `clearSessionCookie()` with the SAME path so\n* the browser actually drops the cookie.\n*\n* Attribute rationale:\n* - HttpOnly — the cookie is the only credential the browser holds; XSS\n* must not be able to read it.\n* - SameSite=Lax — the cookie must ride along on top-level GET navigations\n* (typing the admin URL, following a bookmark) so a valid\n* session loads admin with no prompt. SameSite=Strict drops\n* the cookie on cross-site top-level GETs (e.g. opening the\n* console from a link in another app on the LAN), which\n* would force a needless re-prompt. State-mutating requests\n* are independently CSRF-guarded by the Origin check\n* (SEC-2) in hooks.server.ts, so Lax is safe here.\n* - Secure — set ONLY when the request arrived over HTTPS. LAN installs\n* are commonly plain HTTP; hardcoding Secure would make the\n* browser refuse to send the cookie and break login entirely\n* on those deployments. We honour `x-forwarded-proto` first\n* (reverse-proxy TLS termination) then the request URL.\n* - Path=/ — valid for the whole app; matched by the clear on logout.\n* - Max-Age — SESSION_TTL_SECONDS (14 days), in lockstep with the token expiry.\n*/\nvar SESSION_COOKIE_NAME = \"op_session\";\n/** True when the request reached us over HTTPS (direct or via TLS-terminating proxy). */\nfunction isSecureRequest(request) {\n\tconst forwarded = request.headers.get(\"x-forwarded-proto\");\n\tif (forwarded) return forwarded.split(\",\")[0].trim().toLowerCase() === \"https\";\n\ttry {\n\t\treturn new URL(request.url).protocol === \"https:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n/**\n* Build the `Set-Cookie` value that issues/renews the session cookie.\n* `secure` is derived from the request so LAN-over-HTTP installs still work.\n*/\nfunction sessionCookieHeader(token, request) {\n\tconst parts = [\n\t\t`${SESSION_COOKIE_NAME}=${token}`,\n\t\t\"HttpOnly\",\n\t\t\"SameSite=Lax\",\n\t\t\"Path=/\",\n\t\t`Max-Age=${SESSION_TTL_SECONDS}`\n\t];\n\tif (isSecureRequest(request)) parts.push(\"Secure\");\n\treturn parts.join(\"; \");\n}\n/**\n* Build the `Set-Cookie` value that clears the session cookie (logout).\n* Must mirror name/path/attributes of the issued cookie so the browser deletes it.\n*/\nfunction clearSessionCookieHeader(request) {\n\tconst parts = [\n\t\t`${SESSION_COOKIE_NAME}=`,\n\t\t\"HttpOnly\",\n\t\t\"SameSite=Lax\",\n\t\t\"Path=/\",\n\t\t\"Max-Age=0\"\n\t];\n\tif (isSecureRequest(request)) parts.push(\"Secure\");\n\treturn parts.join(\"; \");\n}\n//#endregion\nexport { clearSessionCookieHeader as n, sessionCookieHeader as r, SESSION_COOKIE_NAME as t };\n"],"names":[],"mappings":";;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,mBAAmB,GAAG;AAC1B;AACA,SAAS,eAAe,CAAC,OAAO,EAAE;AAClC,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC3D,CAAC,IAAI,SAAS,EAAE,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO;AAC/E,CAAC,IAAI;AACL,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ;AACnD,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,KAAK;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7C,CAAC,MAAM,KAAK,GAAG;AACf,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACnC,EAAE,UAAU;AACZ,EAAE,cAAc;AAChB,EAAE,QAAQ;AACV,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AACjC,EAAE;AACF,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA,SAAS,wBAAwB,CAAC,OAAO,EAAE;AAC3C,CAAC,MAAM,KAAK,GAAG;AACf,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAC3B,EAAE,UAAU;AACZ,EAAE,cAAc;AAChB,EAAE,QAAQ;AACV,EAAE;AACF,EAAE;AACF,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB;;;;"}
@@ -1,4 +1,4 @@
1
- import { k as backupSetupInputs, aX as runDeploy, aU as resolveDeployJournalPath, ah as isSetupComplete, aV as resolveOpenPalmHome, az as readDeployJournal, aq as markSetupComplete } from './src-i2v6xhSC.js';
1
+ import { k as backupSetupInputs, aZ as runDeploy, aV as resolveDeployJournalPath, af as isSetupComplete, aX as resolveOpenPalmHome, ay as readDeployJournal, ao as markSetupComplete } from './src-CQ2F7hgb.js';
2
2
 
3
3
  //#region src/lib/server/setup-deploy.ts
4
4
  var _state = {
@@ -72,4 +72,4 @@ function prepareSetupRestorePoint(state) {
72
72
  }
73
73
 
74
74
  export { getDeployState as g, prepareSetupRestorePoint as p, resetDeployState as r, startDeploy as s };
75
- //# sourceMappingURL=setup-deploy-BjJIt1Gf.js.map
75
+ //# sourceMappingURL=setup-deploy-CRW2KpZR.js.map