dexto 1.1.10 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +222 -84
- package/dist/agents/agent-registry.json +39 -1
- package/dist/agents/agent-template.yml +1 -1
- package/dist/agents/coding-agent/README.md +188 -0
- package/dist/agents/coding-agent/coding-agent.yml +203 -0
- package/dist/agents/database-agent/database-agent.yml +44 -2
- package/dist/agents/default-agent.yml +137 -13
- package/dist/agents/github-agent/github-agent.yml +42 -0
- package/dist/agents/image-editor-agent/image-editor-agent.yml +9 -2
- package/dist/agents/music-agent/README.md +1 -1
- package/dist/agents/music-agent/music-agent.yml +36 -2
- package/dist/agents/nano-banana-agent/nano-banana-agent.yml +35 -1
- package/dist/agents/podcast-agent/README.md +1 -1
- package/dist/agents/podcast-agent/podcast-agent.yml +37 -3
- package/dist/agents/product-name-researcher/product-name-researcher.yml +37 -1
- package/dist/agents/sora-video-agent/README.md +122 -0
- package/dist/agents/sora-video-agent/sora-video-agent.yml +98 -0
- package/dist/agents/talk2pdf-agent/talk2pdf-agent.yml +17 -2
- package/dist/agents/triage-demo/README.md +6 -6
- package/dist/agents/triage-demo/billing-agent.yml +1 -1
- package/dist/agents/triage-demo/escalation-agent.yml +1 -1
- package/dist/agents/triage-demo/product-info-agent.yml +1 -1
- package/dist/agents/triage-demo/technical-support-agent.yml +1 -1
- package/dist/agents/triage-demo/triage-agent.yml +16 -1
- package/dist/analytics/wrapper.d.ts.map +1 -1
- package/dist/analytics/wrapper.js +5 -3
- package/dist/api/a2a.d.ts +2 -2
- package/dist/api/a2a.d.ts.map +1 -1
- package/dist/api/a2a.js +3 -2
- package/dist/api/mcp/mcp_handler.d.ts +3 -3
- package/dist/api/mcp/mcp_handler.d.ts.map +1 -1
- package/dist/api/mcp/mcp_handler.js +7 -4
- package/dist/api/mcp/tool-aggregation-handler.d.ts.map +1 -1
- package/dist/api/mcp/tool-aggregation-handler.js +34 -42
- package/dist/api/memory/memory-handler.d.ts +18 -0
- package/dist/api/memory/memory-handler.d.ts.map +1 -0
- package/dist/api/memory/memory-handler.js +137 -0
- package/dist/api/middleware/errorHandler.d.ts.map +1 -1
- package/dist/api/middleware/errorHandler.js +2 -0
- package/dist/api/server.d.ts +2 -2
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +1129 -257
- package/dist/api/webhook-subscriber.d.ts.map +1 -1
- package/dist/api/webhook-subscriber.js +2 -1
- package/dist/api/websocket-subscriber.d.ts.map +1 -1
- package/dist/api/websocket-subscriber.js +67 -10
- package/dist/cli/cli-subscriber.d.ts +2 -1
- package/dist/cli/cli-subscriber.d.ts.map +1 -1
- package/dist/cli/cli-subscriber.js +11 -3
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +1 -0
- package/dist/cli/commands/install.d.ts +3 -3
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +223 -41
- package/dist/cli/commands/interactive-commands/model/model-commands.js +2 -2
- package/dist/cli/commands/interactive-commands/prompt-commands.d.ts +8 -1
- package/dist/cli/commands/interactive-commands/prompt-commands.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/prompt-commands.js +252 -4
- package/dist/cli/commands/list-agents.d.ts.map +1 -1
- package/dist/cli/commands/list-agents.js +22 -3
- package/dist/cli/commands/setup.d.ts +4 -4
- package/dist/cli/commands/uninstall.d.ts +1 -1
- package/dist/cli/tool-confirmation/cli-confirmation-handler.d.ts +36 -7
- package/dist/cli/tool-confirmation/cli-confirmation-handler.d.ts.map +1 -1
- package/dist/cli/tool-confirmation/cli-confirmation-handler.js +314 -34
- package/dist/cli/utils/options.js +2 -2
- package/dist/index.js +117 -64
- package/dist/webui/.next/standalone/.next/static/chunks/419-6d449dcb2b056299.js +1 -0
- package/dist/webui/.next/standalone/.next/static/chunks/614-3519f8a6051e0088.js +1 -0
- package/dist/webui/.next/standalone/.next/static/chunks/656-5a9f6405badf66a8.js +25 -0
- package/dist/webui/.next/standalone/.next/static/chunks/765-755286dc586b1a51.js +1 -0
- package/dist/webui/.next/standalone/.next/static/chunks/804-f40df92a3adffcc0.js +1 -0
- package/dist/webui/.next/standalone/.next/static/chunks/854-232126f3c77e6c0b.js +1 -0
- package/dist/webui/.next/standalone/.next/static/chunks/app/chat/[sessionId]/page-a695b09e6bac5274.js +1 -0
- package/dist/webui/.next/standalone/.next/static/chunks/app/layout-f4a6ee5a028899d1.js +1 -0
- package/dist/webui/.next/standalone/.next/static/chunks/app/page-d1f127a0cac96246.js +1 -0
- package/dist/webui/.next/standalone/.next/static/chunks/app/playground/page-6f8d2abe76e51dfc.js +1 -0
- package/dist/webui/.next/standalone/.next/static/chunks/main-7decd42f62688419.js +1 -0
- package/dist/webui/.next/standalone/.next/static/chunks/{webpack-7c234e7e7e272295.js → webpack-7229fd0786f0483c.js} +1 -1
- package/dist/webui/.next/standalone/.next/static/css/c3c26ec984df1deb.css +1 -0
- package/dist/webui/.next/standalone/.next/static/css/de70bee13400563f.css +1 -0
- package/dist/webui/.next/standalone/.next/static/uqfH8SY_uhwdc0ZkpMwCO/_buildManifest.js +1 -0
- package/dist/webui/.next/standalone/package.json +7 -2
- package/dist/webui/.next/standalone/packages/webui/.next/BUILD_ID +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/app-build-manifest.json +30 -15
- package/dist/webui/.next/standalone/packages/webui/.next/app-path-routes-manifest.json +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/build-manifest.json +7 -7
- package/dist/webui/.next/standalone/packages/webui/.next/prerender-manifest.json +3 -3
- package/dist/webui/.next/standalone/packages/webui/.next/required-server-files.json +1 -11
- package/dist/webui/.next/standalone/packages/webui/.next/routes-manifest.json +11 -8
- package/dist/webui/.next/standalone/packages/webui/.next/server/app/_not-found/page.js +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/server/app/chat/[sessionId]/page.js +2 -0
- package/dist/webui/.next/standalone/packages/webui/.next/server/app/chat/[sessionId]/page.js.nft.json +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/server/app/chat/[sessionId]/page_client-reference-manifest.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/server/app/page.js +2 -11
- package/dist/webui/.next/standalone/packages/webui/.next/server/app/page.js.nft.json +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/server/app/playground/page.js +4 -8
- package/dist/webui/.next/standalone/packages/webui/.next/server/app/playground/page.js.nft.json +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/server/app/playground/page_client-reference-manifest.js +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/server/app-paths-manifest.json +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/1.js +12 -0
- package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/102.js +25 -0
- package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/383.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/{619.js → 426.js} +2 -2
- package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/43.js +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/985.js +5 -0
- package/dist/webui/.next/standalone/packages/webui/.next/server/middleware-build-manifest.js +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/server/pages/500.html +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/server/server-reference-manifest.json +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/419-6d449dcb2b056299.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/614-3519f8a6051e0088.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/656-5a9f6405badf66a8.js +25 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/765-755286dc586b1a51.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/804-f40df92a3adffcc0.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/854-232126f3c77e6c0b.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/chat/[sessionId]/page-a695b09e6bac5274.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/layout-f4a6ee5a028899d1.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/page-d1f127a0cac96246.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/playground/page-6f8d2abe76e51dfc.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/main-7decd42f62688419.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/{webpack-7c234e7e7e272295.js → webpack-7229fd0786f0483c.js} +1 -1
- package/dist/webui/.next/standalone/packages/webui/.next/static/css/c3c26ec984df1deb.css +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/css/de70bee13400563f.css +1 -0
- package/dist/webui/.next/standalone/packages/webui/.next/static/uqfH8SY_uhwdc0ZkpMwCO/_buildManifest.js +1 -0
- package/dist/webui/.next/standalone/packages/webui/package.json +11 -4
- package/dist/webui/.next/standalone/packages/webui/server.js +1 -1
- package/dist/webui/.next/static/chunks/419-6d449dcb2b056299.js +1 -0
- package/dist/webui/.next/static/chunks/614-3519f8a6051e0088.js +1 -0
- package/dist/webui/.next/static/chunks/656-5a9f6405badf66a8.js +25 -0
- package/dist/webui/.next/static/chunks/765-755286dc586b1a51.js +1 -0
- package/dist/webui/.next/static/chunks/804-f40df92a3adffcc0.js +1 -0
- package/dist/webui/.next/static/chunks/854-232126f3c77e6c0b.js +1 -0
- package/dist/webui/.next/static/chunks/app/chat/[sessionId]/page-a695b09e6bac5274.js +1 -0
- package/dist/webui/.next/static/chunks/app/layout-f4a6ee5a028899d1.js +1 -0
- package/dist/webui/.next/static/chunks/app/page-d1f127a0cac96246.js +1 -0
- package/dist/webui/.next/static/chunks/app/playground/page-6f8d2abe76e51dfc.js +1 -0
- package/dist/webui/.next/static/chunks/main-7decd42f62688419.js +1 -0
- package/dist/webui/.next/static/chunks/{webpack-7c234e7e7e272295.js → webpack-7229fd0786f0483c.js} +1 -1
- package/dist/webui/.next/static/css/c3c26ec984df1deb.css +1 -0
- package/dist/webui/.next/static/css/de70bee13400563f.css +1 -0
- package/dist/webui/.next/static/uqfH8SY_uhwdc0ZkpMwCO/_buildManifest.js +1 -0
- package/dist/webui/package.json +11 -4
- package/package.json +5 -4
- package/dist/webui/.next/standalone/.next/static/PvkEd_BO6ZXxX99T_gUvs/_buildManifest.js +0 -1
- package/dist/webui/.next/standalone/.next/static/chunks/179-78abc2eacbc41da9.js +0 -1
- package/dist/webui/.next/standalone/.next/static/chunks/442-b1916bec348454b3.js +0 -1
- package/dist/webui/.next/standalone/.next/static/chunks/544-c4a8f278ed1a25d7.js +0 -1
- package/dist/webui/.next/standalone/.next/static/chunks/854-2a6d5a5297a15d52.js +0 -1
- package/dist/webui/.next/standalone/.next/static/chunks/app/layout-dde711766eda096b.js +0 -1
- package/dist/webui/.next/standalone/.next/static/chunks/app/page-5e94d5a49dc718d0.js +0 -1
- package/dist/webui/.next/standalone/.next/static/chunks/app/playground/page-9ae40e0b219583e3.js +0 -1
- package/dist/webui/.next/standalone/.next/static/chunks/main-b65ece3506a2355c.js +0 -1
- package/dist/webui/.next/standalone/.next/static/css/045cc65741e38fbd.css +0 -3
- package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/549.js +0 -1
- package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/950.js +0 -5
- package/dist/webui/.next/standalone/packages/webui/.next/static/PvkEd_BO6ZXxX99T_gUvs/_buildManifest.js +0 -1
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/179-78abc2eacbc41da9.js +0 -1
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/442-b1916bec348454b3.js +0 -1
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/544-c4a8f278ed1a25d7.js +0 -1
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/854-2a6d5a5297a15d52.js +0 -1
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/layout-dde711766eda096b.js +0 -1
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/page-5e94d5a49dc718d0.js +0 -1
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/playground/page-9ae40e0b219583e3.js +0 -1
- package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/main-b65ece3506a2355c.js +0 -1
- package/dist/webui/.next/standalone/packages/webui/.next/static/css/045cc65741e38fbd.css +0 -3
- package/dist/webui/.next/static/PvkEd_BO6ZXxX99T_gUvs/_buildManifest.js +0 -1
- package/dist/webui/.next/static/chunks/179-78abc2eacbc41da9.js +0 -1
- package/dist/webui/.next/static/chunks/442-b1916bec348454b3.js +0 -1
- package/dist/webui/.next/static/chunks/544-c4a8f278ed1a25d7.js +0 -1
- package/dist/webui/.next/static/chunks/854-2a6d5a5297a15d52.js +0 -1
- package/dist/webui/.next/static/chunks/app/layout-dde711766eda096b.js +0 -1
- package/dist/webui/.next/static/chunks/app/page-5e94d5a49dc718d0.js +0 -1
- package/dist/webui/.next/static/chunks/app/playground/page-9ae40e0b219583e3.js +0 -1
- package/dist/webui/.next/static/chunks/main-b65ece3506a2355c.js +0 -1
- package/dist/webui/.next/static/css/045cc65741e38fbd.css +0 -3
- /package/dist/webui/.next/standalone/.next/static/{PvkEd_BO6ZXxX99T_gUvs → uqfH8SY_uhwdc0ZkpMwCO}/_ssgManifest.js +0 -0
- /package/dist/webui/.next/standalone/packages/webui/.next/static/{PvkEd_BO6ZXxX99T_gUvs → uqfH8SY_uhwdc0ZkpMwCO}/_ssgManifest.js +0 -0
- /package/dist/webui/.next/static/{PvkEd_BO6ZXxX99T_gUvs → uqfH8SY_uhwdc0ZkpMwCO}/_ssgManifest.js +0 -0
package/dist/api/a2a.js
CHANGED
|
@@ -2,10 +2,11 @@ import { logger } from '@dexto/core';
|
|
|
2
2
|
/**
|
|
3
3
|
* Sets up the A2A Agent Card endpoint.
|
|
4
4
|
* @param app Express application instance.
|
|
5
|
-
* @param
|
|
5
|
+
* @param getAgentCard Getter function that returns the current agent card.
|
|
6
6
|
*/
|
|
7
|
-
export function setupA2ARoutes(app,
|
|
7
|
+
export function setupA2ARoutes(app, getAgentCard) {
|
|
8
8
|
app.get('/.well-known/agent.json', (_req, res) => {
|
|
9
|
+
const agentCardData = getAgentCard();
|
|
9
10
|
res.setHeader('Content-Type', 'application/json');
|
|
10
11
|
res.status(200).send(JSON.stringify(agentCardData, null, 2));
|
|
11
12
|
});
|
|
@@ -6,13 +6,13 @@ import { DextoAgent } from '@dexto/core';
|
|
|
6
6
|
export type McpTransportType = 'stdio' | 'sse' | 'http';
|
|
7
7
|
export declare function createMcpTransport(transportType?: McpTransportType): Promise<Transport>;
|
|
8
8
|
/** Initializes MCP server, its tools, resources, and connects to the transport */
|
|
9
|
-
export declare function initializeMcpServer(
|
|
9
|
+
export declare function initializeMcpServer(getAgent: () => DextoAgent, getAgentCard: () => AgentCard, mcpTransport: Transport): Promise<McpServer>;
|
|
10
10
|
/**
|
|
11
11
|
* Initializes the Agent Card resource for the MCP server.
|
|
12
12
|
* @param mcpServer - The MCP server instance.
|
|
13
|
-
* @param
|
|
13
|
+
* @param getAgentCard - Getter function that returns the current agent card.
|
|
14
14
|
*/
|
|
15
|
-
export declare function initializeAgentCardResource(mcpServer: McpServer,
|
|
15
|
+
export declare function initializeAgentCardResource(mcpServer: McpServer, getAgentCard: () => AgentCard): Promise<void>;
|
|
16
16
|
/**
|
|
17
17
|
* Initializes and sets up the MCP HTTP endpoints.
|
|
18
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp_handler.d.ts","sourceRoot":"","sources":["../../../src/api/mcp/mcp_handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAExD,wBAAsB,kBAAkB,CACpC,aAAa,GAAE,gBAAyB,GACzC,OAAO,CAAC,SAAS,CAAC,CAsBpB;AAED,kFAAkF;AAClF,wBAAsB,mBAAmB,CACrC,
|
|
1
|
+
{"version":3,"file":"mcp_handler.d.ts","sourceRoot":"","sources":["../../../src/api/mcp/mcp_handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAExD,wBAAsB,kBAAkB,CACpC,aAAa,GAAE,gBAAyB,GACzC,OAAO,CAAC,SAAS,CAAC,CAsBpB;AAED,kFAAkF;AAClF,wBAAsB,mBAAmB,CACrC,QAAQ,EAAE,MAAM,UAAU,EAC1B,YAAY,EAAE,MAAM,SAAS,EAC7B,YAAY,EAAE,SAAS,GACxB,OAAO,CAAC,SAAS,CAAC,CA2CpB;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC7C,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,MAAM,SAAS,GAC9B,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;GAEG;AACH,wBAAsB,+BAA+B,CACjD,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,SAAS,GACxB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
|
@@ -24,7 +24,8 @@ export async function createMcpTransport(transportType = 'http') {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
/** Initializes MCP server, its tools, resources, and connects to the transport */
|
|
27
|
-
export async function initializeMcpServer(
|
|
27
|
+
export async function initializeMcpServer(getAgent, getAgentCard, mcpTransport) {
|
|
28
|
+
const agentCardData = getAgentCard();
|
|
28
29
|
const mcpServer = new McpServer({ name: agentCardData.name, version: agentCardData.version }, {
|
|
29
30
|
capabilities: {
|
|
30
31
|
resources: {}, // Declare resource capability
|
|
@@ -35,6 +36,7 @@ export async function initializeMcpServer(agent, agentCardData, mcpTransport) {
|
|
|
35
36
|
const toolDescription = 'Allows you to chat with the an AI agent. Send a message to interact.';
|
|
36
37
|
mcpServer.tool(toolName, toolDescription, { message: z.string() }, // Input schema for the tool
|
|
37
38
|
async ({ message }) => {
|
|
39
|
+
const agent = getAgent();
|
|
38
40
|
logger.info(`MCP tool '${toolName}' received message: ${message.substring(0, 100)}${message.length > 100 ? '...' : ''}`);
|
|
39
41
|
const text = await agent.run(message);
|
|
40
42
|
logger.info(`MCP tool '${toolName}' sending response: ${text?.substring(0, 100)}${(text?.length ?? 0) > 100 ? '...' : ''}`);
|
|
@@ -42,7 +44,7 @@ export async function initializeMcpServer(agent, agentCardData, mcpTransport) {
|
|
|
42
44
|
});
|
|
43
45
|
logger.info(`Registered MCP tool: '${toolName}' with description: "${toolDescription.substring(0, 70)}..."`);
|
|
44
46
|
// Register Agent Card data as an MCP Resource
|
|
45
|
-
await initializeAgentCardResource(mcpServer,
|
|
47
|
+
await initializeAgentCardResource(mcpServer, getAgentCard);
|
|
46
48
|
// Connect server to transport AFTER all registrations
|
|
47
49
|
logger.info(`Initializing MCP protocol server connection...`);
|
|
48
50
|
await mcpServer.connect(mcpTransport);
|
|
@@ -52,13 +54,14 @@ export async function initializeMcpServer(agent, agentCardData, mcpTransport) {
|
|
|
52
54
|
/**
|
|
53
55
|
* Initializes the Agent Card resource for the MCP server.
|
|
54
56
|
* @param mcpServer - The MCP server instance.
|
|
55
|
-
* @param
|
|
57
|
+
* @param getAgentCard - Getter function that returns the current agent card.
|
|
56
58
|
*/
|
|
57
|
-
export async function initializeAgentCardResource(mcpServer,
|
|
59
|
+
export async function initializeAgentCardResource(mcpServer, getAgentCard) {
|
|
58
60
|
const agentCardResourceProgrammaticName = 'agentCard';
|
|
59
61
|
const agentCardResourceUri = 'dexto://agent/card';
|
|
60
62
|
try {
|
|
61
63
|
const readCallback = async (uri, _extra) => {
|
|
64
|
+
const agentCardData = getAgentCard();
|
|
62
65
|
logger.info(`MCP client requesting resource at ${uri.href}`);
|
|
63
66
|
return {
|
|
64
67
|
contents: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-aggregation-handler.d.ts","sourceRoot":"","sources":["../../../src/api/mcp/tool-aggregation-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EAAsB,KAAK,sBAAsB,EAAwB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-aggregation-handler.d.ts","sourceRoot":"","sources":["../../../src/api/mcp/tool-aggregation-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EAAsB,KAAK,sBAAsB,EAAwB,MAAM,aAAa,CAAC;AAGpG;;;GAGG;AACH,wBAAsB,kCAAkC,CACpD,aAAa,EAAE,sBAAsB,EACrC,YAAY,EAAE,SAAS,EACvB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,OAAO,GACjB,OAAO,CAAC,SAAS,CAAC,CAgGpB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { MCPManager, logger, jsonSchemaToZodShape } from '@dexto/core';
|
|
3
|
+
import { z } from 'zod';
|
|
3
4
|
/**
|
|
4
5
|
* Initializes MCP server for tool aggregation mode.
|
|
5
6
|
* Instead of exposing an AI agent, this directly exposes all tools from connected MCP servers.
|
|
@@ -18,54 +19,42 @@ export async function initializeMcpToolAggregationServer(serverConfigs, mcpTrans
|
|
|
18
19
|
prompts: {},
|
|
19
20
|
},
|
|
20
21
|
});
|
|
21
|
-
|
|
22
|
-
// TODO: Temporary hacky solution to get the tools from the connected servers, directly using the MCP Client to preserve types
|
|
23
|
-
// TODO: We should use the MCPManager or MCPClient instead of directly interacting with the raw client to get the tools, but we lose type information and it becomes any type which is hard to work with
|
|
24
|
-
const mcpClientsMap = mcpManager.getClients();
|
|
22
|
+
const toolDefinitions = await mcpManager.getAllTools();
|
|
25
23
|
let toolCount = 0;
|
|
26
|
-
for (const [
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
logger.debug(`
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const result = await mcpManager.executeTool(tool.name, args);
|
|
45
|
-
logger.info(`Tool aggregation: ${tool.name} completed successfully`);
|
|
46
|
-
return result;
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
logger.error(`Tool aggregation: ${tool.name} failed: ${error}`);
|
|
50
|
-
throw error;
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
24
|
+
for (const [toolName, toolDef] of Object.entries(toolDefinitions)) {
|
|
25
|
+
toolCount++;
|
|
26
|
+
const jsonSchema = toolDef.parameters ?? { type: 'object', properties: {} };
|
|
27
|
+
const paramsShape = jsonSchemaToZodShape(jsonSchema);
|
|
28
|
+
const _paramsSchema = z.object(paramsShape);
|
|
29
|
+
logger.debug(`Registering tool '${toolName}' with schema: ${JSON.stringify(jsonSchema)}`);
|
|
30
|
+
mcpServer.tool(toolName, toolDef.description || `Tool: ${toolName}`, paramsShape, async (args) => {
|
|
31
|
+
logger.info(`Tool aggregation: executing ${toolName}`);
|
|
32
|
+
try {
|
|
33
|
+
const result = await mcpManager.executeTool(toolName, args);
|
|
34
|
+
logger.info(`Tool aggregation: ${toolName} completed successfully`);
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
logger.error(`Tool aggregation: ${toolName} failed: ${error}`);
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
54
42
|
}
|
|
55
43
|
logger.info(`Registered ${toolCount} tools from connected MCP servers`);
|
|
56
44
|
// Register resources if available
|
|
57
45
|
try {
|
|
58
46
|
const allResources = await mcpManager.listAllResources();
|
|
59
47
|
logger.info(`Registering ${allResources.length} resources from connected MCP servers`);
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
48
|
+
// Collision handling verified:
|
|
49
|
+
// - Tools/Prompts: Names come from mcpManager which handles collisions at source
|
|
50
|
+
// - Resources: Index prefix ensures uniqueness even if multiple clients have same key
|
|
51
|
+
allResources.forEach((resource, index) => {
|
|
52
|
+
const safeId = resource.key.replace(/[^a-zA-Z0-9]/g, '_');
|
|
53
|
+
mcpServer.resource(`resource_${index}_${safeId}`, resource.key, async () => {
|
|
54
|
+
logger.info(`Resource aggregation: reading ${resource.key}`);
|
|
55
|
+
return await mcpManager.readResource(resource.key);
|
|
66
56
|
});
|
|
67
|
-
|
|
68
|
-
}
|
|
57
|
+
});
|
|
69
58
|
}
|
|
70
59
|
catch (error) {
|
|
71
60
|
logger.debug(`Skipping resource aggregation: ${error}`);
|
|
@@ -76,8 +65,11 @@ export async function initializeMcpToolAggregationServer(serverConfigs, mcpTrans
|
|
|
76
65
|
logger.info(`Registering ${allPrompts.length} prompts from connected MCP servers`);
|
|
77
66
|
for (const promptName of allPrompts) {
|
|
78
67
|
mcpServer.prompt(promptName, `Prompt: ${promptName}`, async (extra) => {
|
|
79
|
-
logger.info(`Prompt aggregation:
|
|
80
|
-
|
|
68
|
+
logger.info(`Prompt aggregation: resolving ${promptName}`);
|
|
69
|
+
const promptArgs = extra && 'arguments' in extra
|
|
70
|
+
? extra.arguments
|
|
71
|
+
: undefined;
|
|
72
|
+
return await mcpManager.getPrompt(promptName, promptArgs);
|
|
81
73
|
});
|
|
82
74
|
}
|
|
83
75
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import type { DextoAgent } from '@dexto/core';
|
|
3
|
+
/**
|
|
4
|
+
* Setup memory API routes
|
|
5
|
+
* Provides CRUD operations for user memories
|
|
6
|
+
*
|
|
7
|
+
* Uses a getter function to ensure memory operations always use the current agent,
|
|
8
|
+
* even after agent switches in web/server modes.
|
|
9
|
+
*
|
|
10
|
+
* Routes:
|
|
11
|
+
* - POST /api/memory - Create a new memory
|
|
12
|
+
* - GET /api/memory - List all memories (with optional filters)
|
|
13
|
+
* - GET /api/memory/:id - Get a specific memory
|
|
14
|
+
* - PUT /api/memory/:id - Update a memory
|
|
15
|
+
* - DELETE /api/memory/:id - Delete a memory
|
|
16
|
+
*/
|
|
17
|
+
export declare function setupMemoryRoutes(getAgent: () => DextoAgent): Router;
|
|
18
|
+
//# sourceMappingURL=memory-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-handler.d.ts","sourceRoot":"","sources":["../../../src/api/memory/memory-handler.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,MAAM,EAAkD,MAAM,SAAS,CAAC;AAE1F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA8B9C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,UAAU,GAAG,MAAM,CA0FpE"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import express, { Router } from 'express';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { CreateMemoryInputSchema, UpdateMemoryInputSchema } from '@dexto/core';
|
|
4
|
+
// Schema for memory ID parameter
|
|
5
|
+
const MemoryIdParamsSchema = z.object({
|
|
6
|
+
id: z.string().min(1, 'Memory ID is required'),
|
|
7
|
+
});
|
|
8
|
+
// Schema for list query parameters (from query string)
|
|
9
|
+
const ListMemoriesQuerySchema = z.object({
|
|
10
|
+
tags: z
|
|
11
|
+
.string()
|
|
12
|
+
.optional()
|
|
13
|
+
.transform((val) => (val ? val.split(',').map((t) => t.trim()) : undefined)),
|
|
14
|
+
source: z.enum(['user', 'system']).optional(),
|
|
15
|
+
pinned: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.transform((val) => (val === 'true' ? true : val === 'false' ? false : undefined)),
|
|
19
|
+
limit: z
|
|
20
|
+
.string()
|
|
21
|
+
.optional()
|
|
22
|
+
.transform((val) => (val ? parseInt(val, 10) : undefined)),
|
|
23
|
+
offset: z
|
|
24
|
+
.string()
|
|
25
|
+
.optional()
|
|
26
|
+
.transform((val) => (val ? parseInt(val, 10) : undefined)),
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* Setup memory API routes
|
|
30
|
+
* Provides CRUD operations for user memories
|
|
31
|
+
*
|
|
32
|
+
* Uses a getter function to ensure memory operations always use the current agent,
|
|
33
|
+
* even after agent switches in web/server modes.
|
|
34
|
+
*
|
|
35
|
+
* Routes:
|
|
36
|
+
* - POST /api/memory - Create a new memory
|
|
37
|
+
* - GET /api/memory - List all memories (with optional filters)
|
|
38
|
+
* - GET /api/memory/:id - Get a specific memory
|
|
39
|
+
* - PUT /api/memory/:id - Update a memory
|
|
40
|
+
* - DELETE /api/memory/:id - Delete a memory
|
|
41
|
+
*/
|
|
42
|
+
export function setupMemoryRoutes(getAgent) {
|
|
43
|
+
const router = Router();
|
|
44
|
+
// Create a new memory
|
|
45
|
+
router.post('/', express.json(), async (req, res, next) => {
|
|
46
|
+
try {
|
|
47
|
+
const input = CreateMemoryInputSchema.parse(req.body);
|
|
48
|
+
const memory = await getAgent().memoryManager.create(input);
|
|
49
|
+
return res.status(201).json({ ok: true, memory });
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return next(error);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
// List all memories with optional filtering
|
|
56
|
+
router.get('/', async (req, res, next) => {
|
|
57
|
+
try {
|
|
58
|
+
const agent = getAgent();
|
|
59
|
+
const queryOptions = ListMemoriesQuerySchema.parse(req.query);
|
|
60
|
+
// Build options object, removing undefined values
|
|
61
|
+
const options = {};
|
|
62
|
+
if (queryOptions.tags !== undefined)
|
|
63
|
+
options.tags = queryOptions.tags;
|
|
64
|
+
if (queryOptions.source !== undefined)
|
|
65
|
+
options.source = queryOptions.source;
|
|
66
|
+
if (queryOptions.pinned !== undefined)
|
|
67
|
+
options.pinned = queryOptions.pinned;
|
|
68
|
+
if (queryOptions.limit !== undefined)
|
|
69
|
+
options.limit = queryOptions.limit;
|
|
70
|
+
if (queryOptions.offset !== undefined)
|
|
71
|
+
options.offset = queryOptions.offset;
|
|
72
|
+
const memories = await agent.memoryManager.list(options);
|
|
73
|
+
return res.status(200).json({ ok: true, memories, count: memories.length });
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
return next(error);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
// Get memory count (with optional filtering)
|
|
80
|
+
// NOTE: Must be declared before /:id route to avoid route shadowing
|
|
81
|
+
router.get('/count', async (req, res, next) => {
|
|
82
|
+
try {
|
|
83
|
+
const agent = getAgent();
|
|
84
|
+
const queryOptions = ListMemoriesQuerySchema.parse(req.query);
|
|
85
|
+
const options = {};
|
|
86
|
+
if (queryOptions.tags !== undefined)
|
|
87
|
+
options.tags = queryOptions.tags;
|
|
88
|
+
if (queryOptions.source !== undefined)
|
|
89
|
+
options.source = queryOptions.source;
|
|
90
|
+
if (queryOptions.pinned !== undefined)
|
|
91
|
+
options.pinned = queryOptions.pinned;
|
|
92
|
+
const count = await agent.memoryManager.count(options);
|
|
93
|
+
return res.status(200).json({ ok: true, count });
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
return next(error);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
// Get a specific memory by ID
|
|
100
|
+
router.get('/:id', async (req, res, next) => {
|
|
101
|
+
try {
|
|
102
|
+
const agent = getAgent();
|
|
103
|
+
const { id } = MemoryIdParamsSchema.parse(req.params);
|
|
104
|
+
const memory = await agent.memoryManager.get(id);
|
|
105
|
+
return res.status(200).json({ ok: true, memory });
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
return next(error);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
// Update a memory
|
|
112
|
+
router.put('/:id', express.json(), async (req, res, next) => {
|
|
113
|
+
try {
|
|
114
|
+
const agent = getAgent();
|
|
115
|
+
const { id } = MemoryIdParamsSchema.parse(req.params);
|
|
116
|
+
const updates = UpdateMemoryInputSchema.parse(req.body);
|
|
117
|
+
const memory = await agent.memoryManager.update(id, updates);
|
|
118
|
+
return res.status(200).json({ ok: true, memory });
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
return next(error);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
// Delete a memory
|
|
125
|
+
router.delete('/:id', async (req, res, next) => {
|
|
126
|
+
try {
|
|
127
|
+
const agent = getAgent();
|
|
128
|
+
const { id } = MemoryIdParamsSchema.parse(req.params);
|
|
129
|
+
await agent.memoryManager.delete(id);
|
|
130
|
+
return res.status(200).json({ ok: true, message: 'Memory deleted successfully' });
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
return next(error);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
return router;
|
|
137
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../../src/api/middleware/errorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../../src/api/middleware/errorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA0C/D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAuC9F"}
|
package/dist/api/server.d.ts
CHANGED
|
@@ -5,14 +5,14 @@ import { WebSocketEventSubscriber } from './websocket-subscriber.js';
|
|
|
5
5
|
import { WebhookEventSubscriber } from './webhook-subscriber.js';
|
|
6
6
|
import { type AgentCard } from '@dexto/core';
|
|
7
7
|
import { DextoAgent } from '@dexto/core';
|
|
8
|
-
export declare function initializeApi(agent: DextoAgent, agentCardOverride?: Partial<AgentCard>, listenPort?: number,
|
|
8
|
+
export declare function initializeApi(agent: DextoAgent, agentCardOverride?: Partial<AgentCard>, listenPort?: number, agentId?: string): Promise<{
|
|
9
9
|
app: Express;
|
|
10
10
|
server: http.Server;
|
|
11
11
|
wss: WebSocketServer;
|
|
12
12
|
webSubscriber: WebSocketEventSubscriber;
|
|
13
13
|
webhookSubscriber: WebhookEventSubscriber;
|
|
14
14
|
}>;
|
|
15
|
-
export declare function startApiServer(agent: DextoAgent, port?: number, agentCardOverride?: Partial<AgentCard>,
|
|
15
|
+
export declare function startApiServer(agent: DextoAgent, port?: number, agentCardOverride?: Partial<AgentCard>, agentId?: string): Promise<{
|
|
16
16
|
server: http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>;
|
|
17
17
|
wss: WebSocketServer;
|
|
18
18
|
webSubscriber: WebSocketEventSubscriber;
|
package/dist/api/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,SAAS,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAErC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAkD,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7F,OAAO,EAA0B,UAAU,EAAmB,MAAM,aAAa,CAAC;AA8DlF,wBAAsB,aAAa,CAC/B,KAAK,EAAE,UAAU,EACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACtC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IACP,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,GAAG,EAAE,eAAe,CAAC;IACrB,aAAa,EAAE,wBAAwB,CAAC;IACxC,iBAAiB,EAAE,sBAAsB,CAAC;CAC7C,CAAC,CAmxED;AAED,wBAAsB,cAAc,CAChC,KAAK,EAAE,UAAU,EACjB,IAAI,SAAO,EACX,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACtC,OAAO,CAAC,EAAE,MAAM;;;;;GA6BnB"}
|