decocms 2.300.4 → 2.300.5

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 (202) hide show
  1. package/dist/client/assets/{AlertCircle-DBqGSPcP.js → AlertCircle-DkMu8gq-.js} +1 -1
  2. package/dist/client/assets/{ArrowNarrowLeft-BXaqij1B.js → ArrowNarrowLeft-CubWmonS.js} +1 -1
  3. package/dist/client/assets/{ArrowUpRight-Dy3pY1KB.js → ArrowUpRight-9NVoXrfx.js} +1 -1
  4. package/dist/client/assets/{CheckCircle-CdvisKeL.js → CheckCircle-Bel0s5y_.js} +1 -1
  5. package/dist/client/assets/{ChevronDown-Bgm8xpiB.js → ChevronDown-Bkgm1HYo.js} +1 -1
  6. package/dist/client/assets/{ChevronRight-BNDzbrXM.js → ChevronRight-DfwJRari.js} +1 -1
  7. package/dist/client/assets/{ChevronUp-Dcy3nbXG.js → ChevronUp-B2fEvmSa.js} +1 -1
  8. package/dist/client/assets/{Container-DuIexZxb.js → Container--DgM5X-R.js} +1 -1
  9. package/dist/client/assets/{DotsVertical-DXx0Ujg3.js → DotsVertical-C8shhzyc.js} +1 -1
  10. package/dist/client/assets/{LinkExternal01-DYjZZIDx.js → LinkExternal01-CcwfRKez.js} +1 -1
  11. package/dist/client/assets/{Lock01-BOe1gff0.js → Lock01-Bp9Pue_s.js} +1 -1
  12. package/dist/client/assets/{Palette-DhQuB2ML.js → Palette-CrkwzhEn.js} +1 -1
  13. package/dist/client/assets/{Play-BZcGmVwL.js → Play-DnDrS4FU.js} +1 -1
  14. package/dist/client/assets/{Plus-4Uez8HVE.js → Plus-kol8QQC6.js} +1 -1
  15. package/dist/client/assets/{RefreshCcw01-BhAeHS-g.js → RefreshCcw01-BuPMNg1o.js} +1 -1
  16. package/dist/client/assets/{SearchMd-CUzM0zrX.js → SearchMd-CwDQTv7t.js} +1 -1
  17. package/dist/client/assets/{Settings02-Cnur6vcd.js → Settings02-CHcEkK8P.js} +1 -1
  18. package/dist/client/assets/{Shield01-BWRE1Xs3.js → Shield01-odg-3hat.js} +1 -1
  19. package/dist/client/assets/{Star01-BybMVymG.js → Star01-BpQlh6lv.js} +1 -1
  20. package/dist/client/assets/{Sun-C-v59Gap.js → Sun-D_lLP5L9.js} +1 -1
  21. package/dist/client/assets/{Tool01-mZQYeKOx.js → Tool01-CEe0UAte.js} +1 -1
  22. package/dist/client/assets/{Trash01-CNoOS3JN.js → Trash01-CUymhPzm.js} +1 -1
  23. package/dist/client/assets/{User01-DbuCBEQw.js → User01-DIw7EvUc.js} +1 -1
  24. package/dist/client/assets/{Users03-V3ylDCzz.js → Users03-R3lmvJ78.js} +1 -1
  25. package/dist/client/assets/{X-CcLhRHZD.js → X-DcM1qdBK.js} +1 -1
  26. package/dist/client/assets/{XCircle-ChctSyHl.js → XCircle-CeBHJaqL.js} +1 -1
  27. package/dist/client/assets/{XClose-DpUcIhAm.js → XClose-BHjvdgY4.js} +1 -1
  28. package/dist/client/assets/{Zap-B1-dMO3y.js → Zap-CyWzSozB.js} +1 -1
  29. package/dist/client/assets/{ZapSquare-DfvB-5sB.js → ZapSquare-BtvMrp4e.js} +1 -1
  30. package/dist/client/assets/{accordion-DfaTzzgo.js → accordion-CDw4R_G8.js} +1 -1
  31. package/dist/client/assets/{agent-icon-BoQW_2EY.js → agent-icon-DLxm9qbl.js} +1 -1
  32. package/dist/client/assets/{agents-list-DR0jRYSF.js → agents-list-CjvTcm5i.js} +1 -1
  33. package/dist/client/assets/ai-providers-DAKQ-bP1.js +1 -0
  34. package/dist/client/assets/{alert-dialog-DXJjXwxi.js → alert-dialog-B4hsEfJe.js} +1 -1
  35. package/dist/client/assets/{auth-catchall-DHcrcBIP.js → auth-catchall-DslBGItj.js} +1 -1
  36. package/dist/client/assets/{automation-list-row-DI5R0l8o.js → automation-list-row-CgYM96JG.js} +1 -1
  37. package/dist/client/assets/{automations-no2zbvix.js → automations-DpmVxKM2.js} +1 -1
  38. package/dist/client/assets/{avatar-Do-s9ITZ.js → avatar-CTvLM9yq.js} +1 -1
  39. package/dist/client/assets/{badge-YFtohznh.js → badge-B1zEfhH7.js} +1 -1
  40. package/dist/client/assets/{brand-context-rvHcmR_G.js → brand-context-D0BsHRBR.js} +1 -1
  41. package/dist/client/assets/{card-Dk0Zo6QN.js → card-DHL-J9u4.js} +1 -1
  42. package/dist/client/assets/{chat-context-C0Zo32t0.js → chat-context-B5UR9HLd.js} +1 -1
  43. package/dist/client/assets/{checkbox-CiBhzyNY.js → checkbox-BOftTDdw.js} +1 -1
  44. package/dist/client/assets/{collection-detail-y0WNKlJX.js → collection-detail-DgXbTdY8.js} +1 -1
  45. package/dist/client/assets/{collection-display-button-CjaJe_GY.js → collection-display-button-CcEkczO7.js} +1 -1
  46. package/dist/client/assets/{collection-search-ryHtnd8M.js → collection-search-CME3JpPr.js} +1 -1
  47. package/dist/client/assets/{collection-search-CAuA76RP.js → collection-search-T1fjuYzz.js} +1 -1
  48. package/dist/client/assets/{collection-table-wrapper-Dcdw6aoC.js → collection-table-wrapper-BaPy1k5k.js} +1 -1
  49. package/dist/client/assets/{collection-tabs-C3LT_tc_.js → collection-tabs-CSqJajy_.js} +1 -1
  50. package/dist/client/assets/{collections-DDb7LpQB.js → collections-Bji9q_km.js} +1 -1
  51. package/dist/client/assets/{command-CTfgW0Iz.js → command-DtyQdyVD.js} +1 -1
  52. package/dist/client/assets/{connection-card-D5H4X3Cp.js → connection-card-BTMtyEJ8.js} +1 -1
  53. package/dist/client/assets/{connection-detail-Bd-yhWrp.js → connection-detail-BefqrOx5.js} +1 -1
  54. package/dist/client/assets/{connection-form-helpers-BwTkhXCX.js → connection-form-helpers-CCMusIOu.js} +1 -1
  55. package/dist/client/assets/{connections-ohFEgzZ5.js → connections-DbDKUx4y.js} +1 -1
  56. package/dist/client/assets/{constants-CQXiy2CE.js → constants-BRWzgNkQ.js} +1 -1
  57. package/dist/client/assets/{constants-BfRRhGan.js → constants-Bl2zdZKg.js} +1 -1
  58. package/dist/client/assets/{dialog-DzUewo1N.js → dialog-TJfN_BuF.js} +1 -1
  59. package/dist/client/assets/{domain-settings-kuwV32Fv.js → domain-settings-BFdwOOGl.js} +1 -1
  60. package/dist/client/assets/{drawer-DW2mtNYY.js → drawer-C2i2-ja1.js} +1 -1
  61. package/dist/client/assets/{dropdown-menu-DCTIJaux.js → dropdown-menu-D9XdG3Xq.js} +1 -1
  62. package/dist/client/assets/{dynamic-plugin-layout-Dquo1zHH.js → dynamic-plugin-layout-BfJpkcg4.js} +1 -1
  63. package/dist/client/assets/{empty-state-BVem588l.js → empty-state-B1-aUhdl.js} +1 -1
  64. package/dist/client/assets/{empty-state-CItDDPJC.js → empty-state-CLPJFsFO.js} +1 -1
  65. package/dist/client/assets/{extract-connection-data-B9ZIPvMk.js → extract-connection-data-Cg_nAhlq.js} +1 -1
  66. package/dist/client/assets/{features-BBiOusUu.js → features-Dt4JD8s-.js} +1 -1
  67. package/dist/client/assets/{form-DBCGiMXe.js → form-sbdLhoLD.js} +1 -1
  68. package/dist/client/assets/{general-Dgp_dGYw.js → general-D6BEXRIY.js} +1 -1
  69. package/dist/client/assets/{index-DC6Xxjvd.js → index-BJybli6s.js} +1 -1
  70. package/dist/client/assets/{index-B_Lcr50o.js → index-BT8iP1gH.js} +1 -1
  71. package/dist/client/assets/{index-OcEo2bsu.js → index-BXqFEz8g.js} +1 -1
  72. package/dist/client/assets/{index-D-bSqE5m.js → index-BXzlMZdf.js} +1 -1
  73. package/dist/client/assets/{index-CQIQcTOE.js → index-BcH41hau.js} +3 -3
  74. package/dist/client/assets/{index-DxqG7SO-.js → index-CA7joeGf.js} +2 -2
  75. package/dist/client/assets/{index-ClSDqtDK.js → index-CAwsKc2v.js} +1 -1
  76. package/dist/client/assets/index-CQtoC2zV.js +1 -0
  77. package/dist/client/assets/{index-BAJeqA_t.js → index-D3orj13j.js} +1 -1
  78. package/dist/client/assets/{index-WmCG_KTe.js → index-DiyP0mWl.js} +1 -1
  79. package/dist/client/assets/{index-CQt4AtFf.js → index-Dryqe2qH.js} +1 -1
  80. package/dist/client/assets/{index-Dr6IDlb4.js → index-Dut1OOHD.js} +1 -1
  81. package/dist/client/assets/{index-DaJv4rHK.js → index-e_WCxTHQ.js} +1 -1
  82. package/dist/client/assets/{index-DrSdTiwb.js → index-oAITNDIl.js} +1 -1
  83. package/dist/client/assets/{index-CFLlOXkv.js → index-rkDSwq1t.js} +1 -1
  84. package/dist/client/assets/{index-CuVGQGX3.js → index-udLCY52f.js} +1 -1
  85. package/dist/client/assets/{infiniteQueryObserver-Cp4HH66i.js → infiniteQueryObserver-BPb1dFhQ.js} +1 -1
  86. package/dist/client/assets/{input-AQP4T9xe.js → input-_x-qoZqG.js} +1 -1
  87. package/dist/client/assets/{integration-icon-CdA3xzg3.js → integration-icon-CBWiTcFM.js} +1 -1
  88. package/dist/client/assets/{label-C8LpQh8Q.js → label-FeiT4-LA.js} +1 -1
  89. package/dist/client/assets/{layout-BHftN2cN.js → layout-j3UyPUZl.js} +1 -1
  90. package/dist/client/assets/{lean-canvas-recruit-modal-CW_p90EQ.js → lean-canvas-recruit-modal-AdHH96Pz.js} +1 -1
  91. package/dist/client/assets/{login-cQRRHPKJ.js → login-CQ1sw4Og.js} +1 -1
  92. package/dist/client/assets/{members-oD32fKCk.js → members-DgCBAzk4.js} +1 -1
  93. package/dist/client/assets/{monaco-editor-0eY4s_n8.js → monaco-editor-RpC6COeN.js} +1 -1
  94. package/dist/client/assets/{monitoring-stats-row-yU9BWynr.js → monitoring-stats-row-BpUJoO_T.js} +1 -1
  95. package/dist/client/assets/{oauth-callback-qNrnCHn7.js → oauth-callback-CrzoeptP.js} +1 -1
  96. package/dist/client/assets/{oauth-callback-ai-provider-JWUJcuot.js → oauth-callback-ai-provider-CCIE7j_l.js} +1 -1
  97. package/dist/client/assets/{onboarding-Csd238y5.js → onboarding-BAQp9DvG.js} +1 -1
  98. package/dist/client/assets/{org-layout-COUnT52o.js → org-layout-44rYb1sc.js} +1 -1
  99. package/dist/client/assets/{org-plugin-layout-HVrYmP0h.js → org-plugin-layout-DSXF2qdf.js} +1 -1
  100. package/dist/client/assets/{pair-H3vGRUJ8.js → pair-DEl8UPeD.js} +1 -1
  101. package/dist/client/assets/{plugin-empty-state-D0IVOQOh.js → plugin-empty-state-22doZ0Xz.js} +1 -1
  102. package/dist/client/assets/{plugin-header-BHkekk5v.js → plugin-header-ByTelm9S.js} +1 -1
  103. package/dist/client/assets/{plugin-layout-1tZ95Fop.js → plugin-layout-BO64c4_C.js} +1 -1
  104. package/dist/client/assets/{popover-S0LP8OED.js → popover-BhlghMMz.js} +1 -1
  105. package/dist/client/assets/{profile-BeEbm_se.js → profile-CSGEFgSz.js} +1 -1
  106. package/dist/client/assets/{project-app-view-DzAnv0Fk.js → project-app-view-B_RELaVP.js} +1 -1
  107. package/dist/client/assets/registry-CYqJhZV_.js +2 -0
  108. package/dist/client/assets/{registry-layout-DXYTYBKQ.js → registry-layout-JuLTsFQQ.js} +1 -1
  109. package/dist/client/assets/{required-auth-layout-BGBHukmi.js → required-auth-layout-oACSrwiy.js} +1 -1
  110. package/dist/client/assets/{reset-password-C-9QuQII.js → reset-password-CW7woRPX.js} +1 -1
  111. package/dist/client/assets/{roles-Dte8-9_k.js → roles-5CKHHGAZ.js} +1 -1
  112. package/dist/client/assets/{scroll-area-BtbNdEg9.js → scroll-area-BV26X1QC.js} +1 -1
  113. package/dist/client/assets/{search-input-K74_hIzk.js → search-input-ms-0SUW_.js} +1 -1
  114. package/dist/client/assets/{select-CKY9FB0z.js → select-CswVooY0.js} +1 -1
  115. package/dist/client/assets/{select-model-CuDUx7az.js → select-model-CStSTDOz.js} +1 -1
  116. package/dist/client/assets/{settings-layout-D2D4BwFh.js → settings-layout-B420oRcP.js} +1 -1
  117. package/dist/client/assets/{settings-section-DVNeioQ5.js → settings-section-D7ZcS52Q.js} +1 -1
  118. package/dist/client/assets/{shell-layout-CvVEyxri.js → shell-layout-COliHXDZ.js} +1 -1
  119. package/dist/client/assets/{skeleton-C6ls5pwO.js → skeleton-DI0MCO1l.js} +1 -1
  120. package/dist/client/assets/{sso-Cf_l8jfK.js → sso-CrvD6OU3.js} +1 -1
  121. package/dist/client/assets/{store-ycJgiobO.js → store-DfNnoMeC.js} +1 -1
  122. package/dist/client/assets/store-registry-BYofPeIK.js +2 -0
  123. package/dist/client/assets/{switch-W3XCBtER.js → switch-BrC-TZom.js} +1 -1
  124. package/dist/client/assets/{table-AOuQ6q7A.js → table-G8ogXBrQ.js} +1 -1
  125. package/dist/client/assets/{tabs-UNZgkDVa.js → tabs-Bf_8xBry.js} +1 -1
  126. package/dist/client/assets/{task-status-DEy7r9PX.js → task-status-DWZ1hcva.js} +1 -1
  127. package/dist/client/assets/{textarea-DmqjpSXj.js → textarea-C2oNfWH0.js} +1 -1
  128. package/dist/client/assets/{toggle-group-BST-Moxg.js → toggle-group-TNheR1D8.js} +1 -1
  129. package/dist/client/assets/{tools-list-DRBrcsE2.js → tools-list-B5eTdBpN.js} +1 -1
  130. package/dist/client/assets/{tooltip-CgLjXWRO.js → tooltip-CXr14ebZ.js} +1 -1
  131. package/dist/client/assets/{types-Di7lU1Th.js → types-EFCIzOpO.js} +1 -1
  132. package/dist/client/assets/{use-ai-providers-DWoG_MfI.js → use-ai-providers-BsokjkVR.js} +1 -1
  133. package/dist/client/assets/{use-collections-Bd7RNZWG.js → use-collections-Dn-RqPYg.js} +1 -1
  134. package/dist/client/assets/{use-connection-B1IAOygg.js → use-connection-5ik_QQbi.js} +1 -1
  135. package/dist/client/assets/{use-copy-Qz-6rwiI.js → use-copy-BfAEU9NO.js} +1 -1
  136. package/dist/client/assets/{use-create-virtual-mcp-CsXnKbT4.js → use-create-virtual-mcp-fVwDTjUO.js} +1 -1
  137. package/dist/client/assets/{use-decopilot-events-C9UMGLNG.js → use-decopilot-events-C5dCU4fI.js} +1 -1
  138. package/dist/client/assets/{use-delete-connection-DIB-wCzR.js → use-delete-connection-r8ffcG8U.js} +1 -1
  139. package/dist/client/assets/{use-infinite-scroll-DDdJV0pS.js → use-infinite-scroll-tkYaCIKm.js} +1 -1
  140. package/dist/client/assets/{use-list-state-DUZFsckk.js → use-list-state-Di2rvhMn.js} +1 -1
  141. package/dist/client/assets/{use-mcp-tools-Hk3B3FPL.js → use-mcp-tools-DyFsytRR.js} +1 -1
  142. package/dist/client/assets/{use-members-Kof7B7_B.js → use-members-DIX6nSMY.js} +1 -1
  143. package/dist/client/assets/{use-navigate-to-agent-BAjrVRkm.js → use-navigate-to-agent-Z7fkkD5K.js} +1 -1
  144. package/dist/client/assets/{use-org-auth-client-PM4Bq5B4.js → use-org-auth-client-DZX0Z5cG.js} +1 -1
  145. package/dist/client/assets/{use-org-sso-CsdEJaGH.js → use-org-sso-DpWan0ZR.js} +1 -1
  146. package/dist/client/assets/{use-organization-roles-CK4jCoPY.js → use-organization-roles-Dw_EZ-oj.js} +1 -1
  147. package/dist/client/assets/{use-organization-settings-BjQPxEXx.js → use-organization-settings-0hZMyBeX.js} +1 -1
  148. package/dist/client/assets/{use-registry-connections-Bc9Jz_l9.js → use-registry-connections-Bn-4-RDt.js} +1 -1
  149. package/dist/client/assets/{use-status-sounds-B-dcjykj.js → use-status-sounds-CwuuISMS.js} +1 -1
  150. package/dist/client/assets/{use-tasks-DNXvD3d-.js → use-tasks-oBeHrmLh.js} +1 -1
  151. package/dist/client/assets/{use-view-mode-B-PzbH7u.js → use-view-mode-BjlcvVOS.js} +1 -1
  152. package/dist/client/assets/{use-virtual-mcp-BKDZ5Y53.js → use-virtual-mcp-S7caS2Os.js} +1 -1
  153. package/dist/client/assets/useInfiniteQuery-CIF5ZhDW.js +1 -0
  154. package/dist/client/assets/useSuspenseInfiniteQuery-BIQTAzoK.js +1 -0
  155. package/dist/client/assets/{user-Dx0-Sx0Q.js → user-Bf4WlHoU.js} +1 -1
  156. package/dist/client/assets/{view-mode-toggle-Cdvf7aEz.js → view-mode-toggle-CgBfTDfx.js} +1 -1
  157. package/dist/client/assets/{workflow-By0QNvDh.js → workflow-DGmBrUmA.js} +1 -1
  158. package/dist/client/assets/workflow-detail-Dwa4aK51.js +1 -0
  159. package/dist/client/index.html +1 -1
  160. package/dist/server/cli.js +2 -2
  161. package/dist/server/node_modules/postgres-array/index.d.ts +4 -0
  162. package/dist/server/node_modules/postgres-array/index.js +97 -0
  163. package/dist/server/node_modules/postgres-array/license +21 -0
  164. package/dist/server/node_modules/postgres-array/package.json +35 -0
  165. package/dist/server/node_modules/postgres-array/readme.md +43 -0
  166. package/dist/server/node_modules/postgres-bytea/index.js +33 -0
  167. package/dist/server/node_modules/postgres-bytea/license +21 -0
  168. package/dist/server/node_modules/postgres-bytea/package.json +34 -0
  169. package/dist/server/node_modules/postgres-bytea/readme.md +34 -0
  170. package/dist/server/node_modules/split2/LICENSE +13 -0
  171. package/dist/server/node_modules/split2/README.md +85 -0
  172. package/dist/server/node_modules/split2/bench.js +27 -0
  173. package/dist/server/node_modules/split2/index.js +141 -0
  174. package/dist/server/node_modules/split2/package.json +39 -0
  175. package/dist/server/node_modules/split2/test.js +409 -0
  176. package/dist/server/node_modules/xtend/.jshintrc +30 -0
  177. package/dist/server/node_modules/xtend/LICENSE +20 -0
  178. package/dist/server/node_modules/xtend/README.md +32 -0
  179. package/dist/server/node_modules/xtend/immutable.js +19 -0
  180. package/dist/server/node_modules/xtend/mutable.js +17 -0
  181. package/dist/server/node_modules/xtend/package.json +55 -0
  182. package/dist/server/node_modules/xtend/test.js +103 -0
  183. package/dist/server/server.js +108 -108
  184. package/package.json +1 -1
  185. package/dist/client/assets/ai-providers-tmdoxB8w.js +0 -1
  186. package/dist/client/assets/index-CckfzoQo.js +0 -1
  187. package/dist/client/assets/registry-B3IZW-Zn.js +0 -2
  188. package/dist/client/assets/store-registry-Cvg5AsGu.js +0 -2
  189. package/dist/client/assets/useInfiniteQuery-CbEWL_0E.js +0 -1
  190. package/dist/client/assets/useSuspenseInfiniteQuery-_KsFhI9-.js +0 -1
  191. package/dist/client/assets/workflow-detail-Bv06QqfF.js +0 -1
  192. package/dist/server/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  193. package/dist/server/node_modules/is-fullwidth-code-point/index.js +0 -12
  194. package/dist/server/node_modules/is-fullwidth-code-point/license +0 -9
  195. package/dist/server/node_modules/is-fullwidth-code-point/package.json +0 -53
  196. package/dist/server/node_modules/is-fullwidth-code-point/readme.md +0 -31
  197. package/dist/server/node_modules/slice-ansi/index.d.ts +0 -19
  198. package/dist/server/node_modules/slice-ansi/index.js +0 -260
  199. package/dist/server/node_modules/slice-ansi/license +0 -10
  200. package/dist/server/node_modules/slice-ansi/package.json +0 -59
  201. package/dist/server/node_modules/slice-ansi/readme.md +0 -54
  202. package/dist/server/node_modules/slice-ansi/tokenize-ansi.js +0 -752
@@ -1623,7 +1623,7 @@ AS SELECT
1623
1623
  FROM monitoring_metrics
1624
1624
  GROUP BY organization_id, name, bucket, connection_id, tool_name, status
1625
1625
  `}),console.log("[clickhouse-schema] monitoring_metrics_rollup_1m_mv view ready")}finally{await G.close()}}catch(Y){console.error("[clickhouse-schema] Failed to create rollup DDL (queries will fall back to raw table):",Y)}}async function OA1(X){let Y={...process.env},G=T$1(X,Y),Q=G.settings.encryptionKey;console.log(`[settings] ENCRYPTION_KEY = ${JSON.stringify(Q)} (${Q.length} chars)`);let{ensureServices:J}=await Promise.resolve().then(() => (w$1(),D$1)),{outputs:W,services:Z}=await J({home:G.settings.dataDir,externalDatabaseUrl:G.externalDatabaseUrl,externalNatsUrl:G.externalNatsUrl});if(!G.skipMigrations){let{migrateBetterAuth:K}=await Promise.resolve().then(() => (X30(),Nx4));await K(W.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (GU(),Bx4)),{migrateToLatest:U}=await Promise.resolve().then(() => (Er4(),Lr4)),B=H(W.databaseUrl);await U({keepOpen:!0,database:B,skipBetterAuth:!0})}if(G.settings.clickhouseUrl){let{ensureClickHouseRollup:K}=await Promise.resolve().then(() => Ps4);await K(G.settings.clickhouseUrl)}let $={...G.settings,databaseUrl:W.databaseUrl,natsUrls:W.natsUrls};return xn1($),{settings:$,services:Z.map((K)=>({name:K.name==="PostgreSQL"?"Postgres":K.name,port:K.port})),managedServiceNames:Z.filter((K)=>K.owner==="managed").map((K)=>K.name)}}var MB0=D(()=>{yn1();l9()});var LA1={};V0(LA1,{updateService:()=>rt,toggleViewMode:()=>SB0,toggleVibeState:()=>CB0,toggleLogFlow:()=>kB0,subscribeCliState:()=>LX1,setVibe:()=>Yp5,setTuiConsoleIntercepted:()=>DA1,setServerUrl:()=>PX1,setMigrationsDone:()=>EX1,setEnv:()=>qX1,setDevMode:()=>ei5,setDataDir:()=>Xp5,isTuiConsoleIntercepted:()=>wA1,getCliState:()=>wX1,addLogEntry:()=>Zz});function PU(){for(let X of RB0)X()}function wX1(){return X7}function LX1(X){return RB0.add(X),()=>RB0.delete(X)}function rt(X){X7={...X7,services:X7.services.map((Y)=>Y.name===X.name?X:Y)},PU()}function EX1(){X7={...X7,migrationsStatus:"done"},PU()}function PX1(X){X7={...X7,serverUrl:X},PU()}function qX1(X){X7={...X7,env:X},PU()}function Zz(X){let Y=[...X7.logs,X];X7={...X7,logs:Y.length>500?Y.slice(-500):Y},PU()}function ei5(){X7={...X7,services:[...X7.services,{name:"Vite",status:"pending",port:0}]},PU()}function SB0(){X7={...X7,viewMode:X7.viewMode==="requests"?"config":"requests"},PU()}function kB0(){X7={...X7,logFlow:!X7.logFlow},PU()}function Xp5(X){X7={...X7,dataDir:X},PU()}function Yp5(X){X7={...X7,vibe:X},PU()}function CB0(){X7={...X7,vibe:!X7.vibe},PU()}function DA1(X){qs4=X}function wA1(){return qs4}var X7,RB0,qs4=!1;var Wz=D(()=>{X7={services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,env:null,logs:[],viewMode:"requests",logFlow:!1,vibe:!1,dataDir:null},RB0=new Set});import{createServer as As4}from"net";function Gp5(X){return new Promise((Y)=>{let G=As4();G.once("error",()=>Y(!1)),G.listen(X,"0.0.0.0",()=>{G.close(()=>Y(!0))})})}async function EA1(X){if(await Gp5(X))return X;let Y=await new Promise((G,Q)=>{let J=As4();J.once("error",Q),J.listen(0,"0.0.0.0",()=>{let W=J.address(),Z=typeof W==="object"&&W?W.port:0;J.close(()=>G(Z))})});return console.warn(`Port ${X} is in use, using port ${Y} instead.`),Y}var vB0=()=>{};var _B0={};V0(_B0,{startDevServer:()=>Jp5});import{join as Qp5}from"path";function Ts4(X){return X.replace(/\x1b\[[0-9;]*m/g,"")}function Is4(X){let Y=X.getReader(),G=new TextDecoder,Q="";function J(){let W=Q.split(`
