decocms 3.4.1 → 3.5.0
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-Bc3r3AGq.js → AlertCircle-PL6o_BFM.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-DfEIENBd.js → ArrowUpRight-D0PaRtUX.js} +1 -1
- package/dist/client/assets/{Check--VLhXi5l.js → Check-7lFZ8X77.js} +1 -1
- package/dist/client/assets/{CheckCircle-7xc6-R3M.js → CheckCircle-Bjdxpj1j.js} +1 -1
- package/dist/client/assets/{ChevronDown-66ErjaPf.js → ChevronDown-DBeUwQYn.js} +1 -1
- package/dist/client/assets/{ChevronLeft-DyW6EtsM.js → ChevronLeft-CPLLwlIr.js} +1 -1
- package/dist/client/assets/{ChevronRight-C87PRbBa.js → ChevronRight-BVo14pyp.js} +1 -1
- package/dist/client/assets/{ChevronUp-BuPeXu8C.js → ChevronUp-XvIiv-NV.js} +1 -1
- package/dist/client/assets/{Container-cZo3l6OX.js → Container-BoahFo7F.js} +1 -1
- package/dist/client/assets/{DotsVertical-CQgc8nSx.js → DotsVertical-ntZiwo0t.js} +1 -1
- package/dist/client/assets/{Eye-DHHjYDbX.js → Eye-DkuHnUAW.js} +1 -1
- package/dist/client/assets/{FilterLines-CWR_eJ7z.js → FilterLines-DgBfCVyf.js} +1 -1
- package/dist/client/assets/{Globe01-B10jCcNH.js → Globe01-CcGroxBm.js} +1 -1
- package/dist/client/assets/{HardDrive-7KMC69UH.js → HardDrive-C4j857Fq.js} +1 -1
- package/dist/client/assets/{Key01-CTKRB2Cd.js → Key01-o0EwVLiR.js} +1 -1
- package/dist/client/assets/{LayoutLeft-SQH1HcmI.js → LayoutLeft-CD_Gf1ZP.js} +1 -1
- package/dist/client/assets/{LinkExternal01-CjT-4hM8.js → LinkExternal01-BrUoXKJY.js} +1 -1
- package/dist/client/assets/{Monitor01-svtG00ql.js → Monitor01-D61B3ma3.js} +1 -1
- package/dist/client/assets/{Palette-CA_16qMN.js → Palette-CrqqEUcE.js} +1 -1
- package/dist/client/assets/{Play-CrdarOgl.js → Play-UJPgqc1U.js} +1 -1
- package/dist/client/assets/{Plus-C9icoBmX.js → Plus-Tnr53r7A.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-D1tvoH2_.js → RefreshCcw01-Cv0pFCb4.js} +1 -1
- package/dist/client/assets/{SearchMd-Di6_vvQ1.js → SearchMd-UxzEV07r.js} +1 -1
- package/dist/client/assets/{Settings02-BylJiOHK.js → Settings02-DhqQsm8K.js} +1 -1
- package/dist/client/assets/{Shield01-CDSs18-B.js → Shield01-DpLC5M3q.js} +1 -1
- package/dist/client/assets/{Star01-D1DEXGAi.js → Star01-sX328yCS.js} +1 -1
- package/dist/client/assets/{Stars01-UWs0NZ30.js → Stars01-Dv9c4Cee.js} +1 -1
- package/dist/client/assets/{Stars02-CXAcgX2g.js → Stars02-f0XE-eqW.js} +1 -1
- package/dist/client/assets/{Sun-CCiXRotp.js → Sun-PyN_Wt4r.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-BU3C5ze8.js → SwitchHorizontal01-B9vZRv9t.js} +1 -1
- package/dist/client/assets/{Tool01-BMk00CcA.js → Tool01-yp4kJRUu.js} +1 -1
- package/dist/client/assets/{Trash01-MTKniuxn.js → Trash01-CZeQBZf_.js} +1 -1
- package/dist/client/assets/{Upload01-DsrMMWgf.js → Upload01-SHM-fhC7.js} +1 -1
- package/dist/client/assets/{User01-DShN8gQ-.js → User01-DW9hMolk.js} +1 -1
- package/dist/client/assets/{Users01-Bvh39Ydu.js → Users01-D2wb7idE.js} +1 -1
- package/dist/client/assets/{Users03--pQkY_Pm.js → Users03-DbJl-FlT.js} +1 -1
- package/dist/client/assets/{X-D-FyhysP.js → X-BH0VE8jB.js} +1 -1
- package/dist/client/assets/{XCircle-Pgrh_mFJ.js → XCircle-DLzFRLwJ.js} +1 -1
- package/dist/client/assets/{XClose-CXixB7oH.js → XClose-DNgFZbzC.js} +1 -1
- package/dist/client/assets/{Zap-BcF-Iz_3.js → Zap-DplWtEq0.js} +1 -1
- package/dist/client/assets/{ZapSquare-BH297b52.js → ZapSquare-xDebNl-H.js} +1 -1
- package/dist/client/assets/{ZoomOut-qupe1GUj.js → ZoomOut-CrlW2TUB.js} +1 -1
- package/dist/client/assets/{access-gate-b8qBeVwB.js → access-gate-BwTL-vjj.js} +1 -1
- package/dist/client/assets/{accordion-bX483Ztz.js → accordion-BTEQZzrz.js} +1 -1
- package/dist/client/assets/{add-section-modal-wMptfoHV.js → add-section-modal-DACQp29A.js} +1 -1
- package/dist/client/assets/{agent-capabilities-ADaK_qqp.js → agent-capabilities-BPmYbqGN.js} +1 -1
- package/dist/client/assets/{agent-icon-6l7Nwe2K.js → agent-icon-BzrzSnAz.js} +1 -1
- package/dist/client/assets/{agent-icons-BDS9BBHh.js → agent-icons-Cd0vLj6N.js} +1 -1
- package/dist/client/assets/{agents-list-BdFiPs3r.js → agents-list-C6qqAI5_.js} +1 -1
- package/dist/client/assets/{ai-providers-lM-GGoBl.js → ai-providers-kZI6pudu.js} +1 -1
- package/dist/client/assets/{alert-Ta86Z4_L.js → alert-CHelH7PN.js} +1 -1
- package/dist/client/assets/{alert-dialog-_2G9ccD7.js → alert-dialog-D0lyxgq7.js} +1 -1
- package/dist/client/assets/app-editor-BEzuyKZz.js +1 -0
- package/dist/client/assets/{auth-catchall-BdHpJwKo.js → auth-catchall-eEEVSQiw.js} +1 -1
- package/dist/client/assets/{auth-split-layout-DVUC3dWq.js → auth-split-layout-J4nbOqGk.js} +1 -1
- package/dist/client/assets/{automation-list-row-BNHDxEG_.js → automation-list-row-qYSYtkIF.js} +1 -1
- package/dist/client/assets/{automation-runs-BbNb5m5Z.js → automation-runs-C4iv4rJG.js} +1 -1
- package/dist/client/assets/{automations-ChMgB7Hm.js → automations-BBsp-bnq.js} +1 -1
- package/dist/client/assets/{avatar-KTqg6Pir.js → avatar-dR7ViKE5.js} +1 -1
- package/dist/client/assets/{badge-jK5_JNPO.js → badge-REAPd24g.js} +1 -1
- package/dist/client/assets/{brand-context-D1YLW65X.js → brand-context-DKgMKp8i.js} +1 -1
- package/dist/client/assets/{buckets-CZodJDYe.js → buckets-CAG2foTd.js} +1 -1
- package/dist/client/assets/{calendar-DFy-BKZq.js → calendar-C4DQ4fqJ.js} +1 -1
- package/dist/client/assets/{capability-load-error-DUP-Lw9V.js → capability-load-error-BiSiPTFT.js} +1 -1
- package/dist/client/assets/{card-Ce7y-Nqu.js → card-DjJMgfjm.js} +1 -1
- package/dist/client/assets/{chat-context-CpKbwwmM.js → chat-context-dBrooU1v.js} +1 -1
- package/dist/client/assets/{checkbox-MO2_GITU.js → checkbox-DLgoLQSR.js} +1 -1
- package/dist/client/assets/{cli-auth-success-XZzsr92m.js → cli-auth-success-Cf1STb5K.js} +1 -1
- package/dist/client/assets/{collection-detail-Bv6I7A_k.js → collection-detail-BGZmeA1k.js} +1 -1
- package/dist/client/assets/{collection-display-button-DzXqmtbd.js → collection-display-button-DLtr23Rv.js} +1 -1
- package/dist/client/assets/{collection-search-CPYfTi84.js → collection-search-DYrAflR5.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DgzLrzuP.js → collection-table-wrapper-BZmV-NZH.js} +1 -1
- package/dist/client/assets/{collection-tabs-CIsqNrxU.js → collection-tabs-Y_drDohR.js} +1 -1
- package/dist/client/assets/{collections-B-PXiD2Y.js → collections-UXWGkaFt.js} +1 -1
- package/dist/client/assets/{command-BHmAxNRB.js → command-VnXMa00z.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-BQZD1I8n.js → connect-desktop-dialog-VMfxWtQ-.js} +1 -1
- package/dist/client/assets/{connection-card-BHzG8ppu.js → connection-card-DK49rHkZ.js} +1 -1
- package/dist/client/assets/{connection-detail-BlmixFGl.js → connection-detail-DzUm5yVg.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CgKn2eM9.js → connection-form-helpers-BSgnmPKP.js} +1 -1
- package/dist/client/assets/{connections-D5zy3mYf.js → connections-Bh992QKN.js} +1 -1
- package/dist/client/assets/{constants-DI_u-hVk.js → constants-B521j7ay.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-DPWhf2bX.js → decopilot-sse-pool-D4rmdWQS.js} +1 -1
- package/dist/client/assets/{dialog-Bt3zXcK6.js → dialog-DqPItn-g.js} +1 -1
- package/dist/client/assets/{domain-settings-CZnFXOwr.js → domain-settings-BXCL_xbf.js} +1 -1
- package/dist/client/assets/{drawer-DeHC5s3g.js → drawer-CPIIyCcW.js} +1 -1
- package/dist/client/assets/{dropdown-menu-SwrAlbwN.js → dropdown-menu-2uydtPAy.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-WDrQTfck.js → dynamic-plugin-layout-RNpkQxgu.js} +1 -1
- package/dist/client/assets/{empty-state-DlCayRAK.js → empty-state-BLunjf1m.js} +1 -1
- package/dist/client/assets/{empty-state-BJFB-AwN.js → empty-state-DLBfWl6Y.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CrMYEI5i.js → extract-connection-data-aP9VrOhv.js} +1 -1
- package/dist/client/assets/{features-BgkDxOlu.js → features-CA4znDNw.js} +1 -1
- package/dist/client/assets/{file-explorer-DrueRu5k.js → file-explorer-aonQXi96.js} +1 -1
- package/dist/client/assets/{file-type-icon-BHF_Ovux.js → file-type-icon-CqbDePIX.js} +1 -1
- package/dist/client/assets/{files-BCcd3t2S.js → files-d-57Qs8I.js} +1 -1
- package/dist/client/assets/{form-8jBGaVW7.js → form-BIWGXIbK.js} +1 -1
- package/dist/client/assets/{general-BJkPBrz3.js → general-CXp3pwbL.js} +1 -1
- package/dist/client/assets/{generate-id-Bfx7nOJH.js → generate-id-CdwRTiX7.js} +1 -1
- package/dist/client/assets/{github-repo-picker-F4vLHgJ-.js → github-repo-picker-Bu6oV3t1.js} +1 -1
- package/dist/client/assets/{header-tab-button-DCSg63Wl.js → header-tab-button-Btqu8vce.js} +1 -1
- package/dist/client/assets/{hover-card-DcJvwauT.js → hover-card-reOs8OTf.js} +1 -1
- package/dist/client/assets/{image-field-cind3dwC.js → image-field-DoQO0nqy.js} +1 -1
- package/dist/client/assets/{index-C1kxS2Io.js → index-2xBvfJLJ.js} +1 -1
- package/dist/client/assets/{index-ChzbgMa2.js → index-BIMoUWYp.js} +1 -1
- package/dist/client/assets/{index-BzoFvbIH.js → index-BYSwFuRs.js} +1 -1
- package/dist/client/assets/{index-DlcvFOU2.js → index-C1MLUCFq.js} +1 -1
- package/dist/client/assets/{index-C_oSBqFD.js → index-C4HbvW_W.js} +3 -3
- package/dist/client/assets/{index-C3tcbzRj.js → index-CM0AvljI.js} +1 -1
- package/dist/client/assets/{index-DQj7btfC.js → index-CgoPiptB.js} +1 -1
- package/dist/client/assets/{index-Bac2tQWh.js → index-CuEl7ZCd.js} +1 -1
- package/dist/client/assets/{index-CfGIr4vM.js → index-D8H8ytWG.js} +23 -23
- package/dist/client/assets/{index-BrIVZCzt.js → index-DElKj3LD.js} +1 -1
- package/dist/client/assets/{index-C0t_9xyr.js → index-DVHW5IXE.js} +1 -1
- package/dist/client/assets/{index-DML39Lt-.js → index-FhXRIQKJ.js} +1 -1
- package/dist/client/assets/{index-DEWYXjIf.js → index-WNtnEHJ2.js} +1 -1
- package/dist/client/assets/{index-BIANv7ur.js → index-_FSABeX9.js} +1 -1
- package/dist/client/assets/{index-redirect-KnAJlqvx.js → index-redirect-3tS7mNzU.js} +1 -1
- package/dist/client/assets/{index-d7-A3CDs.js → index-xesYw4pg.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-w8EJyyrI.js → infiniteQueryObserver-IbMlOZg5.js} +1 -1
- package/dist/client/assets/{input-Ct22kLSY.js → input-B5k-Hbp3.js} +1 -1
- package/dist/client/assets/{integration-icon-CNf7sZ5b.js → integration-icon-C7p8BtkI.js} +1 -1
- package/dist/client/assets/{label-CvDTa89d.js → label-BvvzAAWu.js} +1 -1
- package/dist/client/assets/{layout-Dkxj2bFg.js → layout-BMq59AVz.js} +1 -1
- package/dist/client/assets/{login-Dv6Rz1bY.js → login-BIU3L6eK.js} +1 -1
- package/dist/client/assets/{members-BQXsk1m4.js → members-DGFZlZSL.js} +1 -1
- package/dist/client/assets/{monaco-editor-DR4yoUjc.js → monaco-editor-ByT33GfF.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Co70p3-n.js → monitoring-stats-row-VdVj1bTz.js} +1 -1
- package/dist/client/assets/{oauth-callback-CQPHoHy-.js → oauth-callback-C1JOUQQn.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-BJeYyFlX.js → oauth-callback-ai-provider-CUbQRMCQ.js} +1 -1
- package/dist/client/assets/{onboarding-CzNreyu4.js → onboarding-CY5W5FNv.js} +1 -1
- package/dist/client/assets/{org-install-aZxuYxoI.js → org-install-DLtxfbHw.js} +1 -1
- package/dist/client/assets/{org-layout-CR6iFjC9.js → org-layout-BqXWDd1-.js} +1 -1
- package/dist/client/assets/{org-plugin-layout-Ah6P36_M.js → org-plugin-layout-CbMQy1Lw.js} +1 -1
- package/dist/client/assets/{page-seo-form-BzX1ts5p.js → page-seo-form-BmCl6Xlh.js} +1 -1
- package/dist/client/assets/page-seo-sheet-Ced60-cr.js +1 -0
- package/dist/client/assets/{pair--AN1yq4g.js → pair-Bhj3cOFh.js} +2 -2
- package/dist/client/assets/{plugin-empty-state-CIZ1bBrP.js → plugin-empty-state-dJCoaDDO.js} +1 -1
- package/dist/client/assets/{plugin-header-CExvgCKI.js → plugin-header-BmoMpOXz.js} +1 -1
- package/dist/client/assets/{plugin-layout-DS-orBC-.js → plugin-layout-BR81jn44.js} +1 -1
- package/dist/client/assets/{popover-DXn7orE4.js → popover-CFPzrMHB.js} +1 -1
- package/dist/client/assets/{post-editor-bszZQHpg.js → post-editor-GGFyFznW.js} +1 -1
- package/dist/client/assets/{primitives-CIXky-Gt.js → primitives-DYqJBFCL.js} +1 -1
- package/dist/client/assets/{profile-CZWeJMEP.js → profile-Cfmj1cf7.js} +1 -1
- package/dist/client/assets/project-app-view-eVezvxZo.js +1 -0
- package/dist/client/assets/record-editor-52XgVwcw.js +1 -0
- package/dist/client/assets/registry-CiIpQiyq.js +2 -0
- package/dist/client/assets/{registry-layout-DjFUi3yC.js → registry-layout-BIYEFhu4.js} +1 -1
- package/dist/client/assets/{require-capability-DDbNSPG5.js → require-capability-OYQug4J7.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Bpv6G5uE.js → required-auth-layout-Bcp4IxxD.js} +1 -1
- package/dist/client/assets/{reset-password-D1T0PiTj.js → reset-password-suzhQWSU.js} +1 -1
- package/dist/client/assets/{resizable-Bi3jkg9o.js → resizable-IfVaIg_U.js} +1 -1
- package/dist/client/assets/{roles-BBWw8puD.js → roles-BPJBENaC.js} +1 -1
- package/dist/client/assets/{save-status-PzXq6KUK.js → save-status-BxvWi0ix.js} +1 -1
- package/dist/client/assets/{schema-form-CM7pfylQ.js → schema-form-DbvvSf_B.js} +1 -1
- package/dist/client/assets/{scroll-area-BNzrPnq5.js → scroll-area-DYzEAvWY.js} +1 -1
- package/dist/client/assets/{search-input-C76EA-t6.js → search-input-BMW004dV.js} +1 -1
- package/dist/client/assets/{secrets-DMEa7GIW.js → secrets-Bv4krrbm.js} +1 -1
- package/dist/client/assets/{sections-editor--GuZPQzC.js → sections-editor-tHHOdLOL.js} +1 -1
- package/dist/client/assets/{select-D_4UU9rK.js → select-DPygLpWH.js} +1 -1
- package/dist/client/assets/{select-model-cV_VUU8G.js → select-model-BS2yzBPq.js} +1 -1
- package/dist/client/assets/{seo-editor-fhccoPNR.js → seo-editor-CCPmPYRi.js} +1 -1
- package/dist/client/assets/{settings-layout-DH37q17x.js → settings-layout-BV_kMffR.js} +1 -1
- package/dist/client/assets/{settings-section-DsXtuKDY.js → settings-section-C7gs1p6F.js} +1 -1
- package/dist/client/assets/{sheet-D01YX9h0.js → sheet-D9aXq4ta.js} +1 -1
- package/dist/client/assets/{shell-controls-CNVI6ZJJ.js → shell-controls-C56-Ps3x.js} +1 -1
- package/dist/client/assets/{shell-layout-xPMsY5hC.js → shell-layout-tWuhPjHz.js} +1 -1
- package/dist/client/assets/{shell-route-loading-jPQ9XajT.js → shell-route-loading-Cy1LF1Kf.js} +1 -1
- package/dist/client/assets/{sidebar-CJNdWlwy.js → sidebar-DB4iKQD5.js} +1 -1
- package/dist/client/assets/{skeleton-DEf5lpEA.js → skeleton-DH0H1fU3.js} +1 -1
- package/dist/client/assets/{sortable.esm-KhkNVCRe.js → sortable.esm-BKA03RQh.js} +1 -1
- package/dist/client/assets/{spinner-srK7FwNe.js → spinner-C0Im7y7X.js} +1 -1
- package/dist/client/assets/{sso-BLXKmxlD.js → sso-BYfRBv2e.js} +1 -1
- package/dist/client/assets/{store-DydXTg6V.js → store-Cyr13yyM.js} +1 -1
- package/dist/client/assets/store-registry-DIjY8LQB.js +2 -0
- package/dist/client/assets/{switch-Cbu6JSI9.js → switch-BGtkcqu8.js} +1 -1
- package/dist/client/assets/{tab-id-CbYpEVAZ.js → tab-id-B1KAdtlk.js} +1 -1
- package/dist/client/assets/{table-dr9K2jWM.js → table-B34ZqNGn.js} +1 -1
- package/dist/client/assets/{tabs-CJU0nxr6.js → tabs-52tGcLiU.js} +1 -1
- package/dist/client/assets/{task-status-Dyf8qaxz.js → task-status-Dq99ypn5.js} +1 -1
- package/dist/client/assets/{textarea-BquesfD_.js → textarea-BnccT-U9.js} +1 -1
- package/dist/client/assets/{toggle-group-m3q7pubc.js → toggle-group-E6TPCKmI.js} +1 -1
- package/dist/client/assets/{toolbar-Bkxu3n7s.js → toolbar-B-Xmvyb0.js} +1 -1
- package/dist/client/assets/{tools-list-CG_BLK1j.js → tools-list-CZ0YST_J.js} +1 -1
- package/dist/client/assets/{tooltip-Bm-whGHF.js → tooltip-DgiqborV.js} +1 -1
- package/dist/client/assets/{types-Bkz2p_os.js → types-DP-Q3z5y.js} +1 -1
- package/dist/client/assets/{use-ai-providers-B82V9Np8.js → use-ai-providers-B_aWh-J8.js} +1 -1
- package/dist/client/assets/{use-automations-B5qTxkL8.js → use-automations-CQqGzVrP.js} +1 -1
- package/dist/client/assets/{use-capability-DpFGw1TU.js → use-capability-CzlbJT0x.js} +1 -1
- package/dist/client/assets/{use-collections-iUV-5kFm.js → use-collections-CFs8myDl.js} +1 -1
- package/dist/client/assets/{use-connection-DTKE65yR.js → use-connection-DjURtMK5.js} +1 -1
- package/dist/client/assets/{use-copy-Dr7XRETN.js → use-copy-CKGAQPRW.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DlMteKXP.js → use-create-virtual-mcp-GqhamUF-.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DFapff8c.js → use-debounced-autosave-iWsKgUnH.js} +1 -1
- package/dist/client/assets/{use-delete-connection-CU96IyMZ.js → use-delete-connection-CjdkJ1LG.js} +1 -1
- package/dist/client/assets/{use-file-configs-C8ipJXZL.js → use-file-configs-DD5bg8yH.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-KU0QCoEE.js → use-infinite-scroll-Bo7I5Z4-.js} +1 -1
- package/dist/client/assets/{use-list-state-DtwRJx6R.js → use-list-state-BxpSC3kw.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-aLA3FcF_.js → use-mcp-prompts-BNFsBgD1.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-CK1DUQVb.js → use-mcp-tools-DCbS4kMk.js} +1 -1
- package/dist/client/assets/{use-members-C9apz-8a.js → use-members-DZ4oSOx-.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-DRRtr51U.js → use-navigate-to-agent-DwD_R1XG.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CI8XyYuM.js → use-org-auth-client-v3u1LDk5.js} +1 -1
- package/dist/client/assets/{use-org-sso-CYBgAyDV.js → use-org-sso-Ck4B3T6D.js} +1 -1
- package/dist/client/assets/{use-organization-roles-C5ABG30J.js → use-organization-roles-BIilFNn5.js} +1 -1
- package/dist/client/assets/{use-organization-settings-B4ywx3QZ.js → use-organization-settings-difToZl3.js} +1 -1
- package/dist/client/assets/{use-registry-connections-B-c9LId-.js → use-registry-connections-KEGYdtt_.js} +1 -1
- package/dist/client/assets/{use-secrets-D3irvtLI.js → use-secrets-DHcsXoUs.js} +1 -1
- package/dist/client/assets/{use-status-sounds-BEbMXd3N.js → use-status-sounds-CPmXHEGX.js} +1 -1
- package/dist/client/assets/{use-view-mode-Jd_CE1Mx.js → use-view-mode-Bq2h-mAH.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DsdNWb58.js → use-virtual-mcp-By6PZUzg.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BkurBcOt.js +1 -0
- package/dist/client/assets/{useRouterState-CU2GqlKv.js → useRouterState-BBlCl4XE.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-C21DKA3_.js +1 -0
- package/dist/client/assets/{user-sLZtiN2i.js → user-CBbH_JeB.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DSmCr2tD.js → view-mode-toggle-B0_LJI8Z.js} +1 -1
- package/dist/client/assets/{workflow-BK9KKo6T.js → workflow-Ce5v7OlY.js} +1 -1
- package/dist/client/assets/workflow-detail-CMT7JAKv.js +1 -0
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +15 -9
- package/dist/server/server.js +7 -5
- package/package.json +1 -1
- package/dist/client/assets/app-editor-BJ_HJXFs.js +0 -1
- package/dist/client/assets/page-seo-sheet-v7xZnlYi.js +0 -1
- package/dist/client/assets/project-app-view-DJMvDwFa.js +0 -1
- package/dist/client/assets/record-editor-C5KWfSLg.js +0 -1
- package/dist/client/assets/registry-CX2hi2E3.js +0 -2
- package/dist/client/assets/store-registry-BJqdtxTv.js +0 -2
- package/dist/client/assets/useInfiniteQuery-DrZL_IGs.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CN1mQR7i.js +0 -1
- package/dist/client/assets/workflow-detail-DzASvQVR.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -101060,9 +101060,13 @@ var ShareWithUserInputSchema = exports_external.object({
|
|
|
101060
101060
|
name: exports_external.string().optional().describe("Filename to surface in the chat UI (default: basename of source). " + "Cannot contain slashes.")
|
|
101061
101061
|
});
|
|
101062
101062
|
var READ_DESCRIPTION = "Read a file. For text files, returns content with line numbers (use offset " + "and limit for large files). For images (jpeg, png, gif, webp), the image " + "is injected into the next turn as a vision input \\u2014 do NOT describe what " + "you 'expect' to see, just call read and look at the next message. Other " + "binary formats are not supported; use a format-specific skill " + "(e.g. pptx-extract for .pptx).";
|
|
101063
|
-
|
|
101063
|
+
function buildWriteDescription(orgFs) {
|
|
101064
|
+
return "Write content to a file in the VM's project directory. " + \`Creates parent directories if needed. Overwrites existing files entirely.
|
|
101064
101065
|
|
|
101065
|
-
\` + "
|
|
101066
|
+
\` + (orgFs ? "Viewable HTML artifacts get a LIVE PREVIEW in the chat side panel " + "and persist in the org's shared folder when written under " + "\`org/<your-org-slug>/\` (lowercase-kebab names):\\n" + "- Presentation decks / slides \\u2192 \`org/<your-org-slug>/decks/<name>.html\` " + "\\u2014 read \`/mnt/skills/public/slides/SKILL.md\` FIRST and create the " + \`deck with its CLI.
|
|
101067
|
+
\` + "- Standalone pages (landing pages, brand kits, one-pagers) \\u2192 " + "\`org/<your-org-slug>/pages/<name>.html\` \\u2014 single self-contained " + \`HTML file.
|
|
101068
|
+
\` + "HTML written anywhere else will not render a preview." : "Reserved path \\u2014 \`pages/<slug>.html\`: writes to this prefix are " + "automatically published to the org's object storage and rendered " + "as a live preview in the chat side panel. Use this whenever the " + "user wants a viewable HTML page (landing pages, brand kits, " + "one-pagers). Slug must be lowercase kebab (e.g. " + "\`pages/landing.html\`). HTML written elsewhere stays sandbox-only " + "and will not render a preview.");
|
|
101069
|
+
}
|
|
101066
101070
|
var EDIT_DESCRIPTION = "Perform exact string replacement in a file in the VM. " + "old_string must be unique in the file unless replace_all is true.";
|
|
101067
101071
|
var GREP_DESCRIPTION = "Search file contents in the VM using ripgrep. " + "Supports regex patterns, file type filtering via glob, and context lines.";
|
|
101068
101072
|
var GLOB_DESCRIPTION = "Find files by name pattern in the VM's project directory. " + "Uses ripgrep for gitignore-aware matching. Returns relative file paths.";
|
|
@@ -101163,7 +101167,7 @@ function createVmTools(params) {
|
|
|
101163
101167
|
});
|
|
101164
101168
|
const write = tool({
|
|
101165
101169
|
needsApproval: approvalFor(TOOL_APPROVAL.write),
|
|
101166
|
-
description:
|
|
101170
|
+
description: buildWriteDescription(orgFs),
|
|
101167
101171
|
inputSchema: zodSchema(WriteInputSchema),
|
|
101168
101172
|
execute: async (input) => {
|
|
101169
101173
|
const daemonResult = await call("/_sandbox/write", input);
|
|
@@ -104779,7 +104783,7 @@ ${c.stack}`;f.reject(d)}else f.resolve(_)}});return $.requestSubject=i,this.prot
|
|
|
104779
104783
|
`);if(g===-1)return;let h=$.subarray(0,g).toString("utf8"),E=$.subarray(g+4),v=h.split(`\r
|
|
104780
104784
|
`,1)[0]??"";if(!/^HTTP\/1\.[01] 101(?:\s|$)/.test(v)){e8(i,1011,t.upstreamErrorReason);try{c.end()}catch{}return}d=!0,i.data.upstream=c;let r=pXl((x,y)=>{try{if(x===1)i.send(y.toString("utf8"));else if(x===2)i.send(y);else if(x===8){let{code:O,reason:X}=sXl(y);e8(i,O,X);try{c.end()}catch{}}}catch{}});if(c.removeAllListeners("data"),E.length>0)r(E);c.on("data",(x)=>r(x));for(let x of i.data.pending)try{c.write(fki(x,!0))}catch{}i.data.pending.length=0})}function oXl(i,t){let u=[`GET ${i} HTTP/1.1`];for(let[l,n]of Object.entries(t))u.push(`${l}: ${n}`);return u.push("",""),u.join(`\r
|
|
104781
104785
|
`)}function e8(i,t,u){try{if(t!==void 0)i.close(t,u??"");else i.close()}catch{}}function fki(i,t,u){let l,n;if(typeof i==="string")l=Buffer.from(i,"utf8"),n=1;else if(i instanceof ArrayBuffer)l=Buffer.from(i),n=2;else if(Buffer.isBuffer(i))l=i,n=2;else l=Buffer.from(i),n=2;let f=u??n,c=l.length,$=[];$.push(128|f&15);let d=t?128:0;if(c<126)$.push(d|c);else if(c<65536)$.push(d|126,c>>8&255,c&255);else $.push(d|127,0,0,0,0),$.push(c>>>24&255,c>>>16&255,c>>>8&255,c&255);if(t){let _=$St(4),g=Buffer.alloc(c);for(let h=0;h<c;h++)g[h]=l[h]^_[h&3];return Buffer.concat([Buffer.from($),_,g])}return Buffer.concat([Buffer.from($),l])}function sXl(i){if(i.length<2)return{code:1000,reason:""};return{code:i.readUInt16BE(0),reason:i.subarray(2).toString("utf8")}}function pXl(i){let t=Buffer.alloc(0);return(u)=>{t=t.length===0?u:Buffer.concat([t,u]);while(!0){if(t.length<2)return;let l=t[0],n=t[1],f=l&15,c=(n&128)!==0,$=n&127,d=2;if($===126){if(t.length<d+2)return;$=t[d]<<8|t[d+1],d+=2}else if($===127){if(t.length<d+8)return;$=t[d+4]*16777216+(t[d+5]<<16|t[d+6]<<8|t[d+7]),d+=8}let _=null;if(c){if(t.length<d+4)return;_=t.subarray(d,d+4),d+=4}if(t.length<d+$)return;let g=t.subarray(d,d+$);if(_){let h=Buffer.alloc($);for(let E=0;E<$;E++)h[E]=g[E]^_[E&3];g=h}t=t.subarray(d+$),i(f,g)}}}var aXl=256;var hSt=w(()=>{cSt()});function ESt(i){if(typeof i!=="string"||i.length===0)return null;let t=i.lastIndexOf(":");if(i.startsWith("["))return null;let l=(t>=0?i.slice(0,t):i).replace(/\.$/,"").toLowerCase(),n=".localhost";if(!l.endsWith(n))return null;let f=l.slice(0,-n.length);if(f.length===0)return null;if(f.includes("."))return null;return f}async function vSt(i){let t=gSt({maxPendingFrames:i.maxPendingWsFrames??i9l,backlogOverflowReason:"ingress backlog overflow"}),u=Bun.serve({port:i.port,hostname:"127.0.0.1",idleTimeout:0,async fetch(l,n){let f=l.headers.get("host"),c=ESt(f);if(!c)return new Response("not found",{status:404});let $=i.lookupSandboxPort(c);if(!$){if(l.headers.get("upgrade")==="websocket")return new Response("unknown handle",{status:404});return new Response(t9l,{status:503,headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store","Retry-After":"1"}})}if(l.headers.get("upgrade")==="websocket"){let h=new URL(l.url);if(!n.upgrade(l,{data:_St({port:$,pathQuery:`${h.pathname}${h.search}`,protocols:dSt(l.headers)})}))return new Response("ws upgrade failed",{status:400});return}let d=new URL(l.url),_=`http://127.0.0.1:${$}${d.pathname}${d.search}`,g=new Headers(l.headers);return g.set("host",`127.0.0.1:${$}`),fetch(_,{method:l.method,headers:g,body:l.body,redirect:"manual"})},websocket:{open:t.open,message:t.message,close:t.close}});return{port:u.port??0,async stop(){u.stop(!0)}}}var i9l=256,t9l='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the local sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>';var rSt=w(()=>{hSt()});async function cki(i=$9l){let t=["decopilot-sandbox","body-offload"],[u,l]=await Promise.all([i.detectClaudeCode().catch(()=>!1),i.detectCodex().catch(()=>!1)]);if(u)t.push("claude-code");if(l)t.push("codex");return t}function l9l(i){return u9l.filter((t)=>!i.includes(t))}function n9l(i,t){let u=t.filter((l)=>!i.includes(l));return i.push(...u),u}function wSt(i,t={}){let u=t.detect??(()=>cki()),l=setInterval(()=>{if(l9l(i).length===0)return;u().then((n)=>{let f=n9l(i,n);if(f.length>0)t.onChange?.(f)}).catch(()=>{})},t.intervalMs??60000);return l.unref?.(),()=>clearInterval(l)}async function f9l(){try{let{query:i}=await import("@anthropic-ai/claude-agent-sdk"),t=i({prompt:"",options:{maxTurns:1}}),u=await t.accountInfo();return t.return(void 0),Boolean(u.email)}catch{return!1}}async function c9l(){try{let i=Bun.spawn(["codex","--version"],{stdout:"ignore",stderr:"ignore"}),t=setTimeout(()=>i.kill(),1e4),u=await i.exited;return clearTimeout(t),u===0}catch{return!1}}var u9l,$9l;var xSt=w(()=>{u9l=["claude-code","codex"];$9l={detectClaudeCode:f9l,detectCodex:c9l}});import{randomBytes as d9l}from"crypto";import{mkdir as _9l,readFile as g9l,writeFile as h9l}from"fs/promises";import{dirname as E9l,join as v9l}from"path";function r9l(i){return v9l(i,"machine-id")}async function DSt(i){let t=r9l(i);try{let n=(await g9l(t,"utf8")).trim();if(n)return n}catch{}let u=d9l(16).toString("hex");return await _9l(E9l(t),{recursive:!0}),await h9l(t,u),u}var ySt=()=>{};import{randomBytes as w9l}from"crypto";import{mkdir as x9l}from"fs/promises";import{createServer as D9l}from"net";import{join as y9l}from"path";function OSt(i,t){return Error(`sandbox failed to start: ${i}`,{cause:t})}function O9l(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function X9l(i){if(i instanceof Error){let t=i.cause;if(t instanceof Error&&t.message)return t.message;return i.message}return String(i)}function XSt(i){let t=i.maxSandboxes??20,u=new Map,l=i.pickPort??N9l,n=i.fetchImpl??fetch,f=i.resolvePreviewUrl??((E,v)=>`http://127.0.0.1:${v}`),c=(E)=>{try{i.onEvent?.(E)}catch{}},$=async(E)=>{let v=new AbortController,r=setTimeout(()=>v.abort(),1500);try{let x=await n(`${E}/health`,{signal:v.signal});if(!x.ok)console.warn(`[user-desktop] probe ${E}/health \u2192 ${x.status} (treating as dead)`);return x.ok}catch(x){return console.warn(`[user-desktop] probe ${E}/health failed: ${x instanceof Error?x.message:String(x)} (treating as dead)`),!1}finally{clearTimeout(r)}},d=(E)=>{console.warn(`[user-desktop] evicting dead daemon handle=${E.handle} port=${E.port}`);try{E.process.kill("SIGTERM")}catch{}if(u.get(E.handle)===E)u.delete(E.handle),c({handle:E.handle,phase:"evicted"})},_=new Map;function g(){if(u.size<t)return;let E=[...u.values()].filter((r)=>r.activeDispatchCount===0).sort((r,x)=>r.lastUsedAt-x.lastUsedAt);if(E.length===0){console.warn(`[user-desktop] at cap ${u.size}/${t} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let v=E[0];console.log(`[user-desktop] evicting LRU victim handle=${v.handle} port=${v.port} (cap ${t} reached, size=${u.size})`);try{v.process.kill("SIGTERM")}catch{}u.delete(v.handle),c({handle:v.handle,phase:"evicted"})}let h=async(E)=>{c({handle:E.handle,phase:"spawning"}),g();let v=y9l(i.dataDir,"sandboxes",E.handle);await x9l(v,{recursive:!0}),console.log(`[user-desktop] ensure handle=${E.handle} repo=${E.repo?.cloneUrl??"(none)"} branch=${E.repo?.branch??"(none)"} runtime=${E.workload?.runtime??"(autodetect)"} pm=${E.workload?.packageManager??"(autodetect)"}`);let r=w9l(24).toString("hex"),[x,y]=await Promise.all([l(),l()]);console.log(`[user-desktop] spawn handle=${E.handle} port=${x} devPort=${y} workdir=${v}`);let O=await Promise.resolve(i.spawnDaemon({workdir:v,handle:E.handle,port:x,daemonToken:r,offloadAllowedHosts:E.offloadAllowedHosts??[],offloadAllowSameHostDev:E.offloadAllowSameHostDev??!1,orgFsConfigJson:E.orgFsConfigJson}));try{try{await i.waitForHealth(x)}catch(J){throw OSt("the sandbox didn't come online in time",J)}console.log(`[user-desktop] healthy handle=${E.handle} port=${x} \u2014 posting config`);try{await i.postConfig(x,y,{repo:E.repo,workload:E.workload,operator:E.operator},r)}catch(J){throw OSt(O9l(J)?"configuration timed out":"the sandbox rejected its configuration",J)}}catch(J){console.error(`[user-desktop] sandbox bring-up failed handle=${E.handle} port=${x} (killing daemon):`,J);try{O.kill("SIGKILL")}catch{}throw c({handle:E.handle,phase:"failed",error:X9l(J)}),J}let X=`http://127.0.0.1:${x}`,N=f(E.handle,x);console.log(`[user-desktop] ready handle=${E.handle} port=${x} sandboxApiUrl=${X} previewUrl=${N}`);let U={handle:E.handle,port:x,process:O,sandboxApiUrl:X,previewUrl:N,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:r};if(u.set(E.handle,U),c({handle:E.handle,phase:"ready",port:x,previewUrl:N}),O.exited)O.exited.then(()=>{if(u.get(E.handle)===U)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${E.handle} port=${x} \u2014 removing from cache`),u.delete(E.handle),c({handle:E.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${E.handle} port=${x} (already replaced/removed)`)});return{sandboxApiUrl:X,previewUrl:N,port:x}};return{async ensureSandbox(E){let v=u.get(E.handle);if(v){if(await $(v.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${E.handle} port=${v.port} (alive)`),v.lastUsedAt=Date.now(),{sandboxApiUrl:v.sandboxApiUrl,previewUrl:v.previewUrl,port:v.port};console.warn(`[user-desktop] cache stale handle=${E.handle} port=${v.port} \u2014 respawning`),d(v)}let r=_.get(E.handle);if(r)return console.log(`[user-desktop] joining in-flight ensure handle=${E.handle}`),r;let x=h(E).finally(()=>{_.delete(E.handle)});return _.set(E.handle,x),x},proxyPort(E){let v=u.get(E);if(v)v.lastUsedAt=Date.now();return v?.port??null},getDaemonToken(E){return u.get(E)?.daemonToken??null},hasHandle(E){return u.has(E)||_.has(E)},recordHit(E){let v=u.get(E);if(v)v.lastUsedAt=Date.now()},acquireDispatch(E){let v=u.get(E);if(!v)return()=>{};v.activeDispatchCount+=1;let r=!1;return()=>{if(r)return;r=!0;let x=u.get(E);if(x)x.activeDispatchCount=Math.max(0,x.activeDispatchCount-1)}},listSandboxes(){return[...u.values()]},async deleteSandbox(E){let v=u.get(E);if(!v){console.log(`[user-desktop] delete handle=${E} (not found, no-op)`);return}console.log(`[user-desktop] delete handle=${E} port=${v.port}`);try{v.process.kill("SIGTERM")}catch{}u.delete(E),c({handle:E,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${u.size} sandbox(es)`);for(let E of u.values())try{E.process.kill("SIGTERM")}catch{}u.clear()}}}function N9l(){return new Promise((i,t)=>{let u=D9l();u.unref(),u.on("error",t),u.listen(0,"127.0.0.1",()=>{let l=u.address();if(l&&typeof l==="object"){let n=l.port;u.close(()=>i(n))}else u.close(()=>t(Error("could not allocate port")))})})}var NSt=()=>{};import{randomUUID as J9l}from"crypto";import{hostname as U9l}from"os";async function JSt(i){let t=U9l()||void 0;i.monitor?.onMachine?.(t??"this machine");let u=SPt(i.dataDir,{outFd:i.logFd,hotReload:i.hotReload}),l=0,n=XSt({dataDir:i.dataDir,resolvePreviewUrl:(N,U)=>l>0?`http://${N}.localhost:${l}`:`http://127.0.0.1:${U}`,spawnDaemon:async(N)=>{let U={DAEMON_BOOT_ID:J9l(),APP_ROOT:N.workdir,PROXY_PORT:String(N.port),DAEMON_TOKEN:N.daemonToken,OFFLOAD_ALLOWED_HOSTS:N.offloadAllowedHosts.join(","),...N.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(N.orgFsConfigJson){let F=await HPt(i.dataDir);if(F)U.ORGFS_CONFIG=N.orgFsConfigJson,U.ORGFS_RCLONE_PATH=F}let J=await u({workdir:N.workdir,env:U,daemonPort:N.port});return{port:N.port,kill:(F)=>J.kill(F),exited:J.exited.then(()=>{return})}},postConfig:async(N,U,J,F)=>{let Q={port:U};if(J.workload)Q.runtime=J.workload.runtime,Q.packageManager={name:J.workload.packageManager,...J.workload.packageManagerPath?{path:J.workload.packageManagerPath}:{}};let B={application:Q},P=ih(J.operator??null);if(P)B.operator=P;if(J.repo)B.git={repository:{cloneUrl:J.repo.cloneUrl,branch:J.repo.branch},...J.repo.userName&&J.repo.userEmail?{identity:{userName:J.repo.userName,userEmail:J.repo.userEmail}}:{}};await I8(`http://127.0.0.1:${N}`,F,B)},waitForHealth:async(N)=>{await Vui(`http://127.0.0.1:${N}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),f=await vSt({port:i.port,lookupSandboxPort:(N)=>n.proxyPort(N)});l=f.port,console.log(`Local ingress listening on http://127.0.0.1:${f.port} (use http://<handle>.localhost:${f.port}/)`),i.monitor?.onIngress?.(f.port);let c=LPt({provider:n}),$=async()=>{let N=await Sw({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!N)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return N.accessToken};console.log(`[link-daemon] transport=pull cluster=${i.clusterBaseUrl}`);let d=await DSt(i.dataDir),_=process.env.npm_package_version??"0.0.0",g=await cki(),h=wSt(g,{onChange:(N)=>{console.log(`[link-daemon] capabilities detected: +${N.join(",")} (now: ${g.join(",")})`)}}),E=uki({path:`${i.dataDir}/link/outbox.sqlite`}),v=()=>{},r=await tSt({clusterBaseUrl:i.clusterBaseUrl,getAccessToken:$,provider:n,outbox:E,controlHandler:c,capabilities:g,machineId:d,cliVersion:_,previewPort:f.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl} (pull transport)`)},onShutdown:()=>v()}),x,y=new Promise((N)=>{x=N}),O=!1,X=async()=>{if(O)return;O=!0,console.log(`
|
|
104782
|
-
Shutting down\u2026`),h();try{await r.close()}catch{}try{await f.stop()}catch{}try{await n.shutdown()}catch{}try{E.close()}catch{}x(0)};return process.on("SIGINT",()=>void X()),process.on("SIGTERM",()=>void X()),v=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms link` to reconnect."),X()},r.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!O)console.error("Cluster connection closed permanently; exiting."),X()}),{stopped:y,stop:X}}var USt=w(()=>{tGi();kH();zPt();RPt();ePt();uSt();lki();rSt();xSt();ySt();WH();NSt()});function $ki(i){return i.map((t)=>typeof t==="string"?t:String(t)).join(" ")}var c0i;var dki=w(()=>{c0i={name:"decocms",version:"3.4.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.2.141","@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.80","@ai-sdk/google":"^3.0.80","@ai-sdk/openai":"^3.0.65","@anthropic-ai/sdk":"^0.96.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.17.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.0","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.193","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.191","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var cR={};Gi(cR,{printBanner:()=>I9l,bannerLines:()=>TSt,BANNER_LINES:()=>$0i,BANNER_GRADIENT:()=>d0i});function F9l(i){let t=Number.parseInt(i.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function TSt(i){let t=$0i.map((u,l)=>{let[n,f,c]=F9l(d0i[l]);return`\x1B[38;2;${n};${f};${c}m${u}\x1B[39m`});if(i!==void 0)t.push(`\x1B[2m v${i}\x1B[22m`);return t}function I9l(i){console.log("");for(let t of TSt(i))console.log(t);console.log("")}var $0i,d0i;var NW=w(()=>{$0i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],d0i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as Z9l,Text as FSt}from"ink";import{jsx as B9l,jsxs as ISt}from"react/jsx-runtime";function _0i({version:i}){return ISt(Z9l,{flexDirection:"column",marginTop:1,children:[$0i.map((t,u)=>B9l(FSt,{color:d0i[u],children:t},u)),ISt(FSt,{dimColor:!0,children:[" v",i]})]})}var _ki=w(()=>{NW()});var BSt={};Gi(BSt,{subscribeLinkState:()=>Eki,setMachine:()=>A9l,setLogPath:()=>W9l,setIngress:()=>P9l,setDaemonError:()=>G9l,setClusterUrl:()=>Y9l,setCluster:()=>Q9l,pushSandboxEvent:()=>k9l,getLinkState:()=>hki,applySandboxEvent:()=>ZSt});function ZSt(i,t){let u=new Map(i);if(t.phase==="evicted"||t.phase==="deleted")return u.delete(t.handle),u;let l=u.get(t.handle);return u.set(t.handle,{handle:t.handle,port:t.port??l?.port??null,previewUrl:t.previewUrl??l?.previewUrl??null,status:t.phase,error:t.phase==="failed"?t.error??"failed":null}),u}function C8(){for(let i of gki)i()}function hki(){return t$}function Eki(i){return gki.add(i),()=>gki.delete(i)}function Q9l(i){t$={...t$,cluster:i},C8()}function Y9l(i){t$={...t$,clusterUrl:i},C8()}function P9l(i,t){t$={...t$,ingressPort:i,ingressUrl:t},C8()}function A9l(i){t$={...t$,machine:i},C8()}function G9l(i){t$={...t$,daemonError:i},C8()}function W9l(i){t$={...t$,logPath:i},C8()}function k9l(i){t$={...t$,sandboxes:ZSt(t$.sandboxes,i)},C8()}var t$,gki;var vki=w(()=>{t$={cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:20,sandboxes:new Map,daemonError:null,logPath:null},gki=new Set});var QSt={};Gi(QSt,{LinkApp:()=>z9l});import{Box as u$,Text as l$}from"ink";import{useSyncExternalStore as j9l}from"react";import{jsx as c1,jsxs as LE}from"react/jsx-runtime";function S9l(i){if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function z9l(){let i=j9l(Eki,hki),t=[...i.sandboxes.values()].sort((u,l)=>u.handle.localeCompare(l.handle));return LE(u$,{flexDirection:"column",children:[c1(_0i,{version:c0i.version}),c1(u$,{marginBottom:1,children:c1(l$,{dimColor:!0,children:"\u2500".repeat(80)})}),c1(u$,{children:i.cluster==="linked"?LE(l$,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?LE(l$,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):LE(l$,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),c1(u$,{children:i.ingressUrl?LE(l$,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):c1(l$,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),c1(u$,{marginBottom:1,children:c1(l$,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${t.length} of ${i.cap} previews`})}),t.length===0?c1(l$,{dimColor:!0,children:"No previews running yet."}):LE(u$,{flexDirection:"column",children:[LE(u$,{children:[c1(u$,{width:g0i.project,flexShrink:0,marginRight:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),c1(u$,{width:g0i.status,flexShrink:0,marginRight:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),c1(u$,{flexGrow:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),t.map((u)=>{let l=S9l(u);return LE(u$,{children:[c1(u$,{width:g0i.project,flexShrink:0,marginRight:1,children:c1(l$,{wrap:"truncate-end",children:u.handle})}),c1(u$,{width:g0i.status,flexShrink:0,marginRight:1,children:c1(l$,{color:l.color,wrap:"truncate-end",children:l.text})}),c1(u$,{flexGrow:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:u.previewUrl??"\u2014"})})]},u.handle)})]}),i.daemonError?c1(u$,{marginTop:1,children:LE(l$,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?c1(u$,{marginTop:1,children:LE(l$,{dimColor:!0,children:["Logs: ",i.logPath]})}):null]})}var g0i;var YSt=w(()=>{dki();_ki();vki();g0i={project:18,status:14}});var ASt={};Gi(ASt,{runLinkCommand:()=>M9l});import{closeSync as b9l,mkdirSync as K9l,openSync as H9l,writeSync as R9l}from"fs";import{homedir as L9l}from"os";import{join as PSt}from"path";function e9l(i,t){let u={log:console.log,warn:console.warn,error:console.error},l=(n)=>{if(t===void 0)return;try{R9l(t,`${$ki(n)}
|
|
104786
|
+
Shutting down\u2026`),h();try{await r.close()}catch{}try{await f.stop()}catch{}try{await n.shutdown()}catch{}try{E.close()}catch{}x(0)};return process.on("SIGINT",()=>void X()),process.on("SIGTERM",()=>void X()),v=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms link` to reconnect."),X()},r.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!O)console.error("Cluster connection closed permanently; exiting."),X()}),{stopped:y,stop:X}}var USt=w(()=>{tGi();kH();zPt();RPt();ePt();uSt();lki();rSt();xSt();ySt();WH();NSt()});function $ki(i){return i.map((t)=>typeof t==="string"?t:String(t)).join(" ")}var c0i;var dki=w(()=>{c0i={name:"decocms",version:"3.5.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.2.141","@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.80","@ai-sdk/google":"^3.0.80","@ai-sdk/openai":"^3.0.65","@anthropic-ai/sdk":"^0.96.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.17.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.0","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.193","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.191","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var cR={};Gi(cR,{printBanner:()=>I9l,bannerLines:()=>TSt,BANNER_LINES:()=>$0i,BANNER_GRADIENT:()=>d0i});function F9l(i){let t=Number.parseInt(i.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function TSt(i){let t=$0i.map((u,l)=>{let[n,f,c]=F9l(d0i[l]);return`\x1B[38;2;${n};${f};${c}m${u}\x1B[39m`});if(i!==void 0)t.push(`\x1B[2m v${i}\x1B[22m`);return t}function I9l(i){console.log("");for(let t of TSt(i))console.log(t);console.log("")}var $0i,d0i;var NW=w(()=>{$0i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],d0i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as Z9l,Text as FSt}from"ink";import{jsx as B9l,jsxs as ISt}from"react/jsx-runtime";function _0i({version:i}){return ISt(Z9l,{flexDirection:"column",marginTop:1,children:[$0i.map((t,u)=>B9l(FSt,{color:d0i[u],children:t},u)),ISt(FSt,{dimColor:!0,children:[" v",i]})]})}var _ki=w(()=>{NW()});var BSt={};Gi(BSt,{subscribeLinkState:()=>Eki,setMachine:()=>A9l,setLogPath:()=>W9l,setIngress:()=>P9l,setDaemonError:()=>G9l,setClusterUrl:()=>Y9l,setCluster:()=>Q9l,pushSandboxEvent:()=>k9l,getLinkState:()=>hki,applySandboxEvent:()=>ZSt});function ZSt(i,t){let u=new Map(i);if(t.phase==="evicted"||t.phase==="deleted")return u.delete(t.handle),u;let l=u.get(t.handle);return u.set(t.handle,{handle:t.handle,port:t.port??l?.port??null,previewUrl:t.previewUrl??l?.previewUrl??null,status:t.phase,error:t.phase==="failed"?t.error??"failed":null}),u}function C8(){for(let i of gki)i()}function hki(){return t$}function Eki(i){return gki.add(i),()=>gki.delete(i)}function Q9l(i){t$={...t$,cluster:i},C8()}function Y9l(i){t$={...t$,clusterUrl:i},C8()}function P9l(i,t){t$={...t$,ingressPort:i,ingressUrl:t},C8()}function A9l(i){t$={...t$,machine:i},C8()}function G9l(i){t$={...t$,daemonError:i},C8()}function W9l(i){t$={...t$,logPath:i},C8()}function k9l(i){t$={...t$,sandboxes:ZSt(t$.sandboxes,i)},C8()}var t$,gki;var vki=w(()=>{t$={cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:20,sandboxes:new Map,daemonError:null,logPath:null},gki=new Set});var QSt={};Gi(QSt,{LinkApp:()=>z9l});import{Box as u$,Text as l$}from"ink";import{useSyncExternalStore as j9l}from"react";import{jsx as c1,jsxs as LE}from"react/jsx-runtime";function S9l(i){if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function z9l(){let i=j9l(Eki,hki),t=[...i.sandboxes.values()].sort((u,l)=>u.handle.localeCompare(l.handle));return LE(u$,{flexDirection:"column",children:[c1(_0i,{version:c0i.version}),c1(u$,{marginBottom:1,children:c1(l$,{dimColor:!0,children:"\u2500".repeat(80)})}),c1(u$,{children:i.cluster==="linked"?LE(l$,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?LE(l$,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):LE(l$,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),c1(u$,{children:i.ingressUrl?LE(l$,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):c1(l$,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),c1(u$,{marginBottom:1,children:c1(l$,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${t.length} of ${i.cap} previews`})}),t.length===0?c1(l$,{dimColor:!0,children:"No previews running yet."}):LE(u$,{flexDirection:"column",children:[LE(u$,{children:[c1(u$,{width:g0i.project,flexShrink:0,marginRight:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),c1(u$,{width:g0i.status,flexShrink:0,marginRight:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),c1(u$,{flexGrow:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),t.map((u)=>{let l=S9l(u);return LE(u$,{children:[c1(u$,{width:g0i.project,flexShrink:0,marginRight:1,children:c1(l$,{wrap:"truncate-end",children:u.handle})}),c1(u$,{width:g0i.status,flexShrink:0,marginRight:1,children:c1(l$,{color:l.color,wrap:"truncate-end",children:l.text})}),c1(u$,{flexGrow:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:u.previewUrl??"\u2014"})})]},u.handle)})]}),i.daemonError?c1(u$,{marginTop:1,children:LE(l$,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?c1(u$,{marginTop:1,children:LE(l$,{dimColor:!0,children:["Logs: ",i.logPath]})}):null]})}var g0i;var YSt=w(()=>{dki();_ki();vki();g0i={project:18,status:14}});var ASt={};Gi(ASt,{runLinkCommand:()=>M9l});import{closeSync as b9l,mkdirSync as K9l,openSync as H9l,writeSync as R9l}from"fs";import{homedir as L9l}from"os";import{join as PSt}from"path";function e9l(i,t){let u={log:console.log,warn:console.warn,error:console.error},l=(n)=>{if(t===void 0)return;try{R9l(t,`${$ki(n)}
|
|
104783
104787
|
`)}catch{}};return console.log=(...n)=>l(n),console.warn=(...n)=>l(n),console.error=(...n)=>{l(n),i($ki(n))},()=>{console.log=u.log,console.warn=u.warn,console.error=u.error}}async function C9l(i,t){let u;try{u=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${t}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(u.status===401||u.status===403)throw Error(`Authentication rejected by ${i} \u2014 the session token was not accepted. `+`Run \`deco auth login --target ${i}\` and try again.`)}async function M9l(i={}){let t=i.port??5174,u=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??PSt(L9l(),"deco"),l=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",n,f;try{let c=await eui({dataDir:u,intent:"Link",target:l});if(process.env.DECOCMS_LINK_MANAGED!=="1")await C9l(l,c.accessToken);let $;if(i.tui){let{render:_}=await import("ink"),{createElement:g}=await import("react"),{LinkApp:h}=await Promise.resolve().then(() => (YSt(),QSt)),{pushSandboxEvent:E,setCluster:v,setClusterUrl:r,setDaemonError:x,setIngress:y,setLogPath:O,setMachine:X}=await Promise.resolve().then(() => (vki(),BSt));K9l(u,{recursive:!0});let N=PSt(u,"link.log");f=H9l(N,"a"),O(N),r(l),v("connecting"),$={onEvent:(U)=>E(U),onIngress:(U)=>y(U,`http://127.0.0.1:${U}`),onCluster:(U)=>v(U),onMachine:(U)=>X(U)},n=e9l(x,f),_(g(h),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:_}=await Promise.resolve().then(() => (NW(),cR));_(i.version??"0.0.0")}return await(await JSt({port:t,clusterBaseUrl:l,dataDir:u,session:c,monitor:$,logFd:f,hotReload:i.hotReload})).stopped}catch(c){return n?.(),console.error(c instanceof Error?c.message:String(c)),1}finally{if(n?.(),f!==void 0)try{b9l(f)}catch{}}}var GSt=w(()=>{iGi();USt()});var Oki={};Gi(Oki,{resolveDevLinkClusterUrl:()=>m9l,populateDevLinkToxiProxy:()=>bSt,isDevLinkToxiProxyEnabled:()=>a9l,ensureDevLinkToxiProxy:()=>tNl,buildDevLinkToxiProxyConfig:()=>SSt,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>kSt,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>jSt});function a9l(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function rki(i,t){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${t} must be an integer port in 1..65535`);return i}function SSt(i){let t=new URL(i.serverUrl);if(t.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let u=rki(i.apiPort,"apiPort"),l=rki(i.listenPort,"listenPort");if(t.port.length===0)throw Error("serverUrl must include an explicit valid port");let n=rki(Number.parseInt(t.port,10),"upstreamPort"),f=`http://127.0.0.1:${n}`,c=`http://127.0.0.1:${l}`;return{serviceName:kSt,proxyName:jSt,apiUrl:`http://127.0.0.1:${u}`,listen:`0.0.0.0:${l}`,upstream:`host.docker.internal:${n}`,publicTargetUrl:f,clusterUrl:c,logLine:`[dev-link-toxiproxy] ready: ${c} -> ${f}`}}function m9l(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function wki(i,t,u){if(i.ok)return;let l=await i.text();throw Error(`ToxiProxy ${t} failed for ${u}: status=${i.status} statusText=${i.statusText} body=${l}`)}function yki(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function zSt(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return zSt(i.cause)}async function xki(i,t,u,l){try{return await i(u,l)}catch(n){throw Error(`ToxiProxy ${t} failed for ${u}: ${yki(n)}`,{cause:n})}}async function bSt(i,t=fetch){let u=`${i.apiUrl}/reset`,l=await xki(t,"reset",u,{method:"POST"});await wki(l,"reset",u);let n=`${i.apiUrl}/populate`,f=await xki(t,"populate",n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await wki(f,"populate",n)}async function o9l(i,t){let u=`${i.apiUrl}/version`;try{await Tr(async()=>{let l=await xki(t,"readiness check",u,{method:"GET",signal:AbortSignal.timeout(V9l)});await wki(l,"readiness check",u)},{maxAttempts:q9l,minTimeout:WSt,maxTimeout:WSt,multiplier:1,jitter:0,isRetriable:(l)=>!zSt(l)})}catch(l){let n=l instanceof K6?l.cause:l;throw Error(`ToxiProxy API did not become ready at ${u}: ${yki(n)}`,{cause:n})}}async function s9l(i){if(i===null)return"";return await new Response(i).text()}async function Dki(i,t={}){let u=["docker",...i].join(" "),l=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch($){throw Error(`Docker command failed to start (${u}): ${yki($)}`,{cause:$})}})(),[n,f]=await Promise.all([l.exited,s9l(l.stderr)]);if(n===0||t.ignoreFailure===!0)return;let c=f.trim().length>0?`: ${f.trim()}`:"";throw Error(`Docker command failed (${u}) with exit ${n}${c}`)}async function p9l(i,t){let u=`deco-dev-link-toxiproxy-${i}`;await Dki(["rm","-f",u],{ignoreFailure:!0}),await Dki(["run","--rm","-d","--name",u,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${t}:${t}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function iNl(i,t){let u=`deco-dev-link-toxiproxy-${i}`;await Dki(["rm","-f",u],{ignoreFailure:!0})}async function tNl(i){let t=SSt(i),u=i.startDaemon??p9l,l=i.stopDaemon??(i.startDaemon===void 0?iNl:void 0);await u(i.apiPort,i.listenPort);let n=i.fetchImpl??fetch;try{await o9l(t,n),await bSt(t,n)}catch(f){if(l!==void 0)try{await l(i.apiPort,i.listenPort)}catch{}throw f}return{config:t,stop:async()=>{if(l!==void 0)await l(i.apiPort,i.listenPort)}}}var kSt="ToxiProxy",jSt="dev_link_studio",q9l=20,WSt=100,V9l=100;var Xki=w(()=>{x1()});var KSt={};Gi(KSt,{migrateBetterAuth:()=>Nki});import{getMigrations as uNl}from"better-auth/db";import{sso as lNl}from"@better-auth/sso";import{organization as nNl}from"@decocms/better-auth/plugins";import{admin as fNl,apiKey as cNl,jwt as $Nl,magicLink as dNl,mcp as _Nl,openAPI as gNl}from"better-auth/plugins";import{emailOTP as hNl}from"better-auth/plugins/email-otp";async function Nki(i){let u={database:YH(i||Ww()),plugins:[nNl({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),fNl(),cNl(),$Nl(),gNl(),_Nl({loginPage:"/login"}),lNl(),dNl({sendMagicLink:async()=>{}}),hNl({sendVerificationOTP:async()=>{}})]},{toBeAdded:l,toBeCreated:n,runMigrations:f}=await uNl(u);if(!l.length&&!n.length)return"up to date";return await f(),`${n.length+l.length} table(s) migrated`}var Jki=w(()=>{Nd()});var Uki={};Gi(Uki,{up:()=>ENl,down:()=>vNl});import{sql as eE}from"kysely";async function ENl(i){await i.schema.createTable("connections").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(t)=>t.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(t)=>t.notNull()).addColumn("connectionUrl","text",(t)=>t.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(t)=>t.notNull().defaultTo("active")).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(t)=>t.primaryKey()).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(t)=>t.notNull()).addColumn("hashedKey","text",(t)=>t.notNull().unique()).addColumn("permissions","text",(t)=>t.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(t)=>t.references("user.id").onDelete("set null")).addColumn("connectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("toolName","text",(t)=>t.notNull()).addColumn("allowed","integer",(t)=>t.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(t)=>t.notNull()).addColumn("redirectUris","text",(t)=>t.notNull()).addColumn("grantTypes","text",(t)=>t.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(t)=>t.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(t)=>t.notNull()).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(t)=>t.primaryKey()).addColumn("connectionId","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(t)=>t.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(t)=>t.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_connections_organizationId").on("connections").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}async function vNl(i){await i.schema.dropTable("downstream_tokens").execute(),await i.schema.dropTable("oauth_refresh_tokens").execute(),await i.schema.dropTable("oauth_authorization_codes").execute(),await i.schema.dropTable("oauth_clients").execute(),await i.schema.dropTable("audit_logs").execute(),await i.schema.dropTable("api_keys").execute(),await i.schema.dropTable("connections").execute()}var HSt=()=>{};var Tki={};Gi(Tki,{up:()=>rNl,down:()=>wNl});import{sql as RSt}from"kysely";async function rNl(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(RSt`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(RSt`CURRENT_TIMESTAMP`)).execute()}async function wNl(i){await i.schema.dropTable("organization_settings").execute()}var LSt=()=>{};var Fki={};Gi(Fki,{up:()=>xNl,down:()=>DNl});async function xNl(i){await i.schema.alterTable("connections").renameColumn("name","title").execute(),await i.schema.alterTable("connections").renameColumn("createdById","created_by").execute(),await i.schema.alterTable("connections").renameColumn("createdAt","created_at").execute(),await i.schema.alterTable("connections").renameColumn("updatedAt","updated_at").execute(),await i.schema.alterTable("connections").renameColumn("organizationId","organization_id").execute(),await i.schema.alterTable("connections").renameColumn("connectionType","connection_type").execute(),await i.schema.alterTable("connections").renameColumn("connectionUrl","connection_url").execute(),await i.schema.alterTable("connections").renameColumn("connectionToken","connection_token").execute(),await i.schema.alterTable("connections").renameColumn("connectionHeaders","connection_headers").execute(),await i.schema.alterTable("connections").renameColumn("oauthConfig","oauth_config").execute(),await i.schema.alterTable("connections").renameColumn("appName","app_name").execute(),await i.schema.alterTable("connections").renameColumn("appId","app_id").execute()}async function DNl(i){await i.schema.alterTable("connections").renameColumn("title","name").execute(),await i.schema.alterTable("connections").renameColumn("created_by","createdById").execute(),await i.schema.alterTable("connections").renameColumn("created_at","createdAt").execute(),await i.schema.alterTable("connections").renameColumn("updated_at","updatedAt").execute(),await i.schema.alterTable("connections").renameColumn("organization_id","organizationId").execute(),await i.schema.alterTable("connections").renameColumn("connection_type","connectionType").execute(),await i.schema.alterTable("connections").renameColumn("connection_url","connectionUrl").execute(),await i.schema.alterTable("connections").renameColumn("connection_token","connectionToken").execute(),await i.schema.alterTable("connections").renameColumn("connection_headers","connectionHeaders").execute(),await i.schema.alterTable("connections").renameColumn("oauth_config","oauthConfig").execute(),await i.schema.alterTable("connections").renameColumn("app_name","appName").execute(),await i.schema.alterTable("connections").renameColumn("app_id","appId").execute()}var Iki={};Gi(Iki,{up:()=>yNl,down:()=>ONl});async function yNl(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(t)=>t.notNull()).addColumn("updatedAt","text",(t)=>t.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((t)=>t.selectFrom("organization_settings").select(["organizationId","createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}async function ONl(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(t)=>t.notNull()).addColumn("updatedAt","text",(t)=>t.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((t)=>t.selectFrom("organization_settings").select(["organizationId",t.val(null).as("modelsBindingConnectionId"),"createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}var Zki={};Gi(Zki,{up:()=>XNl,down:()=>NNl});async function XNl(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function NNl(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var Bki={};Gi(Bki,{up:()=>UNl,down:()=>TNl});import{sql as JNl}from"kysely";async function UNl(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",JNl`text`).execute()}async function TNl(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var eSt=()=>{};var Qki={};Gi(Qki,{up:()=>FNl,down:()=>INl});async function FNl(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(t)=>t.notNull()).addColumn("tool_name","text",(t)=>t.notNull()).addColumn("input","text",(t)=>t.notNull()).addColumn("output","text",(t)=>t.notNull()).addColumn("is_error","integer",(t)=>t.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(t)=>t.notNull()).addColumn("timestamp","text",(t)=>t.notNull()).addColumn("user_id","text").addColumn("request_id","text",(t)=>t.notNull()).execute(),await i.schema.createIndex("monitoring_logs_org_timestamp").on("monitoring_logs").columns(["organization_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_connection_timestamp").on("monitoring_logs").columns(["connection_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_is_error").on("monitoring_logs").columns(["organization_id","is_error","timestamp"]).execute()}async function INl(i){await i.schema.dropIndex("monitoring_logs_is_error").execute(),await i.schema.dropIndex("monitoring_logs_connection_timestamp").execute(),await i.schema.dropIndex("monitoring_logs_org_timestamp").execute(),await i.schema.dropTable("monitoring_logs").execute()}var Yki={};Gi(Yki,{up:()=>ZNl,down:()=>BNl});import{sql as $R}from"kysely";async function ZNl(i){await i.schema.createTable("events").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(t)=>t.notNull()).addColumn("source","text",(t)=>t.notNull()).addColumn("specversion","text",(t)=>t.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(t)=>t.notNull()).addColumn("datacontenttype","text",(t)=>t.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(t)=>t.notNull().defaultTo("pending")).addColumn("attempts","integer",(t)=>t.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo($R`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo($R`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(t)=>t.notNull()).addColumn("filter","text").addColumn("enabled","integer",(t)=>t.notNull().defaultTo(1)).addColumn("created_at","text",(t)=>t.notNull().defaultTo($R`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo($R`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(t)=>t.primaryKey()).addColumn("event_id","text",(t)=>t.notNull()).addColumn("subscription_id","text",(t)=>t.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(t)=>t.notNull().defaultTo("pending")).addColumn("attempts","integer",(t)=>t.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo($R`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_events_org_status").on("events").columns(["organization_id","status"]).execute(),await i.schema.createIndex("idx_events_source").on("events").columns(["source"]).execute(),await i.schema.createIndex("idx_events_type").on("events").columns(["type"]).execute(),await i.schema.createIndex("idx_events_retry").on("events").columns(["status","next_retry_at"]).execute(),await i.schema.createIndex("idx_subscriptions_connection").on("event_subscriptions").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_subscriptions_type").on("event_subscriptions").columns(["event_type"]).execute(),await i.schema.createIndex("idx_subscriptions_org_enabled").on("event_subscriptions").columns(["organization_id","enabled"]).execute(),await i.schema.createIndex("idx_subscriptions_unique").on("event_subscriptions").columns(["connection_id","event_type","publisher","filter"]).unique().execute(),await i.schema.createIndex("idx_deliveries_event").on("event_deliveries").columns(["event_id"]).execute(),await i.schema.createIndex("idx_deliveries_subscription_status").on("event_deliveries").columns(["subscription_id","status"]).execute(),await i.schema.createIndex("idx_deliveries_retry").on("event_deliveries").columns(["status","next_retry_at"]).execute()}async function BNl(i){await i.schema.dropIndex("idx_deliveries_retry").execute(),await i.schema.dropIndex("idx_deliveries_subscription_status").execute(),await i.schema.dropIndex("idx_deliveries_event").execute(),await i.schema.dropIndex("idx_subscriptions_unique").execute(),await i.schema.dropIndex("idx_subscriptions_org_enabled").execute(),await i.schema.dropIndex("idx_subscriptions_type").execute(),await i.schema.dropIndex("idx_subscriptions_connection").execute(),await i.schema.dropIndex("idx_events_retry").execute(),await i.schema.dropIndex("idx_events_type").execute(),await i.schema.dropIndex("idx_events_source").execute(),await i.schema.dropIndex("idx_events_org_status").execute(),await i.schema.dropTable("event_deliveries").execute(),await i.schema.dropTable("event_subscriptions").execute(),await i.schema.dropTable("events").execute()}var CSt=()=>{};var Pki={};Gi(Pki,{up:()=>YNl,down:()=>PNl});import{sql as QNl}from"kysely";async function YNl(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function PNl(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(t)=>t.references("user.id").onDelete("set null")).addColumn("connectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("toolName","text",(t)=>t.notNull()).addColumn("allowed","integer",(t)=>t.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(t)=>t.notNull().defaultTo(QNl`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}var MSt=()=>{};var Aki={};Gi(Aki,{up:()=>ANl,down:()=>GNl});import{sql as h0i}from"kysely";async function ANl(i){await i.schema.createTable("gateways").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(t)=>t.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(t)=>t.notNull().defaultTo("active")).addColumn("is_default","integer",(t)=>t.notNull().defaultTo(0)).addColumn("created_at","text",(t)=>t.notNull().defaultTo(h0i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo(h0i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(t)=>t.primaryKey()).addColumn("gateway_id","text",(t)=>t.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo(h0i`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_gateways_org").on("gateways").columns(["organization_id"]).execute(),await i.schema.createIndex("idx_gateways_org_status").on("gateways").columns(["organization_id","status"]).execute(),await h0i`CREATE UNIQUE INDEX idx_gateways_default_per_org ON gateways (organization_id) WHERE is_default = 1`.execute(i),await i.schema.createIndex("idx_gateway_connections_gateway").on("gateway_connections").columns(["gateway_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_connection").on("gateway_connections").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_unique").on("gateway_connections").columns(["gateway_id","connection_id"]).unique().execute()}async function GNl(i){await i.schema.dropIndex("idx_gateway_connections_unique").execute(),await i.schema.dropIndex("idx_gateway_connections_connection").execute(),await i.schema.dropIndex("idx_gateway_connections_gateway").execute(),await i.schema.dropIndex("idx_gateways_default_per_org").execute(),await i.schema.dropIndex("idx_gateways_org_status").execute(),await i.schema.dropIndex("idx_gateways_org").execute(),await i.schema.dropTable("gateway_connections").execute(),await i.schema.dropTable("gateways").execute()}var qSt=()=>{};var Gki={};Gi(Gki,{up:()=>WNl,down:()=>kNl});async function WNl(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function kNl(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var Wki={};Gi(Wki,{up:()=>jNl,down:()=>SNl});import{sql as E0i}from"kysely";async function jNl(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(t)=>t.notNull().defaultTo("inclusion")).execute(),await E0i`
|
|
104784
104788
|
UPDATE gateways
|
|
104785
104789
|
SET tool_selection_mode = CASE
|
|
@@ -107947,14 +107951,16 @@ ${[...j].sort().join(`
|
|
|
107947
107951
|
`),images:t.localImages,...u.length>0?{warnings:u}:{}}}function n7i({message:i,code:t,exitCode:u,stderr:l,promptExcerpt:n,provider:f="exec",isRetryable:c=!1}){return new Da({message:i,isRetryable:c,url:f==="app-server"?"codex-cli://app-server":"codex-cli://exec",requestBodyValues:n?{prompt:n}:void 0,data:{code:t,exitCode:u,stderr:l,promptExcerpt:n}})}function lZ0(i){return new zOi({message:i||"Authentication failed. Ensure Codex CLI is logged in (codex login)."})}function c7i(){return{inputTokens:{total:void 0,noCache:void 0,cacheRead:void 0,cacheWrite:void 0},outputTokens:{total:void 0,text:void 0,reasoning:void 0},raw:void 0}}function nZ0(i){switch(i){case"stop":case"end_turn":case void 0:return{unified:"stop",raw:i};case"length":case"max_tokens":return{unified:"length",raw:i};case"content_filter":return{unified:"content-filter",raw:i};case"tool_calls":return{unified:"tool-calls",raw:i};case"error":return{unified:"error",raw:i};default:return{unified:"other",raw:i}}}function fZ0(i){return typeof i==="object"&&i!==null&&!Array.isArray(i)&&Object.prototype.toString.call(i)==="[object Object]"}function Ja(i){if(typeof i!=="object"||i===null)return i;if(Array.isArray(i))return i.map((l)=>Ja(l));let t=i,u={};for(let[l,n]of Object.entries(t)){if(l==="properties"&&typeof n==="object"&&n!==null&&!Array.isArray(n)){let f=n,c={};for(let[$,d]of Object.entries(f))c[$]=Ja(d);u[l]=c;continue}if(l==="$schema"||l==="$id"||l==="$ref"||l==="$defs"||l==="definitions"||l==="title"||l==="examples"||l==="default"||l==="format"||l==="pattern")continue;u[l]=Ja(n)}return u}function nBu(i){if(typeof i==="string")return i;try{return JSON.stringify(i)}catch{return String(i)}}function mlt(i,t){if(t!==void 0){if(Object.keys(t).length===0)return{};return{...i??{},...t}}if(i)return{...i};return}function fBu(i,t){if(!i||i.transport!==t.transport)return{...t};if(t.transport==="stdio"){let $=i;return{transport:"stdio",command:t.command,args:t.args??$.args,env:mlt($.env,t.env),cwd:t.cwd??$.cwd,enabled:t.enabled??i.enabled,startupTimeoutSec:t.startupTimeoutSec??i.startupTimeoutSec,toolTimeoutSec:t.toolTimeoutSec??i.toolTimeoutSec,enabledTools:t.enabledTools??i.enabledTools,disabledTools:t.disabledTools??i.disabledTools}}let u=i,l=t.bearerToken!==void 0||t.bearerTokenEnvVar!==void 0,n=l?t.bearerToken:u.bearerToken,f=l?t.bearerTokenEnvVar:u.bearerTokenEnvVar;return{transport:"http",url:t.url,bearerToken:n,bearerTokenEnvVar:f,httpHeaders:mlt(u.httpHeaders,t.httpHeaders),envHttpHeaders:mlt(u.envHttpHeaders,t.envHttpHeaders),enabled:t.enabled??i.enabled,startupTimeoutSec:t.startupTimeoutSec??i.startupTimeoutSec,toolTimeoutSec:t.toolTimeoutSec??i.toolTimeoutSec,enabledTools:t.enabledTools??i.enabledTools,disabledTools:t.disabledTools??i.disabledTools}}function cZ0(i,t){if(!i&&!t)return;let u={};for(let[n,f]of Object.entries(i??{})){let c=Vz(n);u[c]=f}if(!t)return u;let l={...u};for(let[n,f]of Object.entries(t)){let c=Vz(n),$=l[c];l[c]=fBu($,f)}return l}function cBu(i){let t=[],u=(l,n)=>{if(l!==void 0)t.push({type:"unsupported",feature:n,details:`Codex CLI does not support ${n}; it will be ignored.`})};return u(i.temperature,"temperature"),u(i.topP,"topP"),u(i.topK,"topK"),u(i.maxOutputTokens,"maxOutputTokens"),u(i.presencePenalty,"presencePenalty"),u(i.frequencyPenalty,"frequencyPenalty"),u(i.stopSequences?.length?i.stopSequences:void 0,"stopSequences"),u(i.seed,"seed"),u(i.tools,"tools"),u(i.toolChoice,"toolChoice"),t}function $Z0(i,t){let u={},l=(n,f)=>{RZu(n),u[n]=f};if(t!==void 0)l("features.rmcp_client",t);if(!i)return u;for(let[n,f]of Object.entries(i)){let $=`mcp_servers.${Vz(n)}`;if(f.enabled!==void 0)l(`${$}.enabled`,f.enabled);if(f.startupTimeoutSec!==void 0)l(`${$}.startup_timeout_sec`,f.startupTimeoutSec);if(f.toolTimeoutSec!==void 0)l(`${$}.tool_timeout_sec`,f.toolTimeoutSec);if(f.enabledTools!==void 0)l(`${$}.enabled_tools`,f.enabledTools);if(f.disabledTools!==void 0)l(`${$}.disabled_tools`,f.disabledTools);if(f.transport==="stdio"){if(l(`${$}.command`,f.command),f.args!==void 0)l(`${$}.args`,f.args);if(f.env!==void 0)l(`${$}.env`,f.env);if(f.cwd)l(`${$}.cwd`,f.cwd)}else{if(l(`${$}.url`,f.url),f.bearerToken!==void 0)l(`${$}.bearer_token`,f.bearerToken);if(f.bearerTokenEnvVar!==void 0)l(`${$}.bearer_token_env_var`,f.bearerTokenEnvVar);if(f.httpHeaders!==void 0)l(`${$}.http_headers`,f.httpHeaders);if(f.envHttpHeaders!==void 0)l(`${$}.env_http_headers`,f.envHttpHeaders)}}return u}function _Z0(i,t){if(i){let u=i.toLowerCase();if(u.endsWith(".js")||u.endsWith(".mjs")||u.endsWith(".cjs"))return{cmd:"node",args:[i]};return{cmd:i,args:[]}}try{return{cmd:"node",args:[zZu(import.meta.url).resolve("@openai/codex/package.json").replace(/package\.json$/,"")+"bin/codex.js"]}}catch{if(t)return{cmd:"npx",args:["-y","@openai/codex"]};return{cmd:"codex",args:[]}}}function hZ0(i={}){let t=Ua(i.defaultSettings?.logger);if(i.defaultSettings){let n=TZu(i.defaultSettings);if(!n.valid)throw Error(`Invalid default settings: ${n.errors.join(", ")}`);for(let f of n.warnings)t.warn(`Codex CLI Provider: ${f}`)}let u=(n,f={})=>{let c={...i.defaultSettings,...f},$=TZu(c);if(!$.valid)throw Error(`Invalid settings: ${$.errors.join(", ")}`);for(let d of $.warnings)t.warn(`Codex CLI: ${d}`);return new gZ0({id:n,settings:c})},l=Object.assign(function(n,f){if(new.target)throw Error("The Codex CLI provider function cannot be called with new.");return u(n,f)},{specificationVersion:"v3"});return l.languageModel=u,l.chat=u,l.embeddingModel=(n)=>{throw new k6({modelId:n,modelType:"embeddingModel"})},l.imageModel=(n)=>{throw new k6({modelId:n,modelType:"imageModel"})},l}function EZ0(i){switch(i.type){case"text":return{type:"text",text:i.text,text_elements:[]};case"image":return{type:"image",url:i.imageUrl,imageUrl:i.imageUrl};case"localImage":return{type:"localImage",path:i.path};default:throw Error(`Unsupported input type: ${String(i)}`)}}function $Bu(i){return i.toLowerCase()}function QZu(i){let t=$Bu(i.type);if(t==="commandexecution")return{toolName:"exec"};if(t==="filechange")return{toolName:"patch"};if(t==="mcptoolcall"){let u=typeof i.server==="string"?i.server||"server":"server",l=typeof i.tool==="string"?i.tool||"tool":"tool";return{toolName:`mcp__${u}__${l}`,dynamic:!0}}if(t==="websearch")return{toolName:"web_search"};return}function wZ0(i){let t=(n)=>(f)=>{if(!i.isSameTurn(f)||typeof f.delta!=="string")return;let c=typeof f.itemId==="string"?f.itemId:Fn();i.reasoningItemIdsWithDelta.add(c),i.emitter.emitReasoningDelta(f.delta,n,c)},u=(n)=>{if(!i.isSameTurn(n))return;if(!n.item||typeof n.item!=="object")return;let f=n.item,c=$Bu(f.type);if(c==="agentmessage"){let g=typeof f.id==="string"?f.id:Fn(),h=f.text;if(!i.textItemIdsWithDelta.has(g)&&typeof h==="string"&&h.length>0)i.emitter.emitTextDelta(h,g);return}if(c==="reasoning"){let g=typeof f.id==="string"?f.id:Fn();if(!i.reasoningItemIdsWithDelta.has(g)){let{summary:h,content:E}=f;if(Array.isArray(h)&&h.length>0)i.emitter.emitReasoningDelta(h.join(`
|
|
107948
107952
|
`),!0,g);if(typeof h==="string"&&h.length>0)i.emitter.emitReasoningDelta(h,!0,g);if(Array.isArray(E)&&E.length>0)i.emitter.emitReasoningDelta(E.join(`
|
|
107949
107953
|
`),!1,g);if(typeof E==="string"&&E.length>0)i.emitter.emitReasoningDelta(E,!1,g)}return}let $=QZu(f);if(!$)return;let d=typeof f.id==="string"?f.id:Fn(),_=i.toolTracker.complete(d,$,typeof f.durationMs==="number"?f.durationMs:void 0);i.emitter.emitToolResult(d,_.toolName,f,_.dynamic,f.status==="failed")},l=(n)=>(f)=>{if(!i.isSameTurn(f)||typeof f.delta!=="string")return;let c=typeof f.itemId==="string"?f.itemId:Fn(),$=i.toolTracker.get(c);i.emitter.emitToolOutputDelta(c,$?.toolName??n,f.delta)};return{"item/agentMessage/delta":(n)=>{if(!i.isSameTurn(n)||typeof n.delta!=="string")return;let f=typeof n.itemId==="string"?n.itemId:Fn();i.textItemIdsWithDelta.add(f),i.emitter.emitTextDelta(n.delta,f)},reasoningTextDelta:t(!1),"item/reasoning/textDelta":t(!1),reasoningSummaryTextDelta:t(!0),"item/reasoning/summaryTextDelta":t(!0),"item/started":(n)=>{if(!i.isSameTurn(n))return;if(!n.item||typeof n.item!=="object")return;let f=n.item,c=QZu(f);if(!c)return;let $=typeof f.id==="string"?f.id:Fn();i.toolTracker.start($,c),i.emitter.emitToolCall($,c.toolName,nBu(f),c.dynamic)},"item/completed":u,"item/commandExecution/outputDelta":l("exec"),"item/fileChange/outputDelta":l("patch"),"thread/tokenUsage/updated":(n)=>{if(!i.isSameTurn(n))return;let c=n.tokenUsage?.last;if(!c)return;i.onUsage({inputTokens:{total:c.inputTokens,noCache:Math.max(0,c.inputTokens-c.cachedInputTokens),cacheRead:c.cachedInputTokens,cacheWrite:0},outputTokens:{total:c.outputTokens,text:void 0,reasoning:c.reasoningOutputTokens},raw:c??void 0})},"turn/completed":(n)=>{if(!n.turn||typeof n.turn!=="object")return;let f=n.turn,c=i.getBoundTurnId();if(c&&f.id!==c)return;i.onTurnCompleted(f)},error:(n)=>{if(!i.isSameTurn(n))return;if(n.willRetry===!0)return;let f=n.error;if(f&&typeof f==="object"&&typeof f.message==="string")i.onError(Error(f.message))}}}function xZ0(i){return{"item/commandExecution/requestApproval":(t)=>{if(!i.isSameTurn(t))return;let u=typeof t.itemId==="string"?t.itemId:Fn();i.emitter.emitApprovalRequest(u)},"item/fileChange/requestApproval":(t)=>{if(!i.isSameTurn(t))return;let u=typeof t.itemId==="string"?t.itemId:Fn();i.emitter.emitApprovalRequest(u)}}}function XZ0(i,t){return new Promise((u)=>{let l=!1,n=setTimeout(()=>{if(l)return;l=!0,u(void 0)},t);i.then((f)=>{if(l)return;l=!0,clearTimeout(n),u(f)}).catch(()=>{if(l)return;l=!0,clearTimeout(n),u(void 0)})})}function NZ0(i){let t=String(i?.message??i);return/thread.*not found/i.test(t)}function JZ0(i){return Error(`Thread '${i}' not found after server restart. Create a new thread by omitting threadId.`)}function UZ0(i){switch(i.status){case"completed":return{unified:"stop",raw:"completed"};case"interrupted":return{unified:"stop",raw:"interrupted"};case"failed":{let t=i.error?.codexErrorInfo;if(t==="contextWindowExceeded")return{unified:"length",raw:"context_window_exceeded"};if(t==="usageLimitExceeded")return{unified:"length",raw:"usage_limit_exceeded"};return{unified:"error",raw:i.error?.message??"failed"}}default:return{unified:"other",raw:i.status}}}function FZ0(i){return{threadId:i.threadId,input:i.input,cwd:i.settings.cwd,approvalPolicy:i.settings.approvalPolicy,sandboxPolicy:i.settings.sandboxPolicy,model:i.modelId,effort:i.settings.effort,summary:i.settings.summary,personality:i.settings.personality,...i.responseFormat?.type==="json"&&i.responseFormat.schema?{outputSchema:Ja(i.responseFormat.schema)}:{}}}function $7i(i){let t=typeof i==="object"&&i!==null?i[IZ0]:void 0;return typeof i==="object"&&i!==null&&t===!0&&typeof i._start==="function"&&typeof i._stop==="function"}function ZZ0(i){let t=String(i?.message??i);return/thread.*not found/i.test(t)}function BZ0(i){return Error(`Thread '${i}' not found after server restart. Create a new thread by omitting threadId.`)}function YZu(i){let t=i.sandboxPolicy;if(!t)return;if(typeof t==="string")return t;if(t.type==="readOnly")return"read-only";if(t.type==="workspaceWrite")return"workspace-write";if(t.type==="dangerFullAccess")return"danger-full-access";return}function PZu(i){let t=i.sandboxPolicy;if(!t)return;if(typeof t!=="string")return t;if(t==="read-only")return{type:"readOnly"};if(t==="workspace-write")return{type:"workspaceWrite"};if(t==="danger-full-access")return{type:"dangerFullAccess"};return}function u7i(i){return i.approvalPolicy}function QZ0(i,t){if(!i&&!t)return;return{...i??{},...t??{}}}function YZ0(i,t){if(!i&&!t)return;let u={};for(let[l,n]of Object.entries(i??{})){let f=Vz(l);u[f]=n}if(!t)return u;for(let[l,n]of Object.entries(t)){let f=Vz(l),c=u[f];if(!c||$7i(c)||$7i(n)){u[f]=n;continue}if(c.transport===n.transport)u[f]=fBu(c,n);else u[f]=n}return u}function xB0(i){if(i){let t=i.toLowerCase();if(t.endsWith(".js")||t.endsWith(".mjs")||t.endsWith(".cjs"))return{cmd:"node",args:[i]};return{cmd:i,args:[]}}try{let u=zZu(import.meta.url).resolve("@openai/codex/package.json"),l=UZu.dirname(u);return{cmd:"node",args:[UZu.join(l,"bin","codex.js")]}}catch{return{cmd:"codex",args:[]}}}function DB0(i){return i.match(/(\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?)/)?.[1]}function kZu(i){let t=i.match(/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/);if(!t)return;return{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),prerelease:t[4]?t[4].split("."):[]}}function yB0(i,t){let u=/^\d+$/.test(i),l=/^\d+$/.test(t);if(u&&l){let n=Number(i),f=Number(t);if(n>f)return 1;if(n<f)return-1;return 0}if(u&&!l)return-1;if(!u&&l)return 1;return i.localeCompare(t)}function OB0(i,t){let u=kZu(i),l=kZu(t);if(!u||!l)return;if(u.major!==l.major)return u.major>l.major?1:-1;if(u.minor!==l.minor)return u.minor>l.minor?1:-1;if(u.patch!==l.patch)return u.patch>l.patch?1:-1;let n=u.prerelease,f=l.prerelease;if(n.length===0&&f.length===0)return 0;if(n.length===0)return 1;if(f.length===0)return-1;let c=Math.max(n.length,f.length);for(let $=0;$<c;$++){let d=n[$],_=f[$];if(d===void 0)return-1;if(_===void 0)return 1;let g=yB0(d,_);if(g!==0)return g}return 0}function NB0(i){return{codexPath:i.codexPath,cwd:i.cwd,env:i.env,logger:i.logger,connectionTimeoutMs:i.connectionTimeoutMs,requestTimeoutMs:i.requestTimeoutMs,idleTimeoutMs:i.idleTimeoutMs,minCodexVersion:i.minCodexVersion}}function JB0(i,t){let u=i.env&&Object.keys(i.env).length>0?Object.entries(i.env).sort(([l],[n])=>l.localeCompare(n)):void 0;return JSON.stringify({codexPath:i.codexPath??null,cwd:i.cwd??null,connectionTimeoutMs:i.connectionTimeoutMs??null,requestTimeoutMs:i.requestTimeoutMs??null,idleTimeoutMs:i.idleTimeoutMs??null,minCodexVersion:i.minCodexVersion??null,env:u??null,logger:t.loggerIdentity(i.logger)})}function UB0(i){let t=new Map;return{getOrCreate(u){let l=NB0(u),n=JB0(l,i),f=t.get(n);if(f)return f;let c=new XB0({settings:l,logger:l.logger});return t.set(n,c),c},async closeAll(){await Promise.allSettled(Array.from(t.values()).map(async(u)=>{await u.close()})),t.clear()}}}function TB0(i){let t=Object.getPrototypeOf(i);return t===Object.prototype||t===null}function FB0(i){let t=(u,l=new WeakSet)=>{if(u===null||u===void 0||typeof u==="string"||typeof u==="number"||typeof u==="boolean")return u;if(typeof u==="bigint")return{__bigint:u.toString()};if(typeof u==="symbol")return{__symbol:String(u)};if(typeof u==="function")return{__functionIdentity:i.functionIdentity(u)};if(Array.isArray(u))return u.map((n)=>t(n,l));if(typeof u==="object"){if(l.has(u))return{__objectRef:i.objectIdentity(u)};if(l.add(u),$7i(u)){if(u.cacheKey)return{__sdkMcpServerCacheKey:u.cacheKey};let f=u.tools.map((c)=>({name:c.name,description:c.description,inputSchema:t(c.inputSchema,l),execute:t(c.execute,l)})).sort((c,$)=>c.name.localeCompare($.name));return{__sdkMcpServer:{name:u.name,tools:f}}}if(!TB0(u))return{__objectIdentity:i.objectIdentity(u)};let n={};for(let f of Object.keys(u).sort((c,$)=>c.localeCompare($)))n[f]=t(u[f],l);return n}return String(u)};return{createPersistentModelKey(u,l){let n={...l,logger:l.logger===!1?!1:l.logger?{__loggerIdentity:i.loggerIdentity(l.logger)}:void 0};return JSON.stringify({modelId:u,settings:t(n)})}}}function IB0(){let i=new Map;return{get(t){return i.get(t)},set(t,u){i.set(t,u)},clear(){i.clear()}}}function ZB0(i){let t=new Set,u=new Set,l=new Map;return{markUsed(n,f){if(t.add(n),f==="provider"){u.add(n);return}let c=l.get(n)??0;l.set(n,c+1)},releaseRequestScoped(n){let f=l.get(n);if(f===void 0)return;if(f>1){l.set(n,f-1);return}if(l.delete(n),u.has(n))return;n._stop().then(()=>{if(!u.has(n)&&!l.has(n))t.delete(n)}).catch((c)=>{i.warn(`[codex-app-server] Failed to stop request-scoped SDK MCP server: ${String(c)}`)})},async closeAll(){await Promise.allSettled(Array.from(t).map(async(n)=>{await n._stop()})),t.clear(),u.clear(),l.clear()}}}function BB0(){let i=new WeakMap,t=new WeakMap,u=new WeakMap,l=1,n=1;return{loggerIdentity(f){if(f===!1)return"logger:false";if(!f)return"logger:default";let c=i.get(f);if(c!==void 0)return`logger:${c}`;let $=l++;return i.set(f,$),`logger:${$}`},functionIdentity(f){let c=t.get(f);if(c!==void 0)return`fn:${c}`;let $=n++;return t.set(f,$),`fn:${$}`},objectIdentity(f){let c=u.get(f);if(c!==void 0)return`obj:${c}`;let $=n++;return u.set(f,$),`obj:${$}`}}}function d0t(i={}){let t=Ua(i.defaultSettings?.logger);if(i.defaultSettings){let _=FZu(i.defaultSettings);if(!_.valid)throw Error(`Invalid default settings: ${_.errors.join(", ")}`);for(let g of _.warnings)t.warn(`Codex App Server Provider: ${g}`)}let u=BB0(),l=FB0(u),n=UB0(u),f=IB0(),c=ZB0(t),$=(_,g={})=>{let h={...i.defaultSettings,...g,configOverrides:{...i.defaultSettings?.configOverrides??{},...g.configOverrides??{}}},E=FZu(h);if(!E.valid)throw Error(`Invalid settings: ${E.errors.join(", ")}`);for(let O of E.warnings)t.warn(`Codex App Server: ${O}`);let v=()=>new PZ0({id:_,settings:h,client:n.getOrCreate(h),onSdkMcpServerUsed:(O,X)=>{c.markUsed(O,X)},onSdkMcpServerReleased:(O)=>{c.releaseRequestScoped(O)}});if((h.threadMode??"stateless")!=="persistent")return v();let r=l.createPersistentModelKey(_,h),x=f.get(r);if(x)return x;let y=v();return f.set(r,y),y},d=Object.assign(function(_,g){if(new.target)throw Error("The Codex app-server provider function cannot be called with new.");return $(_,g)},{specificationVersion:"v3"});return d.languageModel=$,d.chat=$,d.embeddingModel=(_)=>{throw new k6({modelId:_,modelType:"embeddingModel"})},d.imageModel=(_)=>{throw new k6({modelId:_,modelType:"imageModel"})},d.close=async()=>{await c.closeAll(),await n.closeAll(),f.clear()},d.dispose=d.close,d.listModels=async(_)=>{let h=await n.getOrCreate(i.defaultSettings??{}).modelList({modelProviders:_??null}),E=h.data??[];return{models:E,defaultModel:E.find((v)=>v.isDefault===!0),nextCursor:h.nextCursor}},d}var QI0,YI0,PI0,AI0,LZu,eZu,GI0,WI0,CZu,l0t,MZu,kI0,qZu,jI0,n0t,SI0,zI0,VZu,aZu,mZu,bI0,KI0,BZu,dZ0,gZ0=class{specificationVersion="v3";provider="codex-cli";defaultObjectGenerationMode="json";supportsImageUrls=!1;supportedUrls={};supportsStructuredOutputs=!0;modelId;settings;logger;sessionId;constructor(i){this.modelId=i.id,this.settings=i.settings??{};let t=Ua(this.settings.logger);if(this.logger=KZu(t,this.settings.verbose??!1),!this.modelId||this.modelId.trim()==="")throw new k6({modelId:this.modelId,modelType:"languageModel"});let u=RI0(this.modelId);if(u)this.logger.warn(`Codex CLI model: ${u}`)}mergeSettings(i){if(!i)return this.settings;let t=i.configOverrides||this.settings.configOverrides?{...this.settings.configOverrides??{},...i.configOverrides??{}}:void 0,u=i.addDirs||this.settings.addDirs?[...this.settings.addDirs??[],...i.addDirs??[]]:void 0,l=cZ0(this.settings.mcpServers,i.mcpServers);return{...this.settings,reasoningEffort:i.reasoningEffort??this.settings.reasoningEffort,reasoningSummary:i.reasoningSummary??this.settings.reasoningSummary,reasoningSummaryFormat:i.reasoningSummaryFormat??this.settings.reasoningSummaryFormat,modelVerbosity:i.textVerbosity??this.settings.modelVerbosity,configOverrides:t,addDirs:u,mcpServers:l,rmcpClient:i.rmcpClient??this.settings.rmcpClient}}getItemType(i){if(!i)return;let t=i,u=typeof t.item_type==="string"?t.item_type:void 0,l=typeof t.type==="string"?t.type:void 0;return u??l}buildArgs(i=[],t,u=this.settings){let l=_Z0(u.codexPath,u.allowNpx),n=[...l.args,"exec","--experimental-json"];if(u.fullAuto)n.push("--full-auto");else if(u.dangerouslyBypassApprovalsAndSandbox)n.push("--dangerously-bypass-approvals-and-sandbox");else{let g=u.approvalMode??"on-failure";n.push("-c",`approval_policy=${g}`);let h=u.sandboxMode??"workspace-write";n.push("-c",`sandbox_mode=${h}`)}if(u.skipGitRepoCheck!==!1)n.push("--skip-git-repo-check");if(u.reasoningEffort)n.push("-c",`model_reasoning_effort=${u.reasoningEffort}`);if(u.reasoningSummary)n.push("-c",`model_reasoning_summary=${u.reasoningSummary}`);if(u.reasoningSummaryFormat)n.push("-c",`model_reasoning_summary_format=${u.reasoningSummaryFormat}`);if(u.modelVerbosity)n.push("-c",`model_verbosity=${u.modelVerbosity}`);if(u.profile)n.push("--profile",u.profile);if(u.oss)n.push("--oss");if(u.webSearch)n.push("-c","tools.web_search=true");if(this.applyMcpSettings(n,u),u.color)n.push("--color",u.color);if(this.modelId)n.push("-m",this.modelId);if(u.addDirs?.length){for(let g of u.addDirs)if(typeof g==="string"&&g.trim().length>0)n.push("--add-dir",g)}if(u.configOverrides)for(let[g,h]of Object.entries(u.configOverrides))this.addConfigOverride(n,g,h);let f;if(t?.type==="json"&&t.schema){let g=typeof t.schema==="object"?t.schema:{},h=Ja(g);if(Object.keys(h).length>0){let v=olt(qz(slt(),"codex-schema-"));f=qz(v,"schema.json");let r={...h,additionalProperties:!1};bZu(f,JSON.stringify(r,null,2)),n.push("--output-schema",f)}}let c=[];for(let g of i)try{let h=pZu(g);c.push(h),n.push("--image",h)}catch(h){this.logger.warn(`[codex-cli] Failed to write image to temp file: ${String(h)}`)}let $={...process.env,...u.env||{},RUST_LOG:process.env.RUST_LOG||"error"},d=u.outputLastMessageFile,_=!1;if(!d){let g=olt(qz(slt(),"codex-cli-"));d=qz(g,"last-message.txt"),_=!0}if(n.push("--output-last-message",d),c.length>0)n.push("--");return n.push("-"),{cmd:l.cmd,args:n,env:$,cwd:u.cwd,lastMessagePath:d,lastMessageIsTemp:_,schemaPath:f,tempImagePaths:c.length>0?c:void 0}}applyMcpSettings(i,t){if(t.rmcpClient)this.addConfigOverride(i,"features.rmcp_client",!0);if(!t.mcpServers)return;for(let[u,l]of Object.entries(t.mcpServers)){let f=`mcp_servers.${Vz(u)}`;if(l.enabled!==void 0)this.addConfigOverride(i,`${f}.enabled`,l.enabled);if(l.startupTimeoutSec!==void 0)this.addConfigOverride(i,`${f}.startup_timeout_sec`,l.startupTimeoutSec);if(l.toolTimeoutSec!==void 0)this.addConfigOverride(i,`${f}.tool_timeout_sec`,l.toolTimeoutSec);if(l.enabledTools!==void 0)this.addConfigOverride(i,`${f}.enabled_tools`,l.enabledTools);if(l.disabledTools!==void 0)this.addConfigOverride(i,`${f}.disabled_tools`,l.disabledTools);if(l.transport==="stdio"){if(this.addConfigOverride(i,`${f}.command`,l.command),l.args!==void 0)this.addConfigOverride(i,`${f}.args`,l.args);if(l.env!==void 0)this.addConfigOverride(i,`${f}.env`,l.env);if(l.cwd)this.addConfigOverride(i,`${f}.cwd`,l.cwd)}else{if(this.addConfigOverride(i,`${f}.url`,l.url),l.bearerToken!==void 0)this.addConfigOverride(i,`${f}.bearer_token`,l.bearerToken);if(l.bearerTokenEnvVar)this.addConfigOverride(i,`${f}.bearer_token_env_var`,l.bearerTokenEnvVar);if(l.httpHeaders!==void 0)this.addConfigOverride(i,`${f}.http_headers`,l.httpHeaders);if(l.envHttpHeaders!==void 0)this.addConfigOverride(i,`${f}.env_http_headers`,l.envHttpHeaders)}}}addConfigOverride(i,t,u){if(RZu(t),fZ0(u)){let n=Object.entries(u);if(n.length===0){i.push("-c",`${t}={}`);return}for(let[f,c]of n)this.addConfigOverride(i,`${t}.${f}`,c);return}let l=this.serializeConfigValue(u);i.push("-c",`${t}=${l}`)}serializeConfigValue(i){if(typeof i==="string")return i;if(typeof i==="number"||typeof i==="boolean")return String(i);if(Array.isArray(i))try{return JSON.stringify(i)}catch{return String(i)}if(i&&typeof i==="object")try{return JSON.stringify(i)}catch{return String(i)}return String(i)}parseExperimentalJsonEvent(i){try{return JSON.parse(i)}catch{return}}extractUsage(i){let t=i.usage;if(!t)return;let u=t.input_tokens??0,l=t.output_tokens??0,n=t.cached_input_tokens??0;return{inputTokens:{total:u,noCache:u-n,cacheRead:n,cacheWrite:0},outputTokens:{total:l,text:void 0,reasoning:void 0},raw:t}}getToolName(i){if(!i)return;switch(this.getItemType(i)){case"command_execution":return"exec";case"file_change":return"patch";case"mcp_tool_call":{let u=i.tool;if(typeof u==="string"&&u.length>0)return u;return"mcp_tool"}case"web_search":return"web_search";default:return}}buildToolInputPayload(i){if(!i)return;let t=i;switch(this.getItemType(i)){case"command_execution":{let u={};if(typeof t.command==="string")u.command=t.command;if(typeof t.status==="string")u.status=t.status;if(typeof t.cwd==="string")u.cwd=t.cwd;return Object.keys(u).length?u:void 0}case"file_change":{let u={};if(Array.isArray(t.changes))u.changes=t.changes;if(typeof t.status==="string")u.status=t.status;return Object.keys(u).length?u:void 0}case"mcp_tool_call":{let u={};if(typeof t.server==="string")u.server=t.server;if(typeof t.tool==="string")u.tool=t.tool;if(typeof t.status==="string")u.status=t.status;if(t.arguments!==void 0)u.arguments=t.arguments;return Object.keys(u).length?u:void 0}case"web_search":{let u={};if(typeof t.query==="string")u.query=t.query;return Object.keys(u).length?u:void 0}default:return}}buildToolResultPayload(i){if(!i)return{result:{}};let t=i,u={},l=this.getItemType(i);if(typeof l==="string")u.itemType=l;if(typeof i.id==="string")u.itemId=i.id;if(typeof t.status==="string")u.status=t.status;let n=(f)=>({result:f,metadata:Object.keys(u).length?u:void 0});switch(l){case"command_execution":{let f={};if(typeof t.command==="string")f.command=t.command;if(typeof t.aggregated_output==="string")f.aggregatedOutput=t.aggregated_output;if(typeof t.exit_code==="number")f.exitCode=t.exit_code;if(typeof t.status==="string")f.status=t.status;return n(f)}case"file_change":{let f={};if(Array.isArray(t.changes))f.changes=t.changes;if(typeof t.status==="string")f.status=t.status;return n(f)}case"mcp_tool_call":{let f={};if(typeof t.server==="string")f.server=t.server,u.server=t.server;if(typeof t.tool==="string")f.tool=t.tool;if(typeof t.status==="string")f.status=t.status;if(t.result!==void 0)f.result=t.result;if(t.error!==void 0)f.error=t.error;return n(f)}case"web_search":{let f={};if(typeof t.query==="string")f.query=t.query;if(typeof t.status==="string")f.status=t.status;return n(f)}default:{let f={...t};return n(f)}}}emitToolInvocation(i,t,u,l){let n=nBu(l);if(i.enqueue({type:"tool-input-start",id:t,toolName:u}),n)i.enqueue({type:"tool-input-delta",id:t,delta:n});i.enqueue({type:"tool-input-end",id:t}),i.enqueue({type:"tool-call",toolCallId:t,toolName:u,input:n,providerExecuted:!0})}emitToolResult(i,t,u,l,n,f){let c={...f??{}},$=this.getItemType(l);if($&&c.itemType===void 0)c.itemType=$;if(l.id&&c.itemId===void 0)c.itemId=l.id;let d;if($==="command_execution"){let _=l,g=typeof _.exit_code==="number"?_.exit_code:void 0,h=typeof _.status==="string"?_.status:void 0;if(g!==void 0&&g!==0||h==="failed")d=!0}i.enqueue({type:"tool-result",toolCallId:t,toolName:u,result:n??{},...d?{isError:!0}:{},...Object.keys(c).length?{providerMetadata:{"codex-cli":c}}:{}})}handleSpawnError(i,t){let u=i&&typeof i==="object"?i:void 0,l=String((u?.message??i)||"Failed to run Codex CLI");if(/login|auth|unauthorized|not\s+logged/i.test(l))throw lZ0(l);throw n7i({message:l,code:typeof u?.code==="string"?u.code:void 0,exitCode:typeof u?.exitCode==="number"?u.exitCode:void 0,stderr:typeof u?.stderr==="string"?u.stderr:void 0,promptExcerpt:t})}async doGenerate(i){this.logger.debug(`[codex-cli] Starting doGenerate request with model: ${this.modelId}`);let{stream:t,request:u}=await this.doStream(i),l=[],n=new Map,f=new Map,c,$,d={id:Fn(),timestamp:new Date,modelId:this.modelId},_=c7i(),g={unified:"other",raw:void 0},h=[],E,v=(X,N)=>{let U=n.get(X);if(U){if(N)U.providerMetadata=N;return U}let J={type:"text",text:"",...N?{providerMetadata:N}:{}};return n.set(X,J),l.push(J),J},r=(X,N)=>{let U=f.get(X);if(U){if(N)U.providerMetadata=N;return U}let J={type:"reasoning",text:"",...N?{providerMetadata:N}:{}};return f.set(X,J),l.push(J),J},x=(X)=>{l.push(X)};for await(let X of t){if(X.type==="stream-start"){h=X.warnings;continue}if(X.type==="response-metadata"){d={id:X.id,timestamp:X.timestamp,modelId:X.modelId};continue}if(X.type==="text-start"){c=X.id,v(X.id,X.providerMetadata);continue}if(X.type==="text-delta"){let N=typeof X.id==="string"?X.id:c??"__default_text_block__";c=N;let U=v(N,X.providerMetadata);U.text=`${U.text}${X.delta}`;continue}if(X.type==="text-end"){let N=typeof X.id==="string"?X.id:c;if(N){let U=v(N,X.providerMetadata);if(X.providerMetadata)U.providerMetadata=X.providerMetadata}if(c===N)c=void 0;continue}if(X.type==="reasoning-start"){$=X.id,r(X.id,X.providerMetadata);continue}if(X.type==="reasoning-delta"){let N=typeof X.id==="string"?X.id:$??"__default_reasoning_block__";$=N;let U=r(N,X.providerMetadata);U.text=`${U.text}${X.delta}`;continue}if(X.type==="reasoning-end"){let N=typeof X.id==="string"?X.id:$;if(N){let U=r(N,X.providerMetadata);if(X.providerMetadata)U.providerMetadata=X.providerMetadata}if($===N)$=void 0;continue}if(X.type==="file"){x(X);continue}if(X.type==="source"){x(X);continue}if(X.type==="tool-approval-request"){x(X);continue}if(X.type==="tool-call"){x(X);continue}if(X.type==="tool-result"){x(X);continue}if(X.type==="finish")_=X.usage,g=X.finishReason,E=X.providerMetadata}let y=l.filter((X)=>{if(X.type==="text")return X.text.trim().length>0;if(X.type==="reasoning")return X.text.trim().length>0;return!0}),O=E&&typeof E==="object"?{...E}:{};if(this.sessionId){let X=O["codex-cli"],N=X&&typeof X==="object"&&!Array.isArray(X)?X:{};O["codex-cli"]={...N,sessionId:this.sessionId}}return{content:y,usage:_,finishReason:g,warnings:h,response:d,request:u,...Object.keys(O).length>0?{providerMetadata:O}:{}}}async doStream(i){this.logger.debug(`[codex-cli] Starting doStream request with model: ${this.modelId}`);let{promptText:t,images:u,warnings:l}=uZ0(i.prompt),n=t.slice(0,200),f=[...cBu({temperature:i.temperature,topP:i.topP,topK:i.topK,maxOutputTokens:i.maxOutputTokens,presencePenalty:i.presencePenalty,frequencyPenalty:i.frequencyPenalty,stopSequences:i.stopSequences,seed:i.seed,tools:i.tools,toolChoice:i.toolChoice}),...l??[]];this.logger.debug(`[codex-cli] Converted ${i.prompt.length} messages (${u.length} images) for streaming, response format: ${i.responseFormat?.type??"none"}`);let c=await Alt({provider:this.provider,providerOptions:i.providerOptions,schema:dZ0}),$=this.mergeSettings(c),d=i.responseFormat?.type==="json"?{type:"json",schema:i.responseFormat.schema}:void 0,{cmd:_,args:g,env:h,cwd:E,lastMessagePath:v,lastMessageIsTemp:r,schemaPath:x,tempImagePaths:y}=this.buildArgs(u,d,$);return this.logger.debug(`[codex-cli] Executing Codex CLI for streaming: ${_} with ${g.length} arguments`),{stream:new ReadableStream({start:(X)=>{let N=Date.now(),U=SZu(_,g,{env:h,cwd:E,stdio:["pipe","pipe","pipe"]});U.stdin.write(t),U.stdin.end(),X.enqueue({type:"stream-start",warnings:f});let J="",F="",Q=new Map,B=!1,P,H,j=()=>{if(x)try{let p=II0(x);f7i(p,{recursive:!0,force:!0})}catch{}if(y?.length)i0t(y)},k=(p={})=>{X.enqueue({type:"response-metadata",id:Vlt(),timestamp:new Date,modelId:this.modelId,...Object.keys(p).length?{providerMetadata:{"codex-cli":p}}:{}})},m=(p)=>{let s=p.item;if(!s)return;if(p.type==="item.completed"&&this.getItemType(s)==="assistant_message"&&typeof s.text==="string"){F=s.text,this.logger.debug(`[codex-cli] Received assistant message, length: ${s.text.length}`);return}let $i=this.getToolName(s);if(!$i)return;this.logger.debug(`[codex-cli] Tool detected: ${$i}, item type: ${this.getItemType(s)}`);let C=typeof s.id==="string"&&s.id.length>0?s.id:Vlt(),fi=Q.get(C),a=this.buildToolInputPayload(s);if(!fi)fi={toolCallId:C,toolName:$i,inputPayload:a,hasEmittedCall:!1},Q.set(C,fi);else if(fi.toolName=$i,a!==void 0)fi.inputPayload=a;if(!fi.hasEmittedCall)this.logger.debug(`[codex-cli] Emitting tool invocation: ${fi.toolName}`),this.emitToolInvocation(X,fi.toolCallId,fi.toolName,fi.inputPayload),fi.hasEmittedCall=!0;if(p.type==="item.completed"){let{result:_i,metadata:yi}=this.buildToolResultPayload(s);this.logger.debug(`[codex-cli] Tool completed: ${fi.toolName}`),this.emitToolResult(X,fi.toolCallId,fi.toolName,s,_i,yi),Q.delete(C)}},S=()=>{U.kill("SIGTERM")};if(i.abortSignal){if(i.abortSignal.aborted){U.kill("SIGTERM"),j(),X.error(i.abortSignal.reason??Error("Request aborted"));return}i.abortSignal.addEventListener("abort",S,{once:!0})}let M=(p)=>{let s=Date.now()-N;if(p!==0){this.logger.error(`[codex-cli] Stream process exited with code ${p} after ${s}ms`),X.error(n7i({message:`Codex CLI exited with code ${p}`,exitCode:p??void 0,stderr:J,promptExcerpt:n}));return}if(H){this.logger.error(`[codex-cli] Stream failed: ${H}`),X.error(n7i({message:H,stderr:J,promptExcerpt:n}));return}let $i=F;if(!$i&&v){try{let a=FI0(v,"utf8");if(a)$i=a.trim()}catch{}if(r)try{f7i(v,{force:!0})}catch{}}if($i){let a=Vlt();X.enqueue({type:"text-start",id:a}),X.enqueue({type:"text-delta",id:a,delta:$i}),X.enqueue({type:"text-end",id:a})}let C=P??c7i(),fi=(C.inputTokens.total??0)+(C.outputTokens.total??0);this.logger.info(`[codex-cli] Stream completed - Session: ${this.sessionId??"N/A"}, Duration: ${s}ms, Tokens: ${fi}`),this.logger.debug(`[codex-cli] Token usage - Input: ${C.inputTokens.total??0}, Output: ${C.outputTokens.total??0}, Total: ${fi}`),X.enqueue({type:"finish",finishReason:nZ0(void 0),usage:C}),X.close()};U.stderr.on("data",(p)=>J+=String(p)),U.stdout.setEncoding("utf8"),U.stdout.on("data",(p)=>{let s=p.split(/\r?\n/).filter(Boolean);for(let $i of s){let C=this.parseExperimentalJsonEvent($i);if(!C)continue;if(this.logger.debug(`[codex-cli] Stream event: ${C.type??"unknown"}`),C.type==="thread.started"&&typeof C.thread_id==="string"){if(this.sessionId=C.thread_id,this.logger.debug(`[codex-cli] Stream session started: ${this.sessionId}`),!B)B=!0,k();continue}if(C.type==="session.created"&&typeof C.session_id==="string"){if(this.sessionId=C.session_id,this.logger.debug(`[codex-cli] Stream session created: ${this.sessionId}`),!B)B=!0,k();continue}if(C.type==="turn.completed"){let fi=this.extractUsage(C);if(fi)P=fi;continue}if(C.type==="turn.failed"){H=(C.error&&typeof C.error.message==="string"&&C.error.message||(typeof C.message==="string"?C.message:void 0))??H??"Codex turn failed",this.logger.error(`[codex-cli] Stream turn failed: ${H}`),k({error:H});continue}if(C.type==="error"){let a=(typeof C.message==="string"?C.message:void 0)??"Codex error";H=H??a,this.logger.error(`[codex-cli] Stream error event: ${a}`),k({error:a});continue}if(C.type&&C.type.startsWith("item."))m(C)}}),U.on("error",(p)=>{if(this.logger.error(`[codex-cli] Stream spawn error: ${String(p)}`),i.abortSignal)i.abortSignal.removeEventListener("abort",S);j(),X.error(this.handleSpawnError(p,n))}),U.on("close",(p)=>{if(i.abortSignal)i.abortSignal.removeEventListener("abort",S);j(),setImmediate(()=>M(p))})},cancel:()=>{}}),request:{body:t}}}},pY1,vZ0=class{threadId;modelId;client;defaultTurnParams;requestHandlers;autoApprove;currentTurnId=null;active=!1;constructor(i){this.threadId=i.threadId,this.modelId=i.modelId,this.client=i.client,this.defaultTurnParams=i.defaultTurnParams??{},this.requestHandlers=i.requestHandlers??{},this.autoApprove=i.autoApprove}get turnId(){return this.currentTurnId}isTurnCompleted(i){return this.client.hasTurnCompleted?.(i)??!1}refreshActiveState(){if(!this.active||!this.currentTurnId)return;if(this.isTurnCompleted(this.currentTurnId))this.active=!1}isActive(){return this.refreshActiveState(),this.active}setTurnId(i){this.currentTurnId=i,this.active=!this.isTurnCompleted(i)}setInactive(i){if(i&&this.currentTurnId&&i!==this.currentTurnId)return;this.active=!1}async injectMessage(i){let t=typeof i==="string"?[{type:"text",text:i}]:i;if(t.length===0)return;let u=t.map(EZ0),l=await this.client.withThreadLock(this.threadId,async()=>{let c=this.client.registerRequestContext(this.threadId,{handlers:this.requestHandlers,autoApprove:this.autoApprove});try{let $=await this.client.turnStart({threadId:this.threadId,input:u,model:this.modelId,...this.defaultTurnParams});return this.client.bindRequestContext(c,String($.turn.id)),$}catch($){throw this.client.clearRequestContext(c),$}}),n=String(l.turn.id),f=this.isTurnCompleted(n);this.currentTurnId=n,this.active=!f}async interrupt(){if(this.refreshActiveState(),!this.active||!this.currentTurnId)return;let i=this.currentTurnId;if(await this.client.turnInterrupt({threadId:this.threadId,turnId:i}),this.currentTurnId===i)this.active=!1}},rZ0=class{activeToolNames=new Map;activeToolStarts=new Map;stats={totalCalls:0,totalDurationMs:0,byType:{exec:0,patch:0,mcp:0,web_search:0,other:0}};start(i,t){this.activeToolNames.set(i,t),this.activeToolStarts.set(i,Date.now())}get(i){return this.activeToolNames.get(i)}resolve(i,t){return this.activeToolNames.get(i)??t}complete(i,t,u){let l=this.resolve(i,t),n=this.activeToolStarts.get(i),f=n!==void 0?Math.max(0,Date.now()-n):void 0;return this.recordCompletion(l.toolName,u??f),this.activeToolNames.delete(i),this.activeToolStarts.delete(i),l}getStats(){return{totalCalls:this.stats.totalCalls,totalDurationMs:this.stats.totalDurationMs,byType:{...this.stats.byType}}}toolTypeFromName(i){if(i==="exec")return"exec";if(i==="patch")return"patch";if(i==="web_search")return"web_search";if(i.startsWith("mcp__"))return"mcp";return"other"}recordCompletion(i,t){if(this.stats.totalCalls+=1,this.stats.byType[this.toolTypeFromName(i)]+=1,typeof t==="number"&&Number.isFinite(t)&&t>=0)this.stats.totalDurationMs+=t}},DZ0=class{client;emitter;threadId;onUsage;onThreadTurnCompleted;onTurnCompleted;onError;turnId;bufferedTurnScopedEvents=[];toolTracker=new rZ0;textItemIdsWithDelta=new Set;reasoningItemIdsWithDelta=new Set;notificationHandlers;serverRequestHandlers;notificationListener;serverRequestListener;constructor(i){this.client=i.client,this.emitter=i.emitter,this.threadId=i.threadId,this.onUsage=i.onUsage,this.onThreadTurnCompleted=i.onThreadTurnCompleted,this.onTurnCompleted=i.onTurnCompleted,this.onError=i.onError,this.notificationHandlers=wZ0({emitter:this.emitter,toolTracker:this.toolTracker,textItemIdsWithDelta:this.textItemIdsWithDelta,reasoningItemIdsWithDelta:this.reasoningItemIdsWithDelta,onUsage:this.onUsage,onTurnCompleted:this.onTurnCompleted,onError:this.onError,isSameTurn:(t)=>this.isSameTurn(t),getBoundTurnId:()=>this.turnId}),this.serverRequestHandlers=xZ0({emitter:this.emitter,isSameTurn:(t)=>this.isSameTurn(t)})}setTurnId(i){this.turnId=i,this.flushBufferedTurnScopedEvents()}getToolExecutionStats(){return this.toolTracker.getStats()}subscribe(){return this.notificationListener=(i,t)=>{if(!this.isSameThread(t))return;if(i==="turn/completed"&&t.turn&&typeof t.turn==="object")this.onThreadTurnCompleted?.(t.turn);if(this.bufferTurnScopedEventBeforeBinding({kind:"notification",method:i,params:t}))return;this.emitter.emitRaw(i,t),this.handleNotification(i,t)},this.client.on("notification",this.notificationListener),this.serverRequestListener=(i,t,u)=>{if(!this.isSameThread(t))return;if(this.bufferTurnScopedEventBeforeBinding({kind:"server-request",method:i,params:t,id:u}))return;this.emitter.emitRaw(i,t,u),this.handleServerRequest(i,t)},this.client.on("server-request",this.serverRequestListener),()=>this.unsubscribe()}unsubscribe(){if(this.notificationListener)this.client.off("notification",this.notificationListener),this.notificationListener=void 0;if(this.serverRequestListener)this.client.off("server-request",this.serverRequestListener),this.serverRequestListener=void 0;this.bufferedTurnScopedEvents=[]}isSameThread(i){return(typeof i.threadId==="string"?i.threadId:void 0)===this.threadId}getTurnIdFromParams(i){let t=i.turn&&typeof i.turn==="object"?i.turn:void 0;return typeof i.turnId==="string"?i.turnId:typeof t?.id==="string"?t.id:void 0}bufferTurnScopedEventBeforeBinding(i){if(this.turnId)return!1;if(this.getTurnIdFromParams(i.params)===void 0)return!1;return this.bufferedTurnScopedEvents.push(i),!0}flushBufferedTurnScopedEvents(){if(!this.turnId||this.bufferedTurnScopedEvents.length===0)return;let i=this.bufferedTurnScopedEvents;this.bufferedTurnScopedEvents=[];for(let t of i){if(!this.isSameThread(t.params))continue;if(this.getTurnIdFromParams(t.params)!==this.turnId)continue;if(t.kind==="notification")this.emitter.emitRaw(t.method,t.params),this.handleNotification(t.method,t.params);else this.emitter.emitRaw(t.method,t.params,t.id),this.handleServerRequest(t.method,t.params)}}isSameTurn(i){let t=this.getTurnIdFromParams(i);if(!this.turnId)return t===void 0;return t===void 0||t===this.turnId}handleNotification(i,t){if(!this.isSameThread(t))return;let u=this.notificationHandlers[i];if(!u)return;u(t)}handleServerRequest(i,t){if(!this.isSameThread(t))return;let u=this.serverRequestHandlers[i];if(!u)return;u(t)}},yZ0=class{constructor(i,t){this.controller=i,this.options=t,this.jsonModeLastTextBlockOnly=Boolean(t.jsonModeLastTextBlockOnly)}textId;reasoningId;jsonModeLastTextBlockOnly;bufferedCurrentJsonText="";lastCompletedJsonTextId;lastCompletedJsonText="";closed=!1;safeEnqueue(i){if(this.closed)return;try{this.controller.enqueue(i)}catch{this.closed=!0}}emitStreamStart(i){this.safeEnqueue({type:"stream-start",warnings:i})}emitResponseMetadata(){this.safeEnqueue({type:"response-metadata",id:Fn(),timestamp:new Date,modelId:this.options.modelId})}emitRaw(i,t,u){if(!this.options.includeRawChunks)return;this.safeEnqueue({type:"raw",rawValue:{method:i,params:t,id:u}})}emitTextDelta(i,t){if(this.jsonModeLastTextBlockOnly){let l=t??this.textId??Fn();if(this.textId&&this.textId!==l)this.lastCompletedJsonTextId=this.textId,this.lastCompletedJsonText=this.bufferedCurrentJsonText,this.textId=void 0,this.bufferedCurrentJsonText="";if(!this.textId)this.textId=l,this.bufferedCurrentJsonText="";this.bufferedCurrentJsonText=`${this.bufferedCurrentJsonText}${i}`;return}let u=t??this.textId??Fn();if(this.textId&&this.textId!==u)this.safeEnqueue({type:"text-end",id:this.textId}),this.textId=void 0;if(!this.textId)this.textId=u,this.safeEnqueue({type:"text-start",id:this.textId});this.safeEnqueue({type:"text-delta",id:this.textId,delta:i})}emitReasoningDelta(i,t=!1,u){let l=u??this.reasoningId??Fn();if(this.reasoningId&&this.reasoningId!==l)this.safeEnqueue({type:"reasoning-end",id:this.reasoningId}),this.reasoningId=void 0;if(!this.reasoningId)this.reasoningId=l,this.safeEnqueue({type:"reasoning-start",id:this.reasoningId});this.safeEnqueue({type:"reasoning-delta",id:this.reasoningId,delta:i,...t?{providerMetadata:{"codex-app-server":{isSummary:!0}}}:{}})}emitToolCall(i,t,u,l){if(this.safeEnqueue({type:"tool-input-start",id:i,toolName:t,providerExecuted:!0,...l?{dynamic:!0}:{}}),u)this.safeEnqueue({type:"tool-input-delta",id:i,delta:u});this.safeEnqueue({type:"tool-input-end",id:i}),this.safeEnqueue({type:"tool-call",toolCallId:i,toolName:t,input:u,providerExecuted:!0,...l?{dynamic:!0}:{}})}emitToolOutputDelta(i,t,u){this.safeEnqueue({type:"tool-result",toolCallId:i,toolName:t,preliminary:!0,result:{type:"output-delta",delta:u}})}emitToolResult(i,t,u,l,n){this.safeEnqueue({type:"tool-result",toolCallId:i,toolName:t,result:u??{},...l?{dynamic:!0}:{},...n?{isError:!0}:{}})}emitApprovalRequest(i){this.safeEnqueue({type:"tool-approval-request",approvalId:i,toolCallId:i})}emitFinish(i,t,u){if(this.jsonModeLastTextBlockOnly){if(this.textId)this.lastCompletedJsonTextId=this.textId,this.lastCompletedJsonText=this.bufferedCurrentJsonText,this.textId=void 0,this.bufferedCurrentJsonText="";let l=this.lastCompletedJsonTextId;if(l){let n=this.lastCompletedJsonText;if(this.safeEnqueue({type:"text-start",id:l}),n.length>0)this.safeEnqueue({type:"text-delta",id:l,delta:n});this.safeEnqueue({type:"text-end",id:l})}this.lastCompletedJsonTextId=void 0,this.lastCompletedJsonText=""}else if(this.textId)this.safeEnqueue({type:"text-end",id:this.textId});if(this.reasoningId)this.safeEnqueue({type:"reasoning-end",id:this.reasoningId});this.safeEnqueue({type:"finish",finishReason:i,usage:t,...u?{providerMetadata:u}:{}})}close(){if(this.closed)return;this.closed=!0;try{this.controller.close()}catch{}}error(i){if(this.closed)return;this.closed=!0;try{this.controller.error(i)}catch{}}},OZ0=5000,TZ0=class{constructor(i){this.options=i}state="created";usage=c7i();turnId;requestContextId;cleanedUp=!1;pendingCancelReason;cancelBeforeTurnId=!1;pendingAbortReason;interruptWaitPromise;cancelWaitPromise;settleTurn;turnCompletionPromise=new Promise(()=>{return});emitter;router;unsubscribeRouter;onAbort;isTerminalState(){return this.state==="closed"||this.state==="errored"||this.state==="finishing"}isClosedState(){return this.state==="closed"}async start(i){if(this.state!=="created")return;if(this.state="starting",this.turnCompletionPromise=new Promise((t,u)=>{this.settleTurn={resolve:t,reject:u}}),this.emitter=new yZ0(i,{modelId:this.options.modelId,threadId:this.options.threadId,includeRawChunks:this.options.includeRawChunks,jsonModeLastTextBlockOnly:this.options.jsonModeLastTextBlockOnly}),this.emitter.emitStreamStart(this.options.warnings),this.emitter.emitResponseMetadata(),this.router=new DZ0({client:this.options.client,emitter:this.emitter,threadId:this.options.threadId,onUsage:(t)=>{this.usage=t},onThreadTurnCompleted:(t)=>{this.options.session?.setInactive(t.id)},onTurnCompleted:(t)=>{this.settleTurn?.resolve(t)},onError:(t)=>{this.settleTurn?.reject(t)}}),this.unsubscribeRouter=this.router.subscribe(),this.attachAbortSignal(),this.pendingCancelReason!==void 0){if(await this.requestCancel(this.pendingCancelReason),this.isClosedState())return}if(this.pendingAbortReason!==void 0){await this.failWithError(this.pendingAbortReason);return}try{this.state="awaiting_turn_id";let t=this.options.shouldSerializeTurnStart?await this.options.client.withThreadLock(this.options.threadId,async()=>await this.startTurnWithContext()):await this.startTurnWithContext();if(this.turnId=t.turn.id,this.router.setTurnId(this.turnId),this.options.session?.setTurnId(this.turnId),this.isClosedState()){if(this.pendingCancelReason!==void 0&&this.cancelBeforeTurnId)await this.requestCancel(this.pendingCancelReason);return}if(this.state="running",this.pendingCancelReason!==void 0){await this.requestCancel(this.pendingCancelReason);return}if(this.pendingAbortReason!==void 0)throw await this.interruptAndAwaitCompletion(),this.pendingAbortReason;let u=await this.turnCompletionPromise;if(this.pendingCancelReason!==void 0){this.finishSilently();return}if(this.pendingAbortReason!==void 0)throw this.pendingAbortReason;if(this.isTerminalState())return;this.state="finishing";let l=this.router.getToolExecutionStats();this.emitter.emitFinish(UZ0(u),this.usage,{"codex-app-server":{threadId:this.options.threadId,...this.turnId?{turnId:this.turnId}:{},toolExecutionStats:l}}),this.emitter.close(),this.cleanup(),this.state="closed"}catch(t){if(this.pendingCancelReason!==void 0){if(this.turnId)await this.requestCancel(this.pendingCancelReason);else this.finishSilently();return}if(this.options.hadInitialThreadId&&NZ0(t)){if(this.options.threadResolution.persistent&&!this.options.threadResolution.explicit)this.options.clearPersistentThreadState(this.options.threadId);await this.failWithError(JZ0(this.options.threadId));return}if(this.pendingAbortReason!==void 0&&this.turnId)await this.interruptAndAwaitCompletion();await this.failWithError(t)}}async cancel(i){switch(this.pendingCancelReason=i??this.pendingCancelReason??Error("Stream canceled"),this.state){case"closed":case"errored":case"finishing":return;case"interrupting":await this.cancelWaitPromise;return;default:await this.requestCancel(i)}}async startTurnWithContext(){this.requestContextId=this.options.client.registerRequestContext(this.options.threadId,{handlers:this.options.requestHandlers??{},autoApprove:this.options.autoApprove});try{let i=await this.options.client.turnStart(this.options.turnStartParams);return this.options.client.bindRequestContext(this.requestContextId,i.turn.id),i}catch(i){if(this.requestContextId)this.options.client.clearRequestContext(this.requestContextId),this.requestContextId=void 0;throw i}}attachAbortSignal(){let i=this.options.abortSignal;if(!i)return;if(i.aborted){this.pendingAbortReason=i.reason??Error("Request aborted");return}this.onAbort=()=>{if(this.pendingAbortReason=i.reason??Error("Request aborted"),!this.turnId)return;(async()=>{await this.interruptAndAwaitCompletion(),await this.failWithError(this.pendingAbortReason)})()},i.addEventListener("abort",this.onAbort,{once:!0})}async requestCancel(i){if(this.pendingCancelReason=i??this.pendingCancelReason??Error("Stream canceled"),!this.turnId){this.cancelBeforeTurnId=this.state==="starting"||this.state==="awaiting_turn_id",this.finishSilently();return}if(this.isTerminalState()&&!this.cancelBeforeTurnId)return;if(!this.cancelWaitPromise)this.cancelWaitPromise=(async()=>{if(this.state="interrupting",this.cancelBeforeTurnId)await this.options.client.turnInterrupt({threadId:this.options.threadId,turnId:this.turnId}).catch(()=>{return}),this.cancelBeforeTurnId=!1;else await this.interruptAndAwaitCompletion();this.finishSilently()})();await this.cancelWaitPromise}async interruptAndAwaitCompletion(){if(!this.turnId)return;if(!this.interruptWaitPromise)this.interruptWaitPromise=(async()=>{await this.options.client.turnInterrupt({threadId:this.options.threadId,turnId:this.turnId}).catch(()=>{return}),await XZ0(this.turnCompletionPromise.then(()=>{return}),OZ0)})();await this.interruptWaitPromise}async failWithError(i){if(this.isTerminalState())return;this.state="errored",this.emitter?.error(i),this.cleanup()}finishSilently(){if(this.isTerminalState())return;this.cleanup(),this.state="closed"}cleanup(){if(this.cleanedUp)return;if(this.cleanedUp=!0,this.unsubscribeRouter?.(),this.unsubscribeRouter=void 0,this.turnId)this.options.client.clearRequestContextForTurn(this.turnId);if(this.requestContextId)this.options.client.clearRequestContext(this.requestContextId),this.requestContextId=void 0;if(this.options.abortSignal&&this.onAbort)this.options.abortSignal.removeEventListener("abort",this.onAbort);this.onAbort=void 0,this.options.releaseResources()}},IZ0,PZ0=class{specificationVersion="v3";provider="codex-app-server";defaultObjectGenerationMode="json";supportsImageUrls=!0;supportedUrls={};supportsStructuredOutputs=!0;modelId;settings;client;logger;onSdkMcpServerUsed;onSdkMcpServerReleased;persistentThreadId;persistentThreadRawEventsEnabled;persistentSession;persistentBootstrapLock=Promise.resolve();constructor(i){this.modelId=i.id,this.settings=i.settings??{},this.client=i.client,this.onSdkMcpServerUsed=i.onSdkMcpServerUsed,this.onSdkMcpServerReleased=i.onSdkMcpServerReleased;let t=Ua(this.settings.logger);if(this.logger=KZu(t,this.settings.verbose??!1),!this.modelId||this.modelId.trim()==="")throw new k6({modelId:this.modelId,modelType:"languageModel"})}mergeSettings(i){if(!i)return this.settings;let t={...this.settings,personality:i.personality??this.settings.personality,effort:i.effort??this.settings.effort,summary:i.summary??this.settings.summary,approvalPolicy:i.approvalPolicy??this.settings.approvalPolicy,sandboxPolicy:i.sandboxPolicy??this.settings.sandboxPolicy,baseInstructions:i.baseInstructions??this.settings.baseInstructions,developerInstructions:i.developerInstructions??this.settings.developerInstructions,autoApprove:i.autoApprove??this.settings.autoApprove,persistExtendedHistory:i.persistExtendedHistory??this.settings.persistExtendedHistory,threadMode:i.threadMode??this.settings.threadMode,resume:i.resume??this.settings.resume,includeRawChunks:i.includeRawChunks??this.settings.includeRawChunks,rmcpClient:i.rmcpClient??this.settings.rmcpClient,configOverrides:{...this.settings.configOverrides??{},...i.configOverrides??{}},serverRequests:QZ0(this.settings.serverRequests,i.serverRequests),onSessionCreated:i.onSessionCreated??this.settings.onSessionCreated};return t.mcpServers=YZ0(this.settings.mcpServers,i.mcpServers),t}resolveThreadMode(i,t){return t?.threadMode??i.threadMode??"stateless"}resolveTargetThreadId(i,t){let u=this.resolveThreadMode(i,t),l=t?.threadId??t?.resume??i.resume;if(l)return{threadId:l,explicit:!0,persistent:u==="persistent"};if(u==="persistent"&&this.persistentThreadId)return{threadId:this.persistentThreadId,explicit:!1,persistent:!0};return{threadId:void 0,explicit:!1,persistent:u==="persistent"}}resolveIncludeRawChunks(i,t,u){return(i??u?.includeRawChunks??t.includeRawChunks)===!0}async resolveConfig(i,t){let u={},l=[];try{for(let[c,$]of Object.entries(i.mcpServers??{})){if($7i($)){let d=await $._start();this.onSdkMcpServerUsed?.($,t),l.push($),u[c]=d;continue}u[c]=$}}catch(c){if(t==="request")for(let $ of l)this.onSdkMcpServerReleased?.($);throw c}let f={...$Z0(Object.keys(u).length>0?u:void 0,i.rmcpClient),...i.configOverrides??{}};return{configOverrides:Object.keys(f).length>0?f:void 0,usedSdkMcpServers:l}}async buildUserInput(i,t){let u=[],l=[];if(i.trim().length>0)u.push({type:"text",text:i,text_elements:[]});for(let n of t){if(n.type==="remote"){u.push({type:"image",url:n.url,imageUrl:n.url});continue}try{let f=pZu(n.data);l.push(f),u.push({type:"localImage",path:f})}catch(f){this.logger.warn(`[codex-app-server] Failed to write image to temp file: ${String(f)}`)}}return{input:u,tempImagePaths:l}}async startOrResumeThread(i){let{settings:t,providerOptions:u,configOverrides:l,developerInstructions:n,includeRawChunks:f}=i,c=this.resolveTargetThreadId(t,u),$=async(_)=>{return(await this.client.threadStart({model:this.modelId,cwd:t.cwd,approvalPolicy:u7i(t),sandbox:YZu(t),config:l,baseInstructions:t.baseInstructions,developerInstructions:n,personality:t.personality,ephemeral:_,experimentalRawEvents:f,persistExtendedHistory:t.persistExtendedHistory??!1})).thread.id},d=async()=>{let _=async(g)=>{try{await this.client.threadResume({threadId:g.threadId,model:this.modelId,cwd:t.cwd,approvalPolicy:u7i(t),sandbox:YZu(t),config:l,baseInstructions:t.baseInstructions,developerInstructions:n,personality:t.personality,persistExtendedHistory:t.persistExtendedHistory??!1});let h=g.persistent&&this.persistentThreadId===g.threadId?this.persistentThreadRawEventsEnabled:void 0;if(g.persistent){if(this.persistentThreadId=g.threadId,g.explicit)this.persistentThreadRawEventsEnabled=void 0}return{threadId:g.threadId,persistent:g.persistent,explicit:g.explicit,resumed:!0,rawEventsNegotiated:h}}catch(h){if(!ZZ0(h))throw h;if(g.persistent&&!g.explicit)this.clearPersistentThreadState(g.threadId);throw BZ0(g.threadId)}};if(!c.threadId&&c.persistent){if(this.persistentThreadId)return await _({threadId:this.persistentThreadId,persistent:!0,explicit:!1});let g=await $(!1);return this.persistentThreadId=g,this.persistentThreadRawEventsEnabled=f,{threadId:g,persistent:!0,explicit:!1,resumed:!1,rawEventsNegotiated:f}}if(!c.threadId){let g=await $(!c.persistent);if(c.persistent)this.persistentThreadId=g,this.persistentThreadRawEventsEnabled=f;return{threadId:g,persistent:c.persistent,explicit:!1,resumed:!1,rawEventsNegotiated:f}}return await _({threadId:c.threadId,persistent:c.persistent,explicit:c.explicit})};if(c.persistent&&!c.explicit)return await this.withPersistentBootstrapLock(d);return await d()}async withPersistentBootstrapLock(i){let t=this.persistentBootstrapLock,u,l=new Promise((f)=>{u=f}),n=t.then(()=>l);this.persistentBootstrapLock=n,await t;try{return await i()}finally{if(u?.(),this.persistentBootstrapLock===n)this.persistentBootstrapLock=Promise.resolve()}}clearPersistentThreadState(i){if(i&&this.persistentThreadId&&this.persistentThreadId!==i)return;if(this.persistentThreadId=void 0,this.persistentThreadRawEventsEnabled=void 0,!i||this.persistentSession?.threadId===i)this.persistentSession=void 0}async createOrReuseSession(i){let{threadId:t,settings:u,providerOptions:l}=i,n=l?.onSessionCreated??u.onSessionCreated;if(!n)return;let f=this.resolveThreadMode(u,l)==="persistent";if(f&&this.persistentSession&&this.persistentSession.threadId===t)return this.persistentSession;let c=new vZ0({threadId:t,modelId:this.modelId,client:this.client,defaultTurnParams:{cwd:u.cwd,approvalPolicy:u7i(u),sandboxPolicy:PZu(u),effort:u.effort,summary:u.summary,personality:u.personality},requestHandlers:u.serverRequests??{},autoApprove:u.autoApprove});if(await n(c),f)this.persistentSession=c;return c}preparePrompt(i,t){let u=lBu({prompt:i,mode:t?"persistent":"stateless"});return{promptText:u.text,images:[...u.localImages.map((l)=>({type:"local",data:l})),...u.remoteImageUrls.map((l)=>({type:"remote",url:l}))],warnings:u.warnings.map((l)=>l.type==="unsupported"?{type:"unsupported",feature:l.feature,details:l.details}:{type:"other",message:l.message}),systemInstruction:u.systemInstruction}}async doGenerate(i){let{stream:t,request:u}=await this.doStream(i),l=[],n=new Map,f=new Map,c,$,d={id:Fn(),timestamp:new Date,modelId:this.modelId},_=c7i(),g={unified:"other",raw:void 0},h=[],E,v=(O,X)=>{let N=n.get(O);if(N){if(X)N.providerMetadata=X;return N}let U={type:"text",text:"",...X?{providerMetadata:X}:{}};return n.set(O,U),l.push(U),U},r=(O,X)=>{let N=f.get(O);if(N){if(X)N.providerMetadata=X;return N}let U={type:"reasoning",text:"",...X?{providerMetadata:X}:{}};return f.set(O,U),l.push(U),U},x=(O)=>{l.push(O)};for await(let O of t){if(O.type==="stream-start"){h=O.warnings;continue}if(O.type==="response-metadata"){d={id:O.id,timestamp:O.timestamp,modelId:O.modelId};continue}if(O.type==="text-start"){c=O.id,v(O.id,O.providerMetadata);continue}if(O.type==="text-delta"){let X=typeof O.id==="string"?O.id:c??"__default_text_block__";c=X;let N=v(X,O.providerMetadata);N.text=`${N.text}${O.delta}`;continue}if(O.type==="text-end"){let X=typeof O.id==="string"?O.id:c;if(X){let N=v(X,O.providerMetadata);if(O.providerMetadata)N.providerMetadata=O.providerMetadata}if(c===X)c=void 0;continue}if(O.type==="reasoning-start"){$=O.id,r(O.id,O.providerMetadata);continue}if(O.type==="reasoning-delta"){let X=typeof O.id==="string"?O.id:$??"__default_reasoning_block__";$=X;let N=r(X,O.providerMetadata);N.text=`${N.text}${O.delta}`;continue}if(O.type==="reasoning-end"){let X=typeof O.id==="string"?O.id:$;if(X){let N=r(X,O.providerMetadata);if(O.providerMetadata)N.providerMetadata=O.providerMetadata}if($===X)$=void 0;continue}if(O.type==="file"){x(O);continue}if(O.type==="source"){x(O);continue}if(O.type==="tool-approval-request"){x(O);continue}if(O.type==="tool-call"){x(O);continue}if(O.type==="tool-result"){x(O);continue}if(O.type==="finish")_=O.usage,g=O.finishReason,E=O.providerMetadata}return{content:l.filter((O)=>{if(O.type==="text")return O.text.trim().length>0;if(O.type==="reasoning")return O.text.trim().length>0;return!0}),usage:_,finishReason:g,warnings:h,response:d,request:u,...E?{providerMetadata:E}:{}}}async doStream(i){let t=await Alt({provider:this.provider,providerOptions:i.providerOptions,schema:KI0}),u=this.mergeSettings(t),l=this.resolveThreadMode(u,t)==="persistent"?"provider":"request",n=this.resolveIncludeRawChunks(i.includeRawChunks,u,t),f=[...cBu({temperature:i.temperature,topP:i.topP,topK:i.topK,maxOutputTokens:i.maxOutputTokens,presencePenalty:i.presencePenalty,frequencyPenalty:i.frequencyPenalty,stopSequences:i.stopSequences,seed:i.seed,tools:i.tools,toolChoice:i.toolChoice})],c=t?.developerInstructions??u.developerInstructions,$=this.resolveTargetThreadId(u,t),d=this.preparePrompt(i.prompt,Boolean($.threadId));f.push(...d.warnings);let _=c??(!$.threadId?d.systemInstruction:void 0),g=await this.resolveConfig(u,l),h=!1,E=()=>{if(h||l!=="request")return;h=!0;for(let J of g.usedSdkMcpServers)this.onSdkMcpServerReleased?.(J)},v;try{v=await this.startOrResumeThread({settings:u,providerOptions:t,configOverrides:g.configOverrides,developerInstructions:_,includeRawChunks:n})}catch(J){throw E(),J}let r=v.threadId;if(n&&v.resumed&&v.rawEventsNegotiated!==!0)f.push({type:"other",message:"includeRawChunks was requested while resuming an existing thread that may not emit raw events. Start a new thread to guarantee raw chunk events."});let x=[],y=[],O;try{let J=await this.buildUserInput(d.promptText,d.images);x=J.input,y=J.tempImagePaths,O=await this.createOrReuseSession({threadId:r,settings:u,providerOptions:t})}catch(J){throw i0t(y),E(),J}let X=FZ0({threadId:r,modelId:this.modelId,input:x,settings:{cwd:u.cwd,approvalPolicy:u7i(u),sandboxPolicy:PZu(u),effort:u.effort,summary:u.summary,personality:u.personality},responseFormat:i.responseFormat}),N=new TZ0({client:this.client,modelId:this.modelId,threadId:r,warnings:f,includeRawChunks:n,jsonModeLastTextBlockOnly:i.responseFormat?.type==="json",turnStartParams:X,requestHandlers:u.serverRequests,autoApprove:u.autoApprove,session:O,abortSignal:i.abortSignal,shouldSerializeTurnStart:v.persistent||v.explicit,hadInitialThreadId:Boolean($.threadId),threadResolution:{persistent:v.persistent,explicit:v.explicit},releaseResources:()=>{i0t(y),E()},clearPersistentThreadState:(J)=>{this.clearPersistentThreadState(J)}});return{stream:new ReadableStream({start:async(J)=>{await N.start(J)},cancel:async(J)=>{await N.cancel(J)}}),request:{body:d.promptText}}}},A2,AZ0,GZ0,WZ0,kZ0,jZ0,SZ0,zZ0,bZ0,KZ0,HZ0,RZ0,LZ0,eZ0,CZ0,MZ0,qZ0,VZ0,aZ0,mZ0,oZ0,sZ0,pZ0,iB0,$0t,l7i,dBu,_Bu,tB0,uB0,lB0,nB0,fB0,cB0,AZu,GZu,$B0,dB0,WZu,_B0,gB0,gBu,hBu,EBu,vBu,rBu,wBu,hB0,EB0,vB0,rB0=30000,wB0=1024,jZu,XB0,iP1;var xBu=w(()=>{fr();Glt();QI0={debug:(i)=>console.debug(`[DEBUG] ${i}`),info:(i)=>console.info(`[INFO] ${i}`),warn:(i)=>console.warn(`[WARN] ${i}`),error:(i)=>console.error(`[ERROR] ${i}`)},YI0={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}};PI0=/^[A-Za-z0-9_-]+$/,AI0=/^[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)*$/;LZu=K.object({debug:K.any().refine((i)=>typeof i==="function",{message:"debug must be a function"}),info:K.any().refine((i)=>typeof i==="function",{message:"info must be a function"}),warn:K.any().refine((i)=>typeof i==="function",{message:"warn must be a function"}),error:K.any().refine((i)=>typeof i==="function",{message:"error must be a function"})}),eZu=K.object({enabled:K.boolean().optional(),startupTimeoutSec:K.number().int().positive().optional(),toolTimeoutSec:K.number().int().positive().optional(),enabledTools:K.array(K.string()).optional(),disabledTools:K.array(K.string()).optional()}),GI0=eZu.extend({transport:K.literal("stdio"),command:K.string().min(1),args:K.array(K.string()).optional(),env:K.record(K.string(),K.string()).optional(),cwd:K.string().optional()}),WI0=eZu.extend({transport:K.literal("http"),url:K.string().min(1),bearerToken:K.string().optional(),bearerTokenEnvVar:K.string().optional(),httpHeaders:K.record(K.string(),K.string()).optional(),envHttpHeaders:K.record(K.string(),K.string()).optional()}),CZu=K.discriminatedUnion("transport",[GI0,WI0]),l0t=K.string().min(1).refine((i)=>HZu(i),{message:"MCP server names must match /^[A-Za-z0-9_-]+$/."}),MZu=K.record(l0t,CZu),kI0=K.object({name:l0t,_start:K.any().refine((i)=>typeof i==="function",{message:"_start must be a function"}),_stop:K.any().refine((i)=>typeof i==="function",{message:"_stop must be a function"})}).passthrough(),qZu=K.record(l0t,K.union([CZu,kI0])),jI0=K.string().min(1).refine((i)=>u0t(i),{message:"configOverrides keys must match /^[A-Za-z0-9_-]+(?:\\.[A-Za-z0-9_-]+)*$/."}),n0t=K.record(jI0,K.union([K.string(),K.number(),K.boolean(),K.object({}).passthrough(),K.array(K.any())])).optional(),SI0=K.object({cwd:K.string().optional(),approvalMode:K.enum(["untrusted","on-failure","on-request","never"]).optional(),sandboxMode:K.enum(["read-only","workspace-write","danger-full-access"]).optional(),env:K.record(K.string(),K.string()).optional(),verbose:K.boolean().optional(),logger:K.union([K.literal(!1),LZu]).optional(),reasoningEffort:K.enum(["none","minimal","low","medium","high","xhigh"]).optional(),reasoningSummary:K.enum(["auto","detailed"]).optional(),reasoningSummaryFormat:K.enum(["none","experimental"]).optional(),modelVerbosity:K.enum(["low","medium","high"]).optional(),mcpServers:MZu.optional(),rmcpClient:K.boolean().optional(),configOverrides:n0t}).strict(),zI0=SI0.extend({codexPath:K.string().optional(),addDirs:K.array(K.string().min(1)).optional(),fullAuto:K.boolean().optional(),dangerouslyBypassApprovalsAndSandbox:K.boolean().optional(),skipGitRepoCheck:K.boolean().optional(),color:K.enum(["always","never","auto"]).optional(),allowNpx:K.boolean().optional(),outputLastMessageFile:K.string().optional(),profile:K.string().optional(),oss:K.boolean().optional(),webSearch:K.boolean().optional()}).strict(),VZu=K.object({reject:K.object({sandbox_approval:K.boolean(),rules:K.boolean(),mcp_elicitations:K.boolean()})}),aZu=K.union([K.enum(["read-only","workspace-write","danger-full-access"]),K.object({type:K.string()}).passthrough()]),mZu=K.object({onCommandExecutionApproval:K.any().refine((i)=>i===void 0||typeof i==="function",{message:"onCommandExecutionApproval must be a function"}).optional(),onFileChangeApproval:K.any().refine((i)=>i===void 0||typeof i==="function",{message:"onFileChangeApproval must be a function"}).optional(),onSkillApproval:K.any().refine((i)=>i===void 0||typeof i==="function",{message:"onSkillApproval must be a function"}).optional(),onToolRequestUserInput:K.any().refine((i)=>i===void 0||typeof i==="function",{message:"onToolRequestUserInput must be a function"}).optional(),onDynamicToolCall:K.any().refine((i)=>i===void 0||typeof i==="function",{message:"onDynamicToolCall must be a function"}).optional(),onAuthRefresh:K.any().refine((i)=>i===void 0||typeof i==="function",{message:"onAuthRefresh must be a function"}).optional(),onUnhandled:K.any().refine((i)=>i===void 0||typeof i==="function",{message:"onUnhandled must be a function"}).optional()}).strict().optional(),bI0=K.object({codexPath:K.string().optional(),cwd:K.string().optional(),env:K.record(K.string(),K.string()).optional(),verbose:K.boolean().optional(),logger:K.union([K.literal(!1),LZu]).optional(),personality:K.enum(["none","friendly","pragmatic"]).optional(),effort:K.enum(["none","minimal","low","medium","high","xhigh"]).optional(),summary:K.enum(["auto","concise","detailed","none"]).optional(),approvalPolicy:K.union([K.enum(["untrusted","on-failure","on-request","never"]),VZu]).optional(),sandboxPolicy:aZu.optional(),baseInstructions:K.string().optional(),developerInstructions:K.string().optional(),mcpServers:qZu.optional(),rmcpClient:K.boolean().optional(),configOverrides:n0t,autoApprove:K.boolean().optional(),persistExtendedHistory:K.boolean().optional(),connectionTimeoutMs:K.number().int().positive().optional(),requestTimeoutMs:K.number().int().positive().optional(),idleTimeoutMs:K.number().int().positive().optional(),minCodexVersion:K.string().regex(/^\d+\.\d+\.\d+(-[A-Za-z0-9.-]+)?$/,"minCodexVersion must be a semver string").optional(),threadMode:K.enum(["stateless","persistent"]).optional(),resume:K.string().optional(),includeRawChunks:K.boolean().optional(),serverRequests:mZu,onSessionCreated:K.any().refine((i)=>i===void 0||typeof i==="function",{message:"onSessionCreated must be a function"}).optional()}).strict(),KI0=K.object({threadId:K.string().optional(),resume:K.string().optional(),threadMode:K.enum(["stateless","persistent"]).optional(),includeRawChunks:K.boolean().optional(),personality:K.enum(["none","friendly","pragmatic"]).optional(),effort:K.enum(["none","minimal","low","medium","high","xhigh"]).optional(),summary:K.enum(["auto","concise","detailed","none"]).optional(),approvalPolicy:K.union([K.enum(["untrusted","on-failure","on-request","never"]),VZu]).optional(),sandboxPolicy:aZu.optional(),baseInstructions:K.string().optional(),developerInstructions:K.string().optional(),mcpServers:qZu.optional(),rmcpClient:K.boolean().optional(),configOverrides:n0t,autoApprove:K.boolean().optional(),persistExtendedHistory:K.boolean().optional(),serverRequests:mZu,onSessionCreated:K.any().refine((i)=>i===void 0||typeof i==="function",{message:"onSessionCreated must be a function"}).optional()}).strict();BZu=class extends ZIu{feature;minCodexVersion;serverVersion;constructor({feature:i,minCodexVersion:t,serverVersion:u,message:l}){let n=l??`Feature '${i}' is not supported by this codex app-server`+(u?` (detected ${u})`:"")+(t?`. Requires codex CLI >= ${t}.`:".");super({functionality:i,message:n});this.name="UnsupportedFeatureError",this.feature=i,this.minCodexVersion=t,this.serverVersion=u}};dZ0=K.object({reasoningEffort:K.enum(["none","minimal","low","medium","high","xhigh"]).optional(),reasoningSummary:K.enum(["auto","detailed"]).optional(),reasoningSummaryFormat:K.enum(["none","experimental"]).optional(),textVerbosity:K.enum(["low","medium","high"]).optional(),addDirs:K.array(K.string().min(1)).optional(),configOverrides:K.record(K.string().refine((i)=>u0t(i),{message:"configOverrides keys must match /^[A-Za-z0-9_-]+(?:\\.[A-Za-z0-9_-]+)*$/."}),K.union([K.string(),K.number(),K.boolean(),K.object({}).passthrough(),K.array(K.any())])).optional(),mcpServers:MZu.optional(),rmcpClient:K.boolean().optional()}).strict();pY1=hZ0();IZ0=Symbol.for("ai-sdk-provider-codex-cli.sdkMcpServer");A2=K.union([K.number(),K.string()]),AZ0=K.object({id:A2,method:K.string().min(1),params:K.record(K.string(),K.unknown()).optional()}).passthrough(),GZ0=K.object({id:A2,result:K.unknown()}).refine((i)=>Object.prototype.hasOwnProperty.call(i,"result"),{message:"result field is required"}).passthrough(),WZ0=K.object({id:K.union([A2,K.null()]),error:K.object({code:K.number(),message:K.string(),data:K.unknown().optional()}).passthrough()}).passthrough(),kZ0=K.object({method:K.string().min(1),params:K.record(K.string(),K.unknown()).optional()}).passthrough(),jZ0=K.object({type:K.literal("text"),text:K.string(),text_elements:K.array(K.unknown())}).passthrough(),SZ0=K.object({type:K.literal("image"),url:K.string().optional(),imageUrl:K.string().optional()}).refine((i)=>typeof i.url==="string"||typeof i.imageUrl==="string",{message:"image input must provide url or imageUrl"}).passthrough(),zZ0=K.object({type:K.literal("localImage"),path:K.string()}).passthrough(),bZ0=K.object({type:K.literal("skill"),name:K.string(),path:K.string()}).passthrough(),KZ0=K.object({type:K.literal("mention"),name:K.string(),path:K.string()}).passthrough(),HZ0=K.discriminatedUnion("type",[jZ0,SZ0,zZ0,bZ0,KZ0]),RZ0=K.object({type:K.literal("userMessage"),id:K.string(),content:K.array(HZ0)}).passthrough(),LZ0=K.object({type:K.literal("agentMessage"),id:K.string(),text:K.string(),phase:K.string().nullable()}).passthrough(),eZ0=K.object({type:K.literal("plan"),id:K.string(),text:K.string()}).passthrough(),CZ0=K.object({type:K.literal("reasoning"),id:K.string(),summary:K.array(K.string()),content:K.array(K.string())}).passthrough(),MZ0=K.object({type:K.literal("commandExecution"),id:K.string(),command:K.string(),cwd:K.string(),processId:K.string().nullable(),status:K.string(),commandActions:K.array(K.unknown()),aggregatedOutput:K.string().nullable(),exitCode:K.number().nullable(),durationMs:K.number().nullable()}).passthrough(),qZ0=K.object({type:K.literal("fileChange"),id:K.string(),changes:K.array(K.unknown()),status:K.string()}).passthrough(),VZ0=K.object({type:K.literal("mcpToolCall"),id:K.string(),server:K.string(),tool:K.string(),status:K.string(),arguments:K.unknown(),result:K.unknown().nullable(),error:K.unknown().nullable(),durationMs:K.number().nullable()}).passthrough(),aZ0=K.object({type:K.literal("collabAgentToolCall"),id:K.string(),tool:K.string(),status:K.string(),senderThreadId:K.string(),receiverThreadIds:K.array(K.string()),prompt:K.string().nullable(),agentsStates:K.record(K.string(),K.unknown())}).passthrough(),mZ0=K.object({type:K.literal("webSearch"),id:K.string(),query:K.string(),action:K.unknown().nullable()}).passthrough(),oZ0=K.object({type:K.literal("imageView"),id:K.string(),path:K.string()}).passthrough(),sZ0=K.object({type:K.literal("enteredReviewMode"),id:K.string(),review:K.string()}).passthrough(),pZ0=K.object({type:K.literal("exitedReviewMode"),id:K.string(),review:K.string()}).passthrough(),iB0=K.object({type:K.literal("contextCompaction"),id:K.string()}).passthrough(),$0t=K.discriminatedUnion("type",[RZ0,LZ0,eZ0,CZ0,MZ0,qZ0,VZ0,aZ0,mZ0,oZ0,sZ0,pZ0,iB0]),l7i=K.object({httpStatusCode:K.number().nullable()}).passthrough(),dBu=K.union([K.enum(["contextWindowExceeded","usageLimitExceeded","serverOverloaded","internalServerError","unauthorized","badRequest","threadRollbackFailed","sandboxError","other"]),K.object({httpConnectionFailed:l7i}).passthrough(),K.object({responseStreamConnectionFailed:l7i}).passthrough(),K.object({responseStreamDisconnected:l7i}).passthrough(),K.object({responseTooManyFailedAttempts:l7i}).passthrough()]),_Bu=K.object({id:K.string(),items:K.array($0t),status:K.enum(["completed","interrupted","failed","inProgress"]),error:K.object({message:K.string(),codexErrorInfo:dBu.nullable(),additionalDetails:K.string().nullable()}).nullable()}).passthrough(),tB0=K.object({thread:K.object({id:K.string()}).passthrough()}).passthrough(),uB0=K.object({threadId:K.string(),turn:_Bu}).passthrough(),lB0=K.object({threadId:K.string(),turn:_Bu}).passthrough(),nB0=K.object({item:$0t,threadId:K.string(),turnId:K.string()}).passthrough(),fB0=K.object({item:$0t,threadId:K.string(),turnId:K.string()}).passthrough(),cB0=K.object({threadId:K.string(),turnId:K.string(),itemId:K.string(),delta:K.string()}).passthrough(),AZu=K.object({threadId:K.string(),turnId:K.string(),itemId:K.string(),delta:K.string()}).passthrough(),GZu=K.object({threadId:K.string(),turnId:K.string(),itemId:K.string(),delta:K.string()}).passthrough(),$B0=K.object({threadId:K.string(),turnId:K.string(),itemId:K.string(),delta:K.string()}).passthrough(),dB0=K.object({threadId:K.string(),turnId:K.string(),itemId:K.string(),delta:K.string()}).passthrough(),WZu=K.object({totalTokens:K.number(),inputTokens:K.number(),cachedInputTokens:K.number(),outputTokens:K.number(),reasoningOutputTokens:K.number()}).passthrough(),_B0=K.object({threadId:K.string(),turnId:K.string(),tokenUsage:K.object({total:WZu,last:WZu,modelContextWindow:K.number().nullable()}).passthrough()}).passthrough(),gB0=K.object({error:K.object({message:K.string(),codexErrorInfo:dBu.nullable(),additionalDetails:K.string().nullable()}).passthrough(),willRetry:K.boolean(),threadId:K.string(),turnId:K.string()}).passthrough(),gBu=K.object({threadId:K.string(),turnId:K.string(),itemId:K.string(),approvalId:K.string().nullable().optional(),reason:K.string().nullable().optional(),networkApprovalContext:K.unknown().nullable().optional(),command:K.string().nullable().optional(),cwd:K.string().nullable().optional(),commandActions:K.array(K.unknown()).nullable().optional(),proposedExecpolicyAmendment:K.unknown().nullable().optional()}).passthrough(),hBu=K.object({threadId:K.string(),turnId:K.string(),itemId:K.string(),reason:K.string().nullable().optional(),grantRoot:K.string().nullable().optional()}).passthrough(),EBu=K.object({threadId:K.string(),turnId:K.string(),itemId:K.string(),questions:K.array(K.unknown())}).passthrough(),vBu=K.object({itemId:K.string(),skillName:K.string()}).passthrough(),rBu=K.object({threadId:K.string(),turnId:K.string(),callId:K.string(),tool:K.string(),arguments:K.unknown()}).passthrough(),wBu=K.object({reason:K.string(),previousAccountId:K.string().nullable().optional()}).passthrough(),hB0={"item/commandExecution/requestApproval":gBu,"item/fileChange/requestApproval":hBu,"item/tool/requestUserInput":EBu,"skill/requestApproval":vBu,"item/tool/call":rBu,"account/chatgptAuthTokens/refresh":wBu};K.enum(Object.keys(hB0));EB0=K.discriminatedUnion("method",[K.object({id:A2,method:K.literal("item/commandExecution/requestApproval"),params:gBu}).passthrough(),K.object({id:A2,method:K.literal("item/fileChange/requestApproval"),params:hBu}).passthrough(),K.object({id:A2,method:K.literal("item/tool/requestUserInput"),params:EBu}).passthrough(),K.object({id:A2,method:K.literal("skill/requestApproval"),params:vBu}).passthrough(),K.object({id:A2,method:K.literal("item/tool/call"),params:rBu}).passthrough(),K.object({id:A2,method:K.literal("account/chatgptAuthTokens/refresh"),params:wBu}).passthrough()]),vB0={"thread/started":tB0,"turn/started":uB0,"turn/completed":lB0,"item/started":nB0,"item/completed":fB0,"item/agentMessage/delta":cB0,reasoningTextDelta:AZu,reasoningSummaryTextDelta:GZu,"item/reasoning/textDelta":AZu,"item/reasoning/summaryTextDelta":GZu,"item/commandExecution/outputDelta":$B0,"item/fileChange/outputDelta":dB0,"thread/tokenUsage/updated":_B0,error:gB0};jZu=class extends Error{code;constructor(i,t){super(`JSON-RPC error ${i}: ${t}`);this.name="JsonRpcRequestError",this.code=i}},XB0=class extends ZI0{settings;logger;requestTimeoutMs;clientVersion;child;stdoutReader;state="idle";initPromise;nextId=1;nextRequestContextId=1;pending=new Map;threadLocks=new Map;pendingRequestContexts=new Map;pendingRequestContextIdsByThread=new Map;activeRequestContextsByTurn=new Map;completedTurnIds=new Set;lastStderr="";idleTimer;serverCapabilities;expectedExitSignal;writeQueue=Promise.resolve();serverVersion;constructor(i={}){super();this.settings=i.settings??{},this.logger=Ua(i.logger??this.settings.logger),this.requestTimeoutMs=i.requestTimeoutMs??this.settings.requestTimeoutMs??rB0,this.clientVersion=i.clientVersion??"0.0.0"}async ensureReady(){if(this.state==="ready")return;if(this.state==="closed")throw Error("AppServerRpcClient is closed");if(this.initPromise){await this.initPromise;return}let i=this.state==="error";this.state="starting",this.initPromise=this.startAndInitialize().then(()=>{if(this.state="ready",i)this.emit("reconnected")}).catch((t)=>{throw this.cleanupAfterInitializationFailure(t),t}).finally(()=>{this.initPromise=void 0}),await this.initPromise,this.touchActivity()}async request(i,t,u){return await this.ensureReady(),this.touchActivity(),await this.requestInternal(i,t,u)}async requestInternal(i,t,u){let l=this.nextId++,n={id:l,method:i,...t?{params:t}:{}};return await new Promise((f,c)=>{let $=setTimeout(()=>{this.pending.delete(l),c(Error(`Request timed out for method '${i}'`))},u??this.requestTimeoutMs);this.pending.set(l,{resolve:(d)=>f(d),reject:c,timer:$}),this.writeMessage(n).catch((d)=>{let _=this.pending.get(l);if(!_)return;clearTimeout(_.timer),this.pending.delete(l),_.reject(d)})})}notify(i,t){if(this.state!=="ready")throw Error(`Cannot send notification '${i}' while client is not ready`);this.writeMessage({method:i,...t?{params:t}:{}}).catch((u)=>{this.logger.warn(`[codex-app-server] Failed to send notification '${i}': ${String(u)}`)})}async threadStart(i){return await this.request("thread/start",i)}async threadResume(i){return await this.request("thread/resume",i)}async turnStart(i){return await this.request("turn/start",i)}async turnInterrupt(i){return await this.request("turn/interrupt",i)}async modelList(i){if(await this.ensureReady(),this.touchActivity(),this.serverCapabilities?.modelList===!1)throw new BZu({feature:"model/list",minCodexVersion:this.settings.minCodexVersion??"0.105.0",serverVersion:this.serverVersion});try{return await this.requestInternal("model/list",i)}catch(t){if(t instanceof jZu&&t.code===-32601)throw new BZu({feature:"model/list",minCodexVersion:this.settings.minCodexVersion??"0.105.0",serverVersion:this.serverVersion});throw t}}registerRequestContext(i,t){let u=`ctx_${this.nextRequestContextId++}`;this.pendingRequestContexts.set(u,{threadId:i,context:{handlers:t.handlers,autoApprove:t.autoApprove}});let l=this.pendingRequestContextIdsByThread.get(i)??new Set;return l.add(u),this.pendingRequestContextIdsByThread.set(i,l),u}bindRequestContext(i,t){let u=this.pendingRequestContexts.get(i);if(!u)return;if(this.completedTurnIds.has(t)){this.clearRequestContext(i);return}this.activeRequestContextsByTurn.set(t,{handlers:u.context.handlers,autoApprove:u.context.autoApprove}),this.clearRequestContext(i)}clearRequestContext(i){let t=this.pendingRequestContexts.get(i);if(!t)return;this.pendingRequestContexts.delete(i);let u=this.pendingRequestContextIdsByThread.get(t.threadId);if(!u)return;if(u.delete(i),u.size===0)this.pendingRequestContextIdsByThread.delete(t.threadId)}clearRequestContextForTurn(i){this.activeRequestContextsByTurn.delete(i)}hasTurnCompleted(i){return this.completedTurnIds.has(i)}async withThreadLock(i,t){let u=this.threadLocks.get(i)??Promise.resolve(),l,n=new Promise((c)=>{l=c}),f=u.then(()=>n);this.threadLocks.set(i,f),await u;try{return await t()}finally{if(l?.(),this.threadLocks.get(i)===f)this.threadLocks.delete(i)}}async close(){this.state="closed",this.clearIdleTimer(),this.stdoutReader?.close(),this.stdoutReader=void 0;for(let[i,t]of this.pending.entries())clearTimeout(t.timer),t.reject(Error(`Client closed while request ${String(i)} was in flight`));if(this.pending.clear(),this.threadLocks.clear(),this.pendingRequestContexts.clear(),this.pendingRequestContextIdsByThread.clear(),this.activeRequestContextsByTurn.clear(),this.completedTurnIds.clear(),this.serverCapabilities=void 0,this.child)this.expectedExitSignal="SIGTERM",this.child.kill("SIGTERM"),this.child=void 0;this.writeQueue=Promise.resolve()}async dispose(){await this.close()}async startAndInitialize(){let i=xB0(this.settings.codexPath),t=[...i.args,"app-server","--listen","stdio://"];this.lastStderr="",this.expectedExitSignal=void 0,this.child=SZu(i.cmd,t,{stdio:["pipe","pipe","pipe"],env:{...process.env,...this.settings.env??{},RUST_LOG:process.env.RUST_LOG||"error"},cwd:this.settings.cwd}),this.child.stderr.setEncoding("utf8"),this.child.stderr.on("data",(n)=>{if(this.lastStderr+=String(n),this.lastStderr.length>4000)this.lastStderr=this.lastStderr.slice(-4000)}),this.child.on("error",(n)=>{this.logger.error(`[codex-app-server] process error: ${String(n)}`),this.handleCrash(n)}),this.child.on("exit",(n,f)=>{let c=`codex app-server exited (code=${String(n)}, signal=${String(f)})`,$=this.state==="closed"||f!==null&&f===this.expectedExitSignal;if(this.expectedExitSignal=void 0,$){this.logger.info(`[codex-app-server] ${c}`);return}this.logger.warn(`[codex-app-server] ${c}`),this.handleCrash(Error(c))}),this.stdoutReader=BI0.createInterface({input:this.child.stdout,crlfDelay:1/0}),this.stdoutReader.on("line",(n)=>this.handleLine(n));let u={clientInfo:{name:"ai-sdk-provider-codex-cli",version:this.clientVersion},capabilities:{experimentalApi:!0,optOutNotificationMethods:null}},l;try{l=await this.requestInternal("initialize",u,this.settings.connectionTimeoutMs??this.requestTimeoutMs)}catch(n){let f=String(n?.message??n);if(f.includes("ENOENT")||f.includes("unknown subcommand"))throw Error("codex app-server requires codex CLI >= 0.105.0. Run 'codex --version' to check.");throw n7i({message:`Failed to initialize codex app-server: ${f}`,stderr:this.lastStderr,provider:"app-server"})}await this.writeMessage({method:"initialized"}),this.checkVersion(l.userAgent),this.serverCapabilities=l.capabilities??null}checkVersion(i){let t=DB0(i);if(!t){this.logger.warn(`[codex-app-server] Could not parse server version from userAgent: ${i}`);return}this.serverVersion=t;let u=this.settings.minCodexVersion??"0.105.0",l=OB0(t,u);if(l===void 0){this.logger.warn(`[codex-app-server] Could not semver-compare '${t}' against '${u}'.`);return}if(l<0)throw Error(`codex app-server version '${t}' is below required minimum '${u}'.`)}cleanupAfterInitializationFailure(i){if(this.state==="closed")return;this.state="error",this.clearIdleTimer(),this.stdoutReader?.close(),this.stdoutReader=void 0;for(let[t,u]of this.pending.entries())clearTimeout(u.timer),u.reject(Error(`Request ${String(t)} failed during app-server initialization: ${String(i)}`));if(this.pending.clear(),this.threadLocks.clear(),this.pendingRequestContexts.clear(),this.pendingRequestContextIdsByThread.clear(),this.activeRequestContextsByTurn.clear(),this.completedTurnIds.clear(),this.serverCapabilities=void 0,this.child)this.expectedExitSignal="SIGTERM",this.child.kill("SIGTERM"),this.child=void 0;this.writeQueue=Promise.resolve()}handleCrash(i){if(this.state==="closed")return;if(this.state="error",this.clearIdleTimer(),this.stdoutReader?.close(),this.stdoutReader=void 0,this.child)this.expectedExitSignal="SIGTERM",this.child.kill("SIGTERM"),this.child=void 0;for(let[t,u]of this.pending.entries())clearTimeout(u.timer),u.reject(Error(`Request ${String(t)} failed after app-server crash: ${String(i)}`));this.pending.clear(),this.threadLocks.clear(),this.pendingRequestContexts.clear(),this.pendingRequestContextIdsByThread.clear(),this.activeRequestContextsByTurn.clear(),this.completedTurnIds.clear(),this.serverCapabilities=void 0,this.writeQueue=Promise.resolve()}handleLine(i){let t=i.trim();if(!t)return;this.touchActivity();let u;try{u=JSON.parse(t)}catch{this.logger.warn(`[codex-app-server] Ignoring non-JSON line: ${t.slice(0,200)}`);return}let l=GZ0.safeParse(u);if(l.success){this.handleResponse(l.data);return}let n=WZ0.safeParse(u);if(n.success){this.handleErrorResponse(n.data.id,n.data.error);return}let f=AZ0.safeParse(u);if(f.success){let $=f.data;this.handleServerRequest($.id,$.method,$.params??{}).catch((d)=>{this.logger.warn(`[codex-app-server] Failed to handle server request '${$.method}': ${String(d)}`)});return}let c=kZ0.safeParse(u);if(c.success){let $=c.data,d=vB0[$.method];if(d){if(!d.safeParse($.params??{}).success){this.logger.warn(`[codex-app-server] Notification '${$.method}' failed schema validation; dropping.`);return}}if($.method==="turn/completed"){let _=$.params,g=typeof _?.turn?.id==="string"?_.turn.id:void 0;if(g)this.clearRequestContextForTurn(g),this.rememberCompletedTurn(g)}this.emit("notification",$.method,$.params??{});return}this.logger.warn("[codex-app-server] Received unrecognized JSON-RPC message")}handleResponse(i){this.touchActivity();let t=this.pending.get(i.id);if(!t)return;clearTimeout(t.timer),this.pending.delete(i.id),t.resolve(i.result)}handleErrorResponse(i,t){if(this.touchActivity(),i===null){this.logger.error(`[codex-app-server] JSON-RPC error: ${t.message}`);return}let u=this.pending.get(i);if(!u)return;clearTimeout(u.timer),this.pending.delete(i),u.reject(new jZu(t.code,t.message))}getThreadIdFromServerRequest(i){return typeof i.threadId==="string"?i.threadId:void 0}getTurnIdFromServerRequest(i){return typeof i.turnId==="string"?i.turnId:void 0}getPendingContextsForThread(i){let t=this.pendingRequestContextIdsByThread.get(i);if(!t||t.size===0)return[];let u=[];for(let l of t){let n=this.pendingRequestContexts.get(l);if(n)u.push(n.context)}return u}getContextForRequest(i){let t=this.getTurnIdFromServerRequest(i);if(t){let f=this.activeRequestContextsByTurn.get(t);if(f)return f}let u=this.getThreadIdFromServerRequest(i);if(u){let f=this.getPendingContextsForThread(u);if(f.length===1)return f[0];if(f.length>1)this.logger.debug(`[codex-app-server] Received server request for thread '${u}' before turn binding with multiple pending contexts; using settings-level handlers.`);return}let l=this.activeRequestContextsByTurn.size,n=this.pendingRequestContexts.size;if(l+n===1){if(l===1)return this.activeRequestContextsByTurn.values().next().value;return this.pendingRequestContexts.values().next().value?.context}if(l+n>1)this.logger.debug("[codex-app-server] Received threadless server request while multiple request contexts are active; using settings-level handlers.");return}async handleServerRequest(i,t,u){let l=EB0.safeParse({id:i,method:t,params:u}),n=l.success?l.data:{id:i,method:t,params:u},f=async(h)=>{try{await this.writeMessage({id:n.id,result:h})}catch(E){this.logger.warn(`[codex-app-server] Failed to send server request result for '${n.method}': ${String(E)}`)}},c=async(h,E)=>{try{await this.writeMessage({id:n.id,error:{code:h,message:E}})}catch(v){this.logger.warn(`[codex-app-server] Failed to send server request error for '${n.method}': ${String(v)}`)}},$=this.getContextForRequest(n.params),d=$?.handlers??this.settings.serverRequests??{},_=$?.autoApprove??this.settings.autoApprove??!1;this.emit("server-request",n.method,n.params,n.id);let g=async(h)=>{if(!h)return;try{let E=h();if(!E)return;return await E}catch(E){this.logger.warn(`[codex-app-server] request handler failed for '${n.method}': ${String(E)}`);return}};switch(n.method){case"item/commandExecution/requestApproval":{let h=await g(()=>d.onCommandExecutionApproval?.(n));if(h!==void 0){await f(h);return}await f({decision:_?"accept":"decline"});return}case"item/fileChange/requestApproval":{let h=await g(()=>d.onFileChangeApproval?.(n));if(h!==void 0){await f(h);return}await f({decision:_?"accept":"decline"});return}case"skill/requestApproval":{let h=await g(()=>d.onSkillApproval?.(n));if(h!==void 0){await f(h);return}await f({decision:_?"approve":"decline"});return}case"item/tool/requestUserInput":{let h=await g(()=>d.onToolRequestUserInput?.(n));if(h!==void 0){await f(h);return}await f({answers:{}});return}case"item/tool/call":{let h=await g(()=>d.onDynamicToolCall?.(n));if(h!==void 0){await f(h);return}await f({contentItems:[],success:!1});return}case"account/chatgptAuthTokens/refresh":{let h=await g(()=>d.onAuthRefresh?.(n));if(h!==void 0){await f(h);return}await c(-32603,"Auth token refresh not supported by this client");return}default:{let h=await g(()=>d.onUnhandled?.(n));if(h!==void 0){await f(h);return}}await c(-32601,"Method not supported")}}async writeMessage(i){let t=`${JSON.stringify(i)}
|
|
107950
|
-
`,u=async()=>{if(!this.child?.stdin.writable)throw Error("codex app-server stdin is not writable");let n=this.child.stdin;if(!n.write(t))await new Promise((c,$)=>{let d=()=>{h(),c()},_=(E)=>{h(),$(E)},g=()=>{h(),$(Error("codex app-server stdin closed before drain"))},h=()=>{n.off("drain",d),n.off("error",_),n.off("close",g)};n.once("drain",d),n.once("error",_),n.once("close",g)});this.touchActivity()},l=this.writeQueue.then(u,u);this.writeQueue=l.catch(()=>{return}),await l}rememberCompletedTurn(i){if(this.completedTurnIds.add(i),this.completedTurnIds.size<=wB0)return;let t=this.completedTurnIds.values().next().value;if(typeof t==="string")this.completedTurnIds.delete(t)}clearIdleTimer(){if(this.idleTimer)clearTimeout(this.idleTimer),this.idleTimer=void 0}touchActivity(){let i=this.settings.idleTimeoutMs;if(!i||i<=0||this.state!=="ready")return;this.clearIdleTimer(),this.idleTimer=setTimeout(()=>{if(this.state!=="ready")return;if(this.pending.size>0||this.activeRequestContextsByTurn.size>0||this.pendingRequestContexts.size>0){this.touchActivity();return}if(this.child)this.logger.info(`[codex-app-server] Closing idle app-server process after ${i}ms inactivity.`),this.expectedExitSignal="SIGTERM",this.child.kill("SIGTERM"),this.child=void 0;this.stdoutReader?.close(),this.stdoutReader=void 0,this.state="idle",this.threadLocks.clear(),this.pendingRequestContexts.clear(),this.pendingRequestContextIdsByThread.clear(),this.activeRequestContextsByTurn.clear(),this.completedTurnIds.clear(),this.serverCapabilities=void 0,this.writeQueue=Promise.resolve(),this.emit("idle-timeout")},i)}};iP1=d0t()});function _0t(i,t){let u=t?.mcpServers?Object.fromEntries(Object.entries(t.mcpServers).map(([f,c])=>[f,{transport:c.transport,url:c.url,httpHeaders:c.headers}])):void 0,l;if(t?.isPlanMode||t?.toolApprovalLevel==="readonly")l="on-failure";else l="never";let n=d0t({defaultSettings:{mcpServers:u,approvalPolicy:l,cwd:t?.cwd??process.cwd(),rmcpClient:!0,sandboxPolicy:"workspace-write",connectionTimeoutMs:30000,requestTimeoutMs:300000,idleTimeoutMs:60000}});return{model:n(i),provider:n}}function g0t(i){let t=QB0[i];if(!t)throw Error(`Unknown Codex model ID: ${i}`);return t}var QB0;var DBu=w(()=>{xBu();QB0={"codex:gpt-5.5":"gpt-5.5","codex:gpt-5.4":"gpt-5.4","codex:gpt-5.4-mini":"gpt-5.4-mini","codex:gpt-5.3-codex-spark":"gpt-5.3-codex-spark"}});var yBu;var OBu=w(()=>{$n();DBu();Klt();Hlt();aOi();mOi();yBu={id:"codex",create(i){return{id:"codex",async*stream(t){let u=g0t(t.models.thinking.id),l=ROi(t.workspace.cwd);console.log(`[codex] stream start model=${u} cwd=${l??"(default)"} mcpUrl=${t.mcp.url} mode=${t.mode}`);let{model:n,provider:f}=_0t(u,{mcpServers:{cms:{transport:"http",url:t.mcp.url,headers:t.mcp.headers}},toolApprovalLevel:t.toolApprovalLevel,isPlanMode:t.mode==="plan",cwd:l});try{let c=await LOi(t.messages),d=ez({currentThreadTitle:t.currentThreadTitle})?(()=>{let{model:v,provider:r}=_0t(g0t("codex:gpt-5.4-mini"),{toolApprovalLevel:"readonly",isPlanMode:!0,cwd:l}),x=Cz({abortSignal:t.signal,model:v,userMessage:eOi(c)}),y=x.promise.finally(()=>r.close().catch(()=>{}));return{handle:x,closed:y}})():null,_=d?.handle??null,g=P6({model:n,messages:c,abortSignal:t.signal,allowSystemInMessages:!0}),h=MOi({input:t,providerName:"codex",providerMetadataKey:"codex-app-server",extractSessionId:(v)=>typeof v?.threadId==="string"?v.threadId:void 0}),E=g.toUIMessageStream({messageMetadata:h});try{let v=_?VOi(E,_):E;for await(let r of v)yield r}finally{_?.finish(),await d?.closed.catch(()=>{})}}finally{await f.close().catch(()=>{})}}}}}});import{context as YB0,trace as PB0}from"@opentelemetry/api";function XBu(i){AB0({...i,tracer:i.ctx.tracer})}function AB0(i){try{if(!i.organizationId)return;let t=i.tracer.startSpan(TAi),u=PB0.setSpan(YB0.active(),t),l=i.totalUsage??i.usage;eq({type:qG,organizationId:i.organizationId,connectionId:Jui,toolName:i.modelId,toolArguments:{model:i.modelId,credentialId:i.credentialId,threadId:i.taskId,...i.request?.body!==void 0?{requestBody:i.request.body}:{}},result:{...i.usage??{},...i.totalUsage?{totalUsage:i.totalUsage}:{},...i.cost!==void 0?{cost:i.cost}:{},...i.finishReason?{finishReason:i.finishReason}:{},...i.response?{responseId:i.response.id,responseModelId:i.response.modelId,responseTimestamp:i.response.timestamp,messages:i.response.messages}:{},logType:qG},duration:i.durationMs,isError:i.isError,errorMessage:i.errorMessage??null,userId:i.userId,requestId:i.requestId,userAgent:i.userAgent??null,virtualMcpId:i.agentId??null,properties:{model_title:i.modelTitle,credential_id:i.credentialId,thread_id:i.taskId,log_type:qG,...i.response?{response_id:i.response.id}:{},...l?{input_tokens:String(l.inputTokens),output_tokens:String(l.outputTokens),total_tokens:String(l.totalTokens)}:{},...i.cost!==void 0?{cost:String(i.cost)}:{}}},u),t.end()}catch{}}var NBu=w(()=>{xdi();N_()});function JBu(i){let{ctx:t,organizationId:u,modelId:l,durationMs:n,isError:f,inputTokens:c,outputTokens:$,cacheReadTokens:d,cacheWriteTokens:_}=i;if(!u||!l)return;let g={"connection.id":Jui,"tool.name":l,"organization.id":u,status:f?"error":"success","error.type":f?i.errorType||"Error":""};if(t.meter.createHistogram("tool.execution.duration",{description:"Duration of tool executions in milliseconds",unit:"ms"}).record(n,g),t.meter.createCounter("tool.execution.count",{description:"Number of tool executions"}).add(1,g),c!=null||$!=null)t.meter.createCounter("tool.execution.tokens",{description:"Number of tokens used by LLM calls"}).add((c??0)+($??0),g);if((d??0)>0)t.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add(d,{...g,kind:"read"});if((_??0)>0)t.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add(_,{...g,kind:"write"})}var UBu=w(()=>{N_()});function Ta(i,t){let u;try{u=typeof i==="string"?i:JSON.stringify(i,null,2)}catch{u=String(i)}let l=vc(u);if(l>gD){let n=`vm_${Date.now()}`;t.set(n,u);let f=gd(u);return{truncated:!0,message:`Output too large (${l} tokens). Use read_tool_output with tool_call_id "${n}" to extract specific data.`,preview:f}}return i}var TBu=w(()=>{lr()});import{z as On}from"zod";function
|
|
107954
|
+
`,u=async()=>{if(!this.child?.stdin.writable)throw Error("codex app-server stdin is not writable");let n=this.child.stdin;if(!n.write(t))await new Promise((c,$)=>{let d=()=>{h(),c()},_=(E)=>{h(),$(E)},g=()=>{h(),$(Error("codex app-server stdin closed before drain"))},h=()=>{n.off("drain",d),n.off("error",_),n.off("close",g)};n.once("drain",d),n.once("error",_),n.once("close",g)});this.touchActivity()},l=this.writeQueue.then(u,u);this.writeQueue=l.catch(()=>{return}),await l}rememberCompletedTurn(i){if(this.completedTurnIds.add(i),this.completedTurnIds.size<=wB0)return;let t=this.completedTurnIds.values().next().value;if(typeof t==="string")this.completedTurnIds.delete(t)}clearIdleTimer(){if(this.idleTimer)clearTimeout(this.idleTimer),this.idleTimer=void 0}touchActivity(){let i=this.settings.idleTimeoutMs;if(!i||i<=0||this.state!=="ready")return;this.clearIdleTimer(),this.idleTimer=setTimeout(()=>{if(this.state!=="ready")return;if(this.pending.size>0||this.activeRequestContextsByTurn.size>0||this.pendingRequestContexts.size>0){this.touchActivity();return}if(this.child)this.logger.info(`[codex-app-server] Closing idle app-server process after ${i}ms inactivity.`),this.expectedExitSignal="SIGTERM",this.child.kill("SIGTERM"),this.child=void 0;this.stdoutReader?.close(),this.stdoutReader=void 0,this.state="idle",this.threadLocks.clear(),this.pendingRequestContexts.clear(),this.pendingRequestContextIdsByThread.clear(),this.activeRequestContextsByTurn.clear(),this.completedTurnIds.clear(),this.serverCapabilities=void 0,this.writeQueue=Promise.resolve(),this.emit("idle-timeout")},i)}};iP1=d0t()});function _0t(i,t){let u=t?.mcpServers?Object.fromEntries(Object.entries(t.mcpServers).map(([f,c])=>[f,{transport:c.transport,url:c.url,httpHeaders:c.headers}])):void 0,l;if(t?.isPlanMode||t?.toolApprovalLevel==="readonly")l="on-failure";else l="never";let n=d0t({defaultSettings:{mcpServers:u,approvalPolicy:l,cwd:t?.cwd??process.cwd(),rmcpClient:!0,sandboxPolicy:"workspace-write",connectionTimeoutMs:30000,requestTimeoutMs:300000,idleTimeoutMs:60000}});return{model:n(i),provider:n}}function g0t(i){let t=QB0[i];if(!t)throw Error(`Unknown Codex model ID: ${i}`);return t}var QB0;var DBu=w(()=>{xBu();QB0={"codex:gpt-5.5":"gpt-5.5","codex:gpt-5.4":"gpt-5.4","codex:gpt-5.4-mini":"gpt-5.4-mini","codex:gpt-5.3-codex-spark":"gpt-5.3-codex-spark"}});var yBu;var OBu=w(()=>{$n();DBu();Klt();Hlt();aOi();mOi();yBu={id:"codex",create(i){return{id:"codex",async*stream(t){let u=g0t(t.models.thinking.id),l=ROi(t.workspace.cwd);console.log(`[codex] stream start model=${u} cwd=${l??"(default)"} mcpUrl=${t.mcp.url} mode=${t.mode}`);let{model:n,provider:f}=_0t(u,{mcpServers:{cms:{transport:"http",url:t.mcp.url,headers:t.mcp.headers}},toolApprovalLevel:t.toolApprovalLevel,isPlanMode:t.mode==="plan",cwd:l});try{let c=await LOi(t.messages),d=ez({currentThreadTitle:t.currentThreadTitle})?(()=>{let{model:v,provider:r}=_0t(g0t("codex:gpt-5.4-mini"),{toolApprovalLevel:"readonly",isPlanMode:!0,cwd:l}),x=Cz({abortSignal:t.signal,model:v,userMessage:eOi(c)}),y=x.promise.finally(()=>r.close().catch(()=>{}));return{handle:x,closed:y}})():null,_=d?.handle??null,g=P6({model:n,messages:c,abortSignal:t.signal,allowSystemInMessages:!0}),h=MOi({input:t,providerName:"codex",providerMetadataKey:"codex-app-server",extractSessionId:(v)=>typeof v?.threadId==="string"?v.threadId:void 0}),E=g.toUIMessageStream({messageMetadata:h});try{let v=_?VOi(E,_):E;for await(let r of v)yield r}finally{_?.finish(),await d?.closed.catch(()=>{})}}finally{await f.close().catch(()=>{})}}}}}});import{context as YB0,trace as PB0}from"@opentelemetry/api";function XBu(i){AB0({...i,tracer:i.ctx.tracer})}function AB0(i){try{if(!i.organizationId)return;let t=i.tracer.startSpan(TAi),u=PB0.setSpan(YB0.active(),t),l=i.totalUsage??i.usage;eq({type:qG,organizationId:i.organizationId,connectionId:Jui,toolName:i.modelId,toolArguments:{model:i.modelId,credentialId:i.credentialId,threadId:i.taskId,...i.request?.body!==void 0?{requestBody:i.request.body}:{}},result:{...i.usage??{},...i.totalUsage?{totalUsage:i.totalUsage}:{},...i.cost!==void 0?{cost:i.cost}:{},...i.finishReason?{finishReason:i.finishReason}:{},...i.response?{responseId:i.response.id,responseModelId:i.response.modelId,responseTimestamp:i.response.timestamp,messages:i.response.messages}:{},logType:qG},duration:i.durationMs,isError:i.isError,errorMessage:i.errorMessage??null,userId:i.userId,requestId:i.requestId,userAgent:i.userAgent??null,virtualMcpId:i.agentId??null,properties:{model_title:i.modelTitle,credential_id:i.credentialId,thread_id:i.taskId,log_type:qG,...i.response?{response_id:i.response.id}:{},...l?{input_tokens:String(l.inputTokens),output_tokens:String(l.outputTokens),total_tokens:String(l.totalTokens)}:{},...i.cost!==void 0?{cost:String(i.cost)}:{}}},u),t.end()}catch{}}var NBu=w(()=>{xdi();N_()});function JBu(i){let{ctx:t,organizationId:u,modelId:l,durationMs:n,isError:f,inputTokens:c,outputTokens:$,cacheReadTokens:d,cacheWriteTokens:_}=i;if(!u||!l)return;let g={"connection.id":Jui,"tool.name":l,"organization.id":u,status:f?"error":"success","error.type":f?i.errorType||"Error":""};if(t.meter.createHistogram("tool.execution.duration",{description:"Duration of tool executions in milliseconds",unit:"ms"}).record(n,g),t.meter.createCounter("tool.execution.count",{description:"Number of tool executions"}).add(1,g),c!=null||$!=null)t.meter.createCounter("tool.execution.tokens",{description:"Number of tokens used by LLM calls"}).add((c??0)+($??0),g);if((d??0)>0)t.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add(d,{...g,kind:"read"});if((_??0)>0)t.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add(_,{...g,kind:"write"})}var UBu=w(()=>{N_()});function Ta(i,t){let u;try{u=typeof i==="string"?i:JSON.stringify(i,null,2)}catch{u=String(i)}let l=vc(u);if(l>gD){let n=`vm_${Date.now()}`;t.set(n,u);let f=gd(u);return{truncated:!0,message:`Output too large (${l} tokens). Use read_tool_output with tool_call_id "${n}" to extract specific data.`,preview:f}}return i}var TBu=w(()=>{lr()});import{z as On}from"zod";function WBu(i){return`Write content to a file in the VM's project directory. Creates parent directories if needed. Overwrites existing files entirely.
|
|
107955
|
+
|
|
107956
|
+
`+(i?"Viewable HTML artifacts get a LIVE PREVIEW in the chat side panel and persist in the org's shared folder when written under `org/<your-org-slug>/` (lowercase-kebab names):\n"+"- Presentation decks / slides \u2192 `org/<your-org-slug>/decks/<name>.html` "+"\u2014 read `/mnt/skills/public/slides/SKILL.md` FIRST and create the "+`deck with its CLI.
|
|
107957
|
+
`+"- Standalone pages (landing pages, brand kits, one-pagers) \u2192 "+"`org/<your-org-slug>/pages/<name>.html` \u2014 single self-contained "+`HTML file.
|
|
107958
|
+
HTML written anywhere else will not render a preview.`:"Reserved path \u2014 `pages/<slug>.html`: writes to this prefix are "+"automatically published to the org's object storage and rendered as a live preview in the chat side panel. Use this whenever the user wants a viewable HTML page (landing pages, brand kits, one-pagers). Slug must be lowercase kebab (e.g. `pages/landing.html`). HTML written elsewhere stays sandbox-only and will not render a preview.")}function zBu(i){return`Execute a shell command in the VM's project directory. Working directory is the project root. Timeout default 30s, max 2min.
|
|
107951
107959
|
|
|
107952
107960
|
`+(i?"The organization filesystem is mounted at `org/` (when available):\n"+"- `org/<your-org-slug>/` \u2014 the org's shared home folder (editable, "+"shared across runs; `ls org/` shows the actual name). Organize it freely; check it before non-trivial work and record durable facts, decisions, and learnings as small markdown files.\n"+"- `org/public/<set>/` \u2014 curated read-only skill sets. Run "+"`ls org/public/` for the sets and `cat org/public/<set>/<name>/SKILL.md` before using a skill.\n"+"- `org/upload/` \u2014 files the user attached to this conversation are "+`already here; read them directly.
|
|
107953
107961
|
`+"- `org/output/` \u2014 write deliverables here; they are shared back to the "+`organization under this run's folder.
|
|
107954
107962
|
|
|
107955
|
-
`:"")+"Pre-installed file-handling skills also live at `/mnt/skills/public/<name>/SKILL.md` (pptx, docx, xlsx, pdf, file-reading, slides, templating). Run `ls /mnt/skills/public/` for that index. To make a presentation deck, read the `slides` skill first."+(i?"":"\n\nTo bring chat attachments / presigned URLs into the sandbox FS use `copy_to_sandbox` (NOT bash + curl). To deliver a file you produced back to the user as a download chip, use `share_with_user`.")}var FBu,IBu,ZBu,BBu,QBu,YBu,PBu,ABu,GBu,
|
|
107956
|
-
|
|
107957
|
-
`+"Reserved path \u2014 `pages/<slug>.html`: writes to this prefix are "+"automatically published to the org's object storage and rendered as a live preview in the chat side panel. Use this whenever the user wants a viewable HTML page (landing pages, brand kits, one-pagers). Slug must be lowercase kebab (e.g. `pages/landing.html`). HTML written elsewhere stays sandbox-only and will not render a preview.";bBu="Copy a chat-attached or org-storage file into the sandbox filesystem at `target`. Use this BEFORE running format-specific skills (pptx-extract, pdf, docx, ...) on user-uploaded files. Accepts "+"mesh-storage:// URIs and bare org-storage keys only \u2014 for arbitrary "+"public URLs use bash + curl. Bytes stream directly from S3 to the sandbox; they do not pass through the model.",G2={read:!1,write:!0,edit:!0,grep:!1,glob:!1,bash:!0,copy_to_sandbox:!1,share_with_user:!1}});import GB0 from"path";async function WB0(i,t){if(i.startsWith("https://")||i.startsWith("http://"))throw Error("copy_to_sandbox does not accept arbitrary URLs \u2014 pass a "+"mesh-storage:// URI or a bare org storage key. For public URLs, use the bash tool (curl).");let u=i.startsWith(RBu)?i.slice(RBu.length):i;if(!u||u.startsWith("/")||u.includes(".."))throw Error(`Invalid source: ${i}`);let l=t.objectStorage;if(!l)throw Error("Object storage is not configured for this org");return l.presignedGetUrl(u)}function kB0(i){let t=i.trim();if(!t)return null;if(t.includes("/")||t.includes("\\"))return null;if(t==="."||t===".."||t.includes(".."))return null;if(t.length>255)return null;return t}function jB0(i,t,u){let l=u.split("/").map(encodeURIComponent).join("/");return`${i}/api/${encodeURIComponent(t)}/files/${l}`}function d7i(i){let{fs:t,htmlPageBuffer:u,deckBuffer:l,toolOutputMap:n,needsApproval:f,pendingImages:c,ctx:$,threadId:d,orgFs:_=!1}=i,g=(U)=>U?f:!1,h=(U,J,F="POST")=>t.onProxy(U,J,F),E=hl({needsApproval:g(G2.read),description:GBu,inputSchema:hi(FBu),execute:async(U)=>{let J=await h("/_sandbox/read",U);if(J.kind==="image")return c.push({url:`data:${J.mediaType};base64,${J.base64}`,mediaType:J.mediaType,label:`[Image at ${U.path}]`}),{kind:"image",path:U.path,mediaType:J.mediaType,size:J.size,message:"Image attached below."};return Ta(J,n)}}),v=hl({needsApproval:g(G2.write),description:WBu,inputSchema:hi(IBu),execute:async(U)=>{let J=await h("/_sandbox/write",U),F=u.enqueue(U.path,U.content);return l?.enqueue(U.path,U.content),F?{...J,htmlPreview:F}:J}}),r=hl({needsApproval:g(G2.edit),description:kBu,inputSchema:hi(ZBu),execute:async(U)=>{let J=await h("/_sandbox/edit",U),F=J.content,{content:Q,...B}=J;if(typeof F!=="string")return B;let P=u.enqueue(U.path,F);return l?.enqueue(U.path,F),P?{...B,htmlPreview:P}:B}}),x=hl({needsApproval:g(G2.grep),description:jBu,inputSchema:hi(BBu),execute:async(U)=>{let J=await h("/_sandbox/grep",U);return Ta(J,n)}}),y=hl({needsApproval:g(G2.glob),description:SBu,inputSchema:hi(QBu),execute:async(U)=>{let J=await h("/_sandbox/glob",U);return Ta(J,n)}}),O=hl({needsApproval:g(G2.bash),description:zBu(_),inputSchema:hi(YBu),execute:async(U)=>{let J=await h("/_sandbox/bash",U);return Ta(J,n)}}),X=hl({needsApproval:g(G2.copy_to_sandbox),description:bBu,inputSchema:hi(PBu),execute:async(U)=>{let J=await WB0(U.url,$);return await h("/_sandbox/write_from_url",{url:J,path:U.target})}}),N=hl({needsApproval:g(G2.share_with_user),description:KBu,inputSchema:hi(ABu),execute:async(U)=>{let J=$.organization?.slug,F=$.objectStorage;if(!J||!F)throw Error("Object storage is not configured for this org");let Q=kB0(U.name??GB0.basename(U.source));if(!Q)throw Error(`Invalid filename: ${U.name??U.source}`);let B=`model-outputs/${d}/${Q}`,P=await F.presignedPutUrl(B);return await h("/_sandbox/upload_to_url",{path:U.source,url:P}),{key:B,filename:Q,downloadUrl:jB0($.baseUrl,J,B)}}});return{read:E,write:v,edit:r,grep:x,glob:y,bash:O,..._?{}:{share_with_user:N,copy_to_sandbox:X}}}var RBu="mesh-storage://";var h0t=w(()=>{$n();TBu();HBu()});async function LBu(i,t){let{provider:u,kind:l}=await _E(i,{userId:t.userId,branch:t.branch,virtualMcpMetadata:null}),n=null,f=()=>{if(!n)n=eUu({virtualMcpId:t.virtualMcpId,branch:t.branch,sandboxProviderKind:l},i).then((d)=>d.sandboxHandle),n.catch(()=>{n=null});return n},c=t.branch==="ephemeral"||l==="user-desktop";return Nit(u,{ensureHandle:f,invalidateHandle:async()=>{let d=n;if(n=null,!c)return;try{await q5(i.storage.virtualMcps,t.virtualMcpId,t.userId,t.userId,t.branch,l)}catch(_){console.warn("[cluster-sandbox-fs] failed to reap vmMap entry",_)}if(d&&typeof u.forgetHandle==="function")try{let _=await d;await u.forgetHandle(_)}catch(_){console.warn("[cluster-sandbox-fs] forgetHandle failed",_)}},canAutoRestart:c})}var eBu=w(()=>{_g();jz();Kut();T2()});async function CBu(i,t,u,{superUser:l=!1}={}){let n=await i.storage.virtualMcps.findById(u,t);if(!n||n.organization_id!==t)throw Error("Agent not found");if(n.status!=="active")throw Error("Agent is not active");let f=await $2(n,i,"passthrough",l);return{mcpClient:f,targetRef:{id:n.id,instructions:f.getInstructions(),repo:n.metadata?.githubRepo??void 0}}}var MBu=w(()=>{HS()});var qBu,VBu;var E0t=w(()=>{qBu={type:"ephemeral",ttl:"5m"},VBu={openrouter:{cache_control:{type:"ephemeral",ttl:"5m"}}}});function SB0(i){let t=i.toISOString();return`<current-context>
|
|
107963
|
+
`:"")+"Pre-installed file-handling skills also live at `/mnt/skills/public/<name>/SKILL.md` (pptx, docx, xlsx, pdf, file-reading, slides, templating). Run `ls /mnt/skills/public/` for that index. To make a presentation deck, read the `slides` skill first."+(i?"":"\n\nTo bring chat attachments / presigned URLs into the sandbox FS use `copy_to_sandbox` (NOT bash + curl). To deliver a file you produced back to the user as a download chip, use `share_with_user`.")}var FBu,IBu,ZBu,BBu,QBu,YBu,PBu,ABu,GBu,kBu="Perform exact string replacement in a file in the VM. old_string must be unique in the file unless replace_all is true.",jBu="Search file contents in the VM using ripgrep. Supports regex patterns, file type filtering via glob, and context lines.",SBu="Find files by name pattern in the VM's project directory. Uses ripgrep for gitignore-aware matching. Returns relative file paths.",bBu,KBu="Upload a file from the sandbox FS back to the user's chat as a download chip on this turn. Use this for artifacts the user should be able to save (CSV reports, generated decks, zipped builds, etc). The file lands under the current thread's outputs prefix; the UI surfaces it automatically when the turn finishes.",G2;var HBu=w(()=>{FBu=On.object({path:On.string().describe("File path. Relative paths resolve against the project root (e.g. 'src/index.ts'); absolute paths are accepted for files outside the project (e.g. '/home/sandbox/deck.thumbnail.jpg')."),offset:On.number().optional().describe("Starting line number for text files (1-based, default 1)"),limit:On.number().optional().describe("Max lines to return for text files (default 2000)")}),IBu=On.object({path:On.string().describe("File path relative to project root"),content:On.string().describe("The full file content to write")}),ZBu=On.object({path:On.string().describe("File path relative to project root"),old_string:On.string().describe("The exact text to find and replace"),new_string:On.string().describe("The replacement text (must differ from old_string)"),replace_all:On.boolean().optional().describe("Replace all occurrences (default false)")}),BBu=On.object({pattern:On.string().describe("Regex pattern to search for"),path:On.string().optional().describe("Directory or file to search in (default: project root)"),glob:On.string().optional().describe("Glob pattern to filter files (e.g. '*.ts', '*.{js,jsx}')"),context:On.number().optional().describe("Lines of context around matches"),ignore_case:On.boolean().optional().describe("Case-insensitive search"),output_mode:On.enum(["content","files","count"]).optional().describe("Output mode (default: 'files')"),limit:On.number().optional().describe("Max result lines (default 250)")}),QBu=On.object({pattern:On.string().describe("Glob pattern to match files (e.g. '**/*.ts', 'src/**/*.test.tsx')"),path:On.string().optional().describe("Directory to search in (default: project root)")}),YBu=On.object({command:On.string().describe("The bash command to execute"),timeout:On.number().optional().describe("Timeout in milliseconds (default 30000, max 120000)")}),PBu=On.object({url:On.string().describe("Org-scoped storage reference. Accepts a mesh-storage:// URI from chat (e.g. mesh-storage://chat-uploads/abc.pdf) or a bare key (e.g. chat-uploads/abc.pdf). Arbitrary http(s):// URLs are NOT "+"accepted \u2014 for public URLs use the bash tool with curl."),target:On.string().describe("Destination path on the sandbox FS (relative to project root). Parent directories are created as needed.")}),ABu=On.object({source:On.string().describe("Path to a file on the sandbox FS to share back to the user. Must be a single file (not a directory)."),name:On.string().optional().describe("Filename to surface in the chat UI (default: basename of source). Cannot contain slashes.")}),GBu="Read a file. For text files, returns content with line numbers (use offset and limit for large files). For images (jpeg, png, gif, webp), the image "+"is injected into the next turn as a vision input \u2014 do NOT describe what "+"you 'expect' to see, just call read and look at the next message. Other binary formats are not supported; use a format-specific skill (e.g. pptx-extract for .pptx).";bBu="Copy a chat-attached or org-storage file into the sandbox filesystem at `target`. Use this BEFORE running format-specific skills (pptx-extract, pdf, docx, ...) on user-uploaded files. Accepts "+"mesh-storage:// URIs and bare org-storage keys only \u2014 for arbitrary "+"public URLs use bash + curl. Bytes stream directly from S3 to the sandbox; they do not pass through the model.",G2={read:!1,write:!0,edit:!0,grep:!1,glob:!1,bash:!0,copy_to_sandbox:!1,share_with_user:!1}});import GB0 from"path";async function WB0(i,t){if(i.startsWith("https://")||i.startsWith("http://"))throw Error("copy_to_sandbox does not accept arbitrary URLs \u2014 pass a "+"mesh-storage:// URI or a bare org storage key. For public URLs, use the bash tool (curl).");let u=i.startsWith(RBu)?i.slice(RBu.length):i;if(!u||u.startsWith("/")||u.includes(".."))throw Error(`Invalid source: ${i}`);let l=t.objectStorage;if(!l)throw Error("Object storage is not configured for this org");return l.presignedGetUrl(u)}function kB0(i){let t=i.trim();if(!t)return null;if(t.includes("/")||t.includes("\\"))return null;if(t==="."||t===".."||t.includes(".."))return null;if(t.length>255)return null;return t}function jB0(i,t,u){let l=u.split("/").map(encodeURIComponent).join("/");return`${i}/api/${encodeURIComponent(t)}/files/${l}`}function d7i(i){let{fs:t,htmlPageBuffer:u,deckBuffer:l,toolOutputMap:n,needsApproval:f,pendingImages:c,ctx:$,threadId:d,orgFs:_=!1}=i,g=(U)=>U?f:!1,h=(U,J,F="POST")=>t.onProxy(U,J,F),E=hl({needsApproval:g(G2.read),description:GBu,inputSchema:hi(FBu),execute:async(U)=>{let J=await h("/_sandbox/read",U);if(J.kind==="image")return c.push({url:`data:${J.mediaType};base64,${J.base64}`,mediaType:J.mediaType,label:`[Image at ${U.path}]`}),{kind:"image",path:U.path,mediaType:J.mediaType,size:J.size,message:"Image attached below."};return Ta(J,n)}}),v=hl({needsApproval:g(G2.write),description:WBu(_),inputSchema:hi(IBu),execute:async(U)=>{let J=await h("/_sandbox/write",U),F=u.enqueue(U.path,U.content);return l?.enqueue(U.path,U.content),F?{...J,htmlPreview:F}:J}}),r=hl({needsApproval:g(G2.edit),description:kBu,inputSchema:hi(ZBu),execute:async(U)=>{let J=await h("/_sandbox/edit",U),F=J.content,{content:Q,...B}=J;if(typeof F!=="string")return B;let P=u.enqueue(U.path,F);return l?.enqueue(U.path,F),P?{...B,htmlPreview:P}:B}}),x=hl({needsApproval:g(G2.grep),description:jBu,inputSchema:hi(BBu),execute:async(U)=>{let J=await h("/_sandbox/grep",U);return Ta(J,n)}}),y=hl({needsApproval:g(G2.glob),description:SBu,inputSchema:hi(QBu),execute:async(U)=>{let J=await h("/_sandbox/glob",U);return Ta(J,n)}}),O=hl({needsApproval:g(G2.bash),description:zBu(_),inputSchema:hi(YBu),execute:async(U)=>{let J=await h("/_sandbox/bash",U);return Ta(J,n)}}),X=hl({needsApproval:g(G2.copy_to_sandbox),description:bBu,inputSchema:hi(PBu),execute:async(U)=>{let J=await WB0(U.url,$);return await h("/_sandbox/write_from_url",{url:J,path:U.target})}}),N=hl({needsApproval:g(G2.share_with_user),description:KBu,inputSchema:hi(ABu),execute:async(U)=>{let J=$.organization?.slug,F=$.objectStorage;if(!J||!F)throw Error("Object storage is not configured for this org");let Q=kB0(U.name??GB0.basename(U.source));if(!Q)throw Error(`Invalid filename: ${U.name??U.source}`);let B=`model-outputs/${d}/${Q}`,P=await F.presignedPutUrl(B);return await h("/_sandbox/upload_to_url",{path:U.source,url:P}),{key:B,filename:Q,downloadUrl:jB0($.baseUrl,J,B)}}});return{read:E,write:v,edit:r,grep:x,glob:y,bash:O,..._?{}:{share_with_user:N,copy_to_sandbox:X}}}var RBu="mesh-storage://";var h0t=w(()=>{$n();TBu();HBu()});async function LBu(i,t){let{provider:u,kind:l}=await _E(i,{userId:t.userId,branch:t.branch,virtualMcpMetadata:null}),n=null,f=()=>{if(!n)n=eUu({virtualMcpId:t.virtualMcpId,branch:t.branch,sandboxProviderKind:l},i).then((d)=>d.sandboxHandle),n.catch(()=>{n=null});return n},c=t.branch==="ephemeral"||l==="user-desktop";return Nit(u,{ensureHandle:f,invalidateHandle:async()=>{let d=n;if(n=null,!c)return;try{await q5(i.storage.virtualMcps,t.virtualMcpId,t.userId,t.userId,t.branch,l)}catch(_){console.warn("[cluster-sandbox-fs] failed to reap vmMap entry",_)}if(d&&typeof u.forgetHandle==="function")try{let _=await d;await u.forgetHandle(_)}catch(_){console.warn("[cluster-sandbox-fs] forgetHandle failed",_)}},canAutoRestart:c})}var eBu=w(()=>{_g();jz();Kut();T2()});async function CBu(i,t,u,{superUser:l=!1}={}){let n=await i.storage.virtualMcps.findById(u,t);if(!n||n.organization_id!==t)throw Error("Agent not found");if(n.status!=="active")throw Error("Agent is not active");let f=await $2(n,i,"passthrough",l);return{mcpClient:f,targetRef:{id:n.id,instructions:f.getInstructions(),repo:n.metadata?.githubRepo??void 0}}}var MBu=w(()=>{HS()});var qBu,VBu;var E0t=w(()=>{qBu={type:"ephemeral",ttl:"5m"},VBu={openrouter:{cache_control:{type:"ephemeral",ttl:"5m"}}}});function SB0(i){let t=i.toISOString();return`<current-context>
|
|
107958
107964
|
Current date: ${t.slice(0,10)}
|
|
107959
107965
|
Current time: ${t.slice(11,16)} UTC
|
|
107960
107966
|
</current-context>`}function _7i(i,t){let u=[],l=i.length-1,n=i.length-2;for(let f=0;f<i.length;f++){let c=f===n||f===l;u.push({role:"system",content:i[f],...c?{providerOptions:zB0}:{}})}return u.push({role:"system",content:SB0(t)}),u}var zB0;var v0t=w(()=>{E0t();zB0={anthropic:{cacheControl:qBu}}});function r0t(i){if(i==null||i==="")return"";if(i.includes(",")||i.includes('"')||i.includes(`
|
|
@@ -108174,7 +108180,7 @@ Guidelines:
|
|
|
108174
108180
|
}
|
|
108175
108181
|
return { consoleLogs, errors, evaluateResult };
|
|
108176
108182
|
}
|
|
108177
|
-
`,r=await fetch(`${eP}/function?token=${encodeURIComponent(_)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:v});if(!r.ok){let X=await r.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${r.status}): ${X}`,url:g.url}}let x=await r.json().catch(async()=>{return{error:`Browserless returned non-JSON response: ${(await r.text().catch(()=>"")).slice(0,200)}`}}),y=JSON.stringify(x,null,2);u.set($.toolCallId,y);let O=vc(y);if(!("error"in x)&&O>gD&&l){let X=`inspect-pages/${crypto.randomUUID()}.json`;return await l.put(X,new TextEncoder().encode(y),{contentType:"application/json"}),{success:!0,uri:z4(X),preview:gd(y),url:g.url,tokenCount:O,consoleLogCount:x.consoleLogs?.length??0,errorCount:x.errors?.length??0,hasEvaluateResult:x.evaluateResult!=null}}return{success:!("error"in x),...x,url:g.url,tokenCount:O}}finally{i.write({type:"data-tool-metadata",id:$.toolCallId,data:{latencyMs:performance.now()-d}})}}})}function jQ0(){return hl({description:"Search the web and synthesize a comprehensive research report. This tool is only available in cluster Decopilot.",inputSchema:hi(WQ0),execute:async(i)=>{throw Error("web_search is only available in cluster Decopilot.")}})}function SQ0(){return hl({description:"Record what the user is durably working toward (their goals/interests). This tool is only available in cluster Decopilot.",inputSchema:hi(kQ0),execute:async(i)=>{throw Error("update_interests is only available in cluster Decopilot.")}})}function T7i(i){let{writer:t,toolOutputMap:u,objectStorage:l,pendingImages:n,imageTool:f,includeUnavailableClusterOnlyTools:c}=i,$={user_ask:w7i,todo_write:x7i,propose_plan:y7i,read_tool_output:AOi({toolOutputMap:u})};if(c)$.web_search=jQ0(),$.update_interests=SQ0();if(f)$.generate_image=X7i(t,{...f,objectStorage:l});if(process.env.BROWSERLESS_TOKEN){if($.scrape_url=LQu(t,{toolOutputMap:u,objectStorage:l,kind:"scrape"}),$.inspect_page=LQu(t,{toolOutputMap:u,objectStorage:l,kind:"inspect"}),n)$.take_screenshot=N7i(t,{objectStorage:l,toolOutputMap:u,pendingImages:n})}return $}var WQ0,kQ0;var Y0t=w(()=>{$n();Z0t();B0t();Q0t();lr();J7i();WQ0=xg.object({query:xg.string().max(1e4).describe("The research query. Be specific about what information you need.")}),kQ0=xg.object({interests:xg.array(xg.object({title:xg.string().max(120).describe("Short noun phrase, e.g. 'Learning Rust'"),summary:xg.string().max(500).describe("One or two sentences of context, including any progress")})).max(10)})});async function bQ0(i,t,u){let{provider:l,imageProvider:n,deepResearchProvider:f,organization:c,models:$,toolApprovalLevel:d="auto",isPlanMode:_=!1,toolOutputMap:g,pendingImages:h,passthroughClient:E,vmContext:v,htmlPageBuffer:r,deckBuffer:x,taskId:y,agentId:O,onChildUsage:X}=t,N={isPlanMode:_},U=u.auth?.user?.id,J=T7i({writer:i,toolOutputMap:g,passthroughClient:E,toolApprovalLevel:d,isPlanMode:_,objectStorage:u.objectStorage});if(U)J.update_interests=UQu({write:async(B)=>{await u.storage.interests.setForAgent(B.orgId,B.agentId,B.userId,{interests:B.interests})},orgId:c.id,agentId:O,userId:U});let F=GOi(d,!1,N)!==!1,Q;if(v){let B=await LBu(u,{virtualMcpId:v.virtualMcpId,branch:v.branch,userId:v.userId});Q=d7i({fs:B,htmlPageBuffer:r,deckBuffer:x,toolOutputMap:g,needsApproval:F,pendingImages:h,ctx:u,threadId:v.threadId,virtualMcpId:v.virtualMcpId,orgFs:Qt().orgFsClusterMounts}),Object.assign(J,Q)}if(l)J.subtask=I0t(i,{provider:l,organization:c,models:$,self:{id:O},needsApproval:GOi(d,!1,N)!==!1,onChildUsage:X,vmTools:Q},u);if(n&&$.image&&u.objectStorage)J.generate_image=ZQu(i,{provider:n,imageModelInfo:$.image,objectStorage:u.objectStorage,allowHttpExternalUrls:Qt().localMode});if(f&&$.deepResearch){let B=WQu({provider:f,deepResearchModelInfo:$.deepResearch,ctx:u});J.web_search=YQu(i,{researchJob:B,toolOutputMap:g,taskId:y})}if(process.env.BROWSERLESS_TOKEN){let B={baseUrl:eP,token:process.env.BROWSERLESS_TOKEN};if(J.take_screenshot=jQu(i,{objectStorage:u.objectStorage,toolOutputMap:g,pendingImages:h}),u.objectStorage)J.scrape_url=bQu(i,{browserless:B,objectStorage:u.objectStorage,toolOutputMap:g}),J.inspect_page=HQu(i,{browserless:B,objectStorage:u.objectStorage,toolOutputMap:g})}return J}function KQ0(i,t,u){let l=t.organization.id,n=u.auth?.user?.id,f={};for(let[c,$]of Object.entries(i)){let d=$,_=d.execute;if(typeof _!=="function"){f[c]=$;continue}let g=zQ0[c],h=_.constructor?.name==="AsyncGeneratorFunction",E=(r,x)=>{if(!l||!n)return;Ju.capture({distinctId:n,event:"tool_called",groups:{organization:l},properties:{organization_id:l,tool_source:"builtin",tool_name:c,tool_safe_name:c,read_only:g?.readOnly??null,destructive:g?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(r),is_error:x}})},v=h?async function*(r,x){let y=performance.now(),O=!1;try{yield*_.call(d,r,x)}catch(X){throw O=!0,X}finally{E(performance.now()-y,O)}}:async(r,x)=>{let y=performance.now(),O=!1;try{return await _.call(d,r,x)}catch(X){throw O=!0,X}finally{E(performance.now()-y,O)}};f[c]={...d,execute:v}}return f}async function eQu(i,t,u){let l=await bQ0(i,t,u),n=KQ0(l,t,u);if(!t.isPlanMode){let{propose_plan:f,...c}=n;return c}return n}function $Qu(i){let{ctx:t,writer:u,toolOutputMap:l,subtaskParams:n,planMode:f}=i,c={user_ask:w7i,todo_write:x7i,propose_plan:y7i,read_tool_output:AOi({toolOutputMap:l})};if(n.provider)c.subtask=I0t(u,n,t);return c}var zQ0;var x0t=w(()=>{Tf();xa();lr();h0t();eBu();JQu();Z0t();B0t();TQu();Q0t();BQu();PQu();kQu();SQu();KQu();RQu();Y0t();U0();zQ0={read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tool:{readOnly:!0,destructive:!1},todo_write:{readOnly:!1,destructive:!1},update_interests:{readOnly:!1,destructive:!1}}});function RQ0(i,t,u){if(!u)return i;let l=new Set;for(let[n,f]of t)if(u.has(n)||u.has(f))l.add(f);return Object.fromEntries(Object.entries(i).filter(([n])=>l.has(n)))}function LQ0(i,t){if(!t)return i;return Object.fromEntries(Object.entries(i).filter(([u])=>HQ0.has(u)||t.has(u)))}async function CQu(i,t,u){let l=t.organization,n=i.mode==="plan",f=i.toolAllowlist&&i.toolAllowlist.length>0?new Set(i.toolAllowlist):null,c=await u.mcpForAgent(i.agent.id,{superUser:!0,listTimeoutMs:1000});try{let{tools:$,nameMap:d}=await bz(c,u.toolOutputMap,u.writer,i.toolApprovalLevel,{isPlanMode:n,timeoutMs:d$i,resolveArgs:u.resolveArgs,onToolCalled:u.onToolCalled}),_=RQ0($,d,f),h=!i.virtualMcp.metadata.githubRepo,E=i.user.id?{virtualMcpId:i.agent.id,branch:h?"ephemeral":i.branch??`thread:${u.threadId}`,userId:i.user.id,threadId:u.threadId}:null,v=await eQu(u.writer,{provider:u.provider,imageProvider:u.imageProvider,deepResearchProvider:u.deepResearchProvider,organization:l,models:i.models,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:n,toolOutputMap:u.toolOutputMap,pendingImages:u.pendingImages,passthroughClient:c,vmContext:E,htmlPageBuffer:u.htmlPageBuffer,deckBuffer:u.deckBuffer,taskId:u.threadId,agentId:i.agent.id,onChildUsage:u.onChildUsage},t),r=LQ0(v,f),x=(await c.listTools()).tools,y=[],O=new Map;for(let J of x){let F=d.get(J.name);if(!F)continue;if(f&&!f.has(J.name)&&!f.has(F))continue;let Q=typeof J._meta?.gatewayClientId==="string"?J._meta.gatewayClientId:"unknown";if(y.push({rawName:J.name,safeName:F,connectionId:Q}),n)O.set(F,{readOnlyHint:J.annotations?.readOnlyHint})}let X=c.getConnectionTitleMap(),N=c.getInstructions();return{tools:{..._,...r},nameMap:d,passthroughTools:_,builtInTools:r,passthroughToolList:x,connectionsBlockTools:y,toolAnnotations:O,vmContext:E,connectionTitleMap:X,serverInstructions:N,passthroughClient:c,close:async()=>{await c.close().catch(()=>{})}}}catch($){throw await c.close().catch(()=>{}),$}}var HQ0;var MQu=w(()=>{x0t();xa();XO();HQ0=new Set(["read_tool_output","enable_tool","open_in_agent","todo_write","update_interests"])});function P0t(i){let t=eQ0.exec(i);if(!t)return null;return{path:i,name:t[1]}}function qQu(i,t){if(!t)return null;let u=i.replace(/^\.\//,""),l=`org/${t}/`,n=u.indexOf(l);if(n!==0&&(n<0||u[n-1]!=="/"))return null;return P0t(u.slice(n+l.length))}var eQ0;var A0t=w(()=>{eQ0=/^decks\/([a-z0-9][a-z0-9._-]*)\.html$/i});function VQu(i){let t=Qt().orgFsClusterMounts?i.orgFs:null,u=i.organization?.slug??null,l=i.auth?.user?.id??null;if(!t||!u||!l)return MQ0;let n=Sz(u),f=new Map;return{enqueue(c,$){let d=qQu(c,n);if(!d)return;f.set(d.path,$)},async flush(){if(f.size===0)return;let c=[...f.entries()];f.clear(),await Promise.allSettled(c.map(async([$,d])=>{try{await t.write(CQ0,$,d,{actor:l,contentType:"text/html; charset=utf-8"})}catch(_){console.error("[deck-buffer] org-fs write failed",{path:$},_)}}))}}}var CQ0="home",MQ0;var aQu=w(()=>{XOi();U0();A0t();MQ0={enqueue:()=>{},flush:async()=>{}}});function mQu(i,t){let u=Qt().orgFsClusterMounts?i.orgFs:null,l=i.organization?.slug??null;if(!u||!l)return{sweep:async()=>{}};let n=Sz(l),f=u.latestSeq(G0t).catch((h)=>{return console.error("[deck-watcher] cursor snapshot failed",h),null}),c=null,$=!1,d=!1,_=new Map;return{sweep:async()=>{if(d)return;d=!0;try{if(!$)c=await f,$=!0;if(c===null)return;let h=new Map;for(let E=0;E<20;E++){let v=await u.changes(G0t,c,qQ0);for(let r of v.entries){if(r.kind!=="file"||r.deletedAt)continue;let x=P0t(r.path);if(!x)continue;if(r.contentHash){if(_.get(x.path)===r.contentHash)continue;_.set(x.path,r.contentHash)}h.set(x.path,{volume:G0t,path:x.path,name:x.name,mountPath:`org/${n}/${x.path}`})}if(c=v.cursor,!v.hasMore)break}for(let E of h.values())t.write({type:"data-deck-updated",id:E.path,data:E})}catch(h){console.error("[deck-watcher] sweep failed",h)}finally{d=!1}}}}var G0t="home",qQ0=200;var oQu=w(()=>{XOi();U0();A0t()});function aQ0(i){let t=i.replace(/^\.?\//,""),u=VQ0.exec(t);if(!u)return null;return{slug:u[1],key:t}}function sQu(i,t,u){let l=u.split("/").map(encodeURIComponent).join("/");return`${i}/api/${encodeURIComponent(t)}/files/${l}`}function F7i(i){let t=new Map,u=i.logPrefix??"html-page-buffer";return{enqueue:(f,c)=>{let $=aQ0(f);if(!$||!i.orgSlug)return null;return t.set($.key,{slug:$.slug,key:$.key,content:c}),{slug:$.slug,key:$.key,url:sQu(i.baseUrl,i.orgSlug,$.key),bytes:new TextEncoder().encode(c).byteLength}},flush:async()=>{if(t.size===0)return;let f=Array.from(t.values());if(t.clear(),!i.orgSlug||!i.storage){console.warn(`[${u}] flush skipped \u2014 storage unavailable`,{pendingCount:f.length,hasOrgSlug:Boolean(i.orgSlug),hasStorage:Boolean(i.storage)});return}await Promise.allSettled(f.map(async(c)=>{try{let $=new TextEncoder().encode(c.content);await i.storage.put(c.key,$,{contentType:"text/html; charset=utf-8"}),i.writer.write({type:"data-html-page-published",id:c.slug,data:{slug:c.slug,key:c.key,url:sQu(i.baseUrl,i.orgSlug,c.key),bytes:$.byteLength}})}catch($){console.error(`[${u}] PUT failed`,{key:c.key},$)}}))}}}var VQ0;var W0t=w(()=>{VQ0=/^pages\/([a-z0-9][a-z0-9._-]*)\.html$/i});function mQ0(i){if(i.objectStorage)return i.objectStorage;let t=i.organization?.id;if(!t)return null;let u=U_();return u?p6(u,t):new vv(t,i.baseUrl)}function pQu(i,t){return F7i({storage:mQ0(i),baseUrl:i.baseUrl,orgSlug:i.organization?.slug,writer:t})}var iYu=w(()=>{ue();F8();W0t()});async function oQ0(i,t,u){let l=await r7i({kind:u.kind,ctx:i,organization:t,virtualMcp:u.virtualMcp,mcpClient:u.mcpClient,provider:u.provider,models:u.models,messages:u.messages,abortSignal:u.abortSignal,temperature:u.temperature,planMode:u.planMode,isDecopilot:u.isDecopilot,systemAgentInstructions:u.systemAgentInstructions,currentThreadId:u.currentThreadId,user:u.user,userContext:u.userContext,writer:u.writer,subtaskParams:{provider:u.provider,organization:t,models:u.models},prepareStep:u.prepareStep,onStepFinish:u.onStepFinish,passthroughClient:u.passthroughClient,connectionsData:u.connectionsData,extraTools:u.extraTools,additionalSystemMessages:u.additionalSystemMessages,stepLimit:u.stepLimit});return{result:l.result,error:l.error,span:l.span,assembledSystemMessages:l.assembledSystemMessages}}function tYu(i){let{ctx:t,organization:u,modelRuntime:l,sideChannel:n,cleanup:f}=i,c=pQu(t,n.writer),$=mQu(t,n.writer),d=VQu(t);return{toolRuntime:{buildEnvironmentTools:async({input:h,onChildUsage:E})=>{let v=new Map,r=[],{resolveArgs:x,onToolCalled:y}=E7i(t),O=await CQu(h,t,{writer:n.writer,toolOutputMap:v,pendingImages:r,threadId:h.threadId,resolveArgs:x,onToolCalled:y,mcpForAgent:(N,U)=>$2(h.virtualMcp,t,"passthrough",U?.superUser??!1,{listTimeoutMs:U?.listTimeoutMs}),provider:l.thinking.provider,imageProvider:l.image?.provider??l.thinking.provider,deepResearchProvider:l.deepResearch?.provider??l.thinking.provider,htmlPageBuffer:c,deckBuffer:d,onChildUsage:E}),X={tools:O.tools,passthroughTools:O.passthroughTools,builtInTools:O.builtInTools,connectionsBlockTools:O.connectionsBlockTools,toolAnnotations:O.toolAnnotations,connectionTitleMap:O.connectionTitleMap,serverInstructions:O.serverInstructions,passthroughClient:O.passthroughClient,writer:n.writer,pendingImages:r,sideChunks:n.stream,closeSideChunks:n.close,onStepFinish:async()=>{await c.flush().catch((N)=>{console.error("[decopilot] html-page flush failed",N)}),await d.flush(),await $.sweep()},close:O.close};return f.close=O.close,X},runEngine:(h)=>oQ0(t,u,h)},telemetry:{recordLlmCall:(h)=>JBu({ctx:t,...h}),monitorLlmCall:(h)=>XBu({ctx:t,...h,requestId:t.metadata.requestId,userAgent:t.metadata.userAgent??null})}}}var uYu=w(()=>{NBu();UBu();HS();MQu();N0t();aQu();oQu();iYu();T0t()});function B7i(i){if(i.providerId==="openai-compatible")try{let t=JSON.parse(i.apiKey);return{kind:"secret",providerId:i.providerId,apiKey:t.apiKey??"",modelId:i.modelId,...t.baseUrl?{baseUrl:t.baseUrl}:{}}}catch{return{kind:"secret",providerId:i.providerId,apiKey:i.apiKey,modelId:i.modelId}}return{kind:"secret",providerId:i.providerId,apiKey:i.apiKey,modelId:i.modelId}}async function fYu(i){if(!i)return null;return sQ0(i)}function sQ0(i){let t=i.fetch??fetch,u=async(n,f,c)=>{let $=await t(I7i(`${i.baseUrl}/${n}`,f),{method:"POST",headers:Z7i(i.headers,{"content-type":"application/json"}),body:JSON.stringify(c)});return lYu($)},l={getBytesOrPresign:async(n,f)=>{let c=await l.head(n);if(c.size>f.presignWhenLargerThan)return{error:"FILE_TOO_LARGE",size:c.size,maxInlineSize:f.presignWhenLargerThan,presignedUrl:await l.presignedGetUrl(n,f.presignExpiresIn),contentType:c.contentType};let $=await l.getBytes(n);return{content:nYu(c.contentType)?new TextDecoder().decode($):Buffer.from($).toString("base64"),contentType:c.contentType,encoding:nYu(c.contentType)?"utf-8":"base64",size:c.size,lastModified:c.lastModified,etag:c.etag}},getBytes:async(n)=>{let f=await t(I7i(i.baseUrl,n),{method:"GET",headers:Z7i(i.headers)});if(!f.ok)throw Error(`object storage API failed (${f.status})`);return new Uint8Array(await f.arrayBuffer())},put:async(n,f,c)=>{let $=typeof f==="string"?new TextEncoder().encode(f):f,d=$.buffer instanceof ArrayBuffer?$.buffer.slice($.byteOffset,$.byteOffset+$.byteLength):Uint8Array.from($).buffer,_=await t(I7i(i.baseUrl,n),{method:"PUT",headers:Z7i(i.headers,{...c?.contentType?{"content-type":c.contentType}:{}}),body:d});return lYu(_)},list:async()=>{throw Error("Remote object storage list is not supported")},delete:async()=>{throw Error("Remote object storage delete is not supported")},head:async(n)=>{let f=await t(I7i(i.baseUrl,n),{method:"HEAD",headers:Z7i(i.headers)});if(!f.ok)throw Error(`object storage API failed (${f.status})`);return{contentType:f.headers.get("content-type")??"application/octet-stream",size:Number(f.headers.get("content-length")??"0"),lastModified:f.headers.get("last-modified")?new Date(f.headers.get("last-modified")):void 0,etag:f.headers.get("etag")??void 0}},presignedGetUrl:async(n,f)=>(await u("presigned-get",n,{expiresIn:f})).url,presignedPutUrl:async(n,f,c)=>(await u("presigned-put",n,{expiresIn:f,contentType:c})).url};return l}async function cYu(i,t={}){if(i.kind==="in-process")return{client:i.client,close:i.close??(async()=>{})};if(t.openHttp)return t.openHttp(i);return pQ0(i,t.clientInfo)}async function pQ0(i,t={name:"decopilot",version:"1"}){let u=new pg(new URL(i.url),{requestInit:{headers:i.headers}}),l=new N1(t,{capabilities:{}});return await l.connect(u),{client:l,close:async()=>{await l.close().catch(()=>{})}}}function I7i(i,t){let u=t.split("/").map(encodeURIComponent).join("/");return`${i.replace(/\/$/,"")}/${u}`}async function lYu(i){if(!i.ok){let t=`object storage API failed (${i.status})`;try{let u=await i.json();if(typeof u.error==="string")t=u.error}catch{let u=await i.text().catch(()=>"");if(u)t=u}throw Error(t)}return await i.json()}function Z7i(i,t){let u=new Headers(i);for(let[l,n]of Object.entries(t??{}))u.set(l,n);return u}function nYu(i){let t=i.split(";")[0].trim();if(iY0.has(t))return!0;if(t.startsWith("text/"))return!0;return!1}var iY0;var k0t=w(()=>{Xh();ny();iY0=new Set(["application/json","text/html","text/css","application/javascript","text/typescript","text/plain","text/markdown","text/csv","application/xml","image/svg+xml","application/yaml","application/toml"])});function tY0(){return{enqueue:()=>null,flush:async()=>{}}}function $Yu(i){let t=T7i({writer:i.writer,toolOutputMap:i.toolOutputMap,passthroughClient:i.passthroughClient,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:i.isPlanMode,objectStorage:i.ctx.objectStorage,includeUnavailableClusterOnlyTools:!0,pendingImages:i.pendingImages,imageTool:i.imageProvider&&i.imageModelInfo?{provider:i.imageProvider,imageModelInfo:i.imageModelInfo}:void 0}),u=i.isPlanMode||i.toolApprovalLevel!=="auto",l=d7i({fs:i.fs,htmlPageBuffer:i.htmlPageBuffer??tY0(),toolOutputMap:i.toolOutputMap,needsApproval:u,pendingImages:i.pendingImages,ctx:i.ctx,threadId:i.threadId,virtualMcpId:i.virtualMcpId});return{...t,...l,...i.subtask?{subtask:i.subtask}:{}}}var dYu=w(()=>{Y0t();h0t()});function gYu(){if(!_Yu)throw Error("[desktop] sandbox-fs builder not registered \u2014 the daemon must call "+"registerDesktopSandboxFsBuilder(buildDesktopSandboxFs) before dispatching");return _Yu}var _Yu;function hYu(i){let t=f$i(),u=g7i(i.connectionsBlockTools,i.connectionTitleMap),l=i.isDecopilotAgent?c$i():i.agentInstructions,n=[t,i.planPrompt,u,IM(),i.webSearchPrompt,l].filter((f)=>Boolean(f?.trim()));return{systemMessages:_7i(n,new Date)}}var EYu=w(()=>{v0t()});import{z as j0t}from"zod";function vYu(i){let{writer:t,selfAgentId:u,models:l,needsApproval:n,runSubtask:f,onChildUsage:c}=i;return hl({description:lY0,inputSchema:hi(uY0),needsApproval:n,execute:async({prompt:$,agent_id:d},{abortSignal:_,toolCallId:g})=>{let h=performance.now(),E=d&&d!==u?d:void 0,v=await f($,E,_??new AbortController().signal);return c?.(v.usage),t.write({type:"data-tool-metadata",id:g,data:{annotations:nY0,latencyMs:performance.now()-h}}),t.write({type:"data-tool-subtask-metadata",id:g,data:{usage:v.usage,agent:E??u,models:l}}),v},toModelOutput:({output:$})=>{let d=$;if(d?.error)return{type:"error-text",value:`Subtask failed: ${d.error}`};let _=d?.text?.trim(),g=d?.finishReason==="length";if(_)return{type:"text",value:(g?`[Subtask hit step limit \u2014 partial result below; consider narrowing the task.]
|
|
108183
|
+
`,r=await fetch(`${eP}/function?token=${encodeURIComponent(_)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:v});if(!r.ok){let X=await r.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${r.status}): ${X}`,url:g.url}}let x=await r.json().catch(async()=>{return{error:`Browserless returned non-JSON response: ${(await r.text().catch(()=>"")).slice(0,200)}`}}),y=JSON.stringify(x,null,2);u.set($.toolCallId,y);let O=vc(y);if(!("error"in x)&&O>gD&&l){let X=`inspect-pages/${crypto.randomUUID()}.json`;return await l.put(X,new TextEncoder().encode(y),{contentType:"application/json"}),{success:!0,uri:z4(X),preview:gd(y),url:g.url,tokenCount:O,consoleLogCount:x.consoleLogs?.length??0,errorCount:x.errors?.length??0,hasEvaluateResult:x.evaluateResult!=null}}return{success:!("error"in x),...x,url:g.url,tokenCount:O}}finally{i.write({type:"data-tool-metadata",id:$.toolCallId,data:{latencyMs:performance.now()-d}})}}})}function jQ0(){return hl({description:"Search the web and synthesize a comprehensive research report. This tool is only available in cluster Decopilot.",inputSchema:hi(WQ0),execute:async(i)=>{throw Error("web_search is only available in cluster Decopilot.")}})}function SQ0(){return hl({description:"Record what the user is durably working toward (their goals/interests). This tool is only available in cluster Decopilot.",inputSchema:hi(kQ0),execute:async(i)=>{throw Error("update_interests is only available in cluster Decopilot.")}})}function T7i(i){let{writer:t,toolOutputMap:u,objectStorage:l,pendingImages:n,imageTool:f,includeUnavailableClusterOnlyTools:c}=i,$={user_ask:w7i,todo_write:x7i,propose_plan:y7i,read_tool_output:AOi({toolOutputMap:u})};if(c)$.web_search=jQ0(),$.update_interests=SQ0();if(f)$.generate_image=X7i(t,{...f,objectStorage:l});if(process.env.BROWSERLESS_TOKEN){if($.scrape_url=LQu(t,{toolOutputMap:u,objectStorage:l,kind:"scrape"}),$.inspect_page=LQu(t,{toolOutputMap:u,objectStorage:l,kind:"inspect"}),n)$.take_screenshot=N7i(t,{objectStorage:l,toolOutputMap:u,pendingImages:n})}return $}var WQ0,kQ0;var Y0t=w(()=>{$n();Z0t();B0t();Q0t();lr();J7i();WQ0=xg.object({query:xg.string().max(1e4).describe("The research query. Be specific about what information you need.")}),kQ0=xg.object({interests:xg.array(xg.object({title:xg.string().max(120).describe("Short noun phrase, e.g. 'Learning Rust'"),summary:xg.string().max(500).describe("One or two sentences of context, including any progress")})).max(10)})});async function bQ0(i,t,u){let{provider:l,imageProvider:n,deepResearchProvider:f,organization:c,models:$,toolApprovalLevel:d="auto",isPlanMode:_=!1,toolOutputMap:g,pendingImages:h,passthroughClient:E,vmContext:v,htmlPageBuffer:r,deckBuffer:x,taskId:y,agentId:O,onChildUsage:X}=t,N={isPlanMode:_},U=u.auth?.user?.id,J=T7i({writer:i,toolOutputMap:g,passthroughClient:E,toolApprovalLevel:d,isPlanMode:_,objectStorage:u.objectStorage});if(U)J.update_interests=UQu({write:async(B)=>{await u.storage.interests.setForAgent(B.orgId,B.agentId,B.userId,{interests:B.interests})},orgId:c.id,agentId:O,userId:U});let F=GOi(d,!1,N)!==!1,Q;if(v){let B=await LBu(u,{virtualMcpId:v.virtualMcpId,branch:v.branch,userId:v.userId});Q=d7i({fs:B,htmlPageBuffer:r,deckBuffer:x,toolOutputMap:g,needsApproval:F,pendingImages:h,ctx:u,threadId:v.threadId,virtualMcpId:v.virtualMcpId,orgFs:Qt().orgFsClusterMounts}),Object.assign(J,Q)}if(l)J.subtask=I0t(i,{provider:l,organization:c,models:$,self:{id:O},needsApproval:GOi(d,!1,N)!==!1,onChildUsage:X,vmTools:Q},u);if(n&&$.image&&u.objectStorage)J.generate_image=ZQu(i,{provider:n,imageModelInfo:$.image,objectStorage:u.objectStorage,allowHttpExternalUrls:Qt().localMode});if(f&&$.deepResearch){let B=WQu({provider:f,deepResearchModelInfo:$.deepResearch,ctx:u});J.web_search=YQu(i,{researchJob:B,toolOutputMap:g,taskId:y})}if(process.env.BROWSERLESS_TOKEN){let B={baseUrl:eP,token:process.env.BROWSERLESS_TOKEN};if(J.take_screenshot=jQu(i,{objectStorage:u.objectStorage,toolOutputMap:g,pendingImages:h}),u.objectStorage)J.scrape_url=bQu(i,{browserless:B,objectStorage:u.objectStorage,toolOutputMap:g}),J.inspect_page=HQu(i,{browserless:B,objectStorage:u.objectStorage,toolOutputMap:g})}return J}function KQ0(i,t,u){let l=t.organization.id,n=u.auth?.user?.id,f={};for(let[c,$]of Object.entries(i)){let d=$,_=d.execute;if(typeof _!=="function"){f[c]=$;continue}let g=zQ0[c],h=_.constructor?.name==="AsyncGeneratorFunction",E=(r,x)=>{if(!l||!n)return;Ju.capture({distinctId:n,event:"tool_called",groups:{organization:l},properties:{organization_id:l,tool_source:"builtin",tool_name:c,tool_safe_name:c,read_only:g?.readOnly??null,destructive:g?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(r),is_error:x}})},v=h?async function*(r,x){let y=performance.now(),O=!1;try{yield*_.call(d,r,x)}catch(X){throw O=!0,X}finally{E(performance.now()-y,O)}}:async(r,x)=>{let y=performance.now(),O=!1;try{return await _.call(d,r,x)}catch(X){throw O=!0,X}finally{E(performance.now()-y,O)}};f[c]={...d,execute:v}}return f}async function eQu(i,t,u){let l=await bQ0(i,t,u),n=KQ0(l,t,u);if(!t.isPlanMode){let{propose_plan:f,...c}=n;return c}return n}function $Qu(i){let{ctx:t,writer:u,toolOutputMap:l,subtaskParams:n,planMode:f}=i,c={user_ask:w7i,todo_write:x7i,propose_plan:y7i,read_tool_output:AOi({toolOutputMap:l})};if(n.provider)c.subtask=I0t(u,n,t);return c}var zQ0;var x0t=w(()=>{Tf();xa();lr();h0t();eBu();JQu();Z0t();B0t();TQu();Q0t();BQu();PQu();kQu();SQu();KQu();RQu();Y0t();U0();zQ0={read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tool:{readOnly:!0,destructive:!1},todo_write:{readOnly:!1,destructive:!1},update_interests:{readOnly:!1,destructive:!1}}});function RQ0(i,t,u){if(!u)return i;let l=new Set;for(let[n,f]of t)if(u.has(n)||u.has(f))l.add(f);return Object.fromEntries(Object.entries(i).filter(([n])=>l.has(n)))}function LQ0(i,t){if(!t)return i;return Object.fromEntries(Object.entries(i).filter(([u])=>HQ0.has(u)||t.has(u)))}async function CQu(i,t,u){let l=t.organization,n=i.mode==="plan",f=i.toolAllowlist&&i.toolAllowlist.length>0?new Set(i.toolAllowlist):null,c=await u.mcpForAgent(i.agent.id,{superUser:!0,listTimeoutMs:1000});try{let{tools:$,nameMap:d}=await bz(c,u.toolOutputMap,u.writer,i.toolApprovalLevel,{isPlanMode:n,timeoutMs:d$i,resolveArgs:u.resolveArgs,onToolCalled:u.onToolCalled}),_=RQ0($,d,f),h=!i.virtualMcp.metadata.githubRepo,E=i.user.id?{virtualMcpId:i.agent.id,branch:h?"ephemeral":i.branch??`thread:${u.threadId}`,userId:i.user.id,threadId:u.threadId}:null,v=await eQu(u.writer,{provider:u.provider,imageProvider:u.imageProvider,deepResearchProvider:u.deepResearchProvider,organization:l,models:i.models,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:n,toolOutputMap:u.toolOutputMap,pendingImages:u.pendingImages,passthroughClient:c,vmContext:E,htmlPageBuffer:u.htmlPageBuffer,deckBuffer:u.deckBuffer,taskId:u.threadId,agentId:i.agent.id,onChildUsage:u.onChildUsage},t),r=LQ0(v,f),x=(await c.listTools()).tools,y=[],O=new Map;for(let J of x){let F=d.get(J.name);if(!F)continue;if(f&&!f.has(J.name)&&!f.has(F))continue;let Q=typeof J._meta?.gatewayClientId==="string"?J._meta.gatewayClientId:"unknown";if(y.push({rawName:J.name,safeName:F,connectionId:Q}),n)O.set(F,{readOnlyHint:J.annotations?.readOnlyHint})}let X=c.getConnectionTitleMap(),N=c.getInstructions();return{tools:{..._,...r},nameMap:d,passthroughTools:_,builtInTools:r,passthroughToolList:x,connectionsBlockTools:y,toolAnnotations:O,vmContext:E,connectionTitleMap:X,serverInstructions:N,passthroughClient:c,close:async()=>{await c.close().catch(()=>{})}}}catch($){throw await c.close().catch(()=>{}),$}}var HQ0;var MQu=w(()=>{x0t();xa();XO();HQ0=new Set(["read_tool_output","enable_tool","open_in_agent","todo_write","update_interests"])});function P0t(i){let t=eQ0.exec(i);if(!t)return null;return{path:i,name:t[2],kind:t[1].toLowerCase()==="decks"?"deck":"page"}}function qQu(i,t){if(!t)return null;let u=i.replace(/^\.\//,""),l=`org/${t}/`,n=u.indexOf(l);if(n!==0&&(n<0||u[n-1]!=="/"))return null;return P0t(u.slice(n+l.length))}var eQ0;var A0t=w(()=>{eQ0=/^(decks|pages)\/([a-z0-9][a-z0-9._-]*)\.html$/i});function VQu(i){let t=Qt().orgFsClusterMounts?i.orgFs:null,u=i.organization?.slug??null,l=i.auth?.user?.id??null;if(!t||!u||!l)return MQ0;let n=Sz(u),f=new Map;return{enqueue(c,$){let d=qQu(c,n);if(!d)return;f.set(d.path,$)},async flush(){if(f.size===0)return;let c=[...f.entries()];f.clear(),await Promise.allSettled(c.map(async([$,d])=>{try{await t.write(CQ0,$,d,{actor:l,contentType:"text/html; charset=utf-8"})}catch(_){console.error("[deck-buffer] org-fs write failed",{path:$},_)}}))}}}var CQ0="home",MQ0;var aQu=w(()=>{XOi();U0();A0t();MQ0={enqueue:()=>{},flush:async()=>{}}});function mQu(i,t){let u=Qt().orgFsClusterMounts?i.orgFs:null,l=i.organization?.slug??null;if(!u||!l)return{sweep:async()=>{}};let n=Sz(l),f=u.latestSeq(G0t).catch((h)=>{return console.error("[deck-watcher] cursor snapshot failed",h),null}),c=null,$=!1,d=!1,_=new Map;return{sweep:async()=>{if(d)return;d=!0;try{if(!$)c=await f,$=!0;if(c===null)return;let h=new Map;for(let E=0;E<20;E++){let v=await u.changes(G0t,c,qQ0);for(let r of v.entries){if(r.kind!=="file"||r.deletedAt)continue;let x=P0t(r.path);if(!x)continue;if(r.contentHash){if(_.get(x.path)===r.contentHash)continue;_.set(x.path,r.contentHash)}h.set(x.path,{volume:G0t,path:x.path,name:x.name,kind:x.kind,mountPath:`org/${n}/${x.path}`})}if(c=v.cursor,!v.hasMore)break}for(let E of h.values())t.write({type:"data-deck-updated",id:E.path,data:E})}catch(h){console.error("[deck-watcher] sweep failed",h)}finally{d=!1}}}}var G0t="home",qQ0=200;var oQu=w(()=>{XOi();U0();A0t()});function aQ0(i){let t=i.replace(/^\.?\//,""),u=VQ0.exec(t);if(!u)return null;return{slug:u[1],key:t}}function sQu(i,t,u){let l=u.split("/").map(encodeURIComponent).join("/");return`${i}/api/${encodeURIComponent(t)}/files/${l}`}function F7i(i){let t=new Map,u=i.logPrefix??"html-page-buffer";return{enqueue:(f,c)=>{let $=aQ0(f);if(!$||!i.orgSlug)return null;return t.set($.key,{slug:$.slug,key:$.key,content:c}),{slug:$.slug,key:$.key,url:sQu(i.baseUrl,i.orgSlug,$.key),bytes:new TextEncoder().encode(c).byteLength}},flush:async()=>{if(t.size===0)return;let f=Array.from(t.values());if(t.clear(),!i.orgSlug||!i.storage){console.warn(`[${u}] flush skipped \u2014 storage unavailable`,{pendingCount:f.length,hasOrgSlug:Boolean(i.orgSlug),hasStorage:Boolean(i.storage)});return}await Promise.allSettled(f.map(async(c)=>{try{let $=new TextEncoder().encode(c.content);await i.storage.put(c.key,$,{contentType:"text/html; charset=utf-8"}),i.writer.write({type:"data-html-page-published",id:c.slug,data:{slug:c.slug,key:c.key,url:sQu(i.baseUrl,i.orgSlug,c.key),bytes:$.byteLength}})}catch($){console.error(`[${u}] PUT failed`,{key:c.key},$)}}))}}}var VQ0;var W0t=w(()=>{VQ0=/^pages\/([a-z0-9][a-z0-9._-]*)\.html$/i});function mQ0(i){if(i.objectStorage)return i.objectStorage;let t=i.organization?.id;if(!t)return null;let u=U_();return u?p6(u,t):new vv(t,i.baseUrl)}function pQu(i,t){return F7i({storage:mQ0(i),baseUrl:i.baseUrl,orgSlug:i.organization?.slug,writer:t})}var iYu=w(()=>{ue();F8();W0t()});async function oQ0(i,t,u){let l=await r7i({kind:u.kind,ctx:i,organization:t,virtualMcp:u.virtualMcp,mcpClient:u.mcpClient,provider:u.provider,models:u.models,messages:u.messages,abortSignal:u.abortSignal,temperature:u.temperature,planMode:u.planMode,isDecopilot:u.isDecopilot,systemAgentInstructions:u.systemAgentInstructions,currentThreadId:u.currentThreadId,user:u.user,userContext:u.userContext,writer:u.writer,subtaskParams:{provider:u.provider,organization:t,models:u.models},prepareStep:u.prepareStep,onStepFinish:u.onStepFinish,passthroughClient:u.passthroughClient,connectionsData:u.connectionsData,extraTools:u.extraTools,additionalSystemMessages:u.additionalSystemMessages,stepLimit:u.stepLimit});return{result:l.result,error:l.error,span:l.span,assembledSystemMessages:l.assembledSystemMessages}}function tYu(i){let{ctx:t,organization:u,modelRuntime:l,sideChannel:n,cleanup:f}=i,c=pQu(t,n.writer),$=mQu(t,n.writer),d=VQu(t);return{toolRuntime:{buildEnvironmentTools:async({input:h,onChildUsage:E})=>{let v=new Map,r=[],{resolveArgs:x,onToolCalled:y}=E7i(t),O=await CQu(h,t,{writer:n.writer,toolOutputMap:v,pendingImages:r,threadId:h.threadId,resolveArgs:x,onToolCalled:y,mcpForAgent:(N,U)=>$2(h.virtualMcp,t,"passthrough",U?.superUser??!1,{listTimeoutMs:U?.listTimeoutMs}),provider:l.thinking.provider,imageProvider:l.image?.provider??l.thinking.provider,deepResearchProvider:l.deepResearch?.provider??l.thinking.provider,htmlPageBuffer:c,deckBuffer:d,onChildUsage:E}),X={tools:O.tools,passthroughTools:O.passthroughTools,builtInTools:O.builtInTools,connectionsBlockTools:O.connectionsBlockTools,toolAnnotations:O.toolAnnotations,connectionTitleMap:O.connectionTitleMap,serverInstructions:O.serverInstructions,passthroughClient:O.passthroughClient,writer:n.writer,pendingImages:r,sideChunks:n.stream,closeSideChunks:n.close,onStepFinish:async()=>{await c.flush().catch((N)=>{console.error("[decopilot] html-page flush failed",N)}),await d.flush(),await $.sweep()},close:O.close};return f.close=O.close,X},runEngine:(h)=>oQ0(t,u,h)},telemetry:{recordLlmCall:(h)=>JBu({ctx:t,...h}),monitorLlmCall:(h)=>XBu({ctx:t,...h,requestId:t.metadata.requestId,userAgent:t.metadata.userAgent??null})}}}var uYu=w(()=>{NBu();UBu();HS();MQu();N0t();aQu();oQu();iYu();T0t()});function B7i(i){if(i.providerId==="openai-compatible")try{let t=JSON.parse(i.apiKey);return{kind:"secret",providerId:i.providerId,apiKey:t.apiKey??"",modelId:i.modelId,...t.baseUrl?{baseUrl:t.baseUrl}:{}}}catch{return{kind:"secret",providerId:i.providerId,apiKey:i.apiKey,modelId:i.modelId}}return{kind:"secret",providerId:i.providerId,apiKey:i.apiKey,modelId:i.modelId}}async function fYu(i){if(!i)return null;return sQ0(i)}function sQ0(i){let t=i.fetch??fetch,u=async(n,f,c)=>{let $=await t(I7i(`${i.baseUrl}/${n}`,f),{method:"POST",headers:Z7i(i.headers,{"content-type":"application/json"}),body:JSON.stringify(c)});return lYu($)},l={getBytesOrPresign:async(n,f)=>{let c=await l.head(n);if(c.size>f.presignWhenLargerThan)return{error:"FILE_TOO_LARGE",size:c.size,maxInlineSize:f.presignWhenLargerThan,presignedUrl:await l.presignedGetUrl(n,f.presignExpiresIn),contentType:c.contentType};let $=await l.getBytes(n);return{content:nYu(c.contentType)?new TextDecoder().decode($):Buffer.from($).toString("base64"),contentType:c.contentType,encoding:nYu(c.contentType)?"utf-8":"base64",size:c.size,lastModified:c.lastModified,etag:c.etag}},getBytes:async(n)=>{let f=await t(I7i(i.baseUrl,n),{method:"GET",headers:Z7i(i.headers)});if(!f.ok)throw Error(`object storage API failed (${f.status})`);return new Uint8Array(await f.arrayBuffer())},put:async(n,f,c)=>{let $=typeof f==="string"?new TextEncoder().encode(f):f,d=$.buffer instanceof ArrayBuffer?$.buffer.slice($.byteOffset,$.byteOffset+$.byteLength):Uint8Array.from($).buffer,_=await t(I7i(i.baseUrl,n),{method:"PUT",headers:Z7i(i.headers,{...c?.contentType?{"content-type":c.contentType}:{}}),body:d});return lYu(_)},list:async()=>{throw Error("Remote object storage list is not supported")},delete:async()=>{throw Error("Remote object storage delete is not supported")},head:async(n)=>{let f=await t(I7i(i.baseUrl,n),{method:"HEAD",headers:Z7i(i.headers)});if(!f.ok)throw Error(`object storage API failed (${f.status})`);return{contentType:f.headers.get("content-type")??"application/octet-stream",size:Number(f.headers.get("content-length")??"0"),lastModified:f.headers.get("last-modified")?new Date(f.headers.get("last-modified")):void 0,etag:f.headers.get("etag")??void 0}},presignedGetUrl:async(n,f)=>(await u("presigned-get",n,{expiresIn:f})).url,presignedPutUrl:async(n,f,c)=>(await u("presigned-put",n,{expiresIn:f,contentType:c})).url};return l}async function cYu(i,t={}){if(i.kind==="in-process")return{client:i.client,close:i.close??(async()=>{})};if(t.openHttp)return t.openHttp(i);return pQ0(i,t.clientInfo)}async function pQ0(i,t={name:"decopilot",version:"1"}){let u=new pg(new URL(i.url),{requestInit:{headers:i.headers}}),l=new N1(t,{capabilities:{}});return await l.connect(u),{client:l,close:async()=>{await l.close().catch(()=>{})}}}function I7i(i,t){let u=t.split("/").map(encodeURIComponent).join("/");return`${i.replace(/\/$/,"")}/${u}`}async function lYu(i){if(!i.ok){let t=`object storage API failed (${i.status})`;try{let u=await i.json();if(typeof u.error==="string")t=u.error}catch{let u=await i.text().catch(()=>"");if(u)t=u}throw Error(t)}return await i.json()}function Z7i(i,t){let u=new Headers(i);for(let[l,n]of Object.entries(t??{}))u.set(l,n);return u}function nYu(i){let t=i.split(";")[0].trim();if(iY0.has(t))return!0;if(t.startsWith("text/"))return!0;return!1}var iY0;var k0t=w(()=>{Xh();ny();iY0=new Set(["application/json","text/html","text/css","application/javascript","text/typescript","text/plain","text/markdown","text/csv","application/xml","image/svg+xml","application/yaml","application/toml"])});function tY0(){return{enqueue:()=>null,flush:async()=>{}}}function $Yu(i){let t=T7i({writer:i.writer,toolOutputMap:i.toolOutputMap,passthroughClient:i.passthroughClient,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:i.isPlanMode,objectStorage:i.ctx.objectStorage,includeUnavailableClusterOnlyTools:!0,pendingImages:i.pendingImages,imageTool:i.imageProvider&&i.imageModelInfo?{provider:i.imageProvider,imageModelInfo:i.imageModelInfo}:void 0}),u=i.isPlanMode||i.toolApprovalLevel!=="auto",l=d7i({fs:i.fs,htmlPageBuffer:i.htmlPageBuffer??tY0(),toolOutputMap:i.toolOutputMap,needsApproval:u,pendingImages:i.pendingImages,ctx:i.ctx,threadId:i.threadId,virtualMcpId:i.virtualMcpId});return{...t,...l,...i.subtask?{subtask:i.subtask}:{}}}var dYu=w(()=>{Y0t();h0t()});function gYu(){if(!_Yu)throw Error("[desktop] sandbox-fs builder not registered \u2014 the daemon must call "+"registerDesktopSandboxFsBuilder(buildDesktopSandboxFs) before dispatching");return _Yu}var _Yu;function hYu(i){let t=f$i(),u=g7i(i.connectionsBlockTools,i.connectionTitleMap),l=i.isDecopilotAgent?c$i():i.agentInstructions,n=[t,i.planPrompt,u,IM(),i.webSearchPrompt,l].filter((f)=>Boolean(f?.trim()));return{systemMessages:_7i(n,new Date)}}var EYu=w(()=>{v0t()});import{z as j0t}from"zod";function vYu(i){let{writer:t,selfAgentId:u,models:l,needsApproval:n,runSubtask:f,onChildUsage:c}=i;return hl({description:lY0,inputSchema:hi(uY0),needsApproval:n,execute:async({prompt:$,agent_id:d},{abortSignal:_,toolCallId:g})=>{let h=performance.now(),E=d&&d!==u?d:void 0,v=await f($,E,_??new AbortController().signal);return c?.(v.usage),t.write({type:"data-tool-metadata",id:g,data:{annotations:nY0,latencyMs:performance.now()-h}}),t.write({type:"data-tool-subtask-metadata",id:g,data:{usage:v.usage,agent:E??u,models:l}}),v},toModelOutput:({output:$})=>{let d=$;if(d?.error)return{type:"error-text",value:`Subtask failed: ${d.error}`};let _=d?.text?.trim(),g=d?.finishReason==="length";if(_)return{type:"text",value:(g?`[Subtask hit step limit \u2014 partial result below; consider narrowing the task.]
|
|
108178
108184
|
|
|
108179
108185
|
`:"")+_};if(g)return{type:"text",value:"[Subtask hit step limit before producing a final report. The subagent did work but ran out of steps. Narrow the task or increase the budget.]"};return{type:"text",value:"Subtask completed (no output)."}}})}var uY0,lY0,nY0;var rYu=w(()=>{$n();uY0=j0t.object({prompt:j0t.string().min(1).max(50000).describe("The task to delegate to the subagent. Be specific and self-contained \u2014 "+"the subagent has no access to the parent conversation history."),agent_id:j0t.string().min(1).max(128).optional().describe("The ID of the agent (Virtual MCP) to delegate to. Must exist and be "+"active in the current organization. OMIT to clone yourself \u2014 a fresh "+"subagent with your exact tools and instructions but an empty context.")}),lY0=`Run a focused task in a fresh subagent that works independently and returns only its conclusion.
|
|
108180
108186
|
|