@inkeep/agents-sdk 0.0.0-dev-20250910233133

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.
Files changed (59) hide show
  1. package/LICENSE.md +56 -0
  2. package/README.md +53 -0
  3. package/dist/__tests__/utils/testTenant.d.ts +7 -0
  4. package/dist/__tests__/utils/testTenant.d.ts.map +1 -0
  5. package/dist/__tests__/utils/testTenant.js +10 -0
  6. package/dist/__tests__/utils/testTenant.js.map +1 -0
  7. package/dist/agent.d.ts +39 -0
  8. package/dist/agent.d.ts.map +1 -0
  9. package/dist/agent.js +513 -0
  10. package/dist/agent.js.map +1 -0
  11. package/dist/artifact-component.d.ts +27 -0
  12. package/dist/artifact-component.d.ts.map +1 -0
  13. package/dist/artifact-component.js +118 -0
  14. package/dist/artifact-component.js.map +1 -0
  15. package/dist/builders.d.ts +211 -0
  16. package/dist/builders.d.ts.map +1 -0
  17. package/dist/builders.js +244 -0
  18. package/dist/builders.js.map +1 -0
  19. package/dist/data-component.d.ts +25 -0
  20. package/dist/data-component.d.ts.map +1 -0
  21. package/dist/data-component.js +114 -0
  22. package/dist/data-component.js.map +1 -0
  23. package/dist/environment-settings.d.ts +28 -0
  24. package/dist/environment-settings.d.ts.map +1 -0
  25. package/dist/environment-settings.js +79 -0
  26. package/dist/environment-settings.js.map +1 -0
  27. package/dist/externalAgent.d.ts +58 -0
  28. package/dist/externalAgent.d.ts.map +1 -0
  29. package/dist/externalAgent.js +163 -0
  30. package/dist/externalAgent.js.map +1 -0
  31. package/dist/graph.d.ts +200 -0
  32. package/dist/graph.d.ts.map +1 -0
  33. package/dist/graph.js +1322 -0
  34. package/dist/graph.js.map +1 -0
  35. package/dist/graphFullClient.d.ts +22 -0
  36. package/dist/graphFullClient.d.ts.map +1 -0
  37. package/dist/graphFullClient.js +189 -0
  38. package/dist/graphFullClient.js.map +1 -0
  39. package/dist/index.d.ts +11 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +10 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/module-hosted-tool-manager.d.ts +37 -0
  44. package/dist/module-hosted-tool-manager.d.ts.map +1 -0
  45. package/dist/module-hosted-tool-manager.js +378 -0
  46. package/dist/module-hosted-tool-manager.js.map +1 -0
  47. package/dist/runner.d.ts +38 -0
  48. package/dist/runner.d.ts.map +1 -0
  49. package/dist/runner.js +164 -0
  50. package/dist/runner.js.map +1 -0
  51. package/dist/tool.d.ts +29 -0
  52. package/dist/tool.d.ts.map +1 -0
  53. package/dist/tool.js +122 -0
  54. package/dist/tool.js.map +1 -0
  55. package/dist/types.d.ts +286 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +39 -0
  58. package/dist/types.js.map +1 -0
  59. package/package.json +62 -0