1626
- `);Q=W.pop()??"";for(let Z of W){let $=Ts4(Z).replace(/^\[\d+\]\s*/,"").trim();if(!$)continue;Zz({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}(async()=>{for(;;){let{done:W,value:Z}=await Y.read();if(W)break;Q+=G.decode(Z,{stream:!0}),J()}if(Q.trim()){let W=Ts4(Q).replace(/^\[\d+\]\s*/,"").trim();if(W)Zz({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:W})}})()}async function Jp5(X){let{vitePort:Y,baseUrl:G,noTui:Q}=X,J=await EA1(Number(X.port)),{settings:W,services:Z,managedServiceNames:$}=await OA1({port:String(J),home:X.home,baseUrl:X.baseUrl,localMode:X.localMode,skipMigrations:X.skipMigrations,noTui:X.noTui,vitePort:X.vitePort});for(let z of Z)rt({name:z.name,status:"ready",port:z.port});qX1(W),EX1();let K=Qp5(import.meta.dir,"..","..","..","..",".."),H=Q===!0,U=Bun.spawn(["bun","run","--cwd=apps/mesh","dev:servers"],{cwd:K,env:{...process.env,PORT:String(W.port),VITE_PORT:String(Y),DATABASE_URL:W.databaseUrl,NATS_URL:W.natsUrls.join(","),NODE_ENV:W.nodeEnv,DECOCMS_LOCAL_MODE:String(W.localMode),DECOCMS_HOME:W.dataDir,DATA_DIR:W.dataDir,DECO_CLI:"1",...W.baseUrl?{BASE_URL:W.baseUrl}:{}},stdio:["inherit",H?"inherit":"pipe",H?"inherit":"pipe"]});if(!H)Is4(U.stdout),Is4(U.stderr);let B=G||`http://localhost:${W.port}`;PX1(B),rt({name:"Vite",status:"ready",port:Number(Y)});let N=async(z)=>{if(U.kill(z),$.length>0){let{stopServices:O}=await Promise.resolve().then(() => (w$1(),D$1));await O(W.dataDir)}};return process.on("SIGINT",()=>N("SIGINT")),process.on("SIGTERM",()=>N("SIGTERM")),{port:Number(W.port),process:U}}var fB0=D(()=>{MB0();Wz();vB0()});import{Box as bB0,Text as yB0}from"ink";import{jsx as Vs4,jsxs as PA1}from"react/jsx-runtime";function js4(X){if(!X)return"not set";try{let Y=new URL(X);if(Y.password)Y.password="***";if(Y.username&&Y.username.length>3)Y.username=Y.username.slice(0,3)+"***";return Y.pathname="/",Y.search="",Y.hash="",Y.toString()}catch{if(X.length<=10)return X;return X.slice(0,6)+"***"+X.slice(-4)}}function $p5(X,Y){if(Zp5.has(X))return Y?{text:"\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF",dimColor:!0}:{text:"not set",dimColor:!0};if(Wp5.has(X)){if(Array.isArray(Y)){if(Y.length===0)return{text:"not set",dimColor:!0};return{text:Y.map((W)=>js4(W)).join(", "),color:"cyan"}}let Q=js4(Y);return Q==="not set"?{text:Q,dimColor:!0}:{text:Q,color:"cyan"}}if(Y===void 0||Y===null||Y==="")return{text:"not set",dimColor:!0};let G=String(Y);if(G==="true")return{text:G,color:"green"};if(G==="false")return{text:G,color:"yellow"};try{return new URL(G),{text:G,color:"cyan"}}catch{return{text:G}}}function Kp5(X){return[{title:"Core",entries:[{key:"NODE_ENV",value:X.nodeEnv},{key:"PORT",value:X.port},{key:"BASE_URL",value:X.baseUrl??`http://localhost:${X.port}`},{key:"DATA_DIR",value:X.dataDir}]},{title:"Database",entries:[{key:"DATABASE_URL",value:X.databaseUrl},{key:"DATABASE_PG_SSL",value:X.databasePgSsl}]},{title:"Auth & Secrets",entries:[{key:"BETTER_AUTH_SECRET",value:X.betterAuthSecret},{key:"ENCRYPTION_KEY",value:X.encryptionKey},{key:"MESH_JWT_SECRET",value:X.meshJwtSecret},{key:"STUDIO_PROVISION_SECRET_KEY",value:X.studioProvisionSecretKey},{key:"DISABLE_RATE_LIMIT",value:X.disableRateLimit}]},{title:"Auth Providers",entries:[{key:"AUTH_EMAIL_PASSWORD_ENABLED",value:process.env.AUTH_EMAIL_PASSWORD_ENABLED??"true"},{key:"AUTH_GOOGLE_CLIENT_ID",value:!!process.env.AUTH_GOOGLE_CLIENT_ID},{key:"AUTH_GITHUB_CLIENT_ID",value:!!process.env.AUTH_GITHUB_CLIENT_ID},{key:"AUTH_RESEND_API_KEY",value:!!process.env.AUTH_RESEND_API_KEY},{key:"AUTH_SENDGRID_API_KEY",value:!!process.env.AUTH_SENDGRID_API_KEY},{key:"AUTH_SSO_MS_CLIENT_ID",value:!!process.env.AUTH_SSO_MS_CLIENT_ID},{key:"AUTH_MAGIC_LINK_ENABLED",value:process.env.AUTH_MAGIC_LINK_ENABLED==="true"},{key:"AUTH_EMAIL_OTP_ENABLED",value:process.env.AUTH_EMAIL_OTP_ENABLED==="true"}]},{title:"Observability",entries:[{key:"CLICKHOUSE_URL",value:X.clickhouseUrl},{key:"OTEL_SERVICE_NAME",value:X.otelServiceName}]},{title:"Event Bus & Networking",entries:[{key:"NATS_URL",value:X.natsUrls}]},{title:"Config Files",entries:[{key:"CONFIG_PATH",value:X.configPath}]},{title:"AI Gateway",entries:[{key:"DECO_AI_GATEWAY_ENABLED",value:X.aiGatewayEnabled},{key:"DECO_AI_GATEWAY_URL",value:X.aiGatewayUrl}]}]}function Ms4({env:X}){let Y=Kp5(X);return Vs4(bB0,{flexDirection:"column",children:Y.map((G)=>PA1(bB0,{flexDirection:"column",marginTop:1,children:[PA1(yB0,{dimColor:!0,children:[" ","\u2500\u2500 ",G.title," ","\u2500".repeat(Math.max(0,38-G.title.length))]}),G.entries.map(({key:Q,value:J})=>{let W=$p5(Q,J);return PA1(bB0,{children:[PA1(yB0,{dimColor:!0,children:[" ",Q.padEnd(36)]}),Vs4(yB0,{color:W.color,dimColor:W.dimColor,children:W.text})]},Q)})]},G.title))})}var Zp5,Wp5;var Rs4=D(()=>{Zp5=new Set(["BETTER_AUTH_SECRET","ENCRYPTION_KEY","MESH_JWT_SECRET","STUDIO_PROVISION_SECRET_KEY"]),Wp5=new Set(["DATABASE_URL","CLICKHOUSE_URL","NATS_URL"])});var xB0;var Ss4=D(()=>{xB0={name:"decocms",version:"2.300.4",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"bun --bun vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1","@freestyle-sh/with-bun":"^0.2.12","@freestyle-sh/with-deno":"^0.0.4","@freestyle-sh/with-nodejs":"^0.2.9","freestyle-sandboxes":"^0.1.46"},dependencies:{"@ai-sdk/anthropic":"^3.0.58","@ai-sdk/google":"^3.0.60","@ai-sdk/openai":"^3.0.50","@anthropic-ai/sdk":"^0.79.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.2.2","@openrouter/ai-sdk-provider":"^2.2.5","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"^3.13.21","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","ai-sdk-provider-claude-code":"^3.4.4","ai-sdk-provider-codex-cli":"^1.1.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.0","react-dom":"^19.2.0"},devDependencies:{"@ai-sdk/provider":"^3.0.8","@ai-sdk/react":"^3.0.118","@anthropic-ai/claude-agent-sdk":"^0.2.80","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/vite-plugin":"workspace:*","@electric-sql/pglite":"^0.3.15","@floating-ui/react":"^0.27.16","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.27.1","@monaco-editor/react":"^4.7.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.90.11","@tanstack/react-router":"^1.139.7","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.116","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.5","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","kysely-pglite":"^0.6.1","lucide-react":"^0.468.0",marked:"^15.0.6","@decocms/sandbox":"workspace:*","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as qU,Text as RX}from"ink";import{Spinner as Fp5}from"@inkjs/ui";import{useSyncExternalStore as ks4}from"react";import{jsx as AY,jsxs as oQ}from"react/jsx-runtime";function Op5(X,Y){if(!X||!zp5.has(X))return X;let G=hB0[Y]??hB0[hB0.length-1];return X==="#875f00"?G[0]:G[1]}function Cs4({status:X}){if(X==="pending")return AY(Fp5,{label:""});return AY(RX,{color:"green",children:"\u2713"})}function vs4({services:X,migrationsStatus:Y,home:G,serverUrl:Q,vibe:J}){let W=ks4(eu0,su0),Z=ks4(Zl0,Jl0);return oQ(qU,{flexDirection:"column",paddingBottom:1,children:[J?oQ(qU,{flexDirection:"column",children:[W.map(($,K)=>{let H=Z[K],U=$.reduce((N,z)=>N+z.text.length,0),B=Math.max(0,Np5-U);return oQ(qU,{flexDirection:"row",children:[$.map((N,z)=>{let O=Op5(N.color,K);return O?AY(RX,{color:O,children:N.text},z):AY(RX,{children:N.text},z)}),AY(RX,{children:" ".repeat(B+2)}),H?.map((N,z)=>N.color?AY(RX,{color:N.color,children:N.char},z):AY(RX,{children:N.char},z))]},K)}),oQ(RX,{dimColor:!0,children:[" v",xB0.version]})]}):oQ(qU,{flexDirection:"column",marginTop:1,children:[Up5.map(($,K)=>AY(RX,{color:Bp5[K],children:$},K)),oQ(RX,{dimColor:!0,children:[" v",xB0.version]})]}),AY(qU,{marginBottom:1,children:AY(RX,{dimColor:!0,children:"\u2500".repeat(80)})}),AY(qU,{children:oQ(RX,{dimColor:!0,children:["Home: ",G]})}),oQ(qU,{gap:2,children:[X.map(($)=>oQ(qU,{gap:1,children:[oQ(RX,{children:[$.name," :",$.port||"...."]}),AY(Cs4,{status:$.status})]},$.name)),oQ(qU,{gap:1,children:[AY(RX,{children:"Migrations"}),AY(Cs4,{status:Y})]})]}),AY(qU,{children:Q?oQ(RX,{children:["Open in browser: ",AY(RX,{color:"cyan",children:Q})]}):AY(RX,{dimColor:!0,children:"Starting..."})}),oQ(qU,{gap:2,children:[oQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"K"})," ","toggle config"]}),oQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"L"})," ","toggle log flow"]}),oQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"V"})," ","toggle vibe ",J?"\u266A Nihilore \xB7 CC BY 4.0":""]}),J&&oQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"N"})," ","skip song"]})]})]})}var Up5,Bp5,hB0,Np5=30,zp5;var _s4=D(()=>{Ss4();jn1();Cn1();Up5=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],Bp5=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"],hB0=[["#00ff64","#00cc50"],["#00f060","#00c04c"],["#00e05c","#00b448"],["#00d058","#00a844"],["#00c054","#009c40"],["#00b050","#00903c"],["#00a04c","#008438"],["#009048","#007834"],["#008044","#006c30"],["#007040","#00602c"],["#00603c","#005428"]],zp5=new Set(["#875f00","#5f3800"])});import{useSyncExternalStore as Dp5}from"react";function wp5(){let X=process.stdout.rows||24,Y=process.stdout.columns||80;if(X!==qA1.rows||Y!==qA1.columns)qA1={rows:X,columns:Y};return qA1}function Lp5(X){return process.stdout.on("resize",X),()=>{process.stdout.off("resize",X)}}function fs4(){return Dp5(Lp5,wp5)}var qA1;var bs4=D(()=>{qA1={rows:process.stdout.rows||24,columns:process.stdout.columns||80}});import{Box as Ep5,Text as AX1}from"ink";import{useSyncExternalStore as Pp5}from"react";import{jsx as gB0,jsxs as uB0}from"react/jsx-runtime";function qp5(X){if(X>=500)return"red";if(X>=400)return"yellow";if(X>=300)return"cyan";return"green"}function ys4({logs:X,headerHeight:Y}){let{rows:G}=fs4(),{logFlow:Q}=Pp5(LX1,wX1),J=Math.max(1,G-Y-1),W=Q?X:X.slice(-J);return gB0(Ep5,{flexDirection:"column",children:W.map((Z,$)=>{if(Z.rawLine)return gB0(AX1,{dimColor:!0,children:Z.rawLine},$);let K=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return uB0(AX1,{children:[uB0(AX1,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),gB0(AX1,{color:qp5(Z.status),children:Z.status}),uB0(AX1,{dimColor:!0,children:[" ",K.padStart(8)]})]},$)})})}var xs4=D(()=>{Wz();bs4()});var lB0={};V0(lB0,{App:()=>Rp5});import{Box as Ap5,Text as Tp5,useInput as Ip5}from"ink";import{useSyncExternalStore as jp5}from"react";import{jsx as AA1,jsxs as Sp5}from"react/jsx-runtime";function Rp5({home:X}){let Y=jp5(LX1,wX1);return Ip5((G)=>{if(G==="k"||G==="K")SB0();if(G==="l"||G==="L")kB0();if((G==="v"||G==="V")&&Y.dataDir)bn1(Y.dataDir),CB0();if((G==="n"||G==="N")&&Y.vibe)fn1()}),Sp5(Ap5,{flexDirection:"column",children:[AA1(vs4,{services:Y.services,migrationsStatus:Y.migrationsStatus,home:X,serverUrl:Y.serverUrl,vibe:Y.vibe}),Y.viewMode==="config"?Y.env?AA1(Ms4,{env:Y.env}):AA1(Tp5,{dimColor:!0,children:"Loading configuration..."}):AA1(ys4,{logs:Y.logs,headerHeight:Y.vibe?Mp5:Vp5})]})}var Vp5=15,Mp5=19;var mB0=D(()=>{Rs4();_s4();xs4();Wz();Sd()});function hs4(X,Y={}){return{PORT:String(X.port),NODE_ENV:X.nodeEnv,BASE_URL:X.baseUrl,DATA_DIR:X.dataDir,DECOCMS_HOME:X.dataDir,DATABASE_URL:X.databaseUrl,DATABASE_PG_SSL:String(X.databasePgSsl),DATABASE_POOL_MAX:String(X.databasePoolMax),NATS_URL:X.natsUrls.join(","),BETTER_AUTH_SECRET:X.betterAuthSecret,ENCRYPTION_KEY:X.encryptionKey,MESH_JWT_SECRET:X.meshJwtSecret,DECOCMS_LOCAL_MODE:String(X.localMode),DISABLE_RATE_LIMIT:String(X.disableRateLimit),STUDIO_PROVISION_SECRET_KEY:X.studioProvisionSecretKey,CONFIG_PATH:X.configPath,...Object.fromEntries(Object.entries(process.env).filter(([G])=>G.startsWith("AUTH_"))),DECO_AI_GATEWAY_ENABLED:String(X.aiGatewayEnabled),DECO_AI_GATEWAY_URL:X.aiGatewayUrl,ENABLE_DECO_IMPORT:String(X.enableDecoImport),S3_ENDPOINT:X.s3Endpoint,S3_BUCKET:X.s3Bucket,S3_REGION:X.s3Region,S3_ACCESS_KEY_ID:X.s3AccessKeyId,S3_SECRET_ACCESS_KEY:X.s3SecretAccessKey,S3_FORCE_PATH_STYLE:String(X.s3ForcePathStyle),OTEL_SERVICE_NAME:X.otelServiceName,CLICKHOUSE_URL:X.clickhouseUrl,DECO_SUPABASE_URL:X.decoSupabaseUrl,DECO_SUPABASE_SERVICE_KEY:X.decoSupabaseServiceKey,FIRECRAWL_API_KEY:X.firecrawlApiKey,STUDIO_SANDBOX_RUNNER:process.env.STUDIO_SANDBOX_RUNNER,STUDIO_SANDBOX_TEMPLATE_NAME:process.env.STUDIO_SANDBOX_TEMPLATE_NAME,STUDIO_ENV:process.env.STUDIO_ENV,STUDIO_SANDBOX_PREVIEW_URL_PATTERN:process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE,STUDIO_SANDBOX_SENTINEL_TOKEN:process.env.STUDIO_SANDBOX_SENTINEL_TOKEN,KUBERNETES_SERVICE_HOST:process.env.KUBERNETES_SERVICE_HOST,KUBERNETES_SERVICE_PORT:process.env.KUBERNETES_SERVICE_PORT,FREESTYLE_API_KEY:process.env.FREESTYLE_API_KEY,BROWSERLESS_TOKEN:process.env.BROWSERLESS_TOKEN,NODE_EXTRA_CA_CERTS:process.env.NODE_EXTRA_CA_CERTS,DECO_CLI:"1",DECO_NO_TUI:"true",...Y}}var vV=k((bp5)=>{bp5.HttpAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(bp5.HttpAuthLocation||(bp5.HttpAuthLocation={}));bp5.HttpApiKeyAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(bp5.HttpApiKeyAuthLocation||(bp5.HttpApiKeyAuthLocation={}));bp5.EndpointURLScheme=void 0;(function(X){X.HTTP="http",X.HTTPS="https"})(bp5.EndpointURLScheme||(bp5.EndpointURLScheme={}));bp5.AlgorithmId=void 0;(function(X){X.MD5="md5",X.CRC32="crc32",X.CRC32C="crc32c",X.SHA1="sha1",X.SHA256="sha256"})(bp5.AlgorithmId||(bp5.AlgorithmId={}));var kp5=(X)=>{let Y=[];if(X.sha256!==void 0)Y.push({algorithmId:()=>bp5.AlgorithmId.SHA256,checksumConstructor:()=>X.sha256});if(X.md5!=null)Y.push({algorithmId:()=>bp5.AlgorithmId.MD5,checksumConstructor:()=>X.md5});return{addChecksumAlgorithm(G){Y.push(G)},checksumAlgorithms(){return Y}}},Cp5=(X)=>{let Y={};return X.checksumAlgorithms().forEach((G)=>{Y[G.algorithmId()]=G.checksumConstructor()}),Y},vp5=(X)=>{return kp5(X)},_p5=(X)=>{return Cp5(X)};bp5.FieldPosition=void 0;(function(X){X[X.HEADER=0]="HEADER",X[X.TRAILER=1]="TRAILER"})(bp5.FieldPosition||(bp5.FieldPosition={}));var fp5="__smithy_context";bp5.IniSectionType=void 0;(function(X){X.PROFILE="profile",X.SSO_SESSION="sso-session",X.SERVICES="services"})(bp5.IniSectionType||(bp5.IniSectionType={}));bp5.RequestHandlerProtocol=void 0;(function(X){X.HTTP_0_9="http/0.9",X.HTTP_1_0="http/1.0",X.TDS_8_0="tds/8.0"})(bp5.RequestHandlerProtocol||(bp5.RequestHandlerProtocol={}));bp5.SMITHY_CONTEXT_KEY=fp5;bp5.getDefaultClientConfiguration=vp5;bp5.resolveDefaultRuntimeConfig=_p5});var u7=k((cp5)=>{var gp5=vV(),up5=(X)=>{return{setHttpHandler(Y){X.httpHandler=Y},httpHandler(){return X.httpHandler},updateHttpClientConfig(Y,G){X.httpHandler?.updateHttpClientConfig(Y,G)},httpHandlerConfigs(){return X.httpHandler.httpHandlerConfigs()}}},lp5=(X)=>{return{httpHandler:X.httpHandler()}};class gs4{name;kind;values;constructor({name:X,kind:Y=gp5.FieldPosition.HEADER,values:G=[]}){this.name=X,this.kind=Y,this.values=G}add(X){this.values.push(X)}set(X){this.values=X}remove(X){this.values=this.values.filter((Y)=>Y!==X)}toString(){return this.values.map((X)=>X.includes(",")||X.includes(" ")?`"${X}"`:X).join(", ")}get(){return this.values}}class us4{entries={};encoding;constructor({fields:X=[],encoding:Y="utf-8"}){X.forEach(this.setField.bind(this)),this.encoding=Y}setField(X){this.entries[X.name.toLowerCase()]=X}getField(X){return this.entries[X.toLowerCase()]}removeField(X){delete this.entries[X.toLowerCase()]}getByType(X){return Object.values(this.entries).filter((Y)=>Y.kind===X)}}class TA1{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(X){this.method=X.method||"GET",this.hostname=X.hostname||"localhost",this.port=X.port,this.query=X.query||{},this.headers=X.headers||{},this.body=X.body,this.protocol=X.protocol?X.protocol.slice(-1)!==":"?`${X.protocol}:`:X.protocol:"https:",this.path=X.path?X.path.charAt(0)!=="/"?`/${X.path}`:X.path:"/",this.username=X.username,this.password=X.password,this.fragment=X.fragment}static clone(X){let Y=new TA1({...X,headers:{...X.headers}});if(Y.query)Y.query=mp5(Y.query);return Y}static isInstance(X){if(!X)return!1;let Y=X;return"method"in Y&&"protocol"in Y&&"hostname"in Y&&"path"in Y&&typeof Y.query==="object"&&typeof Y.headers==="object"}clone(){return TA1.clone(this)}}function mp5(X){return Object.keys(X).reduce((Y,G)=>{let Q=X[G];return{...Y,[G]:Array.isArray(Q)?[...Q]:Q}},{})}class ls4{statusCode;reason;headers;body;constructor(X){this.statusCode=X.statusCode,this.reason=X.reason,this.headers=X.headers||{},this.body=X.body}static isInstance(X){if(!X)return!1;let Y=X;return typeof Y.statusCode==="number"&&typeof Y.headers==="object"}}function dp5(X){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(X)}cp5.Field=gs4;cp5.Fields=us4;cp5.HttpRequest=TA1;cp5.HttpResponse=ls4;cp5.getHttpHandlerExtensionConfiguration=up5;cp5.isValidHostname=dp5;cp5.resolveHttpHandlerRuntimeConfig=lp5});function sp5(X){return(Y)=>async(G)=>{let{request:Q}=G;if(X.expectContinueHeader!==!1&&ms4.HttpRequest.isInstance(Q)&&Q.body&&X.runtime==="node"&&X.requestHandler?.constructor?.name!=="FetchHttpHandler"){let J=!0;if(typeof X.expectContinueHeader==="number")try{J=(Number(Q.headers?.["content-length"])??X.bodyLengthChecker?.(Q.body)??1/0)>=X.expectContinueHeader}catch(W){}else J=!!X.expectContinueHeader;if(J)Q.headers.Expect="100-continue"}return Y({...G,request:Q})}}var ms4,ep5,ds4=(X)=>({applyToStack:(Y)=>{Y.add(sp5(X),ep5)}});var cs4=D(()=>{ms4=Y1(u7(),1);ep5={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var OH,IA1,_V,jA1,E9,is4,IX1;var DH=D(()=>{OH={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},IA1=OH.WHEN_SUPPORTED,_V={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},jA1=OH.WHEN_SUPPORTED;(function(X){X.MD5="MD5",X.CRC32="CRC32",X.CRC32C="CRC32C",X.CRC64NVME="CRC64NVME",X.SHA1="SHA1",X.SHA256="SHA256"})(E9||(E9={}));(function(X){X.HEADER="header",X.TRAILER="trailer"})(is4||(is4={}));IX1=E9.CRC32});var Mq,ot=(X,Y,G,Q)=>{if(!(Y in X))return;let J=X[Y].toUpperCase();if(!Object.values(G).includes(J))throw TypeError(`Cannot load ${Q} '${Y}'. Expected one of ${Object.values(G)}, got '${X[Y]}'.`);return J};var aB0=D(()=>{(function(X){X.ENV="env",X.CONFIG="shared config entry"})(Mq||(Mq={}))});var Xn5="AWS_REQUEST_CHECKSUM_CALCULATION",Yn5="request_checksum_calculation",ps4;var ns4=D(()=>{DH();aB0();ps4={environmentVariableSelector:(X)=>ot(X,Xn5,OH,Mq.ENV),configFileSelector:(X)=>ot(X,Yn5,OH,Mq.CONFIG),default:IA1}});var Gn5="AWS_RESPONSE_CHECKSUM_VALIDATION",Qn5="response_checksum_validation",ts4;var as4=D(()=>{DH();aB0();ts4={environmentVariableSelector:(X)=>ot(X,Gn5,_V,Mq.ENV),configFileSelector:(X)=>ot(X,Qn5,_V,Mq.CONFIG),default:jA1}});var oB0=k((Nn5)=>{var Jn5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],Zn5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],Wn5=["TimeoutError","RequestTimeout","RequestTimeoutException"],$n5=[500,502,503,504],Kn5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],Hn5=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],rs4=(X)=>X?.$retryable!==void 0,Fn5=(X)=>Jn5.includes(X.name),os4=(X)=>X.$metadata?.clockSkewCorrected,ss4=(X)=>{let Y=new Set(["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Load failed","Network request failed"]);if(!(X&&X instanceof TypeError))return!1;return Y.has(X.message)},Un5=(X)=>X.$metadata?.httpStatusCode===429||Zn5.includes(X.name)||X.$retryable?.throttling==!0,rB0=(X,Y=0)=>rs4(X)||os4(X)||X.name==="InvalidSignatureException"&&X.message?.includes("Signature expired")||Wn5.includes(X.name)||Kn5.includes(X?.code||"")||Hn5.includes(X?.code||"")||$n5.includes(X.$metadata?.httpStatusCode||0)||ss4(X)||es4(X)||X.cause!==void 0&&Y<=10&&rB0(X.cause,Y+1),Bn5=(X)=>{if(X.$metadata?.httpStatusCode!==void 0){let Y=X.$metadata.httpStatusCode;if(500<=Y&&Y<=599&&!rB0(X))return!0;return!1}return!1};function es4(X){return X.code==="ERR_HTTP2_STREAM_ERROR"&&X.message.includes("NGHTTP2_REFUSED_STREAM")}Nn5.isBrowserNetworkError=ss4;Nn5.isClockSkewCorrectedError=os4;Nn5.isClockSkewError=Fn5;Nn5.isNodeJsHttp2TransientError=es4;Nn5.isRetryableByTrait=rs4;Nn5.isServerError=Bn5;Nn5.isThrottlingError=Un5;Nn5.isTransientError=rB0});var Ow=k((kn5)=>{var An5=oB0();kn5.RETRY_MODES=void 0;(function(X){X.STANDARD="standard",X.ADAPTIVE="adaptive"})(kn5.RETRY_MODES||(kn5.RETRY_MODES={}));var MA1=3,Tn5=kn5.RETRY_MODES.STANDARD;class RA1{static setTimeoutFn=setTimeout;beta;minCapacity;minFillRate;scaleConstant;smooth;enabled=!1;availableTokens=0;lastMaxRate=0;measuredTxRate=0;requestCount=0;fillRate;lastThrottleTime;lastTimestamp=0;lastTxRateBucket;maxCapacity;timeWindow=0;constructor(X){this.beta=X?.beta??0.7,this.minCapacity=X?.minCapacity??1,this.minFillRate=X?.minFillRate??0.5,this.scaleConstant=X?.scaleConstant??0.4,this.smooth=X?.smooth??0.8,this.lastThrottleTime=this.getCurrentTimeInSeconds(),this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}async getSendToken(){return this.acquireTokenBucket(1)}updateClientSendingRate(X){let Y;this.updateMeasuredRate();let G=X;if(G?.errorType==="THROTTLING"||An5.isThrottlingError(G?.error??X)){let W=!this.enabled?this.measuredTxRate:Math.min(this.measuredTxRate,this.fillRate);this.lastMaxRate=W,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),Y=this.cubicThrottle(W),this.enableTokenBucket()}else this.calculateTimeWindow(),Y=this.cubicSuccess(this.getCurrentTimeInSeconds());let J=Math.min(Y,2*this.measuredTxRate);this.updateTokenBucketRate(J)}getCurrentTimeInSeconds(){return Date.now()/1000}async acquireTokenBucket(X){if(!this.enabled)return;if(this.refillTokenBucket(),X>this.availableTokens){let Y=(X-this.availableTokens)/this.fillRate*1000;await new Promise((G)=>RA1.setTimeoutFn(G,Y))}this.availableTokens=this.availableTokens-X}refillTokenBucket(){let X=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=X;return}let Y=(X-this.lastTimestamp)*this.fillRate;this.availableTokens=Math.min(this.maxCapacity,this.availableTokens+Y),this.lastTimestamp=X}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,0.3333333333333333))}cubicThrottle(X){return this.getPrecise(X*this.beta)}cubicSuccess(X){return this.getPrecise(this.scaleConstant*Math.pow(X-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(X){this.refillTokenBucket(),this.fillRate=Math.max(X,this.minFillRate),this.maxCapacity=Math.max(X,this.minCapacity),this.availableTokens=Math.min(this.availableTokens,this.maxCapacity)}updateMeasuredRate(){let X=this.getCurrentTimeInSeconds(),Y=Math.floor(X*2)/2;if(this.requestCount++,Y>this.lastTxRateBucket){let G=this.requestCount/(Y-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(G*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=Y}}getPrecise(X){return parseFloat(X.toFixed(8))}}var In5=100,XN0=20000,jn5=500,sB0=500,Vn5=5,Mn5=10,Xe4=1,Rn5="amz-sdk-invocation-id",Sn5="amz-sdk-request";class sQ{static v2026=typeof process<"u"&&process.env?.SMITHY_NEW_RETRIES_2026==="true";static delay(){return sQ.v2026?50:100}static throttlingDelay(){return sQ.v2026?1000:500}static cost(){return sQ.v2026?14:5}static throttlingCost(){return sQ.v2026?5:10}static modifiedCostType(){return sQ.v2026?"THROTTLING":"TRANSIENT"}}class Ye4{x=sQ.delay();computeNextBackoffDelay(X){let Y=Math.random(),G=2,Q=Y*Math.min(this.x*2**X,XN0);return Math.floor(Q)}setDelayBase(X){this.x=X}}class eB0{delay;count;cost;longPoll;constructor(X,Y,G,Q){this.delay=X,this.count=Y,this.cost=G,this.longPoll=Q}getRetryCount(){return this.count}getRetryDelay(){return Math.min(XN0,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var VA1={incompatible:1,attempts:2,capacity:3};class jX1{mode=kn5.RETRY_MODES.STANDARD;capacity=sB0;retryBackoffStrategy;maxAttemptsProvider;baseDelay;constructor(X){if(typeof X==="number")this.maxAttemptsProvider=async()=>X;else if(typeof X==="function")this.maxAttemptsProvider=X;else if(X&&typeof X==="object")this.maxAttemptsProvider=async()=>X.maxAttempts,this.baseDelay=X.baseDelay,this.retryBackoffStrategy=X.backoff;this.maxAttemptsProvider??=async()=>MA1,this.baseDelay??=sQ.delay(),this.retryBackoffStrategy??=new Ye4}async acquireInitialRetryToken(X){return new eB0(sQ.delay(),0,void 0,sQ.v2026&&X.includes(":longpoll"))}async refreshRetryTokenForRetry(X,Y){let G=await this.getMaxAttempts(),Q=this.retryCode(X,Y,G),J=Q===0,W=X.isLongPoll?.();if(J||W){let Z=Y.errorType;this.retryBackoffStrategy.setDelayBase(Z==="THROTTLING"?sQ.throttlingDelay():this.baseDelay);let $=this.retryBackoffStrategy.computeNextBackoffDelay(X.getRetryCount()),K=$;if(Y.retryAfterHint instanceof Date)K=Math.max($,Math.min(Y.retryAfterHint.getTime()-Date.now(),$+5000));if(!J)throw Object.assign(Error("No retry token available"),{$backoff:sQ.v2026&&Q===VA1.capacity&&W?K:0});else{let H=this.getCapacityCost(Z);return this.capacity-=H,new eB0(K,X.getRetryCount()+1,H,X.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(X){this.capacity=Math.min(sB0,this.capacity+(X.getRetryCost()??Xe4))}getCapacity(){return this.capacity}async maxAttempts(){return this.maxAttemptsProvider()}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(X){return console.warn(`Max attempts provider could not resolve. Using default of ${MA1}`),MA1}}retryCode(X,Y,G){let Q=X.getRetryCount()+1,J=this.isRetryableError(Y.errorType)?0:VA1.incompatible,W=Q<G?0:VA1.attempts,Z=this.capacity>=this.getCapacityCost(Y.errorType)?0:VA1.capacity;return J||W||Z}getCapacityCost(X){return X===sQ.modifiedCostType()?sQ.throttlingCost():sQ.cost()}isRetryableError(X){return X==="THROTTLING"||X==="TRANSIENT"}}class Ge4{mode=kn5.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(X,Y){let{rateLimiter:G}=Y??{};this.rateLimiter=G??new RA1,this.standardRetryStrategy=Y?new jX1({maxAttempts:typeof X==="number"?X:3,...Y}):new jX1(X)}async acquireInitialRetryToken(X){return await this.rateLimiter.getSendToken(),this.standardRetryStrategy.acquireInitialRetryToken(X)}async refreshRetryTokenForRetry(X,Y){return this.rateLimiter.updateClientSendingRate(Y),this.standardRetryStrategy.refreshRetryTokenForRetry(X,Y)}recordSuccess(X){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(X)}async maxAttemptsProvider(){return this.standardRetryStrategy.maxAttempts()}}class Qe4 extends jX1{computeNextBackoffDelay;constructor(X,Y=sQ.delay()){super(typeof X==="function"?X:async()=>X);if(typeof Y==="number")this.computeNextBackoffDelay=()=>Y;else this.computeNextBackoffDelay=Y}async refreshRetryTokenForRetry(X,Y){let G=await super.refreshRetryTokenForRetry(X,Y);return G.getRetryDelay=()=>this.computeNextBackoffDelay(G.getRetryCount()),G}}kn5.AdaptiveRetryStrategy=Ge4;kn5.ConfiguredRetryStrategy=Qe4;kn5.DEFAULT_MAX_ATTEMPTS=MA1;kn5.DEFAULT_RETRY_DELAY_BASE=In5;kn5.DEFAULT_RETRY_MODE=Tn5;kn5.DefaultRateLimiter=RA1;kn5.INITIAL_RETRY_TOKENS=sB0;kn5.INVOCATION_ID_HEADER=Rn5;kn5.MAXIMUM_RETRY_DELAY=XN0;kn5.NO_RETRY_INCREMENT=Xe4;kn5.REQUEST_HEADER=Sn5;kn5.RETRY_COST=Vn5;kn5.Retry=sQ;kn5.StandardRetryStrategy=jX1;kn5.THROTTLING_RETRY_DELAY_BASE=jn5;kn5.TIMEOUT_RETRY_COST=Mn5});var WX=k((Yt5)=>{var nn5=Ow(),YN0={warningEmitted:!1},tn5=(X)=>{if(X&&!YN0.warningEmitted&&parseInt(X.substring(1,X.indexOf(".")))<20)YN0.warningEmitted=!0,process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
1626
+ `);Q=W.pop()??"";for(let Z of W){let $=Ts4(Z).replace(/^\[\d+\]\s*/,"").trim();if(!$)continue;Zz({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}(async()=>{for(;;){let{done:W,value:Z}=await Y.read();if(W)break;Q+=G.decode(Z,{stream:!0}),J()}if(Q.trim()){let W=Ts4(Q).replace(/^\[\d+\]\s*/,"").trim();if(W)Zz({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:W})}})()}async function Jp5(X){let{vitePort:Y,baseUrl:G,noTui:Q}=X,J=await EA1(Number(X.port)),{settings:W,services:Z,managedServiceNames:$}=await OA1({port:String(J),home:X.home,baseUrl:X.baseUrl,localMode:X.localMode,skipMigrations:X.skipMigrations,noTui:X.noTui,vitePort:X.vitePort});for(let z of Z)rt({name:z.name,status:"ready",port:z.port});qX1(W),EX1();let K=Qp5(import.meta.dir,"..","..","..","..",".."),H=Q===!0,U=Bun.spawn(["bun","run","--cwd=apps/mesh","dev:servers"],{cwd:K,env:{...process.env,PORT:String(W.port),VITE_PORT:String(Y),DATABASE_URL:W.databaseUrl,NATS_URL:W.natsUrls.join(","),NODE_ENV:W.nodeEnv,DECOCMS_LOCAL_MODE:String(W.localMode),DECOCMS_HOME:W.dataDir,DATA_DIR:W.dataDir,DECO_CLI:"1",...W.baseUrl?{BASE_URL:W.baseUrl}:{}},stdio:["inherit",H?"inherit":"pipe",H?"inherit":"pipe"]});if(!H)Is4(U.stdout),Is4(U.stderr);let B=G||`http://localhost:${W.port}`;PX1(B),rt({name:"Vite",status:"ready",port:Number(Y)});let N=async(z)=>{if(U.kill(z),$.length>0){let{stopServices:O}=await Promise.resolve().then(() => (w$1(),D$1));await O(W.dataDir)}};return process.on("SIGINT",()=>N("SIGINT")),process.on("SIGTERM",()=>N("SIGTERM")),{port:Number(W.port),process:U}}var fB0=D(()=>{MB0();Wz();vB0()});import{Box as bB0,Text as yB0}from"ink";import{jsx as Vs4,jsxs as PA1}from"react/jsx-runtime";function js4(X){if(!X)return"not set";try{let Y=new URL(X);if(Y.password)Y.password="***";if(Y.username&&Y.username.length>3)Y.username=Y.username.slice(0,3)+"***";return Y.pathname="/",Y.search="",Y.hash="",Y.toString()}catch{if(X.length<=10)return X;return X.slice(0,6)+"***"+X.slice(-4)}}function $p5(X,Y){if(Zp5.has(X))return Y?{text:"\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF",dimColor:!0}:{text:"not set",dimColor:!0};if(Wp5.has(X)){if(Array.isArray(Y)){if(Y.length===0)return{text:"not set",dimColor:!0};return{text:Y.map((W)=>js4(W)).join(", "),color:"cyan"}}let Q=js4(Y);return Q==="not set"?{text:Q,dimColor:!0}:{text:Q,color:"cyan"}}if(Y===void 0||Y===null||Y==="")return{text:"not set",dimColor:!0};let G=String(Y);if(G==="true")return{text:G,color:"green"};if(G==="false")return{text:G,color:"yellow"};try{return new URL(G),{text:G,color:"cyan"}}catch{return{text:G}}}function Kp5(X){return[{title:"Core",entries:[{key:"NODE_ENV",value:X.nodeEnv},{key:"PORT",value:X.port},{key:"BASE_URL",value:X.baseUrl??`http://localhost:${X.port}`},{key:"DATA_DIR",value:X.dataDir}]},{title:"Database",entries:[{key:"DATABASE_URL",value:X.databaseUrl},{key:"DATABASE_PG_SSL",value:X.databasePgSsl}]},{title:"Auth & Secrets",entries:[{key:"BETTER_AUTH_SECRET",value:X.betterAuthSecret},{key:"ENCRYPTION_KEY",value:X.encryptionKey},{key:"MESH_JWT_SECRET",value:X.meshJwtSecret},{key:"STUDIO_PROVISION_SECRET_KEY",value:X.studioProvisionSecretKey},{key:"DISABLE_RATE_LIMIT",value:X.disableRateLimit}]},{title:"Auth Providers",entries:[{key:"AUTH_EMAIL_PASSWORD_ENABLED",value:process.env.AUTH_EMAIL_PASSWORD_ENABLED??"true"},{key:"AUTH_GOOGLE_CLIENT_ID",value:!!process.env.AUTH_GOOGLE_CLIENT_ID},{key:"AUTH_GITHUB_CLIENT_ID",value:!!process.env.AUTH_GITHUB_CLIENT_ID},{key:"AUTH_RESEND_API_KEY",value:!!process.env.AUTH_RESEND_API_KEY},{key:"AUTH_SENDGRID_API_KEY",value:!!process.env.AUTH_SENDGRID_API_KEY},{key:"AUTH_SSO_MS_CLIENT_ID",value:!!process.env.AUTH_SSO_MS_CLIENT_ID},{key:"AUTH_MAGIC_LINK_ENABLED",value:process.env.AUTH_MAGIC_LINK_ENABLED==="true"},{key:"AUTH_EMAIL_OTP_ENABLED",value:process.env.AUTH_EMAIL_OTP_ENABLED==="true"}]},{title:"Observability",entries:[{key:"CLICKHOUSE_URL",value:X.clickhouseUrl},{key:"OTEL_SERVICE_NAME",value:X.otelServiceName}]},{title:"Event Bus & Networking",entries:[{key:"NATS_URL",value:X.natsUrls}]},{title:"Config Files",entries:[{key:"CONFIG_PATH",value:X.configPath}]},{title:"AI Gateway",entries:[{key:"DECO_AI_GATEWAY_ENABLED",value:X.aiGatewayEnabled},{key:"DECO_AI_GATEWAY_URL",value:X.aiGatewayUrl}]}]}function Ms4({env:X}){let Y=Kp5(X);return Vs4(bB0,{flexDirection:"column",children:Y.map((G)=>PA1(bB0,{flexDirection:"column",marginTop:1,children:[PA1(yB0,{dimColor:!0,children:[" ","\u2500\u2500 ",G.title," ","\u2500".repeat(Math.max(0,38-G.title.length))]}),G.entries.map(({key:Q,value:J})=>{let W=$p5(Q,J);return PA1(bB0,{children:[PA1(yB0,{dimColor:!0,children:[" ",Q.padEnd(36)]}),Vs4(yB0,{color:W.color,dimColor:W.dimColor,children:W.text})]},Q)})]},G.title))})}var Zp5,Wp5;var Rs4=D(()=>{Zp5=new Set(["BETTER_AUTH_SECRET","ENCRYPTION_KEY","MESH_JWT_SECRET","STUDIO_PROVISION_SECRET_KEY"]),Wp5=new Set(["DATABASE_URL","CLICKHOUSE_URL","NATS_URL"])});var xB0;var Ss4=D(()=>{xB0={name:"decocms",version:"2.300.5",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"bun --bun vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1","@freestyle-sh/with-bun":"^0.2.12","@freestyle-sh/with-deno":"^0.0.4","@freestyle-sh/with-nodejs":"^0.2.9","freestyle-sandboxes":"^0.1.46"},dependencies:{"@ai-sdk/anthropic":"^3.0.58","@ai-sdk/google":"^3.0.60","@ai-sdk/openai":"^3.0.50","@anthropic-ai/sdk":"^0.79.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.2.2","@openrouter/ai-sdk-provider":"^2.2.5","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"^3.13.21","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","ai-sdk-provider-claude-code":"^3.4.4","ai-sdk-provider-codex-cli":"^1.1.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.0","react-dom":"^19.2.0"},devDependencies:{"@ai-sdk/provider":"^3.0.8","@ai-sdk/react":"^3.0.118","@anthropic-ai/claude-agent-sdk":"^0.2.80","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/vite-plugin":"workspace:*","@electric-sql/pglite":"^0.3.15","@floating-ui/react":"^0.27.16","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.27.1","@monaco-editor/react":"^4.7.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.90.11","@tanstack/react-router":"^1.139.7","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.116","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.5","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","kysely-pglite":"^0.6.1","lucide-react":"^0.468.0",marked:"^15.0.6","@decocms/sandbox":"workspace:*","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as qU,Text as RX}from"ink";import{Spinner as Fp5}from"@inkjs/ui";import{useSyncExternalStore as ks4}from"react";import{jsx as AY,jsxs as oQ}from"react/jsx-runtime";function Op5(X,Y){if(!X||!zp5.has(X))return X;let G=hB0[Y]??hB0[hB0.length-1];return X==="#875f00"?G[0]:G[1]}function Cs4({status:X}){if(X==="pending")return AY(Fp5,{label:""});return AY(RX,{color:"green",children:"\u2713"})}function vs4({services:X,migrationsStatus:Y,home:G,serverUrl:Q,vibe:J}){let W=ks4(eu0,su0),Z=ks4(Zl0,Jl0);return oQ(qU,{flexDirection:"column",paddingBottom:1,children:[J?oQ(qU,{flexDirection:"column",children:[W.map(($,K)=>{let H=Z[K],U=$.reduce((N,z)=>N+z.text.length,0),B=Math.max(0,Np5-U);return oQ(qU,{flexDirection:"row",children:[$.map((N,z)=>{let O=Op5(N.color,K);return O?AY(RX,{color:O,children:N.text},z):AY(RX,{children:N.text},z)}),AY(RX,{children:" ".repeat(B+2)}),H?.map((N,z)=>N.color?AY(RX,{color:N.color,children:N.char},z):AY(RX,{children:N.char},z))]},K)}),oQ(RX,{dimColor:!0,children:[" v",xB0.version]})]}):oQ(qU,{flexDirection:"column",marginTop:1,children:[Up5.map(($,K)=>AY(RX,{color:Bp5[K],children:$},K)),oQ(RX,{dimColor:!0,children:[" v",xB0.version]})]}),AY(qU,{marginBottom:1,children:AY(RX,{dimColor:!0,children:"\u2500".repeat(80)})}),AY(qU,{children:oQ(RX,{dimColor:!0,children:["Home: ",G]})}),oQ(qU,{gap:2,children:[X.map(($)=>oQ(qU,{gap:1,children:[oQ(RX,{children:[$.name," :",$.port||"...."]}),AY(Cs4,{status:$.status})]},$.name)),oQ(qU,{gap:1,children:[AY(RX,{children:"Migrations"}),AY(Cs4,{status:Y})]})]}),AY(qU,{children:Q?oQ(RX,{children:["Open in browser: ",AY(RX,{color:"cyan",children:Q})]}):AY(RX,{dimColor:!0,children:"Starting..."})}),oQ(qU,{gap:2,children:[oQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"K"})," ","toggle config"]}),oQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"L"})," ","toggle log flow"]}),oQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"V"})," ","toggle vibe ",J?"\u266A Nihilore \xB7 CC BY 4.0":""]}),J&&oQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"N"})," ","skip song"]})]})]})}var Up5,Bp5,hB0,Np5=30,zp5;var _s4=D(()=>{Ss4();jn1();Cn1();Up5=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],Bp5=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"],hB0=[["#00ff64","#00cc50"],["#00f060","#00c04c"],["#00e05c","#00b448"],["#00d058","#00a844"],["#00c054","#009c40"],["#00b050","#00903c"],["#00a04c","#008438"],["#009048","#007834"],["#008044","#006c30"],["#007040","#00602c"],["#00603c","#005428"]],zp5=new Set(["#875f00","#5f3800"])});import{useSyncExternalStore as Dp5}from"react";function wp5(){let X=process.stdout.rows||24,Y=process.stdout.columns||80;if(X!==qA1.rows||Y!==qA1.columns)qA1={rows:X,columns:Y};return qA1}function Lp5(X){return process.stdout.on("resize",X),()=>{process.stdout.off("resize",X)}}function fs4(){return Dp5(Lp5,wp5)}var qA1;var bs4=D(()=>{qA1={rows:process.stdout.rows||24,columns:process.stdout.columns||80}});import{Box as Ep5,Text as AX1}from"ink";import{useSyncExternalStore as Pp5}from"react";import{jsx as gB0,jsxs as uB0}from"react/jsx-runtime";function qp5(X){if(X>=500)return"red";if(X>=400)return"yellow";if(X>=300)return"cyan";return"green"}function ys4({logs:X,headerHeight:Y}){let{rows:G}=fs4(),{logFlow:Q}=Pp5(LX1,wX1),J=Math.max(1,G-Y-1),W=Q?X:X.slice(-J);return gB0(Ep5,{flexDirection:"column",children:W.map((Z,$)=>{if(Z.rawLine)return gB0(AX1,{dimColor:!0,children:Z.rawLine},$);let K=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return uB0(AX1,{children:[uB0(AX1,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),gB0(AX1,{color:qp5(Z.status),children:Z.status}),uB0(AX1,{dimColor:!0,children:[" ",K.padStart(8)]})]},$)})})}var xs4=D(()=>{Wz();bs4()});var lB0={};V0(lB0,{App:()=>Rp5});import{Box as Ap5,Text as Tp5,useInput as Ip5}from"ink";import{useSyncExternalStore as jp5}from"react";import{jsx as AA1,jsxs as Sp5}from"react/jsx-runtime";function Rp5({home:X}){let Y=jp5(LX1,wX1);return Ip5((G)=>{if(G==="k"||G==="K")SB0();if(G==="l"||G==="L")kB0();if((G==="v"||G==="V")&&Y.dataDir)bn1(Y.dataDir),CB0();if((G==="n"||G==="N")&&Y.vibe)fn1()}),Sp5(Ap5,{flexDirection:"column",children:[AA1(vs4,{services:Y.services,migrationsStatus:Y.migrationsStatus,home:X,serverUrl:Y.serverUrl,vibe:Y.vibe}),Y.viewMode==="config"?Y.env?AA1(Ms4,{env:Y.env}):AA1(Tp5,{dimColor:!0,children:"Loading configuration..."}):AA1(ys4,{logs:Y.logs,headerHeight:Y.vibe?Mp5:Vp5})]})}var Vp5=15,Mp5=19;var mB0=D(()=>{Rs4();_s4();xs4();Wz();Sd()});function hs4(X,Y={}){return{PORT:String(X.port),NODE_ENV:X.nodeEnv,BASE_URL:X.baseUrl,DATA_DIR:X.dataDir,DECOCMS_HOME:X.dataDir,DATABASE_URL:X.databaseUrl,DATABASE_PG_SSL:String(X.databasePgSsl),DATABASE_POOL_MAX:String(X.databasePoolMax),NATS_URL:X.natsUrls.join(","),BETTER_AUTH_SECRET:X.betterAuthSecret,ENCRYPTION_KEY:X.encryptionKey,MESH_JWT_SECRET:X.meshJwtSecret,DECOCMS_LOCAL_MODE:String(X.localMode),DISABLE_RATE_LIMIT:String(X.disableRateLimit),STUDIO_PROVISION_SECRET_KEY:X.studioProvisionSecretKey,CONFIG_PATH:X.configPath,...Object.fromEntries(Object.entries(process.env).filter(([G])=>G.startsWith("AUTH_"))),DECO_AI_GATEWAY_ENABLED:String(X.aiGatewayEnabled),DECO_AI_GATEWAY_URL:X.aiGatewayUrl,ENABLE_DECO_IMPORT:String(X.enableDecoImport),S3_ENDPOINT:X.s3Endpoint,S3_BUCKET:X.s3Bucket,S3_REGION:X.s3Region,S3_ACCESS_KEY_ID:X.s3AccessKeyId,S3_SECRET_ACCESS_KEY:X.s3SecretAccessKey,S3_FORCE_PATH_STYLE:String(X.s3ForcePathStyle),OTEL_SERVICE_NAME:X.otelServiceName,CLICKHOUSE_URL:X.clickhouseUrl,DECO_SUPABASE_URL:X.decoSupabaseUrl,DECO_SUPABASE_SERVICE_KEY:X.decoSupabaseServiceKey,FIRECRAWL_API_KEY:X.firecrawlApiKey,STUDIO_SANDBOX_RUNNER:process.env.STUDIO_SANDBOX_RUNNER,STUDIO_SANDBOX_TEMPLATE_NAME:process.env.STUDIO_SANDBOX_TEMPLATE_NAME,STUDIO_ENV:process.env.STUDIO_ENV,STUDIO_SANDBOX_PREVIEW_URL_PATTERN:process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE,STUDIO_SANDBOX_SENTINEL_TOKEN:process.env.STUDIO_SANDBOX_SENTINEL_TOKEN,KUBERNETES_SERVICE_HOST:process.env.KUBERNETES_SERVICE_HOST,KUBERNETES_SERVICE_PORT:process.env.KUBERNETES_SERVICE_PORT,FREESTYLE_API_KEY:process.env.FREESTYLE_API_KEY,BROWSERLESS_TOKEN:process.env.BROWSERLESS_TOKEN,NODE_EXTRA_CA_CERTS:process.env.NODE_EXTRA_CA_CERTS,DECO_CLI:"1",DECO_NO_TUI:"true",...Y}}var vV=k((bp5)=>{bp5.HttpAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(bp5.HttpAuthLocation||(bp5.HttpAuthLocation={}));bp5.HttpApiKeyAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(bp5.HttpApiKeyAuthLocation||(bp5.HttpApiKeyAuthLocation={}));bp5.EndpointURLScheme=void 0;(function(X){X.HTTP="http",X.HTTPS="https"})(bp5.EndpointURLScheme||(bp5.EndpointURLScheme={}));bp5.AlgorithmId=void 0;(function(X){X.MD5="md5",X.CRC32="crc32",X.CRC32C="crc32c",X.SHA1="sha1",X.SHA256="sha256"})(bp5.AlgorithmId||(bp5.AlgorithmId={}));var kp5=(X)=>{let Y=[];if(X.sha256!==void 0)Y.push({algorithmId:()=>bp5.AlgorithmId.SHA256,checksumConstructor:()=>X.sha256});if(X.md5!=null)Y.push({algorithmId:()=>bp5.AlgorithmId.MD5,checksumConstructor:()=>X.md5});return{addChecksumAlgorithm(G){Y.push(G)},checksumAlgorithms(){return Y}}},Cp5=(X)=>{let Y={};return X.checksumAlgorithms().forEach((G)=>{Y[G.algorithmId()]=G.checksumConstructor()}),Y},vp5=(X)=>{return kp5(X)},_p5=(X)=>{return Cp5(X)};bp5.FieldPosition=void 0;(function(X){X[X.HEADER=0]="HEADER",X[X.TRAILER=1]="TRAILER"})(bp5.FieldPosition||(bp5.FieldPosition={}));var fp5="__smithy_context";bp5.IniSectionType=void 0;(function(X){X.PROFILE="profile",X.SSO_SESSION="sso-session",X.SERVICES="services"})(bp5.IniSectionType||(bp5.IniSectionType={}));bp5.RequestHandlerProtocol=void 0;(function(X){X.HTTP_0_9="http/0.9",X.HTTP_1_0="http/1.0",X.TDS_8_0="tds/8.0"})(bp5.RequestHandlerProtocol||(bp5.RequestHandlerProtocol={}));bp5.SMITHY_CONTEXT_KEY=fp5;bp5.getDefaultClientConfiguration=vp5;bp5.resolveDefaultRuntimeConfig=_p5});var u7=k((cp5)=>{var gp5=vV(),up5=(X)=>{return{setHttpHandler(Y){X.httpHandler=Y},httpHandler(){return X.httpHandler},updateHttpClientConfig(Y,G){X.httpHandler?.updateHttpClientConfig(Y,G)},httpHandlerConfigs(){return X.httpHandler.httpHandlerConfigs()}}},lp5=(X)=>{return{httpHandler:X.httpHandler()}};class gs4{name;kind;values;constructor({name:X,kind:Y=gp5.FieldPosition.HEADER,values:G=[]}){this.name=X,this.kind=Y,this.values=G}add(X){this.values.push(X)}set(X){this.values=X}remove(X){this.values=this.values.filter((Y)=>Y!==X)}toString(){return this.values.map((X)=>X.includes(",")||X.includes(" ")?`"${X}"`:X).join(", ")}get(){return this.values}}class us4{entries={};encoding;constructor({fields:X=[],encoding:Y="utf-8"}){X.forEach(this.setField.bind(this)),this.encoding=Y}setField(X){this.entries[X.name.toLowerCase()]=X}getField(X){return this.entries[X.toLowerCase()]}removeField(X){delete this.entries[X.toLowerCase()]}getByType(X){return Object.values(this.entries).filter((Y)=>Y.kind===X)}}class TA1{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(X){this.method=X.method||"GET",this.hostname=X.hostname||"localhost",this.port=X.port,this.query=X.query||{},this.headers=X.headers||{},this.body=X.body,this.protocol=X.protocol?X.protocol.slice(-1)!==":"?`${X.protocol}:`:X.protocol:"https:",this.path=X.path?X.path.charAt(0)!=="/"?`/${X.path}`:X.path:"/",this.username=X.username,this.password=X.password,this.fragment=X.fragment}static clone(X){let Y=new TA1({...X,headers:{...X.headers}});if(Y.query)Y.query=mp5(Y.query);return Y}static isInstance(X){if(!X)return!1;let Y=X;return"method"in Y&&"protocol"in Y&&"hostname"in Y&&"path"in Y&&typeof Y.query==="object"&&typeof Y.headers==="object"}clone(){return TA1.clone(this)}}function mp5(X){return Object.keys(X).reduce((Y,G)=>{let Q=X[G];return{...Y,[G]:Array.isArray(Q)?[...Q]:Q}},{})}class ls4{statusCode;reason;headers;body;constructor(X){this.statusCode=X.statusCode,this.reason=X.reason,this.headers=X.headers||{},this.body=X.body}static isInstance(X){if(!X)return!1;let Y=X;return typeof Y.statusCode==="number"&&typeof Y.headers==="object"}}function dp5(X){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(X)}cp5.Field=gs4;cp5.Fields=us4;cp5.HttpRequest=TA1;cp5.HttpResponse=ls4;cp5.getHttpHandlerExtensionConfiguration=up5;cp5.isValidHostname=dp5;cp5.resolveHttpHandlerRuntimeConfig=lp5});function sp5(X){return(Y)=>async(G)=>{let{request:Q}=G;if(X.expectContinueHeader!==!1&&ms4.HttpRequest.isInstance(Q)&&Q.body&&X.runtime==="node"&&X.requestHandler?.constructor?.name!=="FetchHttpHandler"){let J=!0;if(typeof X.expectContinueHeader==="number")try{J=(Number(Q.headers?.["content-length"])??X.bodyLengthChecker?.(Q.body)??1/0)>=X.expectContinueHeader}catch(W){}else J=!!X.expectContinueHeader;if(J)Q.headers.Expect="100-continue"}return Y({...G,request:Q})}}var ms4,ep5,ds4=(X)=>({applyToStack:(Y)=>{Y.add(sp5(X),ep5)}});var cs4=D(()=>{ms4=Y1(u7(),1);ep5={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var OH,IA1,_V,jA1,E9,is4,IX1;var DH=D(()=>{OH={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},IA1=OH.WHEN_SUPPORTED,_V={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},jA1=OH.WHEN_SUPPORTED;(function(X){X.MD5="MD5",X.CRC32="CRC32",X.CRC32C="CRC32C",X.CRC64NVME="CRC64NVME",X.SHA1="SHA1",X.SHA256="SHA256"})(E9||(E9={}));(function(X){X.HEADER="header",X.TRAILER="trailer"})(is4||(is4={}));IX1=E9.CRC32});var Mq,ot=(X,Y,G,Q)=>{if(!(Y in X))return;let J=X[Y].toUpperCase();if(!Object.values(G).includes(J))throw TypeError(`Cannot load ${Q} '${Y}'. Expected one of ${Object.values(G)}, got '${X[Y]}'.`);return J};var aB0=D(()=>{(function(X){X.ENV="env",X.CONFIG="shared config entry"})(Mq||(Mq={}))});var Xn5="AWS_REQUEST_CHECKSUM_CALCULATION",Yn5="request_checksum_calculation",ps4;var ns4=D(()=>{DH();aB0();ps4={environmentVariableSelector:(X)=>ot(X,Xn5,OH,Mq.ENV),configFileSelector:(X)=>ot(X,Yn5,OH,Mq.CONFIG),default:IA1}});var Gn5="AWS_RESPONSE_CHECKSUM_VALIDATION",Qn5="response_checksum_validation",ts4;var as4=D(()=>{DH();aB0();ts4={environmentVariableSelector:(X)=>ot(X,Gn5,_V,Mq.ENV),configFileSelector:(X)=>ot(X,Qn5,_V,Mq.CONFIG),default:jA1}});var oB0=k((Nn5)=>{var Jn5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],Zn5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],Wn5=["TimeoutError","RequestTimeout","RequestTimeoutException"],$n5=[500,502,503,504],Kn5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],Hn5=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],rs4=(X)=>X?.$retryable!==void 0,Fn5=(X)=>Jn5.includes(X.name),os4=(X)=>X.$metadata?.clockSkewCorrected,ss4=(X)=>{let Y=new Set(["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Load failed","Network request failed"]);if(!(X&&X instanceof TypeError))return!1;return Y.has(X.message)},Un5=(X)=>X.$metadata?.httpStatusCode===429||Zn5.includes(X.name)||X.$retryable?.throttling==!0,rB0=(X,Y=0)=>rs4(X)||os4(X)||X.name==="InvalidSignatureException"&&X.message?.includes("Signature expired")||Wn5.includes(X.name)||Kn5.includes(X?.code||"")||Hn5.includes(X?.code||"")||$n5.includes(X.$metadata?.httpStatusCode||0)||ss4(X)||es4(X)||X.cause!==void 0&&Y<=10&&rB0(X.cause,Y+1),Bn5=(X)=>{if(X.$metadata?.httpStatusCode!==void 0){let Y=X.$metadata.httpStatusCode;if(500<=Y&&Y<=599&&!rB0(X))return!0;return!1}return!1};function es4(X){return X.code==="ERR_HTTP2_STREAM_ERROR"&&X.message.includes("NGHTTP2_REFUSED_STREAM")}Nn5.isBrowserNetworkError=ss4;Nn5.isClockSkewCorrectedError=os4;Nn5.isClockSkewError=Fn5;Nn5.isNodeJsHttp2TransientError=es4;Nn5.isRetryableByTrait=rs4;Nn5.isServerError=Bn5;Nn5.isThrottlingError=Un5;Nn5.isTransientError=rB0});var Ow=k((kn5)=>{var An5=oB0();kn5.RETRY_MODES=void 0;(function(X){X.STANDARD="standard",X.ADAPTIVE="adaptive"})(kn5.RETRY_MODES||(kn5.RETRY_MODES={}));var MA1=3,Tn5=kn5.RETRY_MODES.STANDARD;class RA1{static setTimeoutFn=setTimeout;beta;minCapacity;minFillRate;scaleConstant;smooth;enabled=!1;availableTokens=0;lastMaxRate=0;measuredTxRate=0;requestCount=0;fillRate;lastThrottleTime;lastTimestamp=0;lastTxRateBucket;maxCapacity;timeWindow=0;constructor(X){this.beta=X?.beta??0.7,this.minCapacity=X?.minCapacity??1,this.minFillRate=X?.minFillRate??0.5,this.scaleConstant=X?.scaleConstant??0.4,this.smooth=X?.smooth??0.8,this.lastThrottleTime=this.getCurrentTimeInSeconds(),this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}async getSendToken(){return this.acquireTokenBucket(1)}updateClientSendingRate(X){let Y;this.updateMeasuredRate();let G=X;if(G?.errorType==="THROTTLING"||An5.isThrottlingError(G?.error??X)){let W=!this.enabled?this.measuredTxRate:Math.min(this.measuredTxRate,this.fillRate);this.lastMaxRate=W,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),Y=this.cubicThrottle(W),this.enableTokenBucket()}else this.calculateTimeWindow(),Y=this.cubicSuccess(this.getCurrentTimeInSeconds());let J=Math.min(Y,2*this.measuredTxRate);this.updateTokenBucketRate(J)}getCurrentTimeInSeconds(){return Date.now()/1000}async acquireTokenBucket(X){if(!this.enabled)return;if(this.refillTokenBucket(),X>this.availableTokens){let Y=(X-this.availableTokens)/this.fillRate*1000;await new Promise((G)=>RA1.setTimeoutFn(G,Y))}this.availableTokens=this.availableTokens-X}refillTokenBucket(){let X=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=X;return}let Y=(X-this.lastTimestamp)*this.fillRate;this.availableTokens=Math.min(this.maxCapacity,this.availableTokens+Y),this.lastTimestamp=X}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,0.3333333333333333))}cubicThrottle(X){return this.getPrecise(X*this.beta)}cubicSuccess(X){return this.getPrecise(this.scaleConstant*Math.pow(X-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(X){this.refillTokenBucket(),this.fillRate=Math.max(X,this.minFillRate),this.maxCapacity=Math.max(X,this.minCapacity),this.availableTokens=Math.min(this.availableTokens,this.maxCapacity)}updateMeasuredRate(){let X=this.getCurrentTimeInSeconds(),Y=Math.floor(X*2)/2;if(this.requestCount++,Y>this.lastTxRateBucket){let G=this.requestCount/(Y-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(G*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=Y}}getPrecise(X){return parseFloat(X.toFixed(8))}}var In5=100,XN0=20000,jn5=500,sB0=500,Vn5=5,Mn5=10,Xe4=1,Rn5="amz-sdk-invocation-id",Sn5="amz-sdk-request";class sQ{static v2026=typeof process<"u"&&process.env?.SMITHY_NEW_RETRIES_2026==="true";static delay(){return sQ.v2026?50:100}static throttlingDelay(){return sQ.v2026?1000:500}static cost(){return sQ.v2026?14:5}static throttlingCost(){return sQ.v2026?5:10}static modifiedCostType(){return sQ.v2026?"THROTTLING":"TRANSIENT"}}class Ye4{x=sQ.delay();computeNextBackoffDelay(X){let Y=Math.random(),G=2,Q=Y*Math.min(this.x*2**X,XN0);return Math.floor(Q)}setDelayBase(X){this.x=X}}class eB0{delay;count;cost;longPoll;constructor(X,Y,G,Q){this.delay=X,this.count=Y,this.cost=G,this.longPoll=Q}getRetryCount(){return this.count}getRetryDelay(){return Math.min(XN0,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var VA1={incompatible:1,attempts:2,capacity:3};class jX1{mode=kn5.RETRY_MODES.STANDARD;capacity=sB0;retryBackoffStrategy;maxAttemptsProvider;baseDelay;constructor(X){if(typeof X==="number")this.maxAttemptsProvider=async()=>X;else if(typeof X==="function")this.maxAttemptsProvider=X;else if(X&&typeof X==="object")this.maxAttemptsProvider=async()=>X.maxAttempts,this.baseDelay=X.baseDelay,this.retryBackoffStrategy=X.backoff;this.maxAttemptsProvider??=async()=>MA1,this.baseDelay??=sQ.delay(),this.retryBackoffStrategy??=new Ye4}async acquireInitialRetryToken(X){return new eB0(sQ.delay(),0,void 0,sQ.v2026&&X.includes(":longpoll"))}async refreshRetryTokenForRetry(X,Y){let G=await this.getMaxAttempts(),Q=this.retryCode(X,Y,G),J=Q===0,W=X.isLongPoll?.();if(J||W){let Z=Y.errorType;this.retryBackoffStrategy.setDelayBase(Z==="THROTTLING"?sQ.throttlingDelay():this.baseDelay);let $=this.retryBackoffStrategy.computeNextBackoffDelay(X.getRetryCount()),K=$;if(Y.retryAfterHint instanceof Date)K=Math.max($,Math.min(Y.retryAfterHint.getTime()-Date.now(),$+5000));if(!J)throw Object.assign(Error("No retry token available"),{$backoff:sQ.v2026&&Q===VA1.capacity&&W?K:0});else{let H=this.getCapacityCost(Z);return this.capacity-=H,new eB0(K,X.getRetryCount()+1,H,X.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(X){this.capacity=Math.min(sB0,this.capacity+(X.getRetryCost()??Xe4))}getCapacity(){return this.capacity}async maxAttempts(){return this.maxAttemptsProvider()}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(X){return console.warn(`Max attempts provider could not resolve. Using default of ${MA1}`),MA1}}retryCode(X,Y,G){let Q=X.getRetryCount()+1,J=this.isRetryableError(Y.errorType)?0:VA1.incompatible,W=Q<G?0:VA1.attempts,Z=this.capacity>=this.getCapacityCost(Y.errorType)?0:VA1.capacity;return J||W||Z}getCapacityCost(X){return X===sQ.modifiedCostType()?sQ.throttlingCost():sQ.cost()}isRetryableError(X){return X==="THROTTLING"||X==="TRANSIENT"}}class Ge4{mode=kn5.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(X,Y){let{rateLimiter:G}=Y??{};this.rateLimiter=G??new RA1,this.standardRetryStrategy=Y?new jX1({maxAttempts:typeof X==="number"?X:3,...Y}):new jX1(X)}async acquireInitialRetryToken(X){return await this.rateLimiter.getSendToken(),this.standardRetryStrategy.acquireInitialRetryToken(X)}async refreshRetryTokenForRetry(X,Y){return this.rateLimiter.updateClientSendingRate(Y),this.standardRetryStrategy.refreshRetryTokenForRetry(X,Y)}recordSuccess(X){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(X)}async maxAttemptsProvider(){return this.standardRetryStrategy.maxAttempts()}}class Qe4 extends jX1{computeNextBackoffDelay;constructor(X,Y=sQ.delay()){super(typeof X==="function"?X:async()=>X);if(typeof Y==="number")this.computeNextBackoffDelay=()=>Y;else this.computeNextBackoffDelay=Y}async refreshRetryTokenForRetry(X,Y){let G=await super.refreshRetryTokenForRetry(X,Y);return G.getRetryDelay=()=>this.computeNextBackoffDelay(G.getRetryCount()),G}}kn5.AdaptiveRetryStrategy=Ge4;kn5.ConfiguredRetryStrategy=Qe4;kn5.DEFAULT_MAX_ATTEMPTS=MA1;kn5.DEFAULT_RETRY_DELAY_BASE=In5;kn5.DEFAULT_RETRY_MODE=Tn5;kn5.DefaultRateLimiter=RA1;kn5.INITIAL_RETRY_TOKENS=sB0;kn5.INVOCATION_ID_HEADER=Rn5;kn5.MAXIMUM_RETRY_DELAY=XN0;kn5.NO_RETRY_INCREMENT=Xe4;kn5.REQUEST_HEADER=Sn5;kn5.RETRY_COST=Vn5;kn5.Retry=sQ;kn5.StandardRetryStrategy=jX1;kn5.THROTTLING_RETRY_DELAY_BASE=jn5;kn5.TIMEOUT_RETRY_COST=Mn5});var WX=k((Yt5)=>{var nn5=Ow(),YN0={warningEmitted:!1},tn5=(X)=>{if(X&&!YN0.warningEmitted&&parseInt(X.substring(1,X.indexOf(".")))<20)YN0.warningEmitted=!0,process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
1627
1627
  no longer support Node.js ${X} in January 2026.
