@decocms/mesh 2.82.0 → 2.82.1
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-D3KDB3IA.js → AlertCircle-BZ-CyZa1.js} +1 -1
- package/dist/client/assets/{ArrowUp-3aAOnqRg.js → ArrowUp-NSnDVC4l.js} +1 -1
- package/dist/client/assets/{Calendar-BBdpCud_.js → Calendar-CoVZYAE2.js} +1 -1
- package/dist/client/assets/{Check-DDCtzM6Q.js → Check-UmtDrnpQ.js} +1 -1
- package/dist/client/assets/{CheckCircle-79X8LGfp.js → CheckCircle-LJB0nphc.js} +1 -1
- package/dist/client/assets/{CheckDone01-CQ4X60Dx.js → CheckDone01-DRW8C0jC.js} +1 -1
- package/dist/client/assets/{ChevronDown-SBTaDy9t.js → ChevronDown-Lb9sYBhA.js} +1 -1
- package/dist/client/assets/{ChevronRight--SfBuQ6E.js → ChevronRight-DpU4grNv.js} +1 -1
- package/dist/client/assets/{Code01-DjtWhPZC.js → Code01-CWm79KkF.js} +1 -1
- package/dist/client/assets/{Copy01-BSA43WMM.js → Copy01-BQUnMQ4j.js} +1 -1
- package/dist/client/assets/{DotsHorizontal-B5RKGUR7.js → DotsHorizontal-CJex2mj4.js} +1 -1
- package/dist/client/assets/{DotsVertical-Cd8cYkR4.js → DotsVertical-DFFhcQon.js} +1 -1
- package/dist/client/assets/{Download01-FxIredOf.js → Download01-nphiB21H.js} +1 -1
- package/dist/client/assets/{Edit01-B5nyemfE.js → Edit01-D8P8Sr8e.js} +1 -1
- package/dist/client/assets/{File02-DA2x6ZM6.js → File02-BL4gKKAX.js} +1 -1
- package/dist/client/assets/{File06-Dk4vC3hU.js → File06-BUJ_X_tw.js} +1 -1
- package/dist/client/assets/{FilterLines-DjOqiBJz.js → FilterLines-BiOt1NEr.js} +1 -1
- package/dist/client/assets/{Globe02-dRiPkeKW.js → Globe02-CZO7FIDq.js} +1 -1
- package/dist/client/assets/{Grid01-B4G9OfC4.js → Grid01-Z83jcxEK.js} +1 -1
- package/dist/client/assets/{Home02-BHKRAEAu.js → Home02-BBAxpbxf.js} +1 -1
- package/dist/client/assets/{Image01-2WD6KqwM.js → Image01-Dj0EPBoK.js} +1 -1
- package/dist/client/assets/{Inbox01-C7RwTkoq.js → Inbox01-Cv3Of8EH.js} +1 -1
- package/dist/client/assets/{InfoCircle-TiqDenvc.js → InfoCircle-C99uZ9Dm.js} +1 -1
- package/dist/client/assets/{LinkExternal01-x3gXIh53.js → LinkExternal01-D072PuxN.js} +1 -1
- package/dist/client/assets/{List-8EK4DbDa.js → List-CT3eXyAB.js} +1 -1
- package/dist/client/assets/{Loading01-CJAWJaxG.js → Loading01-Boa2vHJO.js} +1 -1
- package/dist/client/assets/{Lock01-BjFkdlhS.js → Lock01-CXRHeHtY.js} +1 -1
- package/dist/client/assets/{Pin01-cDub6-ui.js → Pin01-B8zRlvtP.js} +1 -1
- package/dist/client/assets/{Play-DFjE4pw4.js → Play-CVPFaIA1.js} +1 -1
- package/dist/client/assets/{Plus-BUcm60bY.js → Plus-BqAKVh_Y.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-Cqf7w1A_.js → RefreshCcw01-D9a8SeHu.js} +1 -1
- package/dist/client/assets/{SearchMd-DZftd0rG.js → SearchMd-UVwS_-fr.js} +1 -1
- package/dist/client/assets/{Settings01-BV96W3K6.js → Settings01-DwjX6qim.js} +1 -1
- package/dist/client/assets/{Settings02-BSUzKPrW.js → Settings02-Du3FLop1.js} +1 -1
- package/dist/client/assets/{Share07-zbtOVHUV.js → Share07-CxWRs2m3.js} +1 -1
- package/dist/client/assets/{Terminal-CSvhqBGB.js → Terminal-B88oyZk4.js} +1 -1
- package/dist/client/assets/{Tool01-R1tL1Bnd.js → Tool01-kl3RL2lv.js} +1 -1
- package/dist/client/assets/{Trash01-ayUasD9O.js → Trash01-CzG1xfKz.js} +1 -1
- package/dist/client/assets/{Upload01-BashLf0-.js → Upload01-ByKmAM2f.js} +1 -1
- package/dist/client/assets/{Users03-0nIh3Dmg.js → Users03-DNM06KRo.js} +1 -1
- package/dist/client/assets/{X-BuzeH_Ys.js → X-M_ES_qqi.js} +1 -1
- package/dist/client/assets/{XClose-wa7qhUC2.js → XClose-CQhRIiPs.js} +1 -1
- package/dist/client/assets/{agent-connections-preview-2q-Vv44D.js → agent-connections-preview-Cch0blWE.js} +1 -1
- package/dist/client/assets/{agent-detail-2ytsz5ES.js → agent-detail-Bf4iwU-Y.js} +1 -1
- package/dist/client/assets/{agents-BOQt3EER.js → agents-Df8Q5wiY.js} +1 -1
- package/dist/client/assets/{alert-dialog-Dozrlcm_.js → alert-dialog-Cggt_nYx.js} +1 -1
- package/dist/client/assets/{auth-catchall-CkqPuCp2.js → auth-catchall-BQThJtBC.js} +1 -1
- package/dist/client/assets/{avatar-CODuQ7wd.js → avatar-Bgewflgt.js} +1 -1
- package/dist/client/assets/{badge-CBPiZjKH.js → badge-Bn10PWiB.js} +1 -1
- package/dist/client/assets/{binder-CMhpk7ub.js → binder-CimVeOHl.js} +1 -1
- package/dist/client/assets/{breadcrumb-DxXS9FOV.js → breadcrumb-BBH1RyZB.js} +1 -1
- package/dist/client/assets/{button-BENLxTt6.js → button-CTB6JBFd.js} +1 -1
- package/dist/client/assets/{card-DkcolAVH.js → card-v1MH1Mkh.js} +1 -1
- package/dist/client/assets/{checkbox-cKpxYYrb.js → checkbox-CQRkoYD-.js} +1 -1
- package/dist/client/assets/{circle-alert-B6brOILB.js → circle-alert-oCGD1a95.js} +1 -1
- package/dist/client/assets/{collection-detail-CAtk6NAX.js → collection-detail-Gz1dWeKF.js} +1 -1
- package/dist/client/assets/{collection-search-r4Iw28Tm.js → collection-search-BrFWYjne.js} +1 -1
- package/dist/client/assets/{collection-tab-BYjOSxk-.js → collection-tab-B4-T8UCe.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-g3QYov-u.js → collection-table-wrapper-CMrduhiz.js} +1 -1
- package/dist/client/assets/{collection-tabs-fNhO9GT7.js → collection-tabs-BAcu1YCF.js} +1 -1
- package/dist/client/assets/{command-BKB4MrJQ.js → command-CF2Bb3mx.js} +1 -1
- package/dist/client/assets/{connect-DYc_gyWw.js → connect-Ct-J54yH.js} +1 -1
- package/dist/client/assets/{connection-card-DEFXimFX.js → connection-card-ClHuU46c.js} +1 -1
- package/dist/client/assets/{connection-detail-CvldKioB.js → connection-detail-3XxsP7V4.js} +1 -1
- package/dist/client/assets/{connections-BZpjI1Nt.js → connections-CwtjDJk3.js} +1 -1
- package/dist/client/assets/constants-l3nmBC6x.js +1 -0
- package/dist/client/assets/{constants-CyHzmdsR.js → constants-lUlA1P1G.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-CzJOBrOl.js → create-organization-dialog-ZkVao6nf.js} +1 -1
- package/dist/client/assets/{create-project-dialog-BSIrIXxq.js → create-project-dialog-6M4yCSfT.js} +1 -1
- package/dist/client/assets/{dialog-xIqrrw1k.js → dialog-Ck-a1K_o.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CdsuXytO.js → dropdown-menu-Cq8FJTUN.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-D2FjOsz_.js → dynamic-plugin-layout-DWaeqoUn.js} +1 -1
- package/dist/client/assets/{empty-state-CEqegtKr.js → empty-state-CWOQeS8Z.js} +1 -1
- package/dist/client/assets/{empty-state-CsMNFf2A.js → empty-state-Cbo2gkCA.js} +1 -1
- package/dist/client/assets/{env-vars-editor-Bxq-afSh.js → env-vars-editor-0nu0DlC8.js} +1 -1
- package/dist/client/assets/{error-boundary-Nf2CtbS6.js → error-boundary-C3FJ9vA_.js} +1 -1
- package/dist/client/assets/{extract-connection-data-C2jhq8EX.js → extract-connection-data-CZ_dddPE.js} +1 -1
- package/dist/client/assets/{file-browser-D4P0OdDw.js → file-browser-CZECCIeP.js} +2 -2
- package/dist/client/assets/{form-DnmMdQrj.js → form-CuiI4-Fw.js} +1 -1
- package/dist/client/assets/{grid-view-CoSLyQLn.js → grid-view-EDwqYREw.js} +1 -1
- package/dist/client/assets/{home-DoLTW53v.js → home-BUMQNhoE.js} +1 -1
- package/dist/client/assets/{index-C_bldAJS.js → index-34L4NGZR.js} +1 -1
- package/dist/client/assets/{index-CDo7YvLh.js → index-BK599lki.js} +1 -1
- package/dist/client/assets/{index-DQ9TOjsi.js → index-BTRJVC1r.js} +2 -2
- package/dist/client/assets/{index-BPEvdlWI.js → index-BcY7_dKI.js} +1 -1
- package/dist/client/assets/{index-CaiLEv_9.js → index-Bv_NnYaV.js} +1 -1
- package/dist/client/assets/{index-fbicbDgU.js → index-CDLVDbuW.js} +1 -1
- package/dist/client/assets/{index-icASHgYU.js → index-CDNp6Eso.js} +1 -1
- package/dist/client/assets/{index-A80QwZTd.js → index-CDnKGpUs.js} +1 -1
- package/dist/client/assets/{index-RNBGcrtT.js → index-DH2TpY2d.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-BsFCOv8W.js → infiniteQueryObserver-Cg_eu0mh.js} +1 -1
- package/dist/client/assets/{input-BIL-SExV.js → input-czqT2Pad.js} +1 -1
- package/dist/client/assets/{integration-icon-FtYhgNKh.js → integration-icon-DtC8G4dh.js} +1 -1
- package/dist/client/assets/{label-D0auY2sQ.js → label-82zXKz6_.js} +1 -1
- package/dist/client/assets/{layout-2aG_RWhC.js → layout-Cpvq9nfA.js} +1 -1
- package/dist/client/assets/{localstorage-keys-BE-3e1FV.js → localstorage-keys-DtejGC5i.js} +1 -1
- package/dist/client/assets/{login-CxdL1FAe.js → login-WAw8xoZJ.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CmQaUsni.js → mcp-oauth-CVRc58m3.js} +1 -1
- package/dist/client/assets/{mcp-server-card-CjUi-ujO.js → mcp-server-card-BE-psf3Y.js} +1 -1
- package/dist/client/assets/{mcp-server-detail-DJkCOqkB.js → mcp-server-detail-INhvNzNl.js} +2 -2
- package/dist/client/assets/{members-DORByuvn.js → members-DFl12zj4.js} +1 -1
- package/dist/client/assets/{monaco-editor-_5dDXxkD.js → monaco-editor-fs2vSX-C.js} +1 -1
- package/dist/client/assets/{monitoring-BMMeBiqJ.js → monitoring-DCOip06j.js} +1 -1
- package/dist/client/assets/{oauth-callback-CravOpS3.js → oauth-callback-DPgKxpk2.js} +1 -1
- package/dist/client/assets/{page-BCwWDmou.js → page-BVbxs4Vr.js} +1 -1
- package/dist/client/assets/{page-jKoS4SxK.js → page-MEvHa87w.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-BPiMrlyQ.js → plugin-empty-state-6KPSw60T.js} +1 -1
- package/dist/client/assets/{plugin-header-659f7GxU.js → plugin-header-Begx8cVw.js} +1 -1
- package/dist/client/assets/{popover-CfGRS0cW.js → popover-BWgdCGw8.js} +1 -1
- package/dist/client/assets/{project-layout-D-SjsOBw.js → project-layout-0wyS2NDK.js} +1 -1
- package/dist/client/assets/{project-settings-yZDxK7lp.js → project-settings-BEJItoi8.js} +1 -1
- package/dist/client/assets/{projects-list-DRgR5yeA.js → projects-list-DAl-12T4.js} +1 -1
- package/dist/client/assets/{registry-utils-B4sygtBA.js → registry-utils-B51B3ioO.js} +1 -1
- package/dist/client/assets/{resizable-DI-Suit4.js → resizable-A9piwx-2.js} +1 -1
- package/dist/client/assets/{select-BqfLrW4j.js → select-N6brO6nx.js} +1 -1
- package/dist/client/assets/shell-layout-D31-Amjt.js +12 -0
- package/dist/client/assets/{spinner-B6kkRxZ1.js → spinner-4fOXhVYy.js} +1 -1
- package/dist/client/assets/{store-invite-BuYr-V_q.js → store-invite-CCgQTVqI.js} +1 -1
- package/dist/client/assets/{switch-Vy1LOfjy.js → switch-B8rml8nx.js} +1 -1
- package/dist/client/assets/{table-Cp3wDHvL.js → table-BM7Y07ZM.js} +1 -1
- package/dist/client/assets/{tasks-Wx_mgsd7.js → tasks-DCZGVuP4.js} +1 -1
- package/dist/client/assets/{textarea-Cz5doER1.js → textarea-TNhTHm9M.js} +1 -1
- package/dist/client/assets/{tools-list-DlaoFt8L.js → tools-list-DNNC-Spx.js} +1 -1
- package/dist/client/assets/{topbar-portal-CHBG2h8g.js → topbar-portal-CNX1YMp4.js} +1 -1
- package/dist/client/assets/{typewriter-title-BBlbeBEA.js → typewriter-title-bvAupgtJ.js} +1 -1
- package/dist/client/assets/{use-binding-Dr0O-jnm.js → use-binding-HxsRrLG4.js} +1 -1
- package/dist/client/assets/{use-connection-EDeK5Svd.js → use-connection-D9uMTHOF.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-99ACH3DH.js → use-create-virtual-mcp-N5LfEC7r.js} +1 -1
- package/dist/client/assets/{use-deco-chat-open-DeWYX57x.js → use-deco-chat-open-Dfir0-DC.js} +1 -1
- package/dist/client/assets/{use-install-from-registry-OTkyDAEF.js → use-install-from-registry-Bhi2rpLv.js} +1 -1
- package/dist/client/assets/{use-list-state-CoHPwr3M.js → use-list-state-Cqm8-cAF.js} +1 -1
- package/dist/client/assets/{use-llm-jfUM8DGq.js → use-llm-DqBbxmSJ.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-O2DarmsN.js → use-mcp-prompts-E0b1BnP-.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-CLb1GouZ.js → use-mcp-tools-DJxxSoOb.js} +1 -1
- package/dist/client/assets/{use-mobile-CsekvTUr.js → use-mobile-BdYz75f3.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DXrVDIU7.js → use-organization-settings-DVtsq9Dv.js} +1 -1
- package/dist/client/assets/{use-project-6LlQxxph.js → use-project-khiYs8bh.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BSj9UgeS.js → use-virtual-mcp-BN_b8WqX.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BpdJ52hK.js +1 -0
- package/dist/client/assets/{useMutation-BsQPbdYX.js → useMutation-ICNjK8hh.js} +1 -1
- package/dist/client/assets/useQuery-BsoPjEaP.js +1 -0
- package/dist/client/assets/utils-JVych4vu.js +1 -0
- package/dist/client/assets/{view-mode-toggle-D0YAiOPf.js → view-mode-toggle-BnUnMRA8.js} +1 -1
- package/dist/client/assets/{workflow-DcXyyOJb.js → workflow-xOeGR-7v.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/migrate.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/constants-qizKrs2K.js +0 -1
- package/dist/client/assets/shell-layout-Db9ulLGU.js +0 -12
- package/dist/client/assets/useInfiniteQuery-CjTCzZMC.js +0 -1
- package/dist/client/assets/useQuery-KPhLL-WX.js +0 -1
- package/dist/client/assets/utils-Dm1G0W2O.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -1186,7 +1186,7 @@ ${X.stack}`;return G}}catch{}if(typeof X.toString==="function")try{let G=X.toStr
|
|
|
1186
1186
|
const args = ${JSON.stringify(X)};
|
|
1187
1187
|
return await __virtualToolFn(tools, args);
|
|
1188
1188
|
};
|
|
1189
|
-
`,F=await O2({code:H,tools:W,timeoutMs:30000});if(F.error)return{content:[{type:"text",text:`Virtual tool error: ${F.error}`}],isError:!0};return{content:[{type:"text",text:JSON.stringify(F.returnValue??null)}]}}catch(Z){return{content:[{type:"text",text:`Virtual tool execution failed: ${Z instanceof Error?Z.message:String(Z)}`}],isError:!0}}}async listResources(){return{resources:(await this._cachedResources).data}}async readResource(Y){let[X,Q]=await Promise.all([this._cachedResources,this._clients]),J=X.mappings.get(Y.uri);if(!J)throw Error(`Resource not found: ${Y.uri}`);let G=Q.get(J);if(!G)throw Error(`Connection not found for resource: ${Y.uri}`);return await G.readResource(Y)}async listPrompts(){return{prompts:(await this._cachedPrompts).data}}async getPrompt(Y){let[X,Q]=await Promise.all([this._cachedPrompts,this._clients]),J=X.mappings.get(Y.name);if(!J)throw Error(`Prompt not found: ${Y.name}`);let G=Q.get(J);if(!G)throw Error(`Connection not found for prompt: ${Y.name}`);return await G.getPrompt(Y)}async callStreamableTool(Y,X){let[Q,J]=await Promise.all([this._cachedTools,this._clients]),G=Q.mappings.get(Y);if(G){let W=J.get(G);if(W&&"callStreamableTool"in W)return W.callStreamableTool(Y,X)}let K=await this.callTool({name:Y,arguments:X});return new Response(JSON.stringify(K),{headers:{"Content-Type":"application/json"}})}async[Symbol.asyncDispose](){let Y=await this._clients;if(Y)await _N1(Y)}async close(){let Y=await this._clients;if(Y)await _N1(Y);await super.close()}getInstructions(){return this.options.virtualMcp.metadata?.instructions??void 0}}});var yN1,BJ4,fN1,UJ4,n2;var W70=j(()=>{b0();Qq();G70();yN1=z.object({query:z.string().min(1).describe("Search query to find tools by name or description"),limit:z.number().default(10).describe("Maximum number of results to return")}),BJ4=z.toJSONSchema(yN1),fN1=z.object({tools:z.array(z.string()).min(1).describe("Array of tool names to get detailed schemas for")}),UJ4=z.toJSONSchema(fN1);n2=class n2 extends UO{constructor(Y,X){super(Y,X)}getSearchTool(Y){return{name:"GATEWAY_SEARCH_TOOLS",description:`Search for available tools by name or description. Returns tool names and brief descriptions without full schemas. Use this to discover tools before calling GATEWAY_DESCRIBE_TOOLS for detailed schemas. Total tools: ${Y}.`,inputSchema:BJ4}}getDescribeTool(){return{name:"GATEWAY_DESCRIBE_TOOLS",description:"Get detailed schemas for specific tools. Call after GATEWAY_SEARCH_TOOLS to get full input/output schemas.",inputSchema:UJ4}}async handleSearch(Y){let X=yN1.safeParse(Y);if(!X.success)return l3({error:X.error.flatten()});let Q=await this._cachedTools,J=ZK(Q.data),G=Vu(X.data.query,J,X.data.limit);return N2({query:X.data.query,results:G.map((K)=>({name:K.name,description:K.description,connection:K._meta.connectionTitle})),totalAvailable:J.length})}async handleDescribe(Y){let X=fN1.safeParse(Y);if(!X.success)return l3({error:X.error.flatten()});let Q=await this._cachedTools,J=ZK(Q.data),G=qu(X.data.tools,J);return N2({tools:G.tools,notFound:G.notFound})}async listTools(){let Y=await this._cachedTools,X=ZK(Y.data);return{tools:[this.getSearchTool(X.length),this.getDescribeTool()]}}async callTool(Y){if(Y.name==="GATEWAY_SEARCH_TOOLS")return this.handleSearch(Y.arguments??{});if(Y.name==="GATEWAY_DESCRIBE_TOOLS")return this.handleDescribe(Y.arguments??{});return{content:[{type:"text",text:`Unknown tool: ${Y.name}. Available: GATEWAY_SEARCH_TOOLS, GATEWAY_DESCRIBE_TOOLS`}],isError:!0}}async routeToolCall(Y){return UO.prototype.callTool.call(this,Y)}}});var hN1,DJ4,Z70;var bN1=j(()=>{b0();Qq();W70();hN1=z.object({code:z.string().min(1).describe("JavaScript code to execute. It runs as an async function body; you can use top-level `return` and `await`."),timeoutMs:z.number().default(3000).describe("Max execution time in milliseconds (default: 3000).")}),DJ4=z.toJSONSchema(hN1);Z70=class Z70 extends n2{constructor(Y,X){super(Y,X)}getRunCodeTool(){return{name:"GATEWAY_RUN_CODE",description:'Run JavaScript code in a sandbox. Code must be an ES module that `export default`s an async function that receives (tools) as its first parameter. Use GATEWAY_DESCRIBE_TOOLS to understand the input/output schemas for a tool before calling it. Use `await tools.toolName(args)` or `await tools["tool-name"](args)` to call tools.',inputSchema:DJ4}}async handleRunCode(Y){let X=hN1.safeParse(Y);if(!X.success)return l3({error:X.error.flatten()});let Q=await this._cachedTools,G={tools:ZK(Q.data),callTool:async(W,Z)=>{return this.routeToolCall({name:W,arguments:Z})}},K=await zu(X.data.code,G,X.data.timeoutMs);if(K.error)return l3(K);return N2(K)}async listTools(){return{tools:[...(await super.listTools()).tools,this.getRunCodeTool()]}}async callTool(Y){if(Y.name==="GATEWAY_RUN_CODE")return this.handleRunCode(Y.arguments??{});return super.callTool(Y)}}});function uN1(Y){let X=Y.slice().sort().join(","),Q=xN1.get(X);if(!Q){let J=z.object({name:(Y.length>0?z.enum(Y):z.string()).describe("The name of the tool to execute"),arguments:z.record(z.string(),z.unknown()).default({}).describe("Arguments to pass to the tool")});Q={schema:J,jsonSchema:z.toJSONSchema(J)},xN1.set(X,Q)}return Q}var xN1,K70;var gN1=j(()=>{b0();Qq();W70();xN1=new Map;K70=class K70 extends n2{constructor(Y,X){super(Y,X)}async getCallTool(){let Y=await this._cachedTools,Q=ZK(Y.data).map((G)=>G.name),{jsonSchema:J}=uN1(Q);return{name:"GATEWAY_CALL_TOOL",description:"Execute a tool by name. Use GATEWAY_DESCRIBE_TOOLS first to understand the input schema.",inputSchema:J}}async handleCallTool(Y){let X=await this._cachedTools,Q=ZK(X.data),J=Q.map((F)=>F.name),{schema:G}=uN1(J),K=G.safeParse(Y);if(!K.success)return l3({error:K.error.flatten()});let{name:W,arguments:Z}=K.data;if(!new Map(Q.map((F)=>[F.name,F])).has(W))return{content:[{type:"text",text:`Tool not found: ${W}. Use GATEWAY_SEARCH_TOOLS to find available tools.`}],isError:!0};return this.routeToolCall({name:W,arguments:Z})}async listTools(){let Y=await super.listTools(),X=await this.getCallTool();return{tools:[...Y.tools,X]}}async callTool(Y){if(Y.name==="GATEWAY_CALL_TOOL")return this.handleCallTool(Y.arguments??{});return super.callTool(Y)}}});function H70(Y){switch(Y){case"smart_tool_selection":return"smart_tool_selection";case"code_execution":return"code_execution";case"passthrough":default:return"passthrough"}}function OJ4(Y,X){if(Y.connection_type!=="VIRTUAL")return!1;if(!X||iW(X))return!1;return Y.id===X}async function mN1(Y,X){let Q=Y.id,J=await X.storage.virtualMcps.findById(Q);if(!J)throw Error(`Virtual MCP not found: ${Q}`);return i2(J,X,"passthrough")}async function i2(Y,X,Q){let G=Y.connections.map(($)=>$.connection_id).map(($)=>X.storage.connections.findById($)),K=Y.id?await X.storage.connections.findById(Y.id):null,W=await Promise.all(G),Z=[];if(K?.tools){for(let $ of K.tools)if(p3($))Z.push($)}let F={connections:W.filter(($)=>$!==null&&$.status==="active"&&!OJ4($,Y.id)),virtualMcp:Y,virtualTools:Z.length>0?Z:void 0};return Q==="smart_tool_selection"?new K70(F,X):Q==="code_execution"?new Z70(F,X):new UO(F,X)}var Iu=j(()=>{RY();qK();bN1();G70();gN1()});async function GQ(Y,X,Q=!1){if(Y.connection_type==="VIRTUAL")return mN1(Y,X);return IN1(Y,X,Q)}var F70=j(()=>{RN1();Iu()});async function $70(Y,X,Q){let J=await GQ(Y,X,Q),G=gF(J,{name:"mcp-mesh-enhanced",version:"1.0.0"},{capabilities:NJ4,instructions:J.getInstructions()});return G.server.setRequestHandler(cK,async()=>{return await J.listResources().catch(Gq({resources:[]}))}),G.server.setRequestHandler(nK,async()=>{return await J.listResourceTemplates().catch(Gq({resourceTemplates:[]}))}),G.server.setRequestHandler(iK,async()=>{return await J.listPrompts().catch(Gq({prompts:[]}))}),G}var NJ4;var lN1=j(()=>{RY();_9();F70();J70();NJ4={tools:{},resources:{},prompts:{}}});function V70(Y,X){let Q=Y.listTools.bind(Y),J=async()=>{if(X.connection_type!=="VIRTUAL"&&X.tools&&X.tools.length>0)return{tools:X.tools.map((K)=>({name:K.name,description:K.description,inputSchema:K.inputSchema,outputSchema:K.outputSchema,annotations:K.annotations,_meta:K._meta}))};return await Q()};return Y.listTools=J,Y}function LJ4(Y,X,Q){return async(J,G)=>{try{let K=J.params.name,W=async()=>{let{tools:H}=await Q();return H.find(($)=>$.name===K)?._meta};return await new VK(Y.authInstance,Y.auth.user?.id??Y.auth.apiKey?.userId,K,Y.boundAuth,Y.auth.user?.role,X,W).check(K),await G()}catch(K){return new Response(JSON.stringify({error:`Authorization failed: ${K.message}`}),{status:403,headers:{"Content-Type":"application/json"}})}}}function a2(Y,X,Q,J,G){let K=async(Z,H)=>{if(Q.connection_type==="VIRTUAL"){let B=await Y.callTool({name:Z,arguments:H});return new Response(JSON.stringify(B),{headers:{"Content-Type":"application/json"}})}if(!Q.connection_url)throw Error("Streamable tools require HTTP connection with URL");let F=Q.connection_url,$={method:"tools/call",params:{name:Z,arguments:H}};if(!G.superUser){let D=await LJ4(J,X,Y.listTools.bind(Y))($,async()=>{return new Response});if(!D.ok)return D}let V=J.connectionId&&J.connectionId!==X?J.connectionId:void 0;return TN1({ctx:J,enabled:ny().enabled,connectionId:X,connectionTitle:Q.title,virtualMcpId:V})($,async()=>{let B=await m2(Q,J,G.superUser),D=Q.connection_headers;if(D&&"headers"in D)Object.assign(B,D.headers);let O=new URL(F);O.pathname=O.pathname.replace(/\/$/,"")+`/call-tool/${$.params.name}`;let L=JSON.parse(JSON.stringify($.params.arguments,(I,P)=>{if(P instanceof AbortSignal)return;if(typeof P==="function"||typeof P==="symbol")return;if(P===void 0)return;return P})),w=JSON.stringify(L);return await J.tracer.startActiveSpan("mcp.proxy.callStreamableTool",{attributes:{"connection.id":X,"tool.name":$.params.name,"request.id":J.metadata.requestId}},async(I)=>{let P=Date.now();try{let T=await fetch(O.toString(),{method:"POST",redirect:"manual",body:w,headers:{...B,"Content-Type":"application/json"}}),A=Date.now()-P;return J.meter.createHistogram("connection.proxy.streamable.duration").record(A,{"connection.id":X,"tool.name":$.params.name,status:T.ok?"success":"error"}),J.meter.createCounter("connection.proxy.streamable.requests").add(1,{"connection.id":X,"tool.name":$.params.name,status:T.ok?"success":"error"}),I.end(),T}catch(T){let A=T,R=Date.now()-P;throw console.error("[with-streaming-support] fetch error",{connectionId:X,toolName:$.params.name,error:A.message,errorStack:A.stack,duration:R}),J.meter.createHistogram("connection.proxy.streamable.duration").record(R,{"connection.id":X,"tool.name":$.params.name,status:"error"}),J.meter.createCounter("connection.proxy.streamable.errors").add(1,{"connection.id":X,"tool.name":$.params.name,error:A.message}),I.recordException(A),I.end(),T}})})},W=Object.assign(Object.create(Object.getPrototypeOf(Y)),Y);return W.callStreamableTool=K,W}var dN1=j(()=>{aG0();p2();bA();X70()});var pN1=j(()=>{dN1()});var DO=j(()=>{F70();lN1();pN1()});async function AJ4(Y,X,Q,J){for(let K of X){if(K==="*")continue;let[W]=VN1(K),Z=Tu(W,Y);if(Z===void 0||Z===null)throw Error(`Scope references key "${W}" but it's not present in state`)}let G=qN1(Y,X);for(let K of G){if(K.endsWith("_self"))continue;let W=await J.storage.connections.findById(K);if(!W||W.organization_id!==Q)throw Error(`Referenced connection not found: ${K}`);try{await J.access.check(K)}catch(Z){throw Error(`Access denied to referenced connection: ${K}. ${Z.message}`)}}}var wJ4,MJ4,q70;var cN1=j(()=>{nG0();DO();Eu();b0();k1();Qu();QK();wJ4=z.object({id:z.string().describe("ID of the connection to update"),data:qw.describe("Partial connection data to update")}),MJ4=z.object({item:kX.describe("The updated connection entity")});q70=f0({name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update an existing MCP connection in the organization",inputSchema:wJ4,outputSchema:MJ4,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=g8(X);if(!J)throw Error("User ID required to update connection");let{id:G,data:K}=Y,W=await X.storage.connections.findById(G);if(!W||W.organization_id!==Q.id)throw Error("Connection not found in organization");let Z=K.connection_type??W.connection_type,H=K.connection_url??W.connection_url;if(Z==="VIRTUAL"){let L=xF(H);if(!L)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let w=await X.storage.virtualMcps.findById(L);if(!w)throw Error(`Virtual MCP not found: ${L}`);if(w.organization_id!==Q.id)throw Error("Virtual MCP does not belong to the current organization");H=uF(L)}let F=K.configuration_state??W.configuration_state??{},$=K.configuration_scopes??W.configuration_scopes??[];if(K.configuration_state!==void 0||K.configuration_scopes!==void 0){if(K.configuration_state!==void 0)F=K.configuration_state??{};else if(F===null||F===void 0)F={};if(K.configuration_scopes!==void 0)$=K.configuration_scopes??[];if($.length>0)await AJ4(F,$,Q.id,X)}let V=K.connection_token??W.connection_token;if(!V)try{let w=await new $K(X.db,X.vault).get(G);if(w?.accessToken)V=w.accessToken}catch{}let q=await QO({id:W.id,title:K.title??W.title,connection_type:Z,connection_url:H,connection_token:V,connection_headers:K.connection_headers??W.connection_headers}).catch(()=>null),B=q?.length?q:null,D={...K,connection_url:H,tools:B,configuration_state:F,configuration_scopes:$,updated_by:J},O=await X.storage.connections.update(G,D);if((K.configuration_state!==void 0||K.configuration_scopes!==void 0)&&F&&$)try{await(await GQ(O,X,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:F,scopes:$}})}catch(L){console.error("Failed to invoke ON_MCP_CONFIGURATION callback",L)}return{item:O}}})});var z70;var nN1=j(()=>{_5();k1();QK();z70=f0({name:"COLLECTION_CONNECTIONS_DELETE",description:"Delete a connection",inputSchema:P2,outputSchema:T2(kX),handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=await X.storage.connections.findById(Y.id);if(!J)throw Error(`Connection not found: ${Y.id}`);if(J.organization_id!==Q.id)throw Error("Connection not found in organization");if(J.metadata?.isFixed===!0)throw Error("This connection is a fixed system connection and cannot be deleted");return await X.storage.connections.delete(Y.id),{item:J}}})});var B70;var iN1=j(()=>{b0();k1();B70=f0({name:"CONNECTION_TEST",description:"Test connection health and latency",inputSchema:z.object({id:z.string()}),outputSchema:z.object({id:z.string(),healthy:z.boolean(),latencyMs:z.number()}),handler:async(Y,X)=>{let Q=q1(X);await X.access.check();let J=await X.storage.connections.findById(Y.id);if(!J||J.organization_id!==Q.id)throw Error("Connection not found");let G=await X.storage.connections.testConnection(Y.id);return{id:Y.id,...G}}})});var aN1=j(()=>{vO1();FN1();$N1();cN1();nN1();iN1()});import{sql as $4}from"kysely";function rN1(Y){if(Y===null||Y===void 0)return"NULL";if(typeof Y==="number")return String(Y);if(typeof Y==="boolean")return Y?"TRUE":"FALSE";if(typeof Y==="string")return`'${Y.replace(/'/g,"''")}'`;if(Y instanceof Date)return`'${Y.toISOString()}'`;return`'${JSON.stringify(Y).replace(/'/g,"''")}'`}function EJ4(Y,X){let Q=Y;for(let G=X.length;G>=1;G--){let K=`$${G}`;if(Q.includes(K))Q=Q.replaceAll(K,rN1(X[G-1]))}let J=[];for(let G=0;G<Q.length;G++)if(Q[G]==="?")J.push(G);for(let G=Math.min(J.length,X.length)-1;G>=0;G--){let K=J[G],W=rN1(X[G]);Q=Q.slice(0,K)+W+Q.slice(K+1)}return Q}function oN1(Y){return Y.replace(/-/g,"_")}function IJ4(Y){return`app_${oN1(Y)}`}function RJ4(Y){return`app_role_${oN1(Y)}`}function jJ4(Y){if(Y instanceof Error){let X=Y.message.toLowerCase(),Q=Y.code;return Q==="3F000"||Q==="42704"||Q==="22023"||X.includes("schema")&&X.includes("does not exist")||X.includes("role")&&X.includes("does not exist")}return!1}async function SJ4(Y,X,Q){if(await $4`CREATE SCHEMA IF NOT EXISTS ${$4.id(X)}`.execute(Y),!(await $4`
|
|
1189
|
+
`,F=await O2({code:H,tools:W,timeoutMs:30000});if(F.error)return{content:[{type:"text",text:`Virtual tool error: ${F.error}`}],isError:!0};return{content:[{type:"text",text:JSON.stringify(F.returnValue??null)}]}}catch(Z){return{content:[{type:"text",text:`Virtual tool execution failed: ${Z instanceof Error?Z.message:String(Z)}`}],isError:!0}}}async listResources(){return{resources:(await this._cachedResources).data}}async readResource(Y){let[X,Q]=await Promise.all([this._cachedResources,this._clients]),J=X.mappings.get(Y.uri);if(!J)throw Error(`Resource not found: ${Y.uri}`);let G=Q.get(J);if(!G)throw Error(`Connection not found for resource: ${Y.uri}`);return await G.readResource(Y)}async listPrompts(){return{prompts:(await this._cachedPrompts).data}}async getPrompt(Y){let[X,Q]=await Promise.all([this._cachedPrompts,this._clients]),J=X.mappings.get(Y.name);if(!J)throw Error(`Prompt not found: ${Y.name}`);let G=Q.get(J);if(!G)throw Error(`Connection not found for prompt: ${Y.name}`);return await G.getPrompt(Y)}async callStreamableTool(Y,X){let[Q,J]=await Promise.all([this._cachedTools,this._clients]),G=Q.mappings.get(Y);if(G){let W=J.get(G);if(W&&"callStreamableTool"in W)return W.callStreamableTool(Y,X)}let K=await this.callTool({name:Y,arguments:X});return new Response(JSON.stringify(K),{headers:{"Content-Type":"application/json"}})}async[Symbol.asyncDispose](){let Y=await this._clients;if(Y)await _N1(Y)}async close(){let Y=await this._clients;if(Y)await _N1(Y);await super.close()}getInstructions(){return this.options.virtualMcp.metadata?.instructions??void 0}}});var yN1,BJ4,fN1,UJ4,n2;var W70=j(()=>{b0();Qq();G70();yN1=z.object({query:z.string().min(1).describe("Search query to find tools by name or description"),limit:z.number().default(10).describe("Maximum number of results to return")}),BJ4=z.toJSONSchema(yN1),fN1=z.object({tools:z.array(z.string()).min(1).describe("Array of tool names to get detailed schemas for")}),UJ4=z.toJSONSchema(fN1);n2=class n2 extends UO{constructor(Y,X){super(Y,X)}getSearchTool(Y){return{name:"GATEWAY_SEARCH_TOOLS",description:`Search for available tools by name or description. Returns tool names and brief descriptions without full schemas. Use this to discover tools before calling GATEWAY_DESCRIBE_TOOLS for detailed schemas. Total tools: ${Y}.`,inputSchema:BJ4}}getDescribeTool(){return{name:"GATEWAY_DESCRIBE_TOOLS",description:"Get detailed schemas for specific tools. Call after GATEWAY_SEARCH_TOOLS to get full input/output schemas.",inputSchema:UJ4}}async handleSearch(Y){let X=yN1.safeParse(Y);if(!X.success)return l3({error:X.error.flatten()});let Q=await this._cachedTools,J=ZK(Q.data),G=Vu(X.data.query,J,X.data.limit);return N2({query:X.data.query,results:G.map((K)=>({name:K.name,description:K.description,connection:K._meta.connectionTitle})),totalAvailable:J.length})}async handleDescribe(Y){let X=fN1.safeParse(Y);if(!X.success)return l3({error:X.error.flatten()});let Q=await this._cachedTools,J=ZK(Q.data),G=qu(X.data.tools,J);return N2({tools:G.tools,notFound:G.notFound})}async listTools(){let Y=await this._cachedTools,X=ZK(Y.data);return{tools:[this.getSearchTool(X.length),this.getDescribeTool()]}}async callTool(Y){if(Y.name==="GATEWAY_SEARCH_TOOLS")return this.handleSearch(Y.arguments??{});if(Y.name==="GATEWAY_DESCRIBE_TOOLS")return this.handleDescribe(Y.arguments??{});return{content:[{type:"text",text:`Unknown tool: ${Y.name}. Available: GATEWAY_SEARCH_TOOLS, GATEWAY_DESCRIBE_TOOLS`}],isError:!0}}async routeToolCall(Y){return UO.prototype.callTool.call(this,Y)}}});var hN1,DJ4,Z70;var bN1=j(()=>{b0();Qq();W70();hN1=z.object({code:z.string().min(1).describe("JavaScript code to execute. It runs as an async function body; you can use top-level `return` and `await`."),timeoutMs:z.number().default(3000).describe("Max execution time in milliseconds (default: 3000).")}),DJ4=z.toJSONSchema(hN1);Z70=class Z70 extends n2{constructor(Y,X){super(Y,X)}getRunCodeTool(){return{name:"GATEWAY_RUN_CODE",description:'Run JavaScript code in a sandbox. Code must be an ES module that `export default`s an async function that receives (tools) as its first parameter. Use GATEWAY_DESCRIBE_TOOLS to understand the input/output schemas for a tool before calling it. Use `await tools.toolName(args)` or `await tools["tool-name"](args)` to call tools.',inputSchema:DJ4}}async handleRunCode(Y){let X=hN1.safeParse(Y);if(!X.success)return l3({error:X.error.flatten()});let Q=await this._cachedTools,G={tools:ZK(Q.data),callTool:async(W,Z)=>{return this.routeToolCall({name:W,arguments:Z})}},K=await zu(X.data.code,G,X.data.timeoutMs);if(K.error)return l3(K);return N2(K)}async listTools(){return{tools:[...(await super.listTools()).tools,this.getRunCodeTool()]}}async callTool(Y){if(Y.name==="GATEWAY_RUN_CODE")return this.handleRunCode(Y.arguments??{});return super.callTool(Y)}}});function uN1(Y){let X=Y.slice().sort().join(","),Q=xN1.get(X);if(!Q){let J=z.object({name:(Y.length>0?z.enum(Y):z.string()).describe("The name of the tool to execute"),arguments:z.record(z.string(),z.unknown()).default({}).describe("Arguments to pass to the tool")});Q={schema:J,jsonSchema:z.toJSONSchema(J)},xN1.set(X,Q)}return Q}var xN1,K70;var gN1=j(()=>{b0();Qq();W70();xN1=new Map;K70=class K70 extends n2{constructor(Y,X){super(Y,X)}async getCallTool(){let Y=await this._cachedTools,Q=ZK(Y.data).map((G)=>G.name),{jsonSchema:J}=uN1(Q);return{name:"GATEWAY_CALL_TOOL",description:"Execute a tool by name. Use GATEWAY_DESCRIBE_TOOLS first to understand the input schema.",inputSchema:J}}async handleCallTool(Y){let X=await this._cachedTools,Q=ZK(X.data),J=Q.map((F)=>F.name),{schema:G}=uN1(J),K=G.safeParse(Y);if(!K.success)return l3({error:K.error.flatten()});let{name:W,arguments:Z}=K.data;if(!new Map(Q.map((F)=>[F.name,F])).has(W))return{content:[{type:"text",text:`Tool not found: ${W}. Use GATEWAY_SEARCH_TOOLS to find available tools.`}],isError:!0};return this.routeToolCall({name:W,arguments:Z})}async listTools(){let Y=await super.listTools(),X=await this.getCallTool();return{tools:[...Y.tools,X]}}async callTool(Y){if(Y.name==="GATEWAY_CALL_TOOL")return this.handleCallTool(Y.arguments??{});return super.callTool(Y)}}});function H70(Y){switch(Y){case"smart_tool_selection":return"smart_tool_selection";case"code_execution":return"code_execution";case"passthrough":default:return"passthrough"}}function OJ4(Y,X){if(Y.connection_type!=="VIRTUAL")return!1;if(!X||iW(X))return!1;return Y.id===X}async function mN1(Y,X){let Q=Y.id,J=await X.storage.virtualMcps.findById(Q);if(!J)throw Error(`Virtual MCP not found: ${Q}`);return i2(J,X,"passthrough")}async function i2(Y,X,Q){let G=Y.connections.map(($)=>$.connection_id).map(($)=>X.storage.connections.findById($)),K=Y.id?await X.storage.connections.findById(Y.id):null,W=await Promise.all(G),Z=[];if(K?.tools){for(let $ of K.tools)if(p3($))Z.push($)}let F={connections:W.filter(($)=>$!==null&&$.status==="active"&&!OJ4($,Y.id)),virtualMcp:Y,virtualTools:Z.length>0?Z:void 0};return Q==="smart_tool_selection"?new K70(F,X):Q==="code_execution"?new Z70(F,X):new UO(F,X)}var Iu=j(()=>{RY();qK();bN1();G70();gN1()});async function GQ(Y,X,Q=!1){if(Y.connection_type==="VIRTUAL")return mN1(Y,X);return IN1(Y,X,Q)}var F70=j(()=>{RN1();Iu()});async function $70(Y,X,Q){let J=await GQ(Y,X,Q),G=gF(J,{name:"mcp-mesh-enhanced",version:"1.0.0"},{capabilities:NJ4,instructions:J.getInstructions()});return G.server.setRequestHandler(cK,async()=>{return await J.listResources().catch(Gq({resources:[]}))}),G.server.setRequestHandler(nK,async()=>{return await J.listResourceTemplates().catch(Gq({resourceTemplates:[]}))}),G.server.setRequestHandler(iK,async()=>{return await J.listPrompts().catch(Gq({prompts:[]}))}),G}var NJ4;var lN1=j(()=>{RY();_9();F70();J70();NJ4={tools:{},resources:{},prompts:{}}});function V70(Y,X){let Q=Y.listTools.bind(Y),J=async()=>{if(X.connection_type!=="VIRTUAL"&&X.tools&&X.tools.length>0)return{tools:X.tools.map((K)=>({name:K.name,description:K.description,inputSchema:K.inputSchema,outputSchema:K.outputSchema,annotations:K.annotations,_meta:K._meta}))};return await Q()};return Y.listTools=J,Y}function LJ4(Y,X,Q){return async(J,G)=>{try{let K=J.params.name,W=async()=>{let{tools:H}=await Q();return H.find(($)=>$.name===K)?._meta};return await new VK(Y.authInstance,Y.auth.user?.id??Y.auth.apiKey?.userId,K,Y.boundAuth,Y.auth.user?.role,X,W).check(K),await G()}catch(K){return new Response(JSON.stringify({error:`Authorization failed: ${K.message}`}),{status:403,headers:{"Content-Type":"application/json"}})}}}function a2(Y,X,Q,J,G){let K=async(Z,H)=>{if(Q.connection_type==="VIRTUAL"){let B=await Y.callTool({name:Z,arguments:H});return new Response(JSON.stringify(B),{headers:{"Content-Type":"application/json"}})}if(!Q.connection_url)throw Error("Streamable tools require HTTP connection with URL");let F=Q.connection_url,$={method:"tools/call",params:{name:Z,arguments:H}};if(!G.superUser){let D=await LJ4(J,X,Y.listTools.bind(Y))($,async()=>{return new Response});if(!D.ok)return D}let V=J.connectionId&&J.connectionId!==X?J.connectionId:void 0;return TN1({ctx:J,enabled:ny().enabled,connectionId:X,connectionTitle:Q.title,virtualMcpId:V})($,async()=>{let B=await m2(Q,J,G.superUser),D=Q.connection_headers;if(D&&"headers"in D)Object.assign(B,D.headers);let O=new URL(F);O.pathname=O.pathname.replace(/\/$/,"")+`/call-tool/${$.params.name}`;let L=JSON.parse(JSON.stringify($.params.arguments,(I,P)=>{if(P instanceof AbortSignal)return;if(typeof P==="function"||typeof P==="symbol")return;if(P===void 0)return;return P})),w=JSON.stringify(L);return await J.tracer.startActiveSpan("mcp.proxy.callStreamableTool",{attributes:{"connection.id":X,"tool.name":$.params.name,"request.id":J.metadata.requestId}},async(I)=>{let P=Date.now();try{let T=await fetch(O.toString(),{method:"POST",redirect:"manual",body:w,headers:{...B,"Content-Type":"application/json"}}),A=Date.now()-P;return J.meter.createHistogram("connection.proxy.streamable.duration").record(A,{"connection.id":X,"tool.name":$.params.name,status:T.ok?"success":"error"}),J.meter.createCounter("connection.proxy.streamable.requests").add(1,{"connection.id":X,"tool.name":$.params.name,status:T.ok?"success":"error"}),I.end(),T}catch(T){let A=T,R=Date.now()-P;throw console.error("[with-streaming-support] fetch error",{connectionId:X,toolName:$.params.name,error:A.message,errorStack:A.stack,duration:R}),J.meter.createHistogram("connection.proxy.streamable.duration").record(R,{"connection.id":X,"tool.name":$.params.name,status:"error"}),J.meter.createCounter("connection.proxy.streamable.errors").add(1,{"connection.id":X,"tool.name":$.params.name,error:A.message}),I.recordException(A),I.end(),T}})})},W=Object.assign(Object.create(Object.getPrototypeOf(Y)),Y);return W.callStreamableTool=K,W}var dN1=j(()=>{aG0();p2();bA();X70()});var pN1=j(()=>{dN1()});var DO=j(()=>{F70();lN1();pN1()});async function AJ4(Y,X,Q,J){for(let K of X){if(K==="*")continue;let[W]=VN1(K),Z=Tu(W,Y);if(Z===void 0||Z===null)throw Error(`Scope references key "${W}" but it's not present in state`)}let G=qN1(Y,X);for(let K of G){if(K.endsWith("_self"))continue;let W=await J.storage.connections.findById(K);if(!W||W.organization_id!==Q)throw Error(`Referenced connection not found: ${K}`);try{await J.access.check(K)}catch(Z){throw Error(`Access denied to referenced connection: ${K}. ${Z.message}`)}}}var wJ4,MJ4,q70;var cN1=j(()=>{nG0();DO();Eu();b0();k1();Qu();QK();wJ4=z.object({id:z.string().describe("ID of the connection to update"),data:qw.describe("Partial connection data to update")}),MJ4=z.object({item:kX.describe("The updated connection entity")});q70=f0({name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update an existing MCP connection in the organization",inputSchema:wJ4,outputSchema:MJ4,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=g8(X);if(!J)throw Error("User ID required to update connection");let{id:G,data:K}=Y,W=await X.storage.connections.findById(G);if(!W||W.organization_id!==Q.id)throw Error("Connection not found in organization");let Z=K.connection_type??W.connection_type,H=K.connection_url??W.connection_url;if(Z==="VIRTUAL"){let L=xF(H);if(!L)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let w=await X.storage.virtualMcps.findById(L);if(!w)throw Error(`Virtual MCP not found: ${L}`);if(w.organization_id!==Q.id)throw Error("Virtual MCP does not belong to the current organization");H=uF(L)}let F=K.configuration_state??W.configuration_state??{},$=K.configuration_scopes??W.configuration_scopes??[];if(K.configuration_state!==void 0||K.configuration_scopes!==void 0){if(K.configuration_state!==void 0)F=K.configuration_state??{};else if(F===null||F===void 0)F={};if(K.configuration_scopes!==void 0)$=K.configuration_scopes??[];if($.length>0)await AJ4(F,$,Q.id,X)}let V=K.connection_token??W.connection_token;if(!V)try{let w=await new $K(X.db,X.vault).get(G);if(w?.accessToken)V=w.accessToken}catch{}let q=await QO({id:W.id,title:K.title??W.title,connection_type:Z,connection_url:H,connection_token:V,connection_headers:K.connection_headers??W.connection_headers}).catch(()=>null),B=q?.length?q:null,D={...K,connection_url:H,tools:B,configuration_state:F,configuration_scopes:$,updated_by:J},O=await X.storage.connections.update(G,D);if((K.configuration_state!==void 0||K.configuration_scopes!==void 0)&&F&&$)try{await(await GQ(O,X,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:F,scopes:$}})}catch(L){console.error("Failed to invoke ON_MCP_CONFIGURATION callback",L)}return{item:O}}})});var z70;var nN1=j(()=>{_5();k1();QK();z70=f0({name:"COLLECTION_CONNECTIONS_DELETE",description:"Delete a connection",inputSchema:P2,outputSchema:T2(kX),handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=await X.storage.connections.findById(Y.id);if(!J)throw Error(`Connection not found: ${Y.id}`);if(J.organization_id!==Q.id)throw Error("Connection not found in organization");if(J.metadata?.isFixed===!0)throw Error("This connection is a fixed system connection and cannot be deleted");let K=await X.storage.virtualMcps.listByConnectionId(Q.id,Y.id);if(K.length>0){let W=K.map((Z)=>`"${Z.title}"`).join(", ");throw Error(`Cannot delete this connection because it is used by the following agent(s): ${W}. Remove it from those agents first.`)}return await X.storage.connections.delete(Y.id),{item:J}}})});var B70;var iN1=j(()=>{b0();k1();B70=f0({name:"CONNECTION_TEST",description:"Test connection health and latency",inputSchema:z.object({id:z.string()}),outputSchema:z.object({id:z.string(),healthy:z.boolean(),latencyMs:z.number()}),handler:async(Y,X)=>{let Q=q1(X);await X.access.check();let J=await X.storage.connections.findById(Y.id);if(!J||J.organization_id!==Q.id)throw Error("Connection not found");let G=await X.storage.connections.testConnection(Y.id);return{id:Y.id,...G}}})});var aN1=j(()=>{vO1();FN1();$N1();cN1();nN1();iN1()});import{sql as $4}from"kysely";function rN1(Y){if(Y===null||Y===void 0)return"NULL";if(typeof Y==="number")return String(Y);if(typeof Y==="boolean")return Y?"TRUE":"FALSE";if(typeof Y==="string")return`'${Y.replace(/'/g,"''")}'`;if(Y instanceof Date)return`'${Y.toISOString()}'`;return`'${JSON.stringify(Y).replace(/'/g,"''")}'`}function EJ4(Y,X){let Q=Y;for(let G=X.length;G>=1;G--){let K=`$${G}`;if(Q.includes(K))Q=Q.replaceAll(K,rN1(X[G-1]))}let J=[];for(let G=0;G<Q.length;G++)if(Q[G]==="?")J.push(G);for(let G=Math.min(J.length,X.length)-1;G>=0;G--){let K=J[G],W=rN1(X[G]);Q=Q.slice(0,K)+W+Q.slice(K+1)}return Q}function oN1(Y){return Y.replace(/-/g,"_")}function IJ4(Y){return`app_${oN1(Y)}`}function RJ4(Y){return`app_role_${oN1(Y)}`}function jJ4(Y){if(Y instanceof Error){let X=Y.message.toLowerCase(),Q=Y.code;return Q==="3F000"||Q==="42704"||Q==="22023"||X.includes("schema")&&X.includes("does not exist")||X.includes("role")&&X.includes("does not exist")}return!1}async function SJ4(Y,X,Q){if(await $4`CREATE SCHEMA IF NOT EXISTS ${$4.id(X)}`.execute(Y),!(await $4`
|
|
1190
1190
|
SELECT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = ${Q}) as exists
|
|
1191
1191
|
`.execute(Y)).rows[0]?.exists)await $4`CREATE ROLE ${$4.id(Q)} NOLOGIN`.execute(Y);await $4`GRANT ${$4.id(Q)} TO CURRENT_USER`.execute(Y),await $4`GRANT USAGE, CREATE ON SCHEMA ${$4.id(X)} TO ${$4.id(Q)}`.execute(Y),await $4`GRANT ALL ON ALL TABLES IN SCHEMA ${$4.id(X)} TO ${$4.id(Q)}`.execute(Y),await $4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${$4.id(X)} TO ${$4.id(Q)}`.execute(Y),await $4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${$4.id(X)} GRANT ALL ON TABLES TO ${$4.id(Q)}`.execute(Y),await $4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${$4.id(X)} GRANT ALL ON SEQUENCES TO ${$4.id(Q)}`.execute(Y),await $4`REVOKE ALL ON SCHEMA public FROM ${$4.id(Q)}`.execute(Y)}async function kJ4(Y,X,Q,J){try{return await Y.transaction().execute(async(G)=>{return await $4`SET LOCAL ROLE ${$4.id(Q)}`.execute(G),await $4`SET LOCAL search_path TO ${$4.id(X)}`.execute(G),await $4.raw(J).execute(G)})}catch(G){if(jJ4(G))return await SJ4(Y,X,Q),await Y.transaction().execute(async(K)=>{return await $4`SET LOCAL ROLE ${$4.id(Q)}`.execute(K),await $4`SET LOCAL search_path TO ${$4.id(X)}`.execute(K),await $4.raw(J).execute(K)});throw G}}var TJ4,CJ4,sN1;var tN1=j(()=>{b0();k1();TJ4=z.object({results:z.array(z.unknown()).optional(),success:z.boolean().optional()});CJ4=z.object({sql:z.string().describe("The SQL query to run"),params:z.array(z.any()).describe("The parameters to pass to the SQL query").optional()});sN1=f0({name:"DATABASES_RUN_SQL",description:"Run a SQL query against the database",inputSchema:CJ4,outputSchema:z.object({result:z.array(TJ4)}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=EJ4(Y.sql,Y.params||[]);if(!X.connectionId)throw Error("Connection context required for database access");let J=IJ4(X.connectionId),G=RJ4(X.connectionId);return{result:[{results:(await kJ4(X.db,J,G,Q)).rows,success:!0}]}}})});var eN1,_J4,YL1;var zK=j(()=>{b0();Lu();eN1=z.object({connectionId:z.string().optional().describe("Filter subscriptions by connection ID (optional)")}),_J4=z.object({id:z.string().describe("Subscription ID"),connectionId:z.string().describe("Subscriber connection ID"),eventType:z.string().describe("Event type pattern"),publisher:z.string().nullable().describe("Publisher connection filter (null = all publishers)"),filter:z.string().nullable().describe("JSONPath filter expression"),enabled:z.boolean().describe("Whether subscription is enabled"),createdAt:z.string().datetime().describe("Created timestamp (ISO 8601)"),updatedAt:z.string().datetime().describe("Updated timestamp (ISO 8601)")}),YL1=z.object({subscriptions:z.array(_J4).describe("List of subscriptions")})});var U70;var XL1=j(()=>{k1();zK();U70=f0({name:"EVENT_PUBLISH",description:"Publish an event to the event bus. Supports immediate, scheduled (deliverAt), and recurring (cron) delivery. The source is automatically set to the caller's connection ID.",inputSchema:E2,outputSchema:C2,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=X.connectionId;if(!J)throw Error("Connection ID required to publish events. Use a connection-scoped token.");let G=await X.eventBus.publish(Q.id,J,{type:Y.type,subject:Y.subject,data:Y.data,deliverAt:Y.deliverAt,cron:Y.cron});return{id:G.id,type:G.type,source:G.source,time:G.time}}})});var D70;var QL1=j(()=>{k1();zK();D70=f0({name:"EVENT_SUBSCRIBE",description:"Subscribe to events of a specific type. The subscriber is automatically set to the caller's connection.",inputSchema:I2,outputSchema:R2,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=X.connectionId;if(!J)throw Error("Connection ID required to subscribe. Use a connection-scoped token.");let G=await X.eventBus.subscribe(Q.id,{connectionId:J,eventType:Y.eventType,publisher:Y.publisher,filter:Y.filter});return{subscription:{id:G.id,connectionId:G.connectionId,eventType:G.eventType,publisher:G.publisher,filter:G.filter,enabled:G.enabled,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt,updatedAt:G.updatedAt instanceof Date?G.updatedAt.toISOString():G.updatedAt}}}})});var O70;var JL1=j(()=>{k1();zK();O70=f0({name:"EVENT_UNSUBSCRIBE",description:"Unsubscribe from events by removing a subscription.",inputSchema:k2,outputSchema:v2,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=X.connectionId;if(!J)throw Error("Connection ID required to unsubscribe. Use a connection-scoped token.");let G=await X.eventBus.getSubscription(Q.id,Y.subscriptionId);if(!G)throw Error(`Subscription not found: ${Y.subscriptionId}`);if(G.connectionId!==J)throw Error("Cannot unsubscribe from a subscription owned by another connection");return{success:(await X.eventBus.unsubscribe(Q.id,Y.subscriptionId)).success,subscriptionId:Y.subscriptionId}}})});var N70;var GL1=j(()=>{k1();zK();N70=f0({name:"EVENT_CANCEL",description:"Cancel a recurring event to stop future deliveries. Only the publisher can cancel their own events.",inputSchema:_2,outputSchema:y2,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=X.connectionId;if(!J)throw Error("Connection ID required to cancel events. Use a connection-scoped token.");if(!await X.eventBus.getEvent(Q.id,Y.eventId))throw Error(`Event not found: ${Y.eventId}`);if(!(await X.eventBus.cancelEvent(Q.id,Y.eventId,J)).success)throw Error("Failed to cancel event. Either the event is already completed/failed, or you are not the publisher.");return{success:!0,eventId:Y.eventId}}})});var L70;var WL1=j(()=>{k1();zK();L70=f0({name:"EVENT_ACK",description:"Acknowledge delivery of an event. Call after successfully processing an event received via ON_EVENTS with retryAfter.",inputSchema:f2,outputSchema:h2,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=X.connectionId;if(!J)throw Error("Connection ID required to acknowledge events. Use a connection-scoped token.");if(!(await X.eventBus.ackEvent(Q.id,Y.eventId,J)).success)throw Error("Failed to acknowledge event. Either the event was not found, already delivered, or you are not a subscriber.");return{success:!0,eventId:Y.eventId}}})});var w70;var ZL1=j(()=>{k1();zK();w70=f0({name:"EVENT_SUBSCRIPTION_LIST",description:"List event subscriptions, optionally filtered by connection ID.",inputSchema:eN1,outputSchema:YL1,handler:async(Y,X)=>{g0(X);let Q=q1(X);return await X.access.check(),{subscriptions:(await X.eventBus.listSubscriptions(Q.id,Y.connectionId)).map((G)=>({id:G.id,connectionId:G.connectionId,eventType:G.eventType,publisher:G.publisher,filter:G.filter,enabled:G.enabled,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt,updatedAt:G.updatedAt instanceof Date?G.updatedAt.toISOString():G.updatedAt}))}}})});var M70;var KL1=j(()=>{k1();zK();M70=f0({name:"EVENT_SYNC_SUBSCRIPTIONS",description:"Sync subscriptions to desired state. Creates new, deletes removed, updates changed filters. Subscriptions are identified by (eventType, publisher).",inputSchema:j2,outputSchema:S2,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=X.connectionId;if(!J)throw Error("Connection ID required to sync subscriptions. Use a connection-scoped token.");let G=await X.eventBus.syncSubscriptions(Q.id,{connectionId:J,subscriptions:Y.subscriptions});return{created:G.created,updated:G.updated,deleted:G.deleted,unchanged:G.unchanged,subscriptions:G.subscriptions.map((K)=>({id:K.id,connectionId:K.connectionId,eventType:K.eventType,publisher:K.publisher,filter:K.filter,enabled:K.enabled,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt,updatedAt:K.updatedAt instanceof Date?K.updatedAt.toISOString():K.updatedAt}))}}})});var HL1=j(()=>{XL1();QL1();JL1();GL1();WL1();ZL1();KL1();zK()});var OO=j(()=>{yS()});var fJ4,hJ4,A70;var FL1=j(()=>{b0();k1();OO();fJ4=z.object({data:Bw.describe("Data for the new virtual MCP")}),hJ4=z.object({item:tQ.describe("The created virtual MCP entity")}),A70=f0({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a new MCP virtual MCP in the organization",inputSchema:fJ4,outputSchema:hJ4,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=g8(X);if(!J)throw Error("User ID required to create virtual MCP");return{item:await X.storage.virtualMcps.create(Q.id,J,Y.data)}}})});function bJ4(Y){let X=[],Q=0;while(Q<Y.length){let J=Y[Q];if(J==="%")X.push(".*");else if(J==="_")X.push(".");else if(/[.*+?^${}()|[\]\\]/.test(J))X.push("\\"+J);else X.push(J);Q++}return X.join("")}function c3(Y){return typeof Y==="string"||typeof Y==="number"}function P70(Y,X){let Q=X.split("."),J=Y;for(let G of Q){if(J==null||typeof J!=="object")return;J=J[G]}return J}function xJ4(Y,X){return Y.connections.some((Q)=>Q.connection_id===X)}function Ru(Y,X){if("conditions"in X){let{operator:Z,conditions:H}=X;switch(Z){case"and":return H.every((F)=>Ru(Y,F));case"or":return H.some((F)=>Ru(Y,F));case"not":return!H.every((F)=>Ru(Y,F));default:return!0}}let{field:Q,operator:J,value:G}=X,K=Q.join(".");if(K==="connection_id"){if(J!=="eq"||typeof G!=="string")return!1;return xJ4(Y,G)}let W=P70(Y,K);switch(J){case"eq":return W===G;case"gt":return c3(W)&&c3(G)&&W>G;case"gte":return c3(W)&&c3(G)&&W>=G;case"lt":return c3(W)&&c3(G)&&W<G;case"lte":return c3(W)&&c3(G)&&W<=G;case"in":return Array.isArray(G)&&G.includes(W);case"like":if(typeof W!=="string"||typeof G!=="string")return!1;if(G.length>100)return!1;let Z=bJ4(G);return new RegExp(`^${Z}$`,"i").test(W);case"contains":if(typeof W!=="string"||typeof G!=="string")return!1;return W.toLowerCase().includes(G.toLowerCase());default:return!0}}function uJ4(Y,X){return[...Y].sort((Q,J)=>{for(let G of X){let K=G.field.join("."),W=P70(Q,K),Z=P70(J,K),H=0;if(W==null&&Z==null)continue;if(W==null)H=G.nulls==="first"?-1:1;else if(Z==null)H=G.nulls==="first"?1:-1;else if(typeof W==="string"&&typeof Z==="string")H=W.localeCompare(Z);else if(typeof W==="number"&&typeof Z==="number")H=W-Z;else H=String(W).localeCompare(String(Z));if(H!==0)return G.direction==="desc"?-H:H}return 0})}var gJ4,mJ4,T70;var $L1=j(()=>{_5();k1();OO();gJ4=KK,mJ4=HK(tQ),T70=f0({name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List all MCP virtual MCPs in the organization",inputSchema:gJ4,outputSchema:mJ4,handler:async(Y,X)=>{await X.access.check();let Q=q1(X),J=Y.where&&!("conditions"in Y.where)&&Y.where.field.join(".")==="connection_id"&&Y.where.operator==="eq"&&typeof Y.where.value==="string"?Y.where.value:void 0,K=J?await X.storage.virtualMcps.listByConnectionId(Q.id,J):await X.storage.virtualMcps.list(Q.id);if(Y.where)K=K.filter((V)=>Ru(V,Y.where));if(Y.orderBy&&Y.orderBy.length>0)K=uJ4(K,Y.orderBy);let W=K.length,Z=Y.offset??0,H=Y.limit??100,F=K.slice(Z,Z+H),$=Z+H<W;return{items:F,totalCount:W,hasMore:$}}})});var lJ4,dJ4,E70;var VL1=j(()=>{b0();k1();OO();lJ4=z.object({id:z.string().describe("ID of the virtual MCP to retrieve")}),dJ4=z.object({item:tQ.nullable().describe("The retrieved virtual MCP, or null if not found")}),E70=f0({name:"COLLECTION_VIRTUAL_MCP_GET",description:"Get an MCP virtual MCP by ID",inputSchema:lJ4,outputSchema:dJ4,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=await X.storage.virtualMcps.findById(Y.id);if(J&&J.organization_id!==Q.id)return{item:null};if(!J)return{item:null};return{item:J}}})});var pJ4,cJ4,C70;var qL1=j(()=>{b0();k1();OO();pJ4=z.object({id:z.string().describe("ID of the virtual MCP to update"),data:Uw.describe("Partial virtual MCP data to update")}),cJ4=z.object({item:tQ.describe("The updated virtual MCP entity")}),C70=f0({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update an MCP virtual MCP",inputSchema:pJ4,outputSchema:cJ4,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=g8(X);if(!J)throw Error("User ID required to update virtual MCP");let G=await X.storage.virtualMcps.findById(Y.id);if(!G)throw Error(`Virtual MCP not found: ${Y.id}`);if(G.organization_id!==Q.id)throw Error(`Virtual MCP not found: ${Y.id}`);return{item:await X.storage.virtualMcps.update(Y.id,J,Y.data)}}})});var nJ4,iJ4,I70;var zL1=j(()=>{b0();k1();OO();nJ4=z.object({id:z.string().describe("ID of the virtual MCP to delete")}),iJ4=z.object({item:tQ.describe("The deleted virtual MCP entity")}),I70=f0({name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Delete an MCP virtual MCP",inputSchema:nJ4,outputSchema:iJ4,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=await X.storage.virtualMcps.findById(Y.id);if(!J)throw Error(`Virtual MCP not found: ${Y.id}`);if(J.organization_id!==Q.id)throw Error(`Virtual MCP not found: ${Y.id}`);return await X.storage.virtualMcps.delete(Y.id),{item:J}}})});var BL1=j(()=>{FL1();$L1();VL1();qL1();zL1()});var rJ4,oJ4,R70;var UL1=j(()=>{b0();k1();qK();rJ4=z.object({virtual_mcp_id:z.string().describe("ID of the Virtual MCP to add the tool to"),data:jN1.describe("Virtual tool data")}),oJ4=z.object({item:MW.describe("The created virtual tool")}),R70=f0({name:"COLLECTION_VIRTUAL_TOOLS_CREATE",description:"Create a new virtual tool on a Virtual MCP. The tool code should be a JavaScript ES module that exports a default async function: export default async (tools, args) => { ... }. Specify connection_dependencies to indicate which connections this tool uses.",inputSchema:rJ4,outputSchema:oJ4,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=await X.storage.virtualMcps.findById(Y.virtual_mcp_id);if(!J||J.organization_id!==Q.id)throw Error(`Virtual MCP not found: ${Y.virtual_mcp_id}`);let G=Y.data.connection_dependencies??[];return{item:await X.storage.virtualMcps.createVirtualTool(Y.virtual_mcp_id,Y.data,G)}}})});var sJ4,tJ4,j70;var DL1=j(()=>{b0();k1();qK();sJ4=z.object({virtual_mcp_id:z.string().describe("ID of the Virtual MCP to list tools for"),limit:z.number().int().min(1).max(1000).optional().describe("Maximum number of items to return"),offset:z.number().int().min(0).optional().describe("Number of items to skip")}),tJ4=z.object({items:z.array(MW).describe("Array of virtual tools"),totalCount:z.number().int().min(0).optional().describe("Total number of virtual tools"),hasMore:z.boolean().optional().describe("Whether there are more items available")}),j70=f0({name:"COLLECTION_VIRTUAL_TOOLS_LIST",description:"List all virtual tools for a Virtual MCP",inputSchema:sJ4,outputSchema:tJ4,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=await X.storage.virtualMcps.findById(Y.virtual_mcp_id);if(!J||J.organization_id!==Q.id)return{items:[],totalCount:0,hasMore:!1};let G=await X.storage.virtualMcps.listVirtualTools(Y.virtual_mcp_id),K=G.length,W=Y.offset??0,Z=Y.limit??100,H=G.slice(W,W+Z),F=W+Z<K;return{items:H,totalCount:K,hasMore:F}}})});var eJ4,Y54,S70;var OL1=j(()=>{b0();k1();qK();eJ4=z.object({virtual_mcp_id:z.string().describe("ID of the Virtual MCP"),name:z.string().describe("Name of the virtual tool to retrieve")}),Y54=z.object({item:MW.nullable().describe("The retrieved virtual tool, or null if not found")}),S70=f0({name:"COLLECTION_VIRTUAL_TOOLS_GET",description:"Get a virtual tool by name from a Virtual MCP",inputSchema:eJ4,outputSchema:Y54,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=await X.storage.virtualMcps.findById(Y.virtual_mcp_id);if(!J||J.organization_id!==Q.id)return{item:null};return{item:await X.storage.virtualMcps.getVirtualTool(Y.virtual_mcp_id,Y.name)}}})});var X54,Q54,k70;var NL1=j(()=>{b0();k1();qK();X54=z.object({virtual_mcp_id:z.string().describe("ID of the Virtual MCP"),name:z.string().describe("Current name of the virtual tool to update"),data:SN1.describe("Partial virtual tool data to update")}),Q54=z.object({item:MW.describe("The updated virtual tool")}),k70=f0({name:"COLLECTION_VIRTUAL_TOOLS_UPDATE",description:"Update an existing virtual tool on a Virtual MCP. Specify connection_dependencies to update which connections this tool uses.",inputSchema:X54,outputSchema:Q54,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=await X.storage.virtualMcps.findById(Y.virtual_mcp_id);if(!J||J.organization_id!==Q.id)throw Error(`Virtual MCP not found: ${Y.virtual_mcp_id}`);if(!await X.storage.virtualMcps.getVirtualTool(Y.virtual_mcp_id,Y.name))throw Error(`Virtual tool not found: ${Y.name}`);let K=Y.data.connection_dependencies;return{item:await X.storage.virtualMcps.updateVirtualTool(Y.virtual_mcp_id,Y.name,Y.data,K)}}})});var J54,G54,v70;var LL1=j(()=>{b0();k1();qK();J54=z.object({virtual_mcp_id:z.string().describe("ID of the Virtual MCP"),name:z.string().describe("Name of the virtual tool to delete")}),G54=z.object({item:MW.describe("The deleted virtual tool")}),v70=f0({name:"COLLECTION_VIRTUAL_TOOLS_DELETE",description:"Delete a virtual tool from a Virtual MCP",inputSchema:J54,outputSchema:G54,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=await X.storage.virtualMcps.findById(Y.virtual_mcp_id);if(!J||J.organization_id!==Q.id)throw Error(`Virtual MCP not found: ${Y.virtual_mcp_id}`);let G=await X.storage.virtualMcps.getVirtualTool(Y.virtual_mcp_id,Y.name);if(!G)throw Error(`Virtual tool not found: ${Y.name}`);return await X.storage.virtualMcps.deleteVirtualTool(Y.virtual_mcp_id,Y.name),{item:G}}})});var wL1=j(()=>{UL1();DL1();OL1();NL1();LL1()});var Z54,_70;var ML1=j(()=>{k1();b0();Z54=z.object({id:z.string().optional().describe("Unique log identifier"),organizationId:z.string().describe("Organization ID"),connectionId:z.string().describe("Connection ID"),connectionTitle:z.string().describe("Connection display name"),toolName:z.string().describe("Name of the tool that was called"),input:z.record(z.string(),z.unknown()).describe("Redacted tool input"),output:z.record(z.string(),z.unknown()).describe("Redacted tool output"),isError:z.boolean().describe("Whether the call resulted in an error"),errorMessage:z.string().nullish().describe("Error message if applicable"),durationMs:z.number().describe("Call duration in milliseconds"),timestamp:z.string().describe("ISO 8601 timestamp of the call"),userId:z.string().nullish().describe("User who triggered the call"),requestId:z.string().describe("Unique request identifier"),userAgent:z.string().nullish().describe("Client identifier (x-mesh-client header)"),virtualMcpId:z.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:z.record(z.string(),z.string()).nullish().describe("Custom key-value metadata attached to the log")}),_70=f0({name:"MONITORING_LOGS_LIST",description:"List monitoring logs for tool calls in the organization",inputSchema:z.object({connectionId:z.string().optional().describe("Filter by connection ID"),excludeConnectionIds:z.array(z.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:z.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:z.string().optional().describe("Filter by tool name"),isError:z.boolean().optional().describe("Filter by error status"),startDate:z.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:z.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:z.number().default(20).describe("Maximum number of results"),offset:z.number().default(0).describe("Offset for pagination"),properties:z.record(z.string(),z.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:z.array(z.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:z.record(z.string(),z.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:z.record(z.string(),z.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:z.object({logs:z.array(Z54).describe("Array of monitoring logs"),total:z.number().describe("Total number of logs matching filters"),offset:z.number().describe("Current offset for pagination"),limit:z.number().describe("Current limit for pagination")}),handler:async(Y,X)=>{let Q=q1(X),G=Y.properties||Y.propertyKeys||Y.propertyPatterns||Y.propertyInValues?{properties:Y.properties,propertyKeys:Y.propertyKeys,propertyPatterns:Y.propertyPatterns,propertyInValues:Y.propertyInValues}:void 0,K={organizationId:Q.id,connectionId:Y.connectionId,excludeConnectionIds:Y.excludeConnectionIds,virtualMcpId:Y.virtualMcpId,toolName:Y.toolName,isError:Y.isError,startDate:Y.startDate?new Date(Y.startDate):void 0,endDate:Y.endDate?new Date(Y.endDate):void 0,limit:Y.limit,offset:Y.offset,propertyFilters:G},W=await X.storage.monitoring.query(K);return{logs:W.logs.map((Z)=>({...Z,timestamp:Z.timestamp instanceof Date?Z.timestamp.toISOString():Z.timestamp})),total:W.total,offset:Y.offset,limit:Y.limit}}})});var y70;var AL1=j(()=>{k1();b0();y70=f0({name:"MONITORING_STATS",description:"Get aggregated statistics for tool call monitoring",inputSchema:z.object({startDate:z.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:z.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:z.object({totalCalls:z.number().describe("Total number of tool calls"),errorRate:z.number().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:z.number().describe("Average call duration in milliseconds"),errorRatePercent:z.string().describe("Error rate as a percentage string")}),handler:async(Y,X)=>{let J={organizationId:q1(X).id,startDate:Y.startDate?new Date(Y.startDate):void 0,endDate:Y.endDate?new Date(Y.endDate):void 0},G=await X.storage.monitoring.getStats(J);return{...G,errorRatePercent:(G.errorRate*100).toFixed(2)}}})});var PL1=j(()=>{ML1();AL1()});var f70;var TL1=j(()=>{b0();k1();f70=f0({name:"ORGANIZATION_CREATE",description:"Create a new organization",inputSchema:z.object({slug:z.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens"),name:z.string().min(1).max(255),description:z.string().optional()}),outputSchema:z.object({id:z.string(),name:z.string(),slug:z.string(),logo:z.string().nullable().optional(),metadata:z.any().optional(),createdAt:z.string().datetime().describe("ISO 8601 timestamp"),members:z.array(z.any()).optional()}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=g8(X);if(!Q)throw Error("User ID required to create organization");let J=await X.boundAuth.organization.create({name:Y.name,slug:Y.slug,metadata:Y.description?{description:Y.description}:void 0,userId:Q});if(!J)throw Error("Failed to create organization");return{...J,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt}}})});var h70;var EL1=j(()=>{b0();k1();h70=f0({name:"ORGANIZATION_LIST",description:"List all organizations user has access to",inputSchema:z.object({userId:z.string().optional()}),outputSchema:z.object({organizations:z.array(z.object({id:z.string(),name:z.string(),slug:z.string(),logo:z.string().nullable().optional(),metadata:z.any().optional(),createdAt:z.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=g8(X),J=Y.userId||Q;if(!J)throw Error("User ID required to list organizations");return{organizations:(await X.boundAuth.organization.list(J)).map((K)=>({...K,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}))}}})});var b70;var CL1=j(()=>{b0();k1();b70=f0({name:"ORGANIZATION_GET",description:"Get organization details by slug or ID",inputSchema:z.object({}),outputSchema:z.object({id:z.string(),name:z.string(),slug:z.string(),logo:z.string().nullable().optional(),metadata:z.any().optional(),createdAt:z.string().datetime().describe("ISO 8601 timestamp"),members:z.array(z.any()).optional(),invitations:z.array(z.any()).optional()}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=await X.boundAuth.organization.get();if(!Q)throw Error("No active organization found");let J=new Date,G=Q.invitations?.filter((K)=>new Date(K.expiresAt)>J);return{...Q,invitations:G,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});var x70;var IL1=j(()=>{b0();k1();x70=f0({name:"ORGANIZATION_UPDATE",description:"Update an existing organization",inputSchema:z.object({id:z.string(),slug:z.string().min(1).max(50).regex(/^[a-z0-9-]+$/).optional(),name:z.string().min(1).max(255).optional(),description:z.string().optional()}),outputSchema:z.object({id:z.string(),name:z.string(),slug:z.string(),logo:z.string().nullable().optional(),metadata:z.any().optional(),createdAt:z.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q={};if(Y.name)Q.name=Y.name;if(Y.slug)Q.slug=Y.slug;if(Y.description)Q.metadata={description:Y.description};let J=await X.boundAuth.organization.update({organizationId:Y.id,data:Q});if(!J)throw Error("Failed to update organization");return{...J,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt}}})});var u70;var RL1=j(()=>{b0();k1();u70=f0({name:"ORGANIZATION_DELETE",description:"Delete an organization",inputSchema:z.object({id:z.string()}),outputSchema:z.object({success:z.boolean(),id:z.string()}),handler:async(Y,X)=>{return g0(X),await X.access.check(),await X.boundAuth.organization.delete(Y.id),{success:!0,id:Y.id}}})});var r2;var g70=j(()=>{b0();r2=z.object({title:z.string(),url:z.string(),icon:z.string()})});var m70;var jL1=j(()=>{b0();k1();g70();m70=f0({name:"ORGANIZATION_SETTINGS_GET",description:"Get organization-level settings",inputSchema:z.object({}),outputSchema:z.object({organizationId:z.string(),sidebar_items:z.array(r2).nullable().optional(),enabled_plugins:z.array(z.string()).nullable().optional(),createdAt:z.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:z.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=X.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let J=await X.storage.organizationSettings.get(Q);if(!J)return{organizationId:Q};return{...J,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}})});var l70;var SL1=j(()=>{b0();k1();g70();l70=f0({name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization-level settings",inputSchema:z.object({organizationId:z.string(),sidebar_items:z.array(r2).optional(),enabled_plugins:z.array(z.string()).optional()}),outputSchema:z.object({organizationId:z.string(),sidebar_items:z.array(r2).nullable().optional(),enabled_plugins:z.array(z.string()).nullable().optional(),createdAt:z.string().datetime().describe("ISO 8601 timestamp"),updatedAt:z.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Y,X)=>{if(g0(X),await X.access.check(),X.organization&&X.organization.id!==Y.organizationId)throw Error("Cannot update settings for a different organization");let Q=await X.storage.organizationSettings.upsert(Y.organizationId,{sidebar_items:Y.sidebar_items,enabled_plugins:Y.enabled_plugins});return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});var d70;var kL1=j(()=>{b0();k1();d70=f0({name:"ORGANIZATION_MEMBER_ADD",description:"Add a member to an organization",inputSchema:z.object({organizationId:z.string().optional(),userId:z.string(),role:z.array(z.string())}),outputSchema:z.object({id:z.string(),organizationId:z.string(),userId:z.string(),role:z.union([z.string(),z.array(z.string())]),createdAt:z.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=Y.organizationId||X.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let J=await X.boundAuth.organization.addMember({organizationId:Q,userId:Y.userId,role:Y.role});if(!J)throw Error("Failed to add member");return{...J,role:J.role,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt}}})});var p70;var vL1=j(()=>{b0();k1();p70=f0({name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove a member from an organization",inputSchema:z.object({organizationId:z.string().optional(),memberIdOrEmail:z.string()}),outputSchema:z.object({success:z.boolean(),memberIdOrEmail:z.string()}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=Y.organizationId||X.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");return await X.boundAuth.organization.removeMember({organizationId:Q,memberIdOrEmail:Y.memberIdOrEmail}),{success:!0,memberIdOrEmail:Y.memberIdOrEmail}}})});var c70;var _L1=j(()=>{b0();k1();c70=f0({name:"ORGANIZATION_MEMBER_LIST",description:"List all members in an organization",inputSchema:z.object({limit:z.number().optional(),offset:z.number().optional()}),outputSchema:z.object({members:z.array(z.object({id:z.string(),organizationId:z.string(),userId:z.string(),role:z.string(),createdAt:z.string().datetime().describe("ISO 8601 timestamp"),user:z.object({id:z.string(),name:z.string(),email:z.string(),image:z.string().optional()}).optional()}))}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=X.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let J=await X.boundAuth.organization.listMembers({organizationId:Q,limit:Y.limit,offset:Y.offset});return{members:(Array.isArray(J)?J:[]).map((K)=>({...K,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}))}}})});var n70;var yL1=j(()=>{b0();k1();n70=f0({name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Update a member's role in an organization",inputSchema:z.object({organizationId:z.string().optional(),memberId:z.string(),role:z.array(z.string())}),outputSchema:z.object({id:z.string(),organizationId:z.string(),userId:z.string(),role:z.union([z.literal("admin"),z.literal("member"),z.literal("owner")]),createdAt:z.string().datetime().describe("ISO 8601 timestamp"),user:z.object({email:z.string(),name:z.string(),image:z.string().optional()})}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=Y.organizationId||X.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let J=await X.boundAuth.organization.updateMemberRole({organizationId:Q,memberId:Y.memberId,role:Y.role});if(!J)throw Error("Failed to update member role");return{...J,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt}}})});var fL1=j(()=>{TL1();EL1();CL1();IL1();RL1();jL1();SL1();kL1();vL1();_L1();yL1()});var F54,ju,$54,Zq,hL1,Su;var Kq=j(()=>{b0();F54=z.object({banner:z.string().nullable(),bannerColor:z.string().nullable(),icon:z.string().nullable(),themeColor:z.string().nullable()}),ju=z.object({banner:z.string().nullable().optional(),bannerColor:z.string().nullable().optional(),icon:z.string().nullable().optional(),themeColor:z.string().nullable().optional()}),$54=z.object({id:z.string(),title:z.string(),icon:z.string().nullable()}),Zq=z.object({id:z.string(),organizationId:z.string(),slug:z.string(),name:z.string(),description:z.string().nullable(),enabledPlugins:z.array(z.string()).nullable(),ui:F54.nullable(),createdAt:z.string().datetime().describe("ISO 8601 timestamp"),updatedAt:z.string().datetime().describe("ISO 8601 timestamp")}),hL1=Zq.omit({organizationId:!0}).extend({boundConnections:z.array($54)}),Su=z.object({id:z.string(),projectId:z.string(),pluginId:z.string(),connectionId:z.string().nullable(),settings:z.record(z.string(),z.unknown()).nullable(),createdAt:z.string().datetime().describe("ISO 8601 timestamp"),updatedAt:z.string().datetime().describe("ISO 8601 timestamp")})});var i70;var bL1=j(()=>{b0();k1();Kq();i70=f0({name:"PROJECT_LIST",description:"List all projects in an organization",inputSchema:z.object({organizationId:z.string().describe("Organization ID to list projects for")}),outputSchema:z.object({projects:z.array(hL1)}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=await X.storage.projects.list(Y.organizationId),J=Q.map((K)=>K.id),G=await X.storage.projectPluginConfigs.getBoundConnectionsForProjects(J);return{projects:Q.map((K)=>({id:K.id,slug:K.slug,name:K.name,description:K.description,enabledPlugins:K.enabledPlugins,ui:K.ui,boundConnections:G.get(K.id)??[],createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt,updatedAt:K.updatedAt instanceof Date?K.updatedAt.toISOString():K.updatedAt}))}}})});var a70;var xL1=j(()=>{b0();k1();Kq();a70=f0({name:"PROJECT_GET",description:"Get a project by ID or slug",inputSchema:z.object({organizationId:z.string().describe("Organization ID"),projectId:z.string().optional().describe("Project ID (either this or slug required)"),slug:z.string().optional().describe("Project slug (either this or projectId required)")}).refine((Y)=>Y.projectId||Y.slug,{message:"Either projectId or slug must be provided"}),outputSchema:z.object({project:Zq.nullable()}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=null;if(Y.projectId)Q=await X.storage.projects.get(Y.projectId);else if(Y.slug)Q=await X.storage.projects.getBySlug(Y.organizationId,Y.slug);if(!Q)return{project:null};return{project:{id:Q.id,organizationId:Q.organizationId,slug:Q.slug,name:Q.name,description:Q.description,enabledPlugins:Q.enabledPlugins,ui:Q.ui,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}}})});var r70;var uL1=j(()=>{b0();RY();k1();Kq();r70=f0({name:"PROJECT_CREATE",description:"Create a new project in an organization",inputSchema:z.object({organizationId:z.string().describe("Organization ID"),slug:z.string().min(1).max(100).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").describe("URL-friendly identifier"),name:z.string().min(1).max(200).describe("Display name"),description:z.string().max(1000).nullable().optional().describe("Project description"),enabledPlugins:z.array(z.string()).nullable().optional().describe("Plugin IDs to enable"),ui:ju.nullable().optional().describe("UI customization")}),outputSchema:z.object({project:Zq}),handler:async(Y,X)=>{g0(X),await X.access.check();let{organizationId:Q,slug:J,name:G,description:K,enabledPlugins:W,ui:Z}=Y;if(J===x5)throw Error(`Slug "${x5}" is reserved`);if(await X.storage.projects.getBySlug(Q,J))throw Error(`Project with slug "${J}" already exists in this organization`);let F=Z?{banner:Z.banner??null,bannerColor:Z.bannerColor??null,icon:Z.icon??null,themeColor:Z.themeColor??null}:null,$=await X.storage.projects.create({organizationId:Q,slug:J,name:G,description:K??null,enabledPlugins:W??null,ui:F});return{project:{id:$.id,organizationId:$.organizationId,slug:$.slug,name:$.name,description:$.description,enabledPlugins:$.enabledPlugins,ui:$.ui,createdAt:$.createdAt instanceof Date?$.createdAt.toISOString():$.createdAt,updatedAt:$.updatedAt instanceof Date?$.updatedAt.toISOString():$.updatedAt}}}})});var o70;var gL1=j(()=>{b0();k1();Kq();o70=f0({name:"PROJECT_UPDATE",description:"Update a project's details",inputSchema:z.object({projectId:z.string().describe("Project ID to update"),name:z.string().min(1).max(200).optional().describe("New display name"),description:z.string().max(1000).nullable().optional().describe("New description"),enabledPlugins:z.array(z.string()).nullable().optional().describe("Updated plugin IDs"),ui:ju.nullable().optional().describe("Updated UI customization")}),outputSchema:z.object({project:Zq.nullable()}),handler:async(Y,X)=>{g0(X),await X.access.check();let{projectId:Q,name:J,description:G,enabledPlugins:K,ui:W}=Y,Z={};if(J!==void 0)Z.name=J;if(G!==void 0)Z.description=G;if(K!==void 0)Z.enabledPlugins=K;if(W!==void 0)Z.ui=W?{banner:W.banner??null,bannerColor:W.bannerColor??null,icon:W.icon??null,themeColor:W.themeColor??null}:null;let H=await X.storage.projects.update(Q,Z);if(!H)return{project:null};return{project:{id:H.id,organizationId:H.organizationId,slug:H.slug,name:H.name,description:H.description,enabledPlugins:H.enabledPlugins,ui:H.ui,createdAt:H.createdAt instanceof Date?H.createdAt.toISOString():H.createdAt,updatedAt:H.updatedAt instanceof Date?H.updatedAt.toISOString():H.updatedAt}}}})});var s70;var mL1=j(()=>{b0();RY();k1();s70=f0({name:"PROJECT_DELETE",description:"Delete a project (cannot delete org-admin)",inputSchema:z.object({projectId:z.string().describe("Project ID to delete")}),outputSchema:z.object({success:z.boolean(),message:z.string().optional()}),handler:async(Y,X)=>{g0(X),await X.access.check();let{projectId:Q}=Y,J=await X.storage.projects.get(Q);if(!J)return{success:!1,message:"Project not found"};if(J.slug===x5)return{success:!1,message:"Cannot delete the org-admin project"};return{success:await X.storage.projects.delete(Q)}}})});var t70;var lL1=j(()=>{b0();k1();Kq();t70=f0({name:"PROJECT_PLUGIN_CONFIG_GET",description:"Get plugin configuration for a project",inputSchema:z.object({projectId:z.string().describe("Project ID"),pluginId:z.string().describe("Plugin ID")}),outputSchema:z.object({config:Su.nullable()}),handler:async(Y,X)=>{g0(X),await X.access.check();let{projectId:Q,pluginId:J}=Y,G=await X.storage.projectPluginConfigs.get(Q,J);if(!G)return{config:null};return{config:{id:G.id,projectId:G.projectId,pluginId:G.pluginId,connectionId:G.connectionId,settings:G.settings,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt,updatedAt:G.updatedAt instanceof Date?G.updatedAt.toISOString():G.updatedAt}}}})});var e70;var dL1=j(()=>{b0();k1();Kq();Au();e70=f0({name:"PROJECT_PLUGIN_CONFIG_UPDATE",description:"Update or create plugin configuration for a project",inputSchema:z.object({projectId:z.string().describe("Project ID"),pluginId:z.string().describe("Plugin ID"),connectionId:z.string().nullable().optional().describe("MCP connection to bind"),settings:z.record(z.string(),z.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:z.object({config:Su}),handler:async(Y,X)=>{g0(X),await X.access.check();let{projectId:Q,pluginId:J,connectionId:G,settings:K}=Y,W=g8(X),Z=await X.storage.projects.get(Q);if(!Z)throw Error(`Project not found: ${Q}`);let H=G?await X.storage.connections.findById(G):null;if(G&&Z.organizationId&&!H&&$O()){if(Mu(G,Z.organizationId)){if(!W)throw Error("User ID required to create dev-assets connection");let $=VO(Z.organizationId,LJ());await X.storage.connections.create({...$,organization_id:Z.organizationId,created_by:W})}}let F=await X.storage.projectPluginConfigs.upsert(Q,J,{connectionId:G,settings:K});return{config:{id:F.id,projectId:F.projectId,pluginId:F.pluginId,connectionId:F.connectionId,settings:F.settings,createdAt:F.createdAt instanceof Date?F.createdAt.toISOString():F.createdAt,updatedAt:F.updatedAt instanceof Date?F.updatedAt.toISOString():F.updatedAt}}}})});var pL1=j(()=>{bL1();xL1();uL1();gL1();mL1();lL1();dL1()});var YW0;var cL1=j(()=>{b0();k1();YW0=f0({name:"TAGS_LIST",description:"List all tags in an organization",inputSchema:z.object({}),outputSchema:z.object({tags:z.array(z.object({id:z.string(),organizationId:z.string(),name:z.string(),createdAt:z.string().describe("ISO 8601 timestamp")}))}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=q1(X);return{tags:(await X.storage.tags.listOrgTags(Q.id)).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}))}}})});var XW0;var nL1=j(()=>{b0();k1();XW0=f0({name:"TAGS_CREATE",description:"Create a new tag in an organization",inputSchema:z.object({name:z.string().min(1).max(50).describe("Tag name")}),outputSchema:z.object({tag:z.object({id:z.string(),organizationId:z.string(),name:z.string(),createdAt:z.string().describe("ISO 8601 timestamp")})}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=q1(X),J=await X.storage.tags.createTag(Q.id,Y.name);return{tag:{...J,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():String(J.createdAt)}}}})});var QW0;var iL1=j(()=>{b0();k1();QW0=f0({name:"TAGS_DELETE",description:"Delete a tag from an organization (removes from all members)",inputSchema:z.object({tagId:z.string().describe("Tag ID to delete")}),outputSchema:z.object({success:z.boolean()}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=q1(X),J=await X.storage.tags.getTag(Y.tagId);if(!J)throw Error("Tag not found");if(J.organizationId!==Q.id)throw Error("Tag does not belong to this organization");return await X.storage.tags.deleteTag(Y.tagId),{success:!0}}})});var JW0;var aL1=j(()=>{b0();k1();JW0=f0({name:"MEMBER_TAGS_GET",description:"Get tags assigned to a member",inputSchema:z.object({memberId:z.string().describe("Member ID")}),outputSchema:z.object({tags:z.array(z.object({id:z.string(),organizationId:z.string(),name:z.string(),createdAt:z.string().describe("ISO 8601 timestamp")}))}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=q1(X);if(!await X.storage.tags.verifyMemberOrg(Y.memberId,Q.id))throw Error(`Member not found in this organization: ${Y.memberId}`);return{tags:(await X.storage.tags.getMemberTags(Y.memberId)).map((K)=>({...K,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():String(K.createdAt)}))}}})});var GW0;var rL1=j(()=>{b0();k1();GW0=f0({name:"MEMBER_TAGS_SET",description:"Set tags for a member (replaces all existing tags)",inputSchema:z.object({memberId:z.string().describe("Member ID"),tagIds:z.array(z.string()).describe("Array of tag IDs to assign")}),outputSchema:z.object({success:z.boolean(),tags:z.array(z.object({id:z.string(),organizationId:z.string(),name:z.string(),createdAt:z.string().describe("ISO 8601 timestamp")}))}),handler:async(Y,X)=>{g0(X),await X.access.check();let Q=q1(X);if(!await X.storage.tags.verifyMemberOrg(Y.memberId,Q.id))throw Error(`Member not found in this organization: ${Y.memberId}`);for(let K of Y.tagIds){let W=await X.storage.tags.getTag(K);if(!W)throw Error(`Tag not found: ${K}`);if(W.organizationId!==Q.id)throw Error(`Tag does not belong to this organization: ${K}`)}return await X.storage.tags.setMemberTags(Y.memberId,Y.tagIds),{success:!0,tags:(await X.storage.tags.getMemberTags(Y.memberId)).map((K)=>({...K,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():String(K.createdAt)}))}}})});var oL1=j(()=>{cL1();nL1();iL1();aL1();rL1()});var sL1,AW,tL1,eL1;var Hq=j(()=>{b0();sL1=z.object({id:z.string().describe("Unique message ID"),threadId:z.string().describe("ID of the parent thread"),metadata:z.unknown().optional().describe("Optional message metadata"),parts:z.array(z.record(z.string(),z.unknown())).describe("Message content parts (AI SDK UIMessagePart format)"),role:z.enum(["user","assistant","system"]).describe("Message role"),createdAt:z.string().datetime().describe("Timestamp of creation"),updatedAt:z.string().datetime().describe("Timestamp of last update")}),AW=z.object({id:z.string().describe("Unique thread ID"),organizationId:z.string().describe("Organization this thread belongs to"),title:z.string().describe("Thread title"),description:z.string().nullable().describe("Thread description"),createdAt:z.string().datetime().describe("Timestamp of creation"),updatedAt:z.string().datetime().describe("Timestamp of last update"),hidden:z.boolean().optional().describe("Whether the thread is hidden"),createdBy:z.string().describe("User ID who created the thread"),updatedBy:z.string().nullable().describe("User ID who last updated the thread")}),tL1=z.object({id:z.string().optional().describe("Optional custom ID for the thread"),title:z.string().describe("Thread title"),description:z.string().nullish().describe("Thread description")}),eL1=z.object({title:z.string().optional().describe("New thread title"),description:z.string().nullish().describe("New thread description"),hidden:z.boolean().optional().describe("Whether the thread is hidden")})});var z54,B54,WW0;var Yw1=j(()=>{b0();k1();Hq();v5();z54=z.object({data:tL1.describe("Data for the new thread (id is auto-generated if not provided)")}),B54=z.object({item:AW.describe("The created thread entity")}),WW0=f0({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread in the organization",inputSchema:z54,outputSchema:B54,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=g8(X);if(!J)throw Error("User ID required to create thread");let G=Y.data.id??y4("thrd"),K=await X.storage.threads.create({id:G,organizationId:Q.id,title:Y.data.title,description:Y.data.description,createdBy:J});return{item:{...K,hidden:K.hidden??!1}}}})});var U54,D54,ZW0;var Xw1=j(()=>{_5();k1();Hq();b0();U54=KK.extend({where:z.object({created_by:z.string().optional()}).optional()}),D54=HK(AW),ZW0=f0({name:"COLLECTION_THREADS_LIST",description:"List all threads in the organization with filtering, sorting, and pagination",inputSchema:U54,outputSchema:D54,handler:async(Y,X)=>{await X.access.check();let Q=X.auth.user?.id;if(!Q)throw Error("User ID required to list threads");let J=q1(X),G=Y.offset??0,K=Y.limit??100,{threads:W,total:Z}=await X.storage.threads.list(J.id,Q,{limit:K,offset:G}),H=G+K<Z;return{items:W.map((F)=>({...F,hidden:F.hidden??!1})),totalCount:Z,hasMore:H}}})});var O54,KW0;var Qw1=j(()=>{_5();k1();Hq();O54=A2(AW),KW0=f0({name:"COLLECTION_THREADS_GET",description:"Get thread details by ID",inputSchema:M2,outputSchema:O54,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=await X.storage.threads.get(Y.id);if(!J||J.organizationId!==Q.id)return{item:null};return{item:{...J,hidden:J.hidden??!1}}}})});var N54,L54,HW0;var Jw1=j(()=>{b0();k1();Hq();N54=z.object({id:z.string().describe("ID of the thread to update"),data:eL1.describe("Partial thread data to update")}),L54=z.object({item:AW.describe("The updated thread entity")}),HW0=f0({name:"COLLECTION_THREADS_UPDATE",description:"Update an existing thread in the organization",inputSchema:N54,outputSchema:L54,handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=g8(X);if(!J)throw Error("User ID required to update thread");let{id:G,data:K}=Y,W=await X.storage.threads.get(G);if(!W||W.organizationId!==Q.id)throw Error("Thread not found in organization");let Z=await X.storage.threads.update(G,{title:K.title,description:K.description,hidden:K.hidden,updatedBy:J});return{item:{...Z,hidden:Z.hidden??!1}}}})});var FW0;var Gw1=j(()=>{_5();k1();Hq();FW0=f0({name:"COLLECTION_THREADS_DELETE",description:"Delete a thread",inputSchema:P2,outputSchema:T2(AW),handler:async(Y,X)=>{g0(X);let Q=q1(X);await X.access.check();let J=await X.storage.threads.get(Y.id);if(!J)throw Error(`Thread not found: ${Y.id}`);if(J.organizationId!==Q.id)throw Error(`Thread not found: ${Y.id}`);return await X.storage.threads.delete(Y.id),{item:{...J,hidden:J.hidden??!1}}}})});function Ww1(Y){if(!Y)return null;if("field"in Y&&Y.field[0]==="threadId"&&Y.operator==="eq")return String(Y.value);if("conditions"in Y)for(let X of Y.conditions){let Q=Ww1(X);if(Q)return Q}return null}var w54,$W0;var Zw1=j(()=>{_5();k1();Hq();w54=HK(sL1),$W0=f0({name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List all messages for a specific thread",inputSchema:KK,outputSchema:w54,handler:async(Y,X)=>{let Q=q1(X);await X.access.check();let J=Ww1(Y.where);if(!J)throw Error("threadId filter is required in where clause");let G=await X.storage.threads.get(J);if(!G||G.organizationId!==Q.id)return{items:[],totalCount:0,hasMore:!1};let K=Y.offset??0,W=Y.limit??100,{messages:Z,total:H}=await X.storage.threads.listMessages(J,{limit:W,offset:K}),F=K+W<H;return{items:Z,totalCount:H,hasMore:F}}})});var Kw1=j(()=>{Yw1();Xw1();Qw1();Jw1();Gw1();Zw1()});var A54,P54,VW0;var Hw1=j(()=>{b0();k1();A54=z.object({id:z.string().min(1)}),P54=z.object({user:z.object({id:z.string(),name:z.string(),email:z.string(),image:z.string().nullable()}).nullable()}),VW0=f0({name:"USER_GET",description:"Get a user by id (restricted to shared organizations)",inputSchema:A54,outputSchema:P54,handler:async(Y,X)=>{await X.access.check(),g0(X);let Q=g8(X);if(!Q)throw Error("Authentication required");let J=await X.storage.users.findById(Y.id,Q);if(!J)return{user:null};return{user:{id:J.id,name:J.name,email:J.email,image:J.image??null}}}})});var Fw1=j(()=>{Hw1()});var Vw1={};l1(Vw1,{managementMCP:()=>qW0,ALL_TOOLS:()=>$w1});var E54,C54,$w1,qW0=async(Y)=>{let X=null;if(Y.organization)X=(await Y.storage.organizationSettings.get(Y.organization.id))?.enabled_plugins??null;let Q=PD1($w1,X),J=new Ow({name:"mcp-mesh-management",version:"1.0.0"},{capabilities:{tools:{}}});for(let G of Q){let K=G.inputSchema&&typeof G.inputSchema==="object"&&"shape"in G.inputSchema?G.inputSchema:z.object({}),W=G.outputSchema&&typeof G.outputSchema==="object"&&"shape"in G.outputSchema?G.outputSchema:void 0,Z=K.shape,H=W?.shape;J.registerTool(G.name,{description:G.description??"",inputSchema:Z,outputSchema:H},async(F)=>{Y.access.setToolName(G.name);try{let $=await G.execute(F,Y);return{content:[{type:"text",text:JSON.stringify($)}],structuredContent:$}}catch($){return{content:[{type:"text",text:`Error: ${$.message}`}],isError:!0}}})}return J};var zW0=j(()=>{Zu();ka();b0();mD1();kO1();aN1();tN1();HL1();BL1();wL1();PL1();fL1();pL1();oL1();Kw1();Fw1();E54=[f70,h70,b70,x70,u70,m70,l70,d70,p70,c70,n70,bG0,dG0,pG0,q70,z70,B70,A70,T70,E70,C70,I70,R70,j70,S70,k70,v70,sN1,_70,y70,VG0,zG0,BG0,qG0,U70,D70,O70,N70,L70,w70,M70,VW0,yG0,fG0,hG0,WW0,ZW0,KW0,HW0,FW0,$W0,YW0,XW0,QW0,JW0,GW0,i70,a70,r70,o70,s70,t70,e70],C54=TD1(),$w1=[...E54,...C54]});function I54(Y){return[{permissions:{self:["*"]},getTools:async()=>{let{ALL_TOOLS:X}=await Promise.resolve().then(() => (zW0(),Vw1));return X.map((Q)=>{return{name:Q.name,inputSchema:z.toJSONSchema(Q.inputSchema,{unrepresentable:"any"}),outputSchema:Q.outputSchema?z.toJSONSchema(Q.outputSchema,{unrepresentable:"any"}):void 0,description:Q.description}})},data:Da(LJ(),Y)},{data:Ua()},{data:Ba(Y)}]}async function qw1(Y,X){try{let Q=aV(),J=new rV(process.env.ENCRYPTION_KEY||""),G=new Q2(Q.db,J),K=new J2(Q.db),W=I54(Y);try{await K.create({organizationId:Y,slug:x5,name:Iq,description:"Organization administration and settings",enabledPlugins:null,ui:null})}catch(Z){console.warn("Could not create org-admin project (may already exist):",Z)}await Promise.all(W.map(async(Z)=>{let H=null;if(Z.permissions)H=(await fG.api.createApiKey({body:{name:`${Z.data.app_name??crypto.randomUUID()}-mcp`,userId:X,permissions:Z.permissions,rateLimitEnabled:!1,metadata:{organization:{id:Y},purpose:"default-org-connections"}}}))?.key;let F=await Z.getTools?.()??await QO({id:"pending",title:Z.data.title,connection_type:Z.data.connection_type,connection_url:Z.data.connection_url,connection_token:Z.data.connection_token,connection_headers:Z.data.connection_headers}).catch(()=>null),$=Z.data.id?Z.data.id.startsWith(`${Y}_`)?Z.data.id:`${Y}_${Z.data.id}`:void 0;await G.create({...Z.data,id:$,tools:F,organization_id:Y,created_by:X,connection_token:Z.data.connection_token??H})}))}catch(Q){console.error("Error creating default MCP connections:",Q)}}var zw1=j(()=>{RY();Y2();ox();k50();v50();Qu();b0();qO()});var BW0,ku;var vu=j(()=>{BW0=["owner","admin","user"],ku=["owner","admin"]});var R54=(Y)=>{return{defaultSSO:[{domain:Y.domain,providerId:Y.providerId,oidcConfig:{issuer:`https://login.microsoftonline.com/${Y.MS_TENANT_ID}/v2.0`,pkce:!0,clientId:Y.MS_CLIENT_ID,clientSecret:Y.MS_CLIENT_SECRET,discoveryEndpoint:`https://login.microsoftonline.com/${Y.MS_TENANT_ID}/v2.0/.well-known/openid-configuration`,authorizationEndpoint:`https://login.microsoftonline.com/${Y.MS_TENANT_ID}/oauth2/v2.0/authorize`,tokenEndpoint:`https://login.microsoftonline.com/${Y.MS_TENANT_ID}/oauth2/v2.0/token`,jwksEndpoint:`https://login.microsoftonline.com/${Y.MS_TENANT_ID}/discovery/v2.0/keys`,userInfoEndpoint:"https://graph.microsoft.com/oidc/userinfo",tokenEndpointAuthentication:"client_secret_post",scopes:Y.scopes,mapping:{id:"sub",email:"email",emailVerified:"email_verified",name:"name",image:"picture",extraFields:{emailVerified:"email_verified"}}}}]}},Bw1=(Y)=>{if(Y.providerId==="microsoft")return R54(Y);throw Error(`Unsupported provider: ${Y.providerId}`)};function j54(Y){return Y.toLowerCase().trim().replace(/[^a-z0-9\s_-]+/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function S54(){let Y=Math.floor(Math.random()*Dw1.length),X=Math.floor(Math.random()*Uw1.length),Q=Dw1[Y]??"deco",J=Uw1[X]??"studio";return`${Q}-${J}`}var Uw1,Dw1,k54,v54,_u,_54,y54,f54,Ow1,O9,Nw1=void 0,h54,b54,x54,fG;var qO=j(()=>{$o();oI0();hj0();te();M10();RS0();bA();fS0();Y2();S50();CB1();zw1();vu();Uw1=["labs","agent","studio","workspace","systems","core","cloud","works"],Dw1=["capybara","guarana","deco","samba","feijoada","capoeira","carnival"];k54=Object.values(rw()).map((Y)=>Y.map((X)=>X.name)).flat(),v54={...Sy,self:["*",...k54]},_u=a7(v54),_54=_u.newRole({self:["*"],...IA.statements}),y54=_u.newRole({self:["*"],...IA.statements}),f54=_u.newRole({self:["*"],...IA.statements}),Ow1=Object.values(rw()).map((Y)=>Y.map((X)=>`self:${X.name}`)).flat(),O9=hA.auth;if(O9.inviteEmailProviderId&&O9.emailProviders&&O9.emailProviders.length>0){let Y=rx(O9.emailProviders,O9.inviteEmailProviderId);if(Y){let X=ax(Y);Nw1=async(Q)=>{let J=Q.inviter.user?.name||Q.inviter.user?.email,G=`${LJ()}/auth/accept-invitation?invitationId=${Q.invitation.id}&redirectTo=/`;await X({to:Q.email,subject:`Invitation to join ${Q.organization.name}`,html:`
|
|
1192
1192
|
<h2>You've been invited!</h2>
|
package/dist/server/migrate.js
CHANGED
|
@@ -1185,7 +1185,7 @@ ${X.stack}`;return G}}catch{}if(typeof X.toString==="function")try{let G=X.toStr
|
|
|
1185
1185
|
const args = ${JSON.stringify(X)};
|
|
1186
1186
|
return await __virtualToolFn(tools, args);
|
|
1187
1187
|
};
|
|
1188
|
-
`,F=await BA({code:H,tools:W,timeoutMs:30000});if(F.error)return{content:[{type:"text",text:`Virtual tool error: ${F.error}`}],isError:!0};return{content:[{type:"text",text:JSON.stringify(F.returnValue??null)}]}}catch(Z){return{content:[{type:"text",text:`Virtual tool execution failed: ${Z instanceof Error?Z.message:String(Z)}`}],isError:!0}}}async listResources(){return{resources:(await this._cachedResources).data}}async readResource(Y){let[X,J]=await Promise.all([this._cachedResources,this._clients]),Q=X.mappings.get(Y.uri);if(!Q)throw Error(`Resource not found: ${Y.uri}`);let G=J.get(Q);if(!G)throw Error(`Connection not found for resource: ${Y.uri}`);return await G.readResource(Y)}async listPrompts(){return{prompts:(await this._cachedPrompts).data}}async getPrompt(Y){let[X,J]=await Promise.all([this._cachedPrompts,this._clients]),Q=X.mappings.get(Y.name);if(!Q)throw Error(`Prompt not found: ${Y.name}`);let G=J.get(Q);if(!G)throw Error(`Connection not found for prompt: ${Y.name}`);return await G.getPrompt(Y)}async callStreamableTool(Y,X){let[J,Q]=await Promise.all([this._cachedTools,this._clients]),G=J.mappings.get(Y);if(G){let W=Q.get(G);if(W&&"callStreamableTool"in W)return W.callStreamableTool(Y,X)}let K=await this.callTool({name:Y,arguments:X});return new Response(JSON.stringify(K),{headers:{"Content-Type":"application/json"}})}async[Symbol.asyncDispose](){let Y=await this._clients;if(Y)await Fz6(Y)}async close(){let Y=await this._clients;if(Y)await Fz6(Y);await super.close()}getInstructions(){return this.options.virtualMcp.metadata?.instructions??void 0}}});var qz6,Ao4,Vz6,To4,mA;var NJ0=j(()=>{_0();fq();DJ0();qz6=N.object({query:N.string().min(1).describe("Search query to find tools by name or description"),limit:N.number().default(10).describe("Maximum number of results to return")}),Ao4=N.toJSONSchema(qz6),Vz6=N.object({tools:N.array(N.string()).min(1).describe("Array of tool names to get detailed schemas for")}),To4=N.toJSONSchema(Vz6);mA=class mA extends SU{constructor(Y,X){super(Y,X)}getSearchTool(Y){return{name:"GATEWAY_SEARCH_TOOLS",description:`Search for available tools by name or description. Returns tool names and brief descriptions without full schemas. Use this to discover tools before calling GATEWAY_DESCRIBE_TOOLS for detailed schemas. Total tools: ${Y}.`,inputSchema:Ao4}}getDescribeTool(){return{name:"GATEWAY_DESCRIBE_TOOLS",description:"Get detailed schemas for specific tools. Call after GATEWAY_SEARCH_TOOLS to get full input/output schemas.",inputSchema:To4}}async handleSearch(Y){let X=qz6.safeParse(Y);if(!X.success)return CK({error:X.error.flatten()});let J=await this._cachedTools,Q=WZ(J.data),G=Rh(X.data.query,Q,X.data.limit);return UA({query:X.data.query,results:G.map((K)=>({name:K.name,description:K.description,connection:K._meta.connectionTitle})),totalAvailable:Q.length})}async handleDescribe(Y){let X=Vz6.safeParse(Y);if(!X.success)return CK({error:X.error.flatten()});let J=await this._cachedTools,Q=WZ(J.data),G=Sh(X.data.tools,Q);return UA({tools:G.tools,notFound:G.notFound})}async listTools(){let Y=await this._cachedTools,X=WZ(Y.data);return{tools:[this.getSearchTool(X.length),this.getDescribeTool()]}}async callTool(Y){if(Y.name==="GATEWAY_SEARCH_TOOLS")return this.handleSearch(Y.arguments??{});if(Y.name==="GATEWAY_DESCRIBE_TOOLS")return this.handleDescribe(Y.arguments??{});return{content:[{type:"text",text:`Unknown tool: ${Y.name}. Available: GATEWAY_SEARCH_TOOLS, GATEWAY_DESCRIBE_TOOLS`}],isError:!0}}async routeToolCall(Y){return SU.prototype.callTool.call(this,Y)}}});var $z6,Eo4,LJ0;var zz6=j(()=>{_0();fq();NJ0();$z6=N.object({code:N.string().min(1).describe("JavaScript code to execute. It runs as an async function body; you can use top-level `return` and `await`."),timeoutMs:N.number().default(3000).describe("Max execution time in milliseconds (default: 3000).")}),Eo4=N.toJSONSchema($z6);LJ0=class LJ0 extends mA{constructor(Y,X){super(Y,X)}getRunCodeTool(){return{name:"GATEWAY_RUN_CODE",description:'Run JavaScript code in a sandbox. Code must be an ES module that `export default`s an async function that receives (tools) as its first parameter. Use GATEWAY_DESCRIBE_TOOLS to understand the input/output schemas for a tool before calling it. Use `await tools.toolName(args)` or `await tools["tool-name"](args)` to call tools.',inputSchema:Eo4}}async handleRunCode(Y){let X=$z6.safeParse(Y);if(!X.success)return CK({error:X.error.flatten()});let J=await this._cachedTools,G={tools:WZ(J.data),callTool:async(W,Z)=>{return this.routeToolCall({name:W,arguments:Z})}},K=await jh(X.data.code,G,X.data.timeoutMs);if(K.error)return CK(K);return UA(K)}async listTools(){return{tools:[...(await super.listTools()).tools,this.getRunCodeTool()]}}async callTool(Y){if(Y.name==="GATEWAY_RUN_CODE")return this.handleRunCode(Y.arguments??{});return super.callTool(Y)}}});function Uz6(Y){let X=Y.slice().sort().join(","),J=Bz6.get(X);if(!J){let Q=N.object({name:(Y.length>0?N.enum(Y):N.string()).describe("The name of the tool to execute"),arguments:N.record(N.string(),N.unknown()).default({}).describe("Arguments to pass to the tool")});J={schema:Q,jsonSchema:N.toJSONSchema(Q)},Bz6.set(X,J)}return J}var Bz6,wJ0;var Dz6=j(()=>{_0();fq();NJ0();Bz6=new Map;wJ0=class wJ0 extends mA{constructor(Y,X){super(Y,X)}async getCallTool(){let Y=await this._cachedTools,J=WZ(Y.data).map((G)=>G.name),{jsonSchema:Q}=Uz6(J);return{name:"GATEWAY_CALL_TOOL",description:"Execute a tool by name. Use GATEWAY_DESCRIBE_TOOLS first to understand the input schema.",inputSchema:Q}}async handleCallTool(Y){let X=await this._cachedTools,J=WZ(X.data),Q=J.map((F)=>F.name),{schema:G}=Uz6(Q),K=G.safeParse(Y);if(!K.success)return CK({error:K.error.flatten()});let{name:W,arguments:Z}=K.data;if(!new Map(J.map((F)=>[F.name,F])).has(W))return{content:[{type:"text",text:`Tool not found: ${W}. Use GATEWAY_SEARCH_TOOLS to find available tools.`}],isError:!0};return this.routeToolCall({name:W,arguments:Z})}async listTools(){let Y=await super.listTools(),X=await this.getCallTool();return{tools:[...Y.tools,X]}}async callTool(Y){if(Y.name==="GATEWAY_CALL_TOOL")return this.handleCallTool(Y.arguments??{});return super.callTool(Y)}}});function Co4(Y,X){if(Y.connection_type!=="VIRTUAL")return!1;if(!X||Y$(X))return!1;return Y.id===X}async function Oz6(Y,X){let J=Y.id,Q=await X.storage.virtualMcps.findById(J);if(!Q)throw Error(`Virtual MCP not found: ${J}`);return Io4(Q,X,"passthrough")}async function Io4(Y,X,J){let G=Y.connections.map((q)=>q.connection_id).map((q)=>X.storage.connections.findById(q)),K=Y.id?await X.storage.connections.findById(Y.id):null,W=await Promise.all(G),Z=[];if(K?.tools){for(let q of K.tools)if(Zz6(q))Z.push(q)}let F={connections:W.filter((q)=>q!==null&&q.status==="active"&&!Co4(q,Y.id)),virtualMcp:Y,virtualTools:Z.length>0?Z:void 0};return J==="smart_tool_selection"?new wJ0(F,X):J==="code_execution"?new LJ0(F,X):new SU(F,X)}var Nz6=j(()=>{KQ();RK();zz6();DJ0();Dz6()});async function jU(Y,X,J=!1){if(Y.connection_type==="VIRTUAL")return Oz6(Y,X);return Jz6(Y,X,J)}var MJ0=j(()=>{Qz6();Nz6()});var Lz6=j(()=>{KQ();JY();MJ0();UJ0()});var wz6=j(()=>{qJ0();$J0();Vv();zJ0()});var Mz6=j(()=>{wz6()});var OJ0=j(()=>{MJ0();Lz6();Mz6()});async function jo4(Y,X,J,Q){for(let K of X){if(K==="*")continue;let[W]=x$6(K),Z=uh(W,Y);if(Z===void 0||Z===null)throw Error(`Scope references key "${W}" but it's not present in state`)}let G=u$6(Y,X);for(let K of G){if(K.endsWith("_self"))continue;let W=await Q.storage.connections.findById(K);if(!W||W.organization_id!==J)throw Error(`Referenced connection not found: ${K}`);try{await Q.access.check(K)}catch(Z){throw Error(`Access denied to referenced connection: ${K}. ${Z.message}`)}}}var Ro4,So4,PJ0;var Pz6=j(()=>{HJ0();OJ0();FJ0();_0();C6();wh();XZ();Ro4=N.object({id:N.string().describe("ID of the connection to update"),data:UN.describe("Partial connection data to update")}),So4=N.object({item:ZX.describe("The updated connection entity")});PJ0=R0({name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update an existing MCP connection in the organization",inputSchema:Ro4,outputSchema:So4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=T8(X);if(!Q)throw Error("User ID required to update connection");let{id:G,data:K}=Y,W=await X.storage.connections.findById(G);if(!W||W.organization_id!==J.id)throw Error("Connection not found in organization");let Z=K.connection_type??W.connection_type,H=K.connection_url??W.connection_url;if(Z==="VIRTUAL"){let L=wH(H);if(!L)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let w=await X.storage.virtualMcps.findById(L);if(!w)throw Error(`Virtual MCP not found: ${L}`);if(w.organization_id!==J.id)throw Error("Virtual MCP does not belong to the current organization");H=MH(L)}let F=K.configuration_state??W.configuration_state??{},q=K.configuration_scopes??W.configuration_scopes??[];if(K.configuration_state!==void 0||K.configuration_scopes!==void 0){if(K.configuration_state!==void 0)F=K.configuration_state??{};else if(F===null||F===void 0)F={};if(K.configuration_scopes!==void 0)q=K.configuration_scopes??[];if(q.length>0)await jo4(F,q,J.id,X)}let V=K.connection_token??W.connection_token;if(!V)try{let w=await new bA(X.db,X.vault).get(G);if(w?.accessToken)V=w.accessToken}catch{}let $=await OU({id:W.id,title:K.title??W.title,connection_type:Z,connection_url:H,connection_token:V,connection_headers:K.connection_headers??W.connection_headers}).catch(()=>null),B=$?.length?$:null,U={...K,connection_url:H,tools:B,configuration_state:F,configuration_scopes:q,updated_by:Q},D=await X.storage.connections.update(G,U);if((K.configuration_state!==void 0||K.configuration_scopes!==void 0)&&F&&q)try{await(await jU(D,X,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:F,scopes:q}})}catch(L){console.error("Failed to invoke ON_MCP_CONFIGURATION callback",L)}return{item:D}}})});var AJ0;var Az6=j(()=>{X5();C6();XZ();AJ0=R0({name:"COLLECTION_CONNECTIONS_DELETE",description:"Delete a connection",inputSchema:wA,outputSchema:MA(ZX),handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=await X.storage.connections.findById(Y.id);if(!Q)throw Error(`Connection not found: ${Y.id}`);if(Q.organization_id!==J.id)throw Error("Connection not found in organization");if(Q.metadata?.isFixed===!0)throw Error("This connection is a fixed system connection and cannot be deleted");return await X.storage.connections.delete(Y.id),{item:Q}}})});var TJ0;var Tz6=j(()=>{_0();C6();TJ0=R0({name:"CONNECTION_TEST",description:"Test connection health and latency",inputSchema:N.object({id:N.string()}),outputSchema:N.object({id:N.string(),healthy:N.boolean(),latencyMs:N.number()}),handler:async(Y,X)=>{let J=F6(X);await X.access.check();let Q=await X.storage.connections.findById(Y.id);if(!Q||Q.organization_id!==J.id)throw Error("Connection not found");let G=await X.storage.connections.testConnection(Y.id);return{id:Y.id,...G}}})});var Ez6=j(()=>{G$6();h$6();b$6();Pz6();Az6();Tz6()});import{sql as s4}from"kysely";function Cz6(Y){if(Y===null||Y===void 0)return"NULL";if(typeof Y==="number")return String(Y);if(typeof Y==="boolean")return Y?"TRUE":"FALSE";if(typeof Y==="string")return`'${Y.replace(/'/g,"''")}'`;if(Y instanceof Date)return`'${Y.toISOString()}'`;return`'${JSON.stringify(Y).replace(/'/g,"''")}'`}function _o4(Y,X){let J=Y;for(let G=X.length;G>=1;G--){let K=`$${G}`;if(J.includes(K))J=J.replaceAll(K,Cz6(X[G-1]))}let Q=[];for(let G=0;G<J.length;G++)if(J[G]==="?")Q.push(G);for(let G=Math.min(Q.length,X.length)-1;G>=0;G--){let K=Q[G],W=Cz6(X[G]);J=J.slice(0,K)+W+J.slice(K+1)}return J}function Iz6(Y){return Y.replace(/-/g,"_")}function fo4(Y){return`app_${Iz6(Y)}`}function ho4(Y){return`app_role_${Iz6(Y)}`}function bo4(Y){if(Y instanceof Error){let X=Y.message.toLowerCase(),J=Y.code;return J==="3F000"||J==="42704"||J==="22023"||X.includes("schema")&&X.includes("does not exist")||X.includes("role")&&X.includes("does not exist")}return!1}async function xo4(Y,X,J){if(await s4`CREATE SCHEMA IF NOT EXISTS ${s4.id(X)}`.execute(Y),!(await s4`
|
|
1188
|
+
`,F=await BA({code:H,tools:W,timeoutMs:30000});if(F.error)return{content:[{type:"text",text:`Virtual tool error: ${F.error}`}],isError:!0};return{content:[{type:"text",text:JSON.stringify(F.returnValue??null)}]}}catch(Z){return{content:[{type:"text",text:`Virtual tool execution failed: ${Z instanceof Error?Z.message:String(Z)}`}],isError:!0}}}async listResources(){return{resources:(await this._cachedResources).data}}async readResource(Y){let[X,J]=await Promise.all([this._cachedResources,this._clients]),Q=X.mappings.get(Y.uri);if(!Q)throw Error(`Resource not found: ${Y.uri}`);let G=J.get(Q);if(!G)throw Error(`Connection not found for resource: ${Y.uri}`);return await G.readResource(Y)}async listPrompts(){return{prompts:(await this._cachedPrompts).data}}async getPrompt(Y){let[X,J]=await Promise.all([this._cachedPrompts,this._clients]),Q=X.mappings.get(Y.name);if(!Q)throw Error(`Prompt not found: ${Y.name}`);let G=J.get(Q);if(!G)throw Error(`Connection not found for prompt: ${Y.name}`);return await G.getPrompt(Y)}async callStreamableTool(Y,X){let[J,Q]=await Promise.all([this._cachedTools,this._clients]),G=J.mappings.get(Y);if(G){let W=Q.get(G);if(W&&"callStreamableTool"in W)return W.callStreamableTool(Y,X)}let K=await this.callTool({name:Y,arguments:X});return new Response(JSON.stringify(K),{headers:{"Content-Type":"application/json"}})}async[Symbol.asyncDispose](){let Y=await this._clients;if(Y)await Fz6(Y)}async close(){let Y=await this._clients;if(Y)await Fz6(Y);await super.close()}getInstructions(){return this.options.virtualMcp.metadata?.instructions??void 0}}});var qz6,Ao4,Vz6,To4,mA;var NJ0=j(()=>{_0();fq();DJ0();qz6=N.object({query:N.string().min(1).describe("Search query to find tools by name or description"),limit:N.number().default(10).describe("Maximum number of results to return")}),Ao4=N.toJSONSchema(qz6),Vz6=N.object({tools:N.array(N.string()).min(1).describe("Array of tool names to get detailed schemas for")}),To4=N.toJSONSchema(Vz6);mA=class mA extends SU{constructor(Y,X){super(Y,X)}getSearchTool(Y){return{name:"GATEWAY_SEARCH_TOOLS",description:`Search for available tools by name or description. Returns tool names and brief descriptions without full schemas. Use this to discover tools before calling GATEWAY_DESCRIBE_TOOLS for detailed schemas. Total tools: ${Y}.`,inputSchema:Ao4}}getDescribeTool(){return{name:"GATEWAY_DESCRIBE_TOOLS",description:"Get detailed schemas for specific tools. Call after GATEWAY_SEARCH_TOOLS to get full input/output schemas.",inputSchema:To4}}async handleSearch(Y){let X=qz6.safeParse(Y);if(!X.success)return CK({error:X.error.flatten()});let J=await this._cachedTools,Q=WZ(J.data),G=Rh(X.data.query,Q,X.data.limit);return UA({query:X.data.query,results:G.map((K)=>({name:K.name,description:K.description,connection:K._meta.connectionTitle})),totalAvailable:Q.length})}async handleDescribe(Y){let X=Vz6.safeParse(Y);if(!X.success)return CK({error:X.error.flatten()});let J=await this._cachedTools,Q=WZ(J.data),G=Sh(X.data.tools,Q);return UA({tools:G.tools,notFound:G.notFound})}async listTools(){let Y=await this._cachedTools,X=WZ(Y.data);return{tools:[this.getSearchTool(X.length),this.getDescribeTool()]}}async callTool(Y){if(Y.name==="GATEWAY_SEARCH_TOOLS")return this.handleSearch(Y.arguments??{});if(Y.name==="GATEWAY_DESCRIBE_TOOLS")return this.handleDescribe(Y.arguments??{});return{content:[{type:"text",text:`Unknown tool: ${Y.name}. Available: GATEWAY_SEARCH_TOOLS, GATEWAY_DESCRIBE_TOOLS`}],isError:!0}}async routeToolCall(Y){return SU.prototype.callTool.call(this,Y)}}});var $z6,Eo4,LJ0;var zz6=j(()=>{_0();fq();NJ0();$z6=N.object({code:N.string().min(1).describe("JavaScript code to execute. It runs as an async function body; you can use top-level `return` and `await`."),timeoutMs:N.number().default(3000).describe("Max execution time in milliseconds (default: 3000).")}),Eo4=N.toJSONSchema($z6);LJ0=class LJ0 extends mA{constructor(Y,X){super(Y,X)}getRunCodeTool(){return{name:"GATEWAY_RUN_CODE",description:'Run JavaScript code in a sandbox. Code must be an ES module that `export default`s an async function that receives (tools) as its first parameter. Use GATEWAY_DESCRIBE_TOOLS to understand the input/output schemas for a tool before calling it. Use `await tools.toolName(args)` or `await tools["tool-name"](args)` to call tools.',inputSchema:Eo4}}async handleRunCode(Y){let X=$z6.safeParse(Y);if(!X.success)return CK({error:X.error.flatten()});let J=await this._cachedTools,G={tools:WZ(J.data),callTool:async(W,Z)=>{return this.routeToolCall({name:W,arguments:Z})}},K=await jh(X.data.code,G,X.data.timeoutMs);if(K.error)return CK(K);return UA(K)}async listTools(){return{tools:[...(await super.listTools()).tools,this.getRunCodeTool()]}}async callTool(Y){if(Y.name==="GATEWAY_RUN_CODE")return this.handleRunCode(Y.arguments??{});return super.callTool(Y)}}});function Uz6(Y){let X=Y.slice().sort().join(","),J=Bz6.get(X);if(!J){let Q=N.object({name:(Y.length>0?N.enum(Y):N.string()).describe("The name of the tool to execute"),arguments:N.record(N.string(),N.unknown()).default({}).describe("Arguments to pass to the tool")});J={schema:Q,jsonSchema:N.toJSONSchema(Q)},Bz6.set(X,J)}return J}var Bz6,wJ0;var Dz6=j(()=>{_0();fq();NJ0();Bz6=new Map;wJ0=class wJ0 extends mA{constructor(Y,X){super(Y,X)}async getCallTool(){let Y=await this._cachedTools,J=WZ(Y.data).map((G)=>G.name),{jsonSchema:Q}=Uz6(J);return{name:"GATEWAY_CALL_TOOL",description:"Execute a tool by name. Use GATEWAY_DESCRIBE_TOOLS first to understand the input schema.",inputSchema:Q}}async handleCallTool(Y){let X=await this._cachedTools,J=WZ(X.data),Q=J.map((F)=>F.name),{schema:G}=Uz6(Q),K=G.safeParse(Y);if(!K.success)return CK({error:K.error.flatten()});let{name:W,arguments:Z}=K.data;if(!new Map(J.map((F)=>[F.name,F])).has(W))return{content:[{type:"text",text:`Tool not found: ${W}. Use GATEWAY_SEARCH_TOOLS to find available tools.`}],isError:!0};return this.routeToolCall({name:W,arguments:Z})}async listTools(){let Y=await super.listTools(),X=await this.getCallTool();return{tools:[...Y.tools,X]}}async callTool(Y){if(Y.name==="GATEWAY_CALL_TOOL")return this.handleCallTool(Y.arguments??{});return super.callTool(Y)}}});function Co4(Y,X){if(Y.connection_type!=="VIRTUAL")return!1;if(!X||Y$(X))return!1;return Y.id===X}async function Oz6(Y,X){let J=Y.id,Q=await X.storage.virtualMcps.findById(J);if(!Q)throw Error(`Virtual MCP not found: ${J}`);return Io4(Q,X,"passthrough")}async function Io4(Y,X,J){let G=Y.connections.map((q)=>q.connection_id).map((q)=>X.storage.connections.findById(q)),K=Y.id?await X.storage.connections.findById(Y.id):null,W=await Promise.all(G),Z=[];if(K?.tools){for(let q of K.tools)if(Zz6(q))Z.push(q)}let F={connections:W.filter((q)=>q!==null&&q.status==="active"&&!Co4(q,Y.id)),virtualMcp:Y,virtualTools:Z.length>0?Z:void 0};return J==="smart_tool_selection"?new wJ0(F,X):J==="code_execution"?new LJ0(F,X):new SU(F,X)}var Nz6=j(()=>{KQ();RK();zz6();DJ0();Dz6()});async function jU(Y,X,J=!1){if(Y.connection_type==="VIRTUAL")return Oz6(Y,X);return Jz6(Y,X,J)}var MJ0=j(()=>{Qz6();Nz6()});var Lz6=j(()=>{KQ();JY();MJ0();UJ0()});var wz6=j(()=>{qJ0();$J0();Vv();zJ0()});var Mz6=j(()=>{wz6()});var OJ0=j(()=>{MJ0();Lz6();Mz6()});async function jo4(Y,X,J,Q){for(let K of X){if(K==="*")continue;let[W]=x$6(K),Z=uh(W,Y);if(Z===void 0||Z===null)throw Error(`Scope references key "${W}" but it's not present in state`)}let G=u$6(Y,X);for(let K of G){if(K.endsWith("_self"))continue;let W=await Q.storage.connections.findById(K);if(!W||W.organization_id!==J)throw Error(`Referenced connection not found: ${K}`);try{await Q.access.check(K)}catch(Z){throw Error(`Access denied to referenced connection: ${K}. ${Z.message}`)}}}var Ro4,So4,PJ0;var Pz6=j(()=>{HJ0();OJ0();FJ0();_0();C6();wh();XZ();Ro4=N.object({id:N.string().describe("ID of the connection to update"),data:UN.describe("Partial connection data to update")}),So4=N.object({item:ZX.describe("The updated connection entity")});PJ0=R0({name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update an existing MCP connection in the organization",inputSchema:Ro4,outputSchema:So4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=T8(X);if(!Q)throw Error("User ID required to update connection");let{id:G,data:K}=Y,W=await X.storage.connections.findById(G);if(!W||W.organization_id!==J.id)throw Error("Connection not found in organization");let Z=K.connection_type??W.connection_type,H=K.connection_url??W.connection_url;if(Z==="VIRTUAL"){let L=wH(H);if(!L)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let w=await X.storage.virtualMcps.findById(L);if(!w)throw Error(`Virtual MCP not found: ${L}`);if(w.organization_id!==J.id)throw Error("Virtual MCP does not belong to the current organization");H=MH(L)}let F=K.configuration_state??W.configuration_state??{},q=K.configuration_scopes??W.configuration_scopes??[];if(K.configuration_state!==void 0||K.configuration_scopes!==void 0){if(K.configuration_state!==void 0)F=K.configuration_state??{};else if(F===null||F===void 0)F={};if(K.configuration_scopes!==void 0)q=K.configuration_scopes??[];if(q.length>0)await jo4(F,q,J.id,X)}let V=K.connection_token??W.connection_token;if(!V)try{let w=await new bA(X.db,X.vault).get(G);if(w?.accessToken)V=w.accessToken}catch{}let $=await OU({id:W.id,title:K.title??W.title,connection_type:Z,connection_url:H,connection_token:V,connection_headers:K.connection_headers??W.connection_headers}).catch(()=>null),B=$?.length?$:null,U={...K,connection_url:H,tools:B,configuration_state:F,configuration_scopes:q,updated_by:Q},D=await X.storage.connections.update(G,U);if((K.configuration_state!==void 0||K.configuration_scopes!==void 0)&&F&&q)try{await(await jU(D,X,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:F,scopes:q}})}catch(L){console.error("Failed to invoke ON_MCP_CONFIGURATION callback",L)}return{item:D}}})});var AJ0;var Az6=j(()=>{X5();C6();XZ();AJ0=R0({name:"COLLECTION_CONNECTIONS_DELETE",description:"Delete a connection",inputSchema:wA,outputSchema:MA(ZX),handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=await X.storage.connections.findById(Y.id);if(!Q)throw Error(`Connection not found: ${Y.id}`);if(Q.organization_id!==J.id)throw Error("Connection not found in organization");if(Q.metadata?.isFixed===!0)throw Error("This connection is a fixed system connection and cannot be deleted");let K=await X.storage.virtualMcps.listByConnectionId(J.id,Y.id);if(K.length>0){let W=K.map((Z)=>`"${Z.title}"`).join(", ");throw Error(`Cannot delete this connection because it is used by the following agent(s): ${W}. Remove it from those agents first.`)}return await X.storage.connections.delete(Y.id),{item:Q}}})});var TJ0;var Tz6=j(()=>{_0();C6();TJ0=R0({name:"CONNECTION_TEST",description:"Test connection health and latency",inputSchema:N.object({id:N.string()}),outputSchema:N.object({id:N.string(),healthy:N.boolean(),latencyMs:N.number()}),handler:async(Y,X)=>{let J=F6(X);await X.access.check();let Q=await X.storage.connections.findById(Y.id);if(!Q||Q.organization_id!==J.id)throw Error("Connection not found");let G=await X.storage.connections.testConnection(Y.id);return{id:Y.id,...G}}})});var Ez6=j(()=>{G$6();h$6();b$6();Pz6();Az6();Tz6()});import{sql as s4}from"kysely";function Cz6(Y){if(Y===null||Y===void 0)return"NULL";if(typeof Y==="number")return String(Y);if(typeof Y==="boolean")return Y?"TRUE":"FALSE";if(typeof Y==="string")return`'${Y.replace(/'/g,"''")}'`;if(Y instanceof Date)return`'${Y.toISOString()}'`;return`'${JSON.stringify(Y).replace(/'/g,"''")}'`}function _o4(Y,X){let J=Y;for(let G=X.length;G>=1;G--){let K=`$${G}`;if(J.includes(K))J=J.replaceAll(K,Cz6(X[G-1]))}let Q=[];for(let G=0;G<J.length;G++)if(J[G]==="?")Q.push(G);for(let G=Math.min(Q.length,X.length)-1;G>=0;G--){let K=Q[G],W=Cz6(X[G]);J=J.slice(0,K)+W+J.slice(K+1)}return J}function Iz6(Y){return Y.replace(/-/g,"_")}function fo4(Y){return`app_${Iz6(Y)}`}function ho4(Y){return`app_role_${Iz6(Y)}`}function bo4(Y){if(Y instanceof Error){let X=Y.message.toLowerCase(),J=Y.code;return J==="3F000"||J==="42704"||J==="22023"||X.includes("schema")&&X.includes("does not exist")||X.includes("role")&&X.includes("does not exist")}return!1}async function xo4(Y,X,J){if(await s4`CREATE SCHEMA IF NOT EXISTS ${s4.id(X)}`.execute(Y),!(await s4`
|
|
1189
1189
|
SELECT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = ${J}) as exists
|
|
1190
1190
|
`.execute(Y)).rows[0]?.exists)await s4`CREATE ROLE ${s4.id(J)} NOLOGIN`.execute(Y);await s4`GRANT ${s4.id(J)} TO CURRENT_USER`.execute(Y),await s4`GRANT USAGE, CREATE ON SCHEMA ${s4.id(X)} TO ${s4.id(J)}`.execute(Y),await s4`GRANT ALL ON ALL TABLES IN SCHEMA ${s4.id(X)} TO ${s4.id(J)}`.execute(Y),await s4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${s4.id(X)} TO ${s4.id(J)}`.execute(Y),await s4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${s4.id(X)} GRANT ALL ON TABLES TO ${s4.id(J)}`.execute(Y),await s4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${s4.id(X)} GRANT ALL ON SEQUENCES TO ${s4.id(J)}`.execute(Y),await s4`REVOKE ALL ON SCHEMA public FROM ${s4.id(J)}`.execute(Y)}async function uo4(Y,X,J,Q){try{return await Y.transaction().execute(async(G)=>{return await s4`SET LOCAL ROLE ${s4.id(J)}`.execute(G),await s4`SET LOCAL search_path TO ${s4.id(X)}`.execute(G),await s4.raw(Q).execute(G)})}catch(G){if(bo4(G))return await xo4(Y,X,J),await Y.transaction().execute(async(K)=>{return await s4`SET LOCAL ROLE ${s4.id(J)}`.execute(K),await s4`SET LOCAL search_path TO ${s4.id(X)}`.execute(K),await s4.raw(Q).execute(K)});throw G}}var vo4,yo4,Rz6;var Sz6=j(()=>{_0();C6();vo4=N.object({results:N.array(N.unknown()).optional(),success:N.boolean().optional()});yo4=N.object({sql:N.string().describe("The SQL query to run"),params:N.array(N.any()).describe("The parameters to pass to the SQL query").optional()});Rz6=R0({name:"DATABASES_RUN_SQL",description:"Run a SQL query against the database",inputSchema:yo4,outputSchema:N.object({result:N.array(vo4)}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=_o4(Y.sql,Y.params||[]);if(!X.connectionId)throw Error("Connection context required for database access");let Q=fo4(X.connectionId),G=ho4(X.connectionId);return{result:[{results:(await uo4(X.db,Q,G,J)).rows,success:!0}]}}})});var jz6,mo4,kz6;var FZ=j(()=>{_0();JJ0();jz6=N.object({connectionId:N.string().optional().describe("Filter subscriptions by connection ID (optional)")}),mo4=N.object({id:N.string().describe("Subscription ID"),connectionId:N.string().describe("Subscriber connection ID"),eventType:N.string().describe("Event type pattern"),publisher:N.string().nullable().describe("Publisher connection filter (null = all publishers)"),filter:N.string().nullable().describe("JSONPath filter expression"),enabled:N.boolean().describe("Whether subscription is enabled"),createdAt:N.string().datetime().describe("Created timestamp (ISO 8601)"),updatedAt:N.string().datetime().describe("Updated timestamp (ISO 8601)")}),kz6=N.object({subscriptions:N.array(mo4).describe("List of subscriptions")})});var EJ0;var vz6=j(()=>{C6();FZ();EJ0=R0({name:"EVENT_PUBLISH",description:"Publish an event to the event bus. Supports immediate, scheduled (deliverAt), and recurring (cron) delivery. The source is automatically set to the caller's connection ID.",inputSchema:PA,outputSchema:AA,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=X.connectionId;if(!Q)throw Error("Connection ID required to publish events. Use a connection-scoped token.");let G=await X.eventBus.publish(J.id,Q,{type:Y.type,subject:Y.subject,data:Y.data,deliverAt:Y.deliverAt,cron:Y.cron});return{id:G.id,type:G.type,source:G.source,time:G.time}}})});var CJ0;var _z6=j(()=>{C6();FZ();CJ0=R0({name:"EVENT_SUBSCRIBE",description:"Subscribe to events of a specific type. The subscriber is automatically set to the caller's connection.",inputSchema:TA,outputSchema:EA,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=X.connectionId;if(!Q)throw Error("Connection ID required to subscribe. Use a connection-scoped token.");let G=await X.eventBus.subscribe(J.id,{connectionId:Q,eventType:Y.eventType,publisher:Y.publisher,filter:Y.filter});return{subscription:{id:G.id,connectionId:G.connectionId,eventType:G.eventType,publisher:G.publisher,filter:G.filter,enabled:G.enabled,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt,updatedAt:G.updatedAt instanceof Date?G.updatedAt.toISOString():G.updatedAt}}}})});var IJ0;var yz6=j(()=>{C6();FZ();IJ0=R0({name:"EVENT_UNSUBSCRIBE",description:"Unsubscribe from events by removing a subscription.",inputSchema:RA,outputSchema:SA,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=X.connectionId;if(!Q)throw Error("Connection ID required to unsubscribe. Use a connection-scoped token.");let G=await X.eventBus.getSubscription(J.id,Y.subscriptionId);if(!G)throw Error(`Subscription not found: ${Y.subscriptionId}`);if(G.connectionId!==Q)throw Error("Cannot unsubscribe from a subscription owned by another connection");return{success:(await X.eventBus.unsubscribe(J.id,Y.subscriptionId)).success,subscriptionId:Y.subscriptionId}}})});var RJ0;var fz6=j(()=>{C6();FZ();RJ0=R0({name:"EVENT_CANCEL",description:"Cancel a recurring event to stop future deliveries. Only the publisher can cancel their own events.",inputSchema:jA,outputSchema:kA,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=X.connectionId;if(!Q)throw Error("Connection ID required to cancel events. Use a connection-scoped token.");if(!await X.eventBus.getEvent(J.id,Y.eventId))throw Error(`Event not found: ${Y.eventId}`);if(!(await X.eventBus.cancelEvent(J.id,Y.eventId,Q)).success)throw Error("Failed to cancel event. Either the event is already completed/failed, or you are not the publisher.");return{success:!0,eventId:Y.eventId}}})});var SJ0;var hz6=j(()=>{C6();FZ();SJ0=R0({name:"EVENT_ACK",description:"Acknowledge delivery of an event. Call after successfully processing an event received via ON_EVENTS with retryAfter.",inputSchema:vA,outputSchema:_A,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=X.connectionId;if(!Q)throw Error("Connection ID required to acknowledge events. Use a connection-scoped token.");if(!(await X.eventBus.ackEvent(J.id,Y.eventId,Q)).success)throw Error("Failed to acknowledge event. Either the event was not found, already delivered, or you are not a subscriber.");return{success:!0,eventId:Y.eventId}}})});var jJ0;var bz6=j(()=>{C6();FZ();jJ0=R0({name:"EVENT_SUBSCRIPTION_LIST",description:"List event subscriptions, optionally filtered by connection ID.",inputSchema:jz6,outputSchema:kz6,handler:async(Y,X)=>{f0(X);let J=F6(X);return await X.access.check(),{subscriptions:(await X.eventBus.listSubscriptions(J.id,Y.connectionId)).map((G)=>({id:G.id,connectionId:G.connectionId,eventType:G.eventType,publisher:G.publisher,filter:G.filter,enabled:G.enabled,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt,updatedAt:G.updatedAt instanceof Date?G.updatedAt.toISOString():G.updatedAt}))}}})});var kJ0;var xz6=j(()=>{C6();FZ();kJ0=R0({name:"EVENT_SYNC_SUBSCRIPTIONS",description:"Sync subscriptions to desired state. Creates new, deletes removed, updates changed filters. Subscriptions are identified by (eventType, publisher).",inputSchema:CA,outputSchema:IA,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=X.connectionId;if(!Q)throw Error("Connection ID required to sync subscriptions. Use a connection-scoped token.");let G=await X.eventBus.syncSubscriptions(J.id,{connectionId:Q,subscriptions:Y.subscriptions});return{created:G.created,updated:G.updated,deleted:G.deleted,unchanged:G.unchanged,subscriptions:G.subscriptions.map((K)=>({id:K.id,connectionId:K.connectionId,eventType:K.eventType,publisher:K.publisher,filter:K.filter,enabled:K.enabled,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt,updatedAt:K.updatedAt instanceof Date?K.updatedAt.toISOString():K.updatedAt}))}}})});var uz6=j(()=>{vz6();_z6();yz6();fz6();hz6();bz6();xz6();FZ()});var kU=j(()=>{eI()});var do4,po4,vJ0;var gz6=j(()=>{_0();C6();kU();do4=N.object({data:ON.describe("Data for the new virtual MCP")}),po4=N.object({item:PJ.describe("The created virtual MCP entity")}),vJ0=R0({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a new MCP virtual MCP in the organization",inputSchema:do4,outputSchema:po4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=T8(X);if(!Q)throw Error("User ID required to create virtual MCP");return{item:await X.storage.virtualMcps.create(J.id,Q,Y.data)}}})});function co4(Y){let X=[],J=0;while(J<Y.length){let Q=Y[J];if(Q==="%")X.push(".*");else if(Q==="_")X.push(".");else if(/[.*+?^${}()|[\]\\]/.test(Q))X.push("\\"+Q);else X.push(Q);J++}return X.join("")}function SK(Y){return typeof Y==="string"||typeof Y==="number"}function _J0(Y,X){let J=X.split("."),Q=Y;for(let G of J){if(Q==null||typeof Q!=="object")return;Q=Q[G]}return Q}function no4(Y,X){return Y.connections.some((J)=>J.connection_id===X)}function ph(Y,X){if("conditions"in X){let{operator:Z,conditions:H}=X;switch(Z){case"and":return H.every((F)=>ph(Y,F));case"or":return H.some((F)=>ph(Y,F));case"not":return!H.every((F)=>ph(Y,F));default:return!0}}let{field:J,operator:Q,value:G}=X,K=J.join(".");if(K==="connection_id"){if(Q!=="eq"||typeof G!=="string")return!1;return no4(Y,G)}let W=_J0(Y,K);switch(Q){case"eq":return W===G;case"gt":return SK(W)&&SK(G)&&W>G;case"gte":return SK(W)&&SK(G)&&W>=G;case"lt":return SK(W)&&SK(G)&&W<G;case"lte":return SK(W)&&SK(G)&&W<=G;case"in":return Array.isArray(G)&&G.includes(W);case"like":if(typeof W!=="string"||typeof G!=="string")return!1;if(G.length>100)return!1;let Z=co4(G);return new RegExp(`^${Z}$`,"i").test(W);case"contains":if(typeof W!=="string"||typeof G!=="string")return!1;return W.toLowerCase().includes(G.toLowerCase());default:return!0}}function io4(Y,X){return[...Y].sort((J,Q)=>{for(let G of X){let K=G.field.join("."),W=_J0(J,K),Z=_J0(Q,K),H=0;if(W==null&&Z==null)continue;if(W==null)H=G.nulls==="first"?-1:1;else if(Z==null)H=G.nulls==="first"?1:-1;else if(typeof W==="string"&&typeof Z==="string")H=W.localeCompare(Z);else if(typeof W==="number"&&typeof Z==="number")H=W-Z;else H=String(W).localeCompare(String(Z));if(H!==0)return G.direction==="desc"?-H:H}return 0})}var ao4,ro4,yJ0;var mz6=j(()=>{X5();C6();kU();ao4=ZZ,ro4=KZ(PJ),yJ0=R0({name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List all MCP virtual MCPs in the organization",inputSchema:ao4,outputSchema:ro4,handler:async(Y,X)=>{await X.access.check();let J=F6(X),Q=Y.where&&!("conditions"in Y.where)&&Y.where.field.join(".")==="connection_id"&&Y.where.operator==="eq"&&typeof Y.where.value==="string"?Y.where.value:void 0,K=Q?await X.storage.virtualMcps.listByConnectionId(J.id,Q):await X.storage.virtualMcps.list(J.id);if(Y.where)K=K.filter((V)=>ph(V,Y.where));if(Y.orderBy&&Y.orderBy.length>0)K=io4(K,Y.orderBy);let W=K.length,Z=Y.offset??0,H=Y.limit??100,F=K.slice(Z,Z+H),q=Z+H<W;return{items:F,totalCount:W,hasMore:q}}})});var oo4,so4,fJ0;var lz6=j(()=>{_0();C6();kU();oo4=N.object({id:N.string().describe("ID of the virtual MCP to retrieve")}),so4=N.object({item:PJ.nullable().describe("The retrieved virtual MCP, or null if not found")}),fJ0=R0({name:"COLLECTION_VIRTUAL_MCP_GET",description:"Get an MCP virtual MCP by ID",inputSchema:oo4,outputSchema:so4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=await X.storage.virtualMcps.findById(Y.id);if(Q&&Q.organization_id!==J.id)return{item:null};if(!Q)return{item:null};return{item:Q}}})});var to4,eo4,hJ0;var dz6=j(()=>{_0();C6();kU();to4=N.object({id:N.string().describe("ID of the virtual MCP to update"),data:NN.describe("Partial virtual MCP data to update")}),eo4=N.object({item:PJ.describe("The updated virtual MCP entity")}),hJ0=R0({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update an MCP virtual MCP",inputSchema:to4,outputSchema:eo4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=T8(X);if(!Q)throw Error("User ID required to update virtual MCP");let G=await X.storage.virtualMcps.findById(Y.id);if(!G)throw Error(`Virtual MCP not found: ${Y.id}`);if(G.organization_id!==J.id)throw Error(`Virtual MCP not found: ${Y.id}`);return{item:await X.storage.virtualMcps.update(Y.id,Q,Y.data)}}})});var Ys4,Xs4,bJ0;var pz6=j(()=>{_0();C6();kU();Ys4=N.object({id:N.string().describe("ID of the virtual MCP to delete")}),Xs4=N.object({item:PJ.describe("The deleted virtual MCP entity")}),bJ0=R0({name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Delete an MCP virtual MCP",inputSchema:Ys4,outputSchema:Xs4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=await X.storage.virtualMcps.findById(Y.id);if(!Q)throw Error(`Virtual MCP not found: ${Y.id}`);if(Q.organization_id!==J.id)throw Error(`Virtual MCP not found: ${Y.id}`);return await X.storage.virtualMcps.delete(Y.id),{item:Q}}})});var cz6=j(()=>{gz6();mz6();lz6();dz6();pz6()});var Qs4,Gs4,xJ0;var nz6=j(()=>{_0();C6();RK();Qs4=N.object({virtual_mcp_id:N.string().describe("ID of the Virtual MCP to add the tool to"),data:Gz6.describe("Virtual tool data")}),Gs4=N.object({item:S7.describe("The created virtual tool")}),xJ0=R0({name:"COLLECTION_VIRTUAL_TOOLS_CREATE",description:"Create a new virtual tool on a Virtual MCP. The tool code should be a JavaScript ES module that exports a default async function: export default async (tools, args) => { ... }. Specify connection_dependencies to indicate which connections this tool uses.",inputSchema:Qs4,outputSchema:Gs4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=await X.storage.virtualMcps.findById(Y.virtual_mcp_id);if(!Q||Q.organization_id!==J.id)throw Error(`Virtual MCP not found: ${Y.virtual_mcp_id}`);let G=Y.data.connection_dependencies??[];return{item:await X.storage.virtualMcps.createVirtualTool(Y.virtual_mcp_id,Y.data,G)}}})});var Ws4,Zs4,uJ0;var iz6=j(()=>{_0();C6();RK();Ws4=N.object({virtual_mcp_id:N.string().describe("ID of the Virtual MCP to list tools for"),limit:N.number().int().min(1).max(1000).optional().describe("Maximum number of items to return"),offset:N.number().int().min(0).optional().describe("Number of items to skip")}),Zs4=N.object({items:N.array(S7).describe("Array of virtual tools"),totalCount:N.number().int().min(0).optional().describe("Total number of virtual tools"),hasMore:N.boolean().optional().describe("Whether there are more items available")}),uJ0=R0({name:"COLLECTION_VIRTUAL_TOOLS_LIST",description:"List all virtual tools for a Virtual MCP",inputSchema:Ws4,outputSchema:Zs4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=await X.storage.virtualMcps.findById(Y.virtual_mcp_id);if(!Q||Q.organization_id!==J.id)return{items:[],totalCount:0,hasMore:!1};let G=await X.storage.virtualMcps.listVirtualTools(Y.virtual_mcp_id),K=G.length,W=Y.offset??0,Z=Y.limit??100,H=G.slice(W,W+Z),F=W+Z<K;return{items:H,totalCount:K,hasMore:F}}})});var Ks4,Hs4,gJ0;var az6=j(()=>{_0();C6();RK();Ks4=N.object({virtual_mcp_id:N.string().describe("ID of the Virtual MCP"),name:N.string().describe("Name of the virtual tool to retrieve")}),Hs4=N.object({item:S7.nullable().describe("The retrieved virtual tool, or null if not found")}),gJ0=R0({name:"COLLECTION_VIRTUAL_TOOLS_GET",description:"Get a virtual tool by name from a Virtual MCP",inputSchema:Ks4,outputSchema:Hs4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=await X.storage.virtualMcps.findById(Y.virtual_mcp_id);if(!Q||Q.organization_id!==J.id)return{item:null};return{item:await X.storage.virtualMcps.getVirtualTool(Y.virtual_mcp_id,Y.name)}}})});var Fs4,qs4,mJ0;var rz6=j(()=>{_0();C6();RK();Fs4=N.object({virtual_mcp_id:N.string().describe("ID of the Virtual MCP"),name:N.string().describe("Current name of the virtual tool to update"),data:Wz6.describe("Partial virtual tool data to update")}),qs4=N.object({item:S7.describe("The updated virtual tool")}),mJ0=R0({name:"COLLECTION_VIRTUAL_TOOLS_UPDATE",description:"Update an existing virtual tool on a Virtual MCP. Specify connection_dependencies to update which connections this tool uses.",inputSchema:Fs4,outputSchema:qs4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=await X.storage.virtualMcps.findById(Y.virtual_mcp_id);if(!Q||Q.organization_id!==J.id)throw Error(`Virtual MCP not found: ${Y.virtual_mcp_id}`);if(!await X.storage.virtualMcps.getVirtualTool(Y.virtual_mcp_id,Y.name))throw Error(`Virtual tool not found: ${Y.name}`);let K=Y.data.connection_dependencies;return{item:await X.storage.virtualMcps.updateVirtualTool(Y.virtual_mcp_id,Y.name,Y.data,K)}}})});var Vs4,$s4,lJ0;var oz6=j(()=>{_0();C6();RK();Vs4=N.object({virtual_mcp_id:N.string().describe("ID of the Virtual MCP"),name:N.string().describe("Name of the virtual tool to delete")}),$s4=N.object({item:S7.describe("The deleted virtual tool")}),lJ0=R0({name:"COLLECTION_VIRTUAL_TOOLS_DELETE",description:"Delete a virtual tool from a Virtual MCP",inputSchema:Vs4,outputSchema:$s4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=await X.storage.virtualMcps.findById(Y.virtual_mcp_id);if(!Q||Q.organization_id!==J.id)throw Error(`Virtual MCP not found: ${Y.virtual_mcp_id}`);let G=await X.storage.virtualMcps.getVirtualTool(Y.virtual_mcp_id,Y.name);if(!G)throw Error(`Virtual tool not found: ${Y.name}`);return await X.storage.virtualMcps.deleteVirtualTool(Y.virtual_mcp_id,Y.name),{item:G}}})});var sz6=j(()=>{nz6();iz6();az6();rz6();oz6()});var Bs4,dJ0;var tz6=j(()=>{C6();_0();Bs4=N.object({id:N.string().optional().describe("Unique log identifier"),organizationId:N.string().describe("Organization ID"),connectionId:N.string().describe("Connection ID"),connectionTitle:N.string().describe("Connection display name"),toolName:N.string().describe("Name of the tool that was called"),input:N.record(N.string(),N.unknown()).describe("Redacted tool input"),output:N.record(N.string(),N.unknown()).describe("Redacted tool output"),isError:N.boolean().describe("Whether the call resulted in an error"),errorMessage:N.string().nullish().describe("Error message if applicable"),durationMs:N.number().describe("Call duration in milliseconds"),timestamp:N.string().describe("ISO 8601 timestamp of the call"),userId:N.string().nullish().describe("User who triggered the call"),requestId:N.string().describe("Unique request identifier"),userAgent:N.string().nullish().describe("Client identifier (x-mesh-client header)"),virtualMcpId:N.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:N.record(N.string(),N.string()).nullish().describe("Custom key-value metadata attached to the log")}),dJ0=R0({name:"MONITORING_LOGS_LIST",description:"List monitoring logs for tool calls in the organization",inputSchema:N.object({connectionId:N.string().optional().describe("Filter by connection ID"),excludeConnectionIds:N.array(N.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:N.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:N.string().optional().describe("Filter by tool name"),isError:N.boolean().optional().describe("Filter by error status"),startDate:N.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:N.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:N.number().default(20).describe("Maximum number of results"),offset:N.number().default(0).describe("Offset for pagination"),properties:N.record(N.string(),N.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:N.array(N.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:N.record(N.string(),N.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:N.record(N.string(),N.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:N.object({logs:N.array(Bs4).describe("Array of monitoring logs"),total:N.number().describe("Total number of logs matching filters"),offset:N.number().describe("Current offset for pagination"),limit:N.number().describe("Current limit for pagination")}),handler:async(Y,X)=>{let J=F6(X),G=Y.properties||Y.propertyKeys||Y.propertyPatterns||Y.propertyInValues?{properties:Y.properties,propertyKeys:Y.propertyKeys,propertyPatterns:Y.propertyPatterns,propertyInValues:Y.propertyInValues}:void 0,K={organizationId:J.id,connectionId:Y.connectionId,excludeConnectionIds:Y.excludeConnectionIds,virtualMcpId:Y.virtualMcpId,toolName:Y.toolName,isError:Y.isError,startDate:Y.startDate?new Date(Y.startDate):void 0,endDate:Y.endDate?new Date(Y.endDate):void 0,limit:Y.limit,offset:Y.offset,propertyFilters:G},W=await X.storage.monitoring.query(K);return{logs:W.logs.map((Z)=>({...Z,timestamp:Z.timestamp instanceof Date?Z.timestamp.toISOString():Z.timestamp})),total:W.total,offset:Y.offset,limit:Y.limit}}})});var pJ0;var ez6=j(()=>{C6();_0();pJ0=R0({name:"MONITORING_STATS",description:"Get aggregated statistics for tool call monitoring",inputSchema:N.object({startDate:N.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:N.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:N.object({totalCalls:N.number().describe("Total number of tool calls"),errorRate:N.number().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:N.number().describe("Average call duration in milliseconds"),errorRatePercent:N.string().describe("Error rate as a percentage string")}),handler:async(Y,X)=>{let Q={organizationId:F6(X).id,startDate:Y.startDate?new Date(Y.startDate):void 0,endDate:Y.endDate?new Date(Y.endDate):void 0},G=await X.storage.monitoring.getStats(Q);return{...G,errorRatePercent:(G.errorRate*100).toFixed(2)}}})});var YB6=j(()=>{tz6();ez6()});var cJ0;var XB6=j(()=>{_0();C6();cJ0=R0({name:"ORGANIZATION_CREATE",description:"Create a new organization",inputSchema:N.object({slug:N.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens"),name:N.string().min(1).max(255),description:N.string().optional()}),outputSchema:N.object({id:N.string(),name:N.string(),slug:N.string(),logo:N.string().nullable().optional(),metadata:N.any().optional(),createdAt:N.string().datetime().describe("ISO 8601 timestamp"),members:N.array(N.any()).optional()}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=T8(X);if(!J)throw Error("User ID required to create organization");let Q=await X.boundAuth.organization.create({name:Y.name,slug:Y.slug,metadata:Y.description?{description:Y.description}:void 0,userId:J});if(!Q)throw Error("Failed to create organization");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});var nJ0;var JB6=j(()=>{_0();C6();nJ0=R0({name:"ORGANIZATION_LIST",description:"List all organizations user has access to",inputSchema:N.object({userId:N.string().optional()}),outputSchema:N.object({organizations:N.array(N.object({id:N.string(),name:N.string(),slug:N.string(),logo:N.string().nullable().optional(),metadata:N.any().optional(),createdAt:N.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=T8(X),Q=Y.userId||J;if(!Q)throw Error("User ID required to list organizations");return{organizations:(await X.boundAuth.organization.list(Q)).map((K)=>({...K,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}))}}})});var iJ0;var QB6=j(()=>{_0();C6();iJ0=R0({name:"ORGANIZATION_GET",description:"Get organization details by slug or ID",inputSchema:N.object({}),outputSchema:N.object({id:N.string(),name:N.string(),slug:N.string(),logo:N.string().nullable().optional(),metadata:N.any().optional(),createdAt:N.string().datetime().describe("ISO 8601 timestamp"),members:N.array(N.any()).optional(),invitations:N.array(N.any()).optional()}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=await X.boundAuth.organization.get();if(!J)throw Error("No active organization found");let Q=new Date,G=J.invitations?.filter((K)=>new Date(K.expiresAt)>Q);return{...J,invitations:G,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt}}})});var aJ0;var GB6=j(()=>{_0();C6();aJ0=R0({name:"ORGANIZATION_UPDATE",description:"Update an existing organization",inputSchema:N.object({id:N.string(),slug:N.string().min(1).max(50).regex(/^[a-z0-9-]+$/).optional(),name:N.string().min(1).max(255).optional(),description:N.string().optional()}),outputSchema:N.object({id:N.string(),name:N.string(),slug:N.string(),logo:N.string().nullable().optional(),metadata:N.any().optional(),createdAt:N.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Y,X)=>{f0(X),await X.access.check();let J={};if(Y.name)J.name=Y.name;if(Y.slug)J.slug=Y.slug;if(Y.description)J.metadata={description:Y.description};let Q=await X.boundAuth.organization.update({organizationId:Y.id,data:J});if(!Q)throw Error("Failed to update organization");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});var rJ0;var WB6=j(()=>{_0();C6();rJ0=R0({name:"ORGANIZATION_DELETE",description:"Delete an organization",inputSchema:N.object({id:N.string()}),outputSchema:N.object({success:N.boolean(),id:N.string()}),handler:async(Y,X)=>{return f0(X),await X.access.check(),await X.boundAuth.organization.delete(Y.id),{success:!0,id:Y.id}}})});var lA;var oJ0=j(()=>{_0();lA=N.object({title:N.string(),url:N.string(),icon:N.string()})});var sJ0;var ZB6=j(()=>{_0();C6();oJ0();sJ0=R0({name:"ORGANIZATION_SETTINGS_GET",description:"Get organization-level settings",inputSchema:N.object({}),outputSchema:N.object({organizationId:N.string(),sidebar_items:N.array(lA).nullable().optional(),enabled_plugins:N.array(N.string()).nullable().optional(),createdAt:N.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:N.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=X.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");let Q=await X.storage.organizationSettings.get(J);if(!Q)return{organizationId:J};return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});var tJ0;var KB6=j(()=>{_0();C6();oJ0();tJ0=R0({name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization-level settings",inputSchema:N.object({organizationId:N.string(),sidebar_items:N.array(lA).optional(),enabled_plugins:N.array(N.string()).optional()}),outputSchema:N.object({organizationId:N.string(),sidebar_items:N.array(lA).nullable().optional(),enabled_plugins:N.array(N.string()).nullable().optional(),createdAt:N.string().datetime().describe("ISO 8601 timestamp"),updatedAt:N.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Y,X)=>{if(f0(X),await X.access.check(),X.organization&&X.organization.id!==Y.organizationId)throw Error("Cannot update settings for a different organization");let J=await X.storage.organizationSettings.upsert(Y.organizationId,{sidebar_items:Y.sidebar_items,enabled_plugins:Y.enabled_plugins});return{...J,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}})});var eJ0;var HB6=j(()=>{_0();C6();eJ0=R0({name:"ORGANIZATION_MEMBER_ADD",description:"Add a member to an organization",inputSchema:N.object({organizationId:N.string().optional(),userId:N.string(),role:N.array(N.string())}),outputSchema:N.object({id:N.string(),organizationId:N.string(),userId:N.string(),role:N.union([N.string(),N.array(N.string())]),createdAt:N.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=Y.organizationId||X.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");let Q=await X.boundAuth.organization.addMember({organizationId:J,userId:Y.userId,role:Y.role});if(!Q)throw Error("Failed to add member");return{...Q,role:Q.role,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});var YQ0;var FB6=j(()=>{_0();C6();YQ0=R0({name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove a member from an organization",inputSchema:N.object({organizationId:N.string().optional(),memberIdOrEmail:N.string()}),outputSchema:N.object({success:N.boolean(),memberIdOrEmail:N.string()}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=Y.organizationId||X.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");return await X.boundAuth.organization.removeMember({organizationId:J,memberIdOrEmail:Y.memberIdOrEmail}),{success:!0,memberIdOrEmail:Y.memberIdOrEmail}}})});var XQ0;var qB6=j(()=>{_0();C6();XQ0=R0({name:"ORGANIZATION_MEMBER_LIST",description:"List all members in an organization",inputSchema:N.object({limit:N.number().optional(),offset:N.number().optional()}),outputSchema:N.object({members:N.array(N.object({id:N.string(),organizationId:N.string(),userId:N.string(),role:N.string(),createdAt:N.string().datetime().describe("ISO 8601 timestamp"),user:N.object({id:N.string(),name:N.string(),email:N.string(),image:N.string().optional()}).optional()}))}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=X.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");let Q=await X.boundAuth.organization.listMembers({organizationId:J,limit:Y.limit,offset:Y.offset});return{members:(Array.isArray(Q)?Q:[]).map((K)=>({...K,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}))}}})});var JQ0;var VB6=j(()=>{_0();C6();JQ0=R0({name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Update a member's role in an organization",inputSchema:N.object({organizationId:N.string().optional(),memberId:N.string(),role:N.array(N.string())}),outputSchema:N.object({id:N.string(),organizationId:N.string(),userId:N.string(),role:N.union([N.literal("admin"),N.literal("member"),N.literal("owner")]),createdAt:N.string().datetime().describe("ISO 8601 timestamp"),user:N.object({email:N.string(),name:N.string(),image:N.string().optional()})}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=Y.organizationId||X.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");let Q=await X.boundAuth.organization.updateMemberRole({organizationId:J,memberId:Y.memberId,role:Y.role});if(!Q)throw Error("Failed to update member role");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});var $B6=j(()=>{XB6();JB6();QB6();GB6();WB6();ZB6();KB6();HB6();FB6();qB6();VB6()});var Os4,ch,Ns4,bq,zB6,nh;var xq=j(()=>{_0();Os4=N.object({banner:N.string().nullable(),bannerColor:N.string().nullable(),icon:N.string().nullable(),themeColor:N.string().nullable()}),ch=N.object({banner:N.string().nullable().optional(),bannerColor:N.string().nullable().optional(),icon:N.string().nullable().optional(),themeColor:N.string().nullable().optional()}),Ns4=N.object({id:N.string(),title:N.string(),icon:N.string().nullable()}),bq=N.object({id:N.string(),organizationId:N.string(),slug:N.string(),name:N.string(),description:N.string().nullable(),enabledPlugins:N.array(N.string()).nullable(),ui:Os4.nullable(),createdAt:N.string().datetime().describe("ISO 8601 timestamp"),updatedAt:N.string().datetime().describe("ISO 8601 timestamp")}),zB6=bq.omit({organizationId:!0}).extend({boundConnections:N.array(Ns4)}),nh=N.object({id:N.string(),projectId:N.string(),pluginId:N.string(),connectionId:N.string().nullable(),settings:N.record(N.string(),N.unknown()).nullable(),createdAt:N.string().datetime().describe("ISO 8601 timestamp"),updatedAt:N.string().datetime().describe("ISO 8601 timestamp")})});var QQ0;var BB6=j(()=>{_0();C6();xq();QQ0=R0({name:"PROJECT_LIST",description:"List all projects in an organization",inputSchema:N.object({organizationId:N.string().describe("Organization ID to list projects for")}),outputSchema:N.object({projects:N.array(zB6)}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=await X.storage.projects.list(Y.organizationId),Q=J.map((K)=>K.id),G=await X.storage.projectPluginConfigs.getBoundConnectionsForProjects(Q);return{projects:J.map((K)=>({id:K.id,slug:K.slug,name:K.name,description:K.description,enabledPlugins:K.enabledPlugins,ui:K.ui,boundConnections:G.get(K.id)??[],createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt,updatedAt:K.updatedAt instanceof Date?K.updatedAt.toISOString():K.updatedAt}))}}})});var GQ0;var UB6=j(()=>{_0();C6();xq();GQ0=R0({name:"PROJECT_GET",description:"Get a project by ID or slug",inputSchema:N.object({organizationId:N.string().describe("Organization ID"),projectId:N.string().optional().describe("Project ID (either this or slug required)"),slug:N.string().optional().describe("Project slug (either this or projectId required)")}).refine((Y)=>Y.projectId||Y.slug,{message:"Either projectId or slug must be provided"}),outputSchema:N.object({project:bq.nullable()}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=null;if(Y.projectId)J=await X.storage.projects.get(Y.projectId);else if(Y.slug)J=await X.storage.projects.getBySlug(Y.organizationId,Y.slug);if(!J)return{project:null};return{project:{id:J.id,organizationId:J.organizationId,slug:J.slug,name:J.name,description:J.description,enabledPlugins:J.enabledPlugins,ui:J.ui,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}})});var WQ0;var DB6=j(()=>{_0();KQ();C6();xq();WQ0=R0({name:"PROJECT_CREATE",description:"Create a new project in an organization",inputSchema:N.object({organizationId:N.string().describe("Organization ID"),slug:N.string().min(1).max(100).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").describe("URL-friendly identifier"),name:N.string().min(1).max(200).describe("Display name"),description:N.string().max(1000).nullable().optional().describe("Project description"),enabledPlugins:N.array(N.string()).nullable().optional().describe("Plugin IDs to enable"),ui:ch.nullable().optional().describe("UI customization")}),outputSchema:N.object({project:bq}),handler:async(Y,X)=>{f0(X),await X.access.check();let{organizationId:J,slug:Q,name:G,description:K,enabledPlugins:W,ui:Z}=Y;if(Q===J5)throw Error(`Slug "${J5}" is reserved`);if(await X.storage.projects.getBySlug(J,Q))throw Error(`Project with slug "${Q}" already exists in this organization`);let F=Z?{banner:Z.banner??null,bannerColor:Z.bannerColor??null,icon:Z.icon??null,themeColor:Z.themeColor??null}:null,q=await X.storage.projects.create({organizationId:J,slug:Q,name:G,description:K??null,enabledPlugins:W??null,ui:F});return{project:{id:q.id,organizationId:q.organizationId,slug:q.slug,name:q.name,description:q.description,enabledPlugins:q.enabledPlugins,ui:q.ui,createdAt:q.createdAt instanceof Date?q.createdAt.toISOString():q.createdAt,updatedAt:q.updatedAt instanceof Date?q.updatedAt.toISOString():q.updatedAt}}}})});var ZQ0;var OB6=j(()=>{_0();C6();xq();ZQ0=R0({name:"PROJECT_UPDATE",description:"Update a project's details",inputSchema:N.object({projectId:N.string().describe("Project ID to update"),name:N.string().min(1).max(200).optional().describe("New display name"),description:N.string().max(1000).nullable().optional().describe("New description"),enabledPlugins:N.array(N.string()).nullable().optional().describe("Updated plugin IDs"),ui:ch.nullable().optional().describe("Updated UI customization")}),outputSchema:N.object({project:bq.nullable()}),handler:async(Y,X)=>{f0(X),await X.access.check();let{projectId:J,name:Q,description:G,enabledPlugins:K,ui:W}=Y,Z={};if(Q!==void 0)Z.name=Q;if(G!==void 0)Z.description=G;if(K!==void 0)Z.enabledPlugins=K;if(W!==void 0)Z.ui=W?{banner:W.banner??null,bannerColor:W.bannerColor??null,icon:W.icon??null,themeColor:W.themeColor??null}:null;let H=await X.storage.projects.update(J,Z);if(!H)return{project:null};return{project:{id:H.id,organizationId:H.organizationId,slug:H.slug,name:H.name,description:H.description,enabledPlugins:H.enabledPlugins,ui:H.ui,createdAt:H.createdAt instanceof Date?H.createdAt.toISOString():H.createdAt,updatedAt:H.updatedAt instanceof Date?H.updatedAt.toISOString():H.updatedAt}}}})});var KQ0;var NB6=j(()=>{_0();KQ();C6();KQ0=R0({name:"PROJECT_DELETE",description:"Delete a project (cannot delete org-admin)",inputSchema:N.object({projectId:N.string().describe("Project ID to delete")}),outputSchema:N.object({success:N.boolean(),message:N.string().optional()}),handler:async(Y,X)=>{f0(X),await X.access.check();let{projectId:J}=Y,Q=await X.storage.projects.get(J);if(!Q)return{success:!1,message:"Project not found"};if(Q.slug===J5)return{success:!1,message:"Cannot delete the org-admin project"};return{success:await X.storage.projects.delete(J)}}})});var HQ0;var LB6=j(()=>{_0();C6();xq();HQ0=R0({name:"PROJECT_PLUGIN_CONFIG_GET",description:"Get plugin configuration for a project",inputSchema:N.object({projectId:N.string().describe("Project ID"),pluginId:N.string().describe("Plugin ID")}),outputSchema:N.object({config:nh.nullable()}),handler:async(Y,X)=>{f0(X),await X.access.check();let{projectId:J,pluginId:Q}=Y,G=await X.storage.projectPluginConfigs.get(J,Q);if(!G)return{config:null};return{config:{id:G.id,projectId:G.projectId,pluginId:G.pluginId,connectionId:G.connectionId,settings:G.settings,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt,updatedAt:G.updatedAt instanceof Date?G.updatedAt.toISOString():G.updatedAt}}}})});var FQ0;var wB6=j(()=>{_0();C6();xq();bh();FQ0=R0({name:"PROJECT_PLUGIN_CONFIG_UPDATE",description:"Update or create plugin configuration for a project",inputSchema:N.object({projectId:N.string().describe("Project ID"),pluginId:N.string().describe("Plugin ID"),connectionId:N.string().nullable().optional().describe("MCP connection to bind"),settings:N.record(N.string(),N.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:N.object({config:nh}),handler:async(Y,X)=>{f0(X),await X.access.check();let{projectId:J,pluginId:Q,connectionId:G,settings:K}=Y,W=T8(X),Z=await X.storage.projects.get(J);if(!Z)throw Error(`Project not found: ${J}`);let H=G?await X.storage.connections.findById(G):null;if(G&&Z.organizationId&&!H&&EU()){if(hh(G,Z.organizationId)){if(!W)throw Error("User ID required to create dev-assets connection");let q=CU(Z.organizationId,k5());await X.storage.connections.create({...q,organization_id:Z.organizationId,created_by:W})}}let F=await X.storage.projectPluginConfigs.upsert(J,Q,{connectionId:G,settings:K});return{config:{id:F.id,projectId:F.projectId,pluginId:F.pluginId,connectionId:F.connectionId,settings:F.settings,createdAt:F.createdAt instanceof Date?F.createdAt.toISOString():F.createdAt,updatedAt:F.updatedAt instanceof Date?F.updatedAt.toISOString():F.updatedAt}}}})});var MB6=j(()=>{BB6();UB6();DB6();OB6();NB6();LB6();wB6()});var qQ0;var PB6=j(()=>{_0();C6();qQ0=R0({name:"TAGS_LIST",description:"List all tags in an organization",inputSchema:N.object({}),outputSchema:N.object({tags:N.array(N.object({id:N.string(),organizationId:N.string(),name:N.string(),createdAt:N.string().describe("ISO 8601 timestamp")}))}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=F6(X);return{tags:(await X.storage.tags.listOrgTags(J.id)).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}))}}})});var VQ0;var AB6=j(()=>{_0();C6();VQ0=R0({name:"TAGS_CREATE",description:"Create a new tag in an organization",inputSchema:N.object({name:N.string().min(1).max(50).describe("Tag name")}),outputSchema:N.object({tag:N.object({id:N.string(),organizationId:N.string(),name:N.string(),createdAt:N.string().describe("ISO 8601 timestamp")})}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=F6(X),Q=await X.storage.tags.createTag(J.id,Y.name);return{tag:{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}}}})});var $Q0;var TB6=j(()=>{_0();C6();$Q0=R0({name:"TAGS_DELETE",description:"Delete a tag from an organization (removes from all members)",inputSchema:N.object({tagId:N.string().describe("Tag ID to delete")}),outputSchema:N.object({success:N.boolean()}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=F6(X),Q=await X.storage.tags.getTag(Y.tagId);if(!Q)throw Error("Tag not found");if(Q.organizationId!==J.id)throw Error("Tag does not belong to this organization");return await X.storage.tags.deleteTag(Y.tagId),{success:!0}}})});var zQ0;var EB6=j(()=>{_0();C6();zQ0=R0({name:"MEMBER_TAGS_GET",description:"Get tags assigned to a member",inputSchema:N.object({memberId:N.string().describe("Member ID")}),outputSchema:N.object({tags:N.array(N.object({id:N.string(),organizationId:N.string(),name:N.string(),createdAt:N.string().describe("ISO 8601 timestamp")}))}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=F6(X);if(!await X.storage.tags.verifyMemberOrg(Y.memberId,J.id))throw Error(`Member not found in this organization: ${Y.memberId}`);return{tags:(await X.storage.tags.getMemberTags(Y.memberId)).map((K)=>({...K,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():String(K.createdAt)}))}}})});var BQ0;var CB6=j(()=>{_0();C6();BQ0=R0({name:"MEMBER_TAGS_SET",description:"Set tags for a member (replaces all existing tags)",inputSchema:N.object({memberId:N.string().describe("Member ID"),tagIds:N.array(N.string()).describe("Array of tag IDs to assign")}),outputSchema:N.object({success:N.boolean(),tags:N.array(N.object({id:N.string(),organizationId:N.string(),name:N.string(),createdAt:N.string().describe("ISO 8601 timestamp")}))}),handler:async(Y,X)=>{f0(X),await X.access.check();let J=F6(X);if(!await X.storage.tags.verifyMemberOrg(Y.memberId,J.id))throw Error(`Member not found in this organization: ${Y.memberId}`);for(let K of Y.tagIds){let W=await X.storage.tags.getTag(K);if(!W)throw Error(`Tag not found: ${K}`);if(W.organizationId!==J.id)throw Error(`Tag does not belong to this organization: ${K}`)}return await X.storage.tags.setMemberTags(Y.memberId,Y.tagIds),{success:!0,tags:(await X.storage.tags.getMemberTags(Y.memberId)).map((K)=>({...K,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():String(K.createdAt)}))}}})});var IB6=j(()=>{PB6();AB6();TB6();EB6();CB6()});var RB6,j7,SB6,jB6;var uq=j(()=>{_0();RB6=N.object({id:N.string().describe("Unique message ID"),threadId:N.string().describe("ID of the parent thread"),metadata:N.unknown().optional().describe("Optional message metadata"),parts:N.array(N.record(N.string(),N.unknown())).describe("Message content parts (AI SDK UIMessagePart format)"),role:N.enum(["user","assistant","system"]).describe("Message role"),createdAt:N.string().datetime().describe("Timestamp of creation"),updatedAt:N.string().datetime().describe("Timestamp of last update")}),j7=N.object({id:N.string().describe("Unique thread ID"),organizationId:N.string().describe("Organization this thread belongs to"),title:N.string().describe("Thread title"),description:N.string().nullable().describe("Thread description"),createdAt:N.string().datetime().describe("Timestamp of creation"),updatedAt:N.string().datetime().describe("Timestamp of last update"),hidden:N.boolean().optional().describe("Whether the thread is hidden"),createdBy:N.string().describe("User ID who created the thread"),updatedBy:N.string().nullable().describe("User ID who last updated the thread")}),SB6=N.object({id:N.string().optional().describe("Optional custom ID for the thread"),title:N.string().describe("Thread title"),description:N.string().nullish().describe("Thread description")}),jB6=N.object({title:N.string().optional().describe("New thread title"),description:N.string().nullish().describe("New thread description"),hidden:N.boolean().optional().describe("Whether the thread is hidden")})});var Ms4,Ps4,UQ0;var kB6=j(()=>{_0();C6();uq();XA();Ms4=N.object({data:SB6.describe("Data for the new thread (id is auto-generated if not provided)")}),Ps4=N.object({item:j7.describe("The created thread entity")}),UQ0=R0({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread in the organization",inputSchema:Ms4,outputSchema:Ps4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=T8(X);if(!Q)throw Error("User ID required to create thread");let G=Y.data.id??MK("thrd"),K=await X.storage.threads.create({id:G,organizationId:J.id,title:Y.data.title,description:Y.data.description,createdBy:Q});return{item:{...K,hidden:K.hidden??!1}}}})});var As4,Ts4,DQ0;var vB6=j(()=>{X5();C6();uq();_0();As4=ZZ.extend({where:N.object({created_by:N.string().optional()}).optional()}),Ts4=KZ(j7),DQ0=R0({name:"COLLECTION_THREADS_LIST",description:"List all threads in the organization with filtering, sorting, and pagination",inputSchema:As4,outputSchema:Ts4,handler:async(Y,X)=>{await X.access.check();let J=X.auth.user?.id;if(!J)throw Error("User ID required to list threads");let Q=F6(X),G=Y.offset??0,K=Y.limit??100,{threads:W,total:Z}=await X.storage.threads.list(Q.id,J,{limit:K,offset:G}),H=G+K<Z;return{items:W.map((F)=>({...F,hidden:F.hidden??!1})),totalCount:Z,hasMore:H}}})});var Es4,OQ0;var _B6=j(()=>{X5();C6();uq();Es4=LA(j7),OQ0=R0({name:"COLLECTION_THREADS_GET",description:"Get thread details by ID",inputSchema:NA,outputSchema:Es4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=await X.storage.threads.get(Y.id);if(!Q||Q.organizationId!==J.id)return{item:null};return{item:{...Q,hidden:Q.hidden??!1}}}})});var Cs4,Is4,NQ0;var yB6=j(()=>{_0();C6();uq();Cs4=N.object({id:N.string().describe("ID of the thread to update"),data:jB6.describe("Partial thread data to update")}),Is4=N.object({item:j7.describe("The updated thread entity")}),NQ0=R0({name:"COLLECTION_THREADS_UPDATE",description:"Update an existing thread in the organization",inputSchema:Cs4,outputSchema:Is4,handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=T8(X);if(!Q)throw Error("User ID required to update thread");let{id:G,data:K}=Y,W=await X.storage.threads.get(G);if(!W||W.organizationId!==J.id)throw Error("Thread not found in organization");let Z=await X.storage.threads.update(G,{title:K.title,description:K.description,hidden:K.hidden,updatedBy:Q});return{item:{...Z,hidden:Z.hidden??!1}}}})});var LQ0;var fB6=j(()=>{X5();C6();uq();LQ0=R0({name:"COLLECTION_THREADS_DELETE",description:"Delete a thread",inputSchema:wA,outputSchema:MA(j7),handler:async(Y,X)=>{f0(X);let J=F6(X);await X.access.check();let Q=await X.storage.threads.get(Y.id);if(!Q)throw Error(`Thread not found: ${Y.id}`);if(Q.organizationId!==J.id)throw Error(`Thread not found: ${Y.id}`);return await X.storage.threads.delete(Y.id),{item:{...Q,hidden:Q.hidden??!1}}}})});function hB6(Y){if(!Y)return null;if("field"in Y&&Y.field[0]==="threadId"&&Y.operator==="eq")return String(Y.value);if("conditions"in Y)for(let X of Y.conditions){let J=hB6(X);if(J)return J}return null}var Rs4,wQ0;var bB6=j(()=>{X5();C6();uq();Rs4=KZ(RB6),wQ0=R0({name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List all messages for a specific thread",inputSchema:ZZ,outputSchema:Rs4,handler:async(Y,X)=>{let J=F6(X);await X.access.check();let Q=hB6(Y.where);if(!Q)throw Error("threadId filter is required in where clause");let G=await X.storage.threads.get(Q);if(!G||G.organizationId!==J.id)return{items:[],totalCount:0,hasMore:!1};let K=Y.offset??0,W=Y.limit??100,{messages:Z,total:H}=await X.storage.threads.listMessages(Q,{limit:W,offset:K}),F=K+W<H;return{items:Z,totalCount:H,hasMore:F}}})});var xB6=j(()=>{kB6();vB6();_B6();yB6();fB6();bB6()});var js4,ks4,MQ0;var uB6=j(()=>{_0();C6();js4=N.object({id:N.string().min(1)}),ks4=N.object({user:N.object({id:N.string(),name:N.string(),email:N.string(),image:N.string().nullable()}).nullable()}),MQ0=R0({name:"USER_GET",description:"Get a user by id (restricted to shared organizations)",inputSchema:js4,outputSchema:ks4,handler:async(Y,X)=>{await X.access.check(),f0(X);let J=T8(X);if(!J)throw Error("Authentication required");let Q=await X.storage.users.findById(Y.id,J);if(!Q)return{user:null};return{user:{id:Q.id,name:Q.name,email:Q.email,image:Q.image??null}}}})});var gB6=j(()=>{uB6()});var lB6={};h6(lB6,{managementMCP:()=>fs4,ALL_TOOLS:()=>mB6});var _s4,ys4,mB6,fs4=async(Y)=>{let X=null;if(Y.organization)X=(await Y.storage.organizationSettings.get(Y.organization.id))?.enabled_plugins??null;let J=sq6(mB6,X),Q=new YR({name:"mcp-mesh-management",version:"1.0.0"},{capabilities:{tools:{}}});for(let G of J){let K=G.inputSchema&&typeof G.inputSchema==="object"&&"shape"in G.inputSchema?G.inputSchema:N.object({}),W=G.outputSchema&&typeof G.outputSchema==="object"&&"shape"in G.outputSchema?G.outputSchema:void 0,Z=K.shape,H=W?.shape;Q.registerTool(G.name,{description:G.description??"",inputSchema:Z,outputSchema:H},async(F)=>{Y.access.setToolName(G.name);try{let q=await G.execute(F,Y);return{content:[{type:"text",text:JSON.stringify(q)}],structuredContent:q}}catch(q){return{content:[{type:"text",text:`Error: ${q.message}`}],isError:!0}}})}return Q};var dB6=j(()=>{EX0();sp();_0();zV6();Q$6();Ez6();Sz6();uz6();cz6();sz6();YB6();$B6();MB6();IB6();xB6();gB6();_s4=[cJ0,nJ0,iJ0,aJ0,rJ0,sJ0,tJ0,eJ0,YQ0,XQ0,JQ0,eX0,WJ0,ZJ0,PJ0,AJ0,TJ0,vJ0,yJ0,fJ0,hJ0,bJ0,xJ0,uJ0,gJ0,mJ0,lJ0,Rz6,dJ0,pJ0,IX0,SX0,jX0,RX0,EJ0,CJ0,IJ0,RJ0,SJ0,jJ0,kJ0,MQ0,oX0,sX0,tX0,UQ0,DQ0,OQ0,NQ0,LQ0,wQ0,qQ0,VQ0,$Q0,zQ0,BQ0,QQ0,GQ0,WQ0,ZQ0,KQ0,HQ0,FQ0],ys4=tq6(),mB6=[..._s4,...ys4]});function hs4(Y){return[{permissions:{self:["*"]},getTools:async()=>{let{ALL_TOOLS:X}=await Promise.resolve().then(() => (dB6(),lB6));return X.map((J)=>{return{name:J.name,inputSchema:N.toJSONSchema(J.inputSchema,{unrepresentable:"any"}),outputSchema:J.outputSchema?N.toJSONSchema(J.outputSchema,{unrepresentable:"any"}):void 0,description:J.description}})},data:xp(k5(),Y)},{data:bp()},{data:hp(Y)}]}async function pB6(Y,X){try{let J=eP(),Q=new pY0(process.env.ENCRYPTION_KEY||""),G=new cY0(J.db,Q),K=new nY0(J.db),W=hs4(Y);try{await K.create({organizationId:Y,slug:J5,name:dq,description:"Organization administration and settings",enabledPlugins:null,ui:null})}catch(Z){console.warn("Could not create org-admin project (may already exist):",Z)}await Promise.all(W.map(async(Z)=>{let H=null;if(Z.permissions)H=(await vU.api.createApiKey({body:{name:`${Z.data.app_name??crypto.randomUUID()}-mcp`,userId:X,permissions:Z.permissions,rateLimitEnabled:!1,metadata:{organization:{id:Y},purpose:"default-org-connections"}}}))?.key;let F=await Z.getTools?.()??await OU({id:"pending",title:Z.data.title,connection_type:Z.data.connection_type,connection_url:Z.data.connection_url,connection_token:Z.data.connection_token,connection_headers:Z.data.connection_headers}).catch(()=>null),q=Z.data.id?Z.data.id.startsWith(`${Y}_`)?Z.data.id:`${Y}_${Z.data.id}`:void 0;await G.create({...Z.data,id:q,tools:F,organization_id:Y,created_by:X,connection_token:Z.data.connection_token??H})}))}catch(J){console.error("Error creating default MCP connections:",J)}}var cB6=j(()=>{KQ();$h();JF6();QF6();GF6();wh();_0();gh()});var nB6;var iB6=j(()=>{nB6=["owner","admin"]});var bs4=(Y)=>{return{defaultSSO:[{domain:Y.domain,providerId:Y.providerId,oidcConfig:{issuer:`https://login.microsoftonline.com/${Y.MS_TENANT_ID}/v2.0`,pkce:!0,clientId:Y.MS_CLIENT_ID,clientSecret:Y.MS_CLIENT_SECRET,discoveryEndpoint:`https://login.microsoftonline.com/${Y.MS_TENANT_ID}/v2.0/.well-known/openid-configuration`,authorizationEndpoint:`https://login.microsoftonline.com/${Y.MS_TENANT_ID}/oauth2/v2.0/authorize`,tokenEndpoint:`https://login.microsoftonline.com/${Y.MS_TENANT_ID}/oauth2/v2.0/token`,jwksEndpoint:`https://login.microsoftonline.com/${Y.MS_TENANT_ID}/discovery/v2.0/keys`,userInfoEndpoint:"https://graph.microsoft.com/oidc/userinfo",tokenEndpointAuthentication:"client_secret_post",scopes:Y.scopes,mapping:{id:"sub",email:"email",emailVerified:"email_verified",name:"name",image:"picture",extraFields:{emailVerified:"email_verified"}}}}]}},aB6=(Y)=>{if(Y.providerId==="microsoft")return bs4(Y);throw Error(`Unsupported provider: ${Y.providerId}`)};function xs4(Y){return Y.toLowerCase().trim().replace(/[^a-z0-9\s_-]+/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function us4(){let Y=Math.floor(Math.random()*oB6.length),X=Math.floor(Math.random()*rB6.length),J=oB6[Y]??"deco",Q=rB6[X]??"studio";return`${J}-${Q}`}var rB6,oB6,gs4,ms4,ih,ls4,ds4,ps4,sB6,_X,tB6=void 0,cs4,ns4,is4,vU;var gh=j(()=>{e$0();MA0();KE0();Uo();eE0();YC0();Vv();ZC0();$h();dY0();sH6();cB6();iB6();rB6=["labs","agent","studio","workspace","systems","core","cloud","works"],oB6=["capybara","guarana","deco","samba","feijoada","capoeira","carnival"];gs4=Object.values(Cn()).map((Y)=>Y.map((X)=>X.name)).flat(),ms4={...ak,self:["*",...gs4]},ih=J7(ms4),ls4=ih.newRole({self:["*"],...Rw.statements}),ds4=ih.newRole({self:["*"],...Rw.statements}),ps4=ih.newRole({self:["*"],...Rw.statements}),sB6=Object.values(Cn()).map((Y)=>Y.map((X)=>`self:${X.name}`)).flat(),_X=qv.auth;if(_X.inviteEmailProviderId&&_X.emailProviders&&_X.emailProviders.length>0){let Y=Bh(_X.emailProviders,_X.inviteEmailProviderId);if(Y){let X=zh(Y);tB6=async(J)=>{let Q=J.inviter.user?.name||J.inviter.user?.email,G=`${k5()}/auth/accept-invitation?invitationId=${J.invitation.id}&redirectTo=/`;await X({to:J.email,subject:`Invitation to join ${J.organization.name}`,html:`
|
|
1191
1191
|
<h2>You've been invited!</h2>
|