@inkeep/agents-sdk 0.1.0 → 0.1.6
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.md +22 -17
- package/SUPPLEMENTAL_TERMS.md +40 -0
- package/dist/index.cjs +2863 -0
- package/dist/index.d.cts +919 -0
- package/dist/index.d.ts +919 -11
- package/dist/index.js +2840 -10
- package/package.json +24 -18
- package/dist/__tests__/utils/testTenant.d.ts +0 -7
- package/dist/__tests__/utils/testTenant.d.ts.map +0 -1
- package/dist/__tests__/utils/testTenant.js +0 -10
- package/dist/__tests__/utils/testTenant.js.map +0 -1
- package/dist/agent.d.ts +0 -47
- package/dist/agent.d.ts.map +0 -1
- package/dist/agent.js +0 -601
- package/dist/agent.js.map +0 -1
- package/dist/artifact-component.d.ts +0 -27
- package/dist/artifact-component.d.ts.map +0 -1
- package/dist/artifact-component.js +0 -117
- package/dist/artifact-component.js.map +0 -1
- package/dist/builders.d.ts +0 -211
- package/dist/builders.d.ts.map +0 -1
- package/dist/builders.js +0 -244
- package/dist/builders.js.map +0 -1
- package/dist/data-component.d.ts +0 -25
- package/dist/data-component.d.ts.map +0 -1
- package/dist/data-component.js +0 -113
- package/dist/data-component.js.map +0 -1
- package/dist/environment-settings.d.ts +0 -28
- package/dist/environment-settings.d.ts.map +0 -1
- package/dist/environment-settings.js +0 -78
- package/dist/environment-settings.js.map +0 -1
- package/dist/externalAgent.d.ts +0 -58
- package/dist/externalAgent.d.ts.map +0 -1
- package/dist/externalAgent.js +0 -161
- package/dist/externalAgent.js.map +0 -1
- package/dist/graph.d.ts +0 -200
- package/dist/graph.d.ts.map +0 -1
- package/dist/graph.js +0 -1294
- package/dist/graph.js.map +0 -1
- package/dist/graphFullClient.d.ts +0 -22
- package/dist/graphFullClient.d.ts.map +0 -1
- package/dist/graphFullClient.js +0 -189
- package/dist/graphFullClient.js.map +0 -1
- package/dist/hosted-tool-manager.d.ts +0 -28
- package/dist/hosted-tool-manager.d.ts.map +0 -1
- package/dist/hosted-tool-manager.js +0 -256
- package/dist/hosted-tool-manager.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/ipc-hosted-tool-manager.d.ts +0 -51
- package/dist/ipc-hosted-tool-manager.d.ts.map +0 -1
- package/dist/ipc-hosted-tool-manager.js +0 -409
- package/dist/ipc-hosted-tool-manager.js.map +0 -1
- package/dist/module-hosted-tool-manager.d.ts +0 -37
- package/dist/module-hosted-tool-manager.d.ts.map +0 -1
- package/dist/module-hosted-tool-manager.js +0 -375
- package/dist/module-hosted-tool-manager.js.map +0 -1
- package/dist/runner.d.ts +0 -38
- package/dist/runner.d.ts.map +0 -1
- package/dist/runner.js +0 -164
- package/dist/runner.js.map +0 -1
- package/dist/tool.d.ts +0 -29
- package/dist/tool.d.ts.map +0 -1
- package/dist/tool.js +0 -122
- package/dist/tool.js.map +0 -1
- package/dist/types.d.ts +0 -285
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -37
- package/dist/types.js.map +0 -1
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { type ChildProcess } from 'node:child_process';
|
|
2
|
-
export interface IPCToolFunction {
|
|
3
|
-
name: string;
|
|
4
|
-
description?: string;
|
|
5
|
-
execute: (params: any) => Promise<any>;
|
|
6
|
-
parameters?: Record<string, any>;
|
|
7
|
-
}
|
|
8
|
-
export interface IPCMessage {
|
|
9
|
-
type: 'execute-function' | 'function-result' | 'server-ready' | 'error';
|
|
10
|
-
requestId?: string;
|
|
11
|
-
toolName?: string;
|
|
12
|
-
params?: any;
|
|
13
|
-
result?: any;
|
|
14
|
-
error?: string;
|
|
15
|
-
port?: number;
|
|
16
|
-
message?: string;
|
|
17
|
-
}
|
|
18
|
-
export interface IPCHostedToolServer {
|
|
19
|
-
toolFunction: IPCToolFunction;
|
|
20
|
-
process?: ChildProcess;
|
|
21
|
-
port: number;
|
|
22
|
-
serverUrl: string;
|
|
23
|
-
status: 'starting' | 'running' | 'stopped' | 'error';
|
|
24
|
-
pid?: number;
|
|
25
|
-
serverFile: string;
|
|
26
|
-
}
|
|
27
|
-
export declare class IPCHostedToolManager {
|
|
28
|
-
private servers;
|
|
29
|
-
private toolFunctions;
|
|
30
|
-
private pendingRequests;
|
|
31
|
-
private portCounter;
|
|
32
|
-
private readonly baseDir;
|
|
33
|
-
private requestIdCounter;
|
|
34
|
-
constructor();
|
|
35
|
-
deployIPCTool(toolFunction: IPCToolFunction): Promise<IPCHostedToolServer>;
|
|
36
|
-
stopTool(toolName: string): Promise<void>;
|
|
37
|
-
getServer(toolName: string): IPCHostedToolServer | undefined;
|
|
38
|
-
getAllServers(): IPCHostedToolServer[];
|
|
39
|
-
private getToolId;
|
|
40
|
-
private getNextPort;
|
|
41
|
-
private generateRequestId;
|
|
42
|
-
private generateMCPServerChild;
|
|
43
|
-
private createIPCMCPServerCode;
|
|
44
|
-
private startIPCServer;
|
|
45
|
-
private handleIPCMessage;
|
|
46
|
-
private handleFunctionExecution;
|
|
47
|
-
private cleanupPendingRequests;
|
|
48
|
-
private waitForServerReady;
|
|
49
|
-
}
|
|
50
|
-
export declare const ipcHostedToolManager: IPCHostedToolManager;
|
|
51
|
-
//# sourceMappingURL=ipc-hosted-tool-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ipc-hosted-tool-manager.d.ts","sourceRoot":"","sources":["../src/ipc-hosted-tool-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAS,MAAM,oBAAoB,CAAC;AAO9D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,cAAc,GAAG,OAAO,CAAC;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,eAAe,CAAC;IAC9B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,eAAe,CAGnB;IACJ,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,gBAAgB,CAAK;;IASvB,aAAa,CAAC,YAAY,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiD1E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC/C,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAK5D,aAAa,IAAI,mBAAmB,EAAE;IAItC,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,iBAAiB;YAIX,sBAAsB;IAgCpC,OAAO,CAAC,sBAAsB;YA6JhB,cAAc;IAsD5B,OAAO,CAAC,gBAAgB;YAmBV,uBAAuB;IA8CrC,OAAO,CAAC,sBAAsB;YAWhB,kBAAkB;CAuBjC;AAGD,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
|
|
@@ -1,409 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { getLogger } from '@inkeep/agents-core';
|
|
5
|
-
const logger = getLogger('ipc-hosted-tool-manager');
|
|
6
|
-
export class IPCHostedToolManager {
|
|
7
|
-
servers = new Map();
|
|
8
|
-
toolFunctions = new Map();
|
|
9
|
-
pendingRequests = new Map();
|
|
10
|
-
portCounter = 3011;
|
|
11
|
-
baseDir;
|
|
12
|
-
requestIdCounter = 0;
|
|
13
|
-
constructor() {
|
|
14
|
-
this.baseDir = join(process.cwd(), '.ipc-hosted-tools');
|
|
15
|
-
if (!existsSync(this.baseDir)) {
|
|
16
|
-
mkdirSync(this.baseDir, { recursive: true });
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
async deployIPCTool(toolFunction) {
|
|
20
|
-
const toolId = this.getToolId(toolFunction.name);
|
|
21
|
-
// Check if tool is already deployed
|
|
22
|
-
if (this.servers.has(toolId)) {
|
|
23
|
-
const existingServer = this.servers.get(toolId);
|
|
24
|
-
if (existingServer.status === 'running') {
|
|
25
|
-
logger.info({ toolId }, 'IPC tool already deployed and running');
|
|
26
|
-
return existingServer;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
const port = this.getNextPort();
|
|
30
|
-
const serverUrl = `http://localhost:${port}/mcp`;
|
|
31
|
-
// Store the tool function in our registry (NO SERIALIZATION!)
|
|
32
|
-
this.toolFunctions.set(toolId, toolFunction);
|
|
33
|
-
const server = {
|
|
34
|
-
toolFunction,
|
|
35
|
-
port,
|
|
36
|
-
serverUrl,
|
|
37
|
-
status: 'starting',
|
|
38
|
-
serverFile: '',
|
|
39
|
-
};
|
|
40
|
-
this.servers.set(toolId, server);
|
|
41
|
-
try {
|
|
42
|
-
await this.generateMCPServerChild(server);
|
|
43
|
-
await this.startIPCServer(server);
|
|
44
|
-
// Wait for server to be ready
|
|
45
|
-
await this.waitForServerReady(server);
|
|
46
|
-
server.status = 'running';
|
|
47
|
-
logger.info({ toolId, port, serverUrl }, 'IPC tool deployed successfully');
|
|
48
|
-
return server;
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
server.status = 'error';
|
|
52
|
-
logger.error({ toolId, error: error instanceof Error ? error.message : 'Unknown error' }, 'Failed to deploy IPC tool');
|
|
53
|
-
throw error;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
async stopTool(toolName) {
|
|
57
|
-
const toolId = this.getToolId(toolName);
|
|
58
|
-
const server = this.servers.get(toolId);
|
|
59
|
-
if (!server || !server.process) {
|
|
60
|
-
logger.warn({ toolId }, 'IPC tool not found or not running');
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
return new Promise((resolve) => {
|
|
64
|
-
server.process.on('exit', () => {
|
|
65
|
-
server.status = 'stopped';
|
|
66
|
-
server.process = undefined;
|
|
67
|
-
server.pid = undefined;
|
|
68
|
-
// Clean up function registry and pending requests
|
|
69
|
-
this.toolFunctions.delete(toolId);
|
|
70
|
-
this.cleanupPendingRequests(toolId);
|
|
71
|
-
logger.info({ toolId }, 'IPC tool stopped successfully');
|
|
72
|
-
resolve();
|
|
73
|
-
});
|
|
74
|
-
server.process.kill('SIGTERM');
|
|
75
|
-
// Force kill after 5 seconds
|
|
76
|
-
setTimeout(() => {
|
|
77
|
-
if (server.process && !server.process.killed) {
|
|
78
|
-
server.process.kill('SIGKILL');
|
|
79
|
-
}
|
|
80
|
-
}, 5000);
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
getServer(toolName) {
|
|
84
|
-
const toolId = this.getToolId(toolName);
|
|
85
|
-
return this.servers.get(toolId);
|
|
86
|
-
}
|
|
87
|
-
getAllServers() {
|
|
88
|
-
return Array.from(this.servers.values());
|
|
89
|
-
}
|
|
90
|
-
getToolId(name) {
|
|
91
|
-
return name
|
|
92
|
-
.toLowerCase()
|
|
93
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
94
|
-
.replace(/^-+|-+$/g, '');
|
|
95
|
-
}
|
|
96
|
-
getNextPort() {
|
|
97
|
-
return this.portCounter++;
|
|
98
|
-
}
|
|
99
|
-
generateRequestId() {
|
|
100
|
-
return `req_${++this.requestIdCounter}_${Date.now()}`;
|
|
101
|
-
}
|
|
102
|
-
async generateMCPServerChild(server) {
|
|
103
|
-
const toolId = this.getToolId(server.toolFunction.name);
|
|
104
|
-
const serverDir = join(this.baseDir, toolId);
|
|
105
|
-
if (!existsSync(serverDir)) {
|
|
106
|
-
mkdirSync(serverDir, { recursive: true });
|
|
107
|
-
}
|
|
108
|
-
// Create the minimal MCP server that communicates via IPC
|
|
109
|
-
const serverCode = this.createIPCMCPServerCode(server, toolId);
|
|
110
|
-
const serverFile = join(serverDir, 'server.mjs');
|
|
111
|
-
writeFileSync(serverFile, serverCode, 'utf8');
|
|
112
|
-
server.serverFile = serverFile;
|
|
113
|
-
// Create package.json for the child server
|
|
114
|
-
const packageJson = {
|
|
115
|
-
name: `ipc-hosted-tool-${toolId}`,
|
|
116
|
-
version: '1.0.0',
|
|
117
|
-
type: 'module',
|
|
118
|
-
main: 'server.mjs',
|
|
119
|
-
dependencies: {
|
|
120
|
-
'@modelcontextprotocol/sdk': '^1.12.1',
|
|
121
|
-
zod: '^3.25.31',
|
|
122
|
-
},
|
|
123
|
-
};
|
|
124
|
-
writeFileSync(join(serverDir, 'package.json'), JSON.stringify(packageJson, null, 2), 'utf8');
|
|
125
|
-
logger.info({ toolId, serverFile }, 'Generated IPC-based MCP server code');
|
|
126
|
-
}
|
|
127
|
-
createIPCMCPServerCode(server, toolId) {
|
|
128
|
-
return `#!/usr/bin/env node
|
|
129
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
130
|
-
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
131
|
-
import { z } from 'zod';
|
|
132
|
-
import { createServer } from 'node:http';
|
|
133
|
-
|
|
134
|
-
const server = new McpServer({
|
|
135
|
-
name: '${server.toolFunction.name}',
|
|
136
|
-
version: '1.0.0',
|
|
137
|
-
}, { capabilities: { logging: {} } });
|
|
138
|
-
|
|
139
|
-
// Parameter schema
|
|
140
|
-
const parameterSchema = z.object({${server.toolFunction.parameters
|
|
141
|
-
? Object.keys(server.toolFunction.parameters)
|
|
142
|
-
.map((key) => `\n ${key}: z.any()`)
|
|
143
|
-
.join(',') + '\n'
|
|
144
|
-
: ''}});
|
|
145
|
-
|
|
146
|
-
// IPC communication state
|
|
147
|
-
const pendingRequests = new Map();
|
|
148
|
-
let requestIdCounter = 0;
|
|
149
|
-
|
|
150
|
-
// Generate unique request ID
|
|
151
|
-
function generateRequestId() {
|
|
152
|
-
return \`child_req_\${++requestIdCounter}_\${Date.now()}\`;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// Execute function via IPC to parent process
|
|
156
|
-
async function executeViaIPC(params) {
|
|
157
|
-
return new Promise((resolve, reject) => {
|
|
158
|
-
const requestId = generateRequestId();
|
|
159
|
-
|
|
160
|
-
// Set up timeout (30 seconds)
|
|
161
|
-
const timeout = setTimeout(() => {
|
|
162
|
-
if (pendingRequests.has(requestId)) {
|
|
163
|
-
pendingRequests.delete(requestId);
|
|
164
|
-
reject(new Error('Function execution timeout'));
|
|
165
|
-
}
|
|
166
|
-
}, 30000);
|
|
167
|
-
|
|
168
|
-
// Store promise handlers
|
|
169
|
-
pendingRequests.set(requestId, { resolve, reject, timeout });
|
|
170
|
-
|
|
171
|
-
// Send execution request to parent process
|
|
172
|
-
process.send({
|
|
173
|
-
type: 'execute-function',
|
|
174
|
-
requestId,
|
|
175
|
-
toolName: '${server.toolFunction.name}',
|
|
176
|
-
params
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// Handle IPC messages from parent process
|
|
182
|
-
process.on('message', (message) => {
|
|
183
|
-
if (message.type === 'function-result') {
|
|
184
|
-
const { requestId, result, error } = message;
|
|
185
|
-
const pending = pendingRequests.get(requestId);
|
|
186
|
-
|
|
187
|
-
if (pending) {
|
|
188
|
-
clearTimeout(pending.timeout);
|
|
189
|
-
pendingRequests.delete(requestId);
|
|
190
|
-
|
|
191
|
-
if (error) {
|
|
192
|
-
pending.reject(new Error(error));
|
|
193
|
-
} else {
|
|
194
|
-
pending.resolve(result);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
// Register the tool with MCP server
|
|
201
|
-
server.tool('${toolId}', '${server.toolFunction.description || ''}', parameterSchema.shape, async (params) => {
|
|
202
|
-
try {
|
|
203
|
-
const result = await executeViaIPC(params);
|
|
204
|
-
return {
|
|
205
|
-
content: [{
|
|
206
|
-
type: 'text',
|
|
207
|
-
text: typeof result === 'string' ? result : JSON.stringify(result)
|
|
208
|
-
}]
|
|
209
|
-
};
|
|
210
|
-
} catch (error) {
|
|
211
|
-
return {
|
|
212
|
-
content: [{
|
|
213
|
-
type: 'text',
|
|
214
|
-
text: \`Error executing tool: \${error instanceof Error ? error.message : 'Unknown error'}\`
|
|
215
|
-
}],
|
|
216
|
-
isError: true
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
// Create HTTP server
|
|
222
|
-
const httpServer = createServer();
|
|
223
|
-
const transport = new StreamableHTTPServerTransport({});
|
|
224
|
-
|
|
225
|
-
httpServer.on('request', async (req, res) => {
|
|
226
|
-
if (req.url === '/mcp' && req.method === 'POST') {
|
|
227
|
-
let body = '';
|
|
228
|
-
req.on('data', chunk => body += chunk);
|
|
229
|
-
req.on('end', async () => {
|
|
230
|
-
try {
|
|
231
|
-
const jsonBody = JSON.parse(body);
|
|
232
|
-
await transport.handleRequest(req, res, jsonBody);
|
|
233
|
-
} catch (error) {
|
|
234
|
-
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
235
|
-
res.end(JSON.stringify({ error: 'Invalid JSON' }));
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
} else if (req.url === '/health' && req.method === 'GET') {
|
|
239
|
-
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
240
|
-
res.end(JSON.stringify({
|
|
241
|
-
status: 'healthy',
|
|
242
|
-
tool: '${server.toolFunction.name}',
|
|
243
|
-
type: 'ipc-hosted'
|
|
244
|
-
}));
|
|
245
|
-
} else {
|
|
246
|
-
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
247
|
-
res.end(JSON.stringify({ error: 'Not found' }));
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
// Start the server
|
|
252
|
-
await server.connect(transport);
|
|
253
|
-
httpServer.listen(${server.port}, () => {
|
|
254
|
-
console.log(\`IPC MCP tool server '${server.toolFunction.name}' listening on port ${server.port}\`);
|
|
255
|
-
|
|
256
|
-
// Notify parent that server is ready
|
|
257
|
-
if (process.send) {
|
|
258
|
-
process.send({
|
|
259
|
-
type: 'server-ready',
|
|
260
|
-
port: ${server.port},
|
|
261
|
-
toolName: '${server.toolFunction.name}'
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
// Handle graceful shutdown
|
|
267
|
-
process.on('SIGTERM', () => {
|
|
268
|
-
console.log('Received SIGTERM, shutting down gracefully');
|
|
269
|
-
httpServer.close(() => {
|
|
270
|
-
console.log('Server stopped');
|
|
271
|
-
process.exit(0);
|
|
272
|
-
});
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
process.on('disconnect', () => {
|
|
276
|
-
console.log('Parent process disconnected, shutting down');
|
|
277
|
-
process.exit(0);
|
|
278
|
-
});
|
|
279
|
-
`;
|
|
280
|
-
}
|
|
281
|
-
async startIPCServer(server) {
|
|
282
|
-
const toolId = this.getToolId(server.toolFunction.name);
|
|
283
|
-
const serverDir = join(this.baseDir, toolId);
|
|
284
|
-
const serverFile = server.serverFile;
|
|
285
|
-
return new Promise((resolve, reject) => {
|
|
286
|
-
// Spawn child process with IPC enabled
|
|
287
|
-
const childProcess = spawn('node', [serverFile], {
|
|
288
|
-
cwd: serverDir,
|
|
289
|
-
stdio: ['ignore', 'pipe', 'pipe', 'ipc'], // IPC channel is crucial
|
|
290
|
-
detached: false,
|
|
291
|
-
});
|
|
292
|
-
server.process = childProcess;
|
|
293
|
-
server.pid = childProcess.pid;
|
|
294
|
-
// Handle IPC messages from child process
|
|
295
|
-
childProcess.on('message', (message) => {
|
|
296
|
-
this.handleIPCMessage(message, toolId, childProcess);
|
|
297
|
-
});
|
|
298
|
-
childProcess.stdout?.on('data', (data) => {
|
|
299
|
-
logger.info({ toolId }, `IPC tool server stdout: ${data.toString().trim()}`);
|
|
300
|
-
});
|
|
301
|
-
childProcess.stderr?.on('data', (data) => {
|
|
302
|
-
logger.error({ toolId }, `IPC tool server stderr: ${data.toString().trim()}`);
|
|
303
|
-
});
|
|
304
|
-
childProcess.on('error', (error) => {
|
|
305
|
-
logger.error({ toolId, error: error.message }, 'Failed to start IPC tool server');
|
|
306
|
-
reject(error);
|
|
307
|
-
});
|
|
308
|
-
childProcess.on('exit', (code, signal) => {
|
|
309
|
-
logger.info({ toolId, code, signal }, 'IPC tool server process exited');
|
|
310
|
-
server.status = 'stopped';
|
|
311
|
-
server.process = undefined;
|
|
312
|
-
server.pid = undefined;
|
|
313
|
-
// Clean up any pending requests for this tool
|
|
314
|
-
this.cleanupPendingRequests(toolId);
|
|
315
|
-
});
|
|
316
|
-
// Give the process a moment to start
|
|
317
|
-
setTimeout(() => {
|
|
318
|
-
if (childProcess.pid) {
|
|
319
|
-
resolve();
|
|
320
|
-
}
|
|
321
|
-
else {
|
|
322
|
-
reject(new Error('Failed to start IPC server process'));
|
|
323
|
-
}
|
|
324
|
-
}, 1000);
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
handleIPCMessage(message, toolId, childProcess) {
|
|
328
|
-
switch (message.type) {
|
|
329
|
-
case 'execute-function':
|
|
330
|
-
this.handleFunctionExecution(message, childProcess);
|
|
331
|
-
break;
|
|
332
|
-
case 'server-ready':
|
|
333
|
-
logger.info({ toolId, port: message.port }, 'IPC tool server reported ready');
|
|
334
|
-
break;
|
|
335
|
-
case 'error':
|
|
336
|
-
logger.error({ toolId, error: message.message }, 'IPC tool server error');
|
|
337
|
-
break;
|
|
338
|
-
default:
|
|
339
|
-
logger.warn({ toolId, messageType: message.type }, 'Unknown IPC message type');
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
async handleFunctionExecution(message, childProcess) {
|
|
343
|
-
const { requestId, toolName, params } = message;
|
|
344
|
-
const toolId = this.getToolId(toolName);
|
|
345
|
-
const toolFunction = this.toolFunctions.get(toolId);
|
|
346
|
-
if (!toolFunction) {
|
|
347
|
-
childProcess.send({
|
|
348
|
-
type: 'function-result',
|
|
349
|
-
requestId,
|
|
350
|
-
error: `Tool function not found: ${toolName}`,
|
|
351
|
-
});
|
|
352
|
-
return;
|
|
353
|
-
}
|
|
354
|
-
try {
|
|
355
|
-
logger.debug({ toolId, requestId, params }, 'Executing tool function in parent process');
|
|
356
|
-
// Execute the ACTUAL function object (NO SERIALIZATION!)
|
|
357
|
-
const result = await toolFunction.execute(params);
|
|
358
|
-
childProcess.send({
|
|
359
|
-
type: 'function-result',
|
|
360
|
-
requestId,
|
|
361
|
-
result,
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
catch (error) {
|
|
365
|
-
logger.error({
|
|
366
|
-
toolId,
|
|
367
|
-
requestId,
|
|
368
|
-
error: error instanceof Error ? error.message : 'Unknown error',
|
|
369
|
-
}, 'Tool function execution failed');
|
|
370
|
-
childProcess.send({
|
|
371
|
-
type: 'function-result',
|
|
372
|
-
requestId,
|
|
373
|
-
error: error instanceof Error ? error.message : 'Unknown error',
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
cleanupPendingRequests(toolId) {
|
|
378
|
-
// Clean up any pending requests for this tool
|
|
379
|
-
for (const [requestId, pending] of this.pendingRequests.entries()) {
|
|
380
|
-
if (requestId.includes(toolId)) {
|
|
381
|
-
clearTimeout(pending.timeout);
|
|
382
|
-
pending.reject(new Error('Tool server stopped'));
|
|
383
|
-
this.pendingRequests.delete(requestId);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
async waitForServerReady(server, maxRetries = 10) {
|
|
388
|
-
for (let i = 0; i < maxRetries; i++) {
|
|
389
|
-
try {
|
|
390
|
-
const response = await fetch(`http://localhost:${server.port}/health`);
|
|
391
|
-
if (response.ok) {
|
|
392
|
-
const healthData = await response.json();
|
|
393
|
-
if (healthData.type === 'ipc-hosted') {
|
|
394
|
-
logger.info({ toolId: this.getToolId(server.toolFunction.name) }, 'IPC server health check passed');
|
|
395
|
-
return;
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
catch (error) {
|
|
400
|
-
// Server not ready yet
|
|
401
|
-
}
|
|
402
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
403
|
-
}
|
|
404
|
-
throw new Error(`IPC server failed to become ready after ${maxRetries} attempts`);
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
// Singleton instance
|
|
408
|
-
export const ipcHostedToolManager = new IPCHostedToolManager();
|
|
409
|
-
//# sourceMappingURL=ipc-hosted-tool-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ipc-hosted-tool-manager.js","sourceRoot":"","sources":["../src/ipc-hosted-tool-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { type ChildProcess } from 'node:child_process';
|
|
2
|
-
export interface InlineToolFunction {
|
|
3
|
-
name: string;
|
|
4
|
-
description?: string;
|
|
5
|
-
execute: (params: any) => Promise<any>;
|
|
6
|
-
parameters?: Record<string, any>;
|
|
7
|
-
}
|
|
8
|
-
export interface ModuleHostedToolServer {
|
|
9
|
-
toolFunction: InlineToolFunction;
|
|
10
|
-
process?: ChildProcess;
|
|
11
|
-
port: number;
|
|
12
|
-
serverUrl: string;
|
|
13
|
-
status: 'starting' | 'running' | 'stopped' | 'error';
|
|
14
|
-
pid?: number;
|
|
15
|
-
moduleFile: string;
|
|
16
|
-
}
|
|
17
|
-
export declare class ModuleHostedToolManager {
|
|
18
|
-
private servers;
|
|
19
|
-
private portCounter;
|
|
20
|
-
private readonly baseDir;
|
|
21
|
-
private toolModules;
|
|
22
|
-
constructor();
|
|
23
|
-
deployInlineTool(toolFunction: InlineToolFunction): Promise<ModuleHostedToolServer>;
|
|
24
|
-
stopTool(toolName: string): Promise<void>;
|
|
25
|
-
getServer(toolName: string): ModuleHostedToolServer | undefined;
|
|
26
|
-
getAllServers(): ModuleHostedToolServer[];
|
|
27
|
-
private getToolId;
|
|
28
|
-
private getNextPort;
|
|
29
|
-
private generateModuleFiles;
|
|
30
|
-
private createToolModule;
|
|
31
|
-
private createMCPServerCode;
|
|
32
|
-
private startServer;
|
|
33
|
-
private handleFunctionExecution;
|
|
34
|
-
private waitForServerReady;
|
|
35
|
-
}
|
|
36
|
-
export declare const moduleHostedToolManager: ModuleHostedToolManager;
|
|
37
|
-
//# sourceMappingURL=module-hosted-tool-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-hosted-tool-manager.d.ts","sourceRoot":"","sources":["../src/module-hosted-tool-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAS,MAAM,oBAAoB,CAAC;AAO9D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,OAAO,CAA6C;IAC5D,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,WAAW,CAAyC;;IAStD,gBAAgB,CAAC,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAiDnF,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B/C,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAK/D,aAAa,IAAI,sBAAsB,EAAE;IAIzC,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,WAAW;YAIL,mBAAmB;IAqCjC,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,mBAAmB;YA2Ib,WAAW;YAwDX,uBAAuB;YA6BvB,kBAAkB;CAoBjC;AAGD,eAAO,MAAM,uBAAuB,yBAAgC,CAAC"}
|