1628
1628
 
1629
1629
  To continue receiving updates to AWS services, bug fixes, and security
@@ -7289,7 +7289,7 @@ mkdir -p /app && chown deco:deco /app
7289
7289
  `);let Q=Y.pax;if(Q)for(let J in Q)G+=lb0(" "+J+"="+Q[J]+`
7290
7290
  `);return t5.from(G)};HQ7.decodePax=function(Y){let G={};while(Y.length){let Q=0;while(Q<Y.length&&Y[Q]!==32)Q++;let J=parseInt(t5.toString(Y.subarray(0,Q)),10);if(!J)return G;let W=t5.toString(Y.subarray(Q+1,J-1)),Z=W.indexOf("=");if(Z===-1)return G;G[W.slice(0,Z)]=W.slice(Z+1),Y=Y.subarray(J)}return G};HQ7.encode=function(Y){let G=t5.alloc(512),Q=Y.name,J="";if(Y.typeflag===5&&Q[Q.length-1]!=="/")Q+="/";if(t5.byteLength(Q)!==Q.length)return null;while(t5.byteLength(Q)>100){let W=Q.indexOf("/");if(W===-1)return null;J+=J?"/"+Q.slice(0,W):Q.slice(0,W),Q=Q.slice(W+1)}if(t5.byteLength(Q)>100||t5.byteLength(J)>155)return null;if(Y.linkname&&t5.byteLength(Y.linkname)>100)return null;if(t5.write(G,Q),t5.write(G,kT(Y.mode&4095,6),100),t5.write(G,kT(Y.uid,6),108),t5.write(G,kT(Y.gid,6),116),$Q7(Y.size,G,124),t5.write(G,kT(Y.mtime.getTime()/1000|0,11),136),G[156]=48+ZQ7(Y.type),Y.linkname)t5.write(G,Y.linkname,157);if(t5.copy(TQ8,G,257),t5.copy(sG7,G,263),Y.uname)t5.write(G,Y.uname,265);if(Y.gname)t5.write(G,Y.gname,297);if(t5.write(G,kT(Y.devmajor||0,6),329),t5.write(G,kT(Y.devminor||0,6),337),J)t5.write(G,J,345);return t5.write(G,kT(jQ8(G),6),148),G};HQ7.decode=function(Y,G,Q){let J=Y[156]===0?0:Y[156]-48,W=ds(Y,0,100,G),Z=ST(Y,100,8),$=ST(Y,108,8),K=ST(Y,116,8),H=ST(Y,124,12),U=ST(Y,136,12),B=JQ7(J),N=Y[157]===0?null:ds(Y,157,100,G),z=ds(Y,265,32),O=ds(Y,297,32),w=ST(Y,329,8),E=ST(Y,337,8),P=jQ8(Y);if(P===256)return null;if(P!==ST(Y,148,8))throw Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(YQ7(Y)){if(Y[345])W=ds(Y,345,155,G)+"/"+W}else if(GQ7(Y));else if(!Q)throw Error("Invalid tar header: unknown format.");if(J===0&&W&&W[W.length-1]==="/")J=5;return{name:W,mode:Z,uid:$,gid:K,size:H,mtime:new Date(1000*U),type:B,linkname:N,uname:z,gname:O,devmajor:w,devminor:E,pax:null}};function YQ7(X){return t5.equals(TQ8,X.subarray(257,263))}function GQ7(X){return t5.equals(eG7,X.subarray(257,263))&&t5.equals(XQ7,X.subarray(263,265))}function QQ7(X,Y,G){if(typeof X!=="number")return G;if(X=~~X,X>=Y)return Y;if(X>=0)return X;if(X+=Y,X>=0)return X;return 0}function JQ7(X){switch(X){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null}function ZQ7(X){switch(X){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0}function IQ8(X,Y,G,Q){for(;G<Q;G++)if(X[G]===Y)return G;return Q}function jQ8(X){let Y=256;for(let G=0;G<148;G++)Y+=X[G];for(let G=156;G<512;G++)Y+=X[G];return Y}function kT(X,Y){if(X=X.toString(8),X.length>Y)return"7777777777777777777".slice(0,Y)+" ";return"0000000000000000000".slice(0,Y-X.length)+X+" "}function WQ7(X,Y,G){Y[G]=128;for(let Q=11;Q>0;Q--)Y[G+Q]=X&255,X=Math.floor(X/256)}function $Q7(X,Y,G){if(X.toString(8).length>11)WQ7(X,Y,G);else t5.write(Y,kT(X,11),G)}function KQ7(X){let Y;if(X[0]===128)Y=!0;else if(X[0]===255)Y=!1;else return null;let G=[],Q;for(Q=X.length-1;Q>0;Q--){let Z=X[Q];if(Y)G.push(Z);else G.push(255-Z)}let J=0,W=G.length;for(Q=0;Q<W;Q++)J+=G[Q]*Math.pow(256,Q);return Y?J:-1*J}function ST(X,Y,G){if(X=X.subarray(Y,Y+G),Y=0,X[Y]&128)return KQ7(X);else{while(Y<X.length&&X[Y]===32)Y++;let Q=QQ7(IQ8(X,32,Y,X.length),X.length,X.length);while(Y<Q&&X[Y]===0)Y++;if(Q===Y)return 0;return parseInt(t5.toString(X.subarray(Y,Q)),8)}}function ds(X,Y,G,Q){return t5.toString(X.subarray(Y,IQ8(X,0,Y,Y+G)),Q)}function lb0(X){let Y=t5.byteLength(X),G=Math.floor(Math.log(Y)/Math.log(10))+1;if(Y+G>=Math.pow(10,G))G++;return Y+G+X}});var _Q8=k((SsG,vQ8)=>{var{Writable:OQ7,Readable:DQ7,getStreamError:VQ8}=ub0(),wQ7=fb0(),MQ8=ms(),cs=mb0(),LQ7=MQ8.alloc(0);class RQ8{constructor(){this.buffered=0,this.shifted=0,this.queue=new wQ7,this._offset=0}push(X){this.buffered+=X.byteLength,this.queue.push(X)}shiftFirst(X){return this._buffered===0?null:this._next(X)}shift(X){if(X>this.buffered)return null;if(X===0)return LQ7;let Y=this._next(X);if(X===Y.byteLength)return Y;let G=[Y];while((X-=Y.byteLength)>0)Y=this._next(X),G.push(Y);return MQ8.concat(G)}_next(X){let Y=this.queue.peek(),G=Y.byteLength-this._offset;if(X>=G){let Q=this._offset?Y.subarray(this._offset,Y.byteLength):Y;return this.queue.shift(),this._offset=0,this.buffered-=G,this.shifted+=G,Q}return this.buffered-=X,this.shifted+=X,Y.subarray(this._offset,this._offset+=X)}}class SQ8 extends DQ7{constructor(X,Y,G){super();this.header=Y,this.offset=G,this._parent=X}_read(X){if(this.header.size===0)this.push(null);if(this._parent._stream===this)this._parent._update();X(null)}_predestroy(){this._parent.destroy(VQ8(this))}_detach(){if(this._parent._stream===this)this._parent._stream=null,this._parent._missing=CQ8(this.header.size),this._parent._update()}_destroy(X){this._detach(),X(null)}}class kQ8 extends OQ7{constructor(X){super(X);if(!X)X={};this._buffer=new RQ8,this._offset=0,this._header=null,this._stream=null,this._missing=0,this._longHeader=!1,this._callback=db0,this._locked=!1,this._finished=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null,this._filenameEncoding=X.filenameEncoding||"utf-8",this._allowUnknownFormat=!!X.allowUnknownFormat,this._unlockBound=this._unlock.bind(this)}_unlock(X){if(this._locked=!1,X){this.destroy(X),this._continueWrite(X);return}this._update()}_consumeHeader(){if(this._locked)return!1;this._offset=this._buffer.shifted;try{this._header=cs.decode(this._buffer.shift(512),this._filenameEncoding,this._allowUnknownFormat)}catch(X){return this._continueWrite(X),!1}if(!this._header)return!0;switch(this._header.type){case"gnu-long-path":case"gnu-long-link-path":case"pax-global-header":case"pax-header":return this._longHeader=!0,this._missing=this._header.size,!0}if(this._locked=!0,this._applyLongHeaders(),this._header.size===0||this._header.type==="directory")return this.emit("entry",this._header,this._createStream(),this._unlockBound),!0;return this._stream=this._createStream(),this._missing=this._header.size,this.emit("entry",this._header,this._stream,this._unlockBound),!0}_applyLongHeaders(){if(this._gnuLongPath)this._header.name=this._gnuLongPath,this._gnuLongPath=null;if(this._gnuLongLinkPath)this._header.linkname=this._gnuLongLinkPath,this._gnuLongLinkPath=null;if(this._pax){if(this._pax.path)this._header.name=this._pax.path;if(this._pax.linkpath)this._header.linkname=this._pax.linkpath;if(this._pax.size)this._header.size=parseInt(this._pax.size,10);this._header.pax=this._pax,this._pax=null}}_decodeLongHeader(X){switch(this._header.type){case"gnu-long-path":this._gnuLongPath=cs.decodeLongPath(X,this._filenameEncoding);break;case"gnu-long-link-path":this._gnuLongLinkPath=cs.decodeLongPath(X,this._filenameEncoding);break;case"pax-global-header":this._paxGlobal=cs.decodePax(X);break;case"pax-header":this._pax=this._paxGlobal===null?cs.decodePax(X):Object.assign({},this._paxGlobal,cs.decodePax(X));break}}_consumeLongHeader(){this._longHeader=!1,this._missing=CQ8(this._header.size);let X=this._buffer.shift(this._header.size);try{this._decodeLongHeader(X)}catch(Y){return this._continueWrite(Y),!1}return!0}_consumeStream(){let X=this._buffer.shiftFirst(this._missing);if(X===null)return!1;this._missing-=X.byteLength;let Y=this._stream.push(X);if(this._missing===0){if(this._stream.push(null),Y)this._stream._detach();return Y&&this._locked===!1}return Y}_createStream(){return new SQ8(this,this._header,this._offset)}_update(){while(this._buffer.buffered>0&&!this.destroying){if(this._missing>0){if(this._stream!==null){if(this._consumeStream()===!1)return;continue}if(this._longHeader===!0){if(this._missing>this._buffer.buffered)break;if(this._consumeLongHeader()===!1)return!1;continue}let X=this._buffer.shiftFirst(this._missing);if(X!==null)this._missing-=X.byteLength;continue}if(this._buffer.buffered<512)break;if(this._stream!==null||this._consumeHeader()===!1)return}this._continueWrite(null)}_continueWrite(X){let Y=this._callback;this._callback=db0,Y(X)}_write(X,Y){this._callback=Y,this._buffer.push(X),this._update()}_final(X){this._finished=this._missing===0&&this._buffer.buffered===0,X(this._finished?null:Error("Unexpected end of data"))}_predestroy(){this._continueWrite(null)}_destroy(X){if(this._stream)this._stream.destroy(VQ8(this));X(null)}[Symbol.asyncIterator](){let X=null,Y=null,G=null,Q=null,J=null,W=this;return this.on("entry",K),this.on("error",(B)=>{X=B}),this.on("close",H),{[Symbol.asyncIterator](){return this},next(){return new Promise($)},return(){return U(null)},throw(B){return U(B)}};function Z(B){if(!J)return;let N=J;J=null,N(B)}function $(B,N){if(X)return N(X);if(Q){B({value:Q,done:!1}),Q=null;return}if(Y=B,G=N,Z(null),W._finished&&Y)Y({value:void 0,done:!0}),Y=G=null}function K(B,N,z){if(J=z,N.on("error",db0),Y)Y({value:N,done:!1}),Y=G=null;else Q=N}function H(){if(Z(X),!Y)return;if(X)G(X);else Y({value:void 0,done:!0});Y=G=null}function U(B){return W.destroy(B),Z(B),new Promise((N,z)=>{if(W.destroyed)return N({value:void 0,done:!0});W.once("close",function(){if(B)z(B);else N({value:void 0,done:!0})})})}}}vQ8.exports=function(Y){return new kQ8(Y)};function db0(){}function CQ8(X){return X&=511,X&&512-X}});var bQ8=k((ksG,cb0)=>{var fQ8={S_IFMT:61440,S_IFDIR:16384,S_IFCHR:8192,S_IFBLK:24576,S_IFIFO:4096,S_IFLNK:40960};try{cb0.exports=I1("fs").constants||fQ8}catch{cb0.exports=fQ8}});var mQ8=k((CsG,lQ8)=>{var{Readable:EQ7,Writable:PQ7,getStreamError:yQ8}=ub0(),um=ms(),is=bQ8(),gc1=mb0(),xQ8=um.alloc(1024);class hQ8 extends PQ7{constructor(X,Y,G){super({mapWritable:AQ7,eagerOpen:!0});if(this.written=0,this.header=Y,this._callback=G,this._linkname=null,this._isLinkname=Y.type==="symlink"&&!Y.linkname,this._isVoid=Y.type!=="file"&&Y.type!=="contiguous-file",this._finished=!1,this._pack=X,this._openCallback=null,this._pack._stream===null)this._pack._stream=this;else this._pack._pending.push(this)}_open(X){if(this._openCallback=X,this._pack._stream===this)this._continueOpen()}_continuePack(X){if(this._callback===null)return;let Y=this._callback;this._callback=null,Y(X)}_continueOpen(){if(this._pack._stream===null)this._pack._stream=this;let X=this._openCallback;if(this._openCallback=null,X===null)return;if(this._pack.destroying)return X(Error("pack stream destroyed"));if(this._pack._finalized)return X(Error("pack stream is already finalized"));if(this._pack._stream=this,!this._isLinkname)this._pack._encode(this.header);if(this._isVoid)this._finish(),this._continuePack(null);X(null)}_write(X,Y){if(this._isLinkname)return this._linkname=this._linkname?um.concat([this._linkname,X]):X,Y(null);if(this._isVoid){if(X.byteLength>0)return Y(Error("No body allowed for this entry"));return Y()}if(this.written+=X.byteLength,this._pack.push(X))return Y();this._pack._drain=Y}_finish(){if(this._finished)return;if(this._finished=!0,this._isLinkname)this.header.linkname=this._linkname?um.toString(this._linkname,"utf-8"):"",this._pack._encode(this.header);uQ8(this._pack,this.header.size),this._pack._done(this)}_final(X){if(this.written!==this.header.size)return X(Error("Size mismatch"));this._finish(),X(null)}_getError(){return yQ8(this)||Error("tar entry destroyed")}_predestroy(){this._pack.destroy(this._getError())}_destroy(X){this._pack._done(this),this._continuePack(this._finished?null:this._getError()),X()}}class gQ8 extends EQ7{constructor(X){super(X);this._drain=ib0,this._finalized=!1,this._finalizing=!1,this._pending=[],this._stream=null}entry(X,Y,G){if(this._finalized||this.destroying)throw Error("already finalized or destroyed");if(typeof Y==="function")G=Y,Y=null;if(!G)G=ib0;if(!X.size||X.type==="symlink")X.size=0;if(!X.type)X.type=qQ7(X.mode);if(!X.mode)X.mode=X.type==="directory"?493:420;if(!X.uid)X.uid=0;if(!X.gid)X.gid=0;if(!X.mtime)X.mtime=new Date;if(typeof Y==="string")Y=um.from(Y);let Q=new hQ8(this,X,G);if(um.isBuffer(Y))return X.size=Y.byteLength,Q.write(Y),Q.end(),Q;if(Q._isVoid)return Q;return Q}finalize(){if(this._stream||this._pending.length>0){this._finalizing=!0;return}if(this._finalized)return;this._finalized=!0,this.push(xQ8),this.push(null)}_done(X){if(X!==this._stream)return;if(this._stream=null,this._finalizing)this.finalize();if(this._pending.length)this._pending.shift()._continueOpen()}_encode(X){if(!X.pax){let Y=gc1.encode(X);if(Y){this.push(Y);return}}this._encodePax(X)}_encodePax(X){let Y=gc1.encodePax({name:X.name,linkname:X.linkname,pax:X.pax}),G={name:"PaxHeader",mode:X.mode,uid:X.uid,gid:X.gid,size:Y.byteLength,mtime:X.mtime,type:"pax-header",linkname:X.linkname&&"PaxHeader",uname:X.uname,gname:X.gname,devmajor:X.devmajor,devminor:X.devminor};this.push(gc1.encode(G)),this.push(Y),uQ8(this,Y.byteLength),G.size=X.size,G.type=X.type,this.push(gc1.encode(G))}_doDrain(){let X=this._drain;this._drain=ib0,X()}_predestroy(){let X=yQ8(this);if(this._stream)this._stream.destroy(X);while(this._pending.length){let Y=this._pending.shift();Y.destroy(X),Y._continueOpen()}this._doDrain()}_read(X){this._doDrain(),X()}}lQ8.exports=function(Y){return new gQ8(Y)};function qQ7(X){switch(X&is.S_IFMT){case is.S_IFBLK:return"block-device";case is.S_IFCHR:return"character-device";case is.S_IFDIR:return"directory";case is.S_IFIFO:return"fifo";case is.S_IFLNK:return"symlink"}return"file"}function ib0(){}function uQ8(X,Y){if(Y&=511,Y)X.push(xQ8.subarray(0,512-Y))}function AQ7(X){return um.isBuffer(X)?X:um.from(X)}});var dQ8=k((TQ7)=>{TQ7.extract=_Q8();TQ7.pack=mQ8()});var pQ8=k((_sG,iQ8)=>{iQ8.exports=cQ8;function cQ8(X,Y){if(X&&Y)return cQ8(X)(Y);if(typeof X!=="function")throw TypeError("need wrapper function");return Object.keys(X).forEach(function(Q){G[Q]=X[Q]}),G;function G(){var Q=Array(arguments.length);for(var J=0;J<Q.length;J++)Q[J]=arguments[J];var W=X.apply(this,Q),Z=Q[Q.length-1];if(typeof W==="function"&&W!==Z)Object.keys(Z).forEach(function($){W[$]=Z[$]});return W}}});var nb0=k((fsG,pb0)=>{var nQ8=pQ8();pb0.exports=nQ8(uc1);pb0.exports.strict=nQ8(tQ8);uc1.proto=uc1(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return uc1(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return tQ8(this)},configurable:!0})});function uc1(X){var Y=function(){if(Y.called)return Y.value;return Y.called=!0,Y.value=X.apply(this,arguments)};return Y.called=!1,Y}function tQ8(X){var Y=function(){if(Y.called)throw Error(Y.onceError);return Y.called=!0,Y.value=X.apply(this,arguments)},G=X.name||"Function wrapped with `once`";return Y.onceError=G+" shouldn't be called more than once",Y.called=!1,Y}});var oQ8=k((bsG,rQ8)=>{var VQ7=nb0(),MQ7=function(){},RQ7=global.Bare?queueMicrotask:process.nextTick.bind(process),SQ7=function(X){return X.setHeader&&typeof X.abort==="function"},kQ7=function(X){return X.stdio&&Array.isArray(X.stdio)&&X.stdio.length===3},aQ8=function(X,Y,G){if(typeof Y==="function")return aQ8(X,null,Y);if(!Y)Y={};G=VQ7(G||MQ7);var{_writableState:Q,_readableState:J}=X,W=Y.readable||Y.readable!==!1&&X.readable,Z=Y.writable||Y.writable!==!1&&X.writable,$=!1,K=function(){if(!X.writable)H()},H=function(){if(Z=!1,!W)G.call(X)},U=function(){if(W=!1,!Z)G.call(X)},B=function(E){G.call(X,E?Error("exited with error code: "+E):null)},N=function(E){G.call(X,E)},z=function(){RQ7(O)},O=function(){if($)return;if(W&&!(J&&(J.ended&&!J.destroyed)))return G.call(X,Error("premature close"));if(Z&&!(Q&&(Q.ended&&!Q.destroyed)))return G.call(X,Error("premature close"))},w=function(){X.req.on("finish",H)};if(SQ7(X))if(X.on("complete",H),X.on("abort",z),X.req)w();else X.on("request",w);else if(Z&&!Q)X.on("end",K),X.on("close",K);if(kQ7(X))X.on("exit",B);if(X.on("end",U),X.on("finish",H),Y.error!==!1)X.on("error",N);return X.on("close",z),function(){if($=!0,X.removeListener("complete",H),X.removeListener("abort",z),X.removeListener("request",w),X.req)X.req.removeListener("finish",H);X.removeListener("end",K),X.removeListener("close",K),X.removeListener("finish",H),X.removeListener("exit",B),X.removeListener("end",U),X.removeListener("error",N),X.removeListener("close",z)}};rQ8.exports=aQ8});var XJ8=k((ysG,eQ8)=>{var CQ7=nb0(),vQ7=oQ8(),lc1;try{lc1=I1("fs")}catch(X){}var l31=function(){},_Q7=typeof process>"u"?!1:/^v?\.0/.test(process.version),mc1=function(X){return typeof X==="function"},fQ7=function(X){if(!_Q7)return!1;if(!lc1)return!1;return(X instanceof(lc1.ReadStream||l31)||X instanceof(lc1.WriteStream||l31))&&mc1(X.close)},bQ7=function(X){return X.setHeader&&mc1(X.abort)},yQ7=function(X,Y,G,Q){Q=CQ7(Q);var J=!1;X.on("close",function(){J=!0}),vQ7(X,{readable:Y,writable:G},function(Z){if(Z)return Q(Z);J=!0,Q()});var W=!1;return function(Z){if(J)return;if(W)return;if(W=!0,fQ7(X))return X.close(l31);if(bQ7(X))return X.abort();if(mc1(X.destroy))return X.destroy();Q(Z||Error("stream was destroyed"))}},sQ8=function(X){X()},xQ7=function(X,Y){return X.pipe(Y)},hQ7=function(){var X=Array.prototype.slice.call(arguments),Y=mc1(X[X.length-1]||l31)&&X.pop()||l31;if(Array.isArray(X[0]))X=X[0];if(X.length<2)throw Error("pump requires two streams per minimum");var G,Q=X.map(function(J,W){var Z=W<X.length-1,$=W>0;return yQ7(J,Z,$,function(K){if(!G)G=K;if(K)Q.forEach(sQ8);if(Z)return;Q.forEach(sQ8),Y(G)})});return X.reduce(xQ7)};eQ8.exports=hQ7});var HJ8=k((mQ7)=>{var YJ8=dQ8(),GJ8=XJ8(),QJ8=I1("fs"),WY=I1("path"),m31=(global.Bare?global.Bare.platform:process.platform)==="win32";mQ7.pack=function(Y,G){if(!Y)Y=".";if(!G)G={};let Q=G.fs||QJ8,J=G.ignore||G.filter||d31,W=G.mapStream||$J8,Z=lQ7(Q,G.dereference?Q.stat:Q.lstat,Y,J,G.entries,G.sort),$=G.strict!==!1,K=typeof G.umask==="number"?~G.umask:~JJ8(),H=G.pack||YJ8.pack(),U=G.finish||d31,B=G.map||d31,N=typeof G.dmode==="number"?G.dmode:0,z=typeof G.fmode==="number"?G.fmode:0;if(G.strip)B=KJ8(B,G.strip);if(G.readable)N|=parseInt(555,8),z|=parseInt(444,8);if(G.writable)N|=parseInt(333,8),z|=parseInt(222,8);E();function O(P,q){Q.readlink(WY.join(Y,P),function(M,V){if(M)return H.destroy(M);q.linkname=tb0(V),H.entry(q,E)})}function w(P,q,M){if(H.destroyed)return;if(P)return H.destroy(P);if(!q){if(G.finalize!==!1)H.finalize();return U(H)}if(M.isSocket())return E();let V={name:tb0(q),mode:(M.mode|(M.isDirectory()?N:z))&K,mtime:M.mtime,size:M.size,type:"file",uid:M.uid,gid:M.gid};if(M.isDirectory())return V.size=0,V.type="directory",V=B(V)||V,H.entry(V,E);if(M.isSymbolicLink())return V.size=0,V.type="symlink",V=B(V)||V,O(q,V);if(V=B(V)||V,!M.isFile()){if($)return H.destroy(Error("unsupported type for "+q));return E()}let I=H.entry(V,E),R=W(Q.createReadStream(WY.join(Y,q),{start:0,end:V.size>0?V.size-1:V.size}),V);R.on("error",function(C){I.destroy(C)}),GJ8(R,I)}function E(P){if(P)return H.destroy(P);Z(w)}return H};function gQ7(X){return X.length?X[X.length-1]:null}function uQ7(){return!global.Bare&&process.getuid?process.getuid():-1}function JJ8(){return!global.Bare&&process.umask?process.umask():0}mQ7.extract=function(Y,G){if(!Y)Y=".";if(!G)G={};Y=WY.resolve(Y);let Q=G.fs||QJ8,J=G.ignore||G.filter||d31,W=G.mapStream||$J8,Z=G.chown!==!1&&!m31&&uQ7()===0,$=G.extract||YJ8.extract(),K=[],H=new Date,U=typeof G.umask==="number"?~G.umask:~JJ8(),B=G.strict!==!1,N=G.validateSymlinks!==!1,z=G.map||d31,O=typeof G.dmode==="number"?G.dmode:0,w=typeof G.fmode==="number"?G.fmode:0;if(G.strip)z=KJ8(z,G.strip);if(G.readable)O|=parseInt(555,8),w|=parseInt(444,8);if(G.writable)O|=parseInt(333,8),w|=parseInt(222,8);if($.on("entry",E),G.finish)$.on("finish",G.finish);return $;function E(I,R,C){I=z(I)||I,I.name=tb0(I.name);let _=WY.join(Y,WY.join("/",I.name));if(J(_,I))return R.resume(),C();let v=WY.join(_,".")===WY.join(Y,".")?Y:WY.dirname(_);WJ8(Q,v,WY.join(Y,"."),function(u,r){if(u)return C(u);if(!r)return C(Error(v+" is not a valid path"));if(I.type==="directory")return K.push([_,I.mtime]),V(_,{fs:Q,own:Z,uid:I.uid,gid:I.gid,mode:I.mode},y);V(v,{fs:Q,own:Z,uid:I.uid,gid:I.gid,mode:493},function(o){if(o)return C(o);switch(I.type){case"file":return f();case"link":return i();case"symlink":return h()}if(B)return C(Error("unsupported type for "+_+" ("+I.type+")"));R.resume(),C()})});function y(u){if(u)return C(u);q(_,I,function(r){if(r)return C(r);if(m31)return C();M(_,I,C)})}function h(){if(m31)return C();Q.unlink(_,function(){let u=WY.resolve(WY.dirname(_),I.linkname);if(!p(u)&&N)return C(Error(_+" is not a valid symlink"));ZJ8(Q,u,WY.join(Y,"."),function(r,o){if(r)return C(r);if(!o&&N)return C(Error(_+" is not a valid symlink"));Q.symlink(I.linkname,_,y)})})}function i(){if(m31)return C();Q.unlink(_,function(){let u=WY.join(Y,WY.join("/",I.linkname));Q.realpath(u,function(r,o){if(r||!p(o))return C(Error(_+" is not a valid hardlink"));Q.link(o,_,function(B1){if(B1&&B1.code==="EPERM"&&G.hardlinkAsFilesFallback)return R=Q.createReadStream(o),f();y(B1)})})})}function p(u){return u===Y||u.startsWith(Y+WY.sep)}function f(){let u=Q.createWriteStream(_),r=W(R,I);u.on("error",function(o){r.destroy(o)}),GJ8(r,u,function(o){if(o)return C(o);u.on("close",y)})}}function P(I,R){let C;while((C=gQ7(K))&&I.slice(0,C[0].length)!==C[0])K.pop();if(!C)return R();Q.utimes(C[0],H,C[1],R)}function q(I,R,C){if(G.utimes===!1)return C();if(R.type==="directory")return Q.utimes(I,H,R.mtime,C);if(R.type==="symlink")return P(I,C);Q.utimes(I,H,R.mtime,function(_){if(_)return C(_);P(I,C)})}function M(I,R,C){let _=R.type==="symlink",v=_?Q.lchmod:Q.chmod,y=_?Q.lchown:Q.chown;if(!v)return C();let h=(R.mode|(R.type==="directory"?O:w))&U;if(y&&Z)y.call(Q,I,R.uid,R.gid,i);else i(null);function i(p){if(p)return C(p);if(!v)return C();v.call(Q,I,h,C)}}function V(I,R,C){Q.stat(I,function(_){if(!_)return C(null);if(_.code!=="ENOENT")return C(_);Q.mkdir(I,{mode:R.mode,recursive:!0},function(v,y){if(v)return C(v);M(I,R,C)})})}};function ZJ8(X,Y,G,Q){if(Y===G)return Q(null,!0);if(!Y.startsWith(G+WY.sep))return Q(null,!1);X.lstat(Y,function(J,W){if(J&&J.code!=="ENOENT"&&J.code!=="EPERM")return Q(J);if(J||!W.isSymbolicLink())return ZJ8(X,WY.join(Y,".."),G,Q);Q(null,!1)})}function WJ8(X,Y,G,Q){if(Y===G)return Q(null,!0);X.lstat(Y,function(J,W){if(J&&J.code!=="ENOENT"&&J.code!=="EPERM")return Q(J);if(J||W.isDirectory())return WJ8(X,WY.join(Y,".."),G,Q);Q(null,!1)})}function d31(){}function $J8(X){return X}function tb0(X){return m31?X.replace(/\\/g,"/").replace(/[:?<>|]/g,"_"):X}function lQ7(X,Y,G,Q,J,W){if(!J)J=["."];let Z=J.slice(0);return function(K){if(!Z.length)return K(null);let H=Z.shift(),U=WY.join(G,H);Y.call(X,U,function(B,N){if(B)return K(J.indexOf(H)===-1&&B.code==="ENOENT"?null:B);if(!N.isDirectory())return K(null,H,N);X.readdir(U,function(z,O){if(z)return K(z);if(W)O.sort();for(let w=0;w<O.length;w++)if(!Q(WY.join(G,H,O[w])))Z.push(WY.join(H,O[w]));K(null,H,N)})})}}function KJ8(X,Y){return function(G){G.name=G.name.split("/").slice(Y).join("/");let Q=G.linkname;if(Q&&(G.type==="link"||WY.isAbsolute(Q)))G.linkname=Q.split("/").slice(Y).join("/");return X(G)}}});var iQ7,pQ7;var FJ8=D(()=>{vb0();iQ7=Y1(oG8(),1),pQ7=Y1(HJ8(),1)});var dc1=()=>{};var UJ8=D(()=>{Qc1()});var BJ8=D(()=>{kc1();Sc1();dc1()});var NJ8=()=>{};var zJ8=()=>{};var ab0=D(()=>{vG8();kb0();kc1();xG8();Rb0();vb0();hG8();gG8();uG8();lG8();Sb0();mG8();FJ8();dc1();UJ8();BJ8();NJ8();zJ8();dc1()});var OQ,oY,lm,c31;var i31=D(()=>{OQ={CLAIM_API_GROUP:"extensions.agents.x-k8s.io",CLAIM_API_VERSION:"v1alpha1",CLAIM_PLURAL:"sandboxclaims",SANDBOX_API_GROUP:"agents.x-k8s.io",SANDBOX_API_VERSION:"v1alpha1",SANDBOX_PLURAL:"sandboxes",POD_NAME_ANNOTATION:"agents.x-k8s.io/pod-name"};oY=class oY extends Error{cause;constructor(X,Y){super(X);if(this.name="SandboxError",this.cause=Y,Y instanceof Error&&Y.stack)this.stack=`${this.stack}
