decocms 2.310.2 → 2.310.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-Bjs1DRoe.js → AlertCircle-B_ixt4PV.js} +1 -1
- package/dist/client/assets/{ArrowNarrowLeft-4-qtN4yo.js → ArrowNarrowLeft-CrFHQhYJ.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-TOJd4tk1.js → ArrowUpRight-nmn7SUvw.js} +1 -1
- package/dist/client/assets/{Check-uCeCY94f.js → Check-BqWn0Qac.js} +1 -1
- package/dist/client/assets/{CheckCircle-BYjzCjZv.js → CheckCircle-D5vzorp6.js} +1 -1
- package/dist/client/assets/{ChevronDown-BCKKMGkp.js → ChevronDown-D9U47f9C.js} +1 -1
- package/dist/client/assets/{ChevronRight-CBRO8ebn.js → ChevronRight-FNA-cwb3.js} +1 -1
- package/dist/client/assets/{ChevronUp-CImlARUB.js → ChevronUp-i8raSBwP.js} +1 -1
- package/dist/client/assets/{Container-UmsQv9ox.js → Container-D4mVdsOS.js} +1 -1
- package/dist/client/assets/{DotsVertical-DYz9Xowp.js → DotsVertical-DyRKYk_4.js} +1 -1
- package/dist/client/assets/{LinkExternal01-MfoA7_8K.js → LinkExternal01-DbpTHzhG.js} +1 -1
- package/dist/client/assets/{Lock01-DY0dR_EF.js → Lock01-BCzwOsnt.js} +1 -1
- package/dist/client/assets/{Palette-CYlPasQS.js → Palette-BPPf-x1D.js} +1 -1
- package/dist/client/assets/{Play-BOunn_Vy.js → Play-DVx-BQBK.js} +1 -1
- package/dist/client/assets/{Plus-DJQM2qca.js → Plus-6Aj_3OR1.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-fb__YhOw.js → RefreshCcw01-C5KiSpOO.js} +1 -1
- package/dist/client/assets/{SearchMd-Bv6wAjVm.js → SearchMd-acewDSqi.js} +1 -1
- package/dist/client/assets/{Settings02-ZxqKPBpN.js → Settings02-D5TrG9xD.js} +1 -1
- package/dist/client/assets/{Shield01-DLP8JywO.js → Shield01-BFVZdmRt.js} +1 -1
- package/dist/client/assets/{Star01-DO3o-Tm0.js → Star01-BlH1_8-6.js} +1 -1
- package/dist/client/assets/{Sun-CZnXZvsq.js → Sun-DPLFw75Q.js} +1 -1
- package/dist/client/assets/{Tool01-D8__PXyN.js → Tool01-C2Si0HgH.js} +1 -1
- package/dist/client/assets/{Trash01-CaQDsaot.js → Trash01-BCpCFt9s.js} +1 -1
- package/dist/client/assets/{User01-oR5RStEl.js → User01-DI61qRtW.js} +1 -1
- package/dist/client/assets/{Users03-BsIZE4Pm.js → Users03-knaWc8Kc.js} +1 -1
- package/dist/client/assets/{X-vjP4Msb7.js → X-DBkpNyXP.js} +1 -1
- package/dist/client/assets/{XCircle-Bjg8qJ8l.js → XCircle-Cw6xQq75.js} +1 -1
- package/dist/client/assets/{XClose-CaKKQVXU.js → XClose-3a3Tbrfg.js} +1 -1
- package/dist/client/assets/{Zap-CSBwa9kl.js → Zap-UEJX5ZfT.js} +1 -1
- package/dist/client/assets/{ZapSquare-B2TPVAEq.js → ZapSquare-pD3KrBS0.js} +1 -1
- package/dist/client/assets/{accordion-BtvBKlj9.js → accordion-hXQ4kg4L.js} +1 -1
- package/dist/client/assets/{agent-icon-BwpnpUbm.js → agent-icon-DF6ftYz_.js} +1 -1
- package/dist/client/assets/{agents-list-DO7W3l8_.js → agents-list-YKvU-KT5.js} +1 -1
- package/dist/client/assets/ai-providers-CEOJVgLo.js +1 -0
- package/dist/client/assets/{alert-dialog-C-BRVgvu.js → alert-dialog-C9W8_i7D.js} +1 -1
- package/dist/client/assets/{auth-catchall-CutI2kmj.js → auth-catchall-BjoJ1fit.js} +1 -1
- package/dist/client/assets/{automation-list-row-DAEvSBmb.js → automation-list-row-Bn56w3kA.js} +1 -1
- package/dist/client/assets/{automations-CgXPCVHi.js → automations-CjWF6ELU.js} +1 -1
- package/dist/client/assets/{avatar-DMfNBsEa.js → avatar-DSXx4LT-.js} +1 -1
- package/dist/client/assets/{badge-IDvBfH3R.js → badge-CgKuwLV1.js} +1 -1
- package/dist/client/assets/brand-context-BqrRLTJ8.js +1 -0
- package/dist/client/assets/{card-CvuzGHjO.js → card-Dvu8__Va.js} +1 -1
- package/dist/client/assets/{chat-context-CErwb6k6.js → chat-context-D4Q2hOxG.js} +1 -1
- package/dist/client/assets/{checkbox-Dl75QnG7.js → checkbox-9a2NidDz.js} +1 -1
- package/dist/client/assets/{collection-detail-D1GYoMQ-.js → collection-detail-D3nsJ20C.js} +1 -1
- package/dist/client/assets/{collection-display-button-DuQih4HO.js → collection-display-button-CF3TPZsy.js} +1 -1
- package/dist/client/assets/{collection-search-BbV_T-EE.js → collection-search-CavMXw0U.js} +1 -1
- package/dist/client/assets/{collection-search-FABAZQZ-.js → collection-search-CnhSwXsN.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-BOjY1N-o.js → collection-table-wrapper-JhsTc14z.js} +1 -1
- package/dist/client/assets/{collection-tabs-D9DYouIo.js → collection-tabs-CvpQBjP4.js} +1 -1
- package/dist/client/assets/{collections-CWT6-czY.js → collections-DgMj_tKp.js} +1 -1
- package/dist/client/assets/{command-BcVlajkv.js → command-DdZ6m00L.js} +1 -1
- package/dist/client/assets/{connection-card-5Wnkn35H.js → connection-card-DCcXVB_E.js} +1 -1
- package/dist/client/assets/{connection-detail-9LTY8cEq.js → connection-detail-CzXiJt7V.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-D_o8vWS8.js → connection-form-helpers-0guFAknk.js} +1 -1
- package/dist/client/assets/{connections-B0_zSoBW.js → connections-DPNF_KPz.js} +1 -1
- package/dist/client/assets/{constants-Ccic_WNi.js → constants-B0bVjev-.js} +1 -1
- package/dist/client/assets/{constants-BgsGWL53.js → constants-DP1fYfN5.js} +1 -1
- package/dist/client/assets/{dialog-BG4etlBR.js → dialog-BFoHlGht.js} +1 -1
- package/dist/client/assets/{domain-settings-DrdMk60b.js → domain-settings-BrBa2-xP.js} +1 -1
- package/dist/client/assets/{drawer-Buc4-066.js → drawer-BhTf1Qla.js} +1 -1
- package/dist/client/assets/{dropdown-menu-C5QgSZ0t.js → dropdown-menu-ECqk4Bwl.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-CaV8IAmp.js → dynamic-plugin-layout-C6uS9Fgd.js} +1 -1
- package/dist/client/assets/{empty-state-CcdlS-eW.js → empty-state-DnTORYxE.js} +1 -1
- package/dist/client/assets/{empty-state-CAqrQ-6W.js → empty-state-WM4MEN1n.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DbON8nO3.js → extract-connection-data-DI8Ev_i1.js} +1 -1
- package/dist/client/assets/{features-ByRqjbyV.js → features-CeLAaeRl.js} +1 -1
- package/dist/client/assets/{form-BbDzJOpZ.js → form-FQnGS2M2.js} +1 -1
- package/dist/client/assets/general-ChIDXqk_.js +1 -0
- package/dist/client/assets/{index-DDAuFNoU.js → index--7GMpzOC.js} +1 -1
- package/dist/client/assets/{index-BBwsyhew.js → index-B52t-Jgl.js} +1 -1
- package/dist/client/assets/{index-BZSXOPw-.js → index-BNGN_z8K.js} +1 -1
- package/dist/client/assets/{index-viV87izi.js → index-BR_akr8d.js} +1 -1
- package/dist/client/assets/{index-17qzAK95.js → index-BaGA1Dwt.js} +1 -1
- package/dist/client/assets/{index-DwFLYZMx.js → index-BxU5h0n7.js} +1 -1
- package/dist/client/assets/{index-Bu6OchAc.js → index-CMV1uVKR.js} +1 -1
- package/dist/client/assets/{index-B-lZvo-3.js → index-CQTEAoFE.js} +1 -1
- package/dist/client/assets/index-D2ho-V2I.js +182 -0
- package/dist/client/assets/{index-C6BloEPE.js → index-D5ted9OP.js} +1 -1
- package/dist/client/assets/{index-Bo98JLt6.js → index-D8S8aIBi.js} +1 -1
- package/dist/client/assets/{index-Bt0njY-h.js → index-DMXTlRhR.js} +1 -1
- package/dist/client/assets/{index-BYF0TDJs.js → index-DMhywANg.js} +1 -1
- package/dist/client/assets/{index-CAEMKqmE.js → index-DtFLCGGC.js} +1 -1
- package/dist/client/assets/index-inyirlB4.js +1 -0
- package/dist/client/assets/{index-CsPnm66A.js → index-tTl1XGBH.js} +2 -2
- package/dist/client/assets/{infiniteQueryObserver-BD3sb9pN.js → infiniteQueryObserver-DZfr_jIN.js} +1 -1
- package/dist/client/assets/{input-BOyPyslv.js → input-7B8HJEw8.js} +1 -1
- package/dist/client/assets/{integration-icon-BXKm0FXI.js → integration-icon--zCgX8zg.js} +1 -1
- package/dist/client/assets/{label-C1HjlN95.js → label-D7eZ_QmZ.js} +1 -1
- package/dist/client/assets/{layout-BoLVBNZl.js → layout-yHPZhe3e.js} +1 -1
- package/dist/client/assets/lean-canvas-recruit-modal-c_n0ecvK.js +139 -0
- package/dist/client/assets/{login-BNbNZ57q.js → login-qkZIlsfB.js} +1 -1
- package/dist/client/assets/{members-CZREN_th.js → members-Bz4sBwrN.js} +1 -1
- package/dist/client/assets/{monaco-editor-3btV5byi.js → monaco-editor-DN9aHYBK.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-TeqbUQfb.js → monitoring-stats-row-D_GvzMhv.js} +1 -1
- package/dist/client/assets/{oauth-callback-CASHqw5B.js → oauth-callback-D32b5XtK.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DRX_3ZGd.js → oauth-callback-ai-provider-KERy7Bq0.js} +1 -1
- package/dist/client/assets/{onboarding-snq0kuQC.js → onboarding-C7pha-UZ.js} +1 -1
- package/dist/client/assets/{org-layout-BlsnG8tD.js → org-layout-CGeuSECe.js} +1 -1
- package/dist/client/assets/{org-plugin-layout-CkIHlyUf.js → org-plugin-layout-DaAkPGcd.js} +1 -1
- package/dist/client/assets/{pair-DoCidCoS.js → pair-BAhyu5p7.js} +2 -2
- package/dist/client/assets/{plugin-empty-state-BEExeVzS.js → plugin-empty-state-JWDC1EDj.js} +1 -1
- package/dist/client/assets/{plugin-header-DONB160y.js → plugin-header-U1iHtY7c.js} +1 -1
- package/dist/client/assets/{plugin-layout-LrDjSSJL.js → plugin-layout-D2NVqZwK.js} +1 -1
- package/dist/client/assets/{popover-DJTDvTFH.js → popover-ScITtqj7.js} +1 -1
- package/dist/client/assets/profile-CS9_x9iB.js +1 -0
- package/dist/client/assets/{project-app-view-DH36c9up.js → project-app-view-B18G8KW8.js} +1 -1
- package/dist/client/assets/registry-B-s71WVC.js +2 -0
- package/dist/client/assets/{registry-layout-cP1e-tCx.js → registry-layout-DXh--Ctx.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Aj03mUWl.js → required-auth-layout-RV8D4BS5.js} +1 -1
- package/dist/client/assets/{reset-password-DaTq0ZPl.js → reset-password-BMtkWtLN.js} +1 -1
- package/dist/client/assets/{roles-BevJu7Hb.js → roles-Cu1HtilV.js} +1 -1
- package/dist/client/assets/{scroll-area-Dlh0OJL1.js → scroll-area-CV3e2fLD.js} +1 -1
- package/dist/client/assets/{search-input-BbuJZtoW.js → search-input-CbWJaisp.js} +1 -1
- package/dist/client/assets/{select-BkJAPRFR.js → select-BNR6YSaM.js} +1 -1
- package/dist/client/assets/{select-model-Cx6hCHLC.js → select-model-CpSDRQob.js} +1 -1
- package/dist/client/assets/{settings-layout-BBbpwWqq.js → settings-layout-C-BNaFF6.js} +1 -1
- package/dist/client/assets/{settings-section-OhWt9Ooj.js → settings-section-BFYWADTj.js} +1 -1
- package/dist/client/assets/{shell-layout-CwAongAC.js → shell-layout-B81nbNNu.js} +1 -1
- package/dist/client/assets/{skeleton-BkdIXnLT.js → skeleton-BcUEgjSY.js} +1 -1
- package/dist/client/assets/{sso-BpRBatM1.js → sso-BBUY-MCm.js} +1 -1
- package/dist/client/assets/{store-CE6jKSPr.js → store-WOpWwK_Y.js} +1 -1
- package/dist/client/assets/store-registry-D6Fj-htY.js +2 -0
- package/dist/client/assets/{switch-Bipu3FI7.js → switch-D4ose26R.js} +1 -1
- package/dist/client/assets/{table-Bk_qf725.js → table-DSn9HnbO.js} +1 -1
- package/dist/client/assets/{tabs-BZ0uT4sS.js → tabs-DGhvVWfp.js} +1 -1
- package/dist/client/assets/{task-status-DiRItLYw.js → task-status-ClsSHWqn.js} +1 -1
- package/dist/client/assets/{textarea-BrWSFj_2.js → textarea-BjUuyph-.js} +1 -1
- package/dist/client/assets/{toggle-group-CG-UehNQ.js → toggle-group-DsS9JBq7.js} +1 -1
- package/dist/client/assets/{tools-list-BRI0XzAw.js → tools-list-Bs_cdsww.js} +1 -1
- package/dist/client/assets/{tooltip-DKSC_TlS.js → tooltip-Bo9taUEe.js} +1 -1
- package/dist/client/assets/{types-ClrLgxxx.js → types-BuGRX8kV.js} +1 -1
- package/dist/client/assets/{use-ai-providers-DeSA23rL.js → use-ai-providers-BIiiUYbr.js} +1 -1
- package/dist/client/assets/{use-collections-P_xycvTV.js → use-collections-Dn6M4xty.js} +1 -1
- package/dist/client/assets/{use-connection-BPL4_0km.js → use-connection-CHMNg8na.js} +1 -1
- package/dist/client/assets/{use-copy-CTq_kAqD.js → use-copy-BQRsHq5p.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-D1V6z6nu.js → use-create-virtual-mcp-CA-saUXt.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-BN0dAXmt.js → use-debounced-autosave-JBt9gs6I.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-FPrAaowc.js → use-decopilot-events-M1xI3bmE.js} +1 -1
- package/dist/client/assets/{use-delete-connection-BnyXIIOY.js → use-delete-connection-n0Lzneey.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-CRwUMH1o.js → use-infinite-scroll-Culgd2S6.js} +1 -1
- package/dist/client/assets/{use-list-state-41gWh47f.js → use-list-state-C9Nw5MqH.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BItotVJ3.js → use-mcp-tools-DI96BLC5.js} +1 -1
- package/dist/client/assets/{use-members-CI97myG6.js → use-members-VHDkQ6EX.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-CVA2Amec.js → use-navigate-to-agent-Bt2qz35f.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-C8ofbFUE.js → use-org-auth-client-DtFIoaM_.js} +1 -1
- package/dist/client/assets/{use-org-sso-BxOse5AC.js → use-org-sso-D-lyKVWd.js} +1 -1
- package/dist/client/assets/{use-organization-roles-5CJlDHYt.js → use-organization-roles-CWUEcGZv.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DkdX8Pu1.js → use-organization-settings-DIRe4_4X.js} +1 -1
- package/dist/client/assets/{use-registry-connections-BOLgJOOJ.js → use-registry-connections-DQxUdfb_.js} +1 -1
- package/dist/client/assets/{use-status-sounds-C2j9qKjC.js → use-status-sounds-m1a3znss.js} +1 -1
- package/dist/client/assets/{use-tasks-B1tiIeuc.js → use-tasks-_o5ReDjx.js} +1 -1
- package/dist/client/assets/{use-view-mode-ZXMMFhU_.js → use-view-mode-6IIIMDrq.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BAEgLpb5.js → use-virtual-mcp-CCHAGkyS.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-CLIUsnnt.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-C7imnQ20.js +1 -0
- package/dist/client/assets/{user-CHucb2Kt.js → user-CRtM2HfA.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DR7xk3lS.js → view-mode-toggle-DXuwWpcV.js} +1 -1
- package/dist/client/assets/{workflow-BYv_2auF.js → workflow-BmpdL636.js} +1 -1
- package/dist/client/assets/workflow-detail-CF7Wua1l.js +1 -0
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +4 -4
- package/dist/server/node_modules/mimic-fn/index.d.ts +54 -0
- package/dist/server/node_modules/mimic-fn/index.js +13 -0
- package/dist/server/node_modules/mimic-fn/license +9 -0
- package/dist/server/node_modules/mimic-fn/package.json +42 -0
- package/dist/server/node_modules/mimic-fn/readme.md +69 -0
- package/dist/server/node_modules/pg/LICENSE +21 -0
- package/dist/server/node_modules/pg/README.md +95 -0
- package/dist/server/node_modules/pg/esm/index.mjs +20 -0
- package/dist/server/node_modules/pg/lib/client.js +743 -0
- package/dist/server/node_modules/pg/lib/connection-parameters.js +171 -0
- package/dist/server/node_modules/pg/lib/connection.js +221 -0
- package/dist/server/node_modules/pg/lib/crypto/cert-signatures.js +122 -0
- package/dist/server/node_modules/pg/lib/crypto/sasl.js +212 -0
- package/dist/server/node_modules/pg/lib/crypto/utils-legacy.js +43 -0
- package/dist/server/node_modules/pg/lib/crypto/utils-webcrypto.js +89 -0
- package/dist/server/node_modules/pg/lib/crypto/utils.js +9 -0
- package/dist/server/node_modules/pg/lib/defaults.js +91 -0
- package/dist/server/node_modules/pg/lib/index.js +73 -0
- package/dist/server/node_modules/pg/lib/native/client.js +323 -0
- package/dist/server/node_modules/pg/lib/native/index.js +2 -0
- package/dist/server/node_modules/pg/lib/native/query.js +165 -0
- package/dist/server/node_modules/pg/lib/query.js +252 -0
- package/dist/server/node_modules/pg/lib/result.js +109 -0
- package/dist/server/node_modules/pg/lib/stream.js +83 -0
- package/dist/server/node_modules/pg/lib/type-overrides.js +35 -0
- package/dist/server/node_modules/pg/lib/utils.js +217 -0
- package/dist/server/node_modules/pg/package.json +76 -0
- package/dist/server/node_modules/postgres-interval/index.d.ts +20 -0
- package/dist/server/node_modules/postgres-interval/index.js +125 -0
- package/dist/server/node_modules/postgres-interval/license +21 -0
- package/dist/server/node_modules/postgres-interval/package.json +36 -0
- package/dist/server/node_modules/postgres-interval/readme.md +48 -0
- package/dist/server/node_modules/split2/LICENSE +13 -0
- package/dist/server/node_modules/split2/README.md +85 -0
- package/dist/server/node_modules/split2/bench.js +27 -0
- package/dist/server/node_modules/split2/index.js +141 -0
- package/dist/server/node_modules/split2/package.json +39 -0
- package/dist/server/node_modules/split2/test.js +409 -0
- package/dist/server/node_modules/xtend/.jshintrc +30 -0
- package/dist/server/node_modules/xtend/LICENSE +20 -0
- package/dist/server/node_modules/xtend/README.md +32 -0
- package/dist/server/node_modules/xtend/immutable.js +19 -0
- package/dist/server/node_modules/xtend/mutable.js +17 -0
- package/dist/server/node_modules/xtend/package.json +55 -0
- package/dist/server/node_modules/xtend/test.js +103 -0
- package/dist/server/server.js +3 -3
- package/package.json +1 -1
- package/dist/client/assets/ai-providers-CHwiNXP4.js +0 -1
- package/dist/client/assets/brand-context-BJ_Ok-7-.js +0 -1
- package/dist/client/assets/general-e5vvtodI.js +0 -1
- package/dist/client/assets/index-7mXC8lS4.js +0 -1
- package/dist/client/assets/index-BdxUoNpQ.js +0 -182
- package/dist/client/assets/lean-canvas-recruit-modal-BXaOF7Ji.js +0 -139
- package/dist/client/assets/profile-DvNhWfFq.js +0 -1
- package/dist/client/assets/registry-BZEongCI.js +0 -2
- package/dist/client/assets/store-registry-MTXbjb_8.js +0 -2
- package/dist/client/assets/useInfiniteQuery-Y9Nb1sum.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CIGmGEj7.js +0 -1
- package/dist/client/assets/workflow-detail-D3A--f-7.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -6691,7 +6691,7 @@ Caused by: ${Y.stack}`}};Zl=class Zl extends u7{constructor(X,Y){super(X,Y);this
|
|
|
6691
6691
|
ORDER BY d.created_at ASC
|
|
6692
6692
|
LIMIT ${X}
|
|
6693
6693
|
FOR UPDATE OF d SKIP LOCKED
|
|
6694
|
-
)`).where("status","=","pending").returning(["id"]).execute()).map(($)=>$.id);if(Q.length===0)return[];return(await this.db.selectFrom("event_deliveries as d").innerJoin("events as e","e.id","d.event_id").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select(["d.id as delivery_id","d.event_id","d.subscription_id","d.status as delivery_status","d.attempts as delivery_attempts","d.last_error as delivery_last_error","d.delivered_at","d.next_retry_at as delivery_next_retry_at","d.created_at as delivery_created_at","e.organization_id","e.type","e.source","e.specversion","e.subject","e.time","e.datacontenttype","e.dataschema","e.data","e.cron","e.status as event_status","e.attempts as event_attempts","e.last_error as event_last_error","e.next_retry_at","e.created_at as event_created_at","e.updated_at as event_updated_at","s.connection_id","s.publisher","s.event_type","s.filter","s.enabled","s.created_at as subscription_created_at","s.updated_at as subscription_updated_at"]).where("d.id","in",Q).where("d.status","=","processing").execute()).map(($)=>({delivery:{id:$.delivery_id,eventId:$.event_id,subscriptionId:$.subscription_id,status:$.delivery_status,attempts:$.delivery_attempts,lastError:$.delivery_last_error,deliveredAt:$.delivered_at,nextRetryAt:$.delivery_next_retry_at,createdAt:$.delivery_created_at},event:{id:$.event_id,organizationId:$.organization_id,type:$.type,source:$.source,specversion:$.specversion,subject:$.subject,time:$.time,datacontenttype:$.datacontenttype,dataschema:$.dataschema,data:$.data?JSON.parse($.data):null,cron:$.cron,status:$.event_status,attempts:$.event_attempts,lastError:$.event_last_error,nextRetryAt:$.next_retry_at,createdAt:$.event_created_at,updatedAt:$.event_updated_at},subscription:{id:$.subscription_id,organizationId:$.organization_id,connectionId:$.connection_id,publisher:$.publisher,eventType:$.event_type,filter:$.filter,enabled:Boolean($.enabled),createdAt:$.subscription_created_at,updatedAt:$.subscription_updated_at}}))}async markDeliveriesDelivered(X){if(X.length===0)return;let Y=new Date().toISOString();await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:Y}).where("id","in",X).execute()}async markDeliveriesPermanentlyFailed(X,Y){if(X.length===0)return;await this.db.updateTable("event_deliveries").set({status:"failed",last_error:Y,next_retry_at:null}).where("id","in",X).execute()}async markDeliveriesFailed(X,Y,G=20,Q=1000,J=3600000){if(X.length===0)return;for(let $ of X){let Z=await this.db.selectFrom("event_deliveries").select(["attempts"]).where("id","=",$).executeTakeFirst();if(!Z)continue;let W=Z.attempts+1;if(W>=G)await this.db.updateTable("event_deliveries").set({attempts:W,last_error:Y,status:"failed",next_retry_at:null}).where("id","=",$).execute();else{let K=Math.min(Q*Math.pow(2,W-1),J),H=new Date(Date.now()+K).toISOString();await this.db.updateTable("event_deliveries").set({attempts:W,last_error:Y,status:"pending",next_retry_at:H}).where("id","=",$).execute()}}}async updateEventStatus(X){let Y=await this.db.selectFrom("event_deliveries").select(["status"]).where("event_id","=",X).execute();if(Y.length===0)return;let G=Y.every(($)=>$.status==="delivered"),Q=Y.some(($)=>$.status==="failed"),J=Y.some(($)=>$.status==="pending"||$.status==="processing");if(G)await this.db.updateTable("events").set({status:"delivered",updated_at:new Date().toISOString()}).where("id","=",X).execute();else if(Q&&!J)await this.db.updateTable("events").set({status:"failed",updated_at:new Date().toISOString()}).where("id","=",X).execute()}async resetStuckDeliveries(){if((await p1`SELECT pg_try_advisory_lock(hashtext('event_bus_reset_stuck')) as locked`.execute(this.db)).rows[0]?.locked!==!0)return 0;try{let G=await this.db.updateTable("event_deliveries").set({status:"pending"}).where("status","=","processing").executeTakeFirst();return Number(G.numUpdatedRows??0)}finally{await p1`SELECT pg_advisory_unlock(hashtext('event_bus_reset_stuck'))`.execute(this.db)}}async getEvent(X,Y){let G=await this.db.selectFrom("events").selectAll().where("id","=",X).where("organization_id","=",Y).executeTakeFirst();if(!G)return null;return{id:G.id,organizationId:G.organization_id,type:G.type,source:G.source,specversion:G.specversion,subject:G.subject,time:G.time,datacontenttype:G.datacontenttype,dataschema:G.dataschema,data:G.data?JSON.parse(G.data):null,cron:G.cron,status:G.status,attempts:G.attempts,lastError:G.last_error,nextRetryAt:G.next_retry_at,createdAt:G.created_at,updatedAt:G.updated_at}}async findActiveCronEvent(X,Y,G,Q){let J=await this.db.selectFrom("events").selectAll().where("organization_id","=",X).where("type","=",Y).where("source","=",G).where("cron","=",Q).where("status","in",["pending","processing","delivered"]).orderBy("created_at","desc").executeTakeFirst();if(!J)return null;return{id:J.id,organizationId:J.organization_id,type:J.type,source:J.source,specversion:J.specversion,subject:J.subject,time:J.time,datacontenttype:J.datacontenttype,dataschema:J.dataschema,data:J.data?JSON.parse(J.data):null,cron:J.cron,status:J.status,attempts:J.attempts,lastError:J.last_error,nextRetryAt:J.next_retry_at,createdAt:J.created_at,updatedAt:J.updated_at}}async findOrphanedCronEvents(){return(await this.db.selectFrom("events").selectAll().where("cron","is not",null).where("status","=","delivered").where((Y)=>Y.not(Y.exists(Y.selectFrom("event_deliveries").select("id").whereRef("event_deliveries.event_id","=","events.id").where("event_deliveries.status","in",["pending","processing"])))).execute()).map((Y)=>({id:Y.id,organizationId:Y.organization_id,type:Y.type,source:Y.source,specversion:Y.specversion,subject:Y.subject,time:Y.time,datacontenttype:Y.datacontenttype,dataschema:Y.dataschema,data:Y.data?JSON.parse(Y.data):null,cron:Y.cron,status:Y.status,attempts:Y.attempts,lastError:Y.last_error,nextRetryAt:Y.next_retry_at,createdAt:Y.created_at,updatedAt:Y.updated_at}))}async cancelEvent(X,Y,G){let Q=await this.db.updateTable("events").set({status:"failed",last_error:"Cancelled by publisher",updated_at:new Date().toISOString()}).where("id","=",X).where("organization_id","=",Y).where("source","=",G).where("status","in",["pending","processing"]).executeTakeFirst();if((Q.numUpdatedRows??0n)>0n)await this.db.updateTable("event_deliveries").set({status:"failed",last_error:"Event cancelled by publisher"}).where("event_id","=",X).where("status","in",["pending","processing"]).execute();return{success:(Q.numUpdatedRows??0n)>0n}}async scheduleRetryWithoutAttemptIncrement(X,Y){if(X.length===0)return;let G=new Date(Date.now()+Y).toISOString();await this.db.updateTable("event_deliveries").set({status:"pending",next_retry_at:G}).where("id","in",X).execute()}async ackDelivery(X,Y,G){if(!await this.db.selectFrom("events").select(["id"]).where("id","=",X).where("organization_id","=",Y).executeTakeFirst())return{success:!1};let $=((await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:new Date().toISOString()}).where("event_id","=",X).where("status","in",["pending","processing"]).where((Z)=>Z.exists(Z.selectFrom("event_subscriptions").select("id").whereRef("event_subscriptions.id","=","event_deliveries.subscription_id").where("event_subscriptions.connection_id","=",G).where("event_subscriptions.organization_id","=",Y))).executeTakeFirst()).numUpdatedRows??0n)>0n;if($)await this.updateEventStatus(X);return{success:$}}async syncSubscriptions(X){let{organizationId:Y,connectionId:G,subscriptions:Q}=X,J=(P,q)=>{return`${P}::${q??""}`},$=await this.listSubscriptions(Y,G),Z=new Map;for(let P of $)Z.set(J(P.eventType,P.publisher),P);let W=new Map;for(let P of Q)W.set(J(P.eventType,P.publisher),P);let K=new Date().toISOString(),H=[],U=[],B=[],N=0;for(let[P,q]of W){let V=Z.get(P);if(!V)H.push({id:crypto.randomUUID(),organization_id:Y,connection_id:G,event_type:q.eventType,publisher:q.publisher??null,filter:q.filter??null,enabled:!0,created_at:K,updated_at:K});else{let M=V.filter??null,j=q.filter??null;if(M!==j)U.push({id:V.id,filter:j});else N++}}for(let[P,q]of Z)if(!W.has(P))B.push(q.id);if(H.length>0)await this.db.insertInto("event_subscriptions").values(H).execute();if(U.length>0)await Promise.all(U.map((P)=>this.db.updateTable("event_subscriptions").set({filter:P.filter,updated_at:K}).where("id","=",P.id).execute()));if(B.length>0)await this.db.deleteFrom("event_subscriptions").where("id","in",B).execute();let O=H.length,z=U.length,w=B.length,E=await this.listSubscriptions(Y,G);return{created:O,updated:z,deleted:w,unchanged:N,subscriptions:E}}}function D08(X){return new z08(X)}var w08=D(()=>{$7()});class L08{listeners=new Map;totalCount=0;strategy=null;started=!1;async start(X){if(this.started){if(!X)return;await this.stop()}this.strategy=X,await this.strategy.start((Y,G)=>this.localEmit(Y,G)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add(X){if(this.totalCount>=500)return console.warn("[SSEHub] Total connection limit reached (500)"),null;let Y=this.listeners.get(X.organizationId);if(!Y)Y=new Map,this.listeners.set(X.organizationId,Y);if(Y.size>=50)return console.warn(`[SSEHub] Per-org connection limit reached for ${X.organizationId} (50)`),null;return Y.set(X.id,X),this.totalCount++,X.id}remove(X,Y){let G=this.listeners.get(X);if(!G)return;if(G.delete(Y)){if(this.totalCount--,G.size===0)this.listeners.delete(X)}}emit(X,Y){if(this.strategy)this.strategy.broadcast(X,Y);else this.localEmit(X,Y)}countForOrg(X){return this.listeners.get(X)?.size??0}get count(){return this.totalCount}localEmit(X,Y){let G=this.listeners.get(X);if(!G||G.size===0)return;for(let Q of G.values()){if(Q.typePatterns&&!Vi5(Y.type,Q.typePatterns))continue;try{Q.push(Y)}catch{this.remove(X,Q.id)}}}}function Vi5(X,Y){for(let G of Y){if(G===X)return!0;if(G.endsWith(".*")){let Q=G.slice(0,-1);if(X.startsWith(Q))return!0}}return!1}function E08(X){return{id:X.id,type:X.type,source:X.source,subject:X.subject,data:X.data?Mi5(X.data):void 0,time:X.time}}function Mi5(X){if(typeof X==="string")try{return JSON.parse(X)}catch{return X}return X}var g3;var gu1=D(()=>{g3=new L08});function P08(X){if(typeof X==="object"&&X!==null){let Q=X,J=Q.status??Q.code;if(typeof J==="number"&&Ri5.has(J))return!0}let Y=X instanceof Error?X.message:typeof X==="string"?X:"";if(!Y)return!1;let G=Y.toLowerCase();if(/\b401\b/.test(G))return!0;return Si5.some((Q)=>G.includes(Q))}function q08(X){let Y=X instanceof Error?X.message:typeof X==="string"?X:"";if(!Y)return!1;let G=Y.toLowerCase();return ki5.some((Q)=>G.includes(Q))}var Ri5,Si5,ki5,JJ1;var dR0=D(()=>{Ri5=new Set([401]),Si5=["unauthorized","invalid_token","invalid api key","api key required","api-key required"],ki5=["tool on_events not found","tool not found"];JJ1=class JJ1 extends Error{constructor(X){super(X);this.name="PermanentDeliveryError"}}});var uu1;var cR0=D(()=>{uu1={pollIntervalMs:5000,batchSize:100,maxAttempts:20,retryDelayMs:1000,maxDelayMs:3600000}});function Ci5(X){return X.endsWith("_self")}function vi5(X){return X.slice(0,-5)}function A08(){return async(X,Y)=>{try{if(Ci5(X)){let Z=vi5(X),W=await wU.create(),K={organizationId:Z,connectionId:X,publish:async(B,N,O,z)=>{await W.eventBus.publish(Z,X,{type:B,subject:N,data:O,deliverAt:z?.deliverAt})},createMCPProxy:async(B)=>{let N={...W,getOrCreateClient:Ur()},O=await HP0(B,N);return{callTool:async(z,w,E)=>{let P=await O.callTool(z,w,E);return{content:P.content,structuredContent:P.structuredContent,isError:P.isError}},close:()=>O.close()}}},H=Y.filter((B)=>B.type==="registry.monitor.scheduled");if(H.length>0){let{parseMonitorConfig:B}=await Promise.resolve().then(() => (DH(),a_6)),N=await K.createMCPProxy(X);try{for(let O of H){let z=O.data&&typeof O.data==="object"?O.data:{},w=z.config&&typeof z.config==="object"?z.config:{},E=B(w);await N.callTool({name:"REGISTRY_MONITOR_RUN_START",arguments:{config:E}})}}finally{await N.close()}if(H.length===Y.length)return{success:!0}}if(await l36(Y,K))return{success:!0}}let G=await wU.create(),Q=await HP0(X,G),$=await GL0.forClient(w71(Q)).ON_EVENTS({events:Y});return{success:$.success,error:$.error,retryAfter:$.retryAfter,results:$.results}}catch(G){let Q=G instanceof Error?G.message:String(G);if(console.error(`[EventBus] Failed to notify connection ${X}:`,Q),P08(G)||q08(G))throw new JJ1(Q);return{success:!1,error:Q}}}}var T08=D(()=>{TG1();qA1();Yj1();sX1();oI1();dR0()});function I08(X){return{specversion:"1.0",id:X.id,source:X.source,type:X.type,time:X.time,subject:X.subject??void 0,datacontenttype:X.datacontenttype,dataschema:X.dataschema??void 0,data:X.data??void 0}}function _i5(X){let Y=new Map;for(let Q of X){let J=Q.subscription.connectionId,$=Y.get(J);if($){if($.deliveryIds.push(Q.delivery.id),!$.seenEventIds.has(Q.event.id))$.seenEventIds.add(Q.event.id),$.events.push(I08(Q.event))}else Y.set(J,{connectionId:Q.subscription.connectionId,deliveryIds:[Q.delivery.id],events:[I08(Q.event)],seenEventIds:new Set([Q.event.id])})}let G=new Map;for(let[Q,J]of Y)G.set(Q,{connectionId:J.connectionId,deliveryIds:J.deliveryIds,events:J.events});return G}class iR0{storage;notifySubscriber;running=!1;processing=!1;pendingNotify=!1;config;eventTriggerEngine;constructor(X,Y,G){this.storage=X;this.notifySubscriber=G??A08(),this.config={...uu1,...Y}}setEventTriggerEngine(X){this.eventTriggerEngine=X}async start(){if(this.running)return;await this.storage.resetStuckDeliveries();let X=await this.storage.findOrphanedCronEvents();for(let Y of X)await this.scheduleNextCronDelivery(Y);this.running=!0}stop(){this.running=!1}isRunning(){return this.running}async processNow(){if(!this.running)return;if(this.processing){this.pendingNotify=!0;return}this.processing=!0;try{do this.pendingNotify=!1,await this.processEvents();while(this.pendingNotify)}catch(X){console.error("[EventBus] Error processing events:",X)}finally{this.processing=!1}}async processEvents(){let X=await this.storage.claimPendingDeliveries(this.config.batchSize);if(X.length===0)return;let Y=_i5(X),G=await Promise.allSettled(Array.from(Y.entries()).map(async([$,Z])=>{let W=new Set;try{let H=await this.notifySubscriber(Z.connectionId,Z.events);if(H.results&&Object.keys(H.results).length>0)await this.processPerEventResults(Z,H);else if(H.success)await this.storage.markDeliveriesDelivered(Z.deliveryIds);else if(H.retryAfter&&H.retryAfter>0)await this.storage.scheduleRetryWithoutAttemptIncrement(Z.deliveryIds,H.retryAfter);else await this.storage.markDeliveriesFailed(Z.deliveryIds,H.error||"Subscriber returned success=false",this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}catch(H){if(H instanceof JJ1){await this.storage.markDeliveriesPermanentlyFailed(Z.deliveryIds,H.message);for(let U of Z.events)W.add(U.id)}else{let U=H instanceof Error?H.message:String(H);console.error(`[EventBus] Failed to notify subscription ${$}:`,U),await this.storage.markDeliveriesFailed(Z.deliveryIds,U,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}let K=new Set;for(let H of X)if(Z.deliveryIds.includes(H.delivery.id))K.add(H.event.id);return{eventIds:K,permanentlyFailed:W}})),Q=new Set,J=new Set;for(let $ of G)if($.status==="fulfilled"){for(let Z of $.value.eventIds)Q.add(Z);for(let Z of $.value.permanentlyFailed)J.add(Z)}for(let $ of Q)try{await this.storage.updateEventStatus($);let Z=X.find((W)=>W.event.id===$)?.event;if(Z?.cron&&!J.has($))await this.scheduleNextCronDelivery(Z)}catch(Z){console.error(`[EventBus] Failed to update event status ${$}:`,Z)}if(this.eventTriggerEngine){let $=new Set,Z=[];for(let W of X){if(W.delivery.attempts>0)continue;if(!$.has(W.event.id))$.add(W.event.id),Z.push({source:W.event.source,type:W.event.type,data:W.event.data,organizationId:W.event.organizationId})}if(Z.length>0)this.eventTriggerEngine.notifyEvents(Z)}}async processPerEventResults(X,Y){let G=[],Q=new Map,J=[],$=new Map;for(let Z=0;Z<X.events.length;Z++){let W=X.events?.[Z];if(!W)continue;let K=X.deliveryIds?.[Z];if(!K)continue;$.set(W.id,K)}for(let Z of X.events){let W=$.get(Z.id);if(!W)continue;let K=Y.results?.[Z.id];if(K)if(K.success)G.push(W);else if(K.retryAfter&&K.retryAfter>0){let H=Q.get(K.retryAfter)||[];H.push(W),Q.set(K.retryAfter,H)}else J.push({deliveryId:W,error:K.error||"Event processing failed"});else if(Y.success)G.push(W);else if(Y.retryAfter&&Y.retryAfter>0){let H=Q.get(Y.retryAfter)||[];H.push(W),Q.set(Y.retryAfter,H)}else J.push({deliveryId:W,error:Y.error||"Batch processing failed"})}if(G.length>0)await this.storage.markDeliveriesDelivered(G);for(let[Z,W]of Q)await this.storage.scheduleRetryWithoutAttemptIncrement(W,Z);if(J.length>0){let Z=new Map;for(let{deliveryId:W,error:K}of J){let H=Z.get(K)||[];H.push(W),Z.set(K,H)}for(let[W,K]of Z)await this.storage.markDeliveriesFailed(K,W,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}async scheduleNextCronDelivery(X){if(!X.cron)return;try{let G=new Uw(X.cron,{timezone:"UTC"}).nextRun();if(!G)return;let Q=G.toISOString(),J=await this.storage.getMatchingSubscriptions(X);if(J.length===0)return;await this.storage.createDeliveries(X.id,J.map(($)=>$.id),Q)}catch(Y){console.error(`[EventBus] Failed to schedule next cron delivery for event ${X.id}:`,Y)}}}var j08=D(()=>{dG1();dR0();cR0();T08()});class pR0{storage;worker;notifyStrategy;running=!1;constructor(X){this.storage=X.storage,this.notifyStrategy=X.notifyStrategy,this.worker=new iR0(this.storage,X.config)}setEventTriggerEngine(X){this.worker.setEventTriggerEngine(X)}async publish(X,Y,G){if(G.deliverAt&&G.cron)throw Error("Cannot set both deliverAt and cron. Use one or the other.");let Q;if(G.cron){try{let U=new Uw(G.cron,{timezone:"UTC"}).nextRun();if(!U)throw Error("Cron expression does not produce a next run time");Q=U.toISOString()}catch(H){throw Error(`Invalid cron expression: ${H instanceof Error?H.message:String(H)}`)}let K=await this.storage.findActiveCronEvent(X,G.type,Y,G.cron);if(K)return K}let J=crypto.randomUUID(),$=new Date().toISOString(),Z=await this.storage.publishEvent({id:J,organizationId:X,type:G.type,source:Y,subject:G.subject,time:$,data:G.data,cron:G.cron});g3.emit(X,E08(Z));let W=await this.storage.getMatchingSubscriptions(Z);if(W.length>0){let K=G.deliverAt??Q;await this.storage.createDeliveries(J,W.map((U)=>U.id),K);let H=K!=null&&new Date(K).getTime()<=Date.now();if(this.notifyStrategy&&(!K||H))await this.notifyStrategy.notify(J).catch((U)=>{console.warn("[EventBus] Notify failed (non-critical):",U)})}return Z}async subscribe(X,Y){return this.storage.subscribe({id:crypto.randomUUID(),organizationId:X,connectionId:Y.connectionId,publisher:Y.publisher,eventType:Y.eventType,filter:Y.filter})}async unsubscribe(X,Y){return this.storage.unsubscribe(Y,X)}async listSubscriptions(X,Y){return this.storage.listSubscriptions(X,Y)}async getSubscription(X,Y){return this.storage.getSubscription(Y,X)}async getEvent(X,Y){return this.storage.getEvent(Y,X)}async cancelEvent(X,Y,G){return this.storage.cancelEvent(Y,X,G)}async ackEvent(X,Y,G){return this.storage.ackDelivery(Y,X,G)}async syncSubscriptions(X,Y){return this.storage.syncSubscriptions({organizationId:X,...Y})}async start(){if(this.running)return;if(this.running=!0,await this.worker.start(),this.notifyStrategy)await this.notifyStrategy.start(()=>{this.worker.processNow().catch((X)=>{console.error("[EventBus] Error processing after notify:",X)})});await this.worker.processNow().catch((X)=>{console.error("[EventBus] Error processing pending events on startup:",X)})}async stop(){if(!this.running)return;if(this.running=!1,this.worker.stop(),this.notifyStrategy)try{await this.notifyStrategy.stop()}catch(X){console.error("[EventBus] Error stopping notify strategy:",X)}}isRunning(){return this.running}}var V08=D(()=>{dG1();gu1();j08()});class nR0{options;sub=null;onNotify=null;encoder=new TextEncoder;constructor(X){this.options=X}async start(X){if(this.sub)return;if(X)this.onNotify=X;if(!this.onNotify)return;let Y=this.options.getConnection();if(!Y)return;this.sub=Y.subscribe("mesh.events.notify"),(async()=>{for await(let G of this.sub)this.onNotify?.()})().catch((G)=>{console.error("[NatsNotify] Subscription error:",G)})}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onNotify=null}async notify(X){try{let Y=this.options.getConnection();if(!Y)return;Y.publish("mesh.events.notify",this.encoder.encode(X))}catch(Y){console.warn("[NatsNotify] Publish failed (non-critical):",Y)}}}class tR0{options;sub=null;localEmit=null;originId=crypto.randomUUID();encoder=new TextEncoder;constructor(X){this.options=X}async start(X){if(X)this.localEmit=X;if(this.sub)return;if(!this.localEmit)return;let Y=this.options.getConnection();if(!Y)return;this.sub=Y.subscribe("mesh.sse.broadcast");let G=new TextDecoder;(async()=>{for await(let Q of this.sub)try{let J=JSON.parse(G.decode(Q.data));if(typeof J?.originId!=="string"||typeof J?.organizationId!=="string"||typeof J?.event?.id!=="string"||typeof J?.event?.type!=="string")continue;if(J.originId===this.originId)continue;this.localEmit?.(J.organizationId,J.event)}catch{}})().catch((Q)=>{console.error("[NatsSSEBroadcast] Subscription error:",Q)})}broadcast(X,Y){this.localEmit?.(X,Y);let G={originId:this.originId,organizationId:X,event:Y};try{let Q=this.options.getConnection();if(!Q)return;Q.publish("mesh.sse.broadcast",this.encoder.encode(JSON.stringify(G)))}catch(Q){console.warn("[NatsSSEBroadcast] Publish failed (non-critical):",Q)}}async stop(){this.sub?.unsubscribe(),this.sub=null,this.localEmit=null}}function M08(...X){return{async start(Y){await Promise.all(X.map((G)=>G.start(Y)))},async stop(){await Promise.all(X.map((Y)=>Y.stop().catch((G)=>{console.error("[NotifyStrategy] Error stopping strategy:",G)})))},async notify(Y){await Promise.all(X.map((G)=>G.notify(Y).catch((Q)=>{console.warn("[NotifyStrategy] Notify failed (non-critical):",Q)})))}}}class rR0{intervalMs;timer=null;onNotify=null;constructor(X){this.intervalMs=X}async start(X){if(this.timer)return;this.onNotify=X,this.scheduleNext()}async stop(){if(this.timer)clearTimeout(this.timer),this.timer=null;this.onNotify=null}async notify(X){if(this.onNotify)this.onNotify()}scheduleNext(){this.timer=setTimeout(()=>{if(this.onNotify)this.onNotify();if(this.timer)this.scheduleNext()},this.intervalMs)}}async function R08(X,Y,G=5){for(let Q=1;Q<=G;Q++)try{await Y();return}catch(J){if(Q===G){console.error(`${X} Deferred start failed:`,J);return}let $=Math.min(1000*2**(Q-1),1e4);console.warn(`${X} Start attempt ${Q}/${G} failed, retrying in ${$}ms`),await new Promise((Z)=>setTimeout(Z,$))}}function S08(X,Y,G){let Q=D08(X.db),J=G?.pollIntervalMs??uu1.pollIntervalMs,$=new nR0({getConnection:()=>Y.getConnection()}),Z=M08(new rR0(J),$),W=new tR0({getConnection:()=>Y.getConnection()});return g3.start(W).catch((K)=>{console.error("[SSEHub] Failed to start broadcast strategy:",K)}),Y.onReady(()=>{R08("[NatsNotify]",()=>$.start()),R08("[NatsSSEBroadcast]",()=>W.start())}),new pR0({storage:Q,config:G,notifyStrategy:Z})}var aR0=D(()=>{w08();V08();cR0();gu1();gu1()});var k08=()=>{};var oR0=()=>{};var C08=()=>{};var fi5,cCG;var v08=D(()=>{k08();oR0();qE();C08();fi5={br:".br",zstd:".zst",gzip:".gz"},cCG=Object.keys(fi5)});var _08=D(()=>{v08()});var f08=()=>{};var b08=D(()=>{f08()});var y08=()=>{};var h08=D(()=>{rZ0()});var sR0=D(()=>{AE();h08()});var eR0="x-hono-disable-ssg",HvG;var XS0=D(()=>{sR0();HvG=(()=>{try{return new Response("SSG is disabled",{status:404,headers:{[eR0]:"true"}})}catch{return null}})()});var x08=D(()=>{HD1()});var YS0=D(()=>{x08()});var g08=D(()=>{b08();y08();oR0();XS0();YS0();sR0()});var u08=D(()=>{XS0();YS0();g08()});var ivG;var l08=D(()=>{u08();({write:ivG}=Bun)});var hi5=class{#X;constructor(X){this.#X=X,this.raw=X.raw,this.url=X.url?new URL(X.url):null,this.protocol=X.protocol??null}send(X,Y){this.#X.send(X,Y??{})}raw;binaryType="arraybuffer";get readyState(){return this.#X.readyState}url;protocol;close(X,Y){this.#X.close(X,Y)}},m08=(X)=>{return(...Y)=>{if(typeof Y[0]==="function"){let[G,Q]=Y;return async function($,Z){let W=await G($),K=await X($,W,Q);if(K)return K;await Z()}}else{let[G,Q,J]=Y;return(async()=>{let $=await X(G,Q,J);if(!$)throw Error("Failed to upgrade WebSocket");return $})()}}};var d08=()=>{};var ZJ1=(X)=>("server"in X.env)?X.env.server:X.env;var lu1=()=>{};var xi5;var c08=D(()=>{d08();lu1();xi5=m08((X,Y)=>{let G=ZJ1(X);if(!G)throw TypeError("env has to include the 2nd argument of fetch.");if(G.upgrade(X.req.raw,{data:{events:Y,url:new URL(X.req.url),protocol:X.req.url}}))return new Response(null);return})});var GS0=(X)=>{let Y=ZJ1(X);if(!Y)throw TypeError("env has to include the 2nd argument of fetch.");if(typeof Y.requestIP!=="function")throw TypeError("server.requestIP is not a function.");let G=Y.requestIP(X.req.raw);if(!G)return{remote:{}};return{remote:{address:G.address,addressType:G.family==="IPv6"||G.family==="IPv4"?G.family:void 0,port:G.port}}};var i08=D(()=>{lu1()});var p08=D(()=>{_08();l08();c08();i08();lu1()});var n08;var t08=D(()=>{n08={google:{name:"Google",icon:"https://assets.decocache.com/webdraw/eb7480aa-a68b-4ce4-98ff-36aa121762a7/google.svg"},github:{name:"GitHub",icon:"https://assets.decocache.com/decocms/e02ce92e-6684-41a6-acfc-432977eb4878/github.png"},microsoft:{name:"Microsoft",icon:"https://assets.decocache.com/mcp/aa6f6e1a-6526-4bca-99cc-82e2ec38b0e4/microsoft.png"}}});var du1={};y6(du1,{waitForSeed:()=>ii5,seedLocalMode:()=>mi5,markSeedComplete:()=>ci5,isLocalMode:()=>Kl,getLocalAdminUser:()=>QS0,getLocalAdminPassword:()=>mu1});import{userInfo as gi5}from"os";async function mu1(){return h4().betterAuthSecret||"local-mode-default"}function r08(){try{return gi5().username||"local"}catch{return"local"}}function ui5(X){return X.charAt(0).toUpperCase()+X.slice(1)}async function li5(){let X=dY(),Y=await X.db.selectFrom("user").select(X.db.fn.countAll().as("count")).executeTakeFirst();return Number(Y?.count??0)===0}async function mi5(){if(!await li5())return!1;let Y=r08(),G=`${Y}@localhost.mesh`,Q=ui5(Y),J=await mu1(),$=await L7.api.signUpEmail({body:{email:G,password:J,name:Q}});if(!$?.user?.id)throw Error("Failed to create local admin user");let Z=$.user.id,W=dY();await W.db.updateTable("user").set({role:"admin"}).where("id","=",Z).execute();let K=`${Y}-local`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),H=`${Q} Local`;return await W.db.updateTable("organization").set({name:H,slug:K}).where("id","in",(U)=>U.selectFrom("member").select("organizationId").where("userId","=",Z)).execute(),!0}async function QS0(){let X=dY(),Y=`${r08()}@localhost.mesh`;return X.db.selectFrom("user").where("email","=",Y).selectAll().executeTakeFirst()}function Kl(){return h4().localMode}function ci5(){a08()}function ii5(){return di5}var a08,di5;var va=D(()=>{MP();e5();$M();di5=new Promise((X)=>{if(a08=X,!Kl())X()})});function o08(){let X=Object.keys(i9.socialProviders??{}),Y=X.length>0,G=X.map((J)=>({name:J,icon:n08[J].icon})),Q=h4().localMode;return{emailAndPassword:{enabled:i9.emailAndPassword?.enabled??!1},magicLink:{enabled:i9.magicLinkConfig?.enabled??!1},emailOtp:{enabled:i9.emailOtpConfig?.enabled??!1},resetPassword:{enabled:xu1},socialProviders:{enabled:Y,providers:G},sso:i9.ssoConfig?{enabled:!0,providerId:i9.ssoConfig.providerId}:{enabled:!1},stdioEnabled:Q,localMode:Kl()}}var $J1,s08;var JS0=D(()=>{jY();p08();OY();e5();$M();MP();DT0();rE0();t08();va();$J1=new w6;$J1.post("/local-session",async(X)=>{if(!Kl())return X.json({success:!1,error:"Local mode is not active"},403);let Y;try{Y=GS0(X).remote.address}catch{}if(!(Y==="127.0.0.1"||Y==="::1"||Y==="::ffff:127.0.0.1"))return X.json({success:!1,error:"Forbidden"},403);try{let{waitForSeed:Q}=await Promise.resolve().then(() => (va(),du1));await Q();let{auth:J}=await Promise.resolve().then(() => ($M(),N08)),$=await QS0();if(!$)return X.json({success:!1,error:"Local admin user not found"},500);let Z=await mu1();return await J.api.signInEmail({body:{email:$.email,password:Z},asResponse:!0})}catch(Q){return console.error("Failed to create local session:",Q),X.json({success:!1,error:Q instanceof Error?Q.message:"Failed to create local session"},500)}});$J1.get("/domain-lookup",async(X)=>{let Y=await L7.api.getSession({headers:X.req.raw.headers});if(!Y?.user)return X.json({success:!1,error:"Authentication required"},401);if(!Y.user.emailVerified)return X.json({found:!1});let G=Y.user.email?.split("@")[1]?.toLowerCase();if(!G||xq.has(G))return X.json({found:!1});try{let J=await new ED(dY().db).getByDomain(G);if(!J)return X.json({found:!1});let $=await dY().db.selectFrom("organization").select(["name","slug"]).where("id","=",J.organizationId).executeTakeFirst();return X.json({found:!0,autoJoinEnabled:J.autoJoinEnabled,organization:$?{name:$.name,slug:$.slug}:null})}catch(Q){return console.error("[Auth] Domain lookup failed:",Q),X.json({success:!1,error:"Domain lookup failed"},500)}});$J1.post("/domain-join",async(X)=>{let Y=await L7.api.getSession({headers:X.req.raw.headers});if(!Y?.user)return X.json({success:!1,error:"Authentication required"},401);if(!Y.user.emailVerified)return X.json({success:!1,error:"Email must be verified to join"},403);let G=Y.user.email?.split("@")[1]?.toLowerCase();if(!G||xq.has(G))return X.json({success:!1,error:"Generic email domains cannot auto-join"},403);try{let J=await new ED(dY().db).getByDomain(G);if(!J||!J.autoJoinEnabled)return X.json({success:!1,error:"Auto-join is not available for this domain"},403);let $=await dY().db.selectFrom("organization").select(["id","slug"]).where("id","=",J.organizationId).executeTakeFirst();if(!$)return X.json({success:!1,error:"Organization not found"},404);try{await L7.api.addMember({body:{userId:Y.user.id,role:"user",organizationId:$.id}})}catch(Z){if(!(Z instanceof Error?Z.message.toLowerCase():"").includes("already a member"))return console.error("[Auth] Domain join addMember failed:",Z),X.json({success:!1,error:"Failed to join organization"},500)}return A6.capture({distinctId:Y.user.id,event:"organization_domain_joined",groups:{organization:$.id},properties:{organization_id:$.id,organization_slug:$.slug,email_domain:G}}),X.json({success:!0,slug:$.slug})}catch(Q){return A6.captureException(Q,Y.user.id),console.error("[Auth] Domain join failed:",Q),X.json({success:!1,error:"Failed to join organization"},500)}});$J1.post("/domain-setup",async(X)=>{let Y=await L7.api.getSession({headers:X.req.raw.headers});if(!Y?.user)return X.json({success:!1,error:"Authentication required"},401);if(!Y.user.emailVerified)return X.json({success:!1,error:"Email must be verified"},403);let G=Y.user.email?.split("@")[1]?.toLowerCase();if(!G||xq.has(G))return X.json({success:!1,error:"Corporate email required"},403);try{let Q=dY().db,J=new ED(Q),$=await J.getByDomain(G);if($){let N=await Q.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.slug"]).where("member.userId","=",Y.user.id).where("member.organizationId","=",$.organizationId).executeTakeFirst();if(N)return X.json({success:!0,slug:N.slug,alreadyExists:!0});return X.json({success:!1,error:"This domain is already claimed. Ask an admin for an invitation."},403)}let Z=G.split(".")[0]??G,W=Z.charAt(0).toUpperCase()+Z.slice(1),K=Z.toLowerCase().replace(/[^a-z0-9-]/g,""),H=null;for(let O=0;O<3;O++){let z=O===0?"":`-${Math.random().toString(36).slice(2,6)}`,w=O===0?W:`${W}${z}`,E=`${K}${z}`;try{H=await L7.api.createOrganization({body:{name:w,slug:E,userId:Y.user.id}});break}catch(P){if(!(P instanceof Error&&("body"in P)&&P.body?.code==="ORGANIZATION_ALREADY_EXISTS")||O===2)throw P}}if(!H?.id)throw Error("Failed to create organization");let U=H.id;try{await J.setDomain(U,G,!0)}catch(N){if(N instanceof Error&&N.message.includes("already claimed")){try{await L7.api.deleteOrganization({headers:X.req.raw.headers,body:{organizationId:U}})}catch{console.error("[Auth] Failed to clean up orphaned org after domain race:",U)}return X.json({success:!1,error:"This domain was just claimed by another user. Please refresh and try again."},409)}throw N}let B=!1;try{let N=h4().firecrawlApiKey;if(N){let O=await YV1(G,N,W);if(O){let z=new D71(dY().db),w=await z.create(U,O);await z.setDefault(w.id,U),B=!0;let E=O.favicon??O.logo??null,P={};if(O.name!==W)P.name=O.name;if(E)P.logo=E;if(Object.keys(P).length>0)await L7.api.updateOrganization({headers:X.req.raw.headers,body:{organizationId:U,data:P}})}}}catch(N){console.error("[Auth] Brand extraction failed (non-fatal):",N)}return A6.identify({distinctId:Y.user.id,properties:{email:Y.user.email,$set:{email:Y.user.email},$set_once:{first_organization_created_at:new Date().toISOString()}}}),A6.groupIdentify({groupType:"organization",groupKey:U,properties:{name:H.slug??K,slug:H.slug??K,email_domain:G,brand_extracted:B,created_at:new Date().toISOString()}}),A6.capture({distinctId:Y.user.id,event:"organization_created",groups:{organization:U},properties:{organization_id:U,organization_slug:H.slug??K,email_domain:G,brand_extracted:B}}),X.json({success:!0,slug:H.slug??K,brandExtracted:B})}catch(Q){return A6.captureException(Q,Y.user?.id),console.error("[Auth] Domain setup failed:",Q),X.json({success:!1,error:"Failed to set up organization"},500)}});s08=$J1});function pi5(X){X.get("/status",async(Y)=>{let G=Y.get("meshContext");if(!G.auth.user)return Y.json({error:"Authentication required"},401);let Q=G.organization?.id;if(!Q)return Y.json({error:"Organization context required"},400);if(!await $S0(G,G.auth.user.id,Q))return Y.json({error:"Not a member of this organization"},403);let $=await G.storage.orgSsoConfig.getByOrgId(Q);if(!$||!$.enforced)return Y.json({ssoRequired:!1});let Z=await G.storage.orgSsoSessions.isValid(G.auth.user.id,Q);return Y.json({ssoRequired:!0,authenticated:Z,issuer:$.issuer,domain:$.domain})}),X.get("/authorize",async(Y)=>{let G=Y.get("meshContext");if(!G.auth.user)return Y.json({error:"Authentication required"},401);let Q=G.organization?.id;if(!Q)return Y.json({error:"Organization context required"},400);if(!await $S0(G,G.auth.user.id,Q))return Y.json({error:"Not a member of this organization"},403);let $=await G.storage.orgSsoConfig.getByOrgId(Q);if(!$)return Y.json({error:"SSO not configured for this organization"},404);let Z=await ZS0($.issuer,$.discoveryEndpoint),W=ni5(),K=await ti5(W),H=crypto.randomUUID(),U=JSON.stringify({state:H,codeVerifier:W,orgId:Q,userId:G.auth.user.id});G$0(Y,"org_sso_state",U,{httpOnly:!0,secure:!0,sameSite:"Lax",path:"/api/org-sso/callback",maxAge:600});let B=new URLSearchParams({response_type:"code",client_id:$.clientId,redirect_uri:`${G.baseUrl}/api/org-sso/callback`,scope:$.scopes.join(" "),state:H,code_challenge:K,code_challenge_method:"S256"}),N=`${Z.authorization_endpoint}?${B.toString()}`;return Y.redirect(N)}),X.get("/callback",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.query("code"),J=Y.req.query("state"),$=Y.req.query("error");if($)return Y.redirect(`/?sso_error=${encodeURIComponent($)}`);if(!Q||!J)return Y.redirect("/?sso_error=missing_code_or_state");let Z=wD1(Y,"org_sso_state");if(!Z)return Y.redirect("/?sso_error=state_expired");G$0(Y,"org_sso_state","",{httpOnly:!0,secure:!0,sameSite:"Lax",path:"/api/org-sso/callback",maxAge:0});let W;try{W=JSON.parse(Z)}catch{return Y.redirect("/?sso_error=invalid_state")}if(W.state!==J)return Y.redirect("/?sso_error=state_mismatch");if(!G.auth.user||G.auth.user.id!==W.userId)return Y.redirect("/?sso_error=session_expired");let K=await G.storage.orgSsoConfig.getByOrgId(W.orgId);if(!K)return Y.redirect("/?sso_error=sso_not_configured");let H=await ZS0(K.issuer,K.discoveryEndpoint),U=await fetch(H.token_endpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",code:Q,redirect_uri:`${G.baseUrl}/api/org-sso/callback`,client_id:K.clientId,client_secret:K.clientSecret,code_verifier:W.codeVerifier})});if(!U.ok)return console.error("[org-sso] Token exchange failed:",await U.text()),Y.redirect("/?sso_error=token_exchange_failed");let B=await U.json();if(!B.id_token)return Y.redirect("/?sso_error=no_id_token");try{let z=YV(new URL(H.jwks_uri)),{payload:w}=await kX(B.id_token,z,{issuer:K.issuer,audience:K.clientId}),E=w.email?.toLowerCase(),P=G.auth.user.email?.toLowerCase();if(!E||E!==P)return console.error(`[org-sso] Email mismatch: token=${E}, user=${P}`),Y.redirect("/?sso_error=email_mismatch")}catch(z){return console.error("[org-sso] ID token verification failed:",z),Y.redirect("/?sso_error=token_verification_failed")}await G.storage.orgSsoSessions.upsert(G.auth.user.id,W.orgId);let N=await $S0(G,G.auth.user.id,W.orgId),O=N?.orgSlug?`/${N.orgSlug}`:"/";return Y.redirect(O)}),X.get("/config",async(Y)=>{let G=Y.get("meshContext");if(!G.auth.user)return Y.json({error:"Authentication required"},401);let Q=G.organization?.id;if(!Q)return Y.json({error:"Organization context required"},400);if(!ri5(G))return Y.json({error:"Admin role required"},403);let J=await G.storage.orgSsoConfig.getByOrgId(Q);if(!J)return Y.json({configured:!1});return Y.json({configured:!0,config:G.storage.orgSsoConfig.toPublic(J)})}),X.post("/config",async(Y)=>{let G=Y.get("meshContext");if(!G.auth.user)return Y.json({error:"Authentication required"},401);let Q=G.organization?.id;if(!Q)return Y.json({error:"Organization context required"},400);if(!WS0(G))return Y.json({error:"Owner role required"},403);let J=await Y.req.json();if(!J.issuer||!J.clientId||!J.domain)return Y.json({error:"issuer, clientId, and domain are required"},400);let $=await G.storage.orgSsoConfig.getByOrgId(Q);if(!$&&!J.clientSecret)return Y.json({error:"clientSecret is required for initial SSO setup"},400);let Z=J.clientSecret||$?.clientSecret||"";try{await ZS0(J.issuer,J.discoveryEndpoint)}catch(K){return Y.json({error:"Failed to reach OIDC discovery endpoint",details:K instanceof Error?K.message:String(K)},400)}let W=await G.storage.orgSsoConfig.upsert(Q,{issuer:J.issuer,clientId:J.clientId,clientSecret:Z,discoveryEndpoint:J.discoveryEndpoint,scopes:J.scopes,domain:J.domain,enforced:J.enforced});return Y.json({success:!0,config:G.storage.orgSsoConfig.toPublic(W)})}),X.post("/config/enforce",async(Y)=>{let G=Y.get("meshContext");if(!G.auth.user)return Y.json({error:"Authentication required"},401);let Q=G.organization?.id;if(!Q)return Y.json({error:"Organization context required"},400);if(!WS0(G))return Y.json({error:"Owner role required"},403);let J=await Y.req.json();if(!await G.storage.orgSsoConfig.getByOrgId(Q))return Y.json({error:"SSO must be configured before enforcing"},400);return await G.storage.orgSsoConfig.setEnforced(Q,J.enforced),Y.json({success:!0,enforced:J.enforced})}),X.delete("/config",async(Y)=>{let G=Y.get("meshContext");if(!G.auth.user)return Y.json({error:"Authentication required"},401);let Q=G.organization?.id;if(!Q)return Y.json({error:"Organization context required"},400);if(!WS0(G))return Y.json({error:"Owner role required"},403);return await G.storage.orgSsoConfig.delete(Q),Y.json({success:!0})})}function cu1(X){let Y;try{Y=new URL(X)}catch{throw Error(`Invalid URL: ${X}`)}let G=h4().localMode;if(Y.protocol!=="https:"&&!(G&&Y.protocol==="http:"))throw Error(`OIDC URL must use HTTPS: ${X}`);let Q=Y.hostname,J=[/^127\./,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^0\./,/^\[::1\]$/,/^\[fd/,/^\[fe80:/,/^localhost$/i],$=/^127\.|^\[::1\]$|^localhost$/i.test(Q);if(G&&$)return;for(let Z of J)if(Z.test(Q))throw Error(`OIDC URL must not point to a private network address: ${Q}`)}async function ZS0(X,Y){let G=Y||X,Q=e08.get(G);if(Q&&Q.expiresAt>Date.now())return Q.doc;let J=Y||`${X.replace(/\/$/,"")}/.well-known/openid-configuration`;cu1(J);let $=await fetch(J);if(!$.ok)throw Error(`OIDC discovery failed: ${$.status} ${$.statusText}`);let Z=await $.json();if(!Z.authorization_endpoint||!Z.token_endpoint||!Z.jwks_uri)throw Error("OIDC discovery document missing required endpoints");return cu1(Z.authorization_endpoint),cu1(Z.token_endpoint),cu1(Z.jwks_uri),e08.set(G,{doc:Z,expiresAt:Date.now()+3600000}),Z}function ni5(){let X=new Uint8Array(32);return crypto.getRandomValues(X),btoa(String.fromCharCode(...X)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}async function ti5(X){let G=new TextEncoder().encode(X),Q=await crypto.subtle.digest("SHA-256",G);return btoa(String.fromCharCode(...new Uint8Array(Q))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}async function $S0(X,Y,G){return await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.slug as orgSlug","member.role"]).where("member.userId","=",Y).where("member.organizationId","=",G).executeTakeFirst()??null}function ri5(X){let Y=X.auth.user?.role;if(!Y)return!1;return Fr.includes(Y)}function WS0(X){return X.auth.user?.role==="owner"}var iu1=()=>{let X=new w6;return pi5(X),X},e08;var KS0=D(()=>{jY();Q$0();IJ();e5();L71();e08=new Map});function X48(X){let Y=X.filter((Q)=>Q.role==="system"),G=X.find((Q)=>Q.role!=="system");return{systemMessages:Y,requestMessage:G}}function ai5(X){let Y=!1,G=X.map((Q)=>{if(Q.role!=="assistant")return Q;if(!Q.parts.some(($)=>("state"in $)&&$.state==="approval-requested"))return Q;return Y=!0,{...Q,parts:Q.parts.map(($)=>{if(!("state"in $)||$.state!=="approval-requested"||!("approval"in $)||!$.approval)return $;return{...$,state:"output-denied",approval:{...$.approval,approved:!1,reason:"User sent a new message without approving this tool call."}}})}});return Y?G:X}function oi5(X){let[Y,G]=X.reduce((Q,J)=>{if(J.role==="system")Q[0].push(J);else Q[1].push(J);return Q},[[],[]]);return{systemMessages:Y,messages:G}}async function si5(X,Y){return await X.loadHistory(Y)}function ei5(X,Y){let G=X.filter(($)=>$.parts&&$.parts.length>0);if(!Y)return G;let Q=G.findIndex(($)=>$.id===Y.id);return Q>=0?[...G.slice(0,Q),Y]:[...G,Y]}async function Y48(X,Y,G,Q){let J=await si5(X,Q),$=ei5(J,Y);return[...G,...$]}async function G48(X,Y){let G=X.filter((U)=>U.role!=="assistant"||U.parts&&U.parts.length>0),Q=await BQ1({messages:G}),J=ai5(Q),$=await UQ1(J,{tools:Y.tools,ignoreIncompleteToolCalls:!0}),{systemMessages:Z,messages:W}=oi5($),H=XV0({messages:W,reasoning:"all",emptyMessages:"remove",toolCalls:"none"}).map((U)=>{if(U.role!=="assistant")return U;let B=Array.isArray(U.content)?U.content.filter((N)=>N.type!=="reasoning"&&N.type!=="thinking"&&N.type!=="redacted-reasoning").map((N)=>{let O=N;if("providerOptions"in O||"providerMetadata"in O){let{providerOptions:z,providerMetadata:w,...E}=O;if(O.type==="tool-call"){let P=w?.google,q=z?.google;return{...E,...P?{providerMetadata:{google:P}}:{},...q?{providerOptions:{google:q}}:{}}}return E}return N}):U.content;return{...U,content:Array.isArray(B)&&B.length===0?[{type:"text",text:""}]:B,providerOptions:void 0,providerMetadata:void 0}});return{systemMessages:Z,messages:H,originalMessages:Q}}var HS0=D(()=>{TY()});function u3(X){return`mesh-storage://${X}`}function Hl(X){if(!X.startsWith("mesh-storage://"))return null;return X.slice(15)}function FS0(){return/mesh-storage:\/\/([^\s"'<>[\]]+)/g}function Xp5(X,Y,G){return`${X}/api/${Y}/files/${G}`}function Gp5(X){return X.type==="file"&&"mediaType"in X&&typeof X.mediaType==="string"&&Yp5.has(X.mediaType)}function Q48(X){let Y=X.match(/^data:([^;]+);base64,(.+)$/s);if(!Y)return null;let[,G,Q]=Y;try{let J=atob(Q),$=new Uint8Array(J.length);for(let Z=0;Z<J.length;Z++)$[Z]=J.charCodeAt(Z);return{mimeType:G,bytes:$}}catch{return null}}function J48(X){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/svg+xml":"svg","application/pdf":"pdf","text/plain":"txt","text/html":"html","application/json":"json"}[X]??"bin"}async function Z48(X,Y,G,Q){if(!Q.objectStorage)return null;try{return await Q.objectStorage.put(Y,X,{contentType:G}),Y}catch(J){return console.error("[file-materializer] Failed to upload file:",J),null}}async function Fl(X,Y){if(!Y.objectStorage)return null;try{return await Y.objectStorage.presignedGetUrl(X,Qp5)}catch(G){return console.error("[file-materializer] Failed to generate presigned URL:",G),null}}async function $48(X,Y){if(!Y.organization)return X;let G=Y.organization.id,Q=X.findLastIndex((z)=>z.role==="user");if(Q===-1)return X;let J=X[Q],$=J.parts.filter((z)=>z.type==="file"&&("url"in z)&&typeof z.url==="string"&&z.url.startsWith("data:"));if($.length===0)return X;let W=(await Promise.all($.map(async(z)=>{if(z.type!=="file"||!("url"in z)||typeof z.url!=="string")return null;let w=Q48(z.url);if(!w)return null;let E=J48(w.mimeType),P=`chat-uploads/${crypto.randomUUID()}.${E}`,q=await Z48(w.bytes,P,w.mimeType,Y);if(!q)return null;let V="filename"in z&&typeof z.filename==="string"?z.filename:P;return{dataUrl:z.url,meshStorageUrl:u3(q),redirectUrl:Xp5(Y.baseUrl,G,q),filename:V}}))).filter((z)=>z!==null);if(W.length===0)return X;let H=`[Uploaded files \u2014 use these URLs when calling tools]
|
|
6694
|
+
)`).where("status","=","pending").returning(["id"]).execute()).map(($)=>$.id);if(Q.length===0)return[];return(await this.db.selectFrom("event_deliveries as d").innerJoin("events as e","e.id","d.event_id").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select(["d.id as delivery_id","d.event_id","d.subscription_id","d.status as delivery_status","d.attempts as delivery_attempts","d.last_error as delivery_last_error","d.delivered_at","d.next_retry_at as delivery_next_retry_at","d.created_at as delivery_created_at","e.organization_id","e.type","e.source","e.specversion","e.subject","e.time","e.datacontenttype","e.dataschema","e.data","e.cron","e.status as event_status","e.attempts as event_attempts","e.last_error as event_last_error","e.next_retry_at","e.created_at as event_created_at","e.updated_at as event_updated_at","s.connection_id","s.publisher","s.event_type","s.filter","s.enabled","s.created_at as subscription_created_at","s.updated_at as subscription_updated_at"]).where("d.id","in",Q).where("d.status","=","processing").execute()).map(($)=>({delivery:{id:$.delivery_id,eventId:$.event_id,subscriptionId:$.subscription_id,status:$.delivery_status,attempts:$.delivery_attempts,lastError:$.delivery_last_error,deliveredAt:$.delivered_at,nextRetryAt:$.delivery_next_retry_at,createdAt:$.delivery_created_at},event:{id:$.event_id,organizationId:$.organization_id,type:$.type,source:$.source,specversion:$.specversion,subject:$.subject,time:$.time,datacontenttype:$.datacontenttype,dataschema:$.dataschema,data:$.data?JSON.parse($.data):null,cron:$.cron,status:$.event_status,attempts:$.event_attempts,lastError:$.event_last_error,nextRetryAt:$.next_retry_at,createdAt:$.event_created_at,updatedAt:$.event_updated_at},subscription:{id:$.subscription_id,organizationId:$.organization_id,connectionId:$.connection_id,publisher:$.publisher,eventType:$.event_type,filter:$.filter,enabled:Boolean($.enabled),createdAt:$.subscription_created_at,updatedAt:$.subscription_updated_at}}))}async markDeliveriesDelivered(X){if(X.length===0)return;let Y=new Date().toISOString();await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:Y}).where("id","in",X).execute()}async markDeliveriesPermanentlyFailed(X,Y){if(X.length===0)return;await this.db.updateTable("event_deliveries").set({status:"failed",last_error:Y,next_retry_at:null}).where("id","in",X).execute()}async markDeliveriesFailed(X,Y,G=20,Q=1000,J=3600000){if(X.length===0)return;for(let $ of X){let Z=await this.db.selectFrom("event_deliveries").select(["attempts"]).where("id","=",$).executeTakeFirst();if(!Z)continue;let W=Z.attempts+1;if(W>=G)await this.db.updateTable("event_deliveries").set({attempts:W,last_error:Y,status:"failed",next_retry_at:null}).where("id","=",$).execute();else{let K=Math.min(Q*Math.pow(2,W-1),J),H=new Date(Date.now()+K).toISOString();await this.db.updateTable("event_deliveries").set({attempts:W,last_error:Y,status:"pending",next_retry_at:H}).where("id","=",$).execute()}}}async updateEventStatus(X){let Y=await this.db.selectFrom("event_deliveries").select(["status"]).where("event_id","=",X).execute();if(Y.length===0)return;let G=Y.every(($)=>$.status==="delivered"),Q=Y.some(($)=>$.status==="failed"),J=Y.some(($)=>$.status==="pending"||$.status==="processing");if(G)await this.db.updateTable("events").set({status:"delivered",updated_at:new Date().toISOString()}).where("id","=",X).execute();else if(Q&&!J)await this.db.updateTable("events").set({status:"failed",updated_at:new Date().toISOString()}).where("id","=",X).execute()}async resetStuckDeliveries(){if((await p1`SELECT pg_try_advisory_lock(hashtext('event_bus_reset_stuck')) as locked`.execute(this.db)).rows[0]?.locked!==!0)return 0;try{let G=await this.db.updateTable("event_deliveries").set({status:"pending"}).where("status","=","processing").executeTakeFirst();return Number(G.numUpdatedRows??0)}finally{await p1`SELECT pg_advisory_unlock(hashtext('event_bus_reset_stuck'))`.execute(this.db)}}async getEvent(X,Y){let G=await this.db.selectFrom("events").selectAll().where("id","=",X).where("organization_id","=",Y).executeTakeFirst();if(!G)return null;return{id:G.id,organizationId:G.organization_id,type:G.type,source:G.source,specversion:G.specversion,subject:G.subject,time:G.time,datacontenttype:G.datacontenttype,dataschema:G.dataschema,data:G.data?JSON.parse(G.data):null,cron:G.cron,status:G.status,attempts:G.attempts,lastError:G.last_error,nextRetryAt:G.next_retry_at,createdAt:G.created_at,updatedAt:G.updated_at}}async findActiveCronEvent(X,Y,G,Q){let J=await this.db.selectFrom("events").selectAll().where("organization_id","=",X).where("type","=",Y).where("source","=",G).where("cron","=",Q).where("status","in",["pending","processing","delivered"]).orderBy("created_at","desc").executeTakeFirst();if(!J)return null;return{id:J.id,organizationId:J.organization_id,type:J.type,source:J.source,specversion:J.specversion,subject:J.subject,time:J.time,datacontenttype:J.datacontenttype,dataschema:J.dataschema,data:J.data?JSON.parse(J.data):null,cron:J.cron,status:J.status,attempts:J.attempts,lastError:J.last_error,nextRetryAt:J.next_retry_at,createdAt:J.created_at,updatedAt:J.updated_at}}async findOrphanedCronEvents(){return(await this.db.selectFrom("events").selectAll().where("cron","is not",null).where("status","=","delivered").where((Y)=>Y.not(Y.exists(Y.selectFrom("event_deliveries").select("id").whereRef("event_deliveries.event_id","=","events.id").where("event_deliveries.status","in",["pending","processing"])))).execute()).map((Y)=>({id:Y.id,organizationId:Y.organization_id,type:Y.type,source:Y.source,specversion:Y.specversion,subject:Y.subject,time:Y.time,datacontenttype:Y.datacontenttype,dataschema:Y.dataschema,data:Y.data?JSON.parse(Y.data):null,cron:Y.cron,status:Y.status,attempts:Y.attempts,lastError:Y.last_error,nextRetryAt:Y.next_retry_at,createdAt:Y.created_at,updatedAt:Y.updated_at}))}async cancelEvent(X,Y,G){let Q=await this.db.updateTable("events").set({status:"failed",last_error:"Cancelled by publisher",updated_at:new Date().toISOString()}).where("id","=",X).where("organization_id","=",Y).where("source","=",G).where("status","in",["pending","processing"]).executeTakeFirst();if((Q.numUpdatedRows??0n)>0n)await this.db.updateTable("event_deliveries").set({status:"failed",last_error:"Event cancelled by publisher"}).where("event_id","=",X).where("status","in",["pending","processing"]).execute();return{success:(Q.numUpdatedRows??0n)>0n}}async scheduleRetryWithoutAttemptIncrement(X,Y){if(X.length===0)return;let G=new Date(Date.now()+Y).toISOString();await this.db.updateTable("event_deliveries").set({status:"pending",next_retry_at:G}).where("id","in",X).execute()}async ackDelivery(X,Y,G){if(!await this.db.selectFrom("events").select(["id"]).where("id","=",X).where("organization_id","=",Y).executeTakeFirst())return{success:!1};let $=((await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:new Date().toISOString()}).where("event_id","=",X).where("status","in",["pending","processing"]).where((Z)=>Z.exists(Z.selectFrom("event_subscriptions").select("id").whereRef("event_subscriptions.id","=","event_deliveries.subscription_id").where("event_subscriptions.connection_id","=",G).where("event_subscriptions.organization_id","=",Y))).executeTakeFirst()).numUpdatedRows??0n)>0n;if($)await this.updateEventStatus(X);return{success:$}}async syncSubscriptions(X){let{organizationId:Y,connectionId:G,subscriptions:Q}=X,J=(P,q)=>{return`${P}::${q??""}`},$=await this.listSubscriptions(Y,G),Z=new Map;for(let P of $)Z.set(J(P.eventType,P.publisher),P);let W=new Map;for(let P of Q)W.set(J(P.eventType,P.publisher),P);let K=new Date().toISOString(),H=[],U=[],B=[],N=0;for(let[P,q]of W){let V=Z.get(P);if(!V)H.push({id:crypto.randomUUID(),organization_id:Y,connection_id:G,event_type:q.eventType,publisher:q.publisher??null,filter:q.filter??null,enabled:!0,created_at:K,updated_at:K});else{let M=V.filter??null,j=q.filter??null;if(M!==j)U.push({id:V.id,filter:j});else N++}}for(let[P,q]of Z)if(!W.has(P))B.push(q.id);if(H.length>0)await this.db.insertInto("event_subscriptions").values(H).execute();if(U.length>0)await Promise.all(U.map((P)=>this.db.updateTable("event_subscriptions").set({filter:P.filter,updated_at:K}).where("id","=",P.id).execute()));if(B.length>0)await this.db.deleteFrom("event_subscriptions").where("id","in",B).execute();let O=H.length,z=U.length,w=B.length,E=await this.listSubscriptions(Y,G);return{created:O,updated:z,deleted:w,unchanged:N,subscriptions:E}}}function D08(X){return new z08(X)}var w08=D(()=>{$7()});class L08{listeners=new Map;totalCount=0;strategy=null;started=!1;async start(X){if(this.started){if(!X)return;await this.stop()}this.strategy=X,await this.strategy.start((Y,G)=>this.localEmit(Y,G)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add(X){if(this.totalCount>=500)return console.warn("[SSEHub] Total connection limit reached (500)"),null;let Y=this.listeners.get(X.organizationId);if(!Y)Y=new Map,this.listeners.set(X.organizationId,Y);if(Y.size>=50)return console.warn(`[SSEHub] Per-org connection limit reached for ${X.organizationId} (50)`),null;return Y.set(X.id,X),this.totalCount++,X.id}remove(X,Y){let G=this.listeners.get(X);if(!G)return;if(G.delete(Y)){if(this.totalCount--,G.size===0)this.listeners.delete(X)}}emit(X,Y){if(this.strategy)this.strategy.broadcast(X,Y);else this.localEmit(X,Y)}countForOrg(X){return this.listeners.get(X)?.size??0}get count(){return this.totalCount}localEmit(X,Y){let G=this.listeners.get(X);if(!G||G.size===0)return;for(let Q of G.values()){if(Q.typePatterns&&!Vi5(Y.type,Q.typePatterns))continue;try{Q.push(Y)}catch{this.remove(X,Q.id)}}}}function Vi5(X,Y){for(let G of Y){if(G===X)return!0;if(G.endsWith(".*")){let Q=G.slice(0,-1);if(X.startsWith(Q))return!0}}return!1}function E08(X){return{id:X.id,type:X.type,source:X.source,subject:X.subject,data:X.data?Mi5(X.data):void 0,time:X.time}}function Mi5(X){if(typeof X==="string")try{return JSON.parse(X)}catch{return X}return X}var g3;var gu1=D(()=>{g3=new L08});function P08(X){if(typeof X==="object"&&X!==null){let Q=X,J=Q.status??Q.code;if(typeof J==="number"&&Ri5.has(J))return!0}let Y=X instanceof Error?X.message:typeof X==="string"?X:"";if(!Y)return!1;let G=Y.toLowerCase();if(/\b401\b/.test(G))return!0;return Si5.some((Q)=>G.includes(Q))}function q08(X){let Y=X instanceof Error?X.message:typeof X==="string"?X:"";if(!Y)return!1;let G=Y.toLowerCase();return ki5.some((Q)=>G.includes(Q))}var Ri5,Si5,ki5,JJ1;var dR0=D(()=>{Ri5=new Set([401]),Si5=["unauthorized","invalid_token","invalid api key","api key required","api-key required"],ki5=["tool on_events not found","tool not found"];JJ1=class JJ1 extends Error{constructor(X){super(X);this.name="PermanentDeliveryError"}}});var uu1;var cR0=D(()=>{uu1={pollIntervalMs:5000,batchSize:100,maxAttempts:20,retryDelayMs:1000,maxDelayMs:3600000}});function Ci5(X){return X.endsWith("_self")}function vi5(X){return X.slice(0,-5)}function A08(){return async(X,Y)=>{try{if(Ci5(X)){let Z=vi5(X),W=await wU.create(),K={organizationId:Z,connectionId:X,publish:async(B,N,O,z)=>{await W.eventBus.publish(Z,X,{type:B,subject:N,data:O,deliverAt:z?.deliverAt})},createMCPProxy:async(B)=>{let N={...W,getOrCreateClient:Ur()},O=await HP0(B,N);return{callTool:async(z,w,E)=>{let P=await O.callTool(z,w,E);return{content:P.content,structuredContent:P.structuredContent,isError:P.isError}},close:()=>O.close()}}},H=Y.filter((B)=>B.type==="registry.monitor.scheduled");if(H.length>0){let{parseMonitorConfig:B}=await Promise.resolve().then(() => (DH(),a_6)),N=await K.createMCPProxy(X);try{for(let O of H){let z=O.data&&typeof O.data==="object"?O.data:{},w=z.config&&typeof z.config==="object"?z.config:{},E=B(w);await N.callTool({name:"REGISTRY_MONITOR_RUN_START",arguments:{config:E}})}}finally{await N.close()}if(H.length===Y.length)return{success:!0}}if(await l36(Y,K))return{success:!0}}let G=await wU.create(),Q=await HP0(X,G),$=await GL0.forClient(w71(Q)).ON_EVENTS({events:Y});return{success:$.success,error:$.error,retryAfter:$.retryAfter,results:$.results}}catch(G){let Q=G instanceof Error?G.message:String(G);if(console.error(`[EventBus] Failed to notify connection ${X}:`,Q),P08(G)||q08(G))throw new JJ1(Q);return{success:!1,error:Q}}}}var T08=D(()=>{TG1();qA1();Yj1();sX1();oI1();dR0()});function I08(X){return{specversion:"1.0",id:X.id,source:X.source,type:X.type,time:X.time,subject:X.subject??void 0,datacontenttype:X.datacontenttype,dataschema:X.dataschema??void 0,data:X.data??void 0}}function _i5(X){let Y=new Map;for(let Q of X){let J=Q.subscription.connectionId,$=Y.get(J);if($){if($.deliveryIds.push(Q.delivery.id),!$.seenEventIds.has(Q.event.id))$.seenEventIds.add(Q.event.id),$.events.push(I08(Q.event))}else Y.set(J,{connectionId:Q.subscription.connectionId,deliveryIds:[Q.delivery.id],events:[I08(Q.event)],seenEventIds:new Set([Q.event.id])})}let G=new Map;for(let[Q,J]of Y)G.set(Q,{connectionId:J.connectionId,deliveryIds:J.deliveryIds,events:J.events});return G}class iR0{storage;notifySubscriber;running=!1;processing=!1;pendingNotify=!1;config;eventTriggerEngine;constructor(X,Y,G){this.storage=X;this.notifySubscriber=G??A08(),this.config={...uu1,...Y}}setEventTriggerEngine(X){this.eventTriggerEngine=X}async start(){if(this.running)return;await this.storage.resetStuckDeliveries();let X=await this.storage.findOrphanedCronEvents();for(let Y of X)await this.scheduleNextCronDelivery(Y);this.running=!0}stop(){this.running=!1}isRunning(){return this.running}async processNow(){if(!this.running)return;if(this.processing){this.pendingNotify=!0;return}this.processing=!0;try{do this.pendingNotify=!1,await this.processEvents();while(this.pendingNotify)}catch(X){console.error("[EventBus] Error processing events:",X)}finally{this.processing=!1}}async processEvents(){let X=await this.storage.claimPendingDeliveries(this.config.batchSize);if(X.length===0)return;let Y=_i5(X),G=await Promise.allSettled(Array.from(Y.entries()).map(async([$,Z])=>{let W=new Set;try{let H=await this.notifySubscriber(Z.connectionId,Z.events);if(H.results&&Object.keys(H.results).length>0)await this.processPerEventResults(Z,H);else if(H.success)await this.storage.markDeliveriesDelivered(Z.deliveryIds);else if(H.retryAfter&&H.retryAfter>0)await this.storage.scheduleRetryWithoutAttemptIncrement(Z.deliveryIds,H.retryAfter);else await this.storage.markDeliveriesFailed(Z.deliveryIds,H.error||"Subscriber returned success=false",this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}catch(H){if(H instanceof JJ1){await this.storage.markDeliveriesPermanentlyFailed(Z.deliveryIds,H.message);for(let U of Z.events)W.add(U.id)}else{let U=H instanceof Error?H.message:String(H);console.error(`[EventBus] Failed to notify subscription ${$}:`,U),await this.storage.markDeliveriesFailed(Z.deliveryIds,U,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}let K=new Set;for(let H of X)if(Z.deliveryIds.includes(H.delivery.id))K.add(H.event.id);return{eventIds:K,permanentlyFailed:W}})),Q=new Set,J=new Set;for(let $ of G)if($.status==="fulfilled"){for(let Z of $.value.eventIds)Q.add(Z);for(let Z of $.value.permanentlyFailed)J.add(Z)}for(let $ of Q)try{await this.storage.updateEventStatus($);let Z=X.find((W)=>W.event.id===$)?.event;if(Z?.cron&&!J.has($))await this.scheduleNextCronDelivery(Z)}catch(Z){console.error(`[EventBus] Failed to update event status ${$}:`,Z)}if(this.eventTriggerEngine){let $=new Set,Z=[];for(let W of X){if(W.delivery.attempts>0)continue;if(!$.has(W.event.id))$.add(W.event.id),Z.push({source:W.event.source,type:W.event.type,data:W.event.data,organizationId:W.event.organizationId})}if(Z.length>0)this.eventTriggerEngine.notifyEvents(Z)}}async processPerEventResults(X,Y){let G=[],Q=new Map,J=[],$=new Map;for(let Z=0;Z<X.events.length;Z++){let W=X.events?.[Z];if(!W)continue;let K=X.deliveryIds?.[Z];if(!K)continue;$.set(W.id,K)}for(let Z of X.events){let W=$.get(Z.id);if(!W)continue;let K=Y.results?.[Z.id];if(K)if(K.success)G.push(W);else if(K.retryAfter&&K.retryAfter>0){let H=Q.get(K.retryAfter)||[];H.push(W),Q.set(K.retryAfter,H)}else J.push({deliveryId:W,error:K.error||"Event processing failed"});else if(Y.success)G.push(W);else if(Y.retryAfter&&Y.retryAfter>0){let H=Q.get(Y.retryAfter)||[];H.push(W),Q.set(Y.retryAfter,H)}else J.push({deliveryId:W,error:Y.error||"Batch processing failed"})}if(G.length>0)await this.storage.markDeliveriesDelivered(G);for(let[Z,W]of Q)await this.storage.scheduleRetryWithoutAttemptIncrement(W,Z);if(J.length>0){let Z=new Map;for(let{deliveryId:W,error:K}of J){let H=Z.get(K)||[];H.push(W),Z.set(K,H)}for(let[W,K]of Z)await this.storage.markDeliveriesFailed(K,W,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}async scheduleNextCronDelivery(X){if(!X.cron)return;try{let G=new Uw(X.cron,{timezone:"UTC"}).nextRun();if(!G)return;let Q=G.toISOString(),J=await this.storage.getMatchingSubscriptions(X);if(J.length===0)return;await this.storage.createDeliveries(X.id,J.map(($)=>$.id),Q)}catch(Y){console.error(`[EventBus] Failed to schedule next cron delivery for event ${X.id}:`,Y)}}}var j08=D(()=>{dG1();dR0();cR0();T08()});class pR0{storage;worker;notifyStrategy;running=!1;constructor(X){this.storage=X.storage,this.notifyStrategy=X.notifyStrategy,this.worker=new iR0(this.storage,X.config)}setEventTriggerEngine(X){this.worker.setEventTriggerEngine(X)}async publish(X,Y,G){if(G.deliverAt&&G.cron)throw Error("Cannot set both deliverAt and cron. Use one or the other.");let Q;if(G.cron){try{let U=new Uw(G.cron,{timezone:"UTC"}).nextRun();if(!U)throw Error("Cron expression does not produce a next run time");Q=U.toISOString()}catch(H){throw Error(`Invalid cron expression: ${H instanceof Error?H.message:String(H)}`)}let K=await this.storage.findActiveCronEvent(X,G.type,Y,G.cron);if(K)return K}let J=crypto.randomUUID(),$=new Date().toISOString(),Z=await this.storage.publishEvent({id:J,organizationId:X,type:G.type,source:Y,subject:G.subject,time:$,data:G.data,cron:G.cron});g3.emit(X,E08(Z));let W=await this.storage.getMatchingSubscriptions(Z);if(W.length>0){let K=G.deliverAt??Q;await this.storage.createDeliveries(J,W.map((U)=>U.id),K);let H=K!=null&&new Date(K).getTime()<=Date.now();if(this.notifyStrategy&&(!K||H))await this.notifyStrategy.notify(J).catch((U)=>{console.warn("[EventBus] Notify failed (non-critical):",U)})}return Z}async subscribe(X,Y){return this.storage.subscribe({id:crypto.randomUUID(),organizationId:X,connectionId:Y.connectionId,publisher:Y.publisher,eventType:Y.eventType,filter:Y.filter})}async unsubscribe(X,Y){return this.storage.unsubscribe(Y,X)}async listSubscriptions(X,Y){return this.storage.listSubscriptions(X,Y)}async getSubscription(X,Y){return this.storage.getSubscription(Y,X)}async getEvent(X,Y){return this.storage.getEvent(Y,X)}async cancelEvent(X,Y,G){return this.storage.cancelEvent(Y,X,G)}async ackEvent(X,Y,G){return this.storage.ackDelivery(Y,X,G)}async syncSubscriptions(X,Y){return this.storage.syncSubscriptions({organizationId:X,...Y})}async start(){if(this.running)return;if(this.running=!0,await this.worker.start(),this.notifyStrategy)await this.notifyStrategy.start(()=>{this.worker.processNow().catch((X)=>{console.error("[EventBus] Error processing after notify:",X)})});await this.worker.processNow().catch((X)=>{console.error("[EventBus] Error processing pending events on startup:",X)})}async stop(){if(!this.running)return;if(this.running=!1,this.worker.stop(),this.notifyStrategy)try{await this.notifyStrategy.stop()}catch(X){console.error("[EventBus] Error stopping notify strategy:",X)}}isRunning(){return this.running}}var V08=D(()=>{dG1();gu1();j08()});class nR0{options;sub=null;onNotify=null;encoder=new TextEncoder;constructor(X){this.options=X}async start(X){if(this.sub)return;if(X)this.onNotify=X;if(!this.onNotify)return;let Y=this.options.getConnection();if(!Y)return;this.sub=Y.subscribe("mesh.events.notify"),(async()=>{for await(let G of this.sub)this.onNotify?.()})().catch((G)=>{console.error("[NatsNotify] Subscription error:",G)})}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onNotify=null}async notify(X){try{let Y=this.options.getConnection();if(!Y)return;Y.publish("mesh.events.notify",this.encoder.encode(X))}catch(Y){console.warn("[NatsNotify] Publish failed (non-critical):",Y)}}}class tR0{options;sub=null;localEmit=null;originId=crypto.randomUUID();encoder=new TextEncoder;constructor(X){this.options=X}async start(X){if(X)this.localEmit=X;if(this.sub)return;if(!this.localEmit)return;let Y=this.options.getConnection();if(!Y)return;this.sub=Y.subscribe("mesh.sse.broadcast");let G=new TextDecoder;(async()=>{for await(let Q of this.sub)try{let J=JSON.parse(G.decode(Q.data));if(typeof J?.originId!=="string"||typeof J?.organizationId!=="string"||typeof J?.event?.id!=="string"||typeof J?.event?.type!=="string")continue;if(J.originId===this.originId)continue;this.localEmit?.(J.organizationId,J.event)}catch{}})().catch((Q)=>{console.error("[NatsSSEBroadcast] Subscription error:",Q)})}broadcast(X,Y){this.localEmit?.(X,Y);let G={originId:this.originId,organizationId:X,event:Y};try{let Q=this.options.getConnection();if(!Q)return;Q.publish("mesh.sse.broadcast",this.encoder.encode(JSON.stringify(G)))}catch(Q){console.warn("[NatsSSEBroadcast] Publish failed (non-critical):",Q)}}async stop(){this.sub?.unsubscribe(),this.sub=null,this.localEmit=null}}function M08(...X){return{async start(Y){await Promise.all(X.map((G)=>G.start(Y)))},async stop(){await Promise.all(X.map((Y)=>Y.stop().catch((G)=>{console.error("[NotifyStrategy] Error stopping strategy:",G)})))},async notify(Y){await Promise.all(X.map((G)=>G.notify(Y).catch((Q)=>{console.warn("[NotifyStrategy] Notify failed (non-critical):",Q)})))}}}class rR0{intervalMs;timer=null;onNotify=null;constructor(X){this.intervalMs=X}async start(X){if(this.timer)return;this.onNotify=X,this.scheduleNext()}async stop(){if(this.timer)clearTimeout(this.timer),this.timer=null;this.onNotify=null}async notify(X){if(this.onNotify)this.onNotify()}scheduleNext(){this.timer=setTimeout(()=>{if(this.onNotify)this.onNotify();if(this.timer)this.scheduleNext()},this.intervalMs)}}async function R08(X,Y,G=5){for(let Q=1;Q<=G;Q++)try{await Y();return}catch(J){if(Q===G){console.error(`${X} Deferred start failed:`,J);return}let $=Math.min(1000*2**(Q-1),1e4);console.warn(`${X} Start attempt ${Q}/${G} failed, retrying in ${$}ms`),await new Promise((Z)=>setTimeout(Z,$))}}function S08(X,Y,G){let Q=D08(X.db),J=G?.pollIntervalMs??uu1.pollIntervalMs,$=new nR0({getConnection:()=>Y.getConnection()}),Z=M08(new rR0(J),$),W=new tR0({getConnection:()=>Y.getConnection()});return g3.start(W).catch((K)=>{console.error("[SSEHub] Failed to start broadcast strategy:",K)}),Y.onReady(()=>{R08("[NatsNotify]",()=>$.start()),R08("[NatsSSEBroadcast]",()=>W.start())}),new pR0({storage:Q,config:G,notifyStrategy:Z})}var aR0=D(()=>{w08();V08();cR0();gu1();gu1()});var k08=()=>{};var oR0=()=>{};var C08=()=>{};var fi5,cCG;var v08=D(()=>{k08();oR0();qE();C08();fi5={br:".br",zstd:".zst",gzip:".gz"},cCG=Object.keys(fi5)});var _08=D(()=>{v08()});var f08=()=>{};var b08=D(()=>{f08()});var y08=()=>{};var h08=D(()=>{rZ0()});var sR0=D(()=>{AE();h08()});var eR0="x-hono-disable-ssg",HvG;var XS0=D(()=>{sR0();HvG=(()=>{try{return new Response("SSG is disabled",{status:404,headers:{[eR0]:"true"}})}catch{return null}})()});var x08=D(()=>{HD1()});var YS0=D(()=>{x08()});var g08=D(()=>{b08();y08();oR0();XS0();YS0();sR0()});var u08=D(()=>{XS0();YS0();g08()});var ivG;var l08=D(()=>{u08();({write:ivG}=Bun)});var hi5=class{#X;constructor(X){this.#X=X,this.raw=X.raw,this.url=X.url?new URL(X.url):null,this.protocol=X.protocol??null}send(X,Y){this.#X.send(X,Y??{})}raw;binaryType="arraybuffer";get readyState(){return this.#X.readyState}url;protocol;close(X,Y){this.#X.close(X,Y)}},m08=(X)=>{return(...Y)=>{if(typeof Y[0]==="function"){let[G,Q]=Y;return async function($,Z){let W=await G($),K=await X($,W,Q);if(K)return K;await Z()}}else{let[G,Q,J]=Y;return(async()=>{let $=await X(G,Q,J);if(!$)throw Error("Failed to upgrade WebSocket");return $})()}}};var d08=()=>{};var ZJ1=(X)=>("server"in X.env)?X.env.server:X.env;var lu1=()=>{};var xi5;var c08=D(()=>{d08();lu1();xi5=m08((X,Y)=>{let G=ZJ1(X);if(!G)throw TypeError("env has to include the 2nd argument of fetch.");if(G.upgrade(X.req.raw,{data:{events:Y,url:new URL(X.req.url),protocol:X.req.url}}))return new Response(null);return})});var GS0=(X)=>{let Y=ZJ1(X);if(!Y)throw TypeError("env has to include the 2nd argument of fetch.");if(typeof Y.requestIP!=="function")throw TypeError("server.requestIP is not a function.");let G=Y.requestIP(X.req.raw);if(!G)return{remote:{}};return{remote:{address:G.address,addressType:G.family==="IPv6"||G.family==="IPv4"?G.family:void 0,port:G.port}}};var i08=D(()=>{lu1()});var p08=D(()=>{_08();l08();c08();i08();lu1()});var n08;var t08=D(()=>{n08={google:{name:"Google",icon:"https://assets.decocache.com/webdraw/eb7480aa-a68b-4ce4-98ff-36aa121762a7/google.svg"},github:{name:"GitHub",icon:"https://assets.decocache.com/decocms/e02ce92e-6684-41a6-acfc-432977eb4878/github.png"},microsoft:{name:"Microsoft",icon:"https://assets.decocache.com/mcp/aa6f6e1a-6526-4bca-99cc-82e2ec38b0e4/microsoft.png"}}});var du1={};y6(du1,{waitForSeed:()=>ii5,seedLocalMode:()=>mi5,markSeedComplete:()=>ci5,isLocalMode:()=>Kl,getLocalAdminUser:()=>QS0,getLocalAdminPassword:()=>mu1});import{userInfo as gi5}from"os";async function mu1(){return h4().betterAuthSecret||"local-mode-default"}function r08(){try{return gi5().username||"local"}catch{return"local"}}function ui5(X){return X.charAt(0).toUpperCase()+X.slice(1)}async function li5(){let X=dY(),Y=await X.db.selectFrom("user").select(X.db.fn.countAll().as("count")).executeTakeFirst();return Number(Y?.count??0)===0}async function mi5(){if(!await li5())return!1;let Y=r08(),G=`${Y}@localhost.mesh`,Q=ui5(Y),J=await mu1(),$=await L7.api.signUpEmail({body:{email:G,password:J,name:Q}});if(!$?.user?.id)throw Error("Failed to create local admin user");let Z=$.user.id,W=dY();await W.db.updateTable("user").set({role:"admin"}).where("id","=",Z).execute();let K=`${Y}-local`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),H=`${Q} Local`;return await W.db.updateTable("organization").set({name:H,slug:K}).where("id","in",(U)=>U.selectFrom("member").select("organizationId").where("userId","=",Z)).execute(),!0}async function QS0(){let X=dY(),Y=`${r08()}@localhost.mesh`;return X.db.selectFrom("user").where("email","=",Y).selectAll().executeTakeFirst()}function Kl(){return h4().localMode}function ci5(){a08()}function ii5(){return di5}var a08,di5;var va=D(()=>{MP();e5();$M();di5=new Promise((X)=>{if(a08=X,!Kl())X()})});function o08(){let X=Object.keys(i9.socialProviders??{}),Y=X.length>0,G=X.map((J)=>({name:J,icon:n08[J].icon})),Q=h4().localMode;return{emailAndPassword:{enabled:i9.emailAndPassword?.enabled??!1},magicLink:{enabled:i9.magicLinkConfig?.enabled??!1},emailOtp:{enabled:i9.emailOtpConfig?.enabled??!1},resetPassword:{enabled:xu1},socialProviders:{enabled:Y,providers:G},sso:i9.ssoConfig?{enabled:!0,providerId:i9.ssoConfig.providerId}:{enabled:!1},stdioEnabled:Q,localMode:Kl()}}var $J1,s08;var JS0=D(()=>{jY();p08();OY();e5();$M();MP();DT0();rE0();t08();va();$J1=new w6;$J1.post("/local-session",async(X)=>{if(!Kl())return X.json({success:!1,error:"Local mode is not active"},403);let Y;try{Y=GS0(X).remote.address}catch{}if(!(Y==="127.0.0.1"||Y==="::1"||Y==="::ffff:127.0.0.1"))return X.json({success:!1,error:"Forbidden"},403);try{let{waitForSeed:Q}=await Promise.resolve().then(() => (va(),du1));await Q();let{auth:J}=await Promise.resolve().then(() => ($M(),N08)),$=await QS0();if(!$)return X.json({success:!1,error:"Local admin user not found"},500);let Z=await mu1();return await J.api.signInEmail({body:{email:$.email,password:Z},asResponse:!0})}catch(Q){return console.error("Failed to create local session:",Q),X.json({success:!1,error:Q instanceof Error?Q.message:"Failed to create local session"},500)}});$J1.get("/domain-lookup",async(X)=>{let Y=await L7.api.getSession({headers:X.req.raw.headers});if(!Y?.user)return X.json({success:!1,error:"Authentication required"},401);if(!Y.user.emailVerified)return X.json({found:!1});let G=Y.user.email?.split("@")[1]?.toLowerCase();if(!G||xq.has(G))return X.json({found:!1});try{let J=await new ED(dY().db).getByDomain(G);if(!J)return X.json({found:!1});let $=await dY().db.selectFrom("organization").select(["name","slug"]).where("id","=",J.organizationId).executeTakeFirst();return X.json({found:!0,autoJoinEnabled:J.autoJoinEnabled,organization:$?{name:$.name,slug:$.slug}:null})}catch(Q){return console.error("[Auth] Domain lookup failed:",Q),X.json({success:!1,error:"Domain lookup failed"},500)}});$J1.post("/domain-join",async(X)=>{let Y=await L7.api.getSession({headers:X.req.raw.headers});if(!Y?.user)return X.json({success:!1,error:"Authentication required"},401);if(!Y.user.emailVerified)return X.json({success:!1,error:"Email must be verified to join"},403);let G=Y.user.email?.split("@")[1]?.toLowerCase();if(!G||xq.has(G))return X.json({success:!1,error:"Generic email domains cannot auto-join"},403);try{let J=await new ED(dY().db).getByDomain(G);if(!J||!J.autoJoinEnabled)return X.json({success:!1,error:"Auto-join is not available for this domain"},403);let $=await dY().db.selectFrom("organization").select(["id","slug"]).where("id","=",J.organizationId).executeTakeFirst();if(!$)return X.json({success:!1,error:"Organization not found"},404);try{await L7.api.addMember({body:{userId:Y.user.id,role:"user",organizationId:$.id}})}catch(Z){if(!(Z instanceof Error?Z.message.toLowerCase():"").includes("already a member"))return console.error("[Auth] Domain join addMember failed:",Z),X.json({success:!1,error:"Failed to join organization"},500)}return A6.capture({distinctId:Y.user.id,event:"organization_domain_joined",groups:{organization:$.id},properties:{organization_id:$.id,organization_slug:$.slug,email_domain:G}}),X.json({success:!0,slug:$.slug})}catch(Q){return A6.captureException(Q,Y.user.id),console.error("[Auth] Domain join failed:",Q),X.json({success:!1,error:"Failed to join organization"},500)}});$J1.post("/domain-setup",async(X)=>{let Y=await L7.api.getSession({headers:X.req.raw.headers});if(!Y?.user)return X.json({success:!1,error:"Authentication required"},401);if(!Y.user.emailVerified)return X.json({success:!1,error:"Email must be verified"},403);let G=Y.user.email?.split("@")[1]?.toLowerCase();if(!G||xq.has(G))return X.json({success:!1,error:"Corporate email required"},403);try{let Q=dY().db,J=new ED(Q),$=await J.getByDomain(G);if($){let N=await Q.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.slug"]).where("member.userId","=",Y.user.id).where("member.organizationId","=",$.organizationId).executeTakeFirst();if(N)return X.json({success:!0,slug:N.slug,alreadyExists:!0});return X.json({success:!1,error:"This domain is already claimed. Ask an admin for an invitation."},403)}let Z=G.split(".")[0]??G,W=Z.charAt(0).toUpperCase()+Z.slice(1),K=Z.toLowerCase().replace(/[^a-z0-9-]/g,""),H=null;for(let O=0;O<3;O++){let z=O===0?"":`-${Math.random().toString(36).slice(2,6)}`,w=O===0?W:`${W}${z}`,E=`${K}${z}`;try{H=await L7.api.createOrganization({body:{name:w,slug:E,userId:Y.user.id}});break}catch(P){if(!(P instanceof Error&&("body"in P)&&P.body?.code==="ORGANIZATION_ALREADY_EXISTS")||O===2)throw P}}if(!H?.id)throw Error("Failed to create organization");let U=H.id;try{await J.setDomain(U,G,!0)}catch(N){if(N instanceof Error&&N.message.includes("already claimed")){try{await L7.api.deleteOrganization({headers:X.req.raw.headers,body:{organizationId:U}})}catch{console.error("[Auth] Failed to clean up orphaned org after domain race:",U)}return X.json({success:!1,error:"This domain was just claimed by another user. Please refresh and try again."},409)}throw N}let B=!1;try{let N=h4().firecrawlApiKey;if(N){let O=await YV1(G,N,W);if(O){let z=new D71(dY().db),w=await z.create(U,O);await z.setDefault(w.id,U),B=!0;let E=O.favicon??O.logo??null,P={};if(O.name!==W)P.name=O.name;if(E)P.logo=E;if(Object.keys(P).length>0)await L7.api.updateOrganization({headers:X.req.raw.headers,body:{organizationId:U,data:P}})}}}catch(N){console.error("[Auth] Brand extraction failed (non-fatal):",N)}return A6.identify({distinctId:Y.user.id,properties:{email:Y.user.email,$set:{email:Y.user.email},$set_once:{first_organization_created_at:new Date().toISOString()}}}),A6.groupIdentify({groupType:"organization",groupKey:U,properties:{name:H.slug??K,slug:H.slug??K,email_domain:G,brand_extracted:B,created_at:new Date().toISOString()}}),A6.capture({distinctId:Y.user.id,event:"organization_created",groups:{organization:U},properties:{organization_id:U,organization_slug:H.slug??K,email_domain:G,brand_extracted:B}}),X.json({success:!0,slug:H.slug??K,brandExtracted:B})}catch(Q){return A6.captureException(Q,Y.user?.id),console.error("[Auth] Domain setup failed:",Q),X.json({success:!1,error:"Failed to set up organization"},500)}});s08=$J1});function pi5(X){X.get("/status",async(Y)=>{let G=Y.get("meshContext");if(!G.auth.user)return Y.json({error:"Authentication required"},401);let Q=G.organization?.id;if(!Q)return Y.json({error:"Organization context required"},400);if(!await $S0(G,G.auth.user.id,Q))return Y.json({error:"Not a member of this organization"},403);let $=await G.storage.orgSsoConfig.getByOrgId(Q);if(!$||!$.enforced)return Y.json({ssoRequired:!1});let Z=await G.storage.orgSsoSessions.isValid(G.auth.user.id,Q);return Y.json({ssoRequired:!0,authenticated:Z,issuer:$.issuer,domain:$.domain})}),X.get("/authorize",async(Y)=>{let G=Y.get("meshContext");if(!G.auth.user)return Y.json({error:"Authentication required"},401);let Q=G.organization?.id;if(!Q)return Y.json({error:"Organization context required"},400);if(!await $S0(G,G.auth.user.id,Q))return Y.json({error:"Not a member of this organization"},403);let $=await G.storage.orgSsoConfig.getByOrgId(Q);if(!$)return Y.json({error:"SSO not configured for this organization"},404);let Z=await ZS0($.issuer,$.discoveryEndpoint),W=ni5(),K=await ti5(W),H=crypto.randomUUID(),U=JSON.stringify({state:H,codeVerifier:W,orgId:Q,userId:G.auth.user.id});G$0(Y,"org_sso_state",U,{httpOnly:!0,secure:!0,sameSite:"Lax",path:"/api/org-sso/callback",maxAge:600});let B=new URLSearchParams({response_type:"code",client_id:$.clientId,redirect_uri:`${G.baseUrl}/api/org-sso/callback`,scope:$.scopes.join(" "),state:H,code_challenge:K,code_challenge_method:"S256"}),N=`${Z.authorization_endpoint}?${B.toString()}`;return Y.redirect(N)}),X.get("/callback",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.query("code"),J=Y.req.query("state"),$=Y.req.query("error");if($)return Y.redirect(`/?sso_error=${encodeURIComponent($)}`);if(!Q||!J)return Y.redirect("/?sso_error=missing_code_or_state");let Z=wD1(Y,"org_sso_state");if(!Z)return Y.redirect("/?sso_error=state_expired");G$0(Y,"org_sso_state","",{httpOnly:!0,secure:!0,sameSite:"Lax",path:"/api/org-sso/callback",maxAge:0});let W;try{W=JSON.parse(Z)}catch{return Y.redirect("/?sso_error=invalid_state")}if(W.state!==J)return Y.redirect("/?sso_error=state_mismatch");if(!G.auth.user||G.auth.user.id!==W.userId)return Y.redirect("/?sso_error=session_expired");let K=await G.storage.orgSsoConfig.getByOrgId(W.orgId);if(!K)return Y.redirect("/?sso_error=sso_not_configured");let H=await ZS0(K.issuer,K.discoveryEndpoint),U=await fetch(H.token_endpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",code:Q,redirect_uri:`${G.baseUrl}/api/org-sso/callback`,client_id:K.clientId,client_secret:K.clientSecret,code_verifier:W.codeVerifier})});if(!U.ok)return console.error("[org-sso] Token exchange failed:",await U.text()),Y.redirect("/?sso_error=token_exchange_failed");let B=await U.json();if(!B.id_token)return Y.redirect("/?sso_error=no_id_token");try{let z=YV(new URL(H.jwks_uri)),{payload:w}=await kX(B.id_token,z,{issuer:K.issuer,audience:K.clientId}),E=w.email?.toLowerCase(),P=G.auth.user.email?.toLowerCase();if(!E||E!==P)return console.error(`[org-sso] Email mismatch: token=${E}, user=${P}`),Y.redirect("/?sso_error=email_mismatch")}catch(z){return console.error("[org-sso] ID token verification failed:",z),Y.redirect("/?sso_error=token_verification_failed")}await G.storage.orgSsoSessions.upsert(G.auth.user.id,W.orgId);let N=await $S0(G,G.auth.user.id,W.orgId),O=N?.orgSlug?`/${N.orgSlug}`:"/";return Y.redirect(O)}),X.get("/config",async(Y)=>{let G=Y.get("meshContext");if(!G.auth.user)return Y.json({error:"Authentication required"},401);let Q=G.organization?.id;if(!Q)return Y.json({error:"Organization context required"},400);if(!ri5(G))return Y.json({error:"Admin role required"},403);let J=await G.storage.orgSsoConfig.getByOrgId(Q);if(!J)return Y.json({configured:!1});return Y.json({configured:!0,config:G.storage.orgSsoConfig.toPublic(J)})}),X.post("/config",async(Y)=>{let G=Y.get("meshContext");if(!G.auth.user)return Y.json({error:"Authentication required"},401);let Q=G.organization?.id;if(!Q)return Y.json({error:"Organization context required"},400);if(!WS0(G))return Y.json({error:"Owner role required"},403);let J=await Y.req.json();if(!J.issuer||!J.clientId||!J.domain)return Y.json({error:"issuer, clientId, and domain are required"},400);let $=await G.storage.orgSsoConfig.getByOrgId(Q);if(!$&&!J.clientSecret)return Y.json({error:"clientSecret is required for initial SSO setup"},400);let Z=J.clientSecret||$?.clientSecret||"";try{await ZS0(J.issuer,J.discoveryEndpoint)}catch(K){return Y.json({error:"Failed to reach OIDC discovery endpoint",details:K instanceof Error?K.message:String(K)},400)}let W=await G.storage.orgSsoConfig.upsert(Q,{issuer:J.issuer,clientId:J.clientId,clientSecret:Z,discoveryEndpoint:J.discoveryEndpoint,scopes:J.scopes,domain:J.domain,enforced:J.enforced});return Y.json({success:!0,config:G.storage.orgSsoConfig.toPublic(W)})}),X.post("/config/enforce",async(Y)=>{let G=Y.get("meshContext");if(!G.auth.user)return Y.json({error:"Authentication required"},401);let Q=G.organization?.id;if(!Q)return Y.json({error:"Organization context required"},400);if(!WS0(G))return Y.json({error:"Owner role required"},403);let J=await Y.req.json();if(!await G.storage.orgSsoConfig.getByOrgId(Q))return Y.json({error:"SSO must be configured before enforcing"},400);return await G.storage.orgSsoConfig.setEnforced(Q,J.enforced),Y.json({success:!0,enforced:J.enforced})}),X.delete("/config",async(Y)=>{let G=Y.get("meshContext");if(!G.auth.user)return Y.json({error:"Authentication required"},401);let Q=G.organization?.id;if(!Q)return Y.json({error:"Organization context required"},400);if(!WS0(G))return Y.json({error:"Owner role required"},403);return await G.storage.orgSsoConfig.delete(Q),Y.json({success:!0})})}function cu1(X){let Y;try{Y=new URL(X)}catch{throw Error(`Invalid URL: ${X}`)}let G=h4().localMode;if(Y.protocol!=="https:"&&!(G&&Y.protocol==="http:"))throw Error(`OIDC URL must use HTTPS: ${X}`);let Q=Y.hostname,J=[/^127\./,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^0\./,/^\[::1\]$/,/^\[fd/,/^\[fe80:/,/^localhost$/i],$=/^127\.|^\[::1\]$|^localhost$/i.test(Q);if(G&&$)return;for(let Z of J)if(Z.test(Q))throw Error(`OIDC URL must not point to a private network address: ${Q}`)}async function ZS0(X,Y){let G=Y||X,Q=e08.get(G);if(Q&&Q.expiresAt>Date.now())return Q.doc;let J=Y||`${X.replace(/\/$/,"")}/.well-known/openid-configuration`;cu1(J);let $=await fetch(J);if(!$.ok)throw Error(`OIDC discovery failed: ${$.status} ${$.statusText}`);let Z=await $.json();if(!Z.authorization_endpoint||!Z.token_endpoint||!Z.jwks_uri)throw Error("OIDC discovery document missing required endpoints");return cu1(Z.authorization_endpoint),cu1(Z.token_endpoint),cu1(Z.jwks_uri),e08.set(G,{doc:Z,expiresAt:Date.now()+3600000}),Z}function ni5(){let X=new Uint8Array(32);return crypto.getRandomValues(X),btoa(String.fromCharCode(...X)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}async function ti5(X){let G=new TextEncoder().encode(X),Q=await crypto.subtle.digest("SHA-256",G);return btoa(String.fromCharCode(...new Uint8Array(Q))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}async function $S0(X,Y,G){return await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.slug as orgSlug","member.role"]).where("member.userId","=",Y).where("member.organizationId","=",G).executeTakeFirst()??null}function ri5(X){let Y=X.auth.user?.role;if(!Y)return!1;return Fr.includes(Y)}function WS0(X){return X.auth.user?.role==="owner"}var iu1=()=>{let X=new w6;return pi5(X),X},e08;var KS0=D(()=>{jY();Q$0();IJ();e5();L71();e08=new Map});function X48(X){let Y=X.filter((Q)=>Q.role==="system"),G=X.find((Q)=>Q.role!=="system");return{systemMessages:Y,requestMessage:G}}function ai5(X){let Y=!1,G=X.map((Q)=>{if(Q.role!=="assistant")return Q;if(!Q.parts.some(($)=>("state"in $)&&$.state==="approval-requested"))return Q;return Y=!0,{...Q,parts:Q.parts.map(($)=>{if(!("state"in $)||$.state!=="approval-requested"||!("approval"in $)||!$.approval)return $;return{...$,state:"output-denied",approval:{...$.approval,approved:!1,reason:"User sent a new message without approving this tool call."}}})}});return Y?G:X}function oi5(X){let[Y,G]=X.reduce((Q,J)=>{if(J.role==="system")Q[0].push(J);else Q[1].push(J);return Q},[[],[]]);return{systemMessages:Y,messages:G}}async function si5(X,Y){return await X.loadHistory(Y)}function ei5(X,Y){let G=X.filter(($)=>$.parts&&$.parts.length>0);if(!Y)return G;let Q=G.findIndex(($)=>$.id===Y.id);return Q>=0?[...G.slice(0,Q),Y]:[...G,Y]}async function Y48(X,Y,G,Q){let J=await si5(X,Q),$=ei5(J,Y);return[...G,...$]}async function G48(X,Y){let G=X.filter((U)=>U.role!=="assistant"||U.parts&&U.parts.length>0),Q=await BQ1({messages:G}),J=ai5(Q),$=await UQ1(J,{tools:Y.tools,ignoreIncompleteToolCalls:!0}),{systemMessages:Z,messages:W}=oi5($),H=XV0({messages:W,reasoning:"all",emptyMessages:"remove",toolCalls:"none"}).map((U)=>{if(U.role!=="assistant")return U;let B=Array.isArray(U.content)?U.content.filter((N)=>N.type!=="reasoning"&&N.type!=="thinking"&&N.type!=="redacted-reasoning").map((N)=>{let O=N;if("providerOptions"in O||"providerMetadata"in O){let{providerOptions:z,providerMetadata:w,...E}=O;if(O.type==="tool-call"){let P=w?.google,q=z?.google;return{...E,...P?{providerMetadata:{google:P}}:{},...q?{providerOptions:{google:q}}:{}}}return E}return N}):U.content;return{...U,content:Array.isArray(B)&&B.length===0?[{type:"text",text:""}]:B,providerOptions:void 0,providerMetadata:void 0}});return{systemMessages:Z,messages:H,originalMessages:Q}}var HS0=D(()=>{TY()});function u3(X){return`mesh-storage://${X}`}function Hl(X){if(!X.startsWith("mesh-storage://"))return null;return X.slice(15)}function FS0(){return/mesh-storage:\/\/([^\s"'<>[\]]+)/g}function Xp5(X,Y,G){return`${X}/api/${Y}/files/${G}`}function Gp5(X){return X.type==="file"&&"mediaType"in X&&typeof X.mediaType==="string"&&Yp5.has(X.mediaType)}function Q48(X){let Y=X.match(/^data:([^;]+);base64,(.+)$/s);if(!Y)return null;let[,G,Q]=Y;try{let J=atob(Q),$=new Uint8Array(J.length);for(let Z=0;Z<J.length;Z++)$[Z]=J.charCodeAt(Z);return{mimeType:G,bytes:$}}catch{return null}}function J48(X){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/svg+xml":"svg","application/pdf":"pdf","text/plain":"txt","text/html":"html","application/json":"json"}[X]??"bin"}async function Z48(X,Y,G,Q){if(!Q.objectStorage)return null;try{return await Q.objectStorage.put(Y,X,{contentType:G}),Y}catch(J){return console.error("[file-materializer] Failed to upload file:",J),null}}async function Fl(X,Y){if(!Y.objectStorage)return null;try{return await Y.objectStorage.presignedGetUrl(X,Qp5)}catch(G){return console.error("[file-materializer] Failed to generate presigned URL:",G),null}}async function $48(X,Y){if(!Y.organization)return X;let G=Y.organization.slug;if(!G)return X;let Q=X.findLastIndex((z)=>z.role==="user");if(Q===-1)return X;let J=X[Q],$=J.parts.filter((z)=>z.type==="file"&&("url"in z)&&typeof z.url==="string"&&z.url.startsWith("data:"));if($.length===0)return X;let W=(await Promise.all($.map(async(z)=>{if(z.type!=="file"||!("url"in z)||typeof z.url!=="string")return null;let w=Q48(z.url);if(!w)return null;let E=J48(w.mimeType),P=`chat-uploads/${crypto.randomUUID()}.${E}`,q=await Z48(w.bytes,P,w.mimeType,Y);if(!q)return null;let V="filename"in z&&typeof z.filename==="string"?z.filename:P;return{dataUrl:z.url,meshStorageUrl:u3(q),redirectUrl:Xp5(Y.baseUrl,G,q),filename:V}}))).filter((z)=>z!==null);if(W.length===0)return X;let H=`[Uploaded files \u2014 use these URLs when calling tools]
|
|
6695
6695
|
${W.map((z)=>`- ${z.filename}: ${z.meshStorageUrl}`).join(`
|
|
6696
6696
|
`)}`,U=new Map(W.map((z)=>[z.dataUrl,z.meshStorageUrl])),B=J.parts.map((z)=>{if(z.type!=="file"||!("url"in z)||typeof z.url!=="string")return z;let w=U.get(z.url);if(!w)return z;return{...z,url:w}}),N=B.findIndex((z)=>z.type==="text"),O;if(N!==-1)O=B.map((z,w)=>{if(w!==N||z.type!=="text")return z;return{...z,text:`${H}
|
|
6697
6697
|
|
|
@@ -6725,7 +6725,7 @@ Preview:
|
|
|
6725
6725
|
${E}`}}return{contents:[{uri:J,mimeType:N.contentType||"text/markdown",text:O}]}}catch(N){return{result:`Failed to read resource: ${N instanceof Error?N.message:String(N)}`}}}let W=(await Y.readResource({uri:J})).contents;if(!W||W.length===0)return{result:"Resource returned no content."};let K=W.map((B)=>{if("text"in B&&B.text!==void 0)return{uri:B.uri,mimeType:B.mimeType,text:B.text};if("blob"in B&&B.blob!==void 0)return{uri:B.uri,mimeType:B.mimeType,blob:`[binary data, ${B.blob.length} bytes base64]`};return{uri:B.uri,mimeType:B.mimeType}}),H=JSON.stringify(K,null,2),U=AW(H);if(U>JO){let B=`resource_${Date.now()}`;G.set(B,H);let N=sJ(H);return{result:`Resource content too large (${U} tokens). Use read_tool_output with tool_call_id "${B}" to extract specific data.
|
|
6726
6726
|
|
|
6727
6727
|
Preview:
|
|
6728
|
-
${N}`}}return{contents:K}}})}var T48=D(()=>{TY();F0();Iw()});function NJ1(X,Y){let G;try{G=typeof X==="string"?X:JSON.stringify(X,null,2)}catch{G=String(X)}let Q=AW(G);if(Q>JO){let J=`vm_${Date.now()}`;Y.set(J,G);let $=sJ(G);return{truncated:!0,message:`Output too large (${Q} tokens). Use read_tool_output with tool_call_id "${J}" to extract specific data.`,preview:$}}return X}var I48=D(()=>{Iw()});function x48(){return"Execute a shell command in the VM's project directory. Working directory is the project root. Timeout default 30s, max 2min.\n\nPre-installed skills live at `/mnt/skills/public/<name>/SKILL.md`. Run `ls /mnt/skills/public/` for the index and `cat /mnt/skills/public/<name>/SKILL.md` before using one. Skills cover common file operations: pptx (PowerPoint), docx (Word), xlsx (Excel), pdf, file-reading (router).\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 j48,V48,M48,R48,S48,k48,C48,v48,_48,f48="Write content to a file in the VM's project directory. Creates parent directories if needed. Overwrites existing files entirely.",b48="Perform exact string replacement in a file in the VM. old_string must be unique in the file unless replace_all is true.",y48="Search file contents in the VM using ripgrep. Supports regex patterns, file type filtering via glob, and context lines.",h48="Find files by name pattern in the VM's project directory. Uses ripgrep for gitignore-aware matching. Returns relative file paths.",g48,u48="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.",jw;var l48=D(()=>{F0();j48=F.object({path:F.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:F.number().optional().describe("Starting line number for text files (1-based, default 1)"),limit:F.number().optional().describe("Max lines to return for text files (default 2000)")}),V48=F.object({path:F.string().describe("File path relative to project root"),content:F.string().describe("The full file content to write")}),M48=F.object({path:F.string().describe("File path relative to project root"),old_string:F.string().describe("The exact text to find and replace"),new_string:F.string().describe("The replacement text (must differ from old_string)"),replace_all:F.boolean().optional().describe("Replace all occurrences (default false)")}),R48=F.object({pattern:F.string().describe("Regex pattern to search for"),path:F.string().optional().describe("Directory or file to search in (default: project root)"),glob:F.string().optional().describe("Glob pattern to filter files (e.g. '*.ts', '*.{js,jsx}')"),context:F.number().optional().describe("Lines of context around matches"),ignore_case:F.boolean().optional().describe("Case-insensitive search"),output_mode:F.enum(["content","files","count"]).optional().describe("Output mode (default: 'files')"),limit:F.number().optional().describe("Max result lines (default 250)")}),S48=F.object({pattern:F.string().describe("Glob pattern to match files (e.g. '**/*.ts', 'src/**/*.test.tsx')"),path:F.string().optional().describe("Directory to search in (default: project root)")}),k48=F.object({command:F.string().describe("The bash command to execute"),timeout:F.number().optional().describe("Timeout in milliseconds (default 30000, max 120000)")}),C48=F.object({url:F.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:F.string().describe("Destination path on the sandbox FS (relative to project root). Parent directories are created as needed.")}),v48=F.object({source:F.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:F.string().optional().describe("Filename to surface in the chat UI (default: basename of source). Cannot contain slashes.")}),_48="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).";g48="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.",jw={read:!1,write:!0,edit:!0,grep:!1,glob:!1,bash:!0,copy_to_sandbox:!1,share_with_user:!1}});import Pp5 from"path";async function qp5(X,Y){if(X.startsWith("https://")||X.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 G=X.startsWith(m48)?X.slice(m48.length):X;if(!G||G.startsWith("/")||G.includes(".."))throw Error(`Invalid source: ${X}`);let Q=Y.objectStorage;if(!Q)throw Error("Object storage is not configured for this org");return Q.presignedGetUrl(G)}function Ap5(X){let Y=X.trim();if(!Y)return null;if(Y.includes("/")||Y.includes("\\"))return null;if(Y==="."||Y===".."||Y.includes(".."))return null;if(Y.length>255)return null;return Y}function Tp5(X,Y,G){let Q=G.split("/").map(encodeURIComponent).join("/");return`${X}/api/${encodeURIComponent(Y)}/files/${Q}`}async function Ip5(X,Y,G,Q,J="POST"){let $;try{let K={method:J,headers:new Headers({"content-type":"application/json"}),body:null};if(J!=="GET"&&Q!==null)K.body=Buffer.from(JSON.stringify(Q),"utf-8").toString("base64");$=await X.proxyDaemonRequest(Y,G,K)}catch{throw Error("The sandbox is not running. Ask the user to start it by clicking the server button (left side of the header bar).")}let Z=await $.text(),W;try{W=JSON.parse(Z)}catch{console.error("[vm-tools] Failed to parse JSON response runner=%s path=%s status=%d rawText=%s",X.kind,G,$.status,Z.slice(0,2000));let K=$.status>=500?" (server error)":$.status===0?" (no response)":"";throw Error(`Daemon ${G} returned invalid JSON (HTTP ${$.status}${K}): ${Z.slice(0,800)}`)}if(!$.ok)throw console.error("[vm-tools] Non-OK response runner=%s path=%s status=%d body=%s",X.kind,G,$.status,Z.slice(0,2000)),Error(W.error??`Daemon ${G} failed (${$.status})`);return W}function d48(X){let{runner:Y,ensureHandle:G,toolOutputMap:Q,needsApproval:J,pendingImages:$,ctx:Z,threadId:W}=X,K=(q)=>q?J:!1,H=async(q,V,M="POST")=>{let j=await G();return Ip5(Y,j,q,V,M)},U=X8({needsApproval:K(jw.read),description:_48,inputSchema:n1(j48),execute:async(q)=>{let V=await H("/_decopilot_vm/read",q);if(V.kind==="image")return $.push({url:`data:${V.mediaType};base64,${V.base64}`,mediaType:V.mediaType,label:`[Image at ${q.path}]`}),{kind:"image",path:q.path,mediaType:V.mediaType,size:V.size,message:"Image attached below."};return NJ1(V,Q)}}),B=X8({needsApproval:K(jw.write),description:f48,inputSchema:n1(V48),execute:async(q)=>H("/_decopilot_vm/write",q)}),N=X8({needsApproval:K(jw.edit),description:b48,inputSchema:n1(M48),execute:async(q)=>H("/_decopilot_vm/edit",q)}),O=X8({needsApproval:K(jw.grep),description:y48,inputSchema:n1(R48),execute:async(q)=>{let V=await H("/_decopilot_vm/grep",q);return NJ1(V,Q)}}),z=X8({needsApproval:K(jw.glob),description:h48,inputSchema:n1(S48),execute:async(q)=>{let V=await H("/_decopilot_vm/glob",q);return NJ1(V,Q)}}),w=X8({needsApproval:K(jw.bash),description:x48(),inputSchema:n1(k48),execute:async(q)=>{let V=await H("/_decopilot_vm/bash",q);return NJ1(V,Q)}}),E=X8({needsApproval:K(jw.copy_to_sandbox),description:g48,inputSchema:n1(C48),execute:async(q)=>{let V=await qp5(q.url,Z);return await H("/_decopilot_vm/write_from_url",{url:V,path:q.target})}}),P=X8({needsApproval:K(jw.share_with_user),description:u48,inputSchema:n1(v48),execute:async(q)=>{let V=Z.organization?.id,M=Z.objectStorage;if(!V||!M)throw Error("Object storage is not configured for this org");let j=Ap5(q.name??Pp5.basename(q.source));if(!j)throw Error(`Invalid filename: ${q.name??q.source}`);let R=`model-outputs/${W}/${j}`,C=await M.presignedPutUrl(R);return await H("/_decopilot_vm/upload_to_url",{path:q.source,url:C}),{key:R,filename:j,downloadUrl:Tp5(Z.baseUrl,V,R)}}});return{read:U,write:B,edit:N,grep:O,glob:z,bash:w,copy_to_sandbox:E,share_with_user:P}}var m48="mesh-storage://";var c48=D(()=>{TY();I48();l48()});function Sp5(X){let Y=[Rp5];if(X?.trim())Y.push(X);return Y}function i48(X,Y,G){let{provider:Q,organization:J,models:$,needsApproval:Z}=Y;return X8({description:Vp5,inputSchema:n1(jp5),needsApproval:Z,execute:async function*({prompt:W,agent_id:K},{abortSignal:H,toolCallId:U}){let B=performance.now(),N=await G.storage.virtualMcps.findById(K,J.id);if(!N||N.organization_id!==J.id)throw Error("Agent not found");if(N.status!=="active")throw Error("Agent is not active");let O=await JM(N,G,"passthrough"),{tools:z}=await tu1(O,new Map,X,"auto",{disableOutputTruncation:!0}),w=Object.fromEntries(Object.entries(z).filter(([j])=>!wL6.includes(j))),E=O.getInstructions(),P=Sp5(E),q=uZ0(),V=aN({model:Xl1(Q,$.thinking),system:P.map((j)=>({role:"system",content:j})),prompt:W,tools:w,abortSignal:H,stopWhen:tN(DL6),maxOutputTokens:$.thinking.limits?.maxOutputTokens??sI1,onStepFinish:({usage:j,providerMetadata:R})=>{q=lZ0(q,{...j,providerMetadata:R})},onAbort:()=>{console.error(`[subtask:${K}] Aborted`),O.close().catch(()=>{})},onError:(j)=>{console.error(`[subtask:${K}] Error`,j)}});for await(let j of oj0({stream:V.toUIMessageStream()}))yield j;let M=performance.now()-B;X.write({type:"data-tool-metadata",id:U,data:{annotations:Mp5,latencyMs:M}}),X.write({type:"data-tool-subtask-metadata",id:U,data:{usage:q,agent:K,models:$}})},toModelOutput:({output:W})=>{return{type:"text",value:W?.parts?.findLast((H)=>("type"in H)&&H.type==="text"&&("text"in H))?.text??"Subtask completed (no output)."}}})}var jp5,Vp5,Mp5,Rp5=`You are a focused subtask agent delegated a specific task by a parent agent. You are NOT the parent agent.
|
|
6728
|
+
${N}`}}return{contents:K}}})}var T48=D(()=>{TY();F0();Iw()});function NJ1(X,Y){let G;try{G=typeof X==="string"?X:JSON.stringify(X,null,2)}catch{G=String(X)}let Q=AW(G);if(Q>JO){let J=`vm_${Date.now()}`;Y.set(J,G);let $=sJ(G);return{truncated:!0,message:`Output too large (${Q} tokens). Use read_tool_output with tool_call_id "${J}" to extract specific data.`,preview:$}}return X}var I48=D(()=>{Iw()});function x48(){return"Execute a shell command in the VM's project directory. Working directory is the project root. Timeout default 30s, max 2min.\n\nPre-installed skills live at `/mnt/skills/public/<name>/SKILL.md`. Run `ls /mnt/skills/public/` for the index and `cat /mnt/skills/public/<name>/SKILL.md` before using one. Skills cover common file operations: pptx (PowerPoint), docx (Word), xlsx (Excel), pdf, file-reading (router).\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 j48,V48,M48,R48,S48,k48,C48,v48,_48,f48="Write content to a file in the VM's project directory. Creates parent directories if needed. Overwrites existing files entirely.",b48="Perform exact string replacement in a file in the VM. old_string must be unique in the file unless replace_all is true.",y48="Search file contents in the VM using ripgrep. Supports regex patterns, file type filtering via glob, and context lines.",h48="Find files by name pattern in the VM's project directory. Uses ripgrep for gitignore-aware matching. Returns relative file paths.",g48,u48="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.",jw;var l48=D(()=>{F0();j48=F.object({path:F.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:F.number().optional().describe("Starting line number for text files (1-based, default 1)"),limit:F.number().optional().describe("Max lines to return for text files (default 2000)")}),V48=F.object({path:F.string().describe("File path relative to project root"),content:F.string().describe("The full file content to write")}),M48=F.object({path:F.string().describe("File path relative to project root"),old_string:F.string().describe("The exact text to find and replace"),new_string:F.string().describe("The replacement text (must differ from old_string)"),replace_all:F.boolean().optional().describe("Replace all occurrences (default false)")}),R48=F.object({pattern:F.string().describe("Regex pattern to search for"),path:F.string().optional().describe("Directory or file to search in (default: project root)"),glob:F.string().optional().describe("Glob pattern to filter files (e.g. '*.ts', '*.{js,jsx}')"),context:F.number().optional().describe("Lines of context around matches"),ignore_case:F.boolean().optional().describe("Case-insensitive search"),output_mode:F.enum(["content","files","count"]).optional().describe("Output mode (default: 'files')"),limit:F.number().optional().describe("Max result lines (default 250)")}),S48=F.object({pattern:F.string().describe("Glob pattern to match files (e.g. '**/*.ts', 'src/**/*.test.tsx')"),path:F.string().optional().describe("Directory to search in (default: project root)")}),k48=F.object({command:F.string().describe("The bash command to execute"),timeout:F.number().optional().describe("Timeout in milliseconds (default 30000, max 120000)")}),C48=F.object({url:F.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:F.string().describe("Destination path on the sandbox FS (relative to project root). Parent directories are created as needed.")}),v48=F.object({source:F.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:F.string().optional().describe("Filename to surface in the chat UI (default: basename of source). Cannot contain slashes.")}),_48="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).";g48="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.",jw={read:!1,write:!0,edit:!0,grep:!1,glob:!1,bash:!0,copy_to_sandbox:!1,share_with_user:!1}});import Pp5 from"path";async function qp5(X,Y){if(X.startsWith("https://")||X.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 G=X.startsWith(m48)?X.slice(m48.length):X;if(!G||G.startsWith("/")||G.includes(".."))throw Error(`Invalid source: ${X}`);let Q=Y.objectStorage;if(!Q)throw Error("Object storage is not configured for this org");return Q.presignedGetUrl(G)}function Ap5(X){let Y=X.trim();if(!Y)return null;if(Y.includes("/")||Y.includes("\\"))return null;if(Y==="."||Y===".."||Y.includes(".."))return null;if(Y.length>255)return null;return Y}function Tp5(X,Y,G){let Q=G.split("/").map(encodeURIComponent).join("/");return`${X}/api/${encodeURIComponent(Y)}/files/${Q}`}async function Ip5(X,Y,G,Q,J="POST"){let $;try{let K={method:J,headers:new Headers({"content-type":"application/json"}),body:null};if(J!=="GET"&&Q!==null)K.body=Buffer.from(JSON.stringify(Q),"utf-8").toString("base64");$=await X.proxyDaemonRequest(Y,G,K)}catch{throw Error("The sandbox is not running. Ask the user to start it by clicking the server button (left side of the header bar).")}let Z=await $.text(),W;try{W=JSON.parse(Z)}catch{console.error("[vm-tools] Failed to parse JSON response runner=%s path=%s status=%d rawText=%s",X.kind,G,$.status,Z.slice(0,2000));let K=$.status>=500?" (server error)":$.status===0?" (no response)":"";throw Error(`Daemon ${G} returned invalid JSON (HTTP ${$.status}${K}): ${Z.slice(0,800)}`)}if(!$.ok)throw console.error("[vm-tools] Non-OK response runner=%s path=%s status=%d body=%s",X.kind,G,$.status,Z.slice(0,2000)),Error(W.error??`Daemon ${G} failed (${$.status})`);return W}function d48(X){let{runner:Y,ensureHandle:G,toolOutputMap:Q,needsApproval:J,pendingImages:$,ctx:Z,threadId:W}=X,K=(q)=>q?J:!1,H=async(q,V,M="POST")=>{let j=await G();return Ip5(Y,j,q,V,M)},U=X8({needsApproval:K(jw.read),description:_48,inputSchema:n1(j48),execute:async(q)=>{let V=await H("/_decopilot_vm/read",q);if(V.kind==="image")return $.push({url:`data:${V.mediaType};base64,${V.base64}`,mediaType:V.mediaType,label:`[Image at ${q.path}]`}),{kind:"image",path:q.path,mediaType:V.mediaType,size:V.size,message:"Image attached below."};return NJ1(V,Q)}}),B=X8({needsApproval:K(jw.write),description:f48,inputSchema:n1(V48),execute:async(q)=>H("/_decopilot_vm/write",q)}),N=X8({needsApproval:K(jw.edit),description:b48,inputSchema:n1(M48),execute:async(q)=>H("/_decopilot_vm/edit",q)}),O=X8({needsApproval:K(jw.grep),description:y48,inputSchema:n1(R48),execute:async(q)=>{let V=await H("/_decopilot_vm/grep",q);return NJ1(V,Q)}}),z=X8({needsApproval:K(jw.glob),description:h48,inputSchema:n1(S48),execute:async(q)=>{let V=await H("/_decopilot_vm/glob",q);return NJ1(V,Q)}}),w=X8({needsApproval:K(jw.bash),description:x48(),inputSchema:n1(k48),execute:async(q)=>{let V=await H("/_decopilot_vm/bash",q);return NJ1(V,Q)}}),E=X8({needsApproval:K(jw.copy_to_sandbox),description:g48,inputSchema:n1(C48),execute:async(q)=>{let V=await qp5(q.url,Z);return await H("/_decopilot_vm/write_from_url",{url:V,path:q.target})}}),P=X8({needsApproval:K(jw.share_with_user),description:u48,inputSchema:n1(v48),execute:async(q)=>{let V=Z.organization?.slug,M=Z.objectStorage;if(!V||!M)throw Error("Object storage is not configured for this org");let j=Ap5(q.name??Pp5.basename(q.source));if(!j)throw Error(`Invalid filename: ${q.name??q.source}`);let R=`model-outputs/${W}/${j}`,C=await M.presignedPutUrl(R);return await H("/_decopilot_vm/upload_to_url",{path:q.source,url:C}),{key:R,filename:j,downloadUrl:Tp5(Z.baseUrl,V,R)}}});return{read:U,write:B,edit:N,grep:O,glob:z,bash:w,copy_to_sandbox:E,share_with_user:P}}var m48="mesh-storage://";var c48=D(()=>{TY();I48();l48()});function Sp5(X){let Y=[Rp5];if(X?.trim())Y.push(X);return Y}function i48(X,Y,G){let{provider:Q,organization:J,models:$,needsApproval:Z}=Y;return X8({description:Vp5,inputSchema:n1(jp5),needsApproval:Z,execute:async function*({prompt:W,agent_id:K},{abortSignal:H,toolCallId:U}){let B=performance.now(),N=await G.storage.virtualMcps.findById(K,J.id);if(!N||N.organization_id!==J.id)throw Error("Agent not found");if(N.status!=="active")throw Error("Agent is not active");let O=await JM(N,G,"passthrough"),{tools:z}=await tu1(O,new Map,X,"auto",{disableOutputTruncation:!0}),w=Object.fromEntries(Object.entries(z).filter(([j])=>!wL6.includes(j))),E=O.getInstructions(),P=Sp5(E),q=uZ0(),V=aN({model:Xl1(Q,$.thinking),system:P.map((j)=>({role:"system",content:j})),prompt:W,tools:w,abortSignal:H,stopWhen:tN(DL6),maxOutputTokens:$.thinking.limits?.maxOutputTokens??sI1,onStepFinish:({usage:j,providerMetadata:R})=>{q=lZ0(q,{...j,providerMetadata:R})},onAbort:()=>{console.error(`[subtask:${K}] Aborted`),O.close().catch(()=>{})},onError:(j)=>{console.error(`[subtask:${K}] Error`,j)}});for await(let j of oj0({stream:V.toUIMessageStream()}))yield j;let M=performance.now()-B;X.write({type:"data-tool-metadata",id:U,data:{annotations:Mp5,latencyMs:M}}),X.write({type:"data-tool-subtask-metadata",id:U,data:{usage:q,agent:K,models:$}})},toModelOutput:({output:W})=>{return{type:"text",value:W?.parts?.findLast((H)=>("type"in H)&&H.type==="text"&&("text"in H))?.text??"Subtask completed (no output)."}}})}var jp5,Vp5,Mp5,Rp5=`You are a focused subtask agent delegated a specific task by a parent agent. You are NOT the parent agent.
|
|
6729
6729
|
|
|
6730
6730
|
## Rules (non-negotiable)
|
|
6731
6731
|
|
|
@@ -6827,7 +6827,7 @@ ${W.map(([H,{name:U,totalCount:B,preview:N}])=>{let O=B-N.length,z=N.join(", ")+
|
|
|
6827
6827
|
<available-prompts>
|
|
6828
6828
|
${Y.map((Q)=>{let J=`${Q.name}|${Q.description??""}`;if(Q.arguments&&Q.arguments.length>0){let $=Q.arguments.map((Z)=>Z.required?`${Z.name} (required)`:Z.name).join(", ");J+=`|args: ${$}`}return J}).join(`
|
|
6829
6829
|
`)}
|
|
6830
|
-
</available-prompts>`}async function Ql1(X){let Y=X.stream.getReader();while(!0){let{done:G}=await Y.read();if(G)break}}var Gl1,Zn5=5;var OJ1=D(()=>{OY();kG1();z48();D48();ZX();TY();F0();H68();U68();d2();HS0();WJ1();HJ1();N68();w68();cG1();P68();hj1();cj1();LD();TW();Yl1();QO();Gl1=X1(b0(),1)});async function q68(X,Y,G,Q){let{storage:J,streamBuffer:$,sseHub:Z}=Q,K=(await J.get(X,Y))?.virtual_mcp_id??void 0;await J.update(X,Y,{status:G,run_owner_pod:null,run_config:null,run_started_at:null}),$.purge(X),Z.emit(Y,Uj(X,G,K)),Z.emit(Y,F61(X,G))}async function Hn5(X,Y){let{storage:G,streamBuffer:Q,sseHub:J}=Y;switch(X.type){case"RUN_STARTED":{if(!await G.claimRunStart(X.taskId,X.orgId,{status:"in_progress",run_owner_pod:X.podId??null,run_config:X.runConfig??null,run_started_at:X.podId?new Date().toISOString():null},X.podId??null))throw new Jl1(X.taskId);let Z=await G.get(X.taskId,X.orgId);J.emit(X.orgId,Uj(X.taskId,"in_progress",Z?.virtual_mcp_id??void 0));return}case"RUN_RESUMED":{await G.update(X.taskId,X.orgId,{run_owner_pod:X.podId,run_started_at:new Date().toISOString()});let $=await G.get(X.taskId,X.orgId);J.emit(X.orgId,Uj(X.taskId,"in_progress",$?.virtual_mcp_id??void 0));return}case"STEP_COMPLETED":J.emit(X.orgId,GD1(X.taskId,X.stepCount));return;case"RUN_COMPLETED":await q68(X.taskId,X.orgId,"completed",Y);return;case"RUN_REQUIRES_ACTION":await q68(X.taskId,X.orgId,"requires_action",Y);return;case"RUN_FAILED":{if(X.reason==="ghost"){if(!await G.forceFailIfInProgress(X.taskId,X.orgId))return;await G.update(X.taskId,X.orgId,{run_owner_pod:null,run_config:null,run_started_at:null})}else await G.update(X.taskId,X.orgId,{status:"failed",run_owner_pod:null,run_config:null,run_started_at:null});Q.purge(X.taskId);let $=await G.get(X.taskId,X.orgId);J.emit(X.orgId,Uj(X.taskId,"failed",$?.virtual_mcp_id??void 0)),J.emit(X.orgId,F61(X.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function A68(X,Y){for(let{event:G}of X)await Hn5(G,Y)}var Jl1;var PS0=D(()=>{ZX();Jl1=class Jl1 extends Error{constructor(X){super(`Failed to claim run for thread ${X} \u2014 already running on another pod`);this.name="RunClaimError"}}});async function T68(X){let Y=pu1(X),G=await X.req.json(),Q=N48.safeParse(G);if(!Q.success)throw new B9(400,{message:Q.error.message});let{messages:J,...$}=Q.data,Z=J,{systemMessages:W,requestMessage:K}=X48(Z);return{organization:Y,systemMessages:W,requestMessage:K,...$}}async function I68(X,Y){let G=await X.storage.aiProviderKeys.list({organizationId:Y});if(G.length===0)throw new B9(400,{message:"No AI provider credentials configured for this organization"});let Q=G[0],J=await X.aiProviders.listModels(Q.id,Y);if(J.length===0)throw new B9(400,{message:"No models available from the configured AI provider"});let $=J[0];return{credentialId:Q.id,thinking:{id:$.modelId,title:$.title}}}function qS0(X){let{cancelBroadcast:Y,streamBuffer:G,runRegistry:Q,threadStorage:J}=X,$=new w6;return $.get("/:org/decopilot/allowed-models",async(Z)=>{try{let W=Z.get("meshContext"),K=pu1(Z),H=W.auth.user?.role,U=await LU(W.db,K.id,H);return Z.json(gj6(U))}catch(W){if(console.error("[decopilot:allowed-models] Error",W),W instanceof B9)return Z.json({error:W.message},W.status);return Z.json({error:W instanceof Error?W.message:"Internal error"},500)}}),$.post("/:org/decopilot/stream",async(Z)=>{try{let W=Z.get("meshContext"),{organization:K,models:H,agent:U,systemMessages:B,requestMessage:N,temperature:O,memory:z,thread_id:w,branch:E,toolApprovalLevel:P,mode:q}=await T68(Z),V=W.auth?.user?.id;if(!V)throw new B9(401,{message:"User ID is required"});let M=H??await I68(W,K.id),j=await LU(W.db,K.id,W.auth.user?.role);if(j!==void 0&&!mq(j,M.credentialId,M.thinking.id))throw new B9(403,{message:"Model not allowed for your role"});let R=z?.windowSize??m2,C=w??z?.thread_id,_=await Vw({messages:[...B,N],models:M,agent:U,temperature:O,toolApprovalLevel:P,mode:q,organizationId:K.id,userId:V,taskId:C,windowSize:R,branch:E??null},W,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return A6.capture({distinctId:V,event:"chat_message_started",groups:{organization:K.id},properties:{organization_id:K.id,agent_id:U,mode:q,thread_id:C,credential_id:M.credentialId}}),tq({stream:_.stream,consumeSseStream:rN})}catch(W){if(console.error("[decopilot:stream] Error",W),W instanceof B9)return Z.json({error:W.message},W.status);if(W instanceof Error&&W.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:W.message}),Z.json({error:"Request aborted"},400);return A6.captureException(W),console.error("[decopilot:stream] Failed",{error:W instanceof Error?W.message:JSON.stringify(W),stack:W instanceof Error?W.stack:void 0}),Z.json({error:W instanceof Error?W.message:JSON.stringify(W)},500)}}),$.post("/:org/decopilot/runtime/stream",async(Z)=>{try{let W=Z.get("meshContext"),{organization:K,models:H,agent:U,systemMessages:B,requestMessage:N,temperature:O,memory:z,thread_id:w,branch:E,toolApprovalLevel:P,mode:q}=await T68(Z),V=W.auth?.user?.id;if(!V)throw new B9(401,{message:"User ID is required"});let M=H??await I68(W,K.id),j=await LU(W.db,K.id,W.auth.user?.role);if(j!==void 0&&!mq(j,M.credentialId,M.thinking.id))throw new B9(403,{message:"Model not allowed for your role"});let R=z?.windowSize??m2,C=w??z?.thread_id,_=await Vw({messages:[...B,N],models:M,agent:U,temperature:O,toolApprovalLevel:P,mode:q,organizationId:K.id,userId:V,taskId:C,windowSize:R,branch:E??null},W,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return tq({stream:_.stream,consumeSseStream:rN})}catch(W){if(console.error("[decopilot:stream] Error",W),W instanceof Jl1)return Z.json({error:W.message},409);if(W instanceof B9)return Z.json({error:W.message},W.status);if(W instanceof Error&&W.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:W.message}),Z.json({error:"Request aborted"},400);return console.error("[decopilot:stream] Failed",{error:W instanceof Error?W.message:JSON.stringify(W),stack:W instanceof Error?W.stack:void 0}),Z.json({error:W instanceof Error?W.message:JSON.stringify(W)},500)}}),$.post("/:org/decopilot/cancel/:threadId",async(Z)=>{let{taskId:W,thread:K,organization:H}=await U48(Z);if((await Q.execute({type:"CANCEL",taskId:W})).some((B)=>B.event.type==="RUN_FAILED"))return Z.json({cancelled:!0});if(Y.broadcast(W),K.status==="in_progress")console.warn("[decopilot:cancel] Ghost run detected, force-failing",{taskId:W}),Q.execute({type:"FORCE_FAIL",taskId:W,reason:"ghost",orgId:H.id}).catch((B)=>{console.error("[decopilot:cancel] Failed to force-fail ghost thread",{taskId:W,err:B})});return Z.json({cancelled:!0,async:!0},202)}),$.get("/:org/decopilot/attach/:threadId",async(Z)=>{try{let{taskId:W,thread:K,organization:H}=await DS0(Z);if(Q.isRunning(W)){let P=await G.createReplayStream(W);if(!P)return Z.body(null,204);let q=FQ1({execute:async({writer:V})=>{let M=P.getReader();try{while(!0){let{done:j,value:R}=await M.read();if(j)break;V.write(R)}}finally{M.releaseLock()}}});return tq({stream:q,consumeSseStream:rN})}let U=Z.get("meshContext"),B=U.auth?.user?.id;if(K.status!=="in_progress")return Z.body(null,204);if(K.created_by!==B)return Z.body(null,204);if(!K.run_config)return await J.forceFailIfInProgress(W,H.id),Z.body(null,204);let N=ru1.safeParse(K.run_config);if(!N.success)return await J.forceFailIfInProgress(W,H.id),Z.body(null,204);let O=N.data,z=await LU(U.db,H.id,U.auth.user?.role);if(z!==void 0&&!mq(z,O.models.credentialId,O.models.thinking.id))throw new B9(403,{message:"Model not allowed for your role"});if(!await J.claimOrphanedRun(W,H.id,Ul()))return Z.body(null,204);let E=await Vw({messages:[],models:au1(O.models),agent:O.agent,temperature:O.temperature,toolApprovalLevel:O.toolApprovalLevel,mode:O.mode,organizationId:H.id,userId:B,taskId:W,windowSize:O.windowSize,isResume:!0},U,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return tq({stream:E.stream,consumeSseStream:rN})}catch(W){if(W instanceof B9)throw W;return console.error("[decopilot:attach] Error",W),Z.body(null,500)}}),$}var j68=D(()=>{OY();TY();jY();Iz();d2();HS0();HJ1();cG1();wS0();O48();OJ1();PS0();Yl1()});var V68=D(()=>{j68()});var Zl1=()=>{let X=new w6;return X.post("/connections/:connectionId/oauth-token",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.param("connectionId");if(!(G.auth.user?.id??G.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let $=G.organization?.id;if(!$)return Y.json({error:"Organization context required"},403);let Z=await G.storage.connections.findById(Q,$);if(!Z)return Y.json({error:"Connection not found"},404);let W=await Y.req.json();if(!W.accessToken)return Y.json({error:"accessToken is required"},400);if(W.tokenEndpoint){let O;try{O=new URL(W.tokenEndpoint)}catch{return Y.json({error:"tokenEndpoint must be a valid URL"},400)}if(O.protocol!=="http:"&&O.protocol!=="https:")return Y.json({error:"tokenEndpoint must be an http(s) URL"},400)}let K=W.expiresIn?new Date(Date.now()+W.expiresIn*1000):null,H=W.tokenEndpoint??null;if(H?.includes("/oauth-proxy/")&&Z.connection_url)try{let O=await tj1(Z.connection_url);if(O)try{let z=new URL(O);if(z.protocol==="http:"||z.protocol==="https:")H=O}catch{}}catch{}let U=new G$(G.db,G.vault),B={connectionId:Q,accessToken:W.accessToken,refreshToken:W.refreshToken??null,scope:W.scope??null,expiresAt:K,clientId:W.clientId??null,clientSecret:W.clientSecret??null,tokenEndpoint:H},N=await U.upsert(B);return Y.json({success:!0,expiresAt:N.expiresAt})}),X.delete("/connections/:connectionId/oauth-token",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.param("connectionId");if(!(G.auth.user?.id??G.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let $=G.organization?.id;if(!$)return Y.json({error:"Organization context required"},403);if(!await G.storage.connections.findById(Q,$))return Y.json({error:"Connection not found"},404);return await new G$(G.db,G.vault).delete(Q),Y.json({success:!0})}),X.get("/connections/:connectionId/oauth-token/status",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.param("connectionId");if(!(G.auth.user?.id??G.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let $=G.organization?.id;if(!$)return Y.json({error:"Organization context required"},403);if(!await G.storage.connections.findById(Q,$))return Y.json({error:"Connection not found"},404);let W=new G$(G.db,G.vault),K=await W.get(Q);if(!K)return Y.json({hasToken:!1,isExpired:!0,canRefresh:!1});let H=W.isExpired(K),U=!!K.refreshToken&&!!K.tokenEndpoint;return Y.json({hasToken:!0,isExpired:H,canRefresh:U,expiresAt:K.expiresAt})}),X};var AS0=D(()=>{jY();TA0();QM()});var l7=async(X,Y)=>{await Y();let Q=(X.req.matchedRoutes??[]).find(($)=>$.method!=="ALL"&&!$.path.endsWith("*"));if(!Q||Q.path.startsWith("/api/:org/"))return;let J=X.get("meshContext");console.log("deprecated route",{route:X.req.routePath,method:X.req.method,org:J?.organization?.slug,user:J?.auth?.user?.id,ua:X.req.header("user-agent")})};var ya=async(X,Y)=>{let G=X.req.param("org");if(!G)return X.json({error:"org slug missing in path"},400);let Q=X.get("meshContext");if(!Q?.db)return X.json({error:"meshContext not initialized"},500);let J=Q.db,$=await J.selectFrom("organization").select(["id","slug","name"]).where("slug","=",G).executeTakeFirst();if(!$)return X.json({error:`organization "${G}" not found`},404);let Z=Q.auth?.user?.id,W;if(Z){let K=await J.selectFrom("member").select(["role"]).where("userId","=",Z).where("organizationId","=",$.id).executeTakeFirst();if(!K)return X.json({error:"forbidden: not a member of organization"},403);W=K.role}if(Q.organization={id:$.id,slug:$.slug,name:$.name,role:W},Q.access.setOrganizationId($.id),Q.access.setRole(W),Q.storage.threads.setOrganizationId($.id),!Q.objectStorage){let K=gd();Q.objectStorage=K?pj1(K,$.id):new AG1($.id,Q.baseUrl)}return await Y()};var TS0=D(()=>{DA0();eF1()});async function Mw(X,Y,G){let Q=await fetch(`${X}/rest/v1/${G}`,{headers:{apikey:Y,Authorization:`Bearer ${Y}`,Accept:"application/json"}});if(!Q.ok){let J=await Q.text().catch(()=>Q.statusText);throw console.error(`[deco-sites] Supabase error (${Q.status}): ${J}`),Error(`External service error (${Q.status})`)}return Q.json()}async function ha(X,Y,G,Q){let J=await fetch(`${X}/rest/v1/${G}`,{method:"POST",headers:{apikey:Y,Authorization:`Bearer ${Y}`,"Content-Type":"application/json",Accept:"application/json",Prefer:"return=representation"},body:JSON.stringify(Q)});if(!J.ok){let Z=await J.text().catch(()=>J.statusText);throw console.error(`[deco-sites] Supabase POST error (${J.status}): ${Z}`),Error(`External service error (${J.status})`)}let $=await J.json();if(!$[0])throw Error("Supabase POST returned no rows");return $[0]}function IS0(){let X=h4(),Y=X.decoSupabaseUrl,G=X.decoSupabaseServiceKey;if(!Y||!G)return null;return{supabaseUrl:Y,serviceKey:G}}async function jS0(X,Y,G){return(await Mw(X,Y,`profiles?email=eq.${encodeURIComponent(G)}&select=user_id`))[0]?.user_id??null}async function M68(X,Y,G){let Q=await Mw(X,Y,`api_key?user_id=eq.${encodeURIComponent(G)}&select=id&limit=1`);if(Q[0]?.id)return Q[0].id;return(await ha(X,Y,"api_key",{user_id:G})).id}function Bn5(X){return`${Fn5}${X}@${Un5}`}async function Nn5(X,Y,G){return(await Mw(X,Y,`sites?name=eq.${encodeURIComponent(G)}&select=team&limit=1`))[0]?.team??null}async function On5(X,Y,G){let Q=await fetch(`${X}/auth/v1/admin/users`,{method:"POST",headers:{apikey:Y,Authorization:`Bearer ${Y}`,"Content-Type":"application/json"},body:JSON.stringify({email:G,email_confirm:!0,app_metadata:{mesh_service_account:!0}})});if(!Q.ok){let $=await Q.text().catch(()=>Q.statusText);throw console.error(`[deco-sites] Auth admin create user error (${Q.status}): ${$}`),Error(`Failed to create auth user (${Q.status})`)}return(await Q.json()).id}async function zn5(X,Y,G){let Q=Bn5(G),J=await Mw(X,Y,`profiles?email=eq.${encodeURIComponent(Q)}&select=user_id&limit=1`);if(J[0]?.user_id){let K=J[0].user_id;if(!(await Mw(X,Y,`members?user_id=eq.${encodeURIComponent(K)}&team_id=eq.${G}&select=id&limit=1`))[0]?.id){let U=await ha(X,Y,"members",{user_id:K,team_id:G,admin:!0});await ha(X,Y,"member_roles",{member_id:U.id,role_id:1})}return M68(X,Y,K)}let $=await On5(X,Y,Q);if(!(await Mw(X,Y,`profiles?user_id=eq.${encodeURIComponent($)}&select=user_id&limit=1`))[0])await ha(X,Y,"profiles",{user_id:$,email:Q,name:`Mesh Service Account (team ${G})`});let W=await ha(X,Y,"members",{user_id:$,team_id:G,admin:!0});return await ha(X,Y,"member_roles",{member_id:W.id,role_id:1}),M68(X,Y,$)}async function Dn5(X){try{let Y=await fetch(`https://${X}/favicon.ico`,{signal:AbortSignal.timeout(5000)});if(!Y.ok)return null;let G=Y.headers.get("content-type")??"image/x-icon",Q=await Y.arrayBuffer();if(Q.byteLength===0)return null;let J=Buffer.from(Q).toString("base64");return`data:${G};base64,${J}`}catch{return null}}var Fn5="deco-team-",Un5="deco.cx",S68=async(X,Y)=>{if(!X.get("meshContext").auth.user?.id)return X.json({error:"Unauthorized"},401);return Y()},R68="https://sites-admin-mcp.decocache.com/api/mcp",k68=()=>{let X=new w6;return X.use("*",S68),X.get("/profile",async(Y)=>{let Q=Y.get("meshContext").auth.user?.email;if(!Q)return Y.json({error:"Unauthorized"},401);let J=IS0();if(!J)return Y.json({isDecoUser:!1});try{let $=await jS0(J.supabaseUrl,J.serviceKey,Q);return Y.json({isDecoUser:$!==null})}catch{return Y.json({isDecoUser:!1})}}),X},$l1=()=>{let X=new w6;return X.use("*",S68),X.get("/",async(Y)=>{let Q=Y.get("meshContext").auth.user?.email;if(!Q)return Y.json({error:"Unauthorized"},401);let J=IS0();if(!J)return Y.json({sites:[]});let{supabaseUrl:$,serviceKey:Z}=J;try{let W=await jS0($,Z,Q);if(!W)return Y.json({sites:[]});let H=(await Mw($,Z,`members?user_id=eq.${encodeURIComponent(W)}&deleted_at=is.null&select=team_id`)).map((B)=>B.team_id).filter((B)=>Number.isInteger(B));if(H.length===0)return Y.json({sites:[]});let U=await Mw($,Z,`sites?team=in.(${H.join(",")})&select=name,domains,thumb_url&order=id`);return Y.json({sites:U})}catch(W){return console.error("[deco-sites] GET error:",W),Y.json({error:"Failed to fetch sites"},502)}}),X.post("/connection",async(Y)=>{let G=Y.get("meshContext"),Q=G.auth.user?.email,J=$6(G);if(!Q||!J)return Y.json({error:"Unauthorized"},401);let $;try{$=await Y.req.json()}catch{return Y.json({error:"Invalid request body"},400)}let{siteName:Z,orgId:W}=$;if(!Z||!W)return Y.json({error:"siteName and orgId are required"},400);let K=vX("conn");if(!/^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/.test(Z))return Y.json({error:"Invalid siteName"},400);if(!await G.db.selectFrom("member").select("member.id").where("member.userId","=",J).where("member.organizationId","=",W).executeTakeFirst())return Y.json({error:"Forbidden"},403);let U=IS0();if(!U)return Y.json({error:"Deco integration is not configured"},503);let{supabaseUrl:B,serviceKey:N}=U;try{let O=await jS0(B,N,Q);if(!O)return Y.json({error:"No deco.cx account found for this user"},404);let z=await Nn5(B,N,Z);if(!z)return Y.json({error:"Site not found or has no team"},404);if(!(await Mw(B,N,`members?user_id=eq.${encodeURIComponent(O)}&team_id=eq.${z}&deleted_at=is.null&select=id&limit=1`))[0])return Y.json({error:"You are not a member of this site's team"},403);let E=await zn5(B,N,z),P=await CP({id:`pending-${K}`,title:`deco.cx \u2014 ${Z}`,connection_type:"HTTP",connection_url:R68,connection_token:E}).catch(()=>null),q=P?.tools?.length?P.tools:null,V=P?.scopes?.length?P.scopes:null,M=await Dn5(`${Z}.deco.site`),j=await G.storage.connections.create({id:K,organization_id:W,created_by:J,title:`deco.cx \u2014 ${Z}`,description:`Admin MCP for deco.cx site: ${Z}`,connection_type:"HTTP",connection_url:R68,connection_token:E,connection_headers:null,oauth_config:null,configuration_state:{SITE_NAME:Z},metadata:{source:"deco.cx-import"},icon:null,app_name:"deco.cx",app_id:null,tools:q,configuration_scopes:V});return Y.json({connId:j.id,icon:M})}catch(O){return console.error("[deco-sites] POST /connection error:",O),Y.json({error:"Failed to create connection"},500)}}),X};var VS0=D(()=>{jY();pK();f51();e5()});import{createHmac as wn5}from"crypto";import{mkdir as Ln5,writeFile as En5}from"fs/promises";import{dirname as Pn5,join as _68}from"path";function An5(X){let Y=X.replace(/[^a-zA-Z0-9_-]/g,"_");return _68(qn5,Y)}function Tn5(X){return X.replace(/^\/+/,"").replace(/\.\./g,"")}function C68(X,Y){let G=An5(X),Q=Tn5(Y);return _68(G,Q)}function v68(X,Y,G,Q,J){let $=h4().encryptionKey||"dev-secret",Z=`${X}:${Y}:${G}:${Q}`,W=wn5("sha256",$).update(Z).digest("hex");return J===W}function MS0(X){let Y=X.split(".").pop()?.toLowerCase()||"";return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",ico:"image/x-icon",bmp:"image/bmp",pdf:"application/pdf",json:"application/json",xml:"application/xml",txt:"text/plain",html:"text/html",htm:"text/html",css:"text/css",csv:"text/csv",md:"text/markdown",js:"application/javascript",mjs:"application/javascript",ts:"application/typescript",mp4:"video/mp4",webm:"video/webm",avi:"video/x-msvideo",mov:"video/quicktime",mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",zip:"application/zip",gz:"application/gzip",tar:"application/x-tar",woff:"font/woff",woff2:"font/woff2",ttf:"font/ttf",otf:"font/otf"}[Y]||"application/octet-stream"}var qn5="./data/assets",Wl1=(X)=>{let Y=new w6,G=X.orgFromPath?"/*":"/:orgId/*";return Y.get(G,async(Q)=>{let J=X.orgFromPath?Q.get("meshContext")?.organization?.id:Q.req.param("orgId");if(!J)return Q.json({error:"Missing organization context"},500);let $=X.orgFromPath?`/api/${Q.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${J}/`,Z=Q.req.path.replace($,"");if(!Z)return Q.json({error:"Missing key"},400);let W=Q.req.query("expires"),K=Q.req.query("signature"),H=Q.req.query("method");if(!W||!K||H!=="GET")return Q.json({error:"Invalid or missing signature parameters"},400);let U=parseInt(W,10);if(!Number.isFinite(U))return Q.json({error:"Invalid expires parameter"},400);let B=Math.floor(Date.now()/1000);if(U<B)return Q.json({error:"URL has expired"},403);if(!v68(J,Z,U,"GET",K))return Q.json({error:"Invalid signature"},403);let N=C68(J,Z);try{let O=Bun.file(N);if(!await O.exists())return Q.json({error:"File not found"},404);let w=MS0(Z);return new Response(O.stream(),{headers:{"Content-Type":w,"Content-Length":O.size.toString(),"Cache-Control":"private, max-age=3600"}})}catch(O){return console.error("Error serving file:",O),Q.json({error:"Failed to read file"},500)}}),Y.put(G,async(Q)=>{let J=X.orgFromPath?Q.get("meshContext")?.organization?.id:Q.req.param("orgId");if(!J)return Q.json({error:"Missing organization context"},500);let $=X.orgFromPath?`/api/${Q.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${J}/`,Z=Q.req.path.replace($,"");if(!Z)return Q.json({error:"Missing key"},400);let W=Q.req.query("expires"),K=Q.req.query("signature"),H=Q.req.query("method");if(!W||!K||H!=="PUT")return Q.json({error:"Invalid or missing signature parameters"},400);let U=parseInt(W,10);if(!Number.isFinite(U))return Q.json({error:"Invalid expires parameter"},400);let B=Math.floor(Date.now()/1000);if(U<B)return Q.json({error:"URL has expired"},403);if(!v68(J,Z,U,"PUT",K))return Q.json({error:"Invalid signature"},403);let N=C68(J,Z),O=Pn5(N);try{await Ln5(O,{recursive:!0});let z=await Q.req.arrayBuffer();return await En5(N,Buffer.from(z)),Q.json({success:!0,key:Z})}catch(z){return console.error("Error saving file:",z),Q.json({error:"Failed to save file"},500)}}),Y};var Kl1=D(()=>{jY();e5()});var f68="Payload Too Large",b68,Hl1=(X)=>{let Y=X.onError||(()=>{let Q=new Response(f68,{status:413});throw new B9(413,{res:Q})}),G=X.maxSize;return async function(J,$){if(!J.req.raw.body)return $();let Z=J.req.raw.headers.has("transfer-encoding"),W=J.req.raw.headers.has("content-length");if(W&&!Z)return parseInt(J.req.raw.headers.get("content-length")||"0",10)>G?Y(J):$();let K=0,H=J.req.raw.body.getReader(),B={body:new ReadableStream({async start(N){try{for(;;){let{done:O,value:z}=await H.read();if(O)break;if(K+=z.length,K>G){N.error(new b68(f68));break}N.enqueue(z)}}finally{N.close()}}}),duplex:"half"};if(J.req.raw=new Request(J.req.raw,B),await $(),J.error instanceof b68)J.res=await Y(J)}};var RS0=D(()=>{Iz();b68=class extends Error{constructor(X){super(X);this.name="BodyLimitError"}}});function Fl1(X){let Y=new w6;return Y.get("/kv/:key",async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let $=G.req.param("key"),Z=await X.kvStorage.get(J,$);if(Z===null)return G.json({error:"Not found"},404);return G.json({key:$,value:Z})}),Y.put("/kv/:key",Hl1({maxSize:In5,onError:(G)=>G.json({error:"Payload too large"},413)}),async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let $=G.req.param("key"),Z;try{Z=await G.req.json()}catch{return G.json({error:"Invalid JSON body"},400)}return await X.kvStorage.set(J,$,Z),G.json({ok:!0})}),Y.delete("/kv/:key",async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let $=G.req.param("key");return await X.kvStorage.delete(J,$),G.json({ok:!0})}),Y}var In5=1048576;var SS0=D(()=>{jY();RS0()});var Ul1=()=>{let X=new w6;return X.all("/",async(Y)=>{let G=await ur(Y.get("meshContext")),Q=new BH({enableJsonResponse:Y.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await G.connect(Q),Q.handleRequest(Y.req.raw)}),X};var kS0=D(()=>{jY();gr();hr()});var Bl1=()=>{let X=new w6;return X.get("/threads/:threadId/outputs",async(Y)=>{let G=Y.get("meshContext");if(!G.auth?.user?.id)throw new B9(401,{message:"Unauthorized"});let J=G.organization?.id;if(!J)throw new B9(400,{message:"Organization required"});let $=Y.req.param("threadId");if(!$||!/^[A-Za-z0-9_-]+$/.test($))throw new B9(400,{message:"Invalid thread ID"});if(!await G.storage.threads.get($))throw new B9(404,{message:"Thread not found"});let W=G.objectStorage;if(!W)return Y.json({objects:[]});let K=await W.list({prefix:`model-outputs/${$}/`,maxKeys:200});return Y.json({objects:K.objects.map((H)=>{let U=H.key.split("/").pop()??H.key,B=H.key.split("/").map(encodeURIComponent).join("/");return{key:H.key,filename:U,size:H.size,uploadedAt:H.lastModified?.toISOString(),downloadUrl:`${G.baseUrl}/api/${encodeURIComponent(J)}/files/${B}`}})})}),X};var CS0=D(()=>{jY();Iz()});function Nl1(X){let Y=new w6;return Y.post("/trigger-callback",Hl1({maxSize:Vn5,onError:(G)=>G.json({error:"Payload too large"},413)}),async(G)=>{let Q=G.req.header("authorization");if(!Q?.startsWith("Bearer "))return G.json({error:"Missing or invalid Authorization header"},401);let J=Q.slice(7),$=await X.tokenStorage.validateToken(J);if(!$)return G.json({error:"Invalid callback token"},401);let Z=jn5.safeParse(await G.req.json().catch(()=>null));if(!Z.success)return G.json({error:"Invalid body",details:Z.error.issues},400);let{type:W,data:K}=Z.data;return X.eventTriggerEngine.notifyEvents([{source:$.connectionId,type:W,data:K??{},organizationId:$.organizationId}]),G.json({ok:!0,type:W},202)}),Y}var jn5,Vn5=1048576;var vS0=D(()=>{jY();RS0();F0();jn5=F.object({type:F.string().min(1),data:F.record(F.string(),F.unknown()).optional()})});var _S0=class{writer;encoder;writable;abortSubscribers=[];responseReadable;aborted=!1;closed=!1;constructor(X,Y){this.writable=X,this.writer=X.getWriter(),this.encoder=new TextEncoder;let G=Y.getReader();this.abortSubscribers.push(async()=>{await G.cancel()}),this.responseReadable=new ReadableStream({async pull(Q){let{done:J,value:$}=await G.read();J?Q.close():Q.enqueue($)},cancel:()=>{this.abort()}})}async write(X){try{if(typeof X==="string")X=this.encoder.encode(X);await this.writer.write(X)}catch{}return this}async writeln(X){return await this.write(X+`
|
|
6830
|
+
</available-prompts>`}async function Ql1(X){let Y=X.stream.getReader();while(!0){let{done:G}=await Y.read();if(G)break}}var Gl1,Zn5=5;var OJ1=D(()=>{OY();kG1();z48();D48();ZX();TY();F0();H68();U68();d2();HS0();WJ1();HJ1();N68();w68();cG1();P68();hj1();cj1();LD();TW();Yl1();QO();Gl1=X1(b0(),1)});async function q68(X,Y,G,Q){let{storage:J,streamBuffer:$,sseHub:Z}=Q,K=(await J.get(X,Y))?.virtual_mcp_id??void 0;await J.update(X,Y,{status:G,run_owner_pod:null,run_config:null,run_started_at:null}),$.purge(X),Z.emit(Y,Uj(X,G,K)),Z.emit(Y,F61(X,G))}async function Hn5(X,Y){let{storage:G,streamBuffer:Q,sseHub:J}=Y;switch(X.type){case"RUN_STARTED":{if(!await G.claimRunStart(X.taskId,X.orgId,{status:"in_progress",run_owner_pod:X.podId??null,run_config:X.runConfig??null,run_started_at:X.podId?new Date().toISOString():null},X.podId??null))throw new Jl1(X.taskId);let Z=await G.get(X.taskId,X.orgId);J.emit(X.orgId,Uj(X.taskId,"in_progress",Z?.virtual_mcp_id??void 0));return}case"RUN_RESUMED":{await G.update(X.taskId,X.orgId,{run_owner_pod:X.podId,run_started_at:new Date().toISOString()});let $=await G.get(X.taskId,X.orgId);J.emit(X.orgId,Uj(X.taskId,"in_progress",$?.virtual_mcp_id??void 0));return}case"STEP_COMPLETED":J.emit(X.orgId,GD1(X.taskId,X.stepCount));return;case"RUN_COMPLETED":await q68(X.taskId,X.orgId,"completed",Y);return;case"RUN_REQUIRES_ACTION":await q68(X.taskId,X.orgId,"requires_action",Y);return;case"RUN_FAILED":{if(X.reason==="ghost"){if(!await G.forceFailIfInProgress(X.taskId,X.orgId))return;await G.update(X.taskId,X.orgId,{run_owner_pod:null,run_config:null,run_started_at:null})}else await G.update(X.taskId,X.orgId,{status:"failed",run_owner_pod:null,run_config:null,run_started_at:null});Q.purge(X.taskId);let $=await G.get(X.taskId,X.orgId);J.emit(X.orgId,Uj(X.taskId,"failed",$?.virtual_mcp_id??void 0)),J.emit(X.orgId,F61(X.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function A68(X,Y){for(let{event:G}of X)await Hn5(G,Y)}var Jl1;var PS0=D(()=>{ZX();Jl1=class Jl1 extends Error{constructor(X){super(`Failed to claim run for thread ${X} \u2014 already running on another pod`);this.name="RunClaimError"}}});async function T68(X){let Y=pu1(X),G=await X.req.json(),Q=N48.safeParse(G);if(!Q.success)throw new B9(400,{message:Q.error.message});let{messages:J,...$}=Q.data,Z=J,{systemMessages:W,requestMessage:K}=X48(Z);return{organization:Y,systemMessages:W,requestMessage:K,...$}}async function I68(X,Y){let G=await X.storage.aiProviderKeys.list({organizationId:Y});if(G.length===0)throw new B9(400,{message:"No AI provider credentials configured for this organization"});let Q=G[0],J=await X.aiProviders.listModels(Q.id,Y);if(J.length===0)throw new B9(400,{message:"No models available from the configured AI provider"});let $=J[0];return{credentialId:Q.id,thinking:{id:$.modelId,title:$.title}}}function qS0(X){let{cancelBroadcast:Y,streamBuffer:G,runRegistry:Q,threadStorage:J}=X,$=new w6;return $.get("/:org/decopilot/allowed-models",async(Z)=>{try{let W=Z.get("meshContext"),K=pu1(Z),H=W.auth.user?.role,U=await LU(W.db,K.id,H);return Z.json(gj6(U))}catch(W){if(console.error("[decopilot:allowed-models] Error",W),W instanceof B9)return Z.json({error:W.message},W.status);return Z.json({error:W instanceof Error?W.message:"Internal error"},500)}}),$.post("/:org/decopilot/stream",async(Z)=>{try{let W=Z.get("meshContext"),{organization:K,models:H,agent:U,systemMessages:B,requestMessage:N,temperature:O,memory:z,thread_id:w,branch:E,toolApprovalLevel:P,mode:q}=await T68(Z),V=W.auth?.user?.id;if(!V)throw new B9(401,{message:"User ID is required"});let M=H??await I68(W,K.id),j=await LU(W.db,K.id,W.auth.user?.role);if(j!==void 0&&!mq(j,M.credentialId,M.thinking.id))throw new B9(403,{message:"Model not allowed for your role"});let R=z?.windowSize??m2,C=w??z?.thread_id,_=await Vw({messages:[...B,N],models:M,agent:U,temperature:O,toolApprovalLevel:P,mode:q,organizationId:K.id,userId:V,taskId:C,windowSize:R,branch:E??null},W,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return A6.capture({distinctId:V,event:"chat_message_started",groups:{organization:K.id},properties:{organization_id:K.id,agent_id:U,mode:q,thread_id:C,credential_id:M.credentialId}}),tq({stream:_.stream,consumeSseStream:rN})}catch(W){if(console.error("[decopilot:stream] Error",W),W instanceof B9)return Z.json({error:W.message},W.status);if(W instanceof Error&&W.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:W.message}),Z.json({error:"Request aborted"},400);return A6.captureException(W),console.error("[decopilot:stream] Failed",{error:W instanceof Error?W.message:JSON.stringify(W),stack:W instanceof Error?W.stack:void 0}),Z.json({error:W instanceof Error?W.message:JSON.stringify(W)},500)}}),$.post("/:org/decopilot/runtime/stream",async(Z)=>{try{let W=Z.get("meshContext"),{organization:K,models:H,agent:U,systemMessages:B,requestMessage:N,temperature:O,memory:z,thread_id:w,branch:E,toolApprovalLevel:P,mode:q}=await T68(Z),V=W.auth?.user?.id;if(!V)throw new B9(401,{message:"User ID is required"});let M=H??await I68(W,K.id),j=await LU(W.db,K.id,W.auth.user?.role);if(j!==void 0&&!mq(j,M.credentialId,M.thinking.id))throw new B9(403,{message:"Model not allowed for your role"});let R=z?.windowSize??m2,C=w??z?.thread_id,_=await Vw({messages:[...B,N],models:M,agent:U,temperature:O,toolApprovalLevel:P,mode:q,organizationId:K.id,userId:V,taskId:C,windowSize:R,branch:E??null},W,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return tq({stream:_.stream,consumeSseStream:rN})}catch(W){if(console.error("[decopilot:stream] Error",W),W instanceof Jl1)return Z.json({error:W.message},409);if(W instanceof B9)return Z.json({error:W.message},W.status);if(W instanceof Error&&W.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:W.message}),Z.json({error:"Request aborted"},400);return console.error("[decopilot:stream] Failed",{error:W instanceof Error?W.message:JSON.stringify(W),stack:W instanceof Error?W.stack:void 0}),Z.json({error:W instanceof Error?W.message:JSON.stringify(W)},500)}}),$.post("/:org/decopilot/cancel/:threadId",async(Z)=>{let{taskId:W,thread:K,organization:H}=await U48(Z);if((await Q.execute({type:"CANCEL",taskId:W})).some((B)=>B.event.type==="RUN_FAILED"))return Z.json({cancelled:!0});if(Y.broadcast(W),K.status==="in_progress")console.warn("[decopilot:cancel] Ghost run detected, force-failing",{taskId:W}),Q.execute({type:"FORCE_FAIL",taskId:W,reason:"ghost",orgId:H.id}).catch((B)=>{console.error("[decopilot:cancel] Failed to force-fail ghost thread",{taskId:W,err:B})});return Z.json({cancelled:!0,async:!0},202)}),$.get("/:org/decopilot/attach/:threadId",async(Z)=>{try{let{taskId:W,thread:K,organization:H}=await DS0(Z);if(Q.isRunning(W)){let P=await G.createReplayStream(W);if(!P)return Z.body(null,204);let q=FQ1({execute:async({writer:V})=>{let M=P.getReader();try{while(!0){let{done:j,value:R}=await M.read();if(j)break;V.write(R)}}finally{M.releaseLock()}}});return tq({stream:q,consumeSseStream:rN})}let U=Z.get("meshContext"),B=U.auth?.user?.id;if(K.status!=="in_progress")return Z.body(null,204);if(K.created_by!==B)return Z.body(null,204);if(!K.run_config)return await J.forceFailIfInProgress(W,H.id),Z.body(null,204);let N=ru1.safeParse(K.run_config);if(!N.success)return await J.forceFailIfInProgress(W,H.id),Z.body(null,204);let O=N.data,z=await LU(U.db,H.id,U.auth.user?.role);if(z!==void 0&&!mq(z,O.models.credentialId,O.models.thinking.id))throw new B9(403,{message:"Model not allowed for your role"});if(!await J.claimOrphanedRun(W,H.id,Ul()))return Z.body(null,204);let E=await Vw({messages:[],models:au1(O.models),agent:O.agent,temperature:O.temperature,toolApprovalLevel:O.toolApprovalLevel,mode:O.mode,organizationId:H.id,userId:B,taskId:W,windowSize:O.windowSize,isResume:!0},U,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return tq({stream:E.stream,consumeSseStream:rN})}catch(W){if(W instanceof B9)throw W;return console.error("[decopilot:attach] Error",W),Z.body(null,500)}}),$}var j68=D(()=>{OY();TY();jY();Iz();d2();HS0();HJ1();cG1();wS0();O48();OJ1();PS0();Yl1()});var V68=D(()=>{j68()});var Zl1=()=>{let X=new w6;return X.post("/connections/:connectionId/oauth-token",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.param("connectionId");if(!(G.auth.user?.id??G.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let $=G.organization?.id;if(!$)return Y.json({error:"Organization context required"},403);let Z=await G.storage.connections.findById(Q,$);if(!Z)return Y.json({error:"Connection not found"},404);let W=await Y.req.json();if(!W.accessToken)return Y.json({error:"accessToken is required"},400);if(W.tokenEndpoint){let O;try{O=new URL(W.tokenEndpoint)}catch{return Y.json({error:"tokenEndpoint must be a valid URL"},400)}if(O.protocol!=="http:"&&O.protocol!=="https:")return Y.json({error:"tokenEndpoint must be an http(s) URL"},400)}let K=W.expiresIn?new Date(Date.now()+W.expiresIn*1000):null,H=W.tokenEndpoint??null;if(H?.includes("/oauth-proxy/")&&Z.connection_url)try{let O=await tj1(Z.connection_url);if(O)try{let z=new URL(O);if(z.protocol==="http:"||z.protocol==="https:")H=O}catch{}}catch{}let U=new G$(G.db,G.vault),B={connectionId:Q,accessToken:W.accessToken,refreshToken:W.refreshToken??null,scope:W.scope??null,expiresAt:K,clientId:W.clientId??null,clientSecret:W.clientSecret??null,tokenEndpoint:H},N=await U.upsert(B);return Y.json({success:!0,expiresAt:N.expiresAt})}),X.delete("/connections/:connectionId/oauth-token",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.param("connectionId");if(!(G.auth.user?.id??G.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let $=G.organization?.id;if(!$)return Y.json({error:"Organization context required"},403);if(!await G.storage.connections.findById(Q,$))return Y.json({error:"Connection not found"},404);return await new G$(G.db,G.vault).delete(Q),Y.json({success:!0})}),X.get("/connections/:connectionId/oauth-token/status",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.param("connectionId");if(!(G.auth.user?.id??G.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let $=G.organization?.id;if(!$)return Y.json({error:"Organization context required"},403);if(!await G.storage.connections.findById(Q,$))return Y.json({error:"Connection not found"},404);let W=new G$(G.db,G.vault),K=await W.get(Q);if(!K)return Y.json({hasToken:!1,isExpired:!0,canRefresh:!1});let H=W.isExpired(K),U=!!K.refreshToken&&!!K.tokenEndpoint;return Y.json({hasToken:!0,isExpired:H,canRefresh:U,expiresAt:K.expiresAt})}),X};var AS0=D(()=>{jY();TA0();QM()});var l7=async(X,Y)=>{await Y();let Q=(X.req.matchedRoutes??[]).find(($)=>$.method!=="ALL"&&!$.path.endsWith("*"));if(!Q||Q.path.startsWith("/api/:org/"))return;let J=X.get("meshContext");console.log("deprecated route",{route:X.req.routePath,method:X.req.method,org:J?.organization?.slug,user:J?.auth?.user?.id,ua:X.req.header("user-agent")})};var ya=async(X,Y)=>{let G=X.req.param("org");if(!G)return X.json({error:"org slug missing in path"},400);let Q=X.get("meshContext");if(!Q?.db)return X.json({error:"meshContext not initialized"},500);let J=Q.db,$=await J.selectFrom("organization").select(["id","slug","name"]).where("slug","=",G).executeTakeFirst();if(!$)return X.json({error:`organization "${G}" not found`},404);let Z=Q.auth?.user?.id,W;if(Z){let K=await J.selectFrom("member").select(["role"]).where("userId","=",Z).where("organizationId","=",$.id).executeTakeFirst();if(!K)return X.json({error:"forbidden: not a member of organization"},403);W=K.role}if(Q.organization={id:$.id,slug:$.slug,name:$.name,role:W},Q.access.setOrganizationId($.id),Q.access.setRole(W),Q.storage.threads.setOrganizationId($.id),!Q.objectStorage){let K=gd();Q.objectStorage=K?pj1(K,$.id):new AG1($.id,Q.baseUrl)}return await Y()};var TS0=D(()=>{DA0();eF1()});async function Mw(X,Y,G){let Q=await fetch(`${X}/rest/v1/${G}`,{headers:{apikey:Y,Authorization:`Bearer ${Y}`,Accept:"application/json"}});if(!Q.ok){let J=await Q.text().catch(()=>Q.statusText);throw console.error(`[deco-sites] Supabase error (${Q.status}): ${J}`),Error(`External service error (${Q.status})`)}return Q.json()}async function ha(X,Y,G,Q){let J=await fetch(`${X}/rest/v1/${G}`,{method:"POST",headers:{apikey:Y,Authorization:`Bearer ${Y}`,"Content-Type":"application/json",Accept:"application/json",Prefer:"return=representation"},body:JSON.stringify(Q)});if(!J.ok){let Z=await J.text().catch(()=>J.statusText);throw console.error(`[deco-sites] Supabase POST error (${J.status}): ${Z}`),Error(`External service error (${J.status})`)}let $=await J.json();if(!$[0])throw Error("Supabase POST returned no rows");return $[0]}function IS0(){let X=h4(),Y=X.decoSupabaseUrl,G=X.decoSupabaseServiceKey;if(!Y||!G)return null;return{supabaseUrl:Y,serviceKey:G}}async function jS0(X,Y,G){return(await Mw(X,Y,`profiles?email=eq.${encodeURIComponent(G)}&select=user_id`))[0]?.user_id??null}async function M68(X,Y,G){let Q=await Mw(X,Y,`api_key?user_id=eq.${encodeURIComponent(G)}&select=id&limit=1`);if(Q[0]?.id)return Q[0].id;return(await ha(X,Y,"api_key",{user_id:G})).id}function Bn5(X){return`${Fn5}${X}@${Un5}`}async function Nn5(X,Y,G){return(await Mw(X,Y,`sites?name=eq.${encodeURIComponent(G)}&select=team&limit=1`))[0]?.team??null}async function On5(X,Y,G){let Q=await fetch(`${X}/auth/v1/admin/users`,{method:"POST",headers:{apikey:Y,Authorization:`Bearer ${Y}`,"Content-Type":"application/json"},body:JSON.stringify({email:G,email_confirm:!0,app_metadata:{mesh_service_account:!0}})});if(!Q.ok){let $=await Q.text().catch(()=>Q.statusText);throw console.error(`[deco-sites] Auth admin create user error (${Q.status}): ${$}`),Error(`Failed to create auth user (${Q.status})`)}return(await Q.json()).id}async function zn5(X,Y,G){let Q=Bn5(G),J=await Mw(X,Y,`profiles?email=eq.${encodeURIComponent(Q)}&select=user_id&limit=1`);if(J[0]?.user_id){let K=J[0].user_id;if(!(await Mw(X,Y,`members?user_id=eq.${encodeURIComponent(K)}&team_id=eq.${G}&select=id&limit=1`))[0]?.id){let U=await ha(X,Y,"members",{user_id:K,team_id:G,admin:!0});await ha(X,Y,"member_roles",{member_id:U.id,role_id:1})}return M68(X,Y,K)}let $=await On5(X,Y,Q);if(!(await Mw(X,Y,`profiles?user_id=eq.${encodeURIComponent($)}&select=user_id&limit=1`))[0])await ha(X,Y,"profiles",{user_id:$,email:Q,name:`Mesh Service Account (team ${G})`});let W=await ha(X,Y,"members",{user_id:$,team_id:G,admin:!0});return await ha(X,Y,"member_roles",{member_id:W.id,role_id:1}),M68(X,Y,$)}async function Dn5(X){try{let Y=await fetch(`https://${X}/favicon.ico`,{signal:AbortSignal.timeout(5000)});if(!Y.ok)return null;let G=Y.headers.get("content-type")??"image/x-icon",Q=await Y.arrayBuffer();if(Q.byteLength===0)return null;let J=Buffer.from(Q).toString("base64");return`data:${G};base64,${J}`}catch{return null}}var Fn5="deco-team-",Un5="deco.cx",S68=async(X,Y)=>{if(!X.get("meshContext").auth.user?.id)return X.json({error:"Unauthorized"},401);return Y()},R68="https://sites-admin-mcp.decocache.com/api/mcp",k68=()=>{let X=new w6;return X.use("*",S68),X.get("/profile",async(Y)=>{let Q=Y.get("meshContext").auth.user?.email;if(!Q)return Y.json({error:"Unauthorized"},401);let J=IS0();if(!J)return Y.json({isDecoUser:!1});try{let $=await jS0(J.supabaseUrl,J.serviceKey,Q);return Y.json({isDecoUser:$!==null})}catch{return Y.json({isDecoUser:!1})}}),X},$l1=()=>{let X=new w6;return X.use("*",S68),X.get("/",async(Y)=>{let Q=Y.get("meshContext").auth.user?.email;if(!Q)return Y.json({error:"Unauthorized"},401);let J=IS0();if(!J)return Y.json({sites:[]});let{supabaseUrl:$,serviceKey:Z}=J;try{let W=await jS0($,Z,Q);if(!W)return Y.json({sites:[]});let H=(await Mw($,Z,`members?user_id=eq.${encodeURIComponent(W)}&deleted_at=is.null&select=team_id`)).map((B)=>B.team_id).filter((B)=>Number.isInteger(B));if(H.length===0)return Y.json({sites:[]});let U=await Mw($,Z,`sites?team=in.(${H.join(",")})&select=name,domains,thumb_url&order=id`);return Y.json({sites:U})}catch(W){return console.error("[deco-sites] GET error:",W),Y.json({error:"Failed to fetch sites"},502)}}),X.post("/connection",async(Y)=>{let G=Y.get("meshContext"),Q=G.auth.user?.email,J=$6(G);if(!Q||!J)return Y.json({error:"Unauthorized"},401);let $;try{$=await Y.req.json()}catch{return Y.json({error:"Invalid request body"},400)}let{siteName:Z,orgId:W}=$;if(!Z||!W)return Y.json({error:"siteName and orgId are required"},400);let K=vX("conn");if(!/^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/.test(Z))return Y.json({error:"Invalid siteName"},400);if(!await G.db.selectFrom("member").select("member.id").where("member.userId","=",J).where("member.organizationId","=",W).executeTakeFirst())return Y.json({error:"Forbidden"},403);let U=IS0();if(!U)return Y.json({error:"Deco integration is not configured"},503);let{supabaseUrl:B,serviceKey:N}=U;try{let O=await jS0(B,N,Q);if(!O)return Y.json({error:"No deco.cx account found for this user"},404);let z=await Nn5(B,N,Z);if(!z)return Y.json({error:"Site not found or has no team"},404);if(!(await Mw(B,N,`members?user_id=eq.${encodeURIComponent(O)}&team_id=eq.${z}&deleted_at=is.null&select=id&limit=1`))[0])return Y.json({error:"You are not a member of this site's team"},403);let E=await zn5(B,N,z),P=await CP({id:`pending-${K}`,title:`deco.cx \u2014 ${Z}`,connection_type:"HTTP",connection_url:R68,connection_token:E}).catch(()=>null),q=P?.tools?.length?P.tools:null,V=P?.scopes?.length?P.scopes:null,M=await Dn5(`${Z}.deco.site`),j=await G.storage.connections.create({id:K,organization_id:W,created_by:J,title:`deco.cx \u2014 ${Z}`,description:`Admin MCP for deco.cx site: ${Z}`,connection_type:"HTTP",connection_url:R68,connection_token:E,connection_headers:null,oauth_config:null,configuration_state:{SITE_NAME:Z},metadata:{source:"deco.cx-import"},icon:null,app_name:"deco.cx",app_id:null,tools:q,configuration_scopes:V});return Y.json({connId:j.id,icon:M})}catch(O){return console.error("[deco-sites] POST /connection error:",O),Y.json({error:"Failed to create connection"},500)}}),X};var VS0=D(()=>{jY();pK();f51();e5()});import{createHmac as wn5}from"crypto";import{mkdir as Ln5,writeFile as En5}from"fs/promises";import{dirname as Pn5,join as _68}from"path";function An5(X){let Y=X.replace(/[^a-zA-Z0-9_-]/g,"_");return _68(qn5,Y)}function Tn5(X){return X.replace(/^\/+/,"").replace(/\.\./g,"")}function C68(X,Y){let G=An5(X),Q=Tn5(Y);return _68(G,Q)}function v68(X,Y,G,Q,J){let $=h4().encryptionKey||"dev-secret",Z=`${X}:${Y}:${G}:${Q}`,W=wn5("sha256",$).update(Z).digest("hex");return J===W}function MS0(X){let Y=X.split(".").pop()?.toLowerCase()||"";return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",ico:"image/x-icon",bmp:"image/bmp",pdf:"application/pdf",json:"application/json",xml:"application/xml",txt:"text/plain",html:"text/html",htm:"text/html",css:"text/css",csv:"text/csv",md:"text/markdown",js:"application/javascript",mjs:"application/javascript",ts:"application/typescript",mp4:"video/mp4",webm:"video/webm",avi:"video/x-msvideo",mov:"video/quicktime",mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",zip:"application/zip",gz:"application/gzip",tar:"application/x-tar",woff:"font/woff",woff2:"font/woff2",ttf:"font/ttf",otf:"font/otf"}[Y]||"application/octet-stream"}var qn5="./data/assets",Wl1=(X)=>{let Y=new w6,G=X.orgFromPath?"/*":"/:orgId/*";return Y.get(G,async(Q)=>{let J=X.orgFromPath?Q.get("meshContext")?.organization?.id:Q.req.param("orgId");if(!J)return Q.json({error:"Missing organization context"},500);let $=X.orgFromPath?`/api/${Q.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${J}/`,Z=Q.req.path.replace($,"");if(!Z)return Q.json({error:"Missing key"},400);let W=Q.req.query("expires"),K=Q.req.query("signature"),H=Q.req.query("method");if(!W||!K||H!=="GET")return Q.json({error:"Invalid or missing signature parameters"},400);let U=parseInt(W,10);if(!Number.isFinite(U))return Q.json({error:"Invalid expires parameter"},400);let B=Math.floor(Date.now()/1000);if(U<B)return Q.json({error:"URL has expired"},403);if(!v68(J,Z,U,"GET",K))return Q.json({error:"Invalid signature"},403);let N=C68(J,Z);try{let O=Bun.file(N);if(!await O.exists())return Q.json({error:"File not found"},404);let w=MS0(Z);return new Response(O.stream(),{headers:{"Content-Type":w,"Content-Length":O.size.toString(),"Cache-Control":"private, max-age=3600"}})}catch(O){return console.error("Error serving file:",O),Q.json({error:"Failed to read file"},500)}}),Y.put(G,async(Q)=>{let J=X.orgFromPath?Q.get("meshContext")?.organization?.id:Q.req.param("orgId");if(!J)return Q.json({error:"Missing organization context"},500);let $=X.orgFromPath?`/api/${Q.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${J}/`,Z=Q.req.path.replace($,"");if(!Z)return Q.json({error:"Missing key"},400);let W=Q.req.query("expires"),K=Q.req.query("signature"),H=Q.req.query("method");if(!W||!K||H!=="PUT")return Q.json({error:"Invalid or missing signature parameters"},400);let U=parseInt(W,10);if(!Number.isFinite(U))return Q.json({error:"Invalid expires parameter"},400);let B=Math.floor(Date.now()/1000);if(U<B)return Q.json({error:"URL has expired"},403);if(!v68(J,Z,U,"PUT",K))return Q.json({error:"Invalid signature"},403);let N=C68(J,Z),O=Pn5(N);try{await Ln5(O,{recursive:!0});let z=await Q.req.arrayBuffer();return await En5(N,Buffer.from(z)),Q.json({success:!0,key:Z})}catch(z){return console.error("Error saving file:",z),Q.json({error:"Failed to save file"},500)}}),Y};var Kl1=D(()=>{jY();e5()});var f68="Payload Too Large",b68,Hl1=(X)=>{let Y=X.onError||(()=>{let Q=new Response(f68,{status:413});throw new B9(413,{res:Q})}),G=X.maxSize;return async function(J,$){if(!J.req.raw.body)return $();let Z=J.req.raw.headers.has("transfer-encoding"),W=J.req.raw.headers.has("content-length");if(W&&!Z)return parseInt(J.req.raw.headers.get("content-length")||"0",10)>G?Y(J):$();let K=0,H=J.req.raw.body.getReader(),B={body:new ReadableStream({async start(N){try{for(;;){let{done:O,value:z}=await H.read();if(O)break;if(K+=z.length,K>G){N.error(new b68(f68));break}N.enqueue(z)}}finally{N.close()}}}),duplex:"half"};if(J.req.raw=new Request(J.req.raw,B),await $(),J.error instanceof b68)J.res=await Y(J)}};var RS0=D(()=>{Iz();b68=class extends Error{constructor(X){super(X);this.name="BodyLimitError"}}});function Fl1(X){let Y=new w6;return Y.get("/kv/:key",async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let $=G.req.param("key"),Z=await X.kvStorage.get(J,$);if(Z===null)return G.json({error:"Not found"},404);return G.json({key:$,value:Z})}),Y.put("/kv/:key",Hl1({maxSize:In5,onError:(G)=>G.json({error:"Payload too large"},413)}),async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let $=G.req.param("key"),Z;try{Z=await G.req.json()}catch{return G.json({error:"Invalid JSON body"},400)}return await X.kvStorage.set(J,$,Z),G.json({ok:!0})}),Y.delete("/kv/:key",async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let $=G.req.param("key");return await X.kvStorage.delete(J,$),G.json({ok:!0})}),Y}var In5=1048576;var SS0=D(()=>{jY();RS0()});var Ul1=()=>{let X=new w6;return X.all("/",async(Y)=>{let G=await ur(Y.get("meshContext")),Q=new BH({enableJsonResponse:Y.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await G.connect(Q),Q.handleRequest(Y.req.raw)}),X};var kS0=D(()=>{jY();gr();hr()});var Bl1=()=>{let X=new w6;return X.get("/threads/:threadId/outputs",async(Y)=>{let G=Y.get("meshContext");if(!G.auth?.user?.id)throw new B9(401,{message:"Unauthorized"});let J=G.organization?.slug;if(!J)throw new B9(400,{message:"Organization required"});let $=Y.req.param("threadId");if(!$||!/^[A-Za-z0-9_-]+$/.test($))throw new B9(400,{message:"Invalid thread ID"});if(!await G.storage.threads.get($))throw new B9(404,{message:"Thread not found"});let W=G.objectStorage;if(!W)return Y.json({objects:[]});let K=await W.list({prefix:`model-outputs/${$}/`,maxKeys:200});return Y.json({objects:K.objects.map((H)=>{let U=H.key.split("/").pop()??H.key,B=H.key.split("/").map(encodeURIComponent).join("/");return{key:H.key,filename:U,size:H.size,uploadedAt:H.lastModified?.toISOString(),downloadUrl:`${G.baseUrl}/api/${encodeURIComponent(J)}/files/${B}`}})})}),X};var CS0=D(()=>{jY();Iz()});function Nl1(X){let Y=new w6;return Y.post("/trigger-callback",Hl1({maxSize:Vn5,onError:(G)=>G.json({error:"Payload too large"},413)}),async(G)=>{let Q=G.req.header("authorization");if(!Q?.startsWith("Bearer "))return G.json({error:"Missing or invalid Authorization header"},401);let J=Q.slice(7),$=await X.tokenStorage.validateToken(J);if(!$)return G.json({error:"Invalid callback token"},401);let Z=jn5.safeParse(await G.req.json().catch(()=>null));if(!Z.success)return G.json({error:"Invalid body",details:Z.error.issues},400);let{type:W,data:K}=Z.data;return X.eventTriggerEngine.notifyEvents([{source:$.connectionId,type:W,data:K??{},organizationId:$.organizationId}]),G.json({ok:!0,type:W},202)}),Y}var jn5,Vn5=1048576;var vS0=D(()=>{jY();RS0();F0();jn5=F.object({type:F.string().min(1),data:F.record(F.string(),F.unknown()).optional()})});var _S0=class{writer;encoder;writable;abortSubscribers=[];responseReadable;aborted=!1;closed=!1;constructor(X,Y){this.writable=X,this.writer=X.getWriter(),this.encoder=new TextEncoder;let G=Y.getReader();this.abortSubscribers.push(async()=>{await G.cancel()}),this.responseReadable=new ReadableStream({async pull(Q){let{done:J,value:$}=await G.read();J?Q.close():Q.enqueue($)},cancel:()=>{this.abort()}})}async write(X){try{if(typeof X==="string")X=this.encoder.encode(X);await this.writer.write(X)}catch{}return this}async writeln(X){return await this.write(X+`
|
|
6831
6831
|
`),this}sleep(X){return new Promise((Y)=>setTimeout(Y,X))}async close(){try{await this.writer.close()}catch{}this.closed=!0}async pipe(X){this.writer.releaseLock(),await X.pipeTo(this.writable,{preventClose:!0}),this.writer=this.writable.getWriter()}onAbort(X){this.abortSubscribers.push(X)}abort(){if(!this.aborted)this.aborted=!0,this.abortSubscribers.forEach((X)=>X())}};var fS0=()=>{};var Ol1=()=>{let X=typeof Bun<"u"?Bun.version:void 0;if(X===void 0)return!1;let Y=X.startsWith("1.1")||X.startsWith("1.0")||X.startsWith("0.");return Ol1=()=>Y,Y};var bS0=()=>{};var y68=D(()=>{fS0();bS0()});var h68,Mn5=async(X,Y,G)=>{try{await Y(X)}catch(Q){if(Q instanceof Error&&G)await G(Q,X),await X.writeSSE({event:"error",data:Q.message});else console.error(Q)}finally{X.close()}},Rn5,DA=(X,Y,G)=>{let{readable:Q,writable:J}=new TransformStream,$=new h68(J,Q);if(Ol1())X.req.raw.signal.addEventListener("abort",()=>{if(!$.closed)$.abort()});return Rn5.set($.responseReadable,X),X.header("Transfer-Encoding","chunked"),X.header("Content-Type","text/event-stream"),X.header("Cache-Control","no-cache"),X.header("Connection","keep-alive"),Mn5($,Y,G),X.newResponse($.responseReadable)};var x68=D(()=>{HD1();fS0();bS0();h68=class extends _S0{constructor(X,Y){super(X,Y)}async writeSSE(X){let G=(await D61(X.data,KD1.Stringify,!1,{})).split(/\r\n|\r|\n/).map((J)=>{return`data: ${J}`}).join(`
|
|
6832
6832
|
`);for(let J of["event","id","retry"])if(X[J]&&/[\r\n]/.test(X[J]))throw Error(`${J} must not contain "\\r" or "\\n"`);let Q=[X.event&&`event: ${X.event}`,G,X.id&&`id: ${X.id}`,X.retry&&`retry: ${X.retry}`].filter(Boolean).join(`
|
|
6833
6833
|
`)+`
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{e as t,j as i}from"./index-CsPnm66A.js";import{O as m}from"./select-model-Cx6hCHLC.js";import"./checkbox-Dl75QnG7.js";import"./Check-uCeCY94f.js";import"./input-BOyPyslv.js";import"./dialog-BG4etlBR.js";import"./X-vjP4Msb7.js";import"./drawer-Buc4-066.js";import"./tooltip-DKSC_TlS.js";import"./select-BkJAPRFR.js";import"./ChevronDown-BCKKMGkp.js";import"./ChevronUp-CImlARUB.js";import"./skeleton-BkdIXnLT.js";import"./Tool01-D8__PXyN.js";import"./RefreshCcw01-fb__YhOw.js";import"./SearchMd-Bv6wAjVm.js";import"./Settings02-ZxqKPBpN.js";import"./use-ai-providers-DeSA23rL.js";import"./constants-BgsGWL53.js";import"./chat-context-CErwb6k6.js";import"./use-virtual-mcp-BAEgLpb5.js";import"./use-collections-P_xycvTV.js";import"./use-decopilot-events-FPrAaowc.js";import"./create-sse-subscription-CxkOgzKf.js";import"./use-tasks-B1tiIeuc.js";import"./use-organization-settings-DkdX8Pu1.js";import"./ai-providers-logos-DD3qZ33J.js";import"./Zap-CSBwa9kl.js";import"./use-debounced-autosave-BN0dAXmt.js";import"./AlertCircle-Bjs1DRoe.js";import"./CheckCircle-BYjzCjZv.js";import"./Trash01-CaQDsaot.js";import"./index-BBwsyhew.js";import"./settings-section-OhWt9Ooj.js";import"./card-CvuzGHjO.js";import"./ArrowUpRight-TOJd4tk1.js";import"./switch-Bipu3FI7.js";import"./toggle-group-CG-UehNQ.js";import"./avatar-DMfNBsEa.js";import"./User01-oR5RStEl.js";import"./alert-dialog-C-BRVgvu.js";import"./formatDistanceToNow-Cb2QZZJn.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./unwrap-tool-result-BYXdCQMg.js";function V(){const o=t.c(1);let r;return o[0]===Symbol.for("react.memo_cache_sentinel")?(r=i.jsx(m,{}),o[0]=r):r=o[0],r}export{V as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{e as K,$ as Le,s as Ke,o as Ue,K as $e,n as Xe,a as pe,j as n,B as Te,t as Q,x as X,r as Oe,z as He,c as _e,D as ge}from"./index-CsPnm66A.js";import{S as Me,u as qe}from"./constants-BgsGWL53.js";import{t as Qe}from"./ChevronDown-BCKKMGkp.js";import{i as Ge}from"./ChevronRight-CBRO8ebn.js";import{s as Ve,t as Ye}from"./Star01-DO3o-Tm0.js";import{n as Je}from"./LinkExternal01-MfoA7_8K.js";import{s as Pe}from"./Plus-DJQM2qca.js";import{s as We}from"./Trash01-CaQDsaot.js";import{i as Ze}from"./Zap-CSBwa9kl.js";import{c as et,b as tt,d as st,f as nt,g as lt,e as ot,a as rt,A as at}from"./alert-dialog-C-BRVgvu.js";import{I as he}from"./input-BOyPyslv.js";import{T as it}from"./textarea-BrWSFj_2.js";import{P as Ne}from"./index-BBwsyhew.js";import{u as Re}from"./unwrap-tool-result-BYXdCQMg.js";import{u as ct}from"./use-debounced-autosave-BN0dAXmt.js";import"./tooltip-DKSC_TlS.js";import"./X-vjP4Msb7.js";function we(t){const e=K.c(8),{title:s,children:o,className:l}=t;let r;e[0]!==l?(r=_e("rounded-2xl border border-border/60 bg-background p-5",l),e[0]=l,e[1]=r):r=e[1];let i;e[2]!==s?(i=n.jsx("div",{className:"mb-4",children:n.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:s})}),e[2]=s,e[3]=i):i=e[3];let m;return e[4]!==o||e[5]!==r||e[6]!==i?(m=n.jsxs("div",{className:r,children:[i,o]}),e[4]=o,e[5]=r,e[6]=i,e[7]=m):m=e[7],m}function dt(t){const e=K.c(25),{onExtract:s,isExtracting:o}=t,[l,r]=Oe.useState("");let i;e[0]===Symbol.for("react.memo_cache_sentinel")?(i=n.jsx("div",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-primary/10",children:n.jsx(Ze,{size:18,className:"text-primary"})}),e[0]=i):i=e[0];let m,u;e[1]===Symbol.for("react.memo_cache_sentinel")?(m=n.jsx("p",{className:"text-sm font-medium text-foreground",children:"Auto-extract brand context"}),u=n.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Enter your website URL and we'll automatically extract your brand colors, fonts, logos, and company overview."}),e[1]=m,e[2]=u):(m=e[1],u=e[2]);let p;e[3]===Symbol.for("react.memo_cache_sentinel")?(p=d=>r(d.target.value),e[3]=p):p=e[3];let b;e[4]!==l||e[5]!==o||e[6]!==s?(b=d=>{d.key==="Enter"&&l.trim()&&!o&&s(l.trim())},e[4]=l,e[5]=o,e[6]=s,e[7]=b):b=e[7];let f;e[8]!==l||e[9]!==b?(f=n.jsx(he,{placeholder:"acme.com",value:l,onChange:p,className:"max-w-xs",onKeyDown:b}),e[8]=l,e[9]=b,e[10]=f):f=e[10];let c;e[11]!==l||e[12]!==o?(c=!l.trim()||o,e[11]=l,e[12]=o,e[13]=c):c=e[13];let a;e[14]!==l||e[15]!==s?(a=()=>s(l.trim()),e[14]=l,e[15]=s,e[16]=a):a=e[16];let x;e[17]===Symbol.for("react.memo_cache_sentinel")?(x=n.jsx(Ve,{size:14}),e[17]=x):x=e[17];const g=o?"Extracting...":"Extract";let h;e[18]!==g||e[19]!==c||e[20]!==a?(h=n.jsxs(Te,{variant:"outline",disabled:c,onClick:a,children:[x,g]}),e[18]=g,e[19]=c,e[20]=a,e[21]=h):h=e[21];let v;return e[22]!==h||e[23]!==f?(v=n.jsx("div",{className:"rounded-2xl border border-dashed border-border bg-muted/30 p-5",children:n.jsxs("div",{className:"flex items-start gap-4",children:[i,n.jsxs("div",{className:"flex-1",children:[m,u,n.jsxs("div",{className:"mt-3 flex gap-2",children:[f,h]})]})]})}),e[22]=h,e[23]=f,e[24]=v):v=e[24],v}function mt(t){const e=K.c(36),{form:s,onFieldChange:o,onFieldCommit:l}=t;let r;e[0]!==s?(r=s.watch("domain"),e[0]=s,e[1]=r):r=e[1];const i=r;let m;e[2]===Symbol.for("react.memo_cache_sentinel")?(m=n.jsx("label",{className:"mb-1 block text-xs text-muted-foreground",children:"Company name"}),e[2]=m):m=e[2];let u;e[3]!==o||e[4]!==l?(u=w=>{const{field:C}=w;return n.jsx(he,{...C,onChange:k=>{C.onChange(k),o()},onBlur:()=>{C.onBlur(),l()},placeholder:"Acme Corp"})},e[3]=o,e[4]=l,e[5]=u):u=e[5];let p;e[6]!==s.control||e[7]!==u?(p=n.jsxs("div",{children:[m,n.jsx(ge,{control:s.control,name:"name",render:u})]}),e[6]=s.control,e[7]=u,e[8]=p):p=e[8];let b;e[9]===Symbol.for("react.memo_cache_sentinel")?(b=n.jsx("span",{children:"Domain"}),e[9]=b):b=e[9];let f;e[10]!==i?(f=i&&n.jsxs("a",{href:`https://${i}`,target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1 transition-colors hover:text-foreground",children:[n.jsx(Je,{size:10}),"open"]}),e[10]=i,e[11]=f):f=e[11];let c;e[12]!==f?(c=n.jsxs("label",{className:"mb-1 flex items-center justify-between text-xs text-muted-foreground",children:[b,f]}),e[12]=f,e[13]=c):c=e[13];let a;e[14]!==o||e[15]!==l?(a=w=>{const{field:C}=w;return n.jsx(he,{...C,onChange:k=>{C.onChange(k),o()},onBlur:()=>{C.onBlur(),l()},placeholder:"acme.com"})},e[14]=o,e[15]=l,e[16]=a):a=e[16];let x;e[17]!==s.control||e[18]!==a?(x=n.jsx(ge,{control:s.control,name:"domain",render:a}),e[17]=s.control,e[18]=a,e[19]=x):x=e[19];let g;e[20]!==c||e[21]!==x?(g=n.jsxs("div",{children:[c,x]}),e[20]=c,e[21]=x,e[22]=g):g=e[22];let h;e[23]!==g||e[24]!==p?(h=n.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[p,g]}),e[23]=g,e[24]=p,e[25]=h):h=e[25];let v;e[26]===Symbol.for("react.memo_cache_sentinel")?(v=n.jsx("label",{className:"mb-1 block text-xs text-muted-foreground",children:"Overview"}),e[26]=v):v=e[26];let d;e[27]!==o||e[28]!==l?(d=w=>{const{field:C}=w;return n.jsx(it,{...C,onChange:k=>{C.onChange(k),o()},onBlur:()=>{C.onBlur(),l()},placeholder:"Brief description of what the company does...",rows:3})},e[27]=o,e[28]=l,e[29]=d):d=e[29];let y;e[30]!==s.control||e[31]!==d?(y=n.jsxs("div",{children:[v,n.jsx(ge,{control:s.control,name:"overview",render:d})]}),e[30]=s.control,e[31]=d,e[32]=y):y=e[32];let N;return e[33]!==h||e[34]!==y?(N=n.jsx(we,{title:"Company Overview",children:n.jsxs("div",{className:"space-y-3",children:[h,y]})}),e[33]=h,e[34]=y,e[35]=N):N=e[35],N}const ft={backgroundImage:"linear-gradient(45deg, #e5e7eb 25%, transparent 25%, transparent 75%, #e5e7eb 75%), linear-gradient(45deg, #e5e7eb 25%, transparent 25%, transparent 75%, #e5e7eb 75%)",backgroundSize:"8px 8px",backgroundPosition:"0 0, 4px 4px",backgroundColor:"#fff"};function Ae(t){const e=K.c(22),{form:s,name:o,label:l,imgClassName:r,onFieldChange:i,onFieldCommit:m}=t,u=r===void 0?"h-full w-full object-contain p-3":r;let p;e[0]!==s||e[1]!==o?(p=s.watch(o),e[0]=s,e[1]=o,e[2]=p):p=e[2];const b=p;let f;e[3]!==u||e[4]!==l||e[5]!==b?(f=n.jsx("div",{className:"flex aspect-video w-28 shrink-0 items-center justify-center overflow-hidden rounded-xl",style:ft,children:b?n.jsx("img",{src:b,alt:l,className:u,loading:"lazy"}):n.jsxs("span",{className:"text-[10px] text-muted-foreground/70",children:["No ",l.toLowerCase()]})}),e[3]=u,e[4]=l,e[5]=b,e[6]=f):f=e[6];let c;e[7]!==l?(c=n.jsxs("label",{className:"mb-1 block text-xs text-muted-foreground",children:[l," URL"]}),e[7]=l,e[8]=c):c=e[8];let a;e[9]!==i||e[10]!==m?(a=v=>{const{field:d}=v;return n.jsx(he,{...d,onChange:y=>{d.onChange(y),i()},onBlur:()=>{d.onBlur(),m()},placeholder:"https://..."})},e[9]=i,e[10]=m,e[11]=a):a=e[11];let x;e[12]!==s.control||e[13]!==o||e[14]!==a?(x=n.jsx(ge,{control:s.control,name:o,render:a}),e[12]=s.control,e[13]=o,e[14]=a,e[15]=x):x=e[15];let g;e[16]!==c||e[17]!==x?(g=n.jsxs("div",{className:"flex-1",children:[c,x]}),e[16]=c,e[17]=x,e[18]=g):g=e[18];let h;return e[19]!==f||e[20]!==g?(h=n.jsxs("div",{className:"flex items-start gap-3",children:[f,g]}),e[19]=f,e[20]=g,e[21]=h):h=e[21],h}function ut(t){const e=K.c(4),{form:s,onFieldChange:o,onFieldCommit:l}=t;let r;return e[0]!==s||e[1]!==o||e[2]!==l?(r=n.jsx(we,{title:"Logos & Images",children:n.jsxs("div",{className:"space-y-3",children:[n.jsx(Ae,{form:s,name:"logo",label:"Logo",onFieldChange:o,onFieldCommit:l}),n.jsx(Ae,{form:s,name:"favicon",label:"Favicon",imgClassName:"h-12 w-12 object-contain",onFieldChange:o,onFieldCommit:l}),n.jsx(Ae,{form:s,name:"ogImage",label:"SEO / OG image",imgClassName:"h-full w-full object-contain",onFieldChange:o,onFieldCommit:l})]})}),e[0]=s,e[1]=o,e[2]=l,e[3]=r):r=e[3],r}const xt=[{key:"heading",label:"Headings"},{key:"body",label:"Body"},{key:"code",label:"Code"}];function gt(t){const e=K.c(6),{form:s,onFieldChange:o,onFieldCommit:l}=t;let r;e[0]!==s||e[1]!==o||e[2]!==l?(r=xt.map(m=>{const{key:u,label:p}=m,b=`fonts.${u}`,f=s.watch(b);return n.jsxs("div",{children:[n.jsxs("label",{className:"mb-1 flex items-center gap-3 text-xs text-muted-foreground",children:[n.jsx("span",{className:"w-7 text-base font-medium leading-none text-foreground",children:"Aa"}),n.jsx("span",{children:p}),f&&n.jsx("span",{className:"ml-auto truncate text-foreground",style:{fontFamily:f},children:f})]}),n.jsx(ge,{control:s.control,name:b,render:c=>{const{field:a}=c;return n.jsx(he,{...a,value:a.value??"",onChange:x=>{a.onChange(x),o()},onBlur:()=>{a.onBlur(),l()},placeholder:`Font family for ${p.toLowerCase()}`})}})]},u)}),e[0]=s,e[1]=o,e[2]=l,e[3]=r):r=e[3];let i;return e[4]!==r?(i=n.jsx(we,{title:"Fonts",children:n.jsx("div",{className:"space-y-2",children:r})}),e[4]=r,e[5]=i):i=e[5],i}const ht=[{key:"primary",label:"Primary"},{key:"secondary",label:"Secondary"},{key:"accent",label:"Accent"},{key:"background",label:"Background"},{key:"foreground",label:"Foreground"}];function pt(t){const e=K.c(6),{form:s,onFieldChange:o,onFieldCommit:l}=t;let r;e[0]!==s||e[1]!==o||e[2]!==l?(r=ht.map(m=>{const{key:u,label:p}=m,b=`colors.${u}`;return n.jsx(ge,{control:s.control,name:b,render:f=>{const{field:c}=f;return n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("input",{type:"color",value:c.value??"#000000",onChange:a=>{c.onChange(a.target.value),o()},onBlur:()=>{c.onBlur(),l()},className:"h-9 w-9 shrink-0 cursor-pointer rounded-lg border border-border bg-transparent p-0.5"}),n.jsx(he,{value:c.value??"",onChange:a=>{c.onChange(a.target.value),o()},onBlur:()=>{c.onBlur(),l()},placeholder:"#000000",className:"w-28"}),n.jsx("span",{className:"flex-1 text-xs text-muted-foreground",children:p})]})}},u)}),e[0]=s,e[1]=o,e[2]=l,e[3]=r):r=e[3];let i;return e[4]!==r?(i=n.jsx(we,{title:"Colors",children:n.jsx("div",{className:"space-y-2",children:r})}),e[4]=r,e[5]=i):i=e[5],i}function bt(t){const e=K.c(133),{brand:s,client:o,onChanged:l}=t,[r,i]=Oe.useState(s.isDefault??!1),[m,u]=Oe.useState(!1),p=s.name??"",b=s.domain??"",f=s.overview??"",c=s.logo??"",a=s.favicon??"",x=s.ogImage??"";let g;e[0]!==s.fonts?(g=s.fonts??{},e[0]=s.fonts,e[1]=g):g=e[1];let h;e[2]!==s.colors?(h=s.colors??{},e[2]=s.colors,e[3]=h):h=e[3];let v;e[4]!==p||e[5]!==b||e[6]!==f||e[7]!==c||e[8]!==a||e[9]!==x||e[10]!==g||e[11]!==h?(v={values:{name:p,domain:b,overview:f,logo:c,favicon:a,ogImage:x,fonts:g,colors:h}},e[4]=p,e[5]=b,e[6]=f,e[7]=c,e[8]=a,e[9]=x,e[10]=g,e[11]=h,e[12]=v):v=e[12];const d=He(v);let y;e[13]!==s.id||e[14]!==s.images||e[15]!==o?(y=async j=>{const Fe=Object.values(j.fonts).some(Et),Ie=Object.values(j.colors).some(kt),ze={id:s.id,name:j.name,domain:j.domain,overview:j.overview,logo:j.logo||null,favicon:j.favicon||null,ogImage:j.ogImage||null,fonts:Fe?j.fonts:null,colors:Ie?j.colors:null,images:s.images};await o.callTool({name:"BRAND_CONTEXT_UPDATE",arguments:ze})},e[13]=s.id,e[14]=s.images,e[15]=o,e[16]=y):y=e[16];let N;e[17]!==s.id||e[18]!==d||e[19]!==l?(N=(j,Fe)=>{Q("brand_updated",{brand_id:s.id,fields:Object.keys(d.formState.dirtyFields)}),d.reset(Fe),l()},e[17]=s.id,e[18]=d,e[19]=l,e[20]=N):N=e[20];let w;e[21]!==y||e[22]!==N?(w={mutationFn:y,onSuccess:N,onError:Dt},e[21]=y,e[22]=N,e[23]=w):w=e[23];const C=pe(w);let k;e[24]!==d||e[25]!==C?(k={delayMs:500,save:async()=>{d.formState.isDirty&&await C.mutateAsync(d.getValues())}},e[24]=d,e[25]=C,e[26]=k):k=e[26];const{schedule:$,flush:P}=ct(k);let R;e[27]!==s.id||e[28]!==o?(R=async()=>{await o.callTool({name:"BRAND_CONTEXT_DELETE",arguments:{id:s.id}})},e[27]=s.id,e[28]=o,e[29]=R):R=e[29];let H;e[30]!==s.id||e[31]!==l?(H=()=>{Q("brand_deleted",{brand_id:s.id}),u(!1),l(),X.success("Brand deleted")},e[30]=s.id,e[31]=l,e[32]=H):H=e[32];let U;e[33]!==R||e[34]!==H?(U={mutationFn:R,onSuccess:H,onError:wt},e[33]=R,e[34]=H,e[35]=U):U=e[35];const{mutate:I,isPending:D}=pe(U);let E;e[36]!==s.id||e[37]!==s.isDefault||e[38]!==o?(E=async()=>{await o.callTool({name:"BRAND_CONTEXT_UPDATE",arguments:{id:s.id,isDefault:!s.isDefault}})},e[36]=s.id,e[37]=s.isDefault,e[38]=o,e[39]=E):E=e[39];let B;e[40]!==s.id||e[41]!==s.isDefault||e[42]!==l?(B=()=>{Q(s.isDefault?"brand_unset_as_default":"brand_set_as_default",{brand_id:s.id}),l(),X.success(s.isDefault?"Removed as default brand":"Set as default brand")},e[40]=s.id,e[41]=s.isDefault,e[42]=l,e[43]=B):B=e[43];let M;e[44]!==E||e[45]!==B?(M={mutationFn:E,onSuccess:B,onError:_t},e[44]=E,e[45]=B,e[46]=M):M=e[46];const{mutate:G}=pe(M),q=s.isDefault?"border-primary/30":"border-border/60";let z;e[47]!==q?(z=_e("rounded-2xl border bg-background",q),e[47]=q,e[48]=z):z=e[48];let S;e[49]!==r?(S=()=>i(!r),e[49]=r,e[50]=S):S=e[50];let F;e[51]!==r?(F=n.jsx("span",{className:"shrink-0 text-muted-foreground",children:r?n.jsx(Qe,{size:14}):n.jsx(Ge,{size:14})}),e[51]=r,e[52]=F):F=e[52];let A;e[53]!==s.logo||e[54]!==s.name?(A=s.logo?n.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded-lg",style:{backgroundImage:"linear-gradient(45deg, #e5e7eb 25%, transparent 25%, transparent 75%, #e5e7eb 75%), linear-gradient(45deg, #e5e7eb 25%, transparent 25%, transparent 75%, #e5e7eb 75%)",backgroundSize:"6px 6px",backgroundPosition:"0 0, 3px 3px",backgroundColor:"#fff"},children:n.jsx("img",{src:s.logo,alt:"",className:"h-full w-full object-contain p-1",onError:Nt})}):n.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-muted",children:n.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:s.name?.charAt(0)?.toUpperCase()||"?"})}),e[53]=s.logo,e[54]=s.name,e[55]=A):A=e[55];const L=s.name||"Untitled Brand";let T;e[56]!==L?(T=n.jsx("span",{className:"text-sm font-medium text-foreground",children:L}),e[56]=L,e[57]=T):T=e[57];let _;e[58]!==s.domain?(_=s.domain&&n.jsx("span",{className:"truncate text-xs text-muted-foreground",children:s.domain}),e[58]=s.domain,e[59]=_):_=e[59];let O;e[60]!==T||e[61]!==_?(O=n.jsxs("div",{className:"flex flex-1 flex-col items-start gap-0.5 overflow-hidden text-left",children:[T,_]}),e[60]=T,e[61]=_,e[62]=O):O=e[62];let V;e[63]!==s.colors||e[64]!==r?(V=!r&&s.colors&&Object.values(s.colors).some(Ct)&&n.jsx("div",{className:"flex shrink-0 gap-1",children:Object.entries(s.colors).filter(vt).map(yt)}),e[63]=s.colors,e[64]=r,e[65]=V):V=e[65];let Y;e[66]!==s.fonts||e[67]!==r?(Y=!r&&s.fonts&&Object.values(s.fonts).some(jt)&&n.jsx("span",{className:"shrink-0 text-xs text-muted-foreground",children:Object.values(s.fonts).filter(Boolean).join(", ")}),e[66]=s.fonts,e[67]=r,e[68]=Y):Y=e[68];const De=s.isDefault?"opacity-100":"opacity-0 hover:bg-muted group-hover:opacity-100";let J;e[69]!==De?(J=_e("flex h-7 w-7 shrink-0 items-center justify-center rounded-lg transition-opacity",De),e[69]=De,e[70]=J):J=e[70];let W,Z;e[71]!==G?(W=j=>{j.stopPropagation(),G()},Z=j=>{j.key==="Enter"&&(j.stopPropagation(),G())},e[71]=G,e[72]=W,e[73]=Z):(W=e[72],Z=e[73]);const ke=s.isDefault?"Unset as default":"Set as default",Ee=s.isDefault?"text-primary fill-primary":"text-muted-foreground";let ee;e[74]!==Ee?(ee=_e(Ee),e[74]=Ee,e[75]=ee):ee=e[75];let te;e[76]!==ee?(te=n.jsx(Ye,{size:13,className:ee}),e[76]=ee,e[77]=te):te=e[77];let se;e[78]!==J||e[79]!==W||e[80]!==Z||e[81]!==ke||e[82]!==te?(se=n.jsx("span",{role:"button",tabIndex:0,className:J,onClick:W,onKeyDown:Z,title:ke,children:te}),e[78]=J,e[79]=W,e[80]=Z,e[81]=ke,e[82]=te,e[83]=se):se=e[83];let be,je;e[84]===Symbol.for("react.memo_cache_sentinel")?(be=j=>{j.stopPropagation(),u(!0)},je=j=>{j.key==="Enter"&&(j.stopPropagation(),u(!0))},e[84]=be,e[85]=je):(be=e[84],je=e[85]);let ye;e[86]===Symbol.for("react.memo_cache_sentinel")?(ye=n.jsx("span",{role:"button",tabIndex:0,className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-lg opacity-0 transition-opacity hover:bg-destructive/10 group-hover:opacity-100",onClick:be,onKeyDown:je,title:"Delete brand",children:n.jsx(We,{size:13,className:"text-muted-foreground"})}),e[86]=ye):ye=e[86];let ne;e[87]!==S||e[88]!==F||e[89]!==A||e[90]!==O||e[91]!==V||e[92]!==Y||e[93]!==se?(ne=n.jsxs("button",{type:"button",className:"flex w-full items-center gap-3 p-5",onClick:S,children:[F,A,O,V,Y,se,ye]}),e[87]=S,e[88]=F,e[89]=A,e[90]=O,e[91]=V,e[92]=Y,e[93]=se,e[94]=ne):ne=e[94];let le;e[95]!==r||e[96]!==P||e[97]!==d||e[98]!==$?(le=r&&n.jsxs("div",{className:"space-y-3 px-5 pb-5",children:[n.jsx(mt,{form:d,onFieldChange:$,onFieldCommit:P}),n.jsx(ut,{form:d,onFieldChange:$,onFieldCommit:P}),n.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[n.jsx(pt,{form:d,onFieldChange:$,onFieldCommit:P}),n.jsx(gt,{form:d,onFieldChange:$,onFieldCommit:P})]})]}),e[95]=r,e[96]=P,e[97]=d,e[98]=$,e[99]=le):le=e[99];let oe;e[100]!==D?(oe=j=>{!j&&!D&&u(!1)},e[100]=D,e[101]=oe):oe=e[101];let ve;e[102]===Symbol.for("react.memo_cache_sentinel")?(ve=n.jsx(et,{children:"Delete brand?"}),e[102]=ve):ve=e[102];const Be=s.name||"this brand";let re;e[103]!==Be?(re=n.jsxs("p",{children:["This will permanently delete"," ",n.jsx("span",{className:"font-medium text-foreground",children:Be}),". This action cannot be undone."]}),e[103]=Be,e[104]=re):re=e[104];let ae;e[105]!==s.isDefault?(ae=s.isDefault&&n.jsxs("p",{className:"mt-2 rounded-lg border border-destructive/30 bg-destructive/5 p-2 text-destructive",children:[n.jsx("span",{className:"font-medium",children:"Heads up:"})," this is your organization's default brand. Deleting it will leave your organization without a default brand until you set another."]}),e[105]=s.isDefault,e[106]=ae):ae=e[106];let ie;e[107]!==re||e[108]!==ae?(ie=n.jsxs(tt,{children:[ve,n.jsx(st,{asChild:!0,children:n.jsxs("div",{children:[re,ae]})})]}),e[107]=re,e[108]=ae,e[109]=ie):ie=e[109];let ce;e[110]!==D?(ce=n.jsx(nt,{disabled:D,children:"Cancel"}),e[110]=D,e[111]=ce):ce=e[111];let de;e[112]!==I?(de=j=>{j.preventDefault(),I()},e[112]=I,e[113]=de):de=e[113];const Se=D?"Deleting...":"Delete";let me;e[114]!==D||e[115]!==de||e[116]!==Se?(me=n.jsx(lt,{onClick:de,disabled:D,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:Se}),e[114]=D,e[115]=de,e[116]=Se,e[117]=me):me=e[117];let fe;e[118]!==ce||e[119]!==me?(fe=n.jsxs(ot,{children:[ce,me]}),e[118]=ce,e[119]=me,e[120]=fe):fe=e[120];let ue;e[121]!==ie||e[122]!==fe?(ue=n.jsxs(rt,{children:[ie,fe]}),e[121]=ie,e[122]=fe,e[123]=ue):ue=e[123];let xe;e[124]!==m||e[125]!==oe||e[126]!==ue?(xe=n.jsx(at,{open:m,onOpenChange:oe,children:ue}),e[124]=m,e[125]=oe,e[126]=ue,e[127]=xe):xe=e[127];let Ce;return e[128]!==z||e[129]!==ne||e[130]!==le||e[131]!==xe?(Ce=n.jsxs("div",{className:z,children:[ne,le,xe]}),e[128]=z,e[129]=ne,e[130]=le,e[131]=xe,e[132]=Ce):Ce=e[132],Ce}function jt(t){return t}function yt(t){const[e,s]=t;return n.jsx("div",{className:"h-5 w-5 rounded-full border border-border/40",style:{backgroundColor:s},title:`${e}: ${s}`},e)}function vt(t){const[,e]=t;return e}function Ct(t){return t}function Nt(t){t.target.style.display="none"}function _t(){return X.error("Failed to update default brand")}function wt(){return X.error("Failed to delete brand")}function Dt(){return X.error("Failed to save brand context")}function kt(t){return t?.trim()}function Et(t){return t?.trim()}function Bt(){const t=K.c(57),{brandExtractEnabled:e}=Le(),{org:s}=Ke();let o;t[0]!==s.id||t[1]!==s.slug?(o={connectionId:Me,orgId:s.id,orgSlug:s.slug},t[0]=s.id,t[1]=s.slug,t[2]=o):o=t[2];const l=qe(o),r=Ue();let i;t[3]!==s.id?(i=$e.brandContext(s.id),t[3]=s.id,t[4]=i):i=t[4];let m;t[5]!==l?(m=async()=>{const _=await l.callTool({name:"BRAND_CONTEXT_LIST",arguments:{includeArchived:!1}}),O=Re(_);return Array.isArray(O?.items)?O.items:[]},t[5]=l,t[6]=m):m=t[6];let u;t[7]!==i||t[8]!==m?(u={queryKey:i,queryFn:m},t[7]=i,t[8]=m,t[9]=u):u=t[9];const{data:p}=Xe(u),f=(p===void 0?[]:p).filter(At);let c;t[10]!==s.id||t[11]!==r?(c=()=>r.invalidateQueries({queryKey:$e.brandContext(s.id),refetchType:"all"}),t[10]=s.id,t[11]=r,t[12]=c):c=t[12];const a=c;let x;t[13]!==l?(x=async()=>{await l.callTool({name:"BRAND_CONTEXT_CREATE",arguments:{name:"New Brand",domain:"example.com",overview:""}})},t[13]=l,t[14]=x):x=t[14];let g;t[15]!==a?(g=()=>{Q("brand_created"),a(),X.success("Brand created")},t[15]=a,t[16]=g):g=t[16];let h;t[17]!==x||t[18]!==g?(h={mutationFn:x,onSuccess:g,onError:Ft},t[17]=x,t[18]=g,t[19]=h):h=t[19];const{mutate:v,isPending:d}=pe(h);let y;t[20]!==l?(y=async _=>{Q("brand_extract_started",{domain:_});const O=await l.callTool({name:"BRAND_CONTEXT_EXTRACT",arguments:{domain:_}});Re(O)},t[20]=l,t[21]=y):y=t[21];let N;t[22]!==a?(N=()=>{Q("brand_extract_succeeded"),a(),X.success("Brand extracted successfully")},t[22]=a,t[23]=N):N=t[23];let w;t[24]!==N||t[25]!==y?(w={mutationFn:y,onSuccess:N,onError:St},t[24]=N,t[25]=y,t[26]=w):w=t[26];const{mutate:C,isPending:k}=pe(w),$=Ne,P=Ne,R=Ne,H="flex flex-col gap-6";let U;t[27]===Symbol.for("react.memo_cache_sentinel")?(U=n.jsxs("div",{children:[n.jsx(Ne.Title,{children:"Brand Context"}),n.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Define your brand profiles. Each brand is available as an MCP prompt for AI clients."})]}),t[27]=U):U=t[27];let I;t[28]!==v?(I=()=>v(),t[28]=v,t[29]=I):I=t[29];let D;t[30]===Symbol.for("react.memo_cache_sentinel")?(D=n.jsx(Pe,{size:14}),t[30]=D):D=t[30];let E;t[31]!==d||t[32]!==I?(E=n.jsxs("div",{className:"flex items-center justify-between",children:[U,n.jsxs(Te,{variant:"outline",onClick:I,disabled:d,children:[D,"Add Brand"]})]}),t[31]=d,t[32]=I,t[33]=E):E=t[33];let B;t[34]!==e||t[35]!==C||t[36]!==k?(B=e&&n.jsx(dt,{onExtract:_=>C(_),isExtracting:k}),t[34]=e,t[35]=C,t[36]=k,t[37]=B):B=t[37];const M=f.length===0&&n.jsxs("div",{className:"rounded-2xl border border-dashed border-border bg-muted/30 p-8 text-center",children:[n.jsx("p",{className:"text-sm text-muted-foreground",children:"No brands configured yet."}),n.jsxs(Te,{variant:"outline",size:"sm",className:"mt-3",onClick:()=>v(),disabled:d,children:[n.jsx(Pe,{size:14}),"Add your first brand"]})]}),G="group space-y-3";let q;t[38]!==l||t[39]!==a?(q=_=>n.jsx(bt,{brand:_,client:l,onChanged:a},_.id),t[38]=l,t[39]=a,t[40]=q):q=t[40];const z=f.map(q);let S;t[41]!==z?(S=n.jsx("div",{className:G,children:z}),t[41]=z,t[42]=S):S=t[42];let F;t[43]!==E||t[44]!==B||t[45]!==M||t[46]!==S?(F=n.jsxs("div",{className:H,children:[E,B,M,S]}),t[43]=E,t[44]=B,t[45]=M,t[46]=S,t[47]=F):F=t[47];let A;t[48]!==R.Body||t[49]!==F?(A=n.jsx(R.Body,{children:F}),t[48]=R.Body,t[49]=F,t[50]=A):A=t[50];let L;t[51]!==P.Content||t[52]!==A?(L=n.jsx(P.Content,{children:A}),t[51]=P.Content,t[52]=A,t[53]=L):L=t[53];let T;return t[54]!==$||t[55]!==L?(T=n.jsx($,{children:L}),t[54]=$,t[55]=L,t[56]=T):T=t[56],T}function St(t){Q("brand_extract_failed",{error:t instanceof Error?t.message:"unknown"}),X.error(t instanceof Error?t.message:"Failed to extract brand")}function Ft(){return X.error("Failed to create brand")}function At(t){return!t.archivedAt}function Yt(){const t=K.c(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=n.jsx(Bt,{}),t[0]=e):e=t[0],e}export{Yt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as re,s as ce,o as de,z as me,C as ue,a as fe,t as Y,x as K,K as te,j as s,D as se,H as ge,J as W,e as $,r as H,B as G,c as xe,M as pe}from"./index-CsPnm66A.js";import{P as V}from"./index-BBwsyhew.js";import{u as he}from"./use-org-auth-client-C8ofbFUE.js";import{u as je}from"./use-debounced-autosave-BN0dAXmt.js";import{A as be}from"./avatar-DMfNBsEa.js";import{I as ve}from"./input-BOyPyslv.js";import{S as X,a as Z,b as Q,c as Se,d as ye}from"./settings-section-OhWt9Ooj.js";import{D as Ne}from"./domain-settings-DrdMk60b.js";import{u as Ce,a as ne,D as we,c as _e,S as ze,v as De,K as Ae,P as Pe,d as ke,C as Ie,s as Ee,b as Te,e as Oe}from"./collection-search-FABAZQZ-.js";import{W as ee,i as Re}from"./constants-BgsGWL53.js";import{b as le}from"./use-virtual-mcp-BAEgLpb5.js";import{b as Le,P as $e,a as Fe}from"./popover-DJTDvTFH.js";import{S as Me}from"./skeleton-BkdIXnLT.js";import{y as Be}from"./agent-icon-BwpnpUbm.js";import{s as He}from"./Plus-DJQM2qca.js";import{a as ae}from"./Users03-BsIZE4Pm.js";import{i as Ke}from"./X-vjP4Msb7.js";import{I as J}from"./integration-icon-BXKm0FXI.js";import{a as Ue,d as qe}from"./use-organization-settings-DkdX8Pu1.js";import"./tooltip-DKSC_TlS.js";import"./User01-oR5RStEl.js";import"./card-CvuzGHjO.js";import"./ArrowUpRight-TOJd4tk1.js";import"./unwrap-tool-result-BYXdCQMg.js";import"./switch-Bipu3FI7.js";import"./SearchMd-Bv6wAjVm.js";import"./use-collections-P_xycvTV.js";import"./AlertCircle-Bjs1DRoe.js";import"./Tool01-D8__PXyN.js";import"./XClose-CaKKQVXU.js";import"./RefreshCcw01-fb__YhOw.js";import"./ArrowNarrowLeft-4-qtN4yo.js";import"./XCircle-Bjg8qJ8l.js";import"./ZapSquare-B2TPVAEq.js";import"./CheckCircle-BYjzCjZv.js";import"./Check-uCeCY94f.js";import"./ChevronDown-BCKKMGkp.js";import"./ChevronRight-CBRO8ebn.js";import"./ChevronUp-CImlARUB.js";import"./DotsVertical-DYz9Xowp.js";import"./Container-UmsQv9ox.js";import"./Star01-DO3o-Tm0.js";import"./Palette-CYlPasQS.js";import"./LinkExternal01-MfoA7_8K.js";import"./Lock01-DY0dR_EF.js";import"./Sun-CZnXZvsq.js";import"./Play-BOunn_Vy.js";import"./Settings02-ZxqKPBpN.js";import"./Shield01-DLP8JywO.js";import"./Trash01-CaQDsaot.js";import"./Zap-CSBwa9kl.js";const Ve=ge({name:W().min(1,"Name is required").max(255,"Name is too long"),slug:W().min(1,"Slug is required").max(50,"Slug is too long").regex(/^[a-z0-9-]+$/,"Slug must contain only lowercase letters, numbers, and hyphens"),logo:W().optional()});function Ge(t){const e=$.c(13),{value:a,onChange:l,name:r,disabled:d}=t,n=H.useRef(null);let h;e[0]===Symbol.for("react.memo_cache_sentinel")?(h=()=>n.current?.click(),e[0]=h):h=e[0];const m=h;let b;e[1]!==l?(b=z=>{const x=z.target.files?.[0];if(!x)return;if(x.size>2097152){K.error("Image must be smaller than 2MB");return}const v=new FileReader;v.onerror=We,v.onloadend=()=>{v.result&&l(v.result),n.current&&(n.current.value="")},v.readAsDataURL(x)},e[1]=l,e[2]=b):b=e[2];const o=b;let i;e[3]!==d||e[4]!==o?(i=s.jsx("input",{ref:n,type:"file",accept:"image/*",onChange:o,className:"hidden",disabled:d}),e[3]=d,e[4]=o,e[5]=i):i=e[5];const u=a||void 0,j=r??"?";let f;e[6]!==u||e[7]!==j?(f=s.jsx(be,{url:u,fallback:j,shape:"square",size:"base"}),e[6]=u,e[7]=j,e[8]=f):f=e[8];let g;return e[9]!==d||e[10]!==i||e[11]!==f?(g=s.jsxs("button",{type:"button",onClick:m,disabled:d,className:"rounded-lg overflow-hidden hover:ring-2 hover:ring-border transition-all disabled:opacity-50","aria-label":"Upload organization logo",children:[i,f]}),e[9]=d,e[10]=i,e[11]=f,e[12]=g):g=e[12],g}function We(){return K.error("Failed to read image")}function Qe(){const t=re(),{org:e}=ce(),a=he(),l=de(),r=me({resolver:ue(Ve),values:{name:e.name??"",slug:e.slug??"",logo:e.logo??""}}),d=fe({mutationFn:async o=>{const i={name:o.name,slug:o.slug};o.logo&&(i.logo=o.logo);const u=await a.organization.update({data:i});if(u?.error)throw new Error(u.error.message||"Failed to update organization");return u},onSuccess:(o,i)=>{Y("organization_settings_updated",{organization_id:e.id,fields:Object.keys(i)}),l.invalidateQueries({queryKey:te.organizations()}),l.invalidateQueries({queryKey:te.activeOrganization(e.slug)}),o?.data?.slug&&o.data.slug!==e.slug&&t({to:"/$org/settings/general",params:{org:o.data.slug}})},onError:(o,i)=>{Y("organization_settings_update_failed",{organization_id:e.id,fields:Object.keys(i),error:o instanceof Error?o.message:String(o)}),K.error(o instanceof Error?o.message:"Failed to update organization")}}),{schedule:n,flush:h}=je({save:async()=>{!r.formState.isDirty||!await r.trigger()||await d.mutateAsync(r.getValues())}}),m=r.formState.errors,b=typeof window<"u"?`${window.location.host}/`:"";return s.jsx(X,{children:s.jsxs(Z,{children:[s.jsx(Q,{title:"Logo",description:"Recommended size is 256x256px",action:s.jsx(Ge,{value:r.watch("logo"),onChange:o=>{r.setValue("logo",o??"",{shouldDirty:!0}),h()},name:r.watch("name")})}),s.jsx(Q,{title:"Name",action:s.jsx(se,{control:r.control,name:"name",render:({field:o})=>s.jsx(ve,{id:"org-name",...o,onChange:i=>{o.onChange(i),n()},onBlur:()=>{o.onBlur(),h()},placeholder:"Organization name",className:"w-[280px]"})})}),s.jsx(Q,{title:"URL",action:s.jsxs("div",{className:"flex items-center w-[280px] rounded-md border border-input bg-input/30 focus-within:ring-2 focus-within:ring-ring/50 overflow-hidden",children:[b&&s.jsx("span",{className:"pl-3 text-sm text-muted-foreground select-none",children:b}),s.jsx(se,{control:r.control,name:"slug",render:({field:o})=>s.jsx("input",{id:"org-slug",value:o.value??"",name:o.name,ref:o.ref,placeholder:"my-organization",className:"flex-1 min-w-0 bg-transparent px-2 py-1.5 text-sm text-foreground placeholder:text-muted-foreground/60 outline-none",onChange:i=>{const u=i.target.value.toLowerCase().replace(/[^a-z0-9-]/g,"");r.setValue("slug",u,{shouldDirty:!0,shouldTouch:!0,shouldValidate:!0}),n()},onBlur:()=>{o.onBlur(),h()}})})]})}),(m.name||m.slug||m.logo)&&s.jsxs("div",{className:"px-5 pb-3 flex flex-col gap-1",children:[m.name&&s.jsx("p",{className:"text-xs text-destructive",children:m.name.message}),m.slug&&s.jsx("p",{className:"text-xs text-destructive",children:m.slug.message}),m.logo&&s.jsx("p",{className:"text-xs text-destructive",children:m.logo.message})]})]})})}const oe=["site-editor","site-diagnostics","ai-image","ai-research"],ie=8;function Ye(t,e,a){const l=e.find(d=>d.id===t);if(l)return{id:l.id,title:l.title,icon:l.icon,kind:"template"};const r=a.find(d=>d.id===t);return r?{id:t,title:r.title,icon:r.icon??null,kind:"custom"}:{id:t,title:t,icon:null,kind:"missing"}}function Je(t){const e=$.c(39),{agent:a,onRemove:l}=t;let r;e[0]!==a.id?(r={id:a.id},e[0]=a.id,e[1]=r):r=e[1];const{attributes:d,listeners:n,setNodeRef:h,transform:m,transition:b,isDragging:o}=ke(r);let i;e[2]!==m?(i=Ie.Transform.toString(m),e[2]=m,e[3]=i):i=e[3];const u=o?.5:void 0,j=o?100:void 0;let f;e[4]!==i||e[5]!==u||e[6]!==j||e[7]!==b?(f={transform:i,transition:b,opacity:u,zIndex:j},e[4]=i,e[5]=u,e[6]=j,e[7]=b,e[8]=f):f=e[8];const g=f,z=o&&"shadow-lg";let x;e[9]!==z?(x=xe("flex items-center gap-3 px-3 py-2 rounded-lg border border-border bg-background",z),e[9]=z,e[10]=x):x=e[10];const v=`Drag to reorder ${a.title}`;let D;e[11]===Symbol.for("react.memo_cache_sentinel")?(D=s.jsx(Be,{size:14}),e[11]=D):D=e[11];let k;e[12]!==d||e[13]!==n||e[14]!==v?(k=s.jsx("button",{type:"button",...d,...n,className:"text-muted-foreground hover:text-foreground cursor-grab active:cursor-grabbing","aria-label":v,children:D}),e[12]=d,e[13]=n,e[14]=v,e[15]=k):k=e[15];let N;e[16]===Symbol.for("react.memo_cache_sentinel")?(N=s.jsx(ae,{size:14}),e[16]=N):N=e[16];let w;e[17]!==a.icon||e[18]!==a.title?(w=s.jsx(J,{icon:a.icon,name:a.title,size:"xs",fallbackIcon:N}),e[17]=a.icon,e[18]=a.title,e[19]=w):w=e[19];let S;e[20]!==a.title?(S=s.jsx("span",{className:"text-sm text-foreground truncate",children:a.title}),e[20]=a.title,e[21]=S):S=e[21];const _=a.kind==="template"?"Template":a.kind==="custom"?"Custom agent":"Unavailable";let p;e[22]!==_?(p=s.jsx("span",{className:"text-xs text-muted-foreground",children:_}),e[22]=_,e[23]=p):p=e[23];let y;e[24]!==S||e[25]!==p?(y=s.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[S,p]}),e[24]=S,e[25]=p,e[26]=y):y=e[26];const I=`Remove ${a.title}`;let A;e[27]===Symbol.for("react.memo_cache_sentinel")?(A=s.jsx(Ke,{size:14}),e[27]=A):A=e[27];let C;e[28]!==l||e[29]!==I?(C=s.jsx("button",{type:"button",onClick:l,className:"text-muted-foreground hover:text-foreground p-1 rounded","aria-label":I,children:A}),e[28]=l,e[29]=I,e[30]=C):C=e[30];let P;return e[31]!==h||e[32]!==g||e[33]!==k||e[34]!==w||e[35]!==y||e[36]!==C||e[37]!==x?(P=s.jsxs("div",{ref:h,style:g,className:x,children:[k,w,y,C]}),e[31]=h,e[32]=g,e[33]=k,e[34]=w,e[35]=y,e[36]=C,e[37]=x,e[38]=P):P=e[38],P}function Xe(t){const e=$.c(48),{selectedIds:a,onAdd:l}=t,[r,d]=H.useState(!1),[n,h]=H.useState(""),m=le();let b;e[0]!==a?(b=new Set(a),e[0]=a,e[1]=b):b=e[1];const o=b;let i,u,j,f,g,z,x,v,D,k,N,w,S;if(e[2]!==m||e[3]!==l||e[4]!==r||e[5]!==n||e[6]!==o){const A=n.toLowerCase();f=ee.filter(c=>!o.has(c.id)&&(!n||c.title.toLowerCase().includes(A)));let C;e[20]!==o?(C=c=>c.id!==null&&!Re(c.id)&&!o.has(c.id),e[20]=o,e[21]=C):C=e[21],j=m.filter(C).filter(c=>!n||c.title.toLowerCase().includes(A));let P;e[22]!==l?(P=c=>{l(c),d(!1),h("")},e[22]=l,e[23]=P):P=e[23];const T=P;u=Le,w=r,S=d,e[24]===Symbol.for("react.memo_cache_sentinel")?(g=s.jsx($e,{asChild:!0,children:s.jsxs(G,{type:"button",variant:"outline",size:"sm",children:[s.jsx(He,{size:14}),"Add agent"]})}),e[24]=g):g=e[24],i=Fe,D="w-[320px] p-0 overflow-hidden",k="start",e[25]!==n?(N=s.jsx(Oe,{value:n,onChange:h,placeholder:"Search agents..."}),e[25]=n,e[26]=N):N=e[26],z="max-h-[320px] overflow-y-auto p-2 flex flex-col gap-3",x=f.length>0&&s.jsxs("div",{className:"flex flex-col gap-1",children:[s.jsx("span",{className:"text-xs font-medium text-muted-foreground px-1",children:"Templates"}),f.map(c=>s.jsxs("button",{type:"button",onClick:()=>T(c.id),className:"flex items-center gap-2 px-2 py-1.5 rounded-md hover:bg-accent text-left",children:[s.jsx(J,{icon:c.icon,name:c.title,size:"xs"}),s.jsx("span",{className:"text-sm truncate",children:c.title})]},c.id))]}),v=j.length>0&&s.jsxs("div",{className:"flex flex-col gap-1",children:[s.jsx("span",{className:"text-xs font-medium text-muted-foreground px-1",children:"Custom agents"}),j.map(c=>s.jsxs("button",{type:"button",onClick:()=>T(c.id),className:"flex items-center gap-2 px-2 py-1.5 rounded-md hover:bg-accent text-left",children:[s.jsx(J,{icon:c.icon,name:c.title,size:"xs",fallbackIcon:s.jsx(ae,{size:14})}),s.jsx("span",{className:"text-sm truncate",children:c.title})]},c.id))]}),e[2]=m,e[3]=l,e[4]=r,e[5]=n,e[6]=o,e[7]=i,e[8]=u,e[9]=j,e[10]=f,e[11]=g,e[12]=z,e[13]=x,e[14]=v,e[15]=D,e[16]=k,e[17]=N,e[18]=w,e[19]=S}else i=e[7],u=e[8],j=e[9],f=e[10],g=e[11],z=e[12],x=e[13],v=e[14],D=e[15],k=e[16],N=e[17],w=e[18],S=e[19];let _;e[27]!==j||e[28]!==f.length||e[29]!==n?(_=f.length===0&&j.length===0&&s.jsx("div",{className:"text-xs text-muted-foreground text-center py-6",children:n?"No agents found":"All agents are already added"}),e[27]=j,e[28]=f.length,e[29]=n,e[30]=_):_=e[30];let p;e[31]!==_||e[32]!==z||e[33]!==x||e[34]!==v?(p=s.jsxs("div",{className:z,children:[x,v,_]}),e[31]=_,e[32]=z,e[33]=x,e[34]=v,e[35]=p):p=e[35];let y;e[36]!==i||e[37]!==p||e[38]!==D||e[39]!==k||e[40]!==N?(y=s.jsxs(i,{className:D,align:k,children:[N,p]}),e[36]=i,e[37]=p,e[38]=D,e[39]=k,e[40]=N,e[41]=y):y=e[41];let I;return e[42]!==u||e[43]!==g||e[44]!==y||e[45]!==w||e[46]!==S?(I=s.jsxs(u,{open:w,onOpenChange:S,children:[g,y]}),e[42]=u,e[43]=g,e[44]=y,e[45]=w,e[46]=S,e[47]=I):I=e[47],I}function Ze(){const t=$.c(61),e=Ue(),a=le(),l=qe();let r;t[0]!==e?.ids?(r=e?.ids??[...oe],t[0]=e?.ids,t[1]=r):r=t[1];const d=r,[n,h]=H.useState(d);let m;t[2]!==n||t[3]!==d?(m=n.length!==d.length||n.some((E,O)=>E!==d[O]),t[2]=n,t[3]=d,t[4]=m):m=t[4];const b=m;let o;t[5]===Symbol.for("react.memo_cache_sentinel")?(o={activationConstraint:{distance:5}},t[5]=o):o=t[5];let i;t[6]===Symbol.for("react.memo_cache_sentinel")?(i={coordinateGetter:Ee},t[6]=i):i=t[6];const u=Ce(ne(Pe,o),ne(Ae,i));let j;t[7]!==n?(j=E=>{const{active:O,over:R}=E;if(!R||O.id===R.id)return;const L=n.indexOf(O.id),q=n.indexOf(R.id);L===-1||q===-1||h(Te([...n],L,q))},t[7]=n,t[8]=j):j=t[8];const f=j;let g;t[9]!==n?(g=E=>{n.includes(E)||h([...n,E])},t[9]=n,t[10]=g):g=t[10];const z=g;let x;t[11]!==n?(x=E=>{h(n.filter(O=>O!==E))},t[11]=n,t[12]=x):x=t[12];const v=x;let D;t[13]===Symbol.for("react.memo_cache_sentinel")?(D=()=>{h([...oe])},t[13]=D):D=t[13];const k=D;let N;t[14]!==n||t[15]!==l?(N=()=>{l.mutate({ids:n},{onSuccess:()=>{Y("default_home_agents_updated",{count:n.length,template_count:n.filter(tt).length}),K.success("Default home agents updated")},onError:et})},t[14]=n,t[15]=l,t[16]=N):N=t[16];const w=N;let S,_,p,y,I,A,C;if(t[17]!==a||t[18]!==n||t[19]!==f||t[20]!==v||t[21]!==u||t[22]!==l.isPending){let E;t[30]!==a?(E=L=>Ye(L,ee,a),t[30]=a,t[31]=E):E=t[31];const O=n.map(E);p=Math.max(0,n.length-ie),_=X,I="Default home agents";let R;t[32]===Symbol.for("react.memo_cache_sentinel")?(R=s.jsx(pe,{size:14}),t[32]=R):R=t[32],t[33]!==l.isPending?(A=s.jsxs(G,{type:"button",variant:"ghost",size:"sm",onClick:k,disabled:l.isPending,children:[R,"Reset defaults"]}),t[33]=l.isPending,t[34]=A):A=t[34],S=Z,C="px-5 py-5 flex flex-col gap-3",y=O.length===0?s.jsx("div",{className:"rounded-lg border border-dashed border-border p-6 text-center text-xs text-muted-foreground",children:'No agents selected. The home view will only show "Create agent".'}):s.jsx(we,{sensors:u,collisionDetection:_e,onDragEnd:f,children:s.jsx(ze,{items:n,strategy:De,children:s.jsx("div",{className:"flex flex-col gap-1.5",children:O.map((L,q)=>s.jsxs("div",{className:"flex flex-col gap-1.5",children:[q===ie&&s.jsxs("div",{className:"flex items-center gap-2 px-1 py-1 text-xs text-muted-foreground",children:[s.jsx("div",{className:"flex-1 h-px bg-border"}),s.jsx("span",{children:"Below this line is hidden on the home view"}),s.jsx("div",{className:"flex-1 h-px bg-border"})]}),s.jsx(Je,{agent:L,onRemove:()=>v(L.id)})]},L.id))})})}),t[17]=a,t[18]=n,t[19]=f,t[20]=v,t[21]=u,t[22]=l.isPending,t[23]=S,t[24]=_,t[25]=p,t[26]=y,t[27]=I,t[28]=A,t[29]=C}else S=t[23],_=t[24],p=t[25],y=t[26],I=t[27],A=t[28],C=t[29];let P;t[35]!==n||t[36]!==z?(P=s.jsx(Xe,{selectedIds:n,onAdd:z}),t[35]=n,t[36]=z,t[37]=P):P=t[37];let T;t[38]!==p?(T=p>0&&s.jsxs("span",{className:"text-xs text-muted-foreground",children:[p," agent",p===1?"":"s"," won't fit on the home view"]}),t[38]=p,t[39]=T):T=t[39];let c;t[40]!==P||t[41]!==T?(c=s.jsxs("div",{className:"flex items-center justify-between",children:[P,T]}),t[40]=P,t[41]=T,t[42]=c):c=t[42];let F;t[43]!==y||t[44]!==c||t[45]!==C?(F=s.jsxs("div",{className:C,children:[y,c]}),t[43]=y,t[44]=c,t[45]=C,t[46]=F):F=t[46];let M;t[47]!==w||t[48]!==d||t[49]!==b||t[50]!==l.isPending?(M=b&&s.jsxs(Se,{children:[s.jsx(G,{type:"button",variant:"outline",onClick:()=>h(d),disabled:l.isPending,children:"Cancel"}),s.jsx(G,{type:"button",onClick:w,disabled:l.isPending,children:l.isPending?"Saving…":"Save"})]}),t[47]=w,t[48]=d,t[49]=b,t[50]=l.isPending,t[51]=M):M=t[51];let B;t[52]!==S||t[53]!==F||t[54]!==M?(B=s.jsxs(S,{children:[F,M]}),t[52]=S,t[53]=F,t[54]=M,t[55]=B):B=t[55];let U;return t[56]!==_||t[57]!==I||t[58]!==A||t[59]!==B?(U=s.jsx(_,{title:I,actions:A,children:B}),t[56]=_,t[57]=I,t[58]=A,t[59]=B,t[60]=U):U=t[60],U}function et(t){K.error(t instanceof Error?t.message:"Failed to update default home agents")}function tt(t){return ee.some(e=>e.id===t)}function st(){const t=$.c(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=s.jsx(X,{title:"Default home agents",children:s.jsx(Z,{children:s.jsx("div",{className:"px-5 py-5 flex flex-col gap-2",children:Array.from({length:4}).map(nt)})})}),t[0]=e):e=t[0],e}function nt(t,e){return s.jsx(Me,{className:"h-12 w-full rounded-lg"},e)}function ot(){const t=$.c(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=s.jsx(H.Suspense,{fallback:s.jsx(st,{}),children:s.jsx(Ze,{})}),t[0]=e):e=t[0],e}function it(){const t=$.c(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=s.jsx(V,{children:s.jsx(V.Content,{children:s.jsx(V.Body,{children:s.jsxs(ye,{children:[s.jsx(V.Title,{children:"Organization"}),s.jsx(Qe,{}),s.jsx(Ne,{}),s.jsx(ot,{})]})})})}),t[0]=e):e=t[0],e}function ns(){const t=$.c(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=s.jsx(it,{}),t[0]=e):e=t[0],e}export{ns as default};
|