@toolplex/ai-engine 0.1.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/LICENSE +98 -0
- package/README.md +292 -0
- package/dist/adapters/index.d.ts +9 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +9 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/types.d.ts +137 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +14 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/core/ChatEngine.d.ts +47 -0
- package/dist/core/ChatEngine.d.ts.map +1 -0
- package/dist/core/ChatEngine.js +355 -0
- package/dist/core/ChatEngine.js.map +1 -0
- package/dist/core/ToolBuilder.d.ts +25 -0
- package/dist/core/ToolBuilder.d.ts.map +1 -0
- package/dist/core/ToolBuilder.js +215 -0
- package/dist/core/ToolBuilder.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/DefaultStdioTransportFactory.d.ts +27 -0
- package/dist/mcp/DefaultStdioTransportFactory.d.ts.map +1 -0
- package/dist/mcp/DefaultStdioTransportFactory.js +60 -0
- package/dist/mcp/DefaultStdioTransportFactory.js.map +1 -0
- package/dist/mcp/MCPClient.d.ts +60 -0
- package/dist/mcp/MCPClient.d.ts.map +1 -0
- package/dist/mcp/MCPClient.js +164 -0
- package/dist/mcp/MCPClient.js.map +1 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/paths.d.ts +16 -0
- package/dist/mcp/paths.d.ts.map +1 -0
- package/dist/mcp/paths.js +58 -0
- package/dist/mcp/paths.js.map +1 -0
- package/dist/mcp/types.d.ts +85 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +7 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/providers/index.d.ts +40 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +148 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/toolplex.d.ts +43 -0
- package/dist/providers/toolplex.d.ts.map +1 -0
- package/dist/providers/toolplex.js +168 -0
- package/dist/providers/toolplex.js.map +1 -0
- package/dist/types/index.d.ts +218 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/models.d.ts +30 -0
- package/dist/utils/models.d.ts.map +1 -0
- package/dist/utils/models.js +52 -0
- package/dist/utils/models.js.map +1 -0
- package/dist/utils/schema.d.ts +74 -0
- package/dist/utils/schema.d.ts.map +1 -0
- package/dist/utils/schema.js +253 -0
- package/dist/utils/schema.js.map +1 -0
- package/package.json +70 -0
- package/src/adapters/index.ts +9 -0
- package/src/adapters/types.ts +241 -0
- package/src/core/ChatEngine.ts +464 -0
- package/src/core/ToolBuilder.ts +323 -0
- package/src/core/index.ts +6 -0
- package/src/index.ts +86 -0
- package/src/mcp/DefaultStdioTransportFactory.ts +71 -0
- package/src/mcp/MCPClient.ts +209 -0
- package/src/mcp/index.ts +24 -0
- package/src/mcp/paths.ts +91 -0
- package/src/mcp/types.ts +93 -0
- package/src/providers/index.ts +177 -0
- package/src/providers/toolplex.ts +217 -0
- package/src/types/index.ts +290 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/models.ts +59 -0
- package/src/utils/schema.ts +307 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine
|
|
3
|
+
*
|
|
4
|
+
* Core AI chat engine for ToolPlex.
|
|
5
|
+
* Powers desktop, cloud, and CLI environments through adapter pattern.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { ChatEngine, createElectronAdapter } from '@toolplex/ai-engine';
|
|
10
|
+
*
|
|
11
|
+
* const adapter = createElectronAdapter({ webContents });
|
|
12
|
+
* const engine = new ChatEngine(adapter);
|
|
13
|
+
*
|
|
14
|
+
* await engine.stream({
|
|
15
|
+
* sessionId: 'session-123',
|
|
16
|
+
* modelId: 'anthropic/claude-sonnet-4',
|
|
17
|
+
* messages: [{ role: 'user', content: 'Hello!' }],
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export * from "./types/index.js";
|
|
22
|
+
export * from "./adapters/index.js";
|
|
23
|
+
export { getProvider, getModel, isProviderAvailable, toolplexUsageMap, type GetProviderOptions, } from "./providers/index.js";
|
|
24
|
+
export { createToolPlex, type ToolPlexConfig } from "./providers/toolplex.js";
|
|
25
|
+
export { deepSanitizeParams, resolveSchemaRefs, sanitizeSchemaForGemini, cleanToolSchema, } from "./utils/schema.js";
|
|
26
|
+
export { isChatGPTModel, isGoogleGeminiModel, isAnthropicModel, parseModelId, } from "./utils/models.js";
|
|
27
|
+
export { ChatEngine, type ChatEngineOptions } from "./core/ChatEngine.js";
|
|
28
|
+
export { buildMCPTools, type BuildToolsOptions } from "./core/ToolBuilder.js";
|
|
29
|
+
export { MCPClient } from "./mcp/MCPClient.js";
|
|
30
|
+
export type { MCPSession, MCPResult, MCPTool, MCPToolResult, TransportFactory, MCPClientConfig, } from "./mcp/types.js";
|
|
31
|
+
export { getToolplexClientPath } from "./mcp/paths.js";
|
|
32
|
+
export { DefaultStdioTransportFactory, defaultStdioTransportFactory, } from "./mcp/DefaultStdioTransportFactory.js";
|
|
33
|
+
export { streamText, tool, jsonSchema, stepCountIs } from "ai";
|
|
34
|
+
export type { ToolResultPart, ToolCallPart, TextPart, ImagePart } from "ai";
|
|
35
|
+
export { createOpenAI } from "@ai-sdk/openai";
|
|
36
|
+
export { createAnthropic } from "@ai-sdk/anthropic";
|
|
37
|
+
export { createGoogleGenerativeAI } from "@ai-sdk/google";
|
|
38
|
+
export { createOpenRouter } from "@openrouter/ai-sdk-provider";
|
|
39
|
+
export { Client as MCPSDKClient } from "@modelcontextprotocol/sdk/client/index.js";
|
|
40
|
+
export { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,cAAc,kBAAkB,CAAC;AAGjC,cAAc,qBAAqB,CAAC;AAGpC,OAAO,EACL,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9E,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG9E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,YAAY,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC/D,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAG5E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine
|
|
3
|
+
*
|
|
4
|
+
* Core AI chat engine for ToolPlex.
|
|
5
|
+
* Powers desktop, cloud, and CLI environments through adapter pattern.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { ChatEngine, createElectronAdapter } from '@toolplex/ai-engine';
|
|
10
|
+
*
|
|
11
|
+
* const adapter = createElectronAdapter({ webContents });
|
|
12
|
+
* const engine = new ChatEngine(adapter);
|
|
13
|
+
*
|
|
14
|
+
* await engine.stream({
|
|
15
|
+
* sessionId: 'session-123',
|
|
16
|
+
* modelId: 'anthropic/claude-sonnet-4',
|
|
17
|
+
* messages: [{ role: 'user', content: 'Hello!' }],
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
// Types
|
|
22
|
+
export * from "./types/index.js";
|
|
23
|
+
// Adapters
|
|
24
|
+
export * from "./adapters/index.js";
|
|
25
|
+
// Providers
|
|
26
|
+
export { getProvider, getModel, isProviderAvailable, toolplexUsageMap, } from "./providers/index.js";
|
|
27
|
+
export { createToolPlex } from "./providers/toolplex.js";
|
|
28
|
+
// Utilities
|
|
29
|
+
export { deepSanitizeParams, resolveSchemaRefs, sanitizeSchemaForGemini, cleanToolSchema, } from "./utils/schema.js";
|
|
30
|
+
export { isChatGPTModel, isGoogleGeminiModel, isAnthropicModel, parseModelId, } from "./utils/models.js";
|
|
31
|
+
// Core engine
|
|
32
|
+
export { ChatEngine } from "./core/ChatEngine.js";
|
|
33
|
+
export { buildMCPTools } from "./core/ToolBuilder.js";
|
|
34
|
+
// MCP Client
|
|
35
|
+
export { MCPClient } from "./mcp/MCPClient.js";
|
|
36
|
+
// MCP path utilities and default transport
|
|
37
|
+
export { getToolplexClientPath } from "./mcp/paths.js";
|
|
38
|
+
export { DefaultStdioTransportFactory, defaultStdioTransportFactory, } from "./mcp/DefaultStdioTransportFactory.js";
|
|
39
|
+
// Re-export AI SDK primitives for consumers
|
|
40
|
+
export { streamText, tool, jsonSchema, stepCountIs } from "ai";
|
|
41
|
+
// Re-export provider factory functions
|
|
42
|
+
export { createOpenAI } from "@ai-sdk/openai";
|
|
43
|
+
export { createAnthropic } from "@ai-sdk/anthropic";
|
|
44
|
+
export { createGoogleGenerativeAI } from "@ai-sdk/google";
|
|
45
|
+
export { createOpenRouter } from "@openrouter/ai-sdk-provider";
|
|
46
|
+
// Re-export MCP SDK for transport implementations
|
|
47
|
+
export { Client as MCPSDKClient } from "@modelcontextprotocol/sdk/client/index.js";
|
|
48
|
+
export { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,QAAQ;AACR,cAAc,kBAAkB,CAAC;AAEjC,WAAW;AACX,cAAc,qBAAqB,CAAC;AAEpC,YAAY;AACZ,OAAO,EACL,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,GAEjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAuB,MAAM,yBAAyB,CAAC;AAE9E,YAAY;AACZ,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,cAAc;AACd,OAAO,EAAE,UAAU,EAA0B,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAA0B,MAAM,uBAAuB,CAAC;AAE9E,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAU/C,2CAA2C;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,uCAAuC,CAAC;AAE/C,4CAA4C;AAC5C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAG/D,uCAAuC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,kDAAkD;AAClD,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine - Default Stdio Transport Factory
|
|
3
|
+
*
|
|
4
|
+
* Default implementation of TransportFactory that spawns @toolplex/client
|
|
5
|
+
* using the system's Node.js. This works out-of-box for CLI usage.
|
|
6
|
+
*
|
|
7
|
+
* For desktop apps with bundled dependencies, override this with a custom
|
|
8
|
+
* TransportFactory implementation.
|
|
9
|
+
*/
|
|
10
|
+
import type { TransportFactory, MCPSession } from "./types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Default Transport Factory - spawns @toolplex/client using system Node.js
|
|
13
|
+
*
|
|
14
|
+
* This is suitable for:
|
|
15
|
+
* - CLI applications
|
|
16
|
+
* - Development environments
|
|
17
|
+
* - Any context where system Node.js is available
|
|
18
|
+
*
|
|
19
|
+
* For Electron/desktop apps with bundled Node.js, create a custom
|
|
20
|
+
* TransportFactory that uses the bundled runtime.
|
|
21
|
+
*/
|
|
22
|
+
export declare class DefaultStdioTransportFactory implements TransportFactory {
|
|
23
|
+
createTransport(apiKey: string, sessionResumeHistory?: string): Promise<MCPSession>;
|
|
24
|
+
closeTransport(session: MCPSession): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare const defaultStdioTransportFactory: DefaultStdioTransportFactory;
|
|
27
|
+
//# sourceMappingURL=DefaultStdioTransportFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultStdioTransportFactory.d.ts","sourceRoot":"","sources":["../../src/mcp/DefaultStdioTransportFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG/D;;;;;;;;;;GAUG;AACH,qBAAa,4BAA6B,YAAW,gBAAgB;IAC7D,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,MAAM,GAC5B,OAAO,CAAC,UAAU,CAAC;IA8BhB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAOzD;AAGD,eAAO,MAAM,4BAA4B,8BAAqC,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine - Default Stdio Transport Factory
|
|
3
|
+
*
|
|
4
|
+
* Default implementation of TransportFactory that spawns @toolplex/client
|
|
5
|
+
* using the system's Node.js. This works out-of-box for CLI usage.
|
|
6
|
+
*
|
|
7
|
+
* For desktop apps with bundled dependencies, override this with a custom
|
|
8
|
+
* TransportFactory implementation.
|
|
9
|
+
*/
|
|
10
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
11
|
+
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
12
|
+
import { getToolplexClientPath } from "./paths.js";
|
|
13
|
+
/**
|
|
14
|
+
* Default Transport Factory - spawns @toolplex/client using system Node.js
|
|
15
|
+
*
|
|
16
|
+
* This is suitable for:
|
|
17
|
+
* - CLI applications
|
|
18
|
+
* - Development environments
|
|
19
|
+
* - Any context where system Node.js is available
|
|
20
|
+
*
|
|
21
|
+
* For Electron/desktop apps with bundled Node.js, create a custom
|
|
22
|
+
* TransportFactory that uses the bundled runtime.
|
|
23
|
+
*/
|
|
24
|
+
export class DefaultStdioTransportFactory {
|
|
25
|
+
async createTransport(apiKey, sessionResumeHistory) {
|
|
26
|
+
const toolplexPath = getToolplexClientPath();
|
|
27
|
+
// Build environment for the MCP server
|
|
28
|
+
const env = {
|
|
29
|
+
...process.env,
|
|
30
|
+
TOOLPLEX_API_KEY: apiKey,
|
|
31
|
+
CLIENT_NAME: "toolplex-ai-engine",
|
|
32
|
+
};
|
|
33
|
+
// Add session resume history if provided
|
|
34
|
+
if (sessionResumeHistory) {
|
|
35
|
+
env.TOOLPLEX_SESSION_RESUME_HISTORY = sessionResumeHistory;
|
|
36
|
+
}
|
|
37
|
+
const transport = new StdioClientTransport({
|
|
38
|
+
command: "node", // Uses system Node.js
|
|
39
|
+
args: [toolplexPath],
|
|
40
|
+
env,
|
|
41
|
+
});
|
|
42
|
+
const client = new Client({
|
|
43
|
+
name: "toolplex-ai-engine-client",
|
|
44
|
+
version: "1.0.0",
|
|
45
|
+
});
|
|
46
|
+
await client.connect(transport);
|
|
47
|
+
return { transport, client };
|
|
48
|
+
}
|
|
49
|
+
async closeTransport(session) {
|
|
50
|
+
try {
|
|
51
|
+
await session.client.close();
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Silently continue to ensure cleanup
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Export singleton instance for convenience
|
|
59
|
+
export const defaultStdioTransportFactory = new DefaultStdioTransportFactory();
|
|
60
|
+
//# sourceMappingURL=DefaultStdioTransportFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultStdioTransportFactory.js","sourceRoot":"","sources":["../../src/mcp/DefaultStdioTransportFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,4BAA4B;IACvC,KAAK,CAAC,eAAe,CACnB,MAAc,EACd,oBAA6B;QAE7B,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;QAE7C,uCAAuC;QACvC,MAAM,GAAG,GAA2B;YAClC,GAAI,OAAO,CAAC,GAA8B;YAC1C,gBAAgB,EAAE,MAAM;YACxB,WAAW,EAAE,oBAAoB;SAClC,CAAC;QAEF,yCAAyC;QACzC,IAAI,oBAAoB,EAAE,CAAC;YACzB,GAAG,CAAC,+BAA+B,GAAG,oBAAoB,CAAC;QAC7D,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;YACzC,OAAO,EAAE,MAAM,EAAE,sBAAsB;YACvC,IAAI,EAAE,CAAC,YAAY,CAAC;YACpB,GAAG;SACJ,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,IAAI,EAAE,2BAA2B;YACjC,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAmB;QACtC,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;IACH,CAAC;CACF;AAED,4CAA4C;AAC5C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,4BAA4B,EAAE,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine - MCP Client
|
|
3
|
+
*
|
|
4
|
+
* Core MCP client that manages sessions and tool operations.
|
|
5
|
+
* Uses a TransportFactory for platform-specific transport creation.
|
|
6
|
+
*/
|
|
7
|
+
import type { MCPResult, MCPToolResult, MCPClientConfig } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* MCP Client - manages sessions and provides tool operations
|
|
10
|
+
*/
|
|
11
|
+
export declare class MCPClient {
|
|
12
|
+
private sessions;
|
|
13
|
+
private transportFactory;
|
|
14
|
+
private logger;
|
|
15
|
+
private imageHandler;
|
|
16
|
+
private getCurrentUserId;
|
|
17
|
+
constructor(config: MCPClientConfig);
|
|
18
|
+
/**
|
|
19
|
+
* Creates an MCP session and waits for tools to be initialized
|
|
20
|
+
*
|
|
21
|
+
* CRITICAL: The ToolPlex MCP server fetches tool schemas from the API during startup.
|
|
22
|
+
* This is asynchronous and can take time. We MUST wait for this to complete before
|
|
23
|
+
* returning, otherwise listTools() will return empty schemas.
|
|
24
|
+
*/
|
|
25
|
+
createSession(sessionId: string, apiKey: string, sessionResumeHistory?: string): Promise<MCPResult>;
|
|
26
|
+
/**
|
|
27
|
+
* Lists available tools for a session
|
|
28
|
+
*/
|
|
29
|
+
listTools(sessionId: string): Promise<{
|
|
30
|
+
tools: any[];
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Calls a tool for a session
|
|
34
|
+
*/
|
|
35
|
+
callTool(sessionId: string, toolName: string, args: any): Promise<MCPToolResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Destroys an MCP session
|
|
38
|
+
*/
|
|
39
|
+
destroySession(sessionId: string): Promise<MCPResult>;
|
|
40
|
+
/**
|
|
41
|
+
* Gets all active session IDs
|
|
42
|
+
*/
|
|
43
|
+
getActiveSessions(): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Destroys all MCP sessions (cleanup)
|
|
46
|
+
*/
|
|
47
|
+
destroyAllSessions(): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Gets session info
|
|
50
|
+
*/
|
|
51
|
+
getSessionInfo(sessionId: string): {
|
|
52
|
+
exists: boolean;
|
|
53
|
+
isConnected?: boolean;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Check if a session exists
|
|
57
|
+
*/
|
|
58
|
+
hasSession(sessionId: string): boolean;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=MCPClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPClient.d.ts","sourceRoot":"","sources":["../../src/mcp/MCPClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAEV,SAAS,EACT,aAAa,EACb,eAAe,EAEhB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,gBAAgB,CAAsC;gBAElD,MAAM,EAAE,eAAe;IAOnC;;;;;;OAMG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,MAAM,GAC5B,OAAO,CAAC,SAAS,CAAC;IA2BrB;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IA+B7D;;OAEG;IACG,QAAQ,CACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,aAAa,CAAC;IAyCzB;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAiB3D;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzC;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG;QACjC,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB;IASD;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAGvC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine - MCP Client
|
|
3
|
+
*
|
|
4
|
+
* Core MCP client that manages sessions and tool operations.
|
|
5
|
+
* Uses a TransportFactory for platform-specific transport creation.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* MCP Client - manages sessions and provides tool operations
|
|
9
|
+
*/
|
|
10
|
+
export class MCPClient {
|
|
11
|
+
sessions = new Map();
|
|
12
|
+
transportFactory;
|
|
13
|
+
logger;
|
|
14
|
+
imageHandler;
|
|
15
|
+
getCurrentUserId;
|
|
16
|
+
constructor(config) {
|
|
17
|
+
this.transportFactory = config.transportFactory;
|
|
18
|
+
this.logger = config.logger;
|
|
19
|
+
this.imageHandler = config.imageHandler;
|
|
20
|
+
this.getCurrentUserId = config.getCurrentUserId;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Creates an MCP session and waits for tools to be initialized
|
|
24
|
+
*
|
|
25
|
+
* CRITICAL: The ToolPlex MCP server fetches tool schemas from the API during startup.
|
|
26
|
+
* This is asynchronous and can take time. We MUST wait for this to complete before
|
|
27
|
+
* returning, otherwise listTools() will return empty schemas.
|
|
28
|
+
*/
|
|
29
|
+
async createSession(sessionId, apiKey, sessionResumeHistory) {
|
|
30
|
+
try {
|
|
31
|
+
// Clean up existing session if it exists
|
|
32
|
+
await this.destroySession(sessionId);
|
|
33
|
+
this.logger?.debug("MCPClient: Creating session", { sessionId });
|
|
34
|
+
const session = await this.transportFactory.createTransport(apiKey, sessionResumeHistory);
|
|
35
|
+
this.sessions.set(sessionId, session);
|
|
36
|
+
this.logger?.debug("MCPClient: Session created and stored", {
|
|
37
|
+
sessionId,
|
|
38
|
+
});
|
|
39
|
+
return { success: true };
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
this.logger?.error("MCPClient: Transport creation failed", { error });
|
|
43
|
+
return {
|
|
44
|
+
success: false,
|
|
45
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Lists available tools for a session
|
|
51
|
+
*/
|
|
52
|
+
async listTools(sessionId) {
|
|
53
|
+
this.logger?.debug("MCPClient: Listing tools for session", {
|
|
54
|
+
sessionId,
|
|
55
|
+
availableSessions: Array.from(this.sessions.keys()),
|
|
56
|
+
});
|
|
57
|
+
const session = this.sessions.get(sessionId);
|
|
58
|
+
if (!session) {
|
|
59
|
+
this.logger?.error("MCPClient: No session found in registry", {
|
|
60
|
+
sessionId,
|
|
61
|
+
availableSessions: Array.from(this.sessions.keys()),
|
|
62
|
+
});
|
|
63
|
+
throw new Error(`No MCP client found for session: ${sessionId}`);
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const result = await session.client.listTools();
|
|
67
|
+
this.logger?.debug("MCPClient: Tools listed successfully", {
|
|
68
|
+
sessionId,
|
|
69
|
+
toolCount: result?.tools?.length || 0,
|
|
70
|
+
});
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
this.logger?.error("MCPClient: Failed to list tools", {
|
|
75
|
+
sessionId,
|
|
76
|
+
error,
|
|
77
|
+
});
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Calls a tool for a session
|
|
83
|
+
*/
|
|
84
|
+
async callTool(sessionId, toolName, args) {
|
|
85
|
+
const session = this.sessions.get(sessionId);
|
|
86
|
+
if (!session) {
|
|
87
|
+
throw new Error(`No MCP client found for session: ${sessionId}`);
|
|
88
|
+
}
|
|
89
|
+
const toolCall = {
|
|
90
|
+
name: toolName,
|
|
91
|
+
arguments: args || {},
|
|
92
|
+
};
|
|
93
|
+
const result = await session.client.callTool(toolCall);
|
|
94
|
+
// Process the result to handle images if handler is available
|
|
95
|
+
if (this.imageHandler &&
|
|
96
|
+
this.getCurrentUserId &&
|
|
97
|
+
result?.content &&
|
|
98
|
+
Array.isArray(result.content)) {
|
|
99
|
+
const hasImages = result.content.some((item) => item?.type === "image" && item?.data);
|
|
100
|
+
if (hasImages) {
|
|
101
|
+
const userId = this.getCurrentUserId();
|
|
102
|
+
if (userId) {
|
|
103
|
+
await this.imageHandler.initialize(userId);
|
|
104
|
+
const processed = await this.imageHandler.processToolResult(result);
|
|
105
|
+
return {
|
|
106
|
+
...result,
|
|
107
|
+
content: processed.content,
|
|
108
|
+
savedImages: processed.savedImages,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Destroys an MCP session
|
|
117
|
+
*/
|
|
118
|
+
async destroySession(sessionId) {
|
|
119
|
+
try {
|
|
120
|
+
const session = this.sessions.get(sessionId);
|
|
121
|
+
if (session) {
|
|
122
|
+
await this.transportFactory.closeTransport(session);
|
|
123
|
+
this.sessions.delete(sessionId);
|
|
124
|
+
}
|
|
125
|
+
return { success: true };
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Gets all active session IDs
|
|
136
|
+
*/
|
|
137
|
+
getActiveSessions() {
|
|
138
|
+
return Array.from(this.sessions.keys());
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Destroys all MCP sessions (cleanup)
|
|
142
|
+
*/
|
|
143
|
+
async destroyAllSessions() {
|
|
144
|
+
const sessionIds = this.getActiveSessions();
|
|
145
|
+
await Promise.all(sessionIds.map((id) => this.destroySession(id)));
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Gets session info
|
|
149
|
+
*/
|
|
150
|
+
getSessionInfo(sessionId) {
|
|
151
|
+
const session = this.sessions.get(sessionId);
|
|
152
|
+
if (!session) {
|
|
153
|
+
return { exists: false };
|
|
154
|
+
}
|
|
155
|
+
return { exists: true, isConnected: true };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Check if a session exists
|
|
159
|
+
*/
|
|
160
|
+
hasSession(sessionId) {
|
|
161
|
+
return this.sessions.has(sessionId);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=MCPClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPClient.js","sourceRoot":"","sources":["../../src/mcp/MCPClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine - MCP Module
|
|
3
|
+
*
|
|
4
|
+
* MCP (Model Context Protocol) client for ToolPlex.
|
|
5
|
+
*/
|
|
6
|
+
export { MCPClient } from "./MCPClient.js";
|
|
7
|
+
export type { MCPSession, MCPResult, MCPTool, MCPToolResult, TransportFactory, MCPClientConfig, } from "./types.js";
|
|
8
|
+
export { getToolplexClientPath } from "./paths.js";
|
|
9
|
+
export { DefaultStdioTransportFactory, defaultStdioTransportFactory, } from "./DefaultStdioTransportFactory.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine - MCP Module
|
|
3
|
+
*
|
|
4
|
+
* MCP (Model Context Protocol) client for ToolPlex.
|
|
5
|
+
*/
|
|
6
|
+
export { MCPClient } from "./MCPClient.js";
|
|
7
|
+
// Path utilities
|
|
8
|
+
export { getToolplexClientPath } from "./paths.js";
|
|
9
|
+
// Default transport factory (uses system Node.js)
|
|
10
|
+
export { DefaultStdioTransportFactory, defaultStdioTransportFactory, } from "./DefaultStdioTransportFactory.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAU3C,iBAAiB;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,kDAAkD;AAClD,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine - MCP Paths
|
|
3
|
+
*
|
|
4
|
+
* Utilities for locating @toolplex/client MCP server.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Get the path to @toolplex/client's MCP server entry point.
|
|
8
|
+
*
|
|
9
|
+
* This resolves the path regardless of where npm installs the package
|
|
10
|
+
* (hoisted or nested in node_modules).
|
|
11
|
+
*
|
|
12
|
+
* @returns Path to the MCP server index.js
|
|
13
|
+
* @throws Error if @toolplex/client cannot be found
|
|
14
|
+
*/
|
|
15
|
+
export declare function getToolplexClientPath(): string;
|
|
16
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/mcp/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CA+D9C"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine - MCP Paths
|
|
3
|
+
*
|
|
4
|
+
* Utilities for locating @toolplex/client MCP server.
|
|
5
|
+
*/
|
|
6
|
+
import path from "path";
|
|
7
|
+
import fs from "fs";
|
|
8
|
+
import { fileURLToPath } from "url";
|
|
9
|
+
import { createRequire } from "module";
|
|
10
|
+
// Create __dirname equivalent for ESM
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = path.dirname(__filename);
|
|
13
|
+
// Create require function for ESM (for require.resolve)
|
|
14
|
+
const require = createRequire(import.meta.url);
|
|
15
|
+
/**
|
|
16
|
+
* Get the path to @toolplex/client's MCP server entry point.
|
|
17
|
+
*
|
|
18
|
+
* This resolves the path regardless of where npm installs the package
|
|
19
|
+
* (hoisted or nested in node_modules).
|
|
20
|
+
*
|
|
21
|
+
* @returns Path to the MCP server index.js
|
|
22
|
+
* @throws Error if @toolplex/client cannot be found
|
|
23
|
+
*/
|
|
24
|
+
export function getToolplexClientPath() {
|
|
25
|
+
// Try to resolve using require.resolve
|
|
26
|
+
try {
|
|
27
|
+
const clientPackageJson = require.resolve("@toolplex/client/package.json");
|
|
28
|
+
const clientDir = path.dirname(clientPackageJson);
|
|
29
|
+
const mcpServerPath = path.join(clientDir, "dist", "mcp-server", "index.js");
|
|
30
|
+
if (fs.existsSync(mcpServerPath)) {
|
|
31
|
+
return mcpServerPath;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// require.resolve failed, try fallback paths
|
|
36
|
+
}
|
|
37
|
+
// Fallback: try common paths
|
|
38
|
+
const fallbackPaths = [
|
|
39
|
+
// From process.cwd() (development)
|
|
40
|
+
path.resolve(process.cwd(), "node_modules/@toolplex/client/dist/mcp-server/index.js"),
|
|
41
|
+
// From this module's location (when installed as dependency)
|
|
42
|
+
path.resolve(__dirname, "../../node_modules/@toolplex/client/dist/mcp-server/index.js"),
|
|
43
|
+
path.resolve(__dirname, "../../../node_modules/@toolplex/client/dist/mcp-server/index.js"),
|
|
44
|
+
path.resolve(__dirname, "../../../../node_modules/@toolplex/client/dist/mcp-server/index.js"),
|
|
45
|
+
];
|
|
46
|
+
// Add Electron production path if available (process.resourcesPath is Electron-specific)
|
|
47
|
+
const electronProcess = process;
|
|
48
|
+
if (electronProcess.resourcesPath) {
|
|
49
|
+
fallbackPaths.push(path.resolve(electronProcess.resourcesPath, "app/node_modules/@toolplex/client/dist/mcp-server/index.js"));
|
|
50
|
+
}
|
|
51
|
+
for (const fallbackPath of fallbackPaths) {
|
|
52
|
+
if (fs.existsSync(fallbackPath)) {
|
|
53
|
+
return fallbackPath;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
throw new Error("@toolplex/client not found. Make sure @toolplex/ai-engine is properly installed.");
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/mcp/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,sCAAsC;AACtC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,wDAAwD;AACxD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB;IACnC,uCAAuC;IACvC,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAC7B,SAAS,EACT,MAAM,EACN,YAAY,EACZ,UAAU,CACX,CAAC;QAEF,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,OAAO,aAAa,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;IAED,6BAA6B;IAC7B,MAAM,aAAa,GAAG;QACpB,mCAAmC;QACnC,IAAI,CAAC,OAAO,CACV,OAAO,CAAC,GAAG,EAAE,EACb,wDAAwD,CACzD;QACD,6DAA6D;QAC7D,IAAI,CAAC,OAAO,CACV,SAAS,EACT,8DAA8D,CAC/D;QACD,IAAI,CAAC,OAAO,CACV,SAAS,EACT,iEAAiE,CAClE;QACD,IAAI,CAAC,OAAO,CACV,SAAS,EACT,oEAAoE,CACrE;KACF,CAAC;IAEF,yFAAyF;IACzF,MAAM,eAAe,GAAG,OAEvB,CAAC;IACF,IAAI,eAAe,CAAC,aAAa,EAAE,CAAC;QAClC,aAAa,CAAC,IAAI,CAChB,IAAI,CAAC,OAAO,CACV,eAAe,CAAC,aAAa,EAC7B,4DAA4D,CAC7D,CACF,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @toolplex/ai-engine - MCP Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for MCP (Model Context Protocol) integration.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* MCP Session - holds the client connection
|
|
8
|
+
* Client type is 'any' to avoid version mismatches between ai-engine and consumers
|
|
9
|
+
*/
|
|
10
|
+
export interface MCPSession {
|
|
11
|
+
client: any;
|
|
12
|
+
transport: any;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Result from MCP operations
|
|
16
|
+
*/
|
|
17
|
+
export interface MCPResult {
|
|
18
|
+
success: boolean;
|
|
19
|
+
data?: any;
|
|
20
|
+
error?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* MCP Tool definition from server
|
|
24
|
+
*/
|
|
25
|
+
export interface MCPTool {
|
|
26
|
+
name: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
inputSchema?: any;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* MCP Tool call result
|
|
32
|
+
*/
|
|
33
|
+
export interface MCPToolResult {
|
|
34
|
+
content: Array<{
|
|
35
|
+
type: string;
|
|
36
|
+
text?: string;
|
|
37
|
+
data?: any;
|
|
38
|
+
[key: string]: any;
|
|
39
|
+
}>;
|
|
40
|
+
isError?: boolean;
|
|
41
|
+
[key: string]: any;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Transport factory interface - platforms implement this
|
|
45
|
+
*/
|
|
46
|
+
export interface TransportFactory {
|
|
47
|
+
/**
|
|
48
|
+
* Create a transport and connect to the MCP server
|
|
49
|
+
* @param apiKey - ToolPlex API key
|
|
50
|
+
* @param sessionResumeHistory - Optional session history for resuming
|
|
51
|
+
* @returns Connected MCP session
|
|
52
|
+
*/
|
|
53
|
+
createTransport(apiKey: string, sessionResumeHistory?: string): Promise<MCPSession>;
|
|
54
|
+
/**
|
|
55
|
+
* Close a transport
|
|
56
|
+
*/
|
|
57
|
+
closeTransport(session: MCPSession): Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* MCP Client configuration
|
|
61
|
+
*/
|
|
62
|
+
export interface MCPClientConfig {
|
|
63
|
+
transportFactory: TransportFactory;
|
|
64
|
+
logger?: {
|
|
65
|
+
debug: (message: string, meta?: any) => void;
|
|
66
|
+
info: (message: string, meta?: any) => void;
|
|
67
|
+
warn: (message: string, meta?: any) => void;
|
|
68
|
+
error: (message: string, meta?: any) => void;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Optional image handler for processing image results
|
|
72
|
+
*/
|
|
73
|
+
imageHandler?: {
|
|
74
|
+
initialize(userId: string): Promise<void>;
|
|
75
|
+
processToolResult(result: any): Promise<{
|
|
76
|
+
content: any[];
|
|
77
|
+
savedImages?: any[];
|
|
78
|
+
}>;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Optional function to get current user ID (for image handling)
|
|
82
|
+
*/
|
|
83
|
+
getCurrentUserId?: () => string | null;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,GAAG,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,eAAe,CACb,MAAM,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,MAAM,GAC5B,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC7C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC5C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC5C,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;KAC9C,CAAC;IACF;;OAEG;IACH,YAAY,CAAC,EAAE;QACb,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,iBAAiB,CACf,MAAM,EAAE,GAAG,GACV,OAAO,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YAAC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAA;SAAE,CAAC,CAAC;KACrD,CAAC;IACF;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|