7291
7291
  Caused by: ${Y.stack}`}};lm=class lm extends oY{constructor(X,Y){super(X,Y);this.name="SandboxTimeoutError"}};c31=class c31 extends oY{constructor(X,Y){super(X,Y);this.name="SandboxAlreadyExistsError"}}});async function nQ7(X){let Y=X.getCurrentCluster();if(!Y)throw new oY("No active cluster in kubeconfig");let G={};await X.applyToHTTPSOptions(G);let Q={},J=G.headers??{};for(let[W,Z]of Object.entries(J))if(Array.isArray(Z))Q[W]=Z.join(", ");else if(Z!==void 0)Q[W]=String(Z);if(typeof G.auth==="string"&&!Q.Authorization)Q.Authorization=`Basic ${Buffer.from(G.auth).toString("base64")}`;return{server:Y.server.replace(/\/+$/,""),headers:Q,tls:{cert:rb0(G.cert),key:rb0(G.key),ca:rb0(G.ca),rejectUnauthorized:Y.skipTLSVerify?!1:void 0}}}function rb0(X){if(X==null)return;if(typeof X==="string")return X;if(Buffer.isBuffer(X))return X.toString("utf8");return String(X)}async function mm(X,Y){let G=await nQ7(X),Q={...G.headers,...Y.headers};if(Y.method==="PATCH")Q["content-type"]=Y.patchType==="apply"?"application/apply-patch+yaml":Y.patchType==="strategic-merge"?"application/strategic-merge-patch+json":"application/merge-patch+json";else if(Y.body!==void 0&&!("content-type"in Q))Q["content-type"]="application/json";let J={method:Y.method,headers:Q,body:Y.body===void 0?void 0:JSON.stringify(Y.body),signal:Y.signal,tls:G.tls};return fetch(`${G.server}${Y.path}`,J)}async function sb0(X){try{return await X.json()}catch{return null}}async function eb0(X,Y){if(X.ok)return;let G=await sb0(X),Q=G?.message??`${Y} failed: ${X.status} ${X.statusText}`;throw new ob0(X.status,G,Q)}async function p31(X,Y,G,Q,J="none"){try{let W=await mm(X,Y);if(W.status===404)return null;if(await eb0(W,G),J==="json")return await W.json();return null}catch(W){throw new oY(Q,W)}}async function n31(X,Y,G){let Q=`${OJ8}/${encodeURIComponent(Y)}/${OQ.CLAIM_PLURAL}`,J;try{J=await mm(X,{method:"POST",path:Q,body:G})}catch(H){let U=H instanceof Error?H.message:String(H);throw console.warn(`[agent-sandbox/client] createSandboxClaim ${G.metadata.name} transport error: ${U}`),new oY(`Failed to create SandboxClaim: ${G.metadata.name} (transport error: ${U})`,H)}if(J.ok)return;let W=await sb0(J),Z=W?.reason?` ${W.reason}`:"",$=W?.message??J.statusText,K=`Failed to create SandboxClaim: ${G.metadata.name} (${J.status}${Z}: ${$})`;if(console.warn(`[agent-sandbox/client] createSandboxClaim ${G.metadata.name} rejected: status=${J.status} reason=${W?.reason??"<none>"} message=${$}`),J.status===409)throw new c31(K);throw new oY(K)}async function cc1(X,Y,G,Q=60000){let J=Date.now()+Q,W=500,Z;while(!0){let $=await vT(X,Y,G).catch(()=>{return});if(!$)return;if(Z=$,Date.now()>=J){let K=Z.metadata?.finalizers??[],H=Z.metadata?.deletionTimestamp??"<unknown>";throw new lm(`SandboxClaim ${G} still terminating after ${Q}ms (deletionTimestamp=${H}, finalizers=[${K.join(", ")}])`)}await new Promise((K)=>setTimeout(K,500))}}function Xy0(X,Y){return`${OJ8}/${encodeURIComponent(X)}/${OQ.CLAIM_PLURAL}/${encodeURIComponent(Y)}`}async function DJ8(X,Y,G,Q){await p31(X,{method:"PATCH",path:Xy0(Y,G),patchType:"merge",body:{spec:{lifecycle:{shutdownPolicy:"Delete",shutdownTime:Q}}}},"patchSandboxClaimShutdown",`Failed to patch SandboxClaim shutdownTime: ${G}`)}async function CT(X,Y,G){await p31(X,{method:"DELETE",path:Xy0(Y,G)},"deleteSandboxClaim",`Failed to delete SandboxClaim: ${G}`)}async function vT(X,Y,G){return await p31(X,{method:"GET",path:Xy0(Y,G)},"getSandboxClaim",`Failed to get SandboxClaim: ${G}`,"json")??void 0}async function wJ8(X,Y,G,Q=60){let J=Date.now()+Q*1000,W=200;while(Date.now()<J){let $=(await vT(X,Y,G).catch(()=>{return}))?.status?.sandbox?.name;if($)return $;await new Promise((K)=>setTimeout(K,200))}throw new lm(`SandboxClaim ${G} did not record an adopted Sandbox (status.sandbox.name) within ${Q}s`)}function qJ8(X,Y){return`${PJ8}/${encodeURIComponent(X)}/${Yy0}/${encodeURIComponent(Y)}`}function tQ7(X){return`${PJ8}/${encodeURIComponent(X)}/${Yy0}`}async function ic1(X,Y,G){try{let Q=await mm(X,{method:"POST",path:tQ7(Y),body:G});if(Q.status===409)return;await eb0(Q,"createHttpRoute")}catch(Q){if(Q instanceof ob0&&Q.status===409)return;throw new oY(`Failed to create HTTPRoute: ${G.metadata.name}`,Q)}}async function pc1(X,Y,G){await p31(X,{method:"DELETE",path:qJ8(Y,G)},"deleteHttpRoute",`Failed to delete HTTPRoute: ${G}`)}async function AJ8(X,Y,G){return await p31(X,{method:"GET",path:qJ8(Y,G)},"getHttpRoute",`Failed to get HTTPRoute: ${G}`,"json")??void 0}async function TJ8(X,Y,G,Q){let J={apiVersion:"v1",kind:"Service",metadata:{name:G},spec:{ports:[{name:Q.name,port:Q.port,targetPort:Q.targetPort,protocol:Q.protocol??"TCP"}]}},W=new URLSearchParams({fieldManager:aQ7,force:"true"}),Z=`/api/v1/namespaces/${encodeURIComponent(Y)}/services/${encodeURIComponent(G)}?${W}`;try{let $=await mm(X,{method:"PATCH",path:Z,patchType:"apply",body:J});await eb0($,"ensureServicePort")}catch($){throw new oY(`Failed to apply Service ports: ${G}`,$)}}function nc1(X,Y,G,Q=180){let J=`/apis/${OQ.SANDBOX_API_GROUP}/${OQ.SANDBOX_API_VERSION}/namespaces/${encodeURIComponent(Y)}/${OQ.SANDBOX_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`,{resolve:W,reject:Z,promise:$}=Promise.withResolvers(),K=new AbortController,H=!1,U=setTimeout(()=>{if(H)return;H=!0,K.abort(),Z(new lm(`Sandbox did not become ready within ${Q} seconds`))},Q*1000),B=(N)=>{if(H)return;H=!0,clearTimeout(U),K.abort(),N()};return(async()=>{let N;try{N=await mm(X,{method:"GET",path:J,signal:K.signal,headers:{accept:"application/json"}})}catch(z){B(()=>Z(new oY("Failed to start watch for sandbox readiness",z)));return}if(!N.ok||!N.body){let z=await sb0(N).catch(()=>null);B(()=>Z(new oY(`Watch handshake failed (${N.status}): ${z?.message??N.statusText}`)));return}try{for await(let z of Gy0(N.body)){if(H)return;if(z.type==="ERROR"){let q=z.object;B(()=>Z(new oY(`Watch stream error while waiting for sandbox: ${q.message??"unknown"}`)));return}if(z.type!=="ADDED"&&z.type!=="MODIFIED")continue;let O=z.object;if(!O.status?.conditions?.find((q)=>q.type==="Ready"&&q.status==="True"))continue;let E=O.metadata?.name;if(!E){B(()=>Z(new oY("Sandbox metadata or name is missing")));return}let P=O.metadata?.annotations?.[OQ.POD_NAME_ANNOTATION]??E;B(()=>W({sandboxName:E,podName:P}));return}B(()=>Z(new oY("Watch stream closed before sandbox became ready")))}catch(z){if(H)return;if(z instanceof Error&&(z.name==="AbortError"||K.signal.aborted))return;B(()=>Z(new oY("Watch stream error while waiting for sandbox",z)))}})(),$}async function*Gy0(X){let Y=X.getReader(),G=new TextDecoder,Q="";try{while(!0){let{value:W,done:Z}=await Y.read();if(Z)break;Q+=G.decode(W,{stream:!0});let $;while(($=Q.indexOf(`
7292
- `))>=0){let K=Q.slice(0,$).trim();if(Q=Q.slice($+1),!K)continue;yield JSON.parse(K)}}let J=Q.trim();if(J)yield JSON.parse(J)}finally{Y.releaseLock()}}var ob0,OJ8,LJ8="gateway.networking.k8s.io",EJ8="v1",Yy0="httproutes",PJ8,t31,aQ7="mesh-sandbox-runner";var tc1=D(()=>{i31();ob0=class ob0 extends Error{status;body;constructor(X,Y,G){super(G);this.status=X;this.body=Y;this.name="KubeHttpError"}};OJ8=`/apis/${OQ.CLAIM_API_GROUP}/${OQ.CLAIM_API_VERSION}/namespaces`;PJ8=`/apis/${LJ8}/${EJ8}/namespaces`;t31={API_GROUP:LJ8,API_VERSION:EJ8,PLURAL:Yy0}});async function*VJ8(X){let Y=X.now??(()=>Date.now()),G=Y(),Q=X.schedulingTimeoutMs??sQ7,J={pod:{},sandbox:{},events:{hasPulling:!1,hasPulled:!1},startedAt:G},W=[],Z=null,$=!1,K=(E)=>{if($)return;if(Z){let P=Z;Z=null,P(E)}else W.push(E)},H=()=>{if(W.length>0)return Promise.resolve(W.shift());if($)return Promise.resolve(null);return new Promise((E)=>{Z=E})},U=()=>{if($)return;if($=!0,Z){let E=Z;Z=null,E(null)}},B=new AbortController,N=()=>{B.abort(),U()};if(X.signal)if(X.signal.aborted)B.abort(),U();else X.signal.addEventListener("abort",N,{once:!0});let z=Math.max(0,Q-(Y()-G)),O=setTimeout(()=>K("tick"),z+100),w=Promise.allSettled([eQ7(X.kc,X.namespace,X.claimName,B.signal,J,K,Y),YJ7(X.kc,X.namespace,X.claimName,B.signal,J,K),GJ7(X.kc,X.namespace,X.claimName,B.signal,J,K,Y)]);try{let E=null,P=-1,q=IJ8(J,Q,Y);if(E=Jy0(q),!Qy0(q))P=jJ8(q);if(yield q,Qy0(q))return;while(!$){if(await H()===null)break;let V=IJ8(J,Q,Y);if(Qy0(V)){let C=Jy0(V);if(C!==E)E=C,yield V;return}let I=jJ8(V);if(I<P)continue;let R=Jy0(V);if(R!==E)E=R,P=I,yield V}}finally{if(clearTimeout(O),B.abort(),X.signal)X.signal.removeEventListener("abort",N);U(),await w.catch(()=>{})}}function IJ8(X,Y,G){let{pod:Q,sandbox:J,events:W,startedAt:Z}=X;if(J.ready)return{kind:"ready"};let $=Q.containerWaitingReason;if($==="ImagePullBackOff"||$==="ErrImagePull")return{kind:"failed",reason:"image-pull-backoff",message:"Sandbox image failed to download. The cluster may be missing pull credentials or the image tag may not exist."};if($==="CrashLoopBackOff")return{kind:"failed",reason:"crash-loop-backoff",message:"Sandbox crashed during startup and is now in CrashLoopBackOff. Check pod logs."};if(!Q.scheduled&&W.lastFailedSchedulingAt!==void 0&&G()-Z>Y)return{kind:"failed",reason:"scheduling-timeout",message:W.failedSchedulingMessage??`Pod could not be scheduled within ${Math.round(Y/1000)}s.`};if(Q.containerRunning&&!Q.containerReady)return{kind:"warming-daemon",since:Z};if(W.hasPulling&&!W.hasPulled)return{kind:"pulling-image",since:Z};if($==="ContainerCreating"||$==="PodInitializing"||Q.scheduled&&!Q.containerRunning)return{kind:"starting-container",since:Z};if(Q.scheduledFalseReason==="Unschedulable"||W.lastFailedSchedulingAt!==void 0&&!Q.scheduled)return{kind:"waiting-for-capacity",since:Z,message:W.failedSchedulingMessage??Q.scheduledFalseMessage,nodeClaim:W.nominatedNodeClaim};return{kind:"claiming",since:Z}}function Qy0(X){return X.kind==="ready"||X.kind==="failed"}function jJ8(X){switch(X.kind){case"claiming":return 0;case"waiting-for-capacity":return 1;case"pulling-image":return 2;case"starting-container":return 3;case"warming-daemon":return 4;case"ready":case"failed":return 99}}function Jy0(X){switch(X.kind){case"claiming":case"pulling-image":case"starting-container":case"warming-daemon":return X.kind;case"waiting-for-capacity":return`waiting-for-capacity:${X.message??""}:${X.nodeClaim??""}`;case"ready":return"ready";case"failed":return`failed:${X.reason}:${X.message}`}}async function eQ7(X,Y,G,Q,J,W,Z){let $=`/api/v1/namespaces/${encodeURIComponent(Y)}/pods?watch=true&labelSelector=${encodeURIComponent(`${rQ7}=${G}`)}`;return Zy0({kc:X,path:$,signal:Q,label:`pod/${G}`,onEvent:(K)=>{if(K.type!=="ADDED"&&K.type!=="MODIFIED")return;let H=K.object;XJ7(H,J,Z),W("pod")}})}function XJ7(X,Y,G){let J=(X.status?.conditions??[]).find((Z)=>Z.type==="PodScheduled");if(J?.status==="True")Y.pod.scheduled=!0,Y.pod.scheduledFalseReason=void 0,Y.pod.scheduledFalseMessage=void 0;else if(J?.status==="False")Y.pod.scheduled=!1,Y.pod.scheduledFalseReason=J.reason,Y.pod.scheduledFalseMessage=J.message;let W=(X.status?.containerStatuses??[]).find((Z)=>Z.name===oQ7);if(W)Y.pod.containerWaitingReason=W.state?.waiting?.reason,Y.pod.containerRunning=!!W.state?.running,Y.pod.containerReady=W.ready===!0}async function YJ7(X,Y,G,Q,J,W){let Z=`/apis/${OQ.CLAIM_API_GROUP}/${OQ.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(Y)}/${OQ.CLAIM_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`;return Zy0({kc:X,path:Z,signal:Q,label:`sandboxclaim/${G}`,onEvent:($)=>{if($.type!=="ADDED"&&$.type!=="MODIFIED")return;let H=$.object.status?.conditions?.find((U)=>U.type==="Ready");if(!H)return;if(H.status==="True")J.sandbox.ready=!0,J.sandbox.notReadyReason=void 0,J.sandbox.notReadyMessage=void 0;else J.sandbox.ready=!1,J.sandbox.notReadyReason=H.reason,J.sandbox.notReadyMessage=H.message;W("sandbox")}})}async function GJ7(X,Y,G,Q,J,W,Z){let $=`/api/v1/namespaces/${encodeURIComponent(Y)}/events?watch=true&fieldSelector=${encodeURIComponent(`involvedObject.name=${G},involvedObject.kind=Pod`)}`;return Zy0({kc:X,path:$,signal:Q,label:`events/${G}`,onEvent:(K)=>{if(K.type!=="ADDED"&&K.type!=="MODIFIED")return;let H=K.object,U=H.reason;if(!U)return;switch(U){case"Pulling":J.events.hasPulling=!0;break;case"Pulled":J.events.hasPulling=!0,J.events.hasPulled=!0;break;case"FailedScheduling":J.events.lastFailedSchedulingAt=Z(),J.events.failedSchedulingMessage=H.message;break;case"Nominated":{let B=H.message?.match(/nodeclaim\/([\w-]+)/);if(B)J.events.nominatedNodeClaim=B[1];break}default:return}W("event")}})}async function Zy0(X){let{kc:Y,path:G,signal:Q,label:J,onEvent:W}=X,Z=0;while(!Q.aborted){try{let K=await mm(Y,{method:"GET",path:G,signal:Q,headers:{accept:"application/json"}});if(!K.ok||!K.body){try{await K.body?.cancel()}catch{}throw Error(`watch handshake failed: ${K.status} ${K.statusText}`)}Z=0;for await(let H of Gy0(K.body)){if(Q.aborted)return;try{W(H)}catch(U){console.warn(`[lifecycle-watcher] ${J} onEvent threw: ${U instanceof Error?U.message:String(U)}`)}}}catch(K){if(Q.aborted)return;let H=K instanceof Error?K.message:String(K);console.warn(`[lifecycle-watcher] ${J} watch ended: ${H}`)}if(Q.aborted)return;let $=Math.min(250*2**Z,5000);Z+=1,await QJ7($,Q)}}function QJ7(X,Y){return new Promise((G)=>{if(Y.aborted){G();return}let Q=setTimeout(()=>{Y.removeEventListener("abort",J),G()},X),J=()=>{clearTimeout(Q),G()};Y.addEventListener("abort",J,{once:!0})})}var rQ7="studio.decocms.com/sandbox-handle",oQ7="sandbox",sQ7=300000;var MJ8=D(()=>{i31();tc1()});import{createHash as JJ7,randomBytes as ZJ7,randomUUID as WJ7}from"crypto";import*as CJ8 from"net";import{PassThrough as $J7}from"stream";class Uy0{kind=KB;records=new Map;inflight=new DT;stateStore;previewUrlPattern;kubeConfig;portForward;namespace;sandboxTemplateName;envName;tokenGenerator;idleTtlMs;metrics;previewGateway;sentinelToken;closed=!1;constructor(X={}){this.stateStore=X.stateStore??null,this.previewUrlPattern=X.previewUrlPattern??null,this.kubeConfig=X.kubeConfig??wJ7(),this.portForward=new _b0(this.kubeConfig),this.namespace=X.namespace??KJ7,this.sandboxTemplateName=X.sandboxTemplateName??HJ7,this.envName=TJ7(X.envName),this.tokenGenerator=X.tokenGenerator??(()=>ZJ7(UJ7).toString("hex")),this.idleTtlMs=X.idleTtlMs??NJ7,this.metrics=X.meter?DJ7(X.meter):null,this.previewGateway=X.previewGateway&&X.previewUrlPattern?{...X.previewGateway}:null;let Y=X.sentinelToken?.trim()??"";this.sentinelToken=Y.length>0?Y:null}async ensure(X,Y={}){let G=this.computeHandle(X,Y.repo?.branch??null);return this.inflight.run(G,()=>HS(this.stateStore,X,KB,(Q)=>this.ensureLocked(X,G,Y,Q)))}async exec(X,Y){let G=await this.requireRecord(X);return Es(G.daemonUrl,G.token,Y)}async delete(X){let Y=await this.getRecord(X);if(this.records.delete(X),Y)this.closeForwarder(Y.daemonForward),this.metrics?.active.add(-1,Hy0(Y.tenant));if(await this.deleteHttpRouteIfManaged(X).catch((G)=>{console.warn(`[${pW}] HTTPRoute delete failed for ${X}: ${G instanceof Error?G.message:String(G)}`)}),await CT(this.kubeConfig,this.namespace,X),this.stateStore)if(Y)await this.stateStore.delete(Y.id,KB);else await this.stateStore.deleteByHandle(KB,X)}async alive(X){return await vT(this.kubeConfig,this.namespace,X)!==void 0}watchClaimLifecycle(X,Y){return VJ8({kc:this.kubeConfig,namespace:this.namespace,claimName:X,signal:Y})}async getPreviewUrl(X){let Y=await this.getRecord(X);if(!Y)return null;return this.composePreviewUrl(Y)}async proxyDaemonRequest(X,Y,G){let Q=await this.getRecord(X);if(!Q)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});let J=performance.now(),W=0;try{let Z=await Ps(Q.daemonUrl,Q.token,Y,G);return W=Z.status,Z}finally{this.recordProxyDuration("daemon",W,Q,performance.now()-J)}}async resolvePreviewUpstreamUrl(X){if(this.previewUrlPattern)return`http://${await this.resolveServiceNameForHandle(X)}.${this.namespace}.svc.cluster.local:${dm}`;let Y=await this.getRecord(X);if(Y)return Y.daemonUrl;let G=await this.resurrectByHandle(X);return G?G.daemonUrl:null}async resolveServiceNameForHandle(X){let Y=this.records.get(X);if(Y)return Y.adoptedSandboxName;if(this.stateStore){let Q=(await this.stateStore.getByHandle(KB,X).catch(()=>null))?.state?.adoptedSandboxName;if(Q)return Q}return X}async proxyPreviewRequest(X,Y){let G=performance.now(),Q=this.records.get(X)??null,J=0;try{let W=await this.resolvePreviewUpstreamUrl(X);if(!W)return J=404,$y0(404,{error:"sandbox not found"});let Z=new URL(Y.url);if((Z.pathname==="/_decopilot_vm"||Z.pathname.startsWith("/_decopilot_vm/"))&&Y.method!=="GET")return J=404,$y0(404,{error:"not found"});let K=(O)=>`${O}${Z.pathname}${Z.search}`,H=new Headers(Y.headers);for(let O of zJ7)H.delete(O);let U=Y.method!=="GET"&&Y.method!=="HEAD",B={method:Y.method,headers:H,body:U?Y.body:void 0,redirect:"manual",signal:Y.signal,duplex:U?"half":void 0},N;try{N=await fetch(K(W),B)}catch(O){let w=`${W}${Z.pathname}`;if(console.warn(`[${pW}] preview fetch to ${w} failed: ${O instanceof Error?O.message:String(O)}`),Y.method==="GET"||Y.method==="HEAD"){if(this.invalidateRecord(X),await this.resurrectByHandle(X).catch(()=>null)){let P=await this.resolvePreviewUpstreamUrl(X);if(P)try{N=await fetch(K(P),B);let q=new Headers;for(let[M,V]of N.headers.entries())if(!RJ8.includes(M.toLowerCase()))q.set(M,V);return J=N.status,new Response(N.body,{status:N.status,statusText:N.statusText,headers:q})}catch(q){console.warn(`[${pW}] preview fetch retry to ${w} failed: ${q instanceof Error?q.message:String(q)}`)}}}else this.invalidateRecord(X);return J=502,$y0(502,{error:"sandbox daemon unreachable"})}let z=new Headers;for(let[O,w]of N.headers.entries())if(!RJ8.includes(O.toLowerCase()))z.set(O,w);return J=N.status,new Response(N.body,{status:N.status,statusText:N.statusText,headers:z})}finally{this.recordProxyDuration("preview",J,Q,performance.now()-G,X)}}async ensureLocked(X,Y,G,Q){if(G.image)console.warn(`[${pW}] opts.image ignored (template ${this.sandboxTemplateName} pins image): got ${G.image}`);if(Q){let Z=await Q.get(X,KB);if(Z){let $=await this.rehydrate(X,Y,Z);if($)return this.finish($,Q,!1,!0,"resume");await Q.delete(X,KB)}}let J=await vT(this.kubeConfig,this.namespace,Y).catch(()=>{return});if(J)if(J.metadata?.deletionTimestamp)await cc1(this.kubeConfig,this.namespace,Y).catch((Z)=>{console.warn(`[${pW}] wait for terminating claim ${Y} failed: ${Z instanceof Error?Z.message:String(Z)}`)});else{let Z=await this.adopt(X,Y,J).catch(($)=>{return console.warn(`[${pW}] adopt ${Y} failed, recreating: ${$ instanceof Error?$.message:String($)}`),null});if(Z)return this.finish(Z,Q,!0,!0,"adopt");await CT(this.kubeConfig,this.namespace,Y).catch(()=>{}),await cc1(this.kubeConfig,this.namespace,Y).catch(($)=>{console.warn(`[${pW}] wait for deleted claim ${Y} failed: ${$ instanceof Error?$.message:String($)}`)})}let W=await this.provision(X,Y,G);return this.finish(W,Q,!0,!1,"fresh")}async finish(X,Y,G,Q,J){let W=this.records.has(X.handle);if(this.records.set(X.handle,X),G)await this.persist(Y,X);if(Q)await DJ8(this.kubeConfig,this.namespace,X.handle,this.computeShutdownTime()).catch((Z)=>console.warn(`[${pW}] TTL refresh failed for ${X.handle}: ${Z instanceof Error?Z.message:String(Z)}`));if(this.metrics){let Z=Hy0(X.tenant);if(this.metrics.ensureOutcome.add(1,{...Z,outcome:J}),!W)this.metrics.active.add(1,Z)}return this.toSandbox(X)}buildEnvMap(X,Y){let G={},Q=[];for(let[J,W]of Object.entries(X.env??{}))if(BJ7.has(J))Q.push(J);else G[J]=W;if(Q.length>0)console.warn(`[${pW}] opts.env keys overlap reserved bootstrap names and were dropped: ${Q.join(",")}`);return{...G,DAEMON_TOKEN:Y.token,DAEMON_BOOT_ID:Y.daemonBootId,APP_ROOT:Y.workdir,PROXY_PORT:String(dm)}}buildClaim(X,Y,G){let Q=this.sentinelToken!==null,J=Q?[]:Object.entries(this.buildEnvMap(Y,G)).sort(([W],[Z])=>W<Z?-1:W>Z?1:0).map(([W,Z])=>({name:W,value:Z}));return{apiVersion:`${OQ.CLAIM_API_GROUP}/${OQ.CLAIM_API_VERSION}`,kind:"SandboxClaim",metadata:{name:X,namespace:this.namespace,labels:{"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[HB.env]:this.envName}:{},...Ky0(Y.tenant)}},spec:{sandboxTemplateRef:{name:this.sandboxTemplateName},additionalPodMetadata:{labels:Ky0(Y.tenant,{[HB.role]:"claimed",[HB.sandboxHandle]:X,...this.envName?{[HB.env]:this.envName}:{}})},env:J,warmpool:Q?"default":"none",lifecycle:{shutdownPolicy:"Delete",shutdownTime:this.computeShutdownTime()}}}}async provision(X,Y,G){let Q=this.tokenGenerator(),J=WJ7(),W=Wy0,Z=this.buildClaim(Y,G,{token:Q,daemonBootId:J,workdir:W});try{await n31(this.kubeConfig,this.namespace,Z)}catch(N){if(N instanceof c31)await cc1(this.kubeConfig,this.namespace,Y),await n31(this.kubeConfig,this.namespace,Z);else throw N}let $;try{$=await wJ8(this.kubeConfig,this.namespace,Y),await nc1(this.kubeConfig,this.namespace,$)}catch(N){throw await CT(this.kubeConfig,this.namespace,Y).catch(()=>{}),N}try{await this.ensureServicePortForAdoptedSandbox($),await this.ensureHttpRouteForHandle(Y,$,G.tenant??null)}catch(N){throw await CT(this.kubeConfig,this.namespace,Y).catch(()=>{}),N}let K=await this.openForwarder($,dm,Y),H=`http://127.0.0.1:${K.localPort}`,U=RJ7({runtime:G.workload?.runtime??"node",packageManager:G.workload?.packageManager?{name:G.workload.packageManager,...G.workload.packageManagerPath?{path:G.workload.packageManagerPath}:{}}:null,repo:G.repo??null,desiredPort:G.workload?.devPort??FJ7}),B=J;try{if(await Hk1(H),this.sentinelToken!==null){let N=await EL(H);if(N)B=N.bootId;await KS(H,this.sentinelToken,U??{},{rotateToken:Q})}else if(U)await KS(H,Q,U)}catch(N){throw this.closeForwarder(K),await this.deleteHttpRouteIfManaged(Y).catch(()=>{}),await CT(this.kubeConfig,this.namespace,Y).catch(()=>{}),N}return{id:X,handle:Y,adoptedSandboxName:$,token:Q,workdir:W,daemonUrl:H,daemonForward:K,workload:G.workload??null,daemonBootId:B,tenant:G.tenant??null,ensureOpts:jJ7(G)}}async ensureServicePortForAdoptedSandbox(X){if(!this.previewGateway||!this.previewUrlPattern)return;await TJ8(this.kubeConfig,this.namespace,X,{name:"daemon",port:dm,targetPort:dm})}async ensureHttpRouteForHandle(X,Y,G){if(!this.previewGateway||!this.previewUrlPattern)return;let Q=VJ7(this.previewUrlPattern,X);if(!Q)throw new oY(`Unable to derive preview hostname for ${X} from pattern: ${this.previewUrlPattern}`);let J={apiVersion:`${t31.API_GROUP}/${t31.API_VERSION}`,kind:"HTTPRoute",metadata:{name:X,namespace:this.namespace,labels:Ky0(G??void 0,{[HB.role]:"claimed",[HB.sandboxHandle]:X,"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[HB.env]:this.envName}:{}})},spec:{parentRefs:[{kind:"Gateway",group:"gateway.networking.k8s.io",name:this.previewGateway.name,namespace:this.previewGateway.namespace}],hostnames:[Q],rules:[{backendRefs:[{group:"",kind:"Service",name:Y,port:dm}]}]}};await ic1(this.kubeConfig,this.namespace,J)}async deleteHttpRouteIfManaged(X){if(!this.previewGateway)return;await pc1(this.kubeConfig,this.namespace,X)}async rehydrate(X,Y,G){let Q=G.state;if(!Q.adoptedSandboxName&&!Q.podName||!Q.token)return null;let J=await vT(this.kubeConfig,this.namespace,Y).catch(()=>{return});if(!J||!SJ8(J))return null;let W=J.status?.sandbox?.name??Q.adoptedSandboxName??Q.podName??Y,Z=await this.openAndProbeDaemon(W,Y);if(!Z)return null;if(Q.daemonBootId&&Q.daemonBootId!==Z.bootId)console.warn(`[${pW}] daemon restart detected (handle=${Y}): stored bootId=${Q.daemonBootId} live bootId=${Z.bootId}`);return{id:X,handle:Y,adoptedSandboxName:W,token:Q.token,workdir:Q.workdir??Wy0,daemonUrl:Z.daemonUrl,daemonForward:Z.daemonForward,workload:Q.workload??null,daemonBootId:Z.bootId,tenant:Q.tenant??null,ensureOpts:Q.ensureOpts??null}}async adopt(X,Y,G){if(!SJ8(G))return null;let Q=G.status?.sandbox?.name??Y;if(this.sentinelToken!==null)return null;let J=LJ7(G);if(!J)return null;let W=await this.openAndProbeDaemon(Q,Y);if(!W)return null;let Z=IJ7(G);if(this.previewGateway)await this.ensureServicePortForAdoptedSandbox(Q).catch(($)=>{console.warn(`[${pW}] Service port backfill failed for ${Y}: ${$ instanceof Error?$.message:String($)}`)}),await this.ensureHttpRouteForHandle(Y,Q,Z).catch(($)=>{console.warn(`[${pW}] HTTPRoute backfill failed for ${Y}: ${$ instanceof Error?$.message:String($)}`)});return{id:X,handle:Y,adoptedSandboxName:Q,token:J,workdir:Wy0,daemonUrl:W.daemonUrl,daemonForward:W.daemonForward,workload:null,daemonBootId:W.bootId,tenant:Z,ensureOpts:null}}async openAndProbeDaemon(X,Y){let G=await this.openForwarder(X,dm,Y).catch(()=>null);if(!G)return null;let Q=`http://127.0.0.1:${G.localPort}`,J=await EL(Q);if(!J)return this.closeForwarder(G),null;return{daemonForward:G,daemonUrl:Q,bootId:J.bootId}}async getRecord(X){let Y=this.records.get(X);if(Y)return Y;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(KB,X);if(!G)return null;let Q=await this.rehydrate(G.id,X,G);if(Q)this.records.set(X,Q);return Q}async resurrectByHandle(X){if(!this.stateStore)return null;let Y=await this.stateStore.getByHandle(KB,X);if(!Y)return null;let G=Y.state.ensureOpts;if(!G)return null;return await this.ensure(Y.id,G),this.records.get(X)??null}async requireRecord(X){let Y=await this.getRecord(X);if(Y)return Y;let G=await this.resurrectByHandle(X);if(G)return G;throw Error(`unknown sandbox handle ${X}`)}invalidateRecord(X){let Y=this.records.get(X);if(!Y)return;this.records.delete(X),this.closeForwarder(Y.daemonForward)}recordProxyDuration(X,Y,G,Q,J){if(!this.metrics)return;this.metrics.proxyDurationMs.record(Q,{...Hy0(G?.tenant??null),source:X,sandbox_handle:G?.handle??J??"",status_code:Y||0})}computeHandle(X,Y){return zJ(X,Y,{hashLen:16})}composePreviewUrl(X){if(this.previewUrlPattern)return nz(this.previewUrlPattern,X.handle);return`http://127.0.0.1:${X.daemonForward.localPort}/`}toSandbox(X){return{handle:X.handle,workdir:X.workdir,previewUrl:this.composePreviewUrl(X)}}async persist(X,Y){if(!X)return;let G={adoptedSandboxName:Y.adoptedSandboxName,token:Y.token,workdir:Y.workdir,workload:Y.workload,daemonBootId:Y.daemonBootId,tenant:Y.tenant,...Y.ensureOpts?{ensureOpts:Y.ensureOpts}:{}};await X.put(Y.id,KB,{handle:Y.handle,state:G})}computeShutdownTime(){return new Date(Date.now()+this.idleTtlMs).toISOString()}openForwarder(X,Y,G=X){let Q=EJ7(G,Y);return new Promise((J,W)=>{let Z=($,K)=>{let H=CJ8.createServer((U)=>this.handleForwardedConnection(U,X,Y,G));H.once("error",(U)=>{if(U.code==="EADDRINUSE"&&K<OJ7){try{H.close()}catch{}let B=Fy0+($-Fy0+1)%vJ8;Z(B,K+1);return}W(U)}),H.listen($,"127.0.0.1",()=>{let U=H.address();if(!U||typeof U==="string"){H.close(),W(Error("port-forward listener failed to bind"));return}J({server:H,localPort:U.port})})};Z(Q,0)})}handleForwardedConnection(X,Y,G,Q){let J=new $J7,W=null,Z=!1,$=()=>{if(Z)return;if(Z=!0,J.destroy(),W)try{W.close()}catch{}if(!X.destroyed)X.destroy()};X.pipe(J),X.on("error",$),X.on("close",$),this.portForward.portForward(this.namespace,Y,[G],X,null,J).then((K)=>{let H=typeof K==="function"?K():K;if(!H){$();return}if(W=H,W.on("close",$),W.on("error",()=>{this.invalidateRecord(Q),$()}),Z)try{W.close()}catch{}}).catch((K)=>{console.warn(`[${pW}] port-forward to ${Y}:${G} failed: ${K instanceof Error?K.message:String(K)}`),this.invalidateRecord(Q),$()})}closeForwarder(X){X.server.close((Y)=>{if(Y)console.warn(`[${pW}] port-forward close on :${X.localPort} errored: ${Y instanceof Error?Y.message:String(Y)}`)})}close(){if(this.closed)return;this.closed=!0;for(let X of this.records.values())this.closeForwarder(X.daemonForward);this.records.clear()}}function DJ7(X){return{active:X.createUpDownCounter("studio.sandbox.active",{description:"Active sandbox count, by runner kind and owning org. Cross-checks the cAdvisor-derived count from the cluster \u2014 divergence between the two indicates orphaned claims (mesh deleted but K8s didn't reap) or unattributed pods.",unit:"{sandbox}"}),ensureOutcome:X.createCounter("studio.sandbox.ensure.outcome",{description:"Outcome of each ensure() call: fresh provision, resume from state-store after restart, or adopt of a cluster-side claim mesh didn't know about. Cold-start ratio is the primary input for warm-pool sizing.",unit:"{call}"}),proxyDurationMs:X.createHistogram("studio.sandbox.proxy.duration_ms",{description:"Wall-clock latency of mesh-mediated requests to the sandbox daemon: tool exec proxies (source=daemon) and preview iframe traffic (source=preview).",unit:"ms"})}}function wJ7(){let X=new ls;return X.loadFromDefault(),X}function SJ8(X){return Boolean(X.status?.conditions?.some((Y)=>Y.type==="Ready"&&Y.status==="True"))}function LJ7(X){let Y=X.spec?.env;if(!Y)return null;for(let G of Y)if(G.name==="DAEMON_TOKEN"&&G.value)return G.value;return null}function EJ7(X,Y){let G=JJ7("sha256").update(`${X}:${Y}`).digest();return Fy0+G.readUInt32BE(0)%vJ8}function $y0(X,Y){return new Response(JSON.stringify(Y),{status:X,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function kJ8(X){let Y=X.slice(0,qJ7);return PJ7.test(Y)?Y:""}function TJ7(X){if(X===void 0)return null;let Y=X.trim();if(Y==="")return null;if(!AJ7.test(Y))throw Error(`AgentSandboxRunner: envName=${JSON.stringify(Y)} is not a valid DNS-label-safe environment name (lowercase alphanumeric or '-', starts with a letter, ends alphanumeric, \u226432 chars). Mesh sets this from STUDIO_ENV; check the studio chart's configMap.`);return Y}function Ky0(X,Y={}){let G={...Y};if(X){let Q=kJ8(X.orgId),J=kJ8(X.userId);if(Q)G[HB.orgId]=Q;if(J)G[HB.userId]=J}return G}function IJ7(X){let Y=X.metadata?.labels;if(!Y)return null;let G=Y[HB.orgId],Q=Y[HB.userId];if(!G||!Q)return null;return{orgId:G,userId:Q}}function Hy0(X){return{org_id:X?.orgId??"",user_id:X?.userId??"",runner_kind:KB}}function jJ7(X){let Y={};if(X.repo)Y.repo=X.repo;if(X.workload)Y.workload=X.workload;if(X.env&&Object.keys(X.env).length>0)Y.env=X.env;if(X.tenant)Y.tenant=X.tenant;return Object.keys(Y).length>0?Y:null}function VJ7(X,Y){try{return new URL(nz(X,Y)).hostname||null}catch{return null}}function MJ7(X){try{let Y=new URL(X);return Y.pathname.replace(/^\/+/,"").replace(/\.git$/,"")||Y.hostname}catch{return X}}function RJ7(X){let Y=X.repo,G=Y?{repository:{cloneUrl:Y.cloneUrl,repoName:Y.displayName??MJ7(Y.cloneUrl),...Y.branch?{branch:Y.branch}:{}},identity:{userName:Y.userName,userEmail:Y.userEmail}}:void 0,Q=X.packageManager?{name:X.packageManager.name,...X.packageManager.path?{path:X.packageManager.path}:{}}:void 0,J=Q?{packageManager:Q,runtime:X.runtime,intent:"running",...X.desiredPort!==void 0?{desiredPort:X.desiredPort}:{},proxy:{}}:void 0;if(!G&&!J)return null;return{...G?{git:G}:{},...J?{application:J}:{}}}var KB="agent-sandbox",pW="AgentSandboxRunner",KJ7="agent-sandbox-system",HJ7="studio-sandbox",dm=9000,FJ7=3000,Wy0="/app",UJ7=32,BJ7,NJ7=900000,zJ7,RJ8,Fy0=40000,vJ8=1e4,OJ7=256,HB,PJ7,qJ7=63,AJ7;var _J8=D(()=>{ab0();Fk1();Ts();tc1();i31();MJ8();BJ7=new Set(["DAEMON_TOKEN","DAEMON_BOOT_ID","APP_ROOT","PROXY_PORT"]),zJ7=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length","upgrade"],RJ8=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];HB={role:"studio.decocms.com/role",sandboxHandle:"studio.decocms.com/sandbox-handle",orgId:"studio.decocms.com/org-id",userId:"studio.decocms.com/user-id",env:"studio.decocms.com/env"},PJ7=/^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$/;AJ7=/^[a-z]([a-z0-9-]{0,30}[a-z0-9])?$/});var fJ8={};V0(fJ8,{waitForSandboxReady:()=>nc1,getSandboxClaim:()=>vT,getHttpRoute:()=>AJ8,deleteSandboxClaim:()=>CT,deleteHttpRoute:()=>pc1,createSandboxClaim:()=>n31,createHttpRoute:()=>ic1,SandboxTimeoutError:()=>lm,SandboxError:()=>oY,KubeConfig:()=>ls,K8S_CONSTANTS:()=>OQ,HTTPROUTE_CONSTANTS:()=>t31,AgentSandboxRunner:()=>Uy0});var bJ8=D(()=>{ab0();i31();tc1();_J8()});var wy0={};V0(wy0,{subscribeLifecycle:()=>Dy0,getSharedRunnerIfInit:()=>zy0,getSharedRunner:()=>cm,getRunnerByKind:()=>ps,getOrInitSharedRunner:()=>fT,asDockerRunner:()=>Oy0,__resetSharedLifecyclesForTesting:()=>uJ7});function hJ8(X,Y){let G=Ny0[X];if(G)return Promise.resolve(G);let Q=By0[X];if(Q)return Q;let J=Y().then((W)=>{return Ny0[X]=W,W}).finally(()=>{delete By0[X]});return By0[X]=J,J}function CJ7(){let X=process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN;return X&&X.trim()!==""?X:void 0}function vJ7(){let X=process.env.STUDIO_SANDBOX_TEMPLATE_NAME;return X&&X.trim()!==""?X:void 0}function _J7(){let X=process.env.STUDIO_ENV;return X&&X.trim()!==""?X:void 0}function fJ7(){let X=process.env.STUDIO_SANDBOX_SENTINEL_TOKEN;return X&&X.trim()!==""?X:void 0}function bJ7(){let X=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME?.trim(),Y=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE?.trim();if(!X&&!Y)return;if(!X||!Y)throw Error("STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME and STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE must both be set, or both unset. Half-configured per-claim HTTPRoute routing would silently fail to attach.");return{name:X,namespace:Y}}async function gJ8(X,Y){let G=new L31(Y),Q=CJ7();switch(X){case"host":{let{HostSandboxRunner:J}=await Promise.resolve().then(() => (tH(),US)),{getSettings:W}=await Promise.resolve().then(() => (l9(),Nl0));return new J({homeDir:W().dataDir,stateStore:G,previewUrlPattern:Q})}case"docker":return new QB({stateStore:G,previewUrlPattern:Q});case"freestyle":{let{FreestyleSandboxRunner:J}=await Promise.resolve().then(() => (c58(),d58));return new J({stateStore:G})}case"agent-sandbox":{let{AgentSandboxRunner:J}=await Promise.resolve().then(() => (bJ8(),fJ8));return new J({stateStore:G,previewUrlPattern:Q,sandboxTemplateName:vJ7(),envName:_J7(),previewGateway:bJ7(),sentinelToken:fJ7(),meter:YU})}default:throw Error(`Unknown runner kind: ${String(X)}`)}}function cm(X){return ps(X,az())}function ps(X,Y){return hJ8(Y,()=>gJ8(Y,X.db))}async function fT(){let X;try{X=az()}catch(Y){return console.warn("[lifecycle] cannot resolve sandbox runner:",Y instanceof Error?Y.message:String(Y)),null}return hJ8(X,()=>gJ8(X,a7().db))}function zy0(){let X;try{X=az()}catch{return null}return Ny0[X]??null}function Oy0(X){return X instanceof QB?X:null}function Dy0(X,Y,G){let Q=_T.get(Y);if(Q){if(Q.terminated){if(Q.lastPhase)try{G(Q.lastPhase)}catch{}return{unsubscribe:hJ7}}if(Q.listeners.add(G),Q.lastPhase)try{G(Q.lastPhase)}catch{}return yJ8(Y,Q,G)}let J=new AbortController,W={lastPhase:null,terminated:!1,listeners:new Set([G]),abort:J};return _T.set(Y,W),gJ7(X,Y,W),yJ8(Y,W,G)}function hJ7(){}function yJ8(X,Y,G){return{unsubscribe(){if(_T.get(X)!==Y)return;if(Y.listeners.delete(G),Y.listeners.size===0)_T.delete(X),Y.abort.abort()}}}async function gJ7(X,Y,G){let Q=null;try{for await(let J of X.watchClaimLifecycle(Y,G.abort.signal)){if(G.abort.signal.aborted)break;G.lastPhase=J;let W=J.kind==="ready"||J.kind==="failed";if(W)G.terminated=!0;let Z=Array.from(G.listeners);for(let $ of Z)try{$(J)}catch{}if(W)break}}catch(J){Q=J}finally{if(!G.terminated&&!G.abort.signal.aborted&&G.listeners.size>0){let J={kind:"failed",reason:"unknown",message:Q instanceof Error?Q.message:"Lifecycle watcher ended unexpectedly"};G.lastPhase=J,G.terminated=!0;for(let W of Array.from(G.listeners))try{W(J)}catch{}}if(_T.get(Y)===G)_T.delete(Y)}}function uJ7(){for(let X of _T.values())X.abort.abort();_T.clear()}var SJ7,kJ7,xJ8,Ny0,By0,yJ7,xJ7,_T;var FB=D(()=>{tH();GU();T$();T_0();SJ7=Symbol.for("decocms.sandbox.lifecycle.runners"),kJ7=Symbol.for("decocms.sandbox.lifecycle.inflight"),xJ8=globalThis,Ny0=xJ8[SJ7]??={},By0=xJ8[kJ7]??={};yJ7=Symbol.for("decocms.sandbox.lifecycle.shared-lifecycles"),xJ7=globalThis,_T=xJ7[yJ7]??=new Map});async function uJ8(X,Y){B0(Y);let G=s1(Y),Q=Z6(Y);if(!Q)throw Error("User ID required");let J=await Y.storage.virtualMcps.findById(X.virtualMcpId);if(!J||J.organization_id!==G.id)throw Error("Virtual MCP not found");let W=J.metadata??{},Z=Is(wT(W),Q,X.branch),$=az();if(Z&&(Z.runnerKind??"freestyle")===$)return Z;await lJ8(Y,Z,$);let K=W.githubRepo??null,{entry:H}=await mJ8({ctx:Y,userId:Q,orgId:G.id,virtualMcpId:X.virtualMcpId,branch:X.branch,metadata:W,githubRepo:K,existing:Z});return H}async function lJ8(X,Y,G){if(!Y)return;let Q=Y.runnerKind??"freestyle";if(Q===G)return;if(Q==="freestyle")return;try{await(await ps(X,Q)).delete(Y.vmId)}catch(J){console.error(`[VM_START] stale ${Q} ${Y.vmId}: ${J instanceof Error?J.message:String(J)}`)}}async function mJ8(X){let{ctx:Y,userId:G,orgId:Q,virtualMcpId:J,branch:W,metadata:Z,githubRepo:$,existing:K}=X;if($&&!$.connectionId)throw Error("GitHub connection id missing on virtual MCP metadata");let{runtime:H,packageManager:U,port:B,packageManagerPath:N}=tp6(Z),z;if($){let{cloneUrl:R,gitUserName:C,gitUserEmail:_}=await ap6($.connectionId,$.owner,$.name,Y.db,Y.vault);if(!U){let v=await ep6($.connectionId,$.owner,$.name,Y.db,Y.vault);if(v)U=v.packageManager,H=w31[v.packageManager].runtime,B=v.devPort??B,await lJ7(Y,J,G,v.packageManager,v.devPort)}z={cloneUrl:R,userName:C,userEmail:_,branch:W,displayName:`${$.owner}/${$.name}`}}let O=H&&U?{runtime:H,packageManager:U,...B!==null?{devPort:Number(B)}:{},...N?{packageManagerPath:N}:{}}:void 0,w=tz({orgId:Q,virtualMcpId:J,branch:W}),E=await cm(Y),P=await E.ensure({userId:G,projectRef:w},{repo:z,workload:O,tenant:{orgId:Q,userId:G}}),M=!!K&&K.vmId===P.handle&&K?.createdAt?K.createdAt:Date.now(),V={vmId:P.handle,previewUrl:P.previewUrl,runnerKind:E.kind,createdAt:M};await pp6(Y.storage.virtualMcps,J,G,G,W,V);let I=!K||K.vmId!==P.handle;return{entry:V,isNewVm:I}}async function lJ7(X,Y,G,Q,J){let W=await X.storage.virtualMcps.findById(Y);if(!W)return;let Z=W.metadata??{};await X.storage.virtualMcps.update(Y,G,{metadata:{...Z,runtime:{selected:Q,port:J}}})}var Ly0;var Ey0=D(()=>{H0();tH();h0();A_0();rp6();Xn6();Nk0();q_0();FB();Ly0=m1({name:"VM_START",description:"Start a sandbox with the connected GitHub repo and dev server.",annotations:{title:"Start VM Preview",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:F.object({virtualMcpId:F.string().describe("Virtual MCP ID"),branch:F.string().min(1).optional().describe("Optional git branch to check out. When omitted the handler generates `deco/<adjective>-<noun>` and uses it. The resolved branch is returned in the response so callers can persist it.")}),outputSchema:F.object({previewUrl:F.string().nullable(),vmId:F.string(),branch:F.string(),isNewVm:F.boolean(),runnerKind:F.enum(["host","docker","freestyle","agent-sandbox"])}),handler:async(X,Y)=>{let G=X.branch??wS1(),{metadata:Q,userId:J,organization:W,entry:Z}=await wk1({virtualMcpId:X.virtualMcpId,branch:G},Y),$=Q.githubRepo??null,K=az();await lJ8(Y,Z,K);let{entry:H,isNewVm:U}=await mJ8({ctx:Y,userId:J,orgId:W.id,virtualMcpId:X.virtualMcpId,branch:G,metadata:Q,githubRepo:$,existing:Z});return{...H,branch:G,isNewVm:U,runnerKind:K}}})});var Py0;var dJ8=D(()=>{H0();h0();A_0();FB();Py0=m1({name:"VM_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:F.object({virtualMcpId:F.string().describe("Virtual MCP ID that owns this VM"),branch:F.string().min(1).describe("Branch whose vm should be deleted (vmMap[userId][branch])")}),outputSchema:F.object({success:F.boolean()}),handler:async(X,Y)=>{let G;try{G=await wk1(X,Y)}catch($){if($ instanceof Error&&$.message==="Virtual MCP not found")return{success:!0};throw $}let{entry:Q,userId:J}=G;if(!Q)return{success:!0};await np6(Y.storage.virtualMcps,X.virtualMcpId,J,J,X.branch);let W=Q.runnerKind??"freestyle";return await(await ps(Y,W)).delete(Q.vmId).catch(($)=>console.error(`[VM_DELETE] ${W} ${Q.vmId}: ${$ instanceof Error?$.message:String($)}`)),{success:!0}}})});var cJ8=D(()=>{Ey0();dJ8()});var dJ7="https://api.github.com",qy0;var iJ8=D(()=>{H0();h0();wM1();mR();qy0=m1({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:F.object({connectionId:F.string().describe("ID of the mcp-github connection to use")}),outputSchema:F.object({installations:F.array(F.object({installationId:F.number(),login:F.string(),avatarUrl:F.string(),type:F.string()})),appSlug:F.string().optional()}),handler:async(X,Y)=>{await Y.access.check();let G=new j3(Y.db,Y.vault),Q=await G.get(X.connectionId);if(!Q)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let J=Q.accessToken;if(KQ1(Q)&&G.isExpired(Q,DM1)){let U=await HQ1(Q,G);if(!U)throw Error(QR);J=U,Q=await G.get(X.connectionId)??Q}let W=[],Z,$=1,K=100,H=async(U)=>fetch(`${dJ7}/user/installations?per_page=${K}&page=${$}`,{headers:{Authorization:`Bearer ${U}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});while(!0){let U=await H(J);if(U.status===401){let N=await G.get(X.connectionId);if(!N||!KQ1(N))throw Error(QR);let z=await HQ1(N,G);if(!z)throw Error(QR);if(J=z,U=await H(J),U.status===401)throw Error(QR)}if(!U.ok)throw Error(`GitHub /user/installations failed: ${U.status}`);let B=await U.json();for(let N of B.installations){if(!Z)Z=N.app_slug??N.app?.slug;W.push({installationId:N.id,login:N.account.login,avatarUrl:N.account.avatar_url,type:N.account.type})}if(B.installations.length<K)break;$++}return{installations:W,...Z?{appSlug:Z}:{}}}})});var pJ8=D(()=>{iJ8()});var zS1={};V0(zS1,{managementMCP:()=>Xs,listManagementTools:()=>nJ7,ALL_TOOLS:()=>nJ8});async function nJ7(X){let Y=await Xs(X),[G,Q]=IG1.createLinkedPair();await Y.connect(Q);let J=new gY({name:"tools-hydration",version:"1.0.0"});try{return await J.connect(G),(await J.listTools()).tools}finally{await J.close().catch(()=>{})}}var iJ7,pJ7,nJ8,Xs=async(X)=>{let Y=null;if(X.organization){let Z=await X.storage.organizationSettings.get(X.organization.id),$=await X.storage.virtualMcps.list(X.organization.id),K=new Set(Z?.enabled_plugins??[]);for(let H of $){let U=H.metadata?.enabled_plugins;if(U&&Array.isArray(U))for(let B of U)K.add(B)}Y=K.size>0?[...K]:null}let G=Jr4(nJ8,Y),Q=new rD({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}}});for(let Z of G){let $=Z.inputSchema&&typeof Z.inputSchema==="object"&&"shape"in Z.inputSchema?Z.inputSchema:F.object({}),K=Z.outputSchema&&typeof Z.outputSchema==="object"&&"shape"in Z.outputSchema?Z.outputSchema:void 0,H=$.shape,U=K?.shape;Q.registerTool(Z.name,{description:Z.description??"",inputSchema:H,outputSchema:U,annotations:Z.annotations,_meta:Z._meta},async(B)=>{X.access.setToolName(Z.name);try{let N=await Z.execute(B,X);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let J=Bx6();for(let Z of J)Q.registerPrompt(Z.name,{title:Z.title,description:Z.description},()=>({messages:[{role:"user",content:{type:"text",text:Z.text}}]}));if(X.organization?.id){let Z=await X.storage.brandContext.list(X.organization.id),$=new Set;for(let K of Z){let H=K.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),U=H?`brand-${H}`:`brand-${K.id}`;if($.has(U))U=`${U}-${K.id.slice(0,8)}`;$.add(U);let B=[`# Brand: ${K.name}`,"",`**Domain:** ${K.domain}`,"","## Overview",K.overview];if(K.colors){let z=Object.entries(K.colors).filter(([,O])=>O);if(z.length>0){B.push("","## Colors");for(let[O,w]of z)B.push(`- **${O}:** ${w}`)}}if(K.fonts){let z=Object.entries(K.fonts).filter(([,O])=>O);if(z.length>0){B.push("","## Fonts");for(let[O,w]of z)B.push(`- ${w} (${O})`)}}if(K.logo)B.push("",`**Logo:** ${K.logo}`);if(K.favicon)B.push(`**Favicon:** ${K.favicon}`);if(K.ogImage)B.push(`**OG Image:** ${K.ogImage}`);if(K.images&&K.images.length>0){B.push("","## Images");for(let z of K.images){let O=Object.entries(z).map(([w,E])=>`${w}: ${E}`).join(", ");B.push(`- ${O}`)}}let N=B.join(`
7292
+ `))>=0){let K=Q.slice(0,$).trim();if(Q=Q.slice($+1),!K)continue;yield JSON.parse(K)}}let J=Q.trim();if(J)yield JSON.parse(J)}finally{Y.releaseLock()}}var ob0,OJ8,LJ8="gateway.networking.k8s.io",EJ8="v1",Yy0="httproutes",PJ8,t31,aQ7="mesh-sandbox-runner";var tc1=D(()=>{i31();ob0=class ob0 extends Error{status;body;constructor(X,Y,G){super(G);this.status=X;this.body=Y;this.name="KubeHttpError"}};OJ8=`/apis/${OQ.CLAIM_API_GROUP}/${OQ.CLAIM_API_VERSION}/namespaces`;PJ8=`/apis/${LJ8}/${EJ8}/namespaces`;t31={API_GROUP:LJ8,API_VERSION:EJ8,PLURAL:Yy0}});async function*VJ8(X){let Y=X.now??(()=>Date.now()),G=Y(),Q=X.schedulingTimeoutMs??sQ7,J={pod:{},sandbox:{},events:{hasPulling:!1,hasPulled:!1},startedAt:G},W=[],Z=null,$=!1,K=(q)=>{if($)return;if(Z){let M=Z;Z=null,M(q)}else W.push(q)},H=()=>{if(W.length>0)return Promise.resolve(W.shift());if($)return Promise.resolve(null);return new Promise((q)=>{Z=q})},U=()=>{if($)return;if($=!0,Z){let q=Z;Z=null,q(null)}},B=new AbortController,N=()=>{B.abort(),U()};if(X.signal)if(X.signal.aborted)B.abort(),U();else X.signal.addEventListener("abort",N,{once:!0});let z=Math.max(0,Q-(Y()-G)),O=setTimeout(()=>K("tick"),z+100),w,E=new Promise((q)=>{w=q}),P=Promise.allSettled([eQ7(X.kc,X.namespace,X.claimName,B.signal,J,K,Y,w),YJ7(X.kc,X.namespace,X.claimName,B.signal,J,K),GJ7(X.kc,X.namespace,X.claimName,E,B.signal,J,K,Y)]);try{let q=null,M=-1,V=IJ8(J,Q,Y);if(q=Jy0(V),!Qy0(V))M=jJ8(V);if(yield V,Qy0(V))return;while(!$){if(await H()===null)break;let R=IJ8(J,Q,Y);if(Qy0(R)){let v=Jy0(R);if(v!==q)q=v,yield R;return}let C=jJ8(R);if(C<M)continue;let _=Jy0(R);if(_!==q)q=_,M=C,yield R}}finally{if(clearTimeout(O),B.abort(),X.signal)X.signal.removeEventListener("abort",N);U(),await P.catch(()=>{})}}function IJ8(X,Y,G){let{pod:Q,sandbox:J,events:W,startedAt:Z}=X;if(J.ready)return{kind:"ready"};let $=Q.containerWaitingReason;if($==="ImagePullBackOff"||$==="ErrImagePull")return{kind:"failed",reason:"image-pull-backoff",message:"Sandbox image failed to download. The cluster may be missing pull credentials or the image tag may not exist."};if($==="CrashLoopBackOff")return{kind:"failed",reason:"crash-loop-backoff",message:"Sandbox crashed during startup and is now in CrashLoopBackOff. Check pod logs."};if(!Q.scheduled&&W.lastFailedSchedulingAt!==void 0&&G()-Z>Y)return{kind:"failed",reason:"scheduling-timeout",message:W.failedSchedulingMessage??`Pod could not be scheduled within ${Math.round(Y/1000)}s.`};if(Q.containerRunning&&!Q.containerReady)return{kind:"warming-daemon",since:Z};if(W.hasPulling&&!W.hasPulled)return{kind:"pulling-image",since:Z};if($==="ContainerCreating"||$==="PodInitializing"||Q.scheduled&&!Q.containerRunning)return{kind:"starting-container",since:Z};if(Q.scheduledFalseReason==="Unschedulable"||W.lastFailedSchedulingAt!==void 0&&!Q.scheduled)return{kind:"waiting-for-capacity",since:Z,message:W.failedSchedulingMessage??Q.scheduledFalseMessage,nodeClaim:W.nominatedNodeClaim};return{kind:"claiming",since:Z}}function Qy0(X){return X.kind==="ready"||X.kind==="failed"}function jJ8(X){switch(X.kind){case"claiming":return 0;case"waiting-for-capacity":return 1;case"pulling-image":return 2;case"starting-container":return 3;case"warming-daemon":return 4;case"ready":case"failed":return 99}}function Jy0(X){switch(X.kind){case"claiming":case"pulling-image":case"starting-container":case"warming-daemon":return X.kind;case"waiting-for-capacity":return`waiting-for-capacity:${X.message??""}:${X.nodeClaim??""}`;case"ready":return"ready";case"failed":return`failed:${X.reason}:${X.message}`}}async function eQ7(X,Y,G,Q,J,W,Z,$){let K=`/api/v1/namespaces/${encodeURIComponent(Y)}/pods?watch=true&labelSelector=${encodeURIComponent(`${rQ7}=${G}`)}`;return Zy0({kc:X,path:K,signal:Q,label:`pod/${G}`,onEvent:(H)=>{if(H.type!=="ADDED"&&H.type!=="MODIFIED")return;let U=H.object;if(U.metadata?.name)$(U.metadata.name);XJ7(U,J,Z),W("pod")}})}function XJ7(X,Y,G){let J=(X.status?.conditions??[]).find((Z)=>Z.type==="PodScheduled");if(J?.status==="True")Y.pod.scheduled=!0,Y.pod.scheduledFalseReason=void 0,Y.pod.scheduledFalseMessage=void 0;else if(J?.status==="False")Y.pod.scheduled=!1,Y.pod.scheduledFalseReason=J.reason,Y.pod.scheduledFalseMessage=J.message;let W=(X.status?.containerStatuses??[]).find((Z)=>Z.name===oQ7);if(W)Y.pod.containerWaitingReason=W.state?.waiting?.reason,Y.pod.containerRunning=!!W.state?.running,Y.pod.containerReady=W.ready===!0}async function YJ7(X,Y,G,Q,J,W){let Z=`/apis/${OQ.CLAIM_API_GROUP}/${OQ.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(Y)}/${OQ.CLAIM_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`;return Zy0({kc:X,path:Z,signal:Q,label:`sandboxclaim/${G}`,onEvent:($)=>{if($.type!=="ADDED"&&$.type!=="MODIFIED")return;let H=$.object.status?.conditions?.find((U)=>U.type==="Ready");if(!H)return;if(H.status==="True")J.sandbox.ready=!0,J.sandbox.notReadyReason=void 0,J.sandbox.notReadyMessage=void 0;else J.sandbox.ready=!1,J.sandbox.notReadyReason=H.reason,J.sandbox.notReadyMessage=H.message;W("sandbox")}})}async function GJ7(X,Y,G,Q,J,W,Z,$){let K=await Promise.race([Q,new Promise((U)=>{if(J.aborted){U(G);return}J.addEventListener("abort",()=>U(G),{once:!0})})]);if(J.aborted)return;let H=`/api/v1/namespaces/${encodeURIComponent(Y)}/events?watch=true&fieldSelector=${encodeURIComponent(`involvedObject.name=${K},involvedObject.kind=Pod`)}`;return Zy0({kc:X,path:H,signal:J,label:`events/${G}`,onEvent:(U)=>{if(U.type!=="ADDED"&&U.type!=="MODIFIED")return;let B=U.object,N=B.reason;if(!N)return;switch(N){case"Pulling":W.events.hasPulling=!0;break;case"Pulled":W.events.hasPulling=!0,W.events.hasPulled=!0;break;case"FailedScheduling":W.events.lastFailedSchedulingAt=$(),W.events.failedSchedulingMessage=B.message;break;case"Nominated":{let z=B.message?.match(/nodeclaim\/([\w-]+)/);if(z)W.events.nominatedNodeClaim=z[1];break}default:return}Z("event")}})}async function Zy0(X){let{kc:Y,path:G,signal:Q,label:J,onEvent:W}=X,Z=0;while(!Q.aborted){try{let K=await mm(Y,{method:"GET",path:G,signal:Q,headers:{accept:"application/json"}});if(!K.ok||!K.body){try{await K.body?.cancel()}catch{}throw Error(`watch handshake failed: ${K.status} ${K.statusText}`)}Z=0;for await(let H of Gy0(K.body)){if(Q.aborted)return;try{W(H)}catch(U){console.warn(`[lifecycle-watcher] ${J} onEvent threw: ${U instanceof Error?U.message:String(U)}`)}}}catch(K){if(Q.aborted)return;let H=K instanceof Error?K.message:String(K);console.warn(`[lifecycle-watcher] ${J} watch ended: ${H}`)}if(Q.aborted)return;let $=Math.min(250*2**Z,5000);Z+=1,await QJ7($,Q)}}function QJ7(X,Y){return new Promise((G)=>{if(Y.aborted){G();return}let Q=setTimeout(()=>{Y.removeEventListener("abort",J),G()},X),J=()=>{clearTimeout(Q),G()};Y.addEventListener("abort",J,{once:!0})})}var rQ7="studio.decocms.com/sandbox-handle",oQ7="sandbox",sQ7=300000;var MJ8=D(()=>{i31();tc1()});import{createHash as JJ7,randomBytes as ZJ7,randomUUID as WJ7}from"crypto";import*as CJ8 from"net";import{PassThrough as $J7}from"stream";class Uy0{kind=KB;records=new Map;inflight=new DT;stateStore;previewUrlPattern;kubeConfig;portForward;namespace;sandboxTemplateName;envName;tokenGenerator;idleTtlMs;metrics;previewGateway;sentinelToken;closed=!1;constructor(X={}){this.stateStore=X.stateStore??null,this.previewUrlPattern=X.previewUrlPattern??null,this.kubeConfig=X.kubeConfig??wJ7(),this.portForward=new _b0(this.kubeConfig),this.namespace=X.namespace??KJ7,this.sandboxTemplateName=X.sandboxTemplateName??HJ7,this.envName=TJ7(X.envName),this.tokenGenerator=X.tokenGenerator??(()=>ZJ7(UJ7).toString("hex")),this.idleTtlMs=X.idleTtlMs??NJ7,this.metrics=X.meter?DJ7(X.meter):null,this.previewGateway=X.previewGateway&&X.previewUrlPattern?{...X.previewGateway}:null;let Y=X.sentinelToken?.trim()??"";this.sentinelToken=Y.length>0?Y:null}async ensure(X,Y={}){let G=this.computeHandle(X,Y.repo?.branch??null);return this.inflight.run(G,()=>HS(this.stateStore,X,KB,(Q)=>this.ensureLocked(X,G,Y,Q)))}async exec(X,Y){let G=await this.requireRecord(X);return Es(G.daemonUrl,G.token,Y)}async delete(X){let Y=await this.getRecord(X);if(this.records.delete(X),Y)this.closeForwarder(Y.daemonForward),this.metrics?.active.add(-1,Hy0(Y.tenant));if(await this.deleteHttpRouteIfManaged(X).catch((G)=>{console.warn(`[${pW}] HTTPRoute delete failed for ${X}: ${G instanceof Error?G.message:String(G)}`)}),await CT(this.kubeConfig,this.namespace,X),this.stateStore)if(Y)await this.stateStore.delete(Y.id,KB);else await this.stateStore.deleteByHandle(KB,X)}async alive(X){return await vT(this.kubeConfig,this.namespace,X)!==void 0}watchClaimLifecycle(X,Y){return VJ8({kc:this.kubeConfig,namespace:this.namespace,claimName:X,signal:Y})}async getPreviewUrl(X){let Y=await this.getRecord(X);if(!Y)return null;return this.composePreviewUrl(Y)}async proxyDaemonRequest(X,Y,G){let Q=await this.getRecord(X);if(!Q)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});let J=performance.now(),W=0;try{let Z=await Ps(Q.daemonUrl,Q.token,Y,G);return W=Z.status,Z}finally{this.recordProxyDuration("daemon",W,Q,performance.now()-J)}}async resolvePreviewUpstreamUrl(X){if(this.previewUrlPattern)return`http://${await this.resolveServiceNameForHandle(X)}.${this.namespace}.svc.cluster.local:${dm}`;let Y=await this.getRecord(X);if(Y)return Y.daemonUrl;let G=await this.resurrectByHandle(X);return G?G.daemonUrl:null}async resolveServiceNameForHandle(X){let Y=this.records.get(X);if(Y)return Y.adoptedSandboxName;if(this.stateStore){let Q=(await this.stateStore.getByHandle(KB,X).catch(()=>null))?.state?.adoptedSandboxName;if(Q)return Q}return X}async proxyPreviewRequest(X,Y){let G=performance.now(),Q=this.records.get(X)??null,J=0;try{let W=await this.resolvePreviewUpstreamUrl(X);if(!W)return J=404,$y0(404,{error:"sandbox not found"});let Z=new URL(Y.url);if((Z.pathname==="/_decopilot_vm"||Z.pathname.startsWith("/_decopilot_vm/"))&&Y.method!=="GET")return J=404,$y0(404,{error:"not found"});let K=(O)=>`${O}${Z.pathname}${Z.search}`,H=new Headers(Y.headers);for(let O of zJ7)H.delete(O);let U=Y.method!=="GET"&&Y.method!=="HEAD",B={method:Y.method,headers:H,body:U?Y.body:void 0,redirect:"manual",signal:Y.signal,duplex:U?"half":void 0},N;try{N=await fetch(K(W),B)}catch(O){let w=`${W}${Z.pathname}`;if(console.warn(`[${pW}] preview fetch to ${w} failed: ${O instanceof Error?O.message:String(O)}`),Y.method==="GET"||Y.method==="HEAD"){if(this.invalidateRecord(X),await this.resurrectByHandle(X).catch(()=>null)){let P=await this.resolvePreviewUpstreamUrl(X);if(P)try{N=await fetch(K(P),B);let q=new Headers;for(let[M,V]of N.headers.entries())if(!RJ8.includes(M.toLowerCase()))q.set(M,V);return J=N.status,new Response(N.body,{status:N.status,statusText:N.statusText,headers:q})}catch(q){console.warn(`[${pW}] preview fetch retry to ${w} failed: ${q instanceof Error?q.message:String(q)}`)}}}else this.invalidateRecord(X);return J=502,$y0(502,{error:"sandbox daemon unreachable"})}let z=new Headers;for(let[O,w]of N.headers.entries())if(!RJ8.includes(O.toLowerCase()))z.set(O,w);return J=N.status,new Response(N.body,{status:N.status,statusText:N.statusText,headers:z})}finally{this.recordProxyDuration("preview",J,Q,performance.now()-G,X)}}async ensureLocked(X,Y,G,Q){if(G.image)console.warn(`[${pW}] opts.image ignored (template ${this.sandboxTemplateName} pins image): got ${G.image}`);if(Q){let Z=await Q.get(X,KB);if(Z){let $=await this.rehydrate(X,Y,Z);if($)return this.finish($,Q,!1,!0,"resume");await Q.delete(X,KB)}}let J=await vT(this.kubeConfig,this.namespace,Y).catch(()=>{return});if(J)if(J.metadata?.deletionTimestamp)await cc1(this.kubeConfig,this.namespace,Y).catch((Z)=>{console.warn(`[${pW}] wait for terminating claim ${Y} failed: ${Z instanceof Error?Z.message:String(Z)}`)});else{let Z=await this.adopt(X,Y,J).catch(($)=>{return console.warn(`[${pW}] adopt ${Y} failed, recreating: ${$ instanceof Error?$.message:String($)}`),null});if(Z)return this.finish(Z,Q,!0,!0,"adopt");await CT(this.kubeConfig,this.namespace,Y).catch(()=>{}),await cc1(this.kubeConfig,this.namespace,Y).catch(($)=>{console.warn(`[${pW}] wait for deleted claim ${Y} failed: ${$ instanceof Error?$.message:String($)}`)})}let W=await this.provision(X,Y,G);return this.finish(W,Q,!0,!1,"fresh")}async finish(X,Y,G,Q,J){let W=this.records.has(X.handle);if(this.records.set(X.handle,X),G)await this.persist(Y,X);if(Q)await DJ8(this.kubeConfig,this.namespace,X.handle,this.computeShutdownTime()).catch((Z)=>console.warn(`[${pW}] TTL refresh failed for ${X.handle}: ${Z instanceof Error?Z.message:String(Z)}`));if(this.metrics){let Z=Hy0(X.tenant);if(this.metrics.ensureOutcome.add(1,{...Z,outcome:J}),!W)this.metrics.active.add(1,Z)}return this.toSandbox(X)}buildEnvMap(X,Y){let G={},Q=[];for(let[J,W]of Object.entries(X.env??{}))if(BJ7.has(J))Q.push(J);else G[J]=W;if(Q.length>0)console.warn(`[${pW}] opts.env keys overlap reserved bootstrap names and were dropped: ${Q.join(",")}`);return{...G,DAEMON_TOKEN:Y.token,DAEMON_BOOT_ID:Y.daemonBootId,APP_ROOT:Y.workdir,PROXY_PORT:String(dm)}}buildClaim(X,Y,G){let Q=this.sentinelToken!==null,J=Q?[]:Object.entries(this.buildEnvMap(Y,G)).sort(([W],[Z])=>W<Z?-1:W>Z?1:0).map(([W,Z])=>({name:W,value:Z}));return{apiVersion:`${OQ.CLAIM_API_GROUP}/${OQ.CLAIM_API_VERSION}`,kind:"SandboxClaim",metadata:{name:X,namespace:this.namespace,labels:{"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[HB.env]:this.envName}:{},...Ky0(Y.tenant)}},spec:{sandboxTemplateRef:{name:this.sandboxTemplateName},additionalPodMetadata:{labels:Ky0(Y.tenant,{[HB.role]:"claimed",[HB.sandboxHandle]:X,...this.envName?{[HB.env]:this.envName}:{}})},env:J,warmpool:Q?"default":"none",lifecycle:{shutdownPolicy:"Delete",shutdownTime:this.computeShutdownTime()}}}}async provision(X,Y,G){let Q=this.tokenGenerator(),J=WJ7(),W=Wy0,Z=this.buildClaim(Y,G,{token:Q,daemonBootId:J,workdir:W});try{await n31(this.kubeConfig,this.namespace,Z)}catch(N){if(N instanceof c31)await cc1(this.kubeConfig,this.namespace,Y),await n31(this.kubeConfig,this.namespace,Z);else throw N}let $;try{$=await wJ8(this.kubeConfig,this.namespace,Y),await nc1(this.kubeConfig,this.namespace,$)}catch(N){throw await CT(this.kubeConfig,this.namespace,Y).catch(()=>{}),N}try{await this.ensureServicePortForAdoptedSandbox($),await this.ensureHttpRouteForHandle(Y,$,G.tenant??null)}catch(N){throw await CT(this.kubeConfig,this.namespace,Y).catch(()=>{}),N}let K=await this.openForwarder($,dm,Y),H=`http://127.0.0.1:${K.localPort}`,U=RJ7({runtime:G.workload?.runtime??"node",packageManager:G.workload?.packageManager?{name:G.workload.packageManager,...G.workload.packageManagerPath?{path:G.workload.packageManagerPath}:{}}:null,repo:G.repo??null,desiredPort:G.workload?.devPort??FJ7}),B=J;try{if(await Hk1(H),this.sentinelToken!==null){let N=await EL(H);if(N)B=N.bootId;await KS(H,this.sentinelToken,U??{},{rotateToken:Q})}else if(U)await KS(H,Q,U)}catch(N){throw this.closeForwarder(K),await this.deleteHttpRouteIfManaged(Y).catch(()=>{}),await CT(this.kubeConfig,this.namespace,Y).catch(()=>{}),N}return{id:X,handle:Y,adoptedSandboxName:$,token:Q,workdir:W,daemonUrl:H,daemonForward:K,workload:G.workload??null,daemonBootId:B,tenant:G.tenant??null,ensureOpts:jJ7(G)}}async ensureServicePortForAdoptedSandbox(X){if(!this.previewGateway||!this.previewUrlPattern)return;await TJ8(this.kubeConfig,this.namespace,X,{name:"daemon",port:dm,targetPort:dm})}async ensureHttpRouteForHandle(X,Y,G){if(!this.previewGateway||!this.previewUrlPattern)return;let Q=VJ7(this.previewUrlPattern,X);if(!Q)throw new oY(`Unable to derive preview hostname for ${X} from pattern: ${this.previewUrlPattern}`);let J={apiVersion:`${t31.API_GROUP}/${t31.API_VERSION}`,kind:"HTTPRoute",metadata:{name:X,namespace:this.namespace,labels:Ky0(G??void 0,{[HB.role]:"claimed",[HB.sandboxHandle]:X,"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[HB.env]:this.envName}:{}})},spec:{parentRefs:[{kind:"Gateway",group:"gateway.networking.k8s.io",name:this.previewGateway.name,namespace:this.previewGateway.namespace}],hostnames:[Q],rules:[{backendRefs:[{group:"",kind:"Service",name:Y,port:dm}]}]}};await ic1(this.kubeConfig,this.namespace,J)}async deleteHttpRouteIfManaged(X){if(!this.previewGateway)return;await pc1(this.kubeConfig,this.namespace,X)}async rehydrate(X,Y,G){let Q=G.state;if(!Q.adoptedSandboxName&&!Q.podName||!Q.token)return null;let J=await vT(this.kubeConfig,this.namespace,Y).catch(()=>{return});if(!J||!SJ8(J))return null;let W=J.status?.sandbox?.name??Q.adoptedSandboxName??Q.podName??Y,Z=await this.openAndProbeDaemon(W,Y);if(!Z)return null;if(Q.daemonBootId&&Q.daemonBootId!==Z.bootId)console.warn(`[${pW}] daemon restart detected (handle=${Y}): stored bootId=${Q.daemonBootId} live bootId=${Z.bootId}`);return{id:X,handle:Y,adoptedSandboxName:W,token:Q.token,workdir:Q.workdir??Wy0,daemonUrl:Z.daemonUrl,daemonForward:Z.daemonForward,workload:Q.workload??null,daemonBootId:Z.bootId,tenant:Q.tenant??null,ensureOpts:Q.ensureOpts??null}}async adopt(X,Y,G){if(!SJ8(G))return null;let Q=G.status?.sandbox?.name??Y;if(this.sentinelToken!==null)return null;let J=LJ7(G);if(!J)return null;let W=await this.openAndProbeDaemon(Q,Y);if(!W)return null;let Z=IJ7(G);if(this.previewGateway)await this.ensureServicePortForAdoptedSandbox(Q).catch(($)=>{console.warn(`[${pW}] Service port backfill failed for ${Y}: ${$ instanceof Error?$.message:String($)}`)}),await this.ensureHttpRouteForHandle(Y,Q,Z).catch(($)=>{console.warn(`[${pW}] HTTPRoute backfill failed for ${Y}: ${$ instanceof Error?$.message:String($)}`)});return{id:X,handle:Y,adoptedSandboxName:Q,token:J,workdir:Wy0,daemonUrl:W.daemonUrl,daemonForward:W.daemonForward,workload:null,daemonBootId:W.bootId,tenant:Z,ensureOpts:null}}async openAndProbeDaemon(X,Y){let G=await this.openForwarder(X,dm,Y).catch(()=>null);if(!G)return null;let Q=`http://127.0.0.1:${G.localPort}`,J=await EL(Q);if(!J)return this.closeForwarder(G),null;return{daemonForward:G,daemonUrl:Q,bootId:J.bootId}}async getRecord(X){let Y=this.records.get(X);if(Y)return Y;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(KB,X);if(!G)return null;let Q=await this.rehydrate(G.id,X,G);if(Q)this.records.set(X,Q);return Q}async resurrectByHandle(X){if(!this.stateStore)return null;let Y=await this.stateStore.getByHandle(KB,X);if(!Y)return null;let G=Y.state.ensureOpts;if(!G)return null;return await this.ensure(Y.id,G),this.records.get(X)??null}async requireRecord(X){let Y=await this.getRecord(X);if(Y)return Y;let G=await this.resurrectByHandle(X);if(G)return G;throw Error(`unknown sandbox handle ${X}`)}invalidateRecord(X){let Y=this.records.get(X);if(!Y)return;this.records.delete(X),this.closeForwarder(Y.daemonForward)}recordProxyDuration(X,Y,G,Q,J){if(!this.metrics)return;this.metrics.proxyDurationMs.record(Q,{...Hy0(G?.tenant??null),source:X,sandbox_handle:G?.handle??J??"",status_code:Y||0})}computeHandle(X,Y){return zJ(X,Y,{hashLen:16})}composePreviewUrl(X){if(this.previewUrlPattern)return nz(this.previewUrlPattern,X.handle);return`http://127.0.0.1:${X.daemonForward.localPort}/`}toSandbox(X){return{handle:X.handle,workdir:X.workdir,previewUrl:this.composePreviewUrl(X)}}async persist(X,Y){if(!X)return;let G={adoptedSandboxName:Y.adoptedSandboxName,token:Y.token,workdir:Y.workdir,workload:Y.workload,daemonBootId:Y.daemonBootId,tenant:Y.tenant,...Y.ensureOpts?{ensureOpts:Y.ensureOpts}:{}};await X.put(Y.id,KB,{handle:Y.handle,state:G})}computeShutdownTime(){return new Date(Date.now()+this.idleTtlMs).toISOString()}openForwarder(X,Y,G=X){let Q=EJ7(G,Y);return new Promise((J,W)=>{let Z=($,K)=>{let H=CJ8.createServer((U)=>this.handleForwardedConnection(U,X,Y,G));H.once("error",(U)=>{if(U.code==="EADDRINUSE"&&K<OJ7){try{H.close()}catch{}let B=Fy0+($-Fy0+1)%vJ8;Z(B,K+1);return}W(U)}),H.listen($,"127.0.0.1",()=>{let U=H.address();if(!U||typeof U==="string"){H.close(),W(Error("port-forward listener failed to bind"));return}J({server:H,localPort:U.port})})};Z(Q,0)})}handleForwardedConnection(X,Y,G,Q){let J=new $J7,W=null,Z=!1,$=()=>{if(Z)return;if(Z=!0,J.destroy(),W)try{W.close()}catch{}if(!X.destroyed)X.destroy()};X.pipe(J),X.on("error",$),X.on("close",$),this.portForward.portForward(this.namespace,Y,[G],X,null,J).then((K)=>{let H=typeof K==="function"?K():K;if(!H){$();return}if(W=H,W.on("close",$),W.on("error",()=>{this.invalidateRecord(Q),$()}),Z)try{W.close()}catch{}}).catch((K)=>{console.warn(`[${pW}] port-forward to ${Y}:${G} failed: ${K instanceof Error?K.message:String(K)}`),this.invalidateRecord(Q),$()})}closeForwarder(X){X.server.close((Y)=>{if(Y)console.warn(`[${pW}] port-forward close on :${X.localPort} errored: ${Y instanceof Error?Y.message:String(Y)}`)})}close(){if(this.closed)return;this.closed=!0;for(let X of this.records.values())this.closeForwarder(X.daemonForward);this.records.clear()}}function DJ7(X){return{active:X.createUpDownCounter("studio.sandbox.active",{description:"Active sandbox count, by runner kind and owning org. Cross-checks the cAdvisor-derived count from the cluster \u2014 divergence between the two indicates orphaned claims (mesh deleted but K8s didn't reap) or unattributed pods.",unit:"{sandbox}"}),ensureOutcome:X.createCounter("studio.sandbox.ensure.outcome",{description:"Outcome of each ensure() call: fresh provision, resume from state-store after restart, or adopt of a cluster-side claim mesh didn't know about. Cold-start ratio is the primary input for warm-pool sizing.",unit:"{call}"}),proxyDurationMs:X.createHistogram("studio.sandbox.proxy.duration_ms",{description:"Wall-clock latency of mesh-mediated requests to the sandbox daemon: tool exec proxies (source=daemon) and preview iframe traffic (source=preview).",unit:"ms"})}}function wJ7(){let X=new ls;return X.loadFromDefault(),X}function SJ8(X){return Boolean(X.status?.conditions?.some((Y)=>Y.type==="Ready"&&Y.status==="True"))}function LJ7(X){let Y=X.spec?.env;if(!Y)return null;for(let G of Y)if(G.name==="DAEMON_TOKEN"&&G.value)return G.value;return null}function EJ7(X,Y){let G=JJ7("sha256").update(`${X}:${Y}`).digest();return Fy0+G.readUInt32BE(0)%vJ8}function $y0(X,Y){return new Response(JSON.stringify(Y),{status:X,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function kJ8(X){let Y=X.slice(0,qJ7);return PJ7.test(Y)?Y:""}function TJ7(X){if(X===void 0)return null;let Y=X.trim();if(Y==="")return null;if(!AJ7.test(Y))throw Error(`AgentSandboxRunner: envName=${JSON.stringify(Y)} is not a valid DNS-label-safe environment name (lowercase alphanumeric or '-', starts with a letter, ends alphanumeric, \u226432 chars). Mesh sets this from STUDIO_ENV; check the studio chart's configMap.`);return Y}function Ky0(X,Y={}){let G={...Y};if(X){let Q=kJ8(X.orgId),J=kJ8(X.userId);if(Q)G[HB.orgId]=Q;if(J)G[HB.userId]=J}return G}function IJ7(X){let Y=X.metadata?.labels;if(!Y)return null;let G=Y[HB.orgId],Q=Y[HB.userId];if(!G||!Q)return null;return{orgId:G,userId:Q}}function Hy0(X){return{org_id:X?.orgId??"",user_id:X?.userId??"",runner_kind:KB}}function jJ7(X){let Y={};if(X.repo)Y.repo=X.repo;if(X.workload)Y.workload=X.workload;if(X.env&&Object.keys(X.env).length>0)Y.env=X.env;if(X.tenant)Y.tenant=X.tenant;return Object.keys(Y).length>0?Y:null}function VJ7(X,Y){try{return new URL(nz(X,Y)).hostname||null}catch{return null}}function MJ7(X){try{let Y=new URL(X);return Y.pathname.replace(/^\/+/,"").replace(/\.git$/,"")||Y.hostname}catch{return X}}function RJ7(X){let Y=X.repo,G=Y?{repository:{cloneUrl:Y.cloneUrl,repoName:Y.displayName??MJ7(Y.cloneUrl),...Y.branch?{branch:Y.branch}:{}},identity:{userName:Y.userName,userEmail:Y.userEmail}}:void 0,Q=X.packageManager?{name:X.packageManager.name,...X.packageManager.path?{path:X.packageManager.path}:{}}:void 0,J=Q?{packageManager:Q,runtime:X.runtime,intent:"running",...X.desiredPort!==void 0?{desiredPort:X.desiredPort}:{},proxy:{}}:void 0;if(!G&&!J)return null;return{...G?{git:G}:{},...J?{application:J}:{}}}var KB="agent-sandbox",pW="AgentSandboxRunner",KJ7="agent-sandbox-system",HJ7="studio-sandbox",dm=9000,FJ7=3000,Wy0="/app",UJ7=32,BJ7,NJ7=900000,zJ7,RJ8,Fy0=40000,vJ8=1e4,OJ7=256,HB,PJ7,qJ7=63,AJ7;var _J8=D(()=>{ab0();Fk1();Ts();tc1();i31();MJ8();BJ7=new Set(["DAEMON_TOKEN","DAEMON_BOOT_ID","APP_ROOT","PROXY_PORT"]),zJ7=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length","upgrade"],RJ8=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];HB={role:"studio.decocms.com/role",sandboxHandle:"studio.decocms.com/sandbox-handle",orgId:"studio.decocms.com/org-id",userId:"studio.decocms.com/user-id",env:"studio.decocms.com/env"},PJ7=/^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$/;AJ7=/^[a-z]([a-z0-9-]{0,30}[a-z0-9])?$/});var fJ8={};V0(fJ8,{waitForSandboxReady:()=>nc1,getSandboxClaim:()=>vT,getHttpRoute:()=>AJ8,deleteSandboxClaim:()=>CT,deleteHttpRoute:()=>pc1,createSandboxClaim:()=>n31,createHttpRoute:()=>ic1,SandboxTimeoutError:()=>lm,SandboxError:()=>oY,KubeConfig:()=>ls,K8S_CONSTANTS:()=>OQ,HTTPROUTE_CONSTANTS:()=>t31,AgentSandboxRunner:()=>Uy0});var bJ8=D(()=>{ab0();i31();tc1();_J8()});var wy0={};V0(wy0,{subscribeLifecycle:()=>Dy0,getSharedRunnerIfInit:()=>zy0,getSharedRunner:()=>cm,getRunnerByKind:()=>ps,getOrInitSharedRunner:()=>fT,asDockerRunner:()=>Oy0,__resetSharedLifecyclesForTesting:()=>uJ7});function hJ8(X,Y){let G=Ny0[X];if(G)return Promise.resolve(G);let Q=By0[X];if(Q)return Q;let J=Y().then((W)=>{return Ny0[X]=W,W}).finally(()=>{delete By0[X]});return By0[X]=J,J}function CJ7(){let X=process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN;return X&&X.trim()!==""?X:void 0}function vJ7(){let X=process.env.STUDIO_SANDBOX_TEMPLATE_NAME;return X&&X.trim()!==""?X:void 0}function _J7(){let X=process.env.STUDIO_ENV;return X&&X.trim()!==""?X:void 0}function fJ7(){let X=process.env.STUDIO_SANDBOX_SENTINEL_TOKEN;return X&&X.trim()!==""?X:void 0}function bJ7(){let X=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME?.trim(),Y=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE?.trim();if(!X&&!Y)return;if(!X||!Y)throw Error("STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME and STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE must both be set, or both unset. Half-configured per-claim HTTPRoute routing would silently fail to attach.");return{name:X,namespace:Y}}async function gJ8(X,Y){let G=new L31(Y),Q=CJ7();switch(X){case"host":{let{HostSandboxRunner:J}=await Promise.resolve().then(() => (tH(),US)),{getSettings:W}=await Promise.resolve().then(() => (l9(),Nl0));return new J({homeDir:W().dataDir,stateStore:G,previewUrlPattern:Q})}case"docker":return new QB({stateStore:G,previewUrlPattern:Q});case"freestyle":{let{FreestyleSandboxRunner:J}=await Promise.resolve().then(() => (c58(),d58));return new J({stateStore:G})}case"agent-sandbox":{let{AgentSandboxRunner:J}=await Promise.resolve().then(() => (bJ8(),fJ8));return new J({stateStore:G,previewUrlPattern:Q,sandboxTemplateName:vJ7(),envName:_J7(),previewGateway:bJ7(),sentinelToken:fJ7(),meter:YU})}default:throw Error(`Unknown runner kind: ${String(X)}`)}}function cm(X){return ps(X,az())}function ps(X,Y){return hJ8(Y,()=>gJ8(Y,X.db))}async function fT(){let X;try{X=az()}catch(Y){return console.warn("[lifecycle] cannot resolve sandbox runner:",Y instanceof Error?Y.message:String(Y)),null}return hJ8(X,()=>gJ8(X,a7().db))}function zy0(){let X;try{X=az()}catch{return null}return Ny0[X]??null}function Oy0(X){return X instanceof QB?X:null}function Dy0(X,Y,G){let Q=_T.get(Y);if(Q){if(Q.terminated){if(Q.lastPhase)try{G(Q.lastPhase)}catch{}return{unsubscribe:hJ7}}if(Q.listeners.add(G),Q.lastPhase)try{G(Q.lastPhase)}catch{}return yJ8(Y,Q,G)}let J=new AbortController,W={lastPhase:null,terminated:!1,listeners:new Set([G]),abort:J};return _T.set(Y,W),gJ7(X,Y,W),yJ8(Y,W,G)}function hJ7(){}function yJ8(X,Y,G){return{unsubscribe(){if(_T.get(X)!==Y)return;if(Y.listeners.delete(G),Y.listeners.size===0)_T.delete(X),Y.abort.abort()}}}async function gJ7(X,Y,G){let Q=null;try{for await(let J of X.watchClaimLifecycle(Y,G.abort.signal)){if(G.abort.signal.aborted)break;G.lastPhase=J;let W=J.kind==="ready"||J.kind==="failed";if(W)G.terminated=!0;let Z=Array.from(G.listeners);for(let $ of Z)try{$(J)}catch{}if(W)break}}catch(J){Q=J}finally{if(!G.terminated&&!G.abort.signal.aborted&&G.listeners.size>0){let J={kind:"failed",reason:"unknown",message:Q instanceof Error?Q.message:"Lifecycle watcher ended unexpectedly"};G.lastPhase=J,G.terminated=!0;for(let W of Array.from(G.listeners))try{W(J)}catch{}}if(_T.get(Y)===G)_T.delete(Y)}}function uJ7(){for(let X of _T.values())X.abort.abort();_T.clear()}var SJ7,kJ7,xJ8,Ny0,By0,yJ7,xJ7,_T;var FB=D(()=>{tH();GU();T$();T_0();SJ7=Symbol.for("decocms.sandbox.lifecycle.runners"),kJ7=Symbol.for("decocms.sandbox.lifecycle.inflight"),xJ8=globalThis,Ny0=xJ8[SJ7]??={},By0=xJ8[kJ7]??={};yJ7=Symbol.for("decocms.sandbox.lifecycle.shared-lifecycles"),xJ7=globalThis,_T=xJ7[yJ7]??=new Map});async function uJ8(X,Y){B0(Y);let G=s1(Y),Q=Z6(Y);if(!Q)throw Error("User ID required");let J=await Y.storage.virtualMcps.findById(X.virtualMcpId);if(!J||J.organization_id!==G.id)throw Error("Virtual MCP not found");let W=J.metadata??{},Z=Is(wT(W),Q,X.branch),$=az();if(Z&&(Z.runnerKind??"freestyle")===$)return Z;await lJ8(Y,Z,$);let K=W.githubRepo??null,{entry:H}=await mJ8({ctx:Y,userId:Q,orgId:G.id,virtualMcpId:X.virtualMcpId,branch:X.branch,metadata:W,githubRepo:K,existing:Z});return H}async function lJ8(X,Y,G){if(!Y)return;let Q=Y.runnerKind??"freestyle";if(Q===G)return;if(Q==="freestyle")return;try{await(await ps(X,Q)).delete(Y.vmId)}catch(J){console.error(`[VM_START] stale ${Q} ${Y.vmId}: ${J instanceof Error?J.message:String(J)}`)}}async function mJ8(X){let{ctx:Y,userId:G,orgId:Q,virtualMcpId:J,branch:W,metadata:Z,githubRepo:$,existing:K}=X;if($&&!$.connectionId)throw Error("GitHub connection id missing on virtual MCP metadata");let{runtime:H,packageManager:U,port:B,packageManagerPath:N}=tp6(Z),z;if($){let{cloneUrl:R,gitUserName:C,gitUserEmail:_}=await ap6($.connectionId,$.owner,$.name,Y.db,Y.vault);if(!U){let v=await ep6($.connectionId,$.owner,$.name,Y.db,Y.vault);if(v)U=v.packageManager,H=w31[v.packageManager].runtime,B=v.devPort??B,await lJ7(Y,J,G,v.packageManager,v.devPort)}z={cloneUrl:R,userName:C,userEmail:_,branch:W,displayName:`${$.owner}/${$.name}`}}let O=H&&U?{runtime:H,packageManager:U,...B!==null?{devPort:Number(B)}:{},...N?{packageManagerPath:N}:{}}:void 0,w=tz({orgId:Q,virtualMcpId:J,branch:W}),E=await cm(Y),P=await E.ensure({userId:G,projectRef:w},{repo:z,workload:O,tenant:{orgId:Q,userId:G}}),M=!!K&&K.vmId===P.handle&&K?.createdAt?K.createdAt:Date.now(),V={vmId:P.handle,previewUrl:P.previewUrl,runnerKind:E.kind,createdAt:M};await pp6(Y.storage.virtualMcps,J,G,G,W,V);let I=!K||K.vmId!==P.handle;return{entry:V,isNewVm:I}}async function lJ7(X,Y,G,Q,J){let W=await X.storage.virtualMcps.findById(Y);if(!W)return;let Z=W.metadata??{};await X.storage.virtualMcps.update(Y,G,{metadata:{...Z,runtime:{selected:Q,port:J}}})}var Ly0;var Ey0=D(()=>{H0();tH();h0();A_0();rp6();Xn6();Nk0();q_0();FB();Ly0=m1({name:"VM_START",description:"Start a sandbox with the connected GitHub repo and dev server.",annotations:{title:"Start VM Preview",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:F.object({virtualMcpId:F.string().describe("Virtual MCP ID"),branch:F.string().min(1).optional().describe("Optional git branch to check out. When omitted the handler generates `deco/<adjective>-<noun>` and uses it. The resolved branch is returned in the response so callers can persist it.")}),outputSchema:F.object({previewUrl:F.string().nullable(),vmId:F.string(),branch:F.string(),isNewVm:F.boolean(),runnerKind:F.enum(["host","docker","freestyle","agent-sandbox"])}),handler:async(X,Y)=>{let G=X.branch??wS1(),{metadata:Q,userId:J,organization:W,entry:Z}=await wk1({virtualMcpId:X.virtualMcpId,branch:G},Y),$=Q.githubRepo??null,K=az();await lJ8(Y,Z,K);let{entry:H,isNewVm:U}=await mJ8({ctx:Y,userId:J,orgId:W.id,virtualMcpId:X.virtualMcpId,branch:G,metadata:Q,githubRepo:$,existing:Z});return{...H,branch:G,isNewVm:U,runnerKind:K}}})});var Py0;var dJ8=D(()=>{H0();h0();A_0();FB();Py0=m1({name:"VM_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:F.object({virtualMcpId:F.string().describe("Virtual MCP ID that owns this VM"),branch:F.string().min(1).describe("Branch whose vm should be deleted (vmMap[userId][branch])")}),outputSchema:F.object({success:F.boolean()}),handler:async(X,Y)=>{let G;try{G=await wk1(X,Y)}catch($){if($ instanceof Error&&$.message==="Virtual MCP not found")return{success:!0};throw $}let{entry:Q,userId:J}=G;if(!Q)return{success:!0};await np6(Y.storage.virtualMcps,X.virtualMcpId,J,J,X.branch);let W=Q.runnerKind??"freestyle";return await(await ps(Y,W)).delete(Q.vmId).catch(($)=>console.error(`[VM_DELETE] ${W} ${Q.vmId}: ${$ instanceof Error?$.message:String($)}`)),{success:!0}}})});var cJ8=D(()=>{Ey0();dJ8()});var dJ7="https://api.github.com",qy0;var iJ8=D(()=>{H0();h0();wM1();mR();qy0=m1({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:F.object({connectionId:F.string().describe("ID of the mcp-github connection to use")}),outputSchema:F.object({installations:F.array(F.object({installationId:F.number(),login:F.string(),avatarUrl:F.string(),type:F.string()})),appSlug:F.string().optional()}),handler:async(X,Y)=>{await Y.access.check();let G=new j3(Y.db,Y.vault),Q=await G.get(X.connectionId);if(!Q)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let J=Q.accessToken;if(KQ1(Q)&&G.isExpired(Q,DM1)){let U=await HQ1(Q,G);if(!U)throw Error(QR);J=U,Q=await G.get(X.connectionId)??Q}let W=[],Z,$=1,K=100,H=async(U)=>fetch(`${dJ7}/user/installations?per_page=${K}&page=${$}`,{headers:{Authorization:`Bearer ${U}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});while(!0){let U=await H(J);if(U.status===401){let N=await G.get(X.connectionId);if(!N||!KQ1(N))throw Error(QR);let z=await HQ1(N,G);if(!z)throw Error(QR);if(J=z,U=await H(J),U.status===401)throw Error(QR)}if(!U.ok)throw Error(`GitHub /user/installations failed: ${U.status}`);let B=await U.json();for(let N of B.installations){if(!Z)Z=N.app_slug??N.app?.slug;W.push({installationId:N.id,login:N.account.login,avatarUrl:N.account.avatar_url,type:N.account.type})}if(B.installations.length<K)break;$++}return{installations:W,...Z?{appSlug:Z}:{}}}})});var pJ8=D(()=>{iJ8()});var zS1={};V0(zS1,{managementMCP:()=>Xs,listManagementTools:()=>nJ7,ALL_TOOLS:()=>nJ8});async function nJ7(X){let Y=await Xs(X),[G,Q]=IG1.createLinkedPair();await Y.connect(Q);let J=new gY({name:"tools-hydration",version:"1.0.0"});try{return await J.connect(G),(await J.listTools()).tools}finally{await J.close().catch(()=>{})}}var iJ7,pJ7,nJ8,Xs=async(X)=>{let Y=null;if(X.organization){let Z=await X.storage.organizationSettings.get(X.organization.id),$=await X.storage.virtualMcps.list(X.organization.id),K=new Set(Z?.enabled_plugins??[]);for(let H of $){let U=H.metadata?.enabled_plugins;if(U&&Array.isArray(U))for(let B of U)K.add(B)}Y=K.size>0?[...K]:null}let G=Jr4(nJ8,Y),Q=new rD({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}}});for(let Z of G){let $=Z.inputSchema&&typeof Z.inputSchema==="object"&&"shape"in Z.inputSchema?Z.inputSchema:F.object({}),K=Z.outputSchema&&typeof Z.outputSchema==="object"&&"shape"in Z.outputSchema?Z.outputSchema:void 0,H=$.shape,U=K?.shape;Q.registerTool(Z.name,{description:Z.description??"",inputSchema:H,outputSchema:U,annotations:Z.annotations,_meta:Z._meta},async(B)=>{X.access.setToolName(Z.name);try{let N=await Z.execute(B,X);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let J=Bx6();for(let Z of J)Q.registerPrompt(Z.name,{title:Z.title,description:Z.description},()=>({messages:[{role:"user",content:{type:"text",text:Z.text}}]}));if(X.organization?.id){let Z=await X.storage.brandContext.list(X.organization.id),$=new Set;for(let K of Z){let H=K.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),U=H?`brand-${H}`:`brand-${K.id}`;if($.has(U))U=`${U}-${K.id.slice(0,8)}`;$.add(U);let B=[`# Brand: ${K.name}`,"",`**Domain:** ${K.domain}`,"","## Overview",K.overview];if(K.colors){let z=Object.entries(K.colors).filter(([,O])=>O);if(z.length>0){B.push("","## Colors");for(let[O,w]of z)B.push(`- **${O}:** ${w}`)}}if(K.fonts){let z=Object.entries(K.fonts).filter(([,O])=>O);if(z.length>0){B.push("","## Fonts");for(let[O,w]of z)B.push(`- ${w} (${O})`)}}if(K.logo)B.push("",`**Logo:** ${K.logo}`);if(K.favicon)B.push(`**Favicon:** ${K.favicon}`);if(K.ogImage)B.push(`**OG Image:** ${K.ogImage}`);if(K.images&&K.images.length>0){B.push("","## Images");for(let z of K.images){let O=Object.entries(z).map(([w,E])=>`${w}: ${E}`).join(", ");B.push(`- ${O}`)}}let N=B.join(`
7293
7293
  `);Q.prompt(U,`Brand context for ${K.name}`,()=>({messages:[{role:"user",content:{type:"text",text:N}}]}))}}let W=Nx6();for(let Z of W)Q.resource(Z.name,Z.uri,{description:Z.description,mimeType:Z.mimeType??"text/markdown"},async($)=>{return{contents:[{uri:typeof $==="string"?$:$.href,mimeType:Z.mimeType??"text/markdown",text:Z.text}]}});return Q};var oo=D(()=>{lt();dN();A71();H0();oq6();nf6();of6();$b6();Lb6();Ab6();db6();ab6();Fy6();Vy6();Ry6();iy6();zx6();gx6();Tp6();cJ8();pJ8();iJ7=[hS0,gS0,uS0,lS0,mS0,dS0,cS0,iS0,pS0,nS0,tS0,aS0,oS0,sS0,eS0,Xk0,Yk0,Gk0,Qk0,Jk0,Zk0,Wk0,$k0,qj0,zS0,OS0,DS0,wS0,LS0,VS0,RS0,SS0,kS0,CS0,rf6,bS0,yS0,xS0,vI0,fI0,bI0,_I0,ES0,PS0,qS0,AS0,TS0,IS0,jS0,fk0,zk0,Ok0,Dk0,wk0,Lk0,Ek0,Kk0,Hk0,Fk0,Uk0,Bk0,Pk0,qk0,Ak0,Vk0,Mk0,Ck0,vk0,_k0,vS0,_S0,fS0,bk0,yk0,xk0,hk0,gk0,uk0,lk0,mk0,dk0,ck0,ik0,pk0,nk0,tk0,ak0,rk0,ok0,sk0,...Ap6,Ly0,Py0,qy0],pJ7=Zr4(),nJ8=[...iJ7,...pJ7]});function tJ7(X){return[{permissions:{self:["*"]},getTools:async()=>{let{ALL_TOOLS:Y}=await Promise.resolve().then(() => (oo(),zS1));return Y.map((G)=>{return{name:G.name,inputSchema:F.toJSONSchema(G.inputSchema,{unrepresentable:"any"}),outputSchema:G.outputSchema?F.toJSONSchema(G.outputSchema,{unrepresentable:"any"}):void 0,description:G.description}})},data:UH0(t$(),X)},{data:FH0()},{data:HH0(X)}]}async function tJ8(X,Y){try{let G=a7(),Q=u4(),J=new xM(Q.encryptionKey),W=new EG1(G.db,J),Z=tJ7(X);await Promise.all(Z.map(async($)=>{let K=null;if($.permissions)K=(await SY.api.createApiKey({body:{name:`${$.data.app_name??crypto.randomUUID()}-mcp`,userId:Y,permissions:$.permissions,rateLimitEnabled:!1,metadata:{organization:{id:X},purpose:"default-org-connections"}}}))?.key;let H=await KA({id:"pending",title:$.data.title,connection_type:$.data.connection_type,connection_url:$.data.connection_url,connection_token:$.data.connection_token,connection_headers:$.data.connection_headers}).catch(()=>null),U=await $.getTools?.()??H?.tools??null,B=H?.scopes?.length?H.scopes:null,N=$.data.id?$.data.id.startsWith(`${X}_`)?$.data.id:`${X}_${$.data.id}`:void 0;await W.create({...$.data,id:N,tools:U,configuration_scopes:B,organization_id:X,created_by:Y,connection_token:$.data.connection_token??K})}));try{let $=new PG1(G.db);await _q6(X,Y,$)}catch($){console.error("Failed to install studio pack agents:",$)}if(Q.aiGatewayEnabled&&OG1.provisionKey)try{let $=await HA(Y),K=await OG1.provisionKey($,X);await new wG1(G.db,J).upsert({providerId:"deco",label:"Auto-provisioned",apiKey:K,organizationId:X,createdBy:Y})}catch($){console.error("Failed to auto-provision Deco AI Gateway key:",$)}}catch(G){console.error("Error creating default MCP connections:",G)}}var aJ8=D(()=>{o9();zI0();uw();GU();rj1();OI0();wI0();LI0();AG1();fq6();H0();l9();iR();hM()});function aJ7(X,Y){let G=X.email.split("@")[1]?.toLowerCase()??null;return{distinctId:X.id,properties:{$set:{email:X.email,name:X.name,email_verified:X.emailVerified},$set_once:{first_seen_at:Y.toISOString(),signup_email_domain:G}}}}function Ay0(X){V6.identify(aJ7(X,new Date))}var rJ8=D(()=>{CX()});async function oJ7(X){let{user:Y,token:G}=X;if(!G?.idToken)return;let Q;try{Q=c9(G.idToken)}catch{return}let{preferred_username:J,upn:W}=Q,Z=[J,W].filter((H)=>typeof H==="string"&&H.length>0&&H.toLowerCase()!==Y.email.toLowerCase()).map((H)=>H.toLowerCase());if(Z.length===0)return;let{db:$}=a7(),K=await $.selectFrom("user").selectAll().where("email","in",Z).where("id","!=",Y.id).executeTakeFirst();if(!K)return;try{await $.transaction().execute(async(H)=>{await z1`UPDATE "account" SET "userId" = ${K.id} WHERE "userId" = ${Y.id}`.execute(H),await z1`UPDATE "session" SET "userId" = ${K.id} WHERE "userId" = ${Y.id}`.execute(H),await z1`
7294
7294
  UPDATE "member" SET "userId" = ${K.id}
7295
7295
  WHERE "userId" = ${Y.id}
@@ -0,0 +1,4 @@
1
+
2
+ export function parse(source: string): string[];
3
+ export function parse<T>(source: string, transform: (value: string) => T): T[];
4
+
@@ -0,0 +1,97 @@
1
+ 'use strict'
2
+
3
+ exports.parse = function (source, transform) {
4
+ return new ArrayParser(source, transform).parse()
5
+ }
6
+
7
+ class ArrayParser {
8
+ constructor (source, transform) {
9
+ this.source = source
10
+ this.transform = transform || identity
11
+ this.position = 0
12
+ this.entries = []
13
+ this.recorded = []
14
+ this.dimension = 0
15
+ }
16
+
17
+ isEof () {
18
+ return this.position >= this.source.length
19
+ }
20
+
21
+ nextCharacter () {
22
+ var character = this.source[this.position++]
23
+ if (character === '\\') {
24
+ return {
25
+ value: this.source[this.position++],
26
+ escaped: true
27
+ }
28
+ }
29
+ return {
30
+ value: character,
31
+ escaped: false
32
+ }
33
+ }
34
+
35
+ record (character) {
36
+ this.recorded.push(character)
37
+ }
38
+
39
+ newEntry (includeEmpty) {
40
+ var entry
41
+ if (this.recorded.length > 0 || includeEmpty) {
42
+ entry = this.recorded.join('')
43
+ if (entry === 'NULL' && !includeEmpty) {
44
+ entry = null
45
+ }
46
+ if (entry !== null) entry = this.transform(entry)
47
+ this.entries.push(entry)
48
+ this.recorded = []
49
+ }
50
+ }
51
+
52
+ consumeDimensions () {
53
+ if (this.source[0] === '[') {
54
+ while (!this.isEof()) {
55
+ var char = this.nextCharacter()
56
+ if (char.value === '=') break
57
+ }
58
+ }
59
+ }
60
+
61
+ parse (nested) {
62
+ var character, parser, quote
63
+ this.consumeDimensions()
64
+ while (!this.isEof()) {
65
+ character = this.nextCharacter()
66
+ if (character.value === '{' && !quote) {
67
+ this.dimension++
68
+ if (this.dimension > 1) {
69
+ parser = new ArrayParser(this.source.substr(this.position - 1), this.transform)
70
+ this.entries.push(parser.parse(true))
71
+ this.position += parser.position - 2
72
+ }
73
+ } else if (character.value === '}' && !quote) {
74
+ this.dimension--
75
+ if (!this.dimension) {
76
+ this.newEntry()
77
+ if (nested) return this.entries
78
+ }
79
+ } else if (character.value === '"' && !character.escaped) {
80
+ if (quote) this.newEntry(true)
81
+ quote = !quote
82
+ } else if (character.value === ',' && !quote) {
83
+ this.newEntry()
84
+ } else {
85
+ this.record(character.value)
86
+ }
87
+ }
88
+ if (this.dimension !== 0) {
89
+ throw new Error('array dimension not balanced')
90
+ }
91
+ return this.entries
92
+ }
93
+ }
94
+
95
+ function identity (value) {
96
+ return value
97
+ }
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) Ben Drucker <bvdrucker@gmail.com> (bendrucker.me)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.