@@ -0,0 +1,378 @@
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("module-hosted-tool-manager");
6
+ export class ModuleHostedToolManager {
7
+ servers = new Map();
8
+ portCounter = 3011;
9
+ baseDir;
10
+ toolModules = new Map();
11
+ constructor() {
12
+ this.baseDir = join(process.cwd(), ".hosted-tools");
13
+ if (!existsSync(this.baseDir)) {
14
+ mkdirSync(this.baseDir, { recursive: true });
15
+ }
16
+ }
17
+ async deployInlineTool(toolFunction) {
18
+ const toolId = this.getToolId(toolFunction.name);
19
+ // Check if tool is already deployed
20
+ if (this.servers.has(toolId)) {
21
+ const existingServer = this.servers.get(toolId);
22
+ if (existingServer.status === "running") {
23
+ logger.info({ toolId }, "Inline tool already deployed and running");
24
+ return existingServer;
25
+ }
26
+ }
27
+ const port = this.getNextPort();
28
+ const serverUrl = `http://localhost:${port}/mcp`;
29
+ // Store the tool function in our registry
30
+ this.toolModules.set(toolId, toolFunction);
31
+ const server = {
32
+ toolFunction,
33
+ port,
34
+ serverUrl,
35
+ status: "starting",
36
+ moduleFile: "",
37
+ };
38
+ this.servers.set(toolId, server);
39
+ try {
40
+ await this.generateModuleFiles(server);
41
+ await this.startServer(server);
42
+ // Wait for server to be ready
43
+ await this.waitForServerReady(server);
44
+ server.status = "running";
45
+ logger.info({ toolId, port, serverUrl }, "Inline tool deployed successfully");
46
+ return server;
47
+ }
48
+ catch (error) {
49
+ server.status = "error";
50
+ logger.error({
51
+ toolId,
52
+ error: error instanceof Error ? error.message : "Unknown error",
53
+ }, "Failed to deploy inline tool");
54
+ throw error;
55
+ }
56
+ }
57
+ async stopTool(toolName) {
58
+ const toolId = this.getToolId(toolName);
59
+ const server = this.servers.get(toolId);
60
+ if (!server || !server.process) {
61
+ logger.warn({ toolId }, "Inline tool not found or not running");
62
+ return;
63
+ }
64
+ return new Promise((resolve) => {
65
+ server.process?.on("exit", () => {
66
+ server.status = "stopped";
67
+ server.process = undefined;
68
+ server.pid = undefined;
69
+ // Clean up the module registry
70
+ this.toolModules.delete(toolId);
71
+ logger.info({ toolId }, "Inline 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
+ async generateModuleFiles(server) {
100
+ const toolId = this.getToolId(server.toolFunction.name);
101
+ const serverDir = join(this.baseDir, toolId);
102
+ if (!existsSync(serverDir)) {
103
+ mkdirSync(serverDir, { recursive: true });
104
+ }
105
+ // Create a separate module file for the tool function
106
+ const toolModuleFile = join(serverDir, "tool-function.mjs");
107
+ const toolModuleCode = this.createToolModule(server.toolFunction);
108
+ writeFileSync(toolModuleFile, toolModuleCode, "utf8");
109
+ // Create the MCP server file that imports the tool module
110
+ const serverFile = join(serverDir, "server.mjs");
111
+ const serverCode = this.createMCPServerCode(server, toolId);
112
+ writeFileSync(serverFile, serverCode, "utf8");
113
+ server.moduleFile = serverFile;
114
+ // Create package.json for the tool server
115
+ const packageJson = {
116
+ name: `hosted-tool-${toolId}`,
117
+ version: "1.0.0",
118
+ type: "module",
119
+ main: "server.mjs",
120
+ dependencies: {
121
+ "@modelcontextprotocol/sdk": "^1.12.1",
122
+ zod: "^3.25.31",
123
+ },
124
+ };
125
+ writeFileSync(join(serverDir, "package.json"), JSON.stringify(packageJson, null, 2), "utf8");
126
+ logger.info({ toolId, serverFile, toolModuleFile }, "Generated module-based MCP server code");
127
+ }
128
+ createToolModule(toolFunction) {
129
+ // Extract the function body without serializing to string
130
+ // We'll use a different approach - create a module that exports the function
131
+ return `// Auto-generated tool function module
132
+ export const toolName = '${toolFunction.name}';
133
+ export const toolDescription = '${toolFunction.description || ""}';
134
+
135
+ // Re-export the tool function
136
+ // Note: This approach requires the function to be passed through a registry
137
+ export async function execute(params) {
138
+ // This will be resolved at runtime through the parent process communication
139
+ const result = await parentProcessExecute(params);
140
+ return result;
141
+ }
142
+
143
+ // Parameters schema (if provided)
144
+ export const parameters = ${toolFunction.parameters ? JSON.stringify(toolFunction.parameters, null, 2) : "undefined"};
145
+ `;
146
+ }
147
+ createMCPServerCode(server, toolId) {
148
+ return `#!/usr/bin/env node
149
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp';
150
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp';
151
+ import { z } from 'zod';
152
+ import { createServer } from 'node:http';
153
+
154
+ const server = new McpServer({
155
+ name: '${server.toolFunction.name}',
156
+ version: '1.0.0',
157
+ }, { capabilities: { logging: {} } });
158
+
159
+ // Parameter schema
160
+ const parameterSchema = z.object({${server.toolFunction.parameters
161
+ ? `${Object.keys(server.toolFunction.parameters)
162
+ .map((key) => `\n ${key}: z.any()`)
163
+ .join(",")}\n`
164
+ : ""}});
165
+
166
+ // Communication with parent process for function execution
167
+ let parentProcess = null;
168
+
169
+ // Set up IPC communication
170
+ process.on('message', (message) => {
171
+ if (message.type === 'function-result') {
172
+ // Handle function execution result
173
+ const { requestId, result, error } = message;
174
+ // Resolve the pending promise (this would need a proper promise registry)
175
+ handleFunctionResult(requestId, result, error);
176
+ }
177
+ });
178
+
179
+ const pendingRequests = new Map();
180
+ let requestIdCounter = 0;
181
+
182
+ async function executeToolFunction(params) {
183
+ return new Promise((resolve, reject) => {
184
+ const requestId = ++requestIdCounter;
185
+ pendingRequests.set(requestId, { resolve, reject });
186
+
187
+ // Send execution request to parent process
188
+ process.send({
189
+ type: 'execute-function',
190
+ requestId,
191
+ toolName: '${server.toolFunction.name}',
192
+ params
193
+ });
194
+
195
+ // Timeout after 30 seconds
196
+ setTimeout(() => {
197
+ if (pendingRequests.has(requestId)) {
198
+ pendingRequests.delete(requestId);
199
+ reject(new Error('Function execution timeout'));
200
+ }
201
+ }, 30000);
202
+ });
203
+ }
204
+
205
+ function handleFunctionResult(requestId, result, error) {
206
+ const pending = pendingRequests.get(requestId);
207
+ if (pending) {
208
+ pendingRequests.delete(requestId);
209
+ if (error) {
210
+ pending.reject(new Error(error));
211
+ } else {
212
+ pending.resolve(result);
213
+ }
214
+ }
215
+ }
216
+
217
+ // Register the tool
218
+ server.tool('${toolId}', '${server.toolFunction.description || ""}', parameterSchema.shape, async (params) => {
219
+ try {
220
+ const result = await executeToolFunction(params);
221
+ return {
222
+ content: [{
223
+ type: 'text',
224
+ text: typeof result === 'string' ? result : JSON.stringify(result)
225
+ }]
226
+ };
227
+ } catch (error) {
228
+ return {
229
+ content: [{
230
+ type: 'text',
231
+ text: \`Error executing tool: \${error instanceof Error ? error.message : 'Unknown error'}\`
232
+ }],
233
+ isError: true
234
+ };
235
+ }
236
+ });
237
+
238
+ // Create HTTP server
239
+ const httpServer = createServer();
240
+ const transport = new StreamableHTTPServerTransport({});
241
+
242
+ httpServer.on('request', async (req, res) => {
243
+ if (req.url === '/mcp' && req.method === 'POST') {
244
+ let body = '';
245
+ req.on('data', chunk => body += chunk);
246
+ req.on('end', async () => {
247
+ try {
248
+ const jsonBody = JSON.parse(body);
249
+ await transport.handleRequest(req, res, jsonBody);
250
+ } catch (error) {
251
+ res.writeHead(500, { 'Content-Type': 'application/json' });
252
+ res.end(JSON.stringify({ error: 'Invalid JSON' }));
253
+ }
254
+ });
255
+ } else if (req.url === '/health' && req.method === 'GET') {
256
+ res.writeHead(200, { 'Content-Type': 'application/json' });
257
+ res.end(JSON.stringify({ status: 'healthy', tool: '${server.toolFunction.name}' }));
258
+ } else {
259
+ res.writeHead(404, { 'Content-Type': 'application/json' });
260
+ res.end(JSON.stringify({ error: 'Not found' }));
261
+ }
262
+ });
263
+
264
+ // Start the server
265
+ await server.connect(transport);
266
+ httpServer.listen(${server.port}, () => {
267
+ console.log(\`MCP tool server '${server.toolFunction.name}' listening on port ${server.port}\`);
268
+
269
+ // Notify parent that server is ready
270
+ if (process.send) {
271
+ process.send({ type: 'server-ready' });
272
+ }
273
+ });
274
+
275
+ process.on('SIGTERM', () => {
276
+ httpServer.close(() => {
277
+ console.log('Server stopped');
278
+ process.exit(0);
279
+ });
280
+ });
281
+ `;
282
+ }
283
+ async startServer(server) {
284
+ const toolId = this.getToolId(server.toolFunction.name);
285
+ const serverDir = join(this.baseDir, toolId);
286
+ const serverFile = server.moduleFile;
287
+ return new Promise((resolve, reject) => {
288
+ const childProcess = spawn("node", [serverFile], {
289
+ cwd: serverDir,
290
+ stdio: ["ignore", "pipe", "pipe", "ipc"], // Enable IPC
291
+ detached: false,
292
+ });
293
+ server.process = childProcess;
294
+ server.pid = childProcess.pid;
295
+ // Handle IPC messages from child process
296
+ childProcess.on("message", (message) => {
297
+ if (message.type === "execute-function") {
298
+ // Execute the function in the parent process context
299
+ this.handleFunctionExecution(message, childProcess);
300
+ }
301
+ else if (message.type === "server-ready") {
302
+ logger.info({ toolId }, "Tool server reported ready via IPC");
303
+ }
304
+ });
305
+ childProcess.stdout?.on("data", (data) => {
306
+ logger.info({ toolId }, `Tool server stdout: ${data.toString().trim()}`);
307
+ });
308
+ childProcess.stderr?.on("data", (data) => {
309
+ logger.error({ toolId }, `Tool server stderr: ${data.toString().trim()}`);
310
+ });
311
+ childProcess.on("error", (error) => {
312
+ logger.error({ toolId, error: error.message }, "Failed to start tool server");
313
+ reject(error);
314
+ });
315
+ childProcess.on("exit", (code, signal) => {
316
+ logger.info({ toolId, code, signal }, "Tool server process exited");
317
+ server.status = "stopped";
318
+ server.process = undefined;
319
+ server.pid = undefined;
320
+ });
321
+ // Give the process a moment to start
322
+ setTimeout(() => {
323
+ if (childProcess.pid) {
324
+ resolve();
325
+ }
326
+ else {
327
+ reject(new Error("Failed to start server process"));
328
+ }
329
+ }, 1000);
330
+ });
331
+ }
332
+ async handleFunctionExecution(message, childProcess) {
333
+ const { requestId, toolName, params } = message;
334
+ const toolFunction = this.toolModules.get(this.getToolId(toolName));
335
+ if (!toolFunction) {
336
+ childProcess.send({
337
+ type: "function-result",
338
+ requestId,
339
+ error: `Tool function not found: ${toolName}`,
340
+ });
341
+ return;
342
+ }
343
+ try {
344
+ const result = await toolFunction.execute(params);
345
+ childProcess.send({
346
+ type: "function-result",
347
+ requestId,
348
+ result,
349
+ });
350
+ }
351
+ catch (error) {
352
+ childProcess.send({
353
+ type: "function-result",
354
+ requestId,
355
+ error: error instanceof Error ? error.message : "Unknown error",
356
+ });
357
+ }
358
+ }
359
+ async waitForServerReady(server, maxRetries = 10) {
360
+ for (let i = 0; i < maxRetries; i++) {
361
+ try {
362
+ const response = await fetch(`http://localhost:${server.port}/health`);
363
+ if (response.ok) {
364
+ logger.info({ toolId: this.getToolId(server.toolFunction.name) }, "Server health check passed");
365
+ return;
366
+ }
367
+ }
368
+ catch (_error) {
369
+ // Server not ready yet
370
+ }
371
+ await new Promise((resolve) => setTimeout(resolve, 500));
372
+ }
373
+ throw new Error(`Server failed to become ready after ${maxRetries} attempts`);
374
+ }
375
+ }
376
+ // Singleton instance
377
+ export const moduleHostedToolManager = new ModuleHostedToolManager();
378
+ //# sourceMappingURL=module-hosted-tool-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-hosted-tool-manager.js","sourceRoot":"","sources":["../src/module-hosted-tool-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { GenerateOptions, GraphInterface, MessageInput, RunResult, StreamResponse } from "./types";
2
+ export declare class Runner {
3
+ /**
4
+ * Run a graph until completion, handling transfers and tool calls
5
+ * Similar to OpenAI's Runner.run() pattern
6
+ * NOTE: This now requires a graph instead of an agent
7
+ */
8
+ static run(graph: GraphInterface, messages: MessageInput, options?: GenerateOptions): Promise<RunResult>;
9
+ /**
10
+ * Stream a graph's response
11
+ */
12
+ static stream(graph: GraphInterface, messages: MessageInput, options?: GenerateOptions): Promise<StreamResponse>;
13
+ /**
14
+ * Execute multiple graphs in parallel and return the first successful result
15
+ */
16
+ static raceGraphs(graphs: GraphInterface[], messages: MessageInput, options?: GenerateOptions): Promise<RunResult>;
17
+ private static normalizeToMessageHistory;
18
+ /**
19
+ * Validate graph configuration before running
20
+ */
21
+ static validateGraph(graph: GraphInterface): {
22
+ valid: boolean;
23
+ errors: string[];
24
+ };
25
+ /**
26
+ * Get execution statistics for a graph
27
+ */
28
+ static getExecutionStats(graph: GraphInterface, messages: MessageInput, options?: GenerateOptions): Promise<{
29
+ estimatedTurns: number;
30
+ estimatedTokens: number;
31
+ agentCount: number;
32
+ defaultAgent: string | undefined;
33
+ }>;
34
+ }
35
+ export declare const run: typeof Runner.run;
36
+ export declare const stream: typeof Runner.stream;
37
+ export declare const raceGraphs: typeof Runner.raceGraphs;
38
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEX,eAAe,EACf,cAAc,EAEd,YAAY,EACZ,SAAS,EACT,cAAc,EAEd,MAAM,SAAS,CAAC;AAKjB,qBAAa,MAAM;IAClB;;;;OAIG;WACU,GAAG,CACf,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,SAAS,CAAC;IAqErB;;OAEG;WACU,MAAM,CAClB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC;IAa1B;;OAEG;WACU,UAAU,CACtB,MAAM,EAAE,cAAc,EAAE,EACxB,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,SAAS,CAAC;IA2CrB,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAYxC;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG;QAC5C,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,CAAC;KACjB;IAqCD;;OAEG;WACU,iBAAiB,CAC7B,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;KACjC,CAAC;CAeF;AAGD,eAAO,MAAM,GAAG,mBAA0B,CAAC;AAC3C,eAAO,MAAM,MAAM,sBAA6B,CAAC;AACjD,eAAO,MAAM,UAAU,0BAAiC,CAAC"}
package/dist/runner.js ADDED
@@ -0,0 +1,164 @@
1
+ import { getLogger } from "@inkeep/agents-core";
2
+ import { MaxTurnsExceededError } from "./types";
3
+ const logger = getLogger("runner");
4
+ export class Runner {
5
+ /**
6
+ * Run a graph until completion, handling transfers and tool calls
7
+ * Similar to OpenAI's Runner.run() pattern
8
+ * NOTE: This now requires a graph instead of an agent
9
+ */
10
+ static async run(graph, messages, options) {
11
+ const maxTurns = options?.maxTurns || 10;
12
+ let turnCount = 0;
13
+ const messageHistory = Runner.normalizeToMessageHistory(messages);
14
+ const allToolCalls = [];
15
+ const _allTransfers = [];
16
+ logger.info({
17
+ graphId: graph.getId(),
18
+ defaultAgent: graph.getDefaultAgent()?.getName(),
19
+ maxTurns,
20
+ initialMessageCount: messageHistory.length,
21
+ }, "Starting graph run");
22
+ while (turnCount < maxTurns) {
23
+ logger.debug({
24
+ graphId: graph.getId(),
25
+ turnCount,
26
+ messageHistoryLength: messageHistory.length,
27
+ }, "Starting turn");
28
+ // Use graph.generate to handle agent orchestration
29
+ const response = await graph.generate(messageHistory, options);
30
+ turnCount++;
31
+ // Since graph.generate returns a string (the final response),
32
+ // we need to treat this as a completed generation
33
+ logger.info({
34
+ graphId: graph.getId(),
35
+ turnCount,
36
+ responseLength: response.length,
37
+ }, "Graph generation completed");
38
+ // Return the result wrapped in RunResult format
39
+ return {
40
+ finalOutput: response,
41
+ agent: graph.getDefaultAgent() || {},
42
+ turnCount,
43
+ usage: { inputTokens: 0, outputTokens: 0 },
44
+ metadata: {
45
+ toolCalls: allToolCalls,
46
+ transfers: [], // Graph handles transfers internally
47
+ },
48
+ };
49
+ }
50
+ // Max turns exceeded
51
+ logger.error({
52
+ graphId: graph.getId(),
53
+ maxTurns,
54
+ finalTurnCount: turnCount,
55
+ }, "Maximum turns exceeded");
56
+ throw new MaxTurnsExceededError(maxTurns);
57
+ }
58
+ /**
59
+ * Stream a graph's response
60
+ */
61
+ static async stream(graph, messages, options) {
62
+ logger.info({
63
+ graphId: graph.getId(),
64
+ defaultAgent: graph.getDefaultAgent()?.getName(),
65
+ }, "Starting graph stream");
66
+ // Delegate to graph's stream method
67
+ return graph.stream(messages, options);
68
+ }
69
+ /**
70
+ * Execute multiple graphs in parallel and return the first successful result
71
+ */
72
+ static async raceGraphs(graphs, messages, options) {
73
+ if (graphs.length === 0) {
74
+ throw new Error("No graphs provided for race");
75
+ }
76
+ logger.info({
77
+ graphCount: graphs.length,
78
+ graphIds: graphs.map((g) => g.getId()),
79
+ }, "Starting graph race");
80
+ const promises = graphs.map(async (graph, index) => {
81
+ try {
82
+ const result = await Runner.run(graph, messages, options);
83
+ return { ...result, raceIndex: index };
84
+ }
85
+ catch (error) {
86
+ logger.error({
87
+ graphId: graph.getId(),
88
+ error: error instanceof Error ? error.message : "Unknown error",
89
+ }, "Graph failed in race");
90
+ throw error;
91
+ }
92
+ });
93
+ const result = await Promise.race(promises);
94
+ logger.info({
95
+ winningGraphId: result.graphId || "unknown",
96
+ raceIndex: result.raceIndex,
97
+ }, "Graph race completed");
98
+ return result;
99
+ }
100
+ // Private helper methods
101
+ static normalizeToMessageHistory(messages) {
102
+ if (typeof messages === "string") {
103
+ return [{ role: "user", content: messages }];
104
+ }
105
+ if (Array.isArray(messages)) {
106
+ return messages.map((msg) => typeof msg === "string" ? { role: "user", content: msg } : msg);
107
+ }
108
+ return [messages];
109
+ }
110
+ /**
111
+ * Validate graph configuration before running
112
+ */
113
+ static validateGraph(graph) {
114
+ const errors = [];
115
+ if (!graph.getId()) {
116
+ errors.push("Graph ID is required");
117
+ }
118
+ const defaultAgent = graph.getDefaultAgent();
119
+ if (!defaultAgent) {
120
+ errors.push("Default agent is required");
121
+ }
122
+ else {
123
+ if (!defaultAgent.getName()) {
124
+ errors.push("Default agent name is required");
125
+ }
126
+ if (!defaultAgent.getInstructions()) {
127
+ errors.push("Default agent instructions are required");
128
+ }
129
+ }
130
+ // Validate all agents in the graph
131
+ const agents = graph.getAgents();
132
+ if (agents.length === 0) {
133
+ errors.push("Graph must contain at least one agent");
134
+ }
135
+ for (const agent of agents) {
136
+ if (!agent.getName()) {
137
+ errors.push(`Agent missing name`);
138
+ }
139
+ }
140
+ return {
141
+ valid: errors.length === 0,
142
+ errors,
143
+ };
144
+ }
145
+ /**
146
+ * Get execution statistics for a graph
147
+ */
148
+ static async getExecutionStats(graph, messages, options) {
149
+ const agents = graph.getAgents();
150
+ const defaultAgent = graph.getDefaultAgent();
151
+ const messageCount = Array.isArray(messages) ? messages.length : 1;
152
+ return {
153
+ estimatedTurns: Math.min(Math.max(messageCount, 1), options?.maxTurns || 10),
154
+ estimatedTokens: messageCount * 100, // Rough estimate
155
+ agentCount: agents.length,
156
+ defaultAgent: defaultAgent?.getName(),
157
+ };
158
+ }
159
+ }
160
+ // Export convenience functions that match OpenAI's pattern
161
+ export const run = Runner.run.bind(Runner);
162
+ export const stream = Runner.stream.bind(Runner);
163
+ export const raceGraphs = Runner.raceGraphs.bind(Runner);
164
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
package/dist/tool.d.ts ADDED
@@ -0,0 +1,29 @@
1
+ import type { MCPToolConfig } from "@inkeep/agents-core";
2
+ export interface ToolInterface {
3
+ config: MCPToolConfig;
4
+ init(): Promise<void>;
5
+ getId(): string;
6
+ getName(): string;
7
+ getDescription(): string;
8
+ getServerUrl(): string;
9
+ getActiveTools(): string[] | undefined;
10
+ getCredentialReferenceId(): string | null | undefined;
11
+ }
12
+ export declare class Tool implements ToolInterface {
13
+ config: MCPToolConfig;
14
+ private baseURL;
15
+ private tenantId;
16
+ private initialized;
17
+ constructor(config: MCPToolConfig);
18
+ getId(): string;
19
+ getName(): string;
20
+ getDescription(): string;
21
+ getServerUrl(): string;
22
+ getActiveTools(): string[] | undefined;
23
+ getCredentialReferenceId(): string | null | undefined;
24
+ init(options?: {
25
+ skipDatabaseRegistration?: boolean;
26
+ }): Promise<void>;
27
+ private upsertTool;
28
+ }
29
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,MAAM,CAAC;IAChB,OAAO,IAAI,MAAM,CAAC;IAClB,cAAc,IAAI,MAAM,CAAC;IACzB,YAAY,IAAI,MAAM,CAAC;IACvB,cAAc,IAAI,MAAM,EAAE,GAAG,SAAS,CAAC;IACvC,wBAAwB,IAAI,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACtD;AAED,qBAAa,IAAK,YAAW,aAAa;IAClC,MAAM,EAAE,aAAa,CAAC;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,aAAa;IAcjC,KAAK,IAAI,MAAM;IAIf,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,YAAY,IAAI,MAAM;IAItB,cAAc,IAAI,MAAM,EAAE,GAAG,SAAS;IAItC,wBAAwB,IAAI,MAAM,GAAG,IAAI,GAAG,SAAS;IAK/C,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,wBAAwB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YA8B7D,UAAU;CAuFxB"}