decocms 2.293.1 → 2.293.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-CLDKU5ty.js → AlertCircle-4XN-oNOX.js} +1 -1
- package/dist/client/assets/{ArrowNarrowLeft-RDc6uuv4.js → ArrowNarrowLeft-D8yM0Q1N.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-DPl82rO4.js → ArrowUpRight-B67Jmwiu.js} +1 -1
- package/dist/client/assets/{CheckCircle-CfXA9jn1.js → CheckCircle-qPp83BHz.js} +1 -1
- package/dist/client/assets/{ChevronDown-Usw-ptYZ.js → ChevronDown-CyeG22oM.js} +1 -1
- package/dist/client/assets/{ChevronRight-DoCnX9k7.js → ChevronRight-VHKE-Rsb.js} +1 -1
- package/dist/client/assets/{ChevronUp-DQfNemJG.js → ChevronUp-DI0U_n7m.js} +1 -1
- package/dist/client/assets/{Container-GOtpXA1D.js → Container-gs_T0E-i.js} +1 -1
- package/dist/client/assets/{DotsVertical-BVfKaEFA.js → DotsVertical-DbazSleD.js} +1 -1
- package/dist/client/assets/{LinkExternal01-CZs0wlF4.js → LinkExternal01-BkW1xExI.js} +1 -1
- package/dist/client/assets/{Lock01-QeXCU7HG.js → Lock01-DMhOUHAD.js} +1 -1
- package/dist/client/assets/{Palette-CSJaxEgx.js → Palette-DQFLrWeu.js} +1 -1
- package/dist/client/assets/{Play-JGp_Cbfe.js → Play-CEfYOhlu.js} +1 -1
- package/dist/client/assets/{Plus-kEeRyUxB.js → Plus-C6dQCrro.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-CsMevI8O.js → RefreshCcw01-BS4qqpX3.js} +1 -1
- package/dist/client/assets/{SearchMd-Ytd6c0ll.js → SearchMd-BG4FSg84.js} +1 -1
- package/dist/client/assets/{Settings02-CvrBlbBO.js → Settings02-iDL3vBWr.js} +1 -1
- package/dist/client/assets/{Shield01-cPWG6TNA.js → Shield01-CNiHl3zX.js} +1 -1
- package/dist/client/assets/{Star01-B6e6dHYY.js → Star01-BwinVzGY.js} +1 -1
- package/dist/client/assets/{Sun-4ELQnnMk.js → Sun-D2tIZY2E.js} +1 -1
- package/dist/client/assets/{Tool01-CuB7oJgS.js → Tool01-DjdxENGC.js} +1 -1
- package/dist/client/assets/{Trash01-DqxI7G9k.js → Trash01-CSKwBK9N.js} +1 -1
- package/dist/client/assets/{User01-C3LXYecz.js → User01-CdBYXDNb.js} +1 -1
- package/dist/client/assets/{Users03-CZCjMbp7.js → Users03-TaweCJsF.js} +1 -1
- package/dist/client/assets/{X-BgNHGeBl.js → X-BM6L1DFq.js} +1 -1
- package/dist/client/assets/{XCircle-BCIvjJwm.js → XCircle-Dr-Lbcly.js} +1 -1
- package/dist/client/assets/{XClose-Dt9YjXZl.js → XClose-D29zR7_1.js} +1 -1
- package/dist/client/assets/{Zap-o1d5pHAU.js → Zap-CoAb7KxV.js} +1 -1
- package/dist/client/assets/{ZapSquare-Dr7dOlmN.js → ZapSquare-BF7VYQ5u.js} +1 -1
- package/dist/client/assets/{accordion-CWNMyDuM.js → accordion-Coir_NgB.js} +1 -1
- package/dist/client/assets/{agent-icon-i3_kgSR-.js → agent-icon-DgS8BLJO.js} +1 -1
- package/dist/client/assets/{agents-list-CK-l2CpG.js → agents-list-v8aeb2Fn.js} +1 -1
- package/dist/client/assets/ai-providers-BTx7ia27.js +1 -0
- package/dist/client/assets/{alert-dialog-ie0qXApM.js → alert-dialog-CGnwkAYP.js} +1 -1
- package/dist/client/assets/{auth-catchall-Dj8R_Rwm.js → auth-catchall-CUQuENbK.js} +1 -1
- package/dist/client/assets/{automation-list-row-D7-YDk3w.js → automation-list-row-BOuwI-Wo.js} +1 -1
- package/dist/client/assets/{automations-xbWUh_bL.js → automations-C0ef_NDE.js} +1 -1
- package/dist/client/assets/{avatar-BF0gecl5.js → avatar-Cp7qKMot.js} +1 -1
- package/dist/client/assets/{badge-CrcJY3ID.js → badge-ByGXA99d.js} +1 -1
- package/dist/client/assets/{brand-context-vId15hS7.js → brand-context-l990DZmF.js} +1 -1
- package/dist/client/assets/{card-01NEpYK9.js → card-DAFmpl_H.js} +1 -1
- package/dist/client/assets/{chat-context-H8YpdoaC.js → chat-context-DMjcGz00.js} +1 -1
- package/dist/client/assets/{checkbox-BMFPeDen.js → checkbox-DNI--1wo.js} +1 -1
- package/dist/client/assets/{collection-detail-CVtRJ6yq.js → collection-detail-TqBqgSyp.js} +1 -1
- package/dist/client/assets/{collection-display-button-D8nhcebp.js → collection-display-button-DnhwGJJn.js} +1 -1
- package/dist/client/assets/{collection-search-DRnCFAYG.js → collection-search-Db0QcwfF.js} +1 -1
- package/dist/client/assets/{collection-search-BG6Gw4Mu.js → collection-search-Dnsuh1PU.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DrkGtEjc.js → collection-table-wrapper-CmdnCMC2.js} +1 -1
- package/dist/client/assets/{collection-tabs-L0YkmPvP.js → collection-tabs-DHyusu9H.js} +1 -1
- package/dist/client/assets/{collections-Olx1K63T.js → collections-BtAHo729.js} +1 -1
- package/dist/client/assets/{command-DI2dHNgp.js → command-gP-fjc6e.js} +1 -1
- package/dist/client/assets/{connection-card-CvPCQDGo.js → connection-card-BpV_oIzL.js} +1 -1
- package/dist/client/assets/{connection-detail-CZ3vtcMC.js → connection-detail-CgW9j0Ig.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-cVTgOTdv.js → connection-form-helpers-DsUdihal.js} +1 -1
- package/dist/client/assets/{connections-fmCwo_L1.js → connections-D9LebqS8.js} +1 -1
- package/dist/client/assets/{constants-CGJZhWnl.js → constants-rS7kDjs8.js} +1 -1
- package/dist/client/assets/{constants-BXz_d4fe.js → constants-wYGHmqEw.js} +1 -1
- package/dist/client/assets/{dialog-CPyR3COo.js → dialog-CgllGihU.js} +1 -1
- package/dist/client/assets/{domain-settings-CvjA4NN4.js → domain-settings-DJjAq1LR.js} +1 -1
- package/dist/client/assets/{drawer-BZLEopRK.js → drawer-DuBBob4t.js} +1 -1
- package/dist/client/assets/{dropdown-menu-Buw-c9bt.js → dropdown-menu-BG2UDvir.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-BHSnTyV8.js → dynamic-plugin-layout-0o-Ag6fQ.js} +1 -1
- package/dist/client/assets/{empty-state-CxuGKoUZ.js → empty-state-Ci9wpE4f.js} +1 -1
- package/dist/client/assets/{empty-state-BKkZQAbY.js → empty-state-DWcstHYO.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CIPWZJW-.js → extract-connection-data-DjV0tcfo.js} +1 -1
- package/dist/client/assets/{features-iyOKXl3K.js → features-BtcTR8s0.js} +1 -1
- package/dist/client/assets/{form-BIoYTmyg.js → form-peQyLbDW.js} +1 -1
- package/dist/client/assets/{general-Cij7c2aO.js → general-_MKib7Ow.js} +1 -1
- package/dist/client/assets/{index-DacOWTuH.js → index-B3z6UTdH.js} +1 -1
- package/dist/client/assets/{index-B1JV7ppc.js → index-B74vbIoj.js} +1 -1
- package/dist/client/assets/{index-BnX-CFDs.js → index-BOKdO59b.js} +1 -1
- package/dist/client/assets/{index-1Z2oT3ji.js → index-BdEBb_Nw.js} +1 -1
- package/dist/client/assets/{index-DH9f3GXN.js → index-C_heSJg7.js} +1 -1
- package/dist/client/assets/{index-CwjvmiaK.js → index-DXg98Kgh.js} +1 -1
- package/dist/client/assets/{index-BbKvWA-n.js → index-DgjPAgtK.js} +1 -1
- package/dist/client/assets/{index-D6qhB-mw.js → index-DiTVOGvz.js} +3 -3
- package/dist/client/assets/{index-ZcQ1r47L.js → index-LFRnW2ND.js} +1 -1
- package/dist/client/assets/{index-B-ip_PBd.js → index-LU0fMnAB.js} +1 -1
- package/dist/client/assets/{index-CQwg4ynB.js → index-MNgoaxoh.js} +1 -1
- package/dist/client/assets/{index-CwyFo3x2.js → index-OH48I7pr.js} +1 -1
- package/dist/client/assets/index-YF1wX-UW.js +1 -0
- package/dist/client/assets/{index-BIWc3bwF.js → index-bn7bZZHA.js} +1 -1
- package/dist/client/assets/{index-BAv6Y8f_.js → index-nHVmAR-G.js} +1 -1
- package/dist/client/assets/{index-CFahKaOM.js → index-nLaCFF9u.js} +2 -2
- package/dist/client/assets/{infiniteQueryObserver-Cuq-6B7N.js → infiniteQueryObserver-3VUkrTvV.js} +1 -1
- package/dist/client/assets/{input-BohjAJ_4.js → input-CxJ-WrlI.js} +1 -1
- package/dist/client/assets/{integration-icon-B4agjmMV.js → integration-icon-DGTz3Rke.js} +1 -1
- package/dist/client/assets/{label-DyQV2LLm.js → label-CiLZir7w.js} +1 -1
- package/dist/client/assets/{layout-DV29n77Q.js → layout-DZRRSA8c.js} +1 -1
- package/dist/client/assets/{lean-canvas-recruit-modal-4tZiJJkU.js → lean-canvas-recruit-modal-B6pKKzDY.js} +1 -1
- package/dist/client/assets/{login-CyTM-pJp.js → login-0pt_pLM-.js} +1 -1
- package/dist/client/assets/{members-DzL0o7-6.js → members-CBrB08fu.js} +1 -1
- package/dist/client/assets/{monaco-editor-CLkShlci.js → monaco-editor-QaYaFffZ.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Cf6Vkgx7.js → monitoring-stats-row-CC4if2Pk.js} +1 -1
- package/dist/client/assets/{oauth-callback-IG63Z6_T.js → oauth-callback-BnBWfStn.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-BzUPIaWs.js → oauth-callback-ai-provider-FmGgb156.js} +1 -1
- package/dist/client/assets/{onboarding-EN15kkwD.js → onboarding-BAcUKNjA.js} +1 -1
- package/dist/client/assets/{org-layout-D86hlO7v.js → org-layout-Cdo1rsPD.js} +1 -1
- package/dist/client/assets/{org-plugin-layout-BD1VTnDi.js → org-plugin-layout-CJTAves4.js} +1 -1
- package/dist/client/assets/{pair-BCm4UAGD.js → pair-Cn8FPqtQ.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-DkZODBFG.js → plugin-empty-state-3UOe7lZW.js} +1 -1
- package/dist/client/assets/{plugin-header-Bpo7VOQ5.js → plugin-header-B5pM8KBx.js} +1 -1
- package/dist/client/assets/{plugin-layout-BBKyCNXN.js → plugin-layout-Dolxv79h.js} +1 -1
- package/dist/client/assets/{popover-DneAjpKm.js → popover-Cvm-SdUL.js} +1 -1
- package/dist/client/assets/{profile-DicwTKH1.js → profile-6X1yOQdP.js} +1 -1
- package/dist/client/assets/{project-app-view-BzdtqqIo.js → project-app-view-DvvsU4iK.js} +1 -1
- package/dist/client/assets/registry-BRp6r677.js +2 -0
- package/dist/client/assets/{registry-layout-BuxPc_PJ.js → registry-layout-ysBoW9Tl.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Br303SqN.js → required-auth-layout-Dt4K21Pv.js} +1 -1
- package/dist/client/assets/{reset-password-C3HV9JXm.js → reset-password-D9X98cz3.js} +1 -1
- package/dist/client/assets/{roles-CU1Cxmpd.js → roles-CMH_sOBL.js} +1 -1
- package/dist/client/assets/{scroll-area-DlG8UFJF.js → scroll-area-B9wKEneG.js} +1 -1
- package/dist/client/assets/{search-input-Bjfid_id.js → search-input-Iq7HC3LH.js} +1 -1
- package/dist/client/assets/{select-gZj19OqY.js → select-Dp6b6p2r.js} +1 -1
- package/dist/client/assets/{select-model-Ly7oy5vK.js → select-model-DeRXZx8w.js} +1 -1
- package/dist/client/assets/{settings-layout-C78KOlkk.js → settings-layout-BFjzzOzQ.js} +1 -1
- package/dist/client/assets/{settings-section-CdYoZh3R.js → settings-section-CcHh5CZ5.js} +1 -1
- package/dist/client/assets/{shell-layout-CNVN1Xii.js → shell-layout-CTaFLMGl.js} +1 -1
- package/dist/client/assets/{skeleton-CYEDV6V5.js → skeleton-CDQUGJcQ.js} +1 -1
- package/dist/client/assets/{sso-kC99uSB8.js → sso-B_-8dtd-.js} +1 -1
- package/dist/client/assets/{store-CPqdUdbg.js → store-ChD7IrAK.js} +1 -1
- package/dist/client/assets/store-registry-BfmheXNd.js +2 -0
- package/dist/client/assets/{switch-CSQQwNd5.js → switch-BbpeJgOD.js} +1 -1
- package/dist/client/assets/{table-EnhZuihn.js → table-CaKZ3cPw.js} +1 -1
- package/dist/client/assets/{tabs-BiZc3mdZ.js → tabs-Bpw0FkOs.js} +1 -1
- package/dist/client/assets/{task-status-yVhre1Eq.js → task-status-D4v7A72x.js} +1 -1
- package/dist/client/assets/{textarea-DfNIu9yW.js → textarea-BBmPaG6M.js} +1 -1
- package/dist/client/assets/{toggle-group-CsTz1qk2.js → toggle-group-C_JrOUcW.js} +1 -1
- package/dist/client/assets/{tools-list-BkX_uGL9.js → tools-list-Cs6nuh3D.js} +1 -1
- package/dist/client/assets/{tooltip-V_Rb6MNZ.js → tooltip-Blwixkut.js} +1 -1
- package/dist/client/assets/{types-LzWcp-KY.js → types-DpciA73e.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CKfNcci8.js → use-ai-providers-rg7SDdrG.js} +1 -1
- package/dist/client/assets/{use-collections-DcqDFIJE.js → use-collections-DVujTX05.js} +1 -1
- package/dist/client/assets/{use-connection-DMd3gQky.js → use-connection-nEqGCm80.js} +1 -1
- package/dist/client/assets/{use-copy-CqokAoTf.js → use-copy-nEKil52f.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DOAJogil.js → use-create-virtual-mcp-CJOu0k7Y.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CK7K1FCP.js → use-decopilot-events-Dp8JTZoZ.js} +1 -1
- package/dist/client/assets/{use-delete-connection-BZs0jQgt.js → use-delete-connection-NSYjKXy5.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-srxCZX29.js → use-infinite-scroll-DS1Ojgkb.js} +1 -1
- package/dist/client/assets/{use-list-state-C40IyQ5t.js → use-list-state-CzARiSqi.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-B1ZDkVHC.js → use-mcp-tools-C_I_UoaG.js} +1 -1
- package/dist/client/assets/{use-members-CdKQAO9T.js → use-members-CICoDwmh.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-Dga1Bhy4.js → use-navigate-to-agent-DLCGg_uR.js} +1 -1
- package/dist/client/assets/{use-org-sso-DfoBK0ag.js → use-org-sso-L8cXZrkC.js} +1 -1
- package/dist/client/assets/{use-organization-roles-Bq4hoskJ.js → use-organization-roles-DRlygqeg.js} +1 -1
- package/dist/client/assets/{use-organization-settings-C75c-v86.js → use-organization-settings-DvZsMop0.js} +1 -1
- package/dist/client/assets/{use-registry-connections-HIXjhu0m.js → use-registry-connections-DfviabXS.js} +1 -1
- package/dist/client/assets/{use-status-sounds-Doh_awWx.js → use-status-sounds-BcWByl3m.js} +1 -1
- package/dist/client/assets/{use-tasks-BAqdxtKe.js → use-tasks-Bv2M0xJo.js} +1 -1
- package/dist/client/assets/{use-view-mode-CuDuiIvs.js → use-view-mode-c-k92Bn-.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-kH1PMy03.js → use-virtual-mcp-C3DHL0da.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-DIYNhUoD.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-CjcqsQRh.js +1 -0
- package/dist/client/assets/{user-BaXkR2l6.js → user-CAmkHDzZ.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-B3PPiEz2.js → view-mode-toggle-C1Cefw00.js} +1 -1
- package/dist/client/assets/{workflow-idtrPQXc.js → workflow-BxmLyBCm.js} +1 -1
- package/dist/client/assets/workflow-detail-C5OVB3zC.js +1 -0
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +28 -4
- package/dist/server/node_modules/pg-int8/LICENSE +13 -0
- package/dist/server/node_modules/pg-int8/README.md +16 -0
- package/dist/server/node_modules/pg-int8/index.js +100 -0
- package/dist/server/node_modules/pg-int8/package.json +24 -0
- package/dist/server/node_modules/postgres-array/index.d.ts +4 -0
- package/dist/server/node_modules/postgres-array/index.js +97 -0
- package/dist/server/node_modules/postgres-array/package.json +35 -0
- package/dist/server/node_modules/postgres-array/readme.md +43 -0
- package/dist/server/node_modules/postgres-bytea/index.js +33 -0
- package/dist/server/node_modules/{xtend/LICENSE → postgres-bytea/license} +2 -1
- package/dist/server/node_modules/{postgres-date → postgres-bytea}/package.json +8 -7
- package/dist/server/node_modules/postgres-bytea/readme.md +34 -0
- package/dist/server/server.js +27 -3
- package/package.json +1 -1
- package/dist/client/assets/ai-providers-LWQHbAfP.js +0 -1
- package/dist/client/assets/index-BkfyW-B8.js +0 -1
- package/dist/client/assets/registry-DYndR3Xa.js +0 -2
- package/dist/client/assets/store-registry-D4fRmaFj.js +0 -2
- package/dist/client/assets/useInfiniteQuery-IC7YnrCe.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Diu74tq9.js +0 -1
- package/dist/client/assets/workflow-detail-BUCojV1U.js +0 -1
- package/dist/server/node_modules/ansi-styles/index.d.ts +0 -236
- package/dist/server/node_modules/ansi-styles/index.js +0 -223
- package/dist/server/node_modules/ansi-styles/license +0 -9
- package/dist/server/node_modules/ansi-styles/package.json +0 -54
- package/dist/server/node_modules/ansi-styles/readme.md +0 -173
- package/dist/server/node_modules/postgres-date/index.js +0 -116
- package/dist/server/node_modules/postgres-date/readme.md +0 -49
- package/dist/server/node_modules/xtend/.jshintrc +0 -30
- package/dist/server/node_modules/xtend/README.md +0 -32
- package/dist/server/node_modules/xtend/immutable.js +0 -19
- package/dist/server/node_modules/xtend/mutable.js +0 -17
- package/dist/server/node_modules/xtend/package.json +0 -55
- package/dist/server/node_modules/xtend/test.js +0 -103
- /package/dist/server/node_modules/{postgres-date → postgres-array}/license +0 -0
package/dist/server/server.js
CHANGED
|
@@ -3959,6 +3959,23 @@ function makeEventsHandler(deps) {
|
|
|
3959
3959
|
};
|
|
3960
3960
|
}
|
|
3961
3961
|
|
|
3962
|
+
// daemon/activity.ts
|
|
3963
|
+
var lastActivityAt = Date.now();
|
|
3964
|
+
function bumpActivity(now = Date.now()) {
|
|
3965
|
+
lastActivityAt = now;
|
|
3966
|
+
}
|
|
3967
|
+
function getIdleStatus(now = Date.now()) {
|
|
3968
|
+
return {
|
|
3969
|
+
lastActivityAt: new Date(lastActivityAt).toISOString(),
|
|
3970
|
+
idleMs: Math.max(0, now - lastActivityAt)
|
|
3971
|
+
};
|
|
3972
|
+
}
|
|
3973
|
+
|
|
3974
|
+
// daemon/routes/idle.ts
|
|
3975
|
+
function makeIdleHandler() {
|
|
3976
|
+
return () => jsonResponse(getIdleStatus());
|
|
3977
|
+
}
|
|
3978
|
+
|
|
3962
3979
|
// daemon/proxy.ts
|
|
3963
3980
|
function makeProxyHandler({ broadcaster, getDevPort }) {
|
|
3964
3981
|
function log(...args) {
|
|
@@ -4033,7 +4050,7 @@ function makeProxyHandler({ broadcaster, getDevPort }) {
|
|
|
4033
4050
|
|
|
4034
4051
|
// daemon/ws-proxy.ts
|
|
4035
4052
|
var MAX_PENDING_FRAMES = 256;
|
|
4036
|
-
function makeWsUpgrader(getDevPort) {
|
|
4053
|
+
function makeWsUpgrader(getDevPort, opts = {}) {
|
|
4037
4054
|
return {
|
|
4038
4055
|
upgradeData(req) {
|
|
4039
4056
|
const url = new URL(req.url);
|
|
@@ -4071,6 +4088,7 @@ function makeWsUpgrader(getDevPort) {
|
|
|
4071
4088
|
});
|
|
4072
4089
|
},
|
|
4073
4090
|
message(ws, message) {
|
|
4091
|
+
opts.onClientMessage?.();
|
|
4074
4092
|
const upstream = ws.data.upstream;
|
|
4075
4093
|
const frame = typeof message === "string" ? message : message.buffer;
|
|
4076
4094
|
if (upstream && upstream.readyState === WebSocket.OPEN) {
|
|
@@ -4484,8 +4502,9 @@ var eventsH = makeEventsHandler({
|
|
|
4484
4502
|
getActiveProcesses: () => processManager.activeNames(),
|
|
4485
4503
|
getLastBranchStatus: () => branchStatus.getLast()
|
|
4486
4504
|
});
|
|
4505
|
+
var idleH = makeIdleHandler();
|
|
4487
4506
|
var proxyH = makeProxyHandler({ broadcaster, getDevPort });
|
|
4488
|
-
var wsProxy = makeWsUpgrader(getDevPort);
|
|
4507
|
+
var wsProxy = makeWsUpgrader(getDevPort, { onClientMessage: bumpActivity });
|
|
4489
4508
|
Bun.serve({
|
|
4490
4509
|
port: config.proxyPort,
|
|
4491
4510
|
hostname: "0.0.0.0",
|
|
@@ -4493,6 +4512,9 @@ Bun.serve({
|
|
|
4493
4512
|
async fetch(req, server) {
|
|
4494
4513
|
const url = new URL(req.url);
|
|
4495
4514
|
const p = url.pathname;
|
|
4515
|
+
if (p !== "/health" && p !== "/_decopilot_vm/idle") {
|
|
4516
|
+
bumpActivity();
|
|
4517
|
+
}
|
|
4496
4518
|
if (req.headers.get("upgrade")?.toLowerCase() === "websocket" && !p.startsWith("/_decopilot_vm/")) {
|
|
4497
4519
|
const ok = server.upgrade(req, { data: wsProxy.upgradeData(req) });
|
|
4498
4520
|
if (ok)
|
|
@@ -4501,6 +4523,8 @@ Bun.serve({
|
|
|
4501
4523
|
}
|
|
4502
4524
|
if (p === "/health" && req.method === "GET")
|
|
4503
4525
|
return healthH();
|
|
4526
|
+
if (req.method === "GET" && p === "/_decopilot_vm/idle")
|
|
4527
|
+
return idleH();
|
|
4504
4528
|
if (req.method === "GET" && p === "/_decopilot_vm/events")
|
|
4505
4529
|
return eventsH();
|
|
4506
4530
|
if (req.method === "GET" && p === "/_decopilot_vm/scripts")
|
|
@@ -4599,7 +4623,7 @@ mkdir -p /app && chown deco:deco /app
|
|
|
4599
4623
|
`);let Q=X.pax;if(Q)for(let J in Q)G+=EM0(" "+J+"="+Q[J]+`
|
|
4600
4624
|
`);return m9.from(G)};al5.decodePax=function(X){let G={};while(X.length){let Q=0;while(Q<X.length&&X[Q]!==32)Q++;let J=parseInt(m9.toString(X.subarray(0,Q)),10);if(!J)return G;let $=m9.toString(X.subarray(Q+1,J-1)),Z=$.indexOf("=");if(Z===-1)return G;G[$.slice(0,Z)]=$.slice(Z+1),X=X.subarray(J)}return G};al5.encode=function(X){let G=m9.alloc(512),Q=X.name,J="";if(X.typeflag===5&&Q[Q.length-1]!=="/")Q+="/";if(m9.byteLength(Q)!==Q.length)return null;while(m9.byteLength(Q)>100){let $=Q.indexOf("/");if($===-1)return null;J+=J?"/"+Q.slice(0,$):Q.slice(0,$),Q=Q.slice($+1)}if(m9.byteLength(Q)>100||m9.byteLength(J)>155)return null;if(X.linkname&&m9.byteLength(X.linkname)>100)return null;if(m9.write(G,Q),m9.write(G,YA(X.mode&4095,6),100),m9.write(G,YA(X.uid,6),108),m9.write(G,YA(X.gid,6),116),pl5(X.size,G,124),m9.write(G,YA(X.mtime.getTime()/1000|0,11),136),G[156]=48+cl5(X.type),X.linkname)m9.write(G,X.linkname,157);if(m9.copy(ys6,G,257),m9.copy(xl5,G,263),X.uname)m9.write(G,X.uname,265);if(X.gname)m9.write(G,X.gname,297);if(m9.write(G,YA(X.devmajor||0,6),329),m9.write(G,YA(X.devminor||0,6),337),J)m9.write(G,J,345);return m9.write(G,YA(hs6(G),6),148),G};al5.decode=function(X,G,Q){let J=X[156]===0?0:X[156]-48,$=wt(X,0,100,G),Z=eq(X,100,8),W=eq(X,108,8),K=eq(X,116,8),H=eq(X,124,12),U=eq(X,136,12),N=dl5(J),B=X[157]===0?null:wt(X,157,100,G),O=wt(X,265,32),z=wt(X,297,32),w=eq(X,329,8),E=eq(X,337,8),P=hs6(X);if(P===256)return null;if(P!==eq(X,148,8))throw Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(ul5(X)){if(X[345])$=wt(X,345,155,G)+"/"+$}else if(ll5(X));else if(!Q)throw Error("Invalid tar header: unknown format.");if(J===0&&$&&$[$.length-1]==="/")J=5;return{name:$,mode:Z,uid:W,gid:K,size:H,mtime:new Date(1000*U),type:N,linkname:B,uname:O,gname:z,devmajor:w,devminor:E,pax:null}};function ul5(Y){return m9.equals(ys6,Y.subarray(257,263))}function ll5(Y){return m9.equals(hl5,Y.subarray(257,263))&&m9.equals(gl5,Y.subarray(263,265))}function ml5(Y,X,G){if(typeof Y!=="number")return G;if(Y=~~Y,Y>=X)return X;if(Y>=0)return Y;if(Y+=X,Y>=0)return Y;return 0}function dl5(Y){switch(Y){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 cl5(Y){switch(Y){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 xs6(Y,X,G,Q){for(;G<Q;G++)if(Y[G]===X)return G;return Q}function hs6(Y){let X=256;for(let G=0;G<148;G++)X+=Y[G];for(let G=156;G<512;G++)X+=Y[G];return X}function YA(Y,X){if(Y=Y.toString(8),Y.length>X)return"7777777777777777777".slice(0,X)+" ";return"0000000000000000000".slice(0,X-Y.length)+Y+" "}function il5(Y,X,G){X[G]=128;for(let Q=11;Q>0;Q--)X[G+Q]=Y&255,Y=Math.floor(Y/256)}function pl5(Y,X,G){if(Y.toString(8).length>11)il5(Y,X,G);else m9.write(X,YA(Y,11),G)}function nl5(Y){let X;if(Y[0]===128)X=!0;else if(Y[0]===255)X=!1;else return null;let G=[],Q;for(Q=Y.length-1;Q>0;Q--){let Z=Y[Q];if(X)G.push(Z);else G.push(255-Z)}let J=0,$=G.length;for(Q=0;Q<$;Q++)J+=G[Q]*Math.pow(256,Q);return X?J:-1*J}function eq(Y,X,G){if(Y=Y.subarray(X,X+G),X=0,Y[X]&128)return nl5(Y);else{while(X<Y.length&&Y[X]===32)X++;let Q=ml5(xs6(Y,32,X,Y.length),Y.length,Y.length);while(X<Q&&Y[X]===0)X++;if(Q===X)return 0;return parseInt(m9.toString(Y.subarray(X,Q)),8)}}function wt(Y,X,G,Q){return m9.toString(Y.subarray(X,xs6(Y,0,X,X+G)),Q)}function EM0(Y){let X=m9.byteLength(Y),G=Math.floor(Math.log(X)/Math.log(10))+1;if(X+G>=Math.pow(10,G))G++;return X+G+Y}});var ps6=k((lVG,is6)=>{var{Writable:Ym5,Readable:Xm5,getStreamError:gs6}=LM0(),Gm5=NM0(),us6=Dt(),Lt=PM0(),Qm5=us6.alloc(0);class ls6{constructor(){this.buffered=0,this.shifted=0,this.queue=new Gm5,this._offset=0}push(Y){this.buffered+=Y.byteLength,this.queue.push(Y)}shiftFirst(Y){return this._buffered===0?null:this._next(Y)}shift(Y){if(Y>this.buffered)return null;if(Y===0)return Qm5;let X=this._next(Y);if(Y===X.byteLength)return X;let G=[X];while((Y-=X.byteLength)>0)X=this._next(Y),G.push(X);return us6.concat(G)}_next(Y){let X=this.queue.peek(),G=X.byteLength-this._offset;if(Y>=G){let Q=this._offset?X.subarray(this._offset,X.byteLength):X;return this.queue.shift(),this._offset=0,this.buffered-=G,this.shifted+=G,Q}return this.buffered-=Y,this.shifted+=Y,X.subarray(this._offset,this._offset+=Y)}}class ms6 extends Xm5{constructor(Y,X,G){super();this.header=X,this.offset=G,this._parent=Y}_read(Y){if(this.header.size===0)this.push(null);if(this._parent._stream===this)this._parent._update();Y(null)}_predestroy(){this._parent.destroy(gs6(this))}_detach(){if(this._parent._stream===this)this._parent._stream=null,this._parent._missing=cs6(this.header.size),this._parent._update()}_destroy(Y){this._detach(),Y(null)}}class ds6 extends Ym5{constructor(Y){super(Y);if(!Y)Y={};this._buffer=new ls6,this._offset=0,this._header=null,this._stream=null,this._missing=0,this._longHeader=!1,this._callback=qM0,this._locked=!1,this._finished=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null,this._filenameEncoding=Y.filenameEncoding||"utf-8",this._allowUnknownFormat=!!Y.allowUnknownFormat,this._unlockBound=this._unlock.bind(this)}_unlock(Y){if(this._locked=!1,Y){this.destroy(Y),this._continueWrite(Y);return}this._update()}_consumeHeader(){if(this._locked)return!1;this._offset=this._buffer.shifted;try{this._header=Lt.decode(this._buffer.shift(512),this._filenameEncoding,this._allowUnknownFormat)}catch(Y){return this._continueWrite(Y),!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(Y){switch(this._header.type){case"gnu-long-path":this._gnuLongPath=Lt.decodeLongPath(Y,this._filenameEncoding);break;case"gnu-long-link-path":this._gnuLongLinkPath=Lt.decodeLongPath(Y,this._filenameEncoding);break;case"pax-global-header":this._paxGlobal=Lt.decodePax(Y);break;case"pax-header":this._pax=this._paxGlobal===null?Lt.decodePax(Y):Object.assign({},this._paxGlobal,Lt.decodePax(Y));break}}_consumeLongHeader(){this._longHeader=!1,this._missing=cs6(this._header.size);let Y=this._buffer.shift(this._header.size);try{this._decodeLongHeader(Y)}catch(X){return this._continueWrite(X),!1}return!0}_consumeStream(){let Y=this._buffer.shiftFirst(this._missing);if(Y===null)return!1;this._missing-=Y.byteLength;let X=this._stream.push(Y);if(this._missing===0){if(this._stream.push(null),X)this._stream._detach();return X&&this._locked===!1}return X}_createStream(){return new ms6(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 Y=this._buffer.shiftFirst(this._missing);if(Y!==null)this._missing-=Y.byteLength;continue}if(this._buffer.buffered<512)break;if(this._stream!==null||this._consumeHeader()===!1)return}this._continueWrite(null)}_continueWrite(Y){let X=this._callback;this._callback=qM0,X(Y)}_write(Y,X){this._callback=X,this._buffer.push(Y),this._update()}_final(Y){this._finished=this._missing===0&&this._buffer.buffered===0,Y(this._finished?null:Error("Unexpected end of data"))}_predestroy(){this._continueWrite(null)}_destroy(Y){if(this._stream)this._stream.destroy(gs6(this));Y(null)}[Symbol.asyncIterator](){let Y=null,X=null,G=null,Q=null,J=null,$=this;return this.on("entry",K),this.on("error",(N)=>{Y=N}),this.on("close",H),{[Symbol.asyncIterator](){return this},next(){return new Promise(W)},return(){return U(null)},throw(N){return U(N)}};function Z(N){if(!J)return;let B=J;J=null,B(N)}function W(N,B){if(Y)return B(Y);if(Q){N({value:Q,done:!1}),Q=null;return}if(X=N,G=B,Z(null),$._finished&&X)X({value:void 0,done:!0}),X=G=null}function K(N,B,O){if(J=O,B.on("error",qM0),X)X({value:B,done:!1}),X=G=null;else Q=B}function H(){if(Z(Y),!X)return;if(Y)G(Y);else X({value:void 0,done:!0});X=G=null}function U(N){return $.destroy(N),Z(N),new Promise((B,O)=>{if($.destroyed)return B({value:void 0,done:!0});$.once("close",function(){if(N)O(N);else B({value:void 0,done:!0})})})}}}is6.exports=function(X){return new ds6(X)};function qM0(){}function cs6(Y){return Y&=511,Y&&512-Y}});var as6=k((mVG,AM0)=>{var ns6={S_IFMT:61440,S_IFDIR:16384,S_IFCHR:8192,S_IFBLK:24576,S_IFIFO:4096,S_IFLNK:40960};try{AM0.exports=_1("fs").constants||ns6}catch{AM0.exports=ns6}});var Xe6=k((dVG,Ye6)=>{var{Readable:Jm5,Writable:Zm5,getStreamError:rs6}=LM0(),pu=Dt(),Et=as6(),Hu1=PM0(),ts6=pu.alloc(1024);class os6 extends Zm5{constructor(Y,X,G){super({mapWritable:Wm5,eagerOpen:!0});if(this.written=0,this.header=X,this._callback=G,this._linkname=null,this._isLinkname=X.type==="symlink"&&!X.linkname,this._isVoid=X.type!=="file"&&X.type!=="contiguous-file",this._finished=!1,this._pack=Y,this._openCallback=null,this._pack._stream===null)this._pack._stream=this;else this._pack._pending.push(this)}_open(Y){if(this._openCallback=Y,this._pack._stream===this)this._continueOpen()}_continuePack(Y){if(this._callback===null)return;let X=this._callback;this._callback=null,X(Y)}_continueOpen(){if(this._pack._stream===null)this._pack._stream=this;let Y=this._openCallback;if(this._openCallback=null,Y===null)return;if(this._pack.destroying)return Y(Error("pack stream destroyed"));if(this._pack._finalized)return Y(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);Y(null)}_write(Y,X){if(this._isLinkname)return this._linkname=this._linkname?pu.concat([this._linkname,Y]):Y,X(null);if(this._isVoid){if(Y.byteLength>0)return X(Error("No body allowed for this entry"));return X()}if(this.written+=Y.byteLength,this._pack.push(Y))return X();this._pack._drain=X}_finish(){if(this._finished)return;if(this._finished=!0,this._isLinkname)this.header.linkname=this._linkname?pu.toString(this._linkname,"utf-8"):"",this._pack._encode(this.header);es6(this._pack,this.header.size),this._pack._done(this)}_final(Y){if(this.written!==this.header.size)return Y(Error("Size mismatch"));this._finish(),Y(null)}_getError(){return rs6(this)||Error("tar entry destroyed")}_predestroy(){this._pack.destroy(this._getError())}_destroy(Y){this._pack._done(this),this._continuePack(this._finished?null:this._getError()),Y()}}class ss6 extends Jm5{constructor(Y){super(Y);this._drain=IM0,this._finalized=!1,this._finalizing=!1,this._pending=[],this._stream=null}entry(Y,X,G){if(this._finalized||this.destroying)throw Error("already finalized or destroyed");if(typeof X==="function")G=X,X=null;if(!G)G=IM0;if(!Y.size||Y.type==="symlink")Y.size=0;if(!Y.type)Y.type=$m5(Y.mode);if(!Y.mode)Y.mode=Y.type==="directory"?493:420;if(!Y.uid)Y.uid=0;if(!Y.gid)Y.gid=0;if(!Y.mtime)Y.mtime=new Date;if(typeof X==="string")X=pu.from(X);let Q=new os6(this,Y,G);if(pu.isBuffer(X))return Y.size=X.byteLength,Q.write(X),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(ts6),this.push(null)}_done(Y){if(Y!==this._stream)return;if(this._stream=null,this._finalizing)this.finalize();if(this._pending.length)this._pending.shift()._continueOpen()}_encode(Y){if(!Y.pax){let X=Hu1.encode(Y);if(X){this.push(X);return}}this._encodePax(Y)}_encodePax(Y){let X=Hu1.encodePax({name:Y.name,linkname:Y.linkname,pax:Y.pax}),G={name:"PaxHeader",mode:Y.mode,uid:Y.uid,gid:Y.gid,size:X.byteLength,mtime:Y.mtime,type:"pax-header",linkname:Y.linkname&&"PaxHeader",uname:Y.uname,gname:Y.gname,devmajor:Y.devmajor,devminor:Y.devminor};this.push(Hu1.encode(G)),this.push(X),es6(this,X.byteLength),G.size=Y.size,G.type=Y.type,this.push(Hu1.encode(G))}_doDrain(){let Y=this._drain;this._drain=IM0,Y()}_predestroy(){let Y=rs6(this);if(this._stream)this._stream.destroy(Y);while(this._pending.length){let X=this._pending.shift();X.destroy(Y),X._continueOpen()}this._doDrain()}_read(Y){this._doDrain(),Y()}}Ye6.exports=function(X){return new ss6(X)};function $m5(Y){switch(Y&Et.S_IFMT){case Et.S_IFBLK:return"block-device";case Et.S_IFCHR:return"character-device";case Et.S_IFDIR:return"directory";case Et.S_IFIFO:return"fifo";case Et.S_IFLNK:return"symlink"}return"file"}function IM0(){}function es6(Y,X){if(X&=511,X)Y.push(ts6.subarray(0,512-X))}function Wm5(Y){return pu.isBuffer(Y)?Y:pu.from(Y)}});var Ge6=k((Km5)=>{Km5.extract=ps6();Km5.pack=Xe6()});var Ze6=k((iVG,Je6)=>{Je6.exports=Qe6;function Qe6(Y,X){if(Y&&X)return Qe6(Y)(X);if(typeof Y!=="function")throw TypeError("need wrapper function");return Object.keys(Y).forEach(function(Q){G[Q]=Y[Q]}),G;function G(){var Q=Array(arguments.length);for(var J=0;J<Q.length;J++)Q[J]=arguments[J];var $=Y.apply(this,Q),Z=Q[Q.length-1];if(typeof $==="function"&&$!==Z)Object.keys(Z).forEach(function(W){$[W]=Z[W]});return $}}});var TM0=k((pVG,jM0)=>{var $e6=Ze6();jM0.exports=$e6(Fu1);jM0.exports.strict=$e6(We6);Fu1.proto=Fu1(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return Fu1(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return We6(this)},configurable:!0})});function Fu1(Y){var X=function(){if(X.called)return X.value;return X.called=!0,X.value=Y.apply(this,arguments)};return X.called=!1,X}function We6(Y){var X=function(){if(X.called)throw Error(X.onceError);return X.called=!0,X.value=Y.apply(this,arguments)},G=Y.name||"Function wrapped with `once`";return X.onceError=G+" shouldn't be called more than once",X.called=!1,X}});var Fe6=k((nVG,He6)=>{var Um5=TM0(),Nm5=function(){},Bm5=global.Bare?queueMicrotask:process.nextTick.bind(process),Om5=function(Y){return Y.setHeader&&typeof Y.abort==="function"},zm5=function(Y){return Y.stdio&&Array.isArray(Y.stdio)&&Y.stdio.length===3},Ke6=function(Y,X,G){if(typeof X==="function")return Ke6(Y,null,X);if(!X)X={};G=Um5(G||Nm5);var{_writableState:Q,_readableState:J}=Y,$=X.readable||X.readable!==!1&&Y.readable,Z=X.writable||X.writable!==!1&&Y.writable,W=!1,K=function(){if(!Y.writable)H()},H=function(){if(Z=!1,!$)G.call(Y)},U=function(){if($=!1,!Z)G.call(Y)},N=function(E){G.call(Y,E?Error("exited with error code: "+E):null)},B=function(E){G.call(Y,E)},O=function(){Bm5(z)},z=function(){if(W)return;if($&&!(J&&(J.ended&&!J.destroyed)))return G.call(Y,Error("premature close"));if(Z&&!(Q&&(Q.ended&&!Q.destroyed)))return G.call(Y,Error("premature close"))},w=function(){Y.req.on("finish",H)};if(Om5(Y))if(Y.on("complete",H),Y.on("abort",O),Y.req)w();else Y.on("request",w);else if(Z&&!Q)Y.on("end",K),Y.on("close",K);if(zm5(Y))Y.on("exit",N);if(Y.on("end",U),Y.on("finish",H),X.error!==!1)Y.on("error",B);return Y.on("close",O),function(){if(W=!0,Y.removeListener("complete",H),Y.removeListener("abort",O),Y.removeListener("request",w),Y.req)Y.req.removeListener("finish",H);Y.removeListener("end",K),Y.removeListener("close",K),Y.removeListener("finish",H),Y.removeListener("exit",N),Y.removeListener("end",U),Y.removeListener("error",B),Y.removeListener("close",O)}};He6.exports=Ke6});var Be6=k((aVG,Ne6)=>{var Dm5=TM0(),wm5=Fe6(),Uu1;try{Uu1=_1("fs")}catch(Y){}var MQ1=function(){},Lm5=typeof process>"u"?!1:/^v?\.0/.test(process.version),Nu1=function(Y){return typeof Y==="function"},Em5=function(Y){if(!Lm5)return!1;if(!Uu1)return!1;return(Y instanceof(Uu1.ReadStream||MQ1)||Y instanceof(Uu1.WriteStream||MQ1))&&Nu1(Y.close)},Pm5=function(Y){return Y.setHeader&&Nu1(Y.abort)},qm5=function(Y,X,G,Q){Q=Dm5(Q);var J=!1;Y.on("close",function(){J=!0}),wm5(Y,{readable:X,writable:G},function(Z){if(Z)return Q(Z);J=!0,Q()});var $=!1;return function(Z){if(J)return;if($)return;if($=!0,Em5(Y))return Y.close(MQ1);if(Pm5(Y))return Y.abort();if(Nu1(Y.destroy))return Y.destroy();Q(Z||Error("stream was destroyed"))}},Ue6=function(Y){Y()},Am5=function(Y,X){return Y.pipe(X)},Im5=function(){var Y=Array.prototype.slice.call(arguments),X=Nu1(Y[Y.length-1]||MQ1)&&Y.pop()||MQ1;if(Array.isArray(Y[0]))Y=Y[0];if(Y.length<2)throw Error("pump requires two streams per minimum");var G,Q=Y.map(function(J,$){var Z=$<Y.length-1,W=$>0;return qm5(J,Z,W,function(K){if(!G)G=K;if(K)Q.forEach(Ue6);if(Z)return;Q.forEach(Ue6),X(G)})});return Y.reduce(Am5)};Ne6.exports=Im5});var Ae6=k((Mm5)=>{var Oe6=Ge6(),ze6=Be6(),De6=_1("fs"),aX=_1("path"),RQ1=(global.Bare?global.Bare.platform:process.platform)==="win32";Mm5.pack=function(X,G){if(!X)X=".";if(!G)G={};let Q=G.fs||De6,J=G.ignore||G.filter||SQ1,$=G.mapStream||Pe6,Z=Vm5(Q,G.dereference?Q.stat:Q.lstat,X,J,G.entries,G.sort),W=G.strict!==!1,K=typeof G.umask==="number"?~G.umask:~we6(),H=G.pack||Oe6.pack(),U=G.finish||SQ1,N=G.map||SQ1,B=typeof G.dmode==="number"?G.dmode:0,O=typeof G.fmode==="number"?G.fmode:0;if(G.strip)N=qe6(N,G.strip);if(G.readable)B|=parseInt(555,8),O|=parseInt(444,8);if(G.writable)B|=parseInt(333,8),O|=parseInt(222,8);E();function z(P,I){Q.readlink(aX.join(X,P),function(V,M){if(V)return H.destroy(V);I.linkname=VM0(M),H.entry(I,E)})}function w(P,I,V){if(H.destroyed)return;if(P)return H.destroy(P);if(!I){if(G.finalize!==!1)H.finalize();return U(H)}if(V.isSocket())return E();let M={name:VM0(I),mode:(V.mode|(V.isDirectory()?B:O))&K,mtime:V.mtime,size:V.size,type:"file",uid:V.uid,gid:V.gid};if(V.isDirectory())return M.size=0,M.type="directory",M=N(M)||M,H.entry(M,E);if(V.isSymbolicLink())return M.size=0,M.type="symlink",M=N(M)||M,z(I,M);if(M=N(M)||M,!V.isFile()){if(W)return H.destroy(Error("unsupported type for "+I));return E()}let T=H.entry(M,E),S=$(Q.createReadStream(aX.join(X,I),{start:0,end:M.size>0?M.size-1:M.size}),M);S.on("error",function(C){T.destroy(C)}),ze6(S,T)}function E(P){if(P)return H.destroy(P);Z(w)}return H};function jm5(Y){return Y.length?Y[Y.length-1]:null}function Tm5(){return!global.Bare&&process.getuid?process.getuid():-1}function we6(){return!global.Bare&&process.umask?process.umask():0}Mm5.extract=function(X,G){if(!X)X=".";if(!G)G={};X=aX.resolve(X);let Q=G.fs||De6,J=G.ignore||G.filter||SQ1,$=G.mapStream||Pe6,Z=G.chown!==!1&&!RQ1&&Tm5()===0,W=G.extract||Oe6.extract(),K=[],H=new Date,U=typeof G.umask==="number"?~G.umask:~we6(),N=G.strict!==!1,B=G.validateSymlinks!==!1,O=G.map||SQ1,z=typeof G.dmode==="number"?G.dmode:0,w=typeof G.fmode==="number"?G.fmode:0;if(G.strip)O=qe6(O,G.strip);if(G.readable)z|=parseInt(555,8),w|=parseInt(444,8);if(G.writable)z|=parseInt(333,8),w|=parseInt(222,8);if(W.on("entry",E),G.finish)W.on("finish",G.finish);return W;function E(T,S,C){T=O(T)||T,T.name=VM0(T.name);let _=aX.join(X,aX.join("/",T.name));if(J(_,T))return S.resume(),C();let v=aX.join(_,".")===aX.join(X,".")?X:aX.dirname(_);Ee6(Q,v,aX.join(X,"."),function(m,e){if(m)return C(m);if(!e)return C(Error(v+" is not a valid path"));if(T.type==="directory")return K.push([_,T.mtime]),M(_,{fs:Q,own:Z,uid:T.uid,gid:T.gid,mode:T.mode},y);M(v,{fs:Q,own:Z,uid:T.uid,gid:T.gid,mode:493},function(s){if(s)return C(s);switch(T.type){case"file":return b();case"link":return i();case"symlink":return g()}if(N)return C(Error("unsupported type for "+_+" ("+T.type+")"));S.resume(),C()})});function y(m){if(m)return C(m);I(_,T,function(e){if(e)return C(e);if(RQ1)return C();V(_,T,C)})}function g(){if(RQ1)return C();Q.unlink(_,function(){let m=aX.resolve(aX.dirname(_),T.linkname);if(!n(m)&&B)return C(Error(_+" is not a valid symlink"));Le6(Q,m,aX.join(X,"."),function(e,s){if(e)return C(e);if(!s&&B)return C(Error(_+" is not a valid symlink"));Q.symlink(T.linkname,_,y)})})}function i(){if(RQ1)return C();Q.unlink(_,function(){let m=aX.join(X,aX.join("/",T.linkname));Q.realpath(m,function(e,s){if(e||!n(s))return C(Error(_+" is not a valid hardlink"));Q.link(s,_,function(O1){if(O1&&O1.code==="EPERM"&&G.hardlinkAsFilesFallback)return S=Q.createReadStream(s),b();y(O1)})})})}function n(m){return m===X||m.startsWith(X+aX.sep)}function b(){let m=Q.createWriteStream(_),e=$(S,T);m.on("error",function(s){e.destroy(s)}),ze6(e,m,function(s){if(s)return C(s);m.on("close",y)})}}function P(T,S){let C;while((C=jm5(K))&&T.slice(0,C[0].length)!==C[0])K.pop();if(!C)return S();Q.utimes(C[0],H,C[1],S)}function I(T,S,C){if(G.utimes===!1)return C();if(S.type==="directory")return Q.utimes(T,H,S.mtime,C);if(S.type==="symlink")return P(T,C);Q.utimes(T,H,S.mtime,function(_){if(_)return C(_);P(T,C)})}function V(T,S,C){let _=S.type==="symlink",v=_?Q.lchmod:Q.chmod,y=_?Q.lchown:Q.chown;if(!v)return C();let g=(S.mode|(S.type==="directory"?z:w))&U;if(y&&Z)y.call(Q,T,S.uid,S.gid,i);else i(null);function i(n){if(n)return C(n);if(!v)return C();v.call(Q,T,g,C)}}function M(T,S,C){Q.stat(T,function(_){if(!_)return C(null);if(_.code!=="ENOENT")return C(_);Q.mkdir(T,{mode:S.mode,recursive:!0},function(v,y){if(v)return C(v);V(T,S,C)})})}};function Le6(Y,X,G,Q){if(X===G)return Q(null,!0);if(!X.startsWith(G+aX.sep))return Q(null,!1);Y.lstat(X,function(J,$){if(J&&J.code!=="ENOENT"&&J.code!=="EPERM")return Q(J);if(J||!$.isSymbolicLink())return Le6(Y,aX.join(X,".."),G,Q);Q(null,!1)})}function Ee6(Y,X,G,Q){if(X===G)return Q(null,!0);Y.lstat(X,function(J,$){if(J&&J.code!=="ENOENT"&&J.code!=="EPERM")return Q(J);if(J||$.isDirectory())return Ee6(Y,aX.join(X,".."),G,Q);Q(null,!1)})}function SQ1(){}function Pe6(Y){return Y}function VM0(Y){return RQ1?Y.replace(/\\/g,"/").replace(/[:?<>|]/g,"_"):Y}function Vm5(Y,X,G,Q,J,$){if(!J)J=["."];let Z=J.slice(0);return function(K){if(!Z.length)return K(null);let H=Z.shift(),U=aX.join(G,H);X.call(Y,U,function(N,B){if(N)return K(J.indexOf(H)===-1&&N.code==="ENOENT"?null:N);if(!B.isDirectory())return K(null,H,B);Y.readdir(U,function(O,z){if(O)return K(O);if($)z.sort();for(let w=0;w<z.length;w++)if(!Q(aX.join(G,H,z[w])))Z.push(aX.join(H,z[w]));K(null,H,B)})})}}function qe6(Y,X){return function(G){G.name=G.name.split("/").slice(X).join("/");let Q=G.linkname;if(Q&&(G.type==="link"||aX.isAbsolute(Q)))G.linkname=Q.split("/").slice(X).join("/");return Y(G)}}});var km5,Cm5;var Ie6=D(()=>{FM0();km5=X1(Fs6(),1),Cm5=X1(Ae6(),1)});var Bu1=()=>{};var je6=D(()=>{Mg1()});var Te6=D(()=>{Yu1();eg1();Bu1()});var Ve6=()=>{};var Me6=()=>{};var MM0=D(()=>{io6();KM0();Yu1();to6();$M0();FM0();oo6();so6();eo6();Ys6();WM0();Xs6();Ie6();Bu1();je6();Te6();Ve6();Me6();Bu1()});var FG,g7,Pt,kQ1;var CQ1=D(()=>{FG={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"};g7=class g7 extends Error{cause;constructor(Y,X){super(Y);if(this.name="SandboxError",this.cause=X,X instanceof Error&&X.stack)this.stack=`${this.stack}
|
|
4601
4625
|
Caused by: ${X.stack}`}};Pt=class Pt extends g7{constructor(Y,X){super(Y,X);this.name="SandboxTimeoutError"}};kQ1=class kQ1 extends g7{constructor(Y,X){super(Y,X);this.name="SandboxAlreadyExistsError"}}});async function vm5(Y){let X=Y.getCurrentCluster();if(!X)throw new g7("No active cluster in kubeconfig");let G={};await Y.applyToHTTPSOptions(G);let Q={},J=G.headers??{};for(let[$,Z]of Object.entries(J))if(Array.isArray(Z))Q[$]=Z.join(", ");else if(Z!==void 0)Q[$]=String(Z);if(typeof G.auth==="string"&&!Q.Authorization)Q.Authorization=`Basic ${Buffer.from(G.auth).toString("base64")}`;return{server:X.server.replace(/\/+$/,""),headers:Q,tls:{cert:RM0(G.cert),key:RM0(G.key),ca:RM0(G.ca),rejectUnauthorized:X.skipTLSVerify?!1:void 0}}}function RM0(Y){if(Y==null)return;if(typeof Y==="string")return Y;if(Buffer.isBuffer(Y))return Y.toString("utf8");return String(Y)}async function nu(Y,X){let G=await vm5(Y),Q={...G.headers,...X.headers};if(X.method==="PATCH")Q["content-type"]=X.patchType==="apply"?"application/apply-patch+yaml":X.patchType==="strategic-merge"?"application/strategic-merge-patch+json":"application/merge-patch+json";else if(X.body!==void 0&&!("content-type"in Q))Q["content-type"]="application/json";let J={method:X.method,headers:Q,body:X.body===void 0?void 0:JSON.stringify(X.body),signal:X.signal,tls:G.tls};return fetch(`${G.server}${X.path}`,J)}async function kM0(Y){try{return await Y.json()}catch{return null}}async function CM0(Y,X){if(Y.ok)return;let G=await kM0(Y),Q=G?.message??`${X} failed: ${Y.status} ${Y.statusText}`;throw new SM0(Y.status,G,Q)}async function vQ1(Y,X,G,Q,J="none"){try{let $=await nu(Y,X);if($.status===404)return null;if(await CM0($,G),J==="json")return await $.json();return null}catch($){throw new g7(Q,$)}}async function _Q1(Y,X,G){let Q=`${Re6}/${encodeURIComponent(X)}/${FG.CLAIM_PLURAL}`,J;try{J=await nu(Y,{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 g7(`Failed to create SandboxClaim: ${G.metadata.name} (transport error: ${U})`,H)}if(J.ok)return;let $=await kM0(J),Z=$?.reason?` ${$.reason}`:"",W=$?.message??J.statusText,K=`Failed to create SandboxClaim: ${G.metadata.name} (${J.status}${Z}: ${W})`;if(console.warn(`[agent-sandbox/client] createSandboxClaim ${G.metadata.name} rejected: status=${J.status} reason=${$?.reason??"<none>"} message=${W}`),J.status===409)throw new kQ1(K);throw new g7(K)}async function Ou1(Y,X,G,Q=60000){let J=Date.now()+Q,$=500,Z;while(!0){let W=await ru(Y,X,G).catch(()=>{return});if(!W)return;if(Z=W,Date.now()>=J){let K=Z.metadata?.finalizers??[],H=Z.metadata?.deletionTimestamp??"<unknown>";throw new Pt(`SandboxClaim ${G} still terminating after ${Q}ms (deletionTimestamp=${H}, finalizers=[${K.join(", ")}])`)}await new Promise((K)=>setTimeout(K,500))}}function vM0(Y,X){return`${Re6}/${encodeURIComponent(Y)}/${FG.CLAIM_PLURAL}/${encodeURIComponent(X)}`}async function Se6(Y,X,G,Q){await vQ1(Y,{method:"PATCH",path:vM0(X,G),patchType:"merge",body:{spec:{lifecycle:{shutdownPolicy:"Delete",shutdownTime:Q}}}},"patchSandboxClaimShutdown",`Failed to patch SandboxClaim shutdownTime: ${G}`)}async function au(Y,X,G){await vQ1(Y,{method:"DELETE",path:vM0(X,G)},"deleteSandboxClaim",`Failed to delete SandboxClaim: ${G}`)}async function ru(Y,X,G){return await vQ1(Y,{method:"GET",path:vM0(X,G)},"getSandboxClaim",`Failed to get SandboxClaim: ${G}`,"json")??void 0}function _e6(Y,X){return`${ve6}/${encodeURIComponent(Y)}/${_M0}/${encodeURIComponent(X)}`}function _m5(Y){return`${ve6}/${encodeURIComponent(Y)}/${_M0}`}async function zu1(Y,X,G){try{let Q=await nu(Y,{method:"POST",path:_m5(X),body:G});if(Q.status===409)return;await CM0(Q,"createHttpRoute")}catch(Q){if(Q instanceof SM0&&Q.status===409)return;throw new g7(`Failed to create HTTPRoute: ${G.metadata.name}`,Q)}}async function Du1(Y,X,G){await vQ1(Y,{method:"DELETE",path:_e6(X,G)},"deleteHttpRoute",`Failed to delete HTTPRoute: ${G}`)}async function fe6(Y,X,G){return await vQ1(Y,{method:"GET",path:_e6(X,G)},"getHttpRoute",`Failed to get HTTPRoute: ${G}`,"json")??void 0}async function be6(Y,X,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"}]}},$=new URLSearchParams({fieldManager:fm5,force:"true"}),Z=`/api/v1/namespaces/${encodeURIComponent(X)}/services/${encodeURIComponent(G)}?${$}`;try{let W=await nu(Y,{method:"PATCH",path:Z,patchType:"apply",body:J});await CM0(W,"ensureServicePort")}catch(W){throw new g7(`Failed to apply Service ports: ${G}`,W)}}function wu1(Y,X,G,Q=180){let J=`/apis/${FG.SANDBOX_API_GROUP}/${FG.SANDBOX_API_VERSION}/namespaces/${encodeURIComponent(X)}/${FG.SANDBOX_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`,{resolve:$,reject:Z,promise:W}=Promise.withResolvers(),K=new AbortController,H=!1,U=setTimeout(()=>{if(H)return;H=!0,K.abort(),Z(new Pt(`Sandbox did not become ready within ${Q} seconds`))},Q*1000),N=(B)=>{if(H)return;H=!0,clearTimeout(U),K.abort(),B()};return(async()=>{let B;try{B=await nu(Y,{method:"GET",path:J,signal:K.signal,headers:{accept:"application/json"}})}catch(O){N(()=>Z(new g7("Failed to start watch for sandbox readiness",O)));return}if(!B.ok||!B.body){let O=await kM0(B).catch(()=>null);N(()=>Z(new g7(`Watch handshake failed (${B.status}): ${O?.message??B.statusText}`)));return}try{for await(let O of fM0(B.body)){if(H)return;if(O.type==="ERROR"){let I=O.object;N(()=>Z(new g7(`Watch stream error while waiting for sandbox: ${I.message??"unknown"}`)));return}if(O.type!=="ADDED"&&O.type!=="MODIFIED")continue;let z=O.object;if(!z.status?.conditions?.find((I)=>I.type==="Ready"&&I.status==="True"))continue;let E=z.metadata?.name;if(!E){N(()=>Z(new g7("Sandbox metadata or name is missing")));return}let P=z.metadata?.annotations?.[FG.POD_NAME_ANNOTATION]??E;N(()=>$({sandboxName:E,podName:P}));return}N(()=>Z(new g7("Watch stream closed before sandbox became ready")))}catch(O){if(H)return;if(O instanceof Error&&(O.name==="AbortError"||K.signal.aborted))return;N(()=>Z(new g7("Watch stream error while waiting for sandbox",O)))}})(),W}async function*fM0(Y){let X=Y.getReader(),G=new TextDecoder,Q="";try{while(!0){let{value:$,done:Z}=await X.read();if(Z)break;Q+=G.decode($,{stream:!0});let W;while((W=Q.indexOf(`
|
|
4602
|
-
`))>=0){let K=Q.slice(0,W).trim();if(Q=Q.slice(W+1),!K)continue;yield JSON.parse(K)}}let J=Q.trim();if(J)yield JSON.parse(J)}finally{X.releaseLock()}}var SM0,Re6,ke6="gateway.networking.k8s.io",Ce6="v1",_M0="httproutes",ve6,fQ1,fm5="mesh-sandbox-runner";var Lu1=D(()=>{CQ1();SM0=class SM0 extends Error{status;body;constructor(Y,X,G){super(G);this.status=Y;this.body=X;this.name="KubeHttpError"}};Re6=`/apis/${FG.CLAIM_API_GROUP}/${FG.CLAIM_API_VERSION}/namespaces`;ve6=`/apis/${ke6}/${Ce6}/namespaces`;fQ1={API_GROUP:ke6,API_VERSION:Ce6,PLURAL:_M0}});async function*he6(Y){let X=Y.now??(()=>Date.now()),G=X(),Q=Y.schedulingTimeoutMs??xm5,J={pod:{},sandbox:{},events:{hasPulling:!1,hasPulled:!1},startedAt:G},$=[],Z=null,W=!1,K=(E)=>{if(W)return;if(Z){let P=Z;Z=null,P(E)}else $.push(E)},H=()=>{if($.length>0)return Promise.resolve($.shift());if(W)return Promise.resolve(null);return new Promise((E)=>{Z=E})},U=()=>{if(W)return;if(W=!0,Z){let E=Z;Z=null,E(null)}},N=new AbortController,B=()=>{N.abort(),U()};if(Y.signal)if(Y.signal.aborted)N.abort(),U();else Y.signal.addEventListener("abort",B,{once:!0});let O=Math.max(0,Q-(X()-G)),z=setTimeout(()=>K("tick"),O+100),w=Promise.allSettled([hm5(Y.kc,Y.namespace,Y.claimName,N.signal,J,K,X),um5(Y.kc,Y.namespace,Y.claimName,N.signal,J,K),lm5(Y.kc,Y.namespace,Y.claimName,N.signal,J,K,X)]);try{let E=null,P=-1,I=ye6(J,Q,X);if(E=yM0(I),!bM0(I))P=xe6(I);if(yield I,bM0(I))return;while(!W){if(await H()===null)break;let M=ye6(J,Q,X);if(bM0(M)){let C=yM0(M);if(C!==E)E=C,yield M;return}let T=xe6(M);if(T<P)continue;let S=yM0(M);if(S!==E)E=S,P=T,yield M}}finally{if(clearTimeout(z),N.abort(),Y.signal)Y.signal.removeEventListener("abort",B);U(),await w.catch(()=>{})}}function ye6(Y,X,G){let{pod:Q,sandbox:J,events:$,startedAt:Z}=Y;if(J.ready)return{kind:"ready"};let W=Q.containerWaitingReason;if(W==="ImagePullBackOff"||W==="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(W==="CrashLoopBackOff")return{kind:"failed",reason:"crash-loop-backoff",message:"Sandbox crashed during startup and is now in CrashLoopBackOff. Check pod logs."};if(!Q.scheduled&&$.lastFailedSchedulingAt!==void 0&&G()-Z>X)return{kind:"failed",reason:"scheduling-timeout",message:$.failedSchedulingMessage??`Pod could not be scheduled within ${Math.round(X/1000)}s.`};if(Q.containerRunning&&!Q.containerReady)return{kind:"warming-daemon",since:Z};if(W==="ContainerCreating"&&$.hasPulled)return{kind:"starting-container",since:Z};if($.hasPulling&&!$.hasPulled)return{kind:"pulling-image",since:Z};if(Q.scheduledFalseReason==="Unschedulable"||$.lastFailedSchedulingAt!==void 0&&!Q.scheduled)return{kind:"waiting-for-capacity",since:Z,message:$.failedSchedulingMessage??Q.scheduledFalseMessage,nodeClaim:$.nominatedNodeClaim};return{kind:"claiming",since:Z}}function bM0(Y){return Y.kind==="ready"||Y.kind==="failed"}function xe6(Y){switch(Y.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 yM0(Y){switch(Y.kind){case"claiming":case"pulling-image":case"starting-container":case"warming-daemon":return Y.kind;case"waiting-for-capacity":return`waiting-for-capacity:${Y.message??""}:${Y.nodeClaim??""}`;case"ready":return"ready";case"failed":return`failed:${Y.reason}:${Y.message}`}}async function hm5(Y,X,G,Q,J,$,Z){let W=`/api/v1/namespaces/${encodeURIComponent(X)}/pods?watch=true&labelSelector=${encodeURIComponent(`${bm5}=${G}`)}`;return xM0({kc:Y,path:W,signal:Q,label:`pod/${G}`,onEvent:(K)=>{if(K.type!=="ADDED"&&K.type!=="MODIFIED")return;let H=K.object;if(H.metadata?.name!==G)return;gm5(H,J,Z),$("pod")}})}function gm5(Y,X,G){let J=(Y.status?.conditions??[]).find((Z)=>Z.type==="PodScheduled");if(J?.status==="True")X.pod.scheduled=!0,X.pod.scheduledFalseReason=void 0,X.pod.scheduledFalseMessage=void 0;else if(J?.status==="False")X.pod.scheduled=!1,X.pod.scheduledFalseReason=J.reason,X.pod.scheduledFalseMessage=J.message;let $=(Y.status?.containerStatuses??[]).find((Z)=>Z.name===ym5);if($)X.pod.containerWaitingReason=$.state?.waiting?.reason,X.pod.containerRunning=!!$.state?.running,X.pod.containerReady=$.ready===!0}async function um5(Y,X,G,Q,J,$){let Z=`/apis/${FG.SANDBOX_API_GROUP}/${FG.SANDBOX_API_VERSION}/namespaces/${encodeURIComponent(X)}/${FG.SANDBOX_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`;return xM0({kc:Y,path:Z,signal:Q,label:`sandbox/${G}`,onEvent:(W)=>{if(W.type!=="ADDED"&&W.type!=="MODIFIED")return;let H=W.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;$("sandbox")}})}async function lm5(Y,X,G,Q,J,$,Z){let W=`/api/v1/namespaces/${encodeURIComponent(X)}/events?watch=true&fieldSelector=${encodeURIComponent(`involvedObject.name=${G},involvedObject.kind=Pod`)}`;return xM0({kc:Y,path:W,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 N=H.message?.match(/nodeclaim\/([\w-]+)/);if(N)J.events.nominatedNodeClaim=N[1];break}default:return}$("event")}})}async function xM0(Y){let{kc:X,path:G,signal:Q,label:J,onEvent:$}=Y,Z=0;while(!Q.aborted){try{let K=await nu(X,{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 fM0(K.body)){if(Q.aborted)return;try{$(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 W=Math.min(250*2**Z,5000);Z+=1,await mm5(W,Q)}}function mm5(Y,X){return new Promise((G)=>{if(X.aborted){G();return}let Q=setTimeout(()=>{X.removeEventListener("abort",J),G()},Y),J=()=>{clearTimeout(Q),G()};X.addEventListener("abort",J,{once:!0})})}var bm5="studio.decocms.com/sandbox-handle",ym5="sandbox",xm5=300000;var ge6=D(()=>{CQ1();Lu1()});import{createHash as dm5,randomBytes as cm5,randomUUID as im5}from"crypto";import*as de6 from"net";import{PassThrough as pm5}from"stream";function yQ1(Y,X){return`${bQ1}${OM(Y,X,{hashLen:em5})}`}class cM0{kind=tB;records=new Map;inflight=new lq;stateStore;previewUrlPattern;kubeConfig;portForward;namespace;sandboxTemplateName;tokenGenerator;idleTtlMs;metrics;previewGateway;constructor(Y={}){this.stateStore=Y.stateStore??null,this.previewUrlPattern=Y.previewUrlPattern??null,this.kubeConfig=Y.kubeConfig??Qd5(),this.portForward=new UM0(this.kubeConfig),this.namespace=Y.namespace??nm5,this.sandboxTemplateName=Y.sandboxTemplateName??am5,this.tokenGenerator=Y.tokenGenerator??(()=>cm5(tm5).toString("hex")),this.idleTtlMs=Y.idleTtlMs??sm5,this.metrics=Y.meter?Gd5(Y.meter):null,this.previewGateway=Y.previewGateway&&Y.previewUrlPattern?{...Y.previewGateway}:null}async ensure(Y,X={}){let G=this.computeHandle(Y,X.repo?.branch??null);return this.inflight.run(G,()=>BM(this.stateStore,Y,tB,(Q)=>this.ensureLocked(Y,G,X,Q)))}async exec(Y,X){let G=await this.requireRecord(Y);return vV1(G.daemonUrl,G.token,X)}async delete(Y){let X=await this.getRecord(Y);if(this.records.delete(Y),X)this.closeForwarder(X.daemonForward),this.metrics?.active.add(-1,mM0(X.tenant));if(await this.deleteHttpRouteIfManaged(Y).catch((G)=>{console.warn(`[${PW}] HTTPRoute delete failed for ${Y}: ${G instanceof Error?G.message:String(G)}`)}),await au(this.kubeConfig,this.namespace,Y),this.stateStore)if(X)await this.stateStore.delete(X.id,tB);else await this.stateStore.deleteByHandle(tB,Y)}async alive(Y){let X=await ru(this.kubeConfig,this.namespace,Y).catch(()=>{return});return X?gM0(X):!1}watchClaimLifecycle(Y,X){return he6({kc:this.kubeConfig,namespace:this.namespace,claimName:Y,signal:X})}async getPreviewUrl(Y){let X=await this.getRecord(Y);if(!X)return null;return this.composePreviewUrl(X)}async proxyDaemonRequest(Y,X,G){let Q=await this.getRecord(Y);if(!Q)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});let J=performance.now(),$=0;try{let Z=await _V1(Q.daemonUrl,Q.token,X,G);return $=Z.status,Z}finally{this.recordProxyDuration("daemon",$,Q,performance.now()-J)}}async resolvePreviewUpstreamUrl(Y){if(this.previewUrlPattern)return`http://${Y}.${this.namespace}.svc.cluster.local:${tu}`;let X=await this.getRecord(Y);if(X)return X.daemonUrl;let G=await this.resurrectByHandle(Y);return G?G.daemonUrl:null}async proxyPreviewRequest(Y,X){let G=performance.now(),Q=this.records.get(Y)??null,J=0;try{let $=await this.resolvePreviewUpstreamUrl(Y);if(!$)return J=404,uM0(404,{error:"sandbox not found"});let Z=new URL(X.url);if((Z.pathname==="/_decopilot_vm"||Z.pathname.startsWith("/_decopilot_vm/"))&&X.method!=="GET")return J=404,uM0(404,{error:"not found"});let K=(z)=>`${z}${Z.pathname}${Z.search}`,H=new Headers(X.headers);for(let z of Yd5)H.delete(z);let U=X.method!=="GET"&&X.method!=="HEAD",N={method:X.method,headers:H,body:U?X.body:void 0,redirect:"manual",signal:X.signal,duplex:U?"half":void 0},B;try{B=await fetch(K($),N)}catch(z){let w=`${$}${Z.pathname}`;if(console.warn(`[${PW}] preview fetch to ${w} failed: ${z instanceof Error?z.message:String(z)}`),X.method==="GET"||X.method==="HEAD"){if(this.invalidateRecord(Y),await this.resurrectByHandle(Y).catch(()=>null)){let P=await this.resolvePreviewUpstreamUrl(Y);if(P)try{B=await fetch(K(P),N);let I=new Headers;for(let[V,M]of B.headers.entries())if(!ue6.includes(V.toLowerCase()))I.set(V,M);return J=B.status,new Response(B.body,{status:B.status,statusText:B.statusText,headers:I})}catch(I){console.warn(`[${PW}] preview fetch retry to ${w} failed: ${I instanceof Error?I.message:String(I)}`)}}}else this.invalidateRecord(Y);return J=502,uM0(502,{error:"sandbox daemon unreachable"})}let O=new Headers;for(let[z,w]of B.headers.entries())if(!ue6.includes(z.toLowerCase()))O.set(z,w);return J=B.status,new Response(B.body,{status:B.status,statusText:B.statusText,headers:O})}finally{this.recordProxyDuration("preview",J,Q,performance.now()-G,Y)}}async ensureLocked(Y,X,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(Y,tB);if(Z){let W=await this.rehydrate(Y,X,Z);if(W)return this.finish(W,Q,!1,!0,"resume");await Q.delete(Y,tB)}}let J=await ru(this.kubeConfig,this.namespace,X).catch(()=>{return});if(J)if(J.metadata?.deletionTimestamp)await Ou1(this.kubeConfig,this.namespace,X).catch((Z)=>{console.warn(`[${PW}] wait for terminating claim ${X} failed: ${Z instanceof Error?Z.message:String(Z)}`)});else{let Z=await this.adopt(Y,X,J).catch((W)=>{return console.warn(`[${PW}] adopt ${X} failed, recreating: ${W instanceof Error?W.message:String(W)}`),null});if(Z)return this.finish(Z,Q,!0,!0,"adopt");await au(this.kubeConfig,this.namespace,X).catch(()=>{}),await Ou1(this.kubeConfig,this.namespace,X).catch((W)=>{console.warn(`[${PW}] wait for deleted claim ${X} failed: ${W instanceof Error?W.message:String(W)}`)})}let $=await this.provision(Y,X,G);return this.finish($,Q,!0,!1,"fresh")}async finish(Y,X,G,Q,J){let $=this.records.has(Y.handle);if(this.records.set(Y.handle,Y),G)await this.persist(X,Y);if(Q)await Se6(this.kubeConfig,this.namespace,Y.handle,this.computeShutdownTime()).catch((Z)=>console.warn(`[${PW}] TTL refresh failed for ${Y.handle}: ${Z instanceof Error?Z.message:String(Z)}`));if(this.metrics){let Z=mM0(Y.tenant);if(this.metrics.ensureOutcome.add(1,{...Z,outcome:J}),!$)this.metrics.active.add(1,Z)}return this.toSandbox(Y)}buildEnvMap(Y,X){let G={},Q=[];for(let[Z,W]of Object.entries(Y.env??{}))if(om5.has(Z))Q.push(Z);else G[Z]=W;if(Q.length>0)console.warn(`[${PW}] opts.env keys overlap reserved bootstrap names and were dropped: ${Q.join(",")}`);let J=Y.repo,$=J?J.displayName??Ud5(J.cloneUrl):null;return{...G,DAEMON_TOKEN:X.token,DAEMON_BOOT_ID:X.daemonBootId,APP_ROOT:X.workdir,PROXY_PORT:String(tu),DEV_PORT:String(Y.workload?.devPort??rm5),RUNTIME:Y.workload?.runtime??"node",...J?{CLONE_URL:J.cloneUrl,REPO_NAME:$??"",BRANCH:J.branch??"",GIT_USER_NAME:J.userName,GIT_USER_EMAIL:J.userEmail}:{},...Y.workload?.packageManager?{PACKAGE_MANAGER:Y.workload.packageManager}:{}}}buildClaim(Y,X,G){let Q=this.buildEnvMap(X,G);return{apiVersion:`${FG.CLAIM_API_GROUP}/${FG.CLAIM_API_VERSION}`,kind:"SandboxClaim",metadata:{name:Y,namespace:this.namespace,labels:{"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...lM0(X.tenant)}},spec:{sandboxTemplateRef:{name:this.sandboxTemplateName},additionalPodMetadata:{labels:lM0(X.tenant,{[XA.role]:"claimed",[XA.sandboxHandle]:Y})},env:Object.entries(Q).sort(([J],[$])=>J<$?-1:J>$?1:0).map(([J,$])=>({name:J,value:$})),warmpool:"none",lifecycle:{shutdownPolicy:"Delete",shutdownTime:this.computeShutdownTime()}}}}async provision(Y,X,G){let Q=this.tokenGenerator(),J=im5(),$=hM0,Z=this.buildClaim(X,G,{token:Q,daemonBootId:J,workdir:$});try{await _Q1(this.kubeConfig,this.namespace,Z)}catch(U){if(U instanceof kQ1)await Ou1(this.kubeConfig,this.namespace,X),await _Q1(this.kubeConfig,this.namespace,Z);else throw U}let{podName:W}=await wu1(this.kubeConfig,this.namespace,X);try{await this.ensureServicePortForHandle(X),await this.ensureHttpRouteForHandle(X,G.tenant??null)}catch(U){throw await au(this.kubeConfig,this.namespace,X).catch(()=>{}),U}let K=await this.openForwarder(W,tu,X),H=`http://127.0.0.1:${K.localPort}`;try{await CV1(H)}catch(U){throw this.closeForwarder(K),await this.deleteHttpRouteIfManaged(X).catch(()=>{}),await au(this.kubeConfig,this.namespace,X).catch(()=>{}),U}return{id:Y,handle:X,podName:W,token:Q,workdir:$,daemonUrl:H,daemonForward:K,workload:G.workload??null,daemonBootId:J,tenant:G.tenant??null,ensureOpts:Hd5(G)}}async ensureServicePortForHandle(Y){if(!this.previewGateway||!this.previewUrlPattern)return;await be6(this.kubeConfig,this.namespace,Y,{name:"daemon",port:tu,targetPort:tu})}async ensureHttpRouteForHandle(Y,X){if(!this.previewGateway||!this.previewUrlPattern)return;let G=Fd5(this.previewUrlPattern,Y);if(!G)throw new g7(`Unable to derive preview hostname for ${Y} from pattern: ${this.previewUrlPattern}`);let Q={apiVersion:`${fQ1.API_GROUP}/${fQ1.API_VERSION}`,kind:"HTTPRoute",metadata:{name:Y,namespace:this.namespace,labels:lM0(X??void 0,{[XA.role]:"claimed",[XA.sandboxHandle]:Y,"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio"})},spec:{parentRefs:[{kind:"Gateway",group:"gateway.networking.k8s.io",name:this.previewGateway.name,namespace:this.previewGateway.namespace}],hostnames:[G],rules:[{backendRefs:[{group:"",kind:"Service",name:Y,port:tu}]}]}};await zu1(this.kubeConfig,this.namespace,Q)}async deleteHttpRouteIfManaged(Y){if(!this.previewGateway)return;await Du1(this.kubeConfig,this.namespace,Y)}async rehydrate(Y,X,G){let Q=G.state;if(!Q.podName||!Q.token)return null;let J=await ru(this.kubeConfig,this.namespace,X).catch(()=>{return});if(!J||!gM0(J))return null;let $=le6(J)??Q.podName,Z=await this.openAndProbeDaemon($,X);if(!Z)return null;if(Q.daemonBootId&&Q.daemonBootId!==Z.bootId)console.warn(`[${PW}] daemon restart detected (handle=${X}): stored bootId=${Q.daemonBootId} live bootId=${Z.bootId}`);return{id:Y,handle:X,podName:$,token:Q.token,workdir:Q.workdir??hM0,daemonUrl:Z.daemonUrl,daemonForward:Z.daemonForward,workload:Q.workload??null,daemonBootId:Z.bootId,tenant:Q.tenant??null,ensureOpts:Q.ensureOpts??null}}async adopt(Y,X,G){if(!gM0(G))return null;let Q=le6(G);if(!Q)return null;let J=Jd5(G);if(!J)return null;let $=await this.openAndProbeDaemon(Q,X);if(!$)return null;let Z=Kd5(G);if(this.previewGateway)await this.ensureServicePortForHandle(X).catch((W)=>{console.warn(`[${PW}] Service port backfill failed for ${X}: ${W instanceof Error?W.message:String(W)}`)}),await this.ensureHttpRouteForHandle(X,Z).catch((W)=>{console.warn(`[${PW}] HTTPRoute backfill failed for ${X}: ${W instanceof Error?W.message:String(W)}`)});return{id:Y,handle:X,podName:Q,token:J,workdir:hM0,daemonUrl:$.daemonUrl,daemonForward:$.daemonForward,workload:null,daemonBootId:$.bootId,tenant:Z,ensureOpts:null}}async openAndProbeDaemon(Y,X){let G=await this.openForwarder(Y,tu,X).catch(()=>null);if(!G)return null;let Q=`http://127.0.0.1:${G.localPort}`,J=await nr(Q);if(!J)return this.closeForwarder(G),null;return{daemonForward:G,daemonUrl:Q,bootId:J.bootId}}async getRecord(Y){let X=this.records.get(Y);if(X)return X;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(tB,Y);if(!G)return null;let Q=await this.rehydrate(G.id,Y,G);if(Q)this.records.set(Y,Q);return Q}async resurrectByHandle(Y){if(!this.stateStore)return null;let X=await this.stateStore.getByHandle(tB,Y);if(!X)return null;let G=X.state.ensureOpts;if(!G)return null;return await this.ensure(X.id,G),this.records.get(Y)??null}async requireRecord(Y){let X=await this.getRecord(Y);if(X)return X;let G=await this.resurrectByHandle(Y);if(G)return G;throw Error(`unknown sandbox handle ${Y}`)}invalidateRecord(Y){let X=this.records.get(Y);if(!X)return;this.records.delete(Y),this.closeForwarder(X.daemonForward)}recordProxyDuration(Y,X,G,Q,J){if(!this.metrics)return;this.metrics.proxyDurationMs.record(Q,{...mM0(G?.tenant??null),source:Y,sandbox_handle:G?.handle??J??"",status_code:X||0})}computeHandle(Y,X){return yQ1(Y,X)}composePreviewUrl(Y){if(this.previewUrlPattern)return zM(this.previewUrlPattern,Y.handle);return`http://127.0.0.1:${Y.daemonForward.localPort}/`}toSandbox(Y){return{handle:Y.handle,workdir:Y.workdir,previewUrl:this.composePreviewUrl(Y)}}async persist(Y,X){if(!Y)return;let G={podName:X.podName,token:X.token,workdir:X.workdir,workload:X.workload,daemonBootId:X.daemonBootId,tenant:X.tenant,...X.ensureOpts?{ensureOpts:X.ensureOpts}:{}};await Y.put(X.id,tB,{handle:X.handle,state:G})}computeShutdownTime(){return new Date(Date.now()+this.idleTtlMs).toISOString()}openForwarder(Y,X,G=Y){let Q=Zd5(G,X);return new Promise((J,$)=>{let Z=(W,K)=>{let H=de6.createServer((U)=>this.handleForwardedConnection(U,Y,X));H.once("error",(U)=>{if(U.code==="EADDRINUSE"&&K<Xd5){try{H.close()}catch{}let N=dM0+(W-dM0+1)%ce6;Z(N,K+1);return}$(U)}),H.listen(W,"127.0.0.1",()=>{let U=H.address();if(!U||typeof U==="string"){H.close(),$(Error("port-forward listener failed to bind"));return}J({server:H,localPort:U.port})})};Z(Q,0)})}handleForwardedConnection(Y,X,G){let Q=new pm5,J=null,$=!1,Z=()=>{if($)return;if($=!0,Q.destroy(),J)try{J.close()}catch{}if(!Y.destroyed)Y.destroy()};Y.pipe(Q),Y.on("error",Z),Y.on("close",Z),this.portForward.portForward(this.namespace,X,[G],Y,null,Q).then((W)=>{let K=typeof W==="function"?W():W;if(!K){Z();return}if(J=K,J.on("close",Z),J.on("error",Z),$)try{J.close()}catch{}}).catch((W)=>{console.warn(`[${PW}] port-forward to ${X}:${G} failed: ${W instanceof Error?W.message:String(W)}`),Z()})}closeForwarder(Y){Y.server.close((X)=>{if(X)console.warn(`[${PW}] port-forward close on :${Y.localPort} errored: ${X instanceof Error?X.message:String(X)}`)})}}function Gd5(Y){return{active:Y.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:Y.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:Y.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 Qd5(){let Y=new zt;return Y.loadFromDefault(),Y}function gM0(Y){return Boolean(Y.status?.conditions?.some((X)=>X.type==="Ready"&&X.status==="True"))}function Jd5(Y){let X=Y.spec?.env;if(!X)return null;for(let G of X)if(G.name==="DAEMON_TOKEN"&&G.value)return G.value;return null}function le6(Y){return Y.metadata?.annotations?.[FG.POD_NAME_ANNOTATION]??Y.metadata?.name??null}function Zd5(Y,X){let G=dm5("sha256").update(`${Y}:${X}`).digest();return dM0+G.readUInt32BE(0)%ce6}function uM0(Y,X){return new Response(JSON.stringify(X),{status:Y,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function me6(Y){let X=Y.slice(0,Wd5);return $d5.test(X)?X:""}function lM0(Y,X={}){let G={...X};if(Y){let Q=me6(Y.orgId),J=me6(Y.userId);if(Q)G[XA.orgId]=Q;if(J)G[XA.userId]=J}return G}function Kd5(Y){let X=Y.metadata?.labels;if(!X)return null;let G=X[XA.orgId],Q=X[XA.userId];if(!G||!Q)return null;return{orgId:G,userId:Q}}function mM0(Y){return{org_id:Y?.orgId??"",user_id:Y?.userId??"",runner_kind:tB}}function Hd5(Y){let X={};if(Y.repo)X.repo=Y.repo;if(Y.workload)X.workload=Y.workload;if(Y.env&&Object.keys(Y.env).length>0)X.env=Y.env;if(Y.tenant)X.tenant=Y.tenant;return Object.keys(X).length>0?X:null}function Fd5(Y,X){try{return new URL(zM(Y,X)).hostname||null}catch{return null}}function Ud5(Y){try{let X=new URL(Y);return X.pathname.replace(/^\/+/,"").replace(/\.git$/,"")||X.hostname}catch{return Y}}var tB="agent-sandbox",PW="AgentSandboxRunner",nm5="agent-sandbox-system",am5="studio-sandbox",tu=9000,rm5=3000,hM0="/app",tm5=32,om5,sm5=900000,bQ1="studio-sb-",em5=16,Yd5,ue6,dM0=40000,ce6=1e4,Xd5=256,XA,$d5,Wd5=63;var ie6=D(()=>{MM0();cT0();xV1();Lu1();CQ1();ge6();om5=new Set(["DAEMON_TOKEN","DAEMON_BOOT_ID","APP_ROOT","PROXY_PORT","DEV_PORT","RUNTIME","CLONE_URL","REPO_NAME","BRANCH","GIT_USER_NAME","GIT_USER_EMAIL","PACKAGE_MANAGER"]);Yd5=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length","upgrade"],ue6=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];XA={role:"studio.decocms.com/role",sandboxHandle:"studio.decocms.com/sandbox-handle",orgId:"studio.decocms.com/org-id",userId:"studio.decocms.com/user-id"},$d5=/^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$/});var pe6={};l6(pe6,{waitForSandboxReady:()=>wu1,getSandboxClaim:()=>ru,getHttpRoute:()=>fe6,deleteSandboxClaim:()=>au,deleteHttpRoute:()=>Du1,createSandboxClaim:()=>_Q1,createHttpRoute:()=>zu1,composeClaimName:()=>yQ1,SandboxTimeoutError:()=>Pt,SandboxError:()=>g7,KubeConfig:()=>zt,K8S_CONSTANTS:()=>FG,HTTPROUTE_CONSTANTS:()=>fQ1,HANDLE_PREFIX:()=>bQ1,AgentSandboxRunner:()=>cM0});var Eu1=D(()=>{MM0();CQ1();Lu1();ie6()});var sM0={};l6(sM0,{subscribeLifecycle:()=>oM0,getSharedRunnerIfInit:()=>aM0,getSharedRunner:()=>xQ1,getRunnerByKind:()=>qt,getOrInitSharedRunner:()=>nM0,asLifecycleWatchable:()=>tM0,asDockerRunner:()=>rM0,__resetSharedLifecyclesForTesting:()=>wd5});function ae6(Y,X){let G=pM0[Y];if(G)return Promise.resolve(G);let Q=iM0[Y];if(Q)return Q;let J=X().then(($)=>{return pM0[Y]=$,$}).finally(()=>{delete iM0[Y]});return iM0[Y]=J,J}function Nd5(){let Y=process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN;return Y&&Y.trim()!==""?Y:void 0}function Bd5(){let Y=process.env.STUDIO_SANDBOX_TEMPLATE_NAME;return Y&&Y.trim()!==""?Y:void 0}function Od5(){let Y=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME?.trim(),X=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE?.trim();if(!Y&&!X)return;if(!Y||!X)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:Y,namespace:X}}async function re6(Y,X){let G=new XV0(X),Q=Nd5();switch(Y){case"docker":return new DU({stateStore:G,previewUrlPattern:Q});case"freestyle":{let{FreestyleSandboxRunner:J}=await Promise.resolve().then(() => (Qn6(),Gn6));return new J({stateStore:G})}case"agent-sandbox":{let{AgentSandboxRunner:J}=await Promise.resolve().then(() => (Eu1(),pe6));return new J({stateStore:G,previewUrlPattern:Q,sandboxTemplateName:Bd5(),previewGateway:Od5(),meter:gH})}default:throw Error(`Unknown runner kind: ${String(Y)}`)}}function xQ1(Y){return qt(Y,or())}function qt(Y,X){return ae6(X,()=>re6(X,Y.db))}async function nM0(){let Y=DM();if(!Y)return null;return ae6(Y,()=>re6(Y,uX().db))}function aM0(){let Y=DM();if(!Y)return null;return pM0[Y]??null}function rM0(Y){return Y instanceof DU?Y:null}function tM0(Y){if(!Y)return null;if(Y.kind!=="agent-sandbox")return null;if(typeof Y.watchClaimLifecycle!=="function")return null;return Y}function oM0(Y,X,G){let Q=GA.get(X);if(Q){if(Q.terminated){if(Q.lastPhase)try{G(Q.lastPhase)}catch{}return{unsubscribe:zd5}}if(Q.listeners.add(G),Q.lastPhase)try{G(Q.lastPhase)}catch{}return ne6(X,Q,G)}let J=new AbortController,$={lastPhase:null,terminated:!1,listeners:new Set([G]),abort:J};return GA.set(X,$),Dd5(Y,X,$),ne6(X,$,G)}function zd5(){}function ne6(Y,X,G){return{unsubscribe(){if(GA.get(Y)!==X)return;if(X.listeners.delete(G),X.listeners.size===0)GA.delete(Y),X.abort.abort()}}}async function Dd5(Y,X,G){let Q=null;try{for await(let J of Y.watchClaimLifecycle(X,G.abort.signal)){if(G.abort.signal.aborted)break;let $=J;G.lastPhase=$;let Z=$.kind==="ready"||$.kind==="failed";if(Z)G.terminated=!0;let W=Array.from(G.listeners);for(let K of W)try{K($)}catch{}if(Z)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 $ of Array.from(G.listeners))try{$(J)}catch{}}if(GA.get(X)===G)GA.delete(X)}}function wd5(){for(let Y of GA.values())Y.abort.abort();GA.clear()}var pM0,iM0,GA;var QA=D(()=>{wM();dE();AW();wf6();pM0={},iM0={};GA=new Map});async function te6(Y,X){U0(X);let G=s1(X),Q=B6(X);if(!Q)throw Error("User ID required");let J=await X.storage.virtualMcps.findById(Y.virtualMcpId);if(!J||J.organization_id!==G.id)throw Error("Virtual MCP not found");let $=J.metadata??{},Z=uV1(sr($),Q,Y.branch),W=or();if(Z&&(Z.runnerKind??"freestyle")===W)return Z;await oe6(X,Z,W);let K=$.githubRepo??null,{entry:H}=await se6({ctx:X,userId:Q,orgId:G.id,virtualMcpId:Y.virtualMcpId,branch:Y.branch,metadata:$,githubRepo:K,existing:Z});return H}async function oe6(Y,X,G){if(!X)return;let Q=X.runnerKind??"freestyle";if(Q===G)return;if(Q==="freestyle")return;try{await(await qt(Y,Q)).delete(X.vmId)}catch(J){console.error(`[VM_START] stale ${Q} ${X.vmId}: ${J instanceof Error?J.message:String(J)}`)}}async function se6(Y){let{ctx:X,userId:G,orgId:Q,virtualMcpId:J,branch:$,metadata:Z,githubRepo:W,existing:K}=Y;if(W&&!W.connectionId)throw Error("GitHub connection id missing on virtual MCP metadata");let{runtime:H,packageManager:U,port:N}=Jf6(Z),B;if(W){let{cloneUrl:T,gitUserName:S,gitUserEmail:C}=await Zf6(W.connectionId,W.owner,W.name,X.db,X.vault);if(!U){let _=await Hf6(W.connectionId,W.owner,W.name,X.db,X.vault);if(_)U=_.packageManager,H=JQ1[_.packageManager].runtime,N=_.devPort??N,await Ld5(X,J,G,_.packageManager,_.devPort)}B={cloneUrl:T,userName:S,userEmail:C,branch:$,displayName:`${W.owner}/${W.name}`}}let O=H&&U?{runtime:H,packageManager:U,devPort:Number(N)}:void 0,z=tr({orgId:Q,virtualMcpId:J,branch:$}),w=await xQ1(X),E=await w.ensure({userId:G,projectRef:z},{repo:B,workload:O,tenant:{orgId:Q,userId:G}}),I=!!K&&K.vmId===E.handle&&K?.createdAt?K.createdAt:Date.now(),V={vmId:E.handle,previewUrl:E.previewUrl,runnerKind:w.kind,createdAt:I};await Gf6(X.storage.virtualMcps,J,G,G,$,V);let M=!K||K.vmId!==E.handle;return{entry:V,isNewVm:M}}async function Ld5(Y,X,G,Q,J){let $=await Y.storage.virtualMcps.findById(X);if(!$)return;let Z=$.metadata??{};await Y.storage.virtualMcps.update(X,G,{metadata:{...Z,runtime:{selected:Q,port:J}}})}var eM0;var YR0=D(()=>{H0();wM();b0();YV0();$f6();Ff6();nA0();eT0();QA();eM0=l1({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(["docker","freestyle","agent-sandbox"])}),handler:async(Y,X)=>{let G=Y.branch??gT1(),{metadata:Q,userId:J,organization:$,entry:Z}=await lV1({virtualMcpId:Y.virtualMcpId,branch:G},X),W=Q.githubRepo;if(!W)throw Error("No GitHub repo connected");let K=or();await oe6(X,Z,K);let{entry:H,isNewVm:U}=await se6({ctx:X,userId:J,orgId:$.id,virtualMcpId:Y.virtualMcpId,branch:G,metadata:Q,githubRepo:W,existing:Z});return{...H,branch:G,isNewVm:U,runnerKind:K}}})});var XR0;var ee6=D(()=>{H0();b0();YV0();QA();XR0=l1({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(Y,X)=>{let G;try{G=await lV1(Y,X)}catch(W){if(W instanceof Error&&W.message==="Virtual MCP not found")return{success:!0};throw W}let{entry:Q,userId:J}=G;if(!Q)return{success:!0};await Qf6(X.storage.virtualMcps,Y.virtualMcpId,J,J,Y.branch);let $=Q.runnerKind??"freestyle";return await(await qt(X,$)).delete(Q.vmId).catch((W)=>console.error(`[VM_DELETE] ${$} ${Q.vmId}: ${W instanceof Error?W.message:String(W)}`)),{success:!0}}})});var Y18=D(()=>{YR0();ee6()});var Pd5="https://api.github.com",GR0;var X18=D(()=>{H0();b0();lE1();n2();GR0=l1({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(Y,X)=>{await X.access.check();let G=new X$(X.db,X.vault),Q=await G.get(Y.connectionId);if(!Q)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let J=Q.accessToken;if(q51(Q)&&G.isExpired(Q,uE1)){let U=await A51(Q,G);if(!U)throw Error(NV);J=U,Q=await G.get(Y.connectionId)??Q}let $=[],Z,W=1,K=100,H=async(U)=>fetch(`${Pd5}/user/installations?per_page=${K}&page=${W}`,{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 B=await G.get(Y.connectionId);if(!B||!q51(B))throw Error(NV);let O=await A51(B,G);if(!O)throw Error(NV);if(J=O,U=await H(J),U.status===401)throw Error(NV)}if(!U.ok)throw Error(`GitHub /user/installations failed: ${U.status}`);let N=await U.json();for(let B of N.installations){if(!Z)Z=B.app_slug??B.app?.slug;$.push({installationId:B.id,login:B.account.login,avatarUrl:B.account.avatar_url,type:B.account.type})}if(N.installations.length<K)break;W++}return{installations:$,...Z?{appSlug:Z}:{}}}})});var G18=D(()=>{X18()});var yT1={};l6(yT1,{managementMCP:()=>Rr,listManagementTools:()=>jd5,ALL_TOOLS:()=>Q18});async function jd5(Y){let X=await Rr(Y),[G,Q]=y91.createLinkedPair();await X.connect(Q);let J=new A7({name:"tools-hydration",version:"1.0.0"});try{return await J.connect(G),(await J.listTools()).tools}finally{await J.close().catch(()=>{})}}var Ad5,Id5,Q18,Rr=async(Y)=>{let X=null;if(Y.organization){let Z=await Y.storage.organizationSettings.get(Y.organization.id),W=await Y.storage.virtualMcps.list(Y.organization.id),K=new Set(Z?.enabled_plugins??[]);for(let H of W){let U=H.metadata?.enabled_plugins;if(U&&Array.isArray(U))for(let N of U)K.add(N)}X=K.size>0?[...K]:null}let G=id4(Q18,X),Q=new pO({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}}});for(let Z of G){let W=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=W.shape,U=K?.shape;Q.registerTool(Z.name,{description:Z.description??"",inputSchema:H,outputSchema:U,annotations:Z.annotations,_meta:Z._meta},async(N)=>{Y.access.setToolName(Z.name);try{let B=await Z.execute(N,Y);return{content:[{type:"text",text:JSON.stringify(B)}],structuredContent:B}}catch(B){return{content:[{type:"text",text:`Error: ${B.message}`}],isError:!0}}})}let J=RT6();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(Y.organization?.id){let Z=await Y.storage.brandContext.list(Y.organization.id),W=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(W.has(U))U=`${U}-${K.id.slice(0,8)}`;W.add(U);let N=[`# Brand: ${K.name}`,"",`**Domain:** ${K.domain}`,"","## Overview",K.overview];if(K.colors){let O=Object.entries(K.colors).filter(([,z])=>z);if(O.length>0){N.push("","## Colors");for(let[z,w]of O)N.push(`- **${z}:** ${w}`)}}if(K.fonts){let O=Object.entries(K.fonts).filter(([,z])=>z);if(O.length>0){N.push("","## Fonts");for(let[z,w]of O)N.push(`- ${w} (${z})`)}}if(K.logo)N.push("",`**Logo:** ${K.logo}`);if(K.favicon)N.push(`**Favicon:** ${K.favicon}`);if(K.ogImage)N.push(`**OG Image:** ${K.ogImage}`);if(K.images&&K.images.length>0){N.push("","## Images");for(let O of K.images){let z=Object.entries(O).map(([w,E])=>`${w}: ${E}`).join(", ");N.push(`- ${z}`)}}let B=N.join(`
|
|
4626
|
+
`))>=0){let K=Q.slice(0,W).trim();if(Q=Q.slice(W+1),!K)continue;yield JSON.parse(K)}}let J=Q.trim();if(J)yield JSON.parse(J)}finally{X.releaseLock()}}var SM0,Re6,ke6="gateway.networking.k8s.io",Ce6="v1",_M0="httproutes",ve6,fQ1,fm5="mesh-sandbox-runner";var Lu1=D(()=>{CQ1();SM0=class SM0 extends Error{status;body;constructor(Y,X,G){super(G);this.status=Y;this.body=X;this.name="KubeHttpError"}};Re6=`/apis/${FG.CLAIM_API_GROUP}/${FG.CLAIM_API_VERSION}/namespaces`;ve6=`/apis/${ke6}/${Ce6}/namespaces`;fQ1={API_GROUP:ke6,API_VERSION:Ce6,PLURAL:_M0}});async function*he6(Y){let X=Y.now??(()=>Date.now()),G=X(),Q=Y.schedulingTimeoutMs??xm5,J={pod:{},sandbox:{},events:{hasPulling:!1,hasPulled:!1},startedAt:G},$=[],Z=null,W=!1,K=(E)=>{if(W)return;if(Z){let P=Z;Z=null,P(E)}else $.push(E)},H=()=>{if($.length>0)return Promise.resolve($.shift());if(W)return Promise.resolve(null);return new Promise((E)=>{Z=E})},U=()=>{if(W)return;if(W=!0,Z){let E=Z;Z=null,E(null)}},N=new AbortController,B=()=>{N.abort(),U()};if(Y.signal)if(Y.signal.aborted)N.abort(),U();else Y.signal.addEventListener("abort",B,{once:!0});let O=Math.max(0,Q-(X()-G)),z=setTimeout(()=>K("tick"),O+100),w=Promise.allSettled([hm5(Y.kc,Y.namespace,Y.claimName,N.signal,J,K,X),um5(Y.kc,Y.namespace,Y.claimName,N.signal,J,K),lm5(Y.kc,Y.namespace,Y.claimName,N.signal,J,K,X)]);try{let E=null,P=-1,I=ye6(J,Q,X);if(E=yM0(I),!bM0(I))P=xe6(I);if(yield I,bM0(I))return;while(!W){if(await H()===null)break;let M=ye6(J,Q,X);if(bM0(M)){let C=yM0(M);if(C!==E)E=C,yield M;return}let T=xe6(M);if(T<P)continue;let S=yM0(M);if(S!==E)E=S,P=T,yield M}}finally{if(clearTimeout(z),N.abort(),Y.signal)Y.signal.removeEventListener("abort",B);U(),await w.catch(()=>{})}}function ye6(Y,X,G){let{pod:Q,sandbox:J,events:$,startedAt:Z}=Y;if(J.ready)return{kind:"ready"};let W=Q.containerWaitingReason;if(W==="ImagePullBackOff"||W==="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(W==="CrashLoopBackOff")return{kind:"failed",reason:"crash-loop-backoff",message:"Sandbox crashed during startup and is now in CrashLoopBackOff. Check pod logs."};if(!Q.scheduled&&$.lastFailedSchedulingAt!==void 0&&G()-Z>X)return{kind:"failed",reason:"scheduling-timeout",message:$.failedSchedulingMessage??`Pod could not be scheduled within ${Math.round(X/1000)}s.`};if(Q.containerRunning&&!Q.containerReady)return{kind:"warming-daemon",since:Z};if(W==="ContainerCreating"&&$.hasPulled)return{kind:"starting-container",since:Z};if($.hasPulling&&!$.hasPulled)return{kind:"pulling-image",since:Z};if(Q.scheduledFalseReason==="Unschedulable"||$.lastFailedSchedulingAt!==void 0&&!Q.scheduled)return{kind:"waiting-for-capacity",since:Z,message:$.failedSchedulingMessage??Q.scheduledFalseMessage,nodeClaim:$.nominatedNodeClaim};return{kind:"claiming",since:Z}}function bM0(Y){return Y.kind==="ready"||Y.kind==="failed"}function xe6(Y){switch(Y.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 yM0(Y){switch(Y.kind){case"claiming":case"pulling-image":case"starting-container":case"warming-daemon":return Y.kind;case"waiting-for-capacity":return`waiting-for-capacity:${Y.message??""}:${Y.nodeClaim??""}`;case"ready":return"ready";case"failed":return`failed:${Y.reason}:${Y.message}`}}async function hm5(Y,X,G,Q,J,$,Z){let W=`/api/v1/namespaces/${encodeURIComponent(X)}/pods?watch=true&labelSelector=${encodeURIComponent(`${bm5}=${G}`)}`;return xM0({kc:Y,path:W,signal:Q,label:`pod/${G}`,onEvent:(K)=>{if(K.type!=="ADDED"&&K.type!=="MODIFIED")return;let H=K.object;if(H.metadata?.name!==G)return;gm5(H,J,Z),$("pod")}})}function gm5(Y,X,G){let J=(Y.status?.conditions??[]).find((Z)=>Z.type==="PodScheduled");if(J?.status==="True")X.pod.scheduled=!0,X.pod.scheduledFalseReason=void 0,X.pod.scheduledFalseMessage=void 0;else if(J?.status==="False")X.pod.scheduled=!1,X.pod.scheduledFalseReason=J.reason,X.pod.scheduledFalseMessage=J.message;let $=(Y.status?.containerStatuses??[]).find((Z)=>Z.name===ym5);if($)X.pod.containerWaitingReason=$.state?.waiting?.reason,X.pod.containerRunning=!!$.state?.running,X.pod.containerReady=$.ready===!0}async function um5(Y,X,G,Q,J,$){let Z=`/apis/${FG.SANDBOX_API_GROUP}/${FG.SANDBOX_API_VERSION}/namespaces/${encodeURIComponent(X)}/${FG.SANDBOX_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`;return xM0({kc:Y,path:Z,signal:Q,label:`sandbox/${G}`,onEvent:(W)=>{if(W.type!=="ADDED"&&W.type!=="MODIFIED")return;let H=W.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;$("sandbox")}})}async function lm5(Y,X,G,Q,J,$,Z){let W=`/api/v1/namespaces/${encodeURIComponent(X)}/events?watch=true&fieldSelector=${encodeURIComponent(`involvedObject.name=${G},involvedObject.kind=Pod`)}`;return xM0({kc:Y,path:W,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 N=H.message?.match(/nodeclaim\/([\w-]+)/);if(N)J.events.nominatedNodeClaim=N[1];break}default:return}$("event")}})}async function xM0(Y){let{kc:X,path:G,signal:Q,label:J,onEvent:$}=Y,Z=0;while(!Q.aborted){try{let K=await nu(X,{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 fM0(K.body)){if(Q.aborted)return;try{$(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 W=Math.min(250*2**Z,5000);Z+=1,await mm5(W,Q)}}function mm5(Y,X){return new Promise((G)=>{if(X.aborted){G();return}let Q=setTimeout(()=>{X.removeEventListener("abort",J),G()},Y),J=()=>{clearTimeout(Q),G()};X.addEventListener("abort",J,{once:!0})})}var bm5="studio.decocms.com/sandbox-handle",ym5="sandbox",xm5=300000;var ge6=D(()=>{CQ1();Lu1()});import{createHash as dm5,randomBytes as cm5,randomUUID as im5}from"crypto";import*as de6 from"net";import{PassThrough as pm5}from"stream";function yQ1(Y,X){return`${bQ1}${OM(Y,X,{hashLen:em5})}`}class cM0{kind=tB;records=new Map;inflight=new lq;stateStore;previewUrlPattern;kubeConfig;portForward;namespace;sandboxTemplateName;tokenGenerator;idleTtlMs;metrics;previewGateway;closed=!1;constructor(Y={}){this.stateStore=Y.stateStore??null,this.previewUrlPattern=Y.previewUrlPattern??null,this.kubeConfig=Y.kubeConfig??Qd5(),this.portForward=new UM0(this.kubeConfig),this.namespace=Y.namespace??nm5,this.sandboxTemplateName=Y.sandboxTemplateName??am5,this.tokenGenerator=Y.tokenGenerator??(()=>cm5(tm5).toString("hex")),this.idleTtlMs=Y.idleTtlMs??sm5,this.metrics=Y.meter?Gd5(Y.meter):null,this.previewGateway=Y.previewGateway&&Y.previewUrlPattern?{...Y.previewGateway}:null}async ensure(Y,X={}){let G=this.computeHandle(Y,X.repo?.branch??null);return this.inflight.run(G,()=>BM(this.stateStore,Y,tB,(Q)=>this.ensureLocked(Y,G,X,Q)))}async exec(Y,X){let G=await this.requireRecord(Y);return vV1(G.daemonUrl,G.token,X)}async delete(Y){let X=await this.getRecord(Y);if(this.records.delete(Y),X)this.closeForwarder(X.daemonForward),this.metrics?.active.add(-1,mM0(X.tenant));if(await this.deleteHttpRouteIfManaged(Y).catch((G)=>{console.warn(`[${PW}] HTTPRoute delete failed for ${Y}: ${G instanceof Error?G.message:String(G)}`)}),await au(this.kubeConfig,this.namespace,Y),this.stateStore)if(X)await this.stateStore.delete(X.id,tB);else await this.stateStore.deleteByHandle(tB,Y)}async alive(Y){let X=await ru(this.kubeConfig,this.namespace,Y).catch(()=>{return});return X?gM0(X):!1}watchClaimLifecycle(Y,X){return he6({kc:this.kubeConfig,namespace:this.namespace,claimName:Y,signal:X})}async getPreviewUrl(Y){let X=await this.getRecord(Y);if(!X)return null;return this.composePreviewUrl(X)}async proxyDaemonRequest(Y,X,G){let Q=await this.getRecord(Y);if(!Q)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});let J=performance.now(),$=0;try{let Z=await _V1(Q.daemonUrl,Q.token,X,G);return $=Z.status,Z}finally{this.recordProxyDuration("daemon",$,Q,performance.now()-J)}}async resolvePreviewUpstreamUrl(Y){if(this.previewUrlPattern)return`http://${Y}.${this.namespace}.svc.cluster.local:${tu}`;let X=await this.getRecord(Y);if(X)return X.daemonUrl;let G=await this.resurrectByHandle(Y);return G?G.daemonUrl:null}async proxyPreviewRequest(Y,X){let G=performance.now(),Q=this.records.get(Y)??null,J=0;try{let $=await this.resolvePreviewUpstreamUrl(Y);if(!$)return J=404,uM0(404,{error:"sandbox not found"});let Z=new URL(X.url);if((Z.pathname==="/_decopilot_vm"||Z.pathname.startsWith("/_decopilot_vm/"))&&X.method!=="GET")return J=404,uM0(404,{error:"not found"});let K=(z)=>`${z}${Z.pathname}${Z.search}`,H=new Headers(X.headers);for(let z of Yd5)H.delete(z);let U=X.method!=="GET"&&X.method!=="HEAD",N={method:X.method,headers:H,body:U?X.body:void 0,redirect:"manual",signal:X.signal,duplex:U?"half":void 0},B;try{B=await fetch(K($),N)}catch(z){let w=`${$}${Z.pathname}`;if(console.warn(`[${PW}] preview fetch to ${w} failed: ${z instanceof Error?z.message:String(z)}`),X.method==="GET"||X.method==="HEAD"){if(this.invalidateRecord(Y),await this.resurrectByHandle(Y).catch(()=>null)){let P=await this.resolvePreviewUpstreamUrl(Y);if(P)try{B=await fetch(K(P),N);let I=new Headers;for(let[V,M]of B.headers.entries())if(!ue6.includes(V.toLowerCase()))I.set(V,M);return J=B.status,new Response(B.body,{status:B.status,statusText:B.statusText,headers:I})}catch(I){console.warn(`[${PW}] preview fetch retry to ${w} failed: ${I instanceof Error?I.message:String(I)}`)}}}else this.invalidateRecord(Y);return J=502,uM0(502,{error:"sandbox daemon unreachable"})}let O=new Headers;for(let[z,w]of B.headers.entries())if(!ue6.includes(z.toLowerCase()))O.set(z,w);return J=B.status,new Response(B.body,{status:B.status,statusText:B.statusText,headers:O})}finally{this.recordProxyDuration("preview",J,Q,performance.now()-G,Y)}}async ensureLocked(Y,X,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(Y,tB);if(Z){let W=await this.rehydrate(Y,X,Z);if(W)return this.finish(W,Q,!1,!0,"resume");await Q.delete(Y,tB)}}let J=await ru(this.kubeConfig,this.namespace,X).catch(()=>{return});if(J)if(J.metadata?.deletionTimestamp)await Ou1(this.kubeConfig,this.namespace,X).catch((Z)=>{console.warn(`[${PW}] wait for terminating claim ${X} failed: ${Z instanceof Error?Z.message:String(Z)}`)});else{let Z=await this.adopt(Y,X,J).catch((W)=>{return console.warn(`[${PW}] adopt ${X} failed, recreating: ${W instanceof Error?W.message:String(W)}`),null});if(Z)return this.finish(Z,Q,!0,!0,"adopt");await au(this.kubeConfig,this.namespace,X).catch(()=>{}),await Ou1(this.kubeConfig,this.namespace,X).catch((W)=>{console.warn(`[${PW}] wait for deleted claim ${X} failed: ${W instanceof Error?W.message:String(W)}`)})}let $=await this.provision(Y,X,G);return this.finish($,Q,!0,!1,"fresh")}async finish(Y,X,G,Q,J){let $=this.records.has(Y.handle);if(this.records.set(Y.handle,Y),G)await this.persist(X,Y);if(Q)await Se6(this.kubeConfig,this.namespace,Y.handle,this.computeShutdownTime()).catch((Z)=>console.warn(`[${PW}] TTL refresh failed for ${Y.handle}: ${Z instanceof Error?Z.message:String(Z)}`));if(this.metrics){let Z=mM0(Y.tenant);if(this.metrics.ensureOutcome.add(1,{...Z,outcome:J}),!$)this.metrics.active.add(1,Z)}return this.toSandbox(Y)}buildEnvMap(Y,X){let G={},Q=[];for(let[Z,W]of Object.entries(Y.env??{}))if(om5.has(Z))Q.push(Z);else G[Z]=W;if(Q.length>0)console.warn(`[${PW}] opts.env keys overlap reserved bootstrap names and were dropped: ${Q.join(",")}`);let J=Y.repo,$=J?J.displayName??Ud5(J.cloneUrl):null;return{...G,DAEMON_TOKEN:X.token,DAEMON_BOOT_ID:X.daemonBootId,APP_ROOT:X.workdir,PROXY_PORT:String(tu),DEV_PORT:String(Y.workload?.devPort??rm5),RUNTIME:Y.workload?.runtime??"node",...J?{CLONE_URL:J.cloneUrl,REPO_NAME:$??"",BRANCH:J.branch??"",GIT_USER_NAME:J.userName,GIT_USER_EMAIL:J.userEmail}:{},...Y.workload?.packageManager?{PACKAGE_MANAGER:Y.workload.packageManager}:{}}}buildClaim(Y,X,G){let Q=this.buildEnvMap(X,G);return{apiVersion:`${FG.CLAIM_API_GROUP}/${FG.CLAIM_API_VERSION}`,kind:"SandboxClaim",metadata:{name:Y,namespace:this.namespace,labels:{"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...lM0(X.tenant)}},spec:{sandboxTemplateRef:{name:this.sandboxTemplateName},additionalPodMetadata:{labels:lM0(X.tenant,{[XA.role]:"claimed",[XA.sandboxHandle]:Y})},env:Object.entries(Q).sort(([J],[$])=>J<$?-1:J>$?1:0).map(([J,$])=>({name:J,value:$})),warmpool:"none",lifecycle:{shutdownPolicy:"Delete",shutdownTime:this.computeShutdownTime()}}}}async provision(Y,X,G){let Q=this.tokenGenerator(),J=im5(),$=hM0,Z=this.buildClaim(X,G,{token:Q,daemonBootId:J,workdir:$});try{await _Q1(this.kubeConfig,this.namespace,Z)}catch(U){if(U instanceof kQ1)await Ou1(this.kubeConfig,this.namespace,X),await _Q1(this.kubeConfig,this.namespace,Z);else throw U}let{podName:W}=await wu1(this.kubeConfig,this.namespace,X);try{await this.ensureServicePortForHandle(X),await this.ensureHttpRouteForHandle(X,G.tenant??null)}catch(U){throw await au(this.kubeConfig,this.namespace,X).catch(()=>{}),U}let K=await this.openForwarder(W,tu,X),H=`http://127.0.0.1:${K.localPort}`;try{await CV1(H)}catch(U){throw this.closeForwarder(K),await this.deleteHttpRouteIfManaged(X).catch(()=>{}),await au(this.kubeConfig,this.namespace,X).catch(()=>{}),U}return{id:Y,handle:X,podName:W,token:Q,workdir:$,daemonUrl:H,daemonForward:K,workload:G.workload??null,daemonBootId:J,tenant:G.tenant??null,ensureOpts:Hd5(G)}}async ensureServicePortForHandle(Y){if(!this.previewGateway||!this.previewUrlPattern)return;await be6(this.kubeConfig,this.namespace,Y,{name:"daemon",port:tu,targetPort:tu})}async ensureHttpRouteForHandle(Y,X){if(!this.previewGateway||!this.previewUrlPattern)return;let G=Fd5(this.previewUrlPattern,Y);if(!G)throw new g7(`Unable to derive preview hostname for ${Y} from pattern: ${this.previewUrlPattern}`);let Q={apiVersion:`${fQ1.API_GROUP}/${fQ1.API_VERSION}`,kind:"HTTPRoute",metadata:{name:Y,namespace:this.namespace,labels:lM0(X??void 0,{[XA.role]:"claimed",[XA.sandboxHandle]:Y,"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio"})},spec:{parentRefs:[{kind:"Gateway",group:"gateway.networking.k8s.io",name:this.previewGateway.name,namespace:this.previewGateway.namespace}],hostnames:[G],rules:[{backendRefs:[{group:"",kind:"Service",name:Y,port:tu}]}]}};await zu1(this.kubeConfig,this.namespace,Q)}async deleteHttpRouteIfManaged(Y){if(!this.previewGateway)return;await Du1(this.kubeConfig,this.namespace,Y)}async rehydrate(Y,X,G){let Q=G.state;if(!Q.podName||!Q.token)return null;let J=await ru(this.kubeConfig,this.namespace,X).catch(()=>{return});if(!J||!gM0(J))return null;let $=le6(J)??Q.podName,Z=await this.openAndProbeDaemon($,X);if(!Z)return null;if(Q.daemonBootId&&Q.daemonBootId!==Z.bootId)console.warn(`[${PW}] daemon restart detected (handle=${X}): stored bootId=${Q.daemonBootId} live bootId=${Z.bootId}`);return{id:Y,handle:X,podName:$,token:Q.token,workdir:Q.workdir??hM0,daemonUrl:Z.daemonUrl,daemonForward:Z.daemonForward,workload:Q.workload??null,daemonBootId:Z.bootId,tenant:Q.tenant??null,ensureOpts:Q.ensureOpts??null}}async adopt(Y,X,G){if(!gM0(G))return null;let Q=le6(G);if(!Q)return null;let J=Jd5(G);if(!J)return null;let $=await this.openAndProbeDaemon(Q,X);if(!$)return null;let Z=Kd5(G);if(this.previewGateway)await this.ensureServicePortForHandle(X).catch((W)=>{console.warn(`[${PW}] Service port backfill failed for ${X}: ${W instanceof Error?W.message:String(W)}`)}),await this.ensureHttpRouteForHandle(X,Z).catch((W)=>{console.warn(`[${PW}] HTTPRoute backfill failed for ${X}: ${W instanceof Error?W.message:String(W)}`)});return{id:Y,handle:X,podName:Q,token:J,workdir:hM0,daemonUrl:$.daemonUrl,daemonForward:$.daemonForward,workload:null,daemonBootId:$.bootId,tenant:Z,ensureOpts:null}}async openAndProbeDaemon(Y,X){let G=await this.openForwarder(Y,tu,X).catch(()=>null);if(!G)return null;let Q=`http://127.0.0.1:${G.localPort}`,J=await nr(Q);if(!J)return this.closeForwarder(G),null;return{daemonForward:G,daemonUrl:Q,bootId:J.bootId}}async getRecord(Y){let X=this.records.get(Y);if(X)return X;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(tB,Y);if(!G)return null;let Q=await this.rehydrate(G.id,Y,G);if(Q)this.records.set(Y,Q);return Q}async resurrectByHandle(Y){if(!this.stateStore)return null;let X=await this.stateStore.getByHandle(tB,Y);if(!X)return null;let G=X.state.ensureOpts;if(!G)return null;return await this.ensure(X.id,G),this.records.get(Y)??null}async requireRecord(Y){let X=await this.getRecord(Y);if(X)return X;let G=await this.resurrectByHandle(Y);if(G)return G;throw Error(`unknown sandbox handle ${Y}`)}invalidateRecord(Y){let X=this.records.get(Y);if(!X)return;this.records.delete(Y),this.closeForwarder(X.daemonForward)}recordProxyDuration(Y,X,G,Q,J){if(!this.metrics)return;this.metrics.proxyDurationMs.record(Q,{...mM0(G?.tenant??null),source:Y,sandbox_handle:G?.handle??J??"",status_code:X||0})}computeHandle(Y,X){return yQ1(Y,X)}composePreviewUrl(Y){if(this.previewUrlPattern)return zM(this.previewUrlPattern,Y.handle);return`http://127.0.0.1:${Y.daemonForward.localPort}/`}toSandbox(Y){return{handle:Y.handle,workdir:Y.workdir,previewUrl:this.composePreviewUrl(Y)}}async persist(Y,X){if(!Y)return;let G={podName:X.podName,token:X.token,workdir:X.workdir,workload:X.workload,daemonBootId:X.daemonBootId,tenant:X.tenant,...X.ensureOpts?{ensureOpts:X.ensureOpts}:{}};await Y.put(X.id,tB,{handle:X.handle,state:G})}computeShutdownTime(){return new Date(Date.now()+this.idleTtlMs).toISOString()}openForwarder(Y,X,G=Y){let Q=Zd5(G,X);return new Promise((J,$)=>{let Z=(W,K)=>{let H=de6.createServer((U)=>this.handleForwardedConnection(U,Y,X,G));H.once("error",(U)=>{if(U.code==="EADDRINUSE"&&K<Xd5){try{H.close()}catch{}let N=dM0+(W-dM0+1)%ce6;Z(N,K+1);return}$(U)}),H.listen(W,"127.0.0.1",()=>{let U=H.address();if(!U||typeof U==="string"){H.close(),$(Error("port-forward listener failed to bind"));return}J({server:H,localPort:U.port})})};Z(Q,0)})}handleForwardedConnection(Y,X,G,Q){let J=new pm5,$=null,Z=!1,W=()=>{if(Z)return;if(Z=!0,J.destroy(),$)try{$.close()}catch{}if(!Y.destroyed)Y.destroy()};Y.pipe(J),Y.on("error",W),Y.on("close",W),this.portForward.portForward(this.namespace,X,[G],Y,null,J).then((K)=>{let H=typeof K==="function"?K():K;if(!H){W();return}if($=H,$.on("close",W),$.on("error",()=>{this.invalidateRecord(Q),W()}),Z)try{$.close()}catch{}}).catch((K)=>{console.warn(`[${PW}] port-forward to ${X}:${G} failed: ${K instanceof Error?K.message:String(K)}`),this.invalidateRecord(Q),W()})}closeForwarder(Y){Y.server.close((X)=>{if(X)console.warn(`[${PW}] port-forward close on :${Y.localPort} errored: ${X instanceof Error?X.message:String(X)}`)})}close(){if(this.closed)return;this.closed=!0;for(let Y of this.records.values())this.closeForwarder(Y.daemonForward);this.records.clear()}}function Gd5(Y){return{active:Y.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:Y.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:Y.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 Qd5(){let Y=new zt;return Y.loadFromDefault(),Y}function gM0(Y){return Boolean(Y.status?.conditions?.some((X)=>X.type==="Ready"&&X.status==="True"))}function Jd5(Y){let X=Y.spec?.env;if(!X)return null;for(let G of X)if(G.name==="DAEMON_TOKEN"&&G.value)return G.value;return null}function le6(Y){return Y.metadata?.annotations?.[FG.POD_NAME_ANNOTATION]??Y.metadata?.name??null}function Zd5(Y,X){let G=dm5("sha256").update(`${Y}:${X}`).digest();return dM0+G.readUInt32BE(0)%ce6}function uM0(Y,X){return new Response(JSON.stringify(X),{status:Y,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function me6(Y){let X=Y.slice(0,Wd5);return $d5.test(X)?X:""}function lM0(Y,X={}){let G={...X};if(Y){let Q=me6(Y.orgId),J=me6(Y.userId);if(Q)G[XA.orgId]=Q;if(J)G[XA.userId]=J}return G}function Kd5(Y){let X=Y.metadata?.labels;if(!X)return null;let G=X[XA.orgId],Q=X[XA.userId];if(!G||!Q)return null;return{orgId:G,userId:Q}}function mM0(Y){return{org_id:Y?.orgId??"",user_id:Y?.userId??"",runner_kind:tB}}function Hd5(Y){let X={};if(Y.repo)X.repo=Y.repo;if(Y.workload)X.workload=Y.workload;if(Y.env&&Object.keys(Y.env).length>0)X.env=Y.env;if(Y.tenant)X.tenant=Y.tenant;return Object.keys(X).length>0?X:null}function Fd5(Y,X){try{return new URL(zM(Y,X)).hostname||null}catch{return null}}function Ud5(Y){try{let X=new URL(Y);return X.pathname.replace(/^\/+/,"").replace(/\.git$/,"")||X.hostname}catch{return Y}}var tB="agent-sandbox",PW="AgentSandboxRunner",nm5="agent-sandbox-system",am5="studio-sandbox",tu=9000,rm5=3000,hM0="/app",tm5=32,om5,sm5=900000,bQ1="studio-sb-",em5=16,Yd5,ue6,dM0=40000,ce6=1e4,Xd5=256,XA,$d5,Wd5=63;var ie6=D(()=>{MM0();cT0();xV1();Lu1();CQ1();ge6();om5=new Set(["DAEMON_TOKEN","DAEMON_BOOT_ID","APP_ROOT","PROXY_PORT","DEV_PORT","RUNTIME","CLONE_URL","REPO_NAME","BRANCH","GIT_USER_NAME","GIT_USER_EMAIL","PACKAGE_MANAGER"]);Yd5=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length","upgrade"],ue6=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];XA={role:"studio.decocms.com/role",sandboxHandle:"studio.decocms.com/sandbox-handle",orgId:"studio.decocms.com/org-id",userId:"studio.decocms.com/user-id"},$d5=/^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$/});var pe6={};l6(pe6,{waitForSandboxReady:()=>wu1,getSandboxClaim:()=>ru,getHttpRoute:()=>fe6,deleteSandboxClaim:()=>au,deleteHttpRoute:()=>Du1,createSandboxClaim:()=>_Q1,createHttpRoute:()=>zu1,composeClaimName:()=>yQ1,SandboxTimeoutError:()=>Pt,SandboxError:()=>g7,KubeConfig:()=>zt,K8S_CONSTANTS:()=>FG,HTTPROUTE_CONSTANTS:()=>fQ1,HANDLE_PREFIX:()=>bQ1,AgentSandboxRunner:()=>cM0});var Eu1=D(()=>{MM0();CQ1();Lu1();ie6()});var sM0={};l6(sM0,{subscribeLifecycle:()=>oM0,getSharedRunnerIfInit:()=>aM0,getSharedRunner:()=>xQ1,getRunnerByKind:()=>qt,getOrInitSharedRunner:()=>nM0,asLifecycleWatchable:()=>tM0,asDockerRunner:()=>rM0,__resetSharedLifecyclesForTesting:()=>wd5});function ae6(Y,X){let G=pM0[Y];if(G)return Promise.resolve(G);let Q=iM0[Y];if(Q)return Q;let J=X().then(($)=>{return pM0[Y]=$,$}).finally(()=>{delete iM0[Y]});return iM0[Y]=J,J}function Nd5(){let Y=process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN;return Y&&Y.trim()!==""?Y:void 0}function Bd5(){let Y=process.env.STUDIO_SANDBOX_TEMPLATE_NAME;return Y&&Y.trim()!==""?Y:void 0}function Od5(){let Y=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME?.trim(),X=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE?.trim();if(!Y&&!X)return;if(!Y||!X)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:Y,namespace:X}}async function re6(Y,X){let G=new XV0(X),Q=Nd5();switch(Y){case"docker":return new DU({stateStore:G,previewUrlPattern:Q});case"freestyle":{let{FreestyleSandboxRunner:J}=await Promise.resolve().then(() => (Qn6(),Gn6));return new J({stateStore:G})}case"agent-sandbox":{let{AgentSandboxRunner:J}=await Promise.resolve().then(() => (Eu1(),pe6));return new J({stateStore:G,previewUrlPattern:Q,sandboxTemplateName:Bd5(),previewGateway:Od5(),meter:gH})}default:throw Error(`Unknown runner kind: ${String(Y)}`)}}function xQ1(Y){return qt(Y,or())}function qt(Y,X){return ae6(X,()=>re6(X,Y.db))}async function nM0(){let Y=DM();if(!Y)return null;return ae6(Y,()=>re6(Y,uX().db))}function aM0(){let Y=DM();if(!Y)return null;return pM0[Y]??null}function rM0(Y){return Y instanceof DU?Y:null}function tM0(Y){if(!Y)return null;if(Y.kind!=="agent-sandbox")return null;if(typeof Y.watchClaimLifecycle!=="function")return null;return Y}function oM0(Y,X,G){let Q=GA.get(X);if(Q){if(Q.terminated){if(Q.lastPhase)try{G(Q.lastPhase)}catch{}return{unsubscribe:zd5}}if(Q.listeners.add(G),Q.lastPhase)try{G(Q.lastPhase)}catch{}return ne6(X,Q,G)}let J=new AbortController,$={lastPhase:null,terminated:!1,listeners:new Set([G]),abort:J};return GA.set(X,$),Dd5(Y,X,$),ne6(X,$,G)}function zd5(){}function ne6(Y,X,G){return{unsubscribe(){if(GA.get(Y)!==X)return;if(X.listeners.delete(G),X.listeners.size===0)GA.delete(Y),X.abort.abort()}}}async function Dd5(Y,X,G){let Q=null;try{for await(let J of Y.watchClaimLifecycle(X,G.abort.signal)){if(G.abort.signal.aborted)break;let $=J;G.lastPhase=$;let Z=$.kind==="ready"||$.kind==="failed";if(Z)G.terminated=!0;let W=Array.from(G.listeners);for(let K of W)try{K($)}catch{}if(Z)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 $ of Array.from(G.listeners))try{$(J)}catch{}}if(GA.get(X)===G)GA.delete(X)}}function wd5(){for(let Y of GA.values())Y.abort.abort();GA.clear()}var pM0,iM0,GA;var QA=D(()=>{wM();dE();AW();wf6();pM0={},iM0={};GA=new Map});async function te6(Y,X){U0(X);let G=s1(X),Q=B6(X);if(!Q)throw Error("User ID required");let J=await X.storage.virtualMcps.findById(Y.virtualMcpId);if(!J||J.organization_id!==G.id)throw Error("Virtual MCP not found");let $=J.metadata??{},Z=uV1(sr($),Q,Y.branch),W=or();if(Z&&(Z.runnerKind??"freestyle")===W)return Z;await oe6(X,Z,W);let K=$.githubRepo??null,{entry:H}=await se6({ctx:X,userId:Q,orgId:G.id,virtualMcpId:Y.virtualMcpId,branch:Y.branch,metadata:$,githubRepo:K,existing:Z});return H}async function oe6(Y,X,G){if(!X)return;let Q=X.runnerKind??"freestyle";if(Q===G)return;if(Q==="freestyle")return;try{await(await qt(Y,Q)).delete(X.vmId)}catch(J){console.error(`[VM_START] stale ${Q} ${X.vmId}: ${J instanceof Error?J.message:String(J)}`)}}async function se6(Y){let{ctx:X,userId:G,orgId:Q,virtualMcpId:J,branch:$,metadata:Z,githubRepo:W,existing:K}=Y;if(W&&!W.connectionId)throw Error("GitHub connection id missing on virtual MCP metadata");let{runtime:H,packageManager:U,port:N}=Jf6(Z),B;if(W){let{cloneUrl:T,gitUserName:S,gitUserEmail:C}=await Zf6(W.connectionId,W.owner,W.name,X.db,X.vault);if(!U){let _=await Hf6(W.connectionId,W.owner,W.name,X.db,X.vault);if(_)U=_.packageManager,H=JQ1[_.packageManager].runtime,N=_.devPort??N,await Ld5(X,J,G,_.packageManager,_.devPort)}B={cloneUrl:T,userName:S,userEmail:C,branch:$,displayName:`${W.owner}/${W.name}`}}let O=H&&U?{runtime:H,packageManager:U,devPort:Number(N)}:void 0,z=tr({orgId:Q,virtualMcpId:J,branch:$}),w=await xQ1(X),E=await w.ensure({userId:G,projectRef:z},{repo:B,workload:O,tenant:{orgId:Q,userId:G}}),I=!!K&&K.vmId===E.handle&&K?.createdAt?K.createdAt:Date.now(),V={vmId:E.handle,previewUrl:E.previewUrl,runnerKind:w.kind,createdAt:I};await Gf6(X.storage.virtualMcps,J,G,G,$,V);let M=!K||K.vmId!==E.handle;return{entry:V,isNewVm:M}}async function Ld5(Y,X,G,Q,J){let $=await Y.storage.virtualMcps.findById(X);if(!$)return;let Z=$.metadata??{};await Y.storage.virtualMcps.update(X,G,{metadata:{...Z,runtime:{selected:Q,port:J}}})}var eM0;var YR0=D(()=>{H0();wM();b0();YV0();$f6();Ff6();nA0();eT0();QA();eM0=l1({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(["docker","freestyle","agent-sandbox"])}),handler:async(Y,X)=>{let G=Y.branch??gT1(),{metadata:Q,userId:J,organization:$,entry:Z}=await lV1({virtualMcpId:Y.virtualMcpId,branch:G},X),W=Q.githubRepo;if(!W)throw Error("No GitHub repo connected");let K=or();await oe6(X,Z,K);let{entry:H,isNewVm:U}=await se6({ctx:X,userId:J,orgId:$.id,virtualMcpId:Y.virtualMcpId,branch:G,metadata:Q,githubRepo:W,existing:Z});return{...H,branch:G,isNewVm:U,runnerKind:K}}})});var XR0;var ee6=D(()=>{H0();b0();YV0();QA();XR0=l1({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(Y,X)=>{let G;try{G=await lV1(Y,X)}catch(W){if(W instanceof Error&&W.message==="Virtual MCP not found")return{success:!0};throw W}let{entry:Q,userId:J}=G;if(!Q)return{success:!0};await Qf6(X.storage.virtualMcps,Y.virtualMcpId,J,J,Y.branch);let $=Q.runnerKind??"freestyle";return await(await qt(X,$)).delete(Q.vmId).catch((W)=>console.error(`[VM_DELETE] ${$} ${Q.vmId}: ${W instanceof Error?W.message:String(W)}`)),{success:!0}}})});var Y18=D(()=>{YR0();ee6()});var Pd5="https://api.github.com",GR0;var X18=D(()=>{H0();b0();lE1();n2();GR0=l1({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(Y,X)=>{await X.access.check();let G=new X$(X.db,X.vault),Q=await G.get(Y.connectionId);if(!Q)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let J=Q.accessToken;if(q51(Q)&&G.isExpired(Q,uE1)){let U=await A51(Q,G);if(!U)throw Error(NV);J=U,Q=await G.get(Y.connectionId)??Q}let $=[],Z,W=1,K=100,H=async(U)=>fetch(`${Pd5}/user/installations?per_page=${K}&page=${W}`,{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 B=await G.get(Y.connectionId);if(!B||!q51(B))throw Error(NV);let O=await A51(B,G);if(!O)throw Error(NV);if(J=O,U=await H(J),U.status===401)throw Error(NV)}if(!U.ok)throw Error(`GitHub /user/installations failed: ${U.status}`);let N=await U.json();for(let B of N.installations){if(!Z)Z=B.app_slug??B.app?.slug;$.push({installationId:B.id,login:B.account.login,avatarUrl:B.account.avatar_url,type:B.account.type})}if(N.installations.length<K)break;W++}return{installations:$,...Z?{appSlug:Z}:{}}}})});var G18=D(()=>{X18()});var yT1={};l6(yT1,{managementMCP:()=>Rr,listManagementTools:()=>jd5,ALL_TOOLS:()=>Q18});async function jd5(Y){let X=await Rr(Y),[G,Q]=y91.createLinkedPair();await X.connect(Q);let J=new A7({name:"tools-hydration",version:"1.0.0"});try{return await J.connect(G),(await J.listTools()).tools}finally{await J.close().catch(()=>{})}}var Ad5,Id5,Q18,Rr=async(Y)=>{let X=null;if(Y.organization){let Z=await Y.storage.organizationSettings.get(Y.organization.id),W=await Y.storage.virtualMcps.list(Y.organization.id),K=new Set(Z?.enabled_plugins??[]);for(let H of W){let U=H.metadata?.enabled_plugins;if(U&&Array.isArray(U))for(let N of U)K.add(N)}X=K.size>0?[...K]:null}let G=id4(Q18,X),Q=new pO({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}}});for(let Z of G){let W=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=W.shape,U=K?.shape;Q.registerTool(Z.name,{description:Z.description??"",inputSchema:H,outputSchema:U,annotations:Z.annotations,_meta:Z._meta},async(N)=>{Y.access.setToolName(Z.name);try{let B=await Z.execute(N,Y);return{content:[{type:"text",text:JSON.stringify(B)}],structuredContent:B}}catch(B){return{content:[{type:"text",text:`Error: ${B.message}`}],isError:!0}}})}let J=RT6();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(Y.organization?.id){let Z=await Y.storage.brandContext.list(Y.organization.id),W=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(W.has(U))U=`${U}-${K.id.slice(0,8)}`;W.add(U);let N=[`# Brand: ${K.name}`,"",`**Domain:** ${K.domain}`,"","## Overview",K.overview];if(K.colors){let O=Object.entries(K.colors).filter(([,z])=>z);if(O.length>0){N.push("","## Colors");for(let[z,w]of O)N.push(`- **${z}:** ${w}`)}}if(K.fonts){let O=Object.entries(K.fonts).filter(([,z])=>z);if(O.length>0){N.push("","## Fonts");for(let[z,w]of O)N.push(`- ${w} (${z})`)}}if(K.logo)N.push("",`**Logo:** ${K.logo}`);if(K.favicon)N.push(`**Favicon:** ${K.favicon}`);if(K.ogImage)N.push(`**OG Image:** ${K.ogImage}`);if(K.images&&K.images.length>0){N.push("","## Images");for(let O of K.images){let z=Object.entries(O).map(([w,E])=>`${w}: ${E}`).join(", ");N.push(`- ${z}`)}}let B=N.join(`
|
|
4603
4627
|
`);Q.prompt(U,`Brand context for ${K.name}`,()=>({messages:[{role:"user",content:{type:"text",text:B}}]}))}}let $=ST6();for(let Z of $)Q.resource(Z.name,Z.uri,{description:Z.description,mimeType:Z.mimeType??"text/markdown"},async(W)=>{return{contents:[{uri:typeof W==="string"?W:W.href,mimeType:Z.mimeType??"text/markdown",text:Z.text}]}});return Q};var Tr=D(()=>{IL1();JN();C01();H0();Fc4();HI6();BI6();II6();fI6();hI6();Zj6();Uj6();Vj6();mj6();cj6();WT6();kT6();XV6();g_6();Y18();G18();Ad5=[LA0,EA0,PA0,qA0,AA0,IA0,jA0,TA0,VA0,MA0,RA0,SA0,CA0,vA0,_A0,fA0,bA0,yA0,xA0,hA0,gA0,uA0,lA0,P30,aq0,rq0,tq0,oq0,sq0,$A0,KA0,HA0,FA0,UA0,NI6,zA0,DA0,wA0,C$0,_$0,f$0,v$0,eq0,YA0,XA0,GA0,QA0,JA0,ZA0,OI0,aA0,rA0,tA0,oA0,sA0,eA0,mA0,dA0,cA0,iA0,pA0,YI0,XI0,GI0,$I0,WI0,UI0,NI0,BI0,NA0,BA0,OA0,zI0,DI0,wI0,LI0,EI0,PI0,qI0,AI0,II0,jI0,TI0,VI0,MI0,RI0,SI0,kI0,CI0,vI0,...h_6,eM0,XR0,GR0],Id5=pd4(),Q18=[...Ad5,...Id5]});function Td5(Y){return[{permissions:{self:["*"]},getTools:async()=>{let{ALL_TOOLS:X}=await Promise.resolve().then(() => (Tr(),yT1));return X.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:u40(J3(),Y)},{data:g40()},{data:h40(Y)}]}async function J18(Y,X){try{let G=uX(),Q=S4(),J=new ST(Q.encryptionKey),$=new i81(G.db,J),Z=Td5(Y);await Promise.all(Z.map(async(W)=>{let K=null;if(W.permissions)K=(await D7.api.createApiKey({body:{name:`${W.data.app_name??crypto.randomUUID()}-mcp`,userId:X,permissions:W.permissions,rateLimitEnabled:!1,metadata:{organization:{id:Y},purpose:"default-org-connections"}}}))?.key;let H=await nE({id:"pending",title:W.data.title,connection_type:W.data.connection_type,connection_url:W.data.connection_url,connection_token:W.data.connection_token,connection_headers:W.data.connection_headers}).catch(()=>null),U=await W.getTools?.()??H?.tools??null,N=H?.scopes?.length?H.scopes:null,B=W.data.id?W.data.id.startsWith(`${Y}_`)?W.data.id:`${Y}_${W.data.id}`:void 0;await $.create({...W.data,id:B,tools:U,configuration_scopes:N,organization_id:Y,created_by:X,connection_token:W.data.connection_token??K})}));try{let W=new p81(G.db);await xh4(Y,X,W)}catch(W){console.error("Failed to install studio pack agents:",W)}if(Q.aiGatewayEnabled&&l81.provisionKey)try{let W=await aE(X),K=await l81.provisionKey(W,Y);await new d81(G.db,J).upsert({providerId:"deco",label:"Auto-provisioned",apiKey:K,organizationId:Y,createdBy:X})}catch(W){console.error("Failed to auto-provision Deco AI Gateway key:",W)}}catch(G){console.error("Error creating default MCP connections:",G)}}var Z18=D(()=>{h5();eQ0();lz();dE();ww1();YJ0();GJ0();QJ0();e81();hh4();H0();YY();t2();vT()});function Vd5(Y,X){let G=Y.email.split("@")[1]?.toLowerCase()??null;return{distinctId:Y.id,properties:{$set:{email:Y.email,name:Y.name,email_verified:Y.emailVerified},$set_once:{first_seen_at:X.toISOString(),signup_email_domain:G}}}}function QR0(Y){q6.identify(Vd5(Y,new Date))}var $18=D(()=>{NX()});async function Rd5(Y){let{user:X,token:G}=Y;if(!G?.idToken)return;let Q;try{Q=m5(G.idToken)}catch{return}let{preferred_username:J,upn:$}=Q,Z=[J,$].filter((H)=>typeof H==="string"&&H.length>0&&H.toLowerCase()!==X.email.toLowerCase()).map((H)=>H.toLowerCase());if(Z.length===0)return;let{db:W}=uX(),K=await W.selectFrom("user").selectAll().where("email","in",Z).where("id","!=",X.id).executeTakeFirst();if(!K)return;try{await W.transaction().execute(async(H)=>{await p1`UPDATE "account" SET "userId" = ${K.id} WHERE "userId" = ${X.id}`.execute(H),await p1`UPDATE "session" SET "userId" = ${K.id} WHERE "userId" = ${X.id}`.execute(H),await p1`
|
|
4604
4628
|
UPDATE "member" SET "userId" = ${K.id}
|
|
4605
4629
|
WHERE "userId" = ${X.id}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{e as t,j as i}from"./index-CFahKaOM.js";import{O as m}from"./select-model-Ly7oy5vK.js";import"./checkbox-BMFPeDen.js";import"./ChevronDown-Usw-ptYZ.js";import"./input-BohjAJ_4.js";import"./dialog-CPyR3COo.js";import"./X-BgNHGeBl.js";import"./drawer-BZLEopRK.js";import"./tooltip-V_Rb6MNZ.js";import"./select-gZj19OqY.js";import"./ChevronUp-DQfNemJG.js";import"./skeleton-CYEDV6V5.js";import"./Tool01-CuB7oJgS.js";import"./RefreshCcw01-CsMevI8O.js";import"./SearchMd-Ytd6c0ll.js";import"./Settings02-CvrBlbBO.js";import"./use-ai-providers-CKfNcci8.js";import"./constants-BXz_d4fe.js";import"./chat-context-H8YpdoaC.js";import"./use-virtual-mcp-kH1PMy03.js";import"./use-collections-DcqDFIJE.js";import"./use-decopilot-events-CK7K1FCP.js";import"./create-sse-subscription-CxkOgzKf.js";import"./use-tasks-BAqdxtKe.js";import"./use-organization-settings-C75c-v86.js";import"./ai-providers-logos-D6a8kmGH.js";import"./Zap-o1d5pHAU.js";import"./AlertCircle-CLDKU5ty.js";import"./CheckCircle-CfXA9jn1.js";import"./Trash01-DqxI7G9k.js";import"./index-B1JV7ppc.js";import"./settings-section-CdYoZh3R.js";import"./card-01NEpYK9.js";import"./ArrowUpRight-DPl82rO4.js";import"./switch-CSQQwNd5.js";import"./toggle-group-CsTz1qk2.js";import"./avatar-BF0gecl5.js";import"./User01-C3LXYecz.js";import"./alert-dialog-ie0qXApM.js";import"./formatDistanceToNow-Cb2QZZJn.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./unwrap-tool-result-BYXdCQMg.js";function T(){const o=t.c(1);let r;return o[0]===Symbol.for("react.memo_cache_sentinel")?(r=i.jsx(m,{}),o[0]=r):r=o[0],r}export{T as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{e as n,j as r,r as d,g as h,O as f,l as u}from"./index-CFahKaOM.js";import{S as j,a as b,b as S}from"./index-B1JV7ppc.js";import{u as _}from"./tooltip-V_Rb6MNZ.js";import{u as k,T as y,a as T,b as i,S as g}from"./index-1Z2oT3ji.js";import{C as v}from"./chat-context-H8YpdoaC.js";import"./X-BgNHGeBl.js";import"./agent-icon-i3_kgSR-.js";import"./AlertCircle-CLDKU5ty.js";import"./Tool01-CuB7oJgS.js";import"./XClose-Dt9YjXZl.js";import"./RefreshCcw01-CsMevI8O.js";import"./ArrowNarrowLeft-RDc6uuv4.js";import"./XCircle-BCIvjJwm.js";import"./ArrowUpRight-DPl82rO4.js";import"./ZapSquare-Dr7dOlmN.js";import"./Users03-CZCjMbp7.js";import"./CheckCircle-CfXA9jn1.js";import"./ChevronDown-Usw-ptYZ.js";import"./ChevronRight-DoCnX9k7.js";import"./ChevronUp-DQfNemJG.js";import"./DotsVertical-BVfKaEFA.js";import"./Container-GOtpXA1D.js";import"./Star01-B6e6dHYY.js";import"./Palette-CSJaxEgx.js";import"./SearchMd-Ytd6c0ll.js";import"./LinkExternal01-CZs0wlF4.js";import"./Lock01-QeXCU7HG.js";import"./Sun-4ELQnnMk.js";import"./Play-JGp_Cbfe.js";import"./Plus-kEeRyUxB.js";import"./Settings02-CvrBlbBO.js";import"./Shield01-cPWG6TNA.js";import"./Trash01-DqxI7G9k.js";import"./User01-C3LXYecz.js";import"./Zap-o1d5pHAU.js";import"./shell-layout-CNVN1Xii.js";import"./dialog-CPyR3COo.js";import"./required-auth-layout-Br303SqN.js";import"./use-tasks-BAqdxtKe.js";import"./use-collections-DcqDFIJE.js";import"./constants-BXz_d4fe.js";import"./use-organization-settings-C75c-v86.js";import"./use-org-sso-DfoBK0ag.js";import"./pair-BCm4UAGD.js";import"./index-B-ip_PBd.js";import"./use-copy-CqokAoTf.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./content-blocks-o63cs2vh.js";import"./types-LzWcp-KY.js";import"./integration-icon-B4agjmMV.js";import"./use-virtual-mcp-kH1PMy03.js";import"./skeleton-CYEDV6V5.js";import"./popover-DneAjpKm.js";import"./drawer-BZLEopRK.js";import"./avatar-BF0gecl5.js";import"./alert-dialog-ie0qXApM.js";import"./form-BIoYTmyg.js";import"./label-DyQV2LLm.js";import"./input-BohjAJ_4.js";import"./index-DacOWTuH.js";import"./use-mcp-tools-B1ZDkVHC.js";import"./use-ai-providers-CKfNcci8.js";import"./index-BIWc3bwF.js";import"./switch-CSQQwNd5.js";import"./use-connection-DMd3gQky.js";import"./lean-canvas-recruit-modal-4tZiJJkU.js";import"./use-navigate-to-agent-Dga1Bhy4.js";import"./collection-search-BG6Gw4Mu.js";import"./checkbox-BMFPeDen.js";import"./extract-connection-data-CIPWZJW-.js";import"./constants-CGJZhWnl.js";import"./collections-Olx1K63T.js";import"./tabs-BiZc3mdZ.js";import"./dropdown-menu-Buw-c9bt.js";import"./select-gZj19OqY.js";import"./toggle-group-CsTz1qk2.js";import"./select-model-Ly7oy5vK.js";import"./ai-providers-logos-D6a8kmGH.js";import"./settings-section-CdYoZh3R.js";import"./card-01NEpYK9.js";import"./formatDistanceToNow-Cb2QZZJn.js";import"./unwrap-tool-result-BYXdCQMg.js";import"./index-BAv6Y8f_.js";import"./question-004-sINsf4GQ.js";import"./connection-slug-eyAPH6o3.js";import"./connection-card-CvPCQDGo.js";import"./use-registry-connections-HIXjhu0m.js";import"./useInfiniteQuery-IC7YnrCe.js";import"./infiniteQueryObserver-Cuq-6B7N.js";import"./collection-tabs-L0YkmPvP.js";import"./badge-CrcJY3ID.js";import"./textarea-DfNIu9yW.js";import"./connection-form-helpers-cVTgOTdv.js";import"./use-infinite-scroll-srxCZX29.js";import"./useSuspenseInfiniteQuery-Diu74tq9.js";import"./collection-search-DRnCFAYG.js";import"./use-create-virtual-mcp-DOAJogil.js";import"./empty-state-BKkZQAbY.js";import"./use-decopilot-events-CK7K1FCP.js";import"./create-sse-subscription-CxkOgzKf.js";import"./task-status-yVhre1Eq.js";const N=280;function P(){const t=n.c(2),{tasksOpen:e}=k();if(!e)return null;let o;t[0]===Symbol.for("react.memo_cache_sentinel")?(o={width:`${N}px`},t[0]=o):o=t[0];let m;return t[1]===Symbol.for("react.memo_cache_sentinel")?(m=r.jsx("aside",{className:"shrink-0 h-full bg-sidebar pb-1",style:o,children:r.jsx("div",{className:"h-full p-0.5 pt-0.25",children:r.jsx("div",{className:"h-full bg-background rounded-[0.75rem] overflow-hidden card-shadow",children:r.jsx(y,{})})})}),t[1]=m):m=t[1],m}function C(){const t=n.c(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=r.jsx(d.Suspense,{fallback:null,children:r.jsx(P,{})}),t[0]=e):e=t[0],e}function x(){const t=n.c(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=r.jsx("div",{className:"flex-1 flex items-center justify-center",children:r.jsx(u,{size:20,className:"animate-spin text-muted-foreground"})}),t[0]=e):e=t[0],e}function yr(){const t=n.c(7),e=_();let o;t[0]===Symbol.for("react.memo_cache_sentinel")?(o={strict:!1},t[0]=o):o=t[0];const c=!!h(o).taskId;let s;t[1]===Symbol.for("react.memo_cache_sentinel")?(s={"--sidebar-width-icon":"3.5rem"},t[1]=s):s=t[1];let l;t[2]===Symbol.for("react.memo_cache_sentinel")?(l=r.jsx(g,{}),t[2]=l):l=t[2];let p;t[3]===Symbol.for("react.memo_cache_sentinel")?(p={background:"transparent",containerType:"inline-size"},t[3]=p):p=t[3];let a;return t[4]!==c||t[5]!==e?(a=r.jsx(j,{defaultOpen:!1,children:r.jsx("div",{className:"flex flex-col h-dvh overflow-hidden",children:r.jsxs(b,{className:"flex-1 bg-sidebar",style:s,children:[l,r.jsx(S,{className:"flex flex-col",style:p,children:r.jsx(v,{children:r.jsx(T,{children:e?r.jsx(d.Suspense,{fallback:r.jsx(x,{}),children:r.jsx(f,{})}):r.jsxs(i,{children:[r.jsxs(i.Header,{children:[r.jsxs(i.LeftColumn,{children:[r.jsx(i.Nav,{}),r.jsx(i.TogglesSlot,{})]}),r.jsx(i.CenterSlot,{}),r.jsxs(i.RightColumn,{children:[r.jsx(i.TabsSlot,{}),r.jsx(i.RightSlot,{})]})]}),r.jsxs("div",{className:"flex-1 min-h-0 flex flex-row",children:[c&&r.jsx(C,{}),r.jsx(d.Suspense,{fallback:r.jsx(x,{}),children:r.jsx(f,{})})]})]})})})})]})})}),t[4]=c,t[5]=e,t[6]=a):a=t[6],a}export{yr as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BuxPc_PJ.js","assets/index-CFahKaOM.js","assets/index-CICJCo3v.css","assets/ArrowNarrowLeft-RDc6uuv4.js","assets/CheckCircle-CfXA9jn1.js","assets/Container-GOtpXA1D.js","assets/Settings02-CvrBlbBO.js","assets/XCircle-BCIvjJwm.js","assets/constants-BXz_d4fe.js","assets/useInfiniteQuery-IC7YnrCe.js","assets/infiniteQueryObserver-Cuq-6B7N.js","assets/badge-CrcJY3ID.js","assets/input-BohjAJ_4.js","assets/dropdown-menu-Buw-c9bt.js","assets/ChevronDown-Usw-ptYZ.js","assets/ChevronRight-DoCnX9k7.js","assets/DotsVertical-BVfKaEFA.js","assets/table-EnhZuihn.js","assets/toggle-group-CsTz1qk2.js","assets/use-view-mode-CuDuiIvs.js","assets/tooltip-V_Rb6MNZ.js","assets/SearchMd-Ytd6c0ll.js","assets/dialog-CPyR3COo.js","assets/X-BgNHGeBl.js","assets/AlertCircle-CLDKU5ty.js","assets/alert-dialog-ie0qXApM.js","assets/card-01NEpYK9.js","assets/Trash01-DqxI7G9k.js","assets/label-DyQV2LLm.js","assets/select-gZj19OqY.js","assets/ChevronUp-DQfNemJG.js","assets/switch-CSQQwNd5.js","assets/textarea-DfNIu9yW.js","assets/RefreshCcw01-CsMevI8O.js","assets/checkbox-BMFPeDen.js","assets/LinkExternal01-CZs0wlF4.js","assets/use-copy-CqokAoTf.js","assets/Plus-kEeRyUxB.js","assets/Play-JGp_Cbfe.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{e as a,j as t,r,l as i,_ as o}from"./index-CFahKaOM.js";const n=r.lazy(()=>o(()=>import("./registry-layout-BuxPc_PJ.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38])));function c(){const s=a.c(1);let e;return s[0]===Symbol.for("react.memo_cache_sentinel")?(e=t.jsx(r.Suspense,{fallback:t.jsx("div",{className:"flex-1 flex items-center justify-center",children:t.jsx(i,{size:20,className:"animate-spin text-muted-foreground"})}),children:t.jsx(n,{})}),s[0]=e):e=s[0],e}export{c as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BuxPc_PJ.js","assets/index-CFahKaOM.js","assets/index-CICJCo3v.css","assets/ArrowNarrowLeft-RDc6uuv4.js","assets/CheckCircle-CfXA9jn1.js","assets/Container-GOtpXA1D.js","assets/Settings02-CvrBlbBO.js","assets/XCircle-BCIvjJwm.js","assets/constants-BXz_d4fe.js","assets/useInfiniteQuery-IC7YnrCe.js","assets/infiniteQueryObserver-Cuq-6B7N.js","assets/badge-CrcJY3ID.js","assets/input-BohjAJ_4.js","assets/dropdown-menu-Buw-c9bt.js","assets/ChevronDown-Usw-ptYZ.js","assets/ChevronRight-DoCnX9k7.js","assets/DotsVertical-BVfKaEFA.js","assets/table-EnhZuihn.js","assets/toggle-group-CsTz1qk2.js","assets/use-view-mode-CuDuiIvs.js","assets/tooltip-V_Rb6MNZ.js","assets/SearchMd-Ytd6c0ll.js","assets/dialog-CPyR3COo.js","assets/X-BgNHGeBl.js","assets/AlertCircle-CLDKU5ty.js","assets/alert-dialog-ie0qXApM.js","assets/card-01NEpYK9.js","assets/Trash01-DqxI7G9k.js","assets/label-DyQV2LLm.js","assets/select-gZj19OqY.js","assets/ChevronUp-DQfNemJG.js","assets/switch-CSQQwNd5.js","assets/textarea-DfNIu9yW.js","assets/RefreshCcw01-CsMevI8O.js","assets/checkbox-BMFPeDen.js","assets/LinkExternal01-CZs0wlF4.js","assets/use-copy-CqokAoTf.js","assets/Plus-kEeRyUxB.js","assets/Play-JGp_Cbfe.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{e as n,f as c,g as m,j as r,l as f,r as l,_ as u}from"./index-CFahKaOM.js";const _=l.lazy(()=>u(()=>import("./registry-layout-BuxPc_PJ.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38])));function x(){const e=n.c(5),o=c();let t;e[0]===Symbol.for("react.memo_cache_sentinel")?(t={from:"/shell/$org"},e[0]=t):t=e[0];const{org:i}=m(t);let s;e[1]===Symbol.for("react.memo_cache_sentinel")?(s=r.jsx("div",{className:"h-full flex items-center justify-center",children:r.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=s):s=e[1];let a;return e[2]!==o||e[3]!==i?(a=r.jsx(l.Suspense,{fallback:s,children:r.jsx(_,{onBack:()=>o({to:"/$org/settings/store",params:{org:i}})})}),e[2]=o,e[3]=i,e[4]=a):a=e[4],a}export{x as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./infiniteQueryObserver-Cuq-6B7N.js";import{c2 as i}from"./index-CFahKaOM.js";function t(e,r){return i(e,u,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./infiniteQueryObserver-Cuq-6B7N.js";import{c2 as u,c3 as n}from"./index-CFahKaOM.js";function a(r,e){return u({...r,enabled:!0,suspense:!0,throwOnError:n},s,e)}export{a as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{e as s,g as l,j as o,l as a,E as n,r as c}from"./index-CFahKaOM.js";import{a as f}from"./index-CwyFo3x2.js";import"./index-CwjvmiaK.js";import"./constants-BXz_d4fe.js";import"./collections-Olx1K63T.js";import"./index-ZcQ1r47L.js";import"./use-virtual-mcp-kH1PMy03.js";import"./use-collections-DcqDFIJE.js";import"./monaco-editor-CLkShlci.js";import"./index-B-ip_PBd.js";import"./accordion-CWNMyDuM.js";import"./agent-icon-i3_kgSR-.js";import"./AlertCircle-CLDKU5ty.js";import"./Tool01-CuB7oJgS.js";import"./XClose-Dt9YjXZl.js";import"./RefreshCcw01-CsMevI8O.js";import"./ArrowNarrowLeft-RDc6uuv4.js";import"./XCircle-BCIvjJwm.js";import"./ArrowUpRight-DPl82rO4.js";import"./ZapSquare-Dr7dOlmN.js";import"./Users03-CZCjMbp7.js";import"./CheckCircle-CfXA9jn1.js";import"./ChevronDown-Usw-ptYZ.js";import"./ChevronRight-DoCnX9k7.js";import"./ChevronUp-DQfNemJG.js";import"./DotsVertical-BVfKaEFA.js";import"./Container-GOtpXA1D.js";import"./Star01-B6e6dHYY.js";import"./Palette-CSJaxEgx.js";import"./SearchMd-Ytd6c0ll.js";import"./index-B1JV7ppc.js";import"./tooltip-V_Rb6MNZ.js";import"./X-BgNHGeBl.js";import"./LinkExternal01-CZs0wlF4.js";import"./Lock01-QeXCU7HG.js";import"./Sun-4ELQnnMk.js";import"./Play-JGp_Cbfe.js";import"./Plus-kEeRyUxB.js";import"./Settings02-CvrBlbBO.js";import"./Shield01-cPWG6TNA.js";import"./Trash01-DqxI7G9k.js";import"./User01-C3LXYecz.js";import"./Zap-o1d5pHAU.js";import"./badge-CrcJY3ID.js";import"./select-gZj19OqY.js";import"./view-mode-toggle-B3PPiEz2.js";import"./layout-DV29n77Q.js";import"./use-connection-DMd3gQky.js";import"./use-mcp-tools-B1ZDkVHC.js";import"./dialog-CPyR3COo.js";import"./index-BAv6Y8f_.js";import"./dropdown-menu-Buw-c9bt.js";import"./integration-icon-B4agjmMV.js";import"./scroll-area-DlG8UFJF.js";import"./index-DacOWTuH.js";import"./empty-state-CxuGKoUZ.js";import"./create-sse-subscription-CxkOgzKf.js";import"./input-BohjAJ_4.js";function ht(){const t=s.c(4);let r;t[0]===Symbol.for("react.memo_cache_sentinel")?(r={from:"/shell/$org/settings/workflows/$itemId"},t[0]=r):r=t[0];const{itemId:e}=l(r);let i;t[1]===Symbol.for("react.memo_cache_sentinel")?(i=o.jsx("div",{className:"flex h-full items-center justify-center",children:o.jsx(a,{size:32,className:"animate-spin text-muted-foreground"})}),t[1]=i):i=t[1];const p=decodeURIComponent(e);let m;return t[2]!==p?(m=o.jsx(n,{children:o.jsx(c.Suspense,{fallback:i,children:o.jsx(f,{itemId:p})})}),t[2]=p,t[3]=m):m=t[3],m}export{ht as default};
|