@zauso-ai/capstan-agent 1.0.0-beta.5 → 1.0.0-beta.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/dist/a2a.d.ts.map +1 -1
- package/dist/a2a.js +42 -21
- package/dist/a2a.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/langchain.d.ts +52 -0
- package/dist/langchain.d.ts.map +1 -0
- package/dist/langchain.js +157 -0
- package/dist/langchain.js.map +1 -0
- package/dist/mcp-client.d.ts +45 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +289 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/mcp.d.ts +23 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +85 -1
- package/dist/mcp.js.map +1 -1
- package/dist/registry.d.ts +21 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +48 -1
- package/dist/registry.js.map +1 -1
- package/dist/telemetry.d.ts +8 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +48 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/testing.d.ts +84 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +490 -0
- package/dist/testing.js.map +1 -0
- package/package.json +9 -2
package/dist/a2a.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a.d.ts","sourceRoot":"","sources":["../src/a2a.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"a2a.d.ts","sourceRoot":"","sources":["../src/a2a.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQlE,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE;QACZ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,MAAM,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC,CAAC,CAAC;IACH,cAAc,CAAC,EAAE;QACf,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH;AAED,kEAAkE;AAClE,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EACF,WAAW,GACX,SAAS,GACT,gBAAgB,GAChB,WAAW,GACX,QAAQ,GACR,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE,OAAO,CAAC;CACf;AAUD,kCAAkC;AAClC,UAAU,kBAAkB;IAC1B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D;AAkBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,kBAAkB,EAAE,GAC3B,YAAY,CAkCd;AA4BD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAE5D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,kBAAkB,EAAE,EAC5B,YAAY,EAAE,CACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,KACX,OAAO,CAAC,OAAO,CAAC,GACpB;IACD,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9D,mBAAmB,EAAE,CACnB,IAAI,EAAE,OAAO,KACV,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,YAAY,EAAE,MAAM,YAAY,CAAC;CAClC,CA0RA"}
|
package/dist/a2a.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { routeToToolName } from "./mcp.js";
|
|
2
|
+
import { withSpan } from "./telemetry.js";
|
|
2
3
|
// ---------------------------------------------------------------------------
|
|
3
4
|
// Agent Card generation
|
|
4
5
|
// ---------------------------------------------------------------------------
|
|
@@ -136,17 +137,27 @@ export function createA2AHandler(config, routes, executeRoute) {
|
|
|
136
137
|
tasks.set(taskId, task);
|
|
137
138
|
// Transition to working.
|
|
138
139
|
task.status = "working";
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
140
|
+
return withSpan("capstan.a2a.tasks/send", {
|
|
141
|
+
"capstan.a2a.method": "tasks/send",
|
|
142
|
+
"capstan.a2a.taskId": taskId,
|
|
143
|
+
"capstan.a2a.skill": skillId,
|
|
144
|
+
}, async (span) => {
|
|
145
|
+
try {
|
|
146
|
+
const result = await executeRoute(resolved.method, resolved.path, params["input"]);
|
|
147
|
+
task.status = "completed";
|
|
148
|
+
task.output = result;
|
|
149
|
+
span?.setAttribute("capstan.a2a.status", "completed");
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
task.status = "failed";
|
|
153
|
+
task.error =
|
|
154
|
+
err instanceof Error
|
|
155
|
+
? err.message
|
|
156
|
+
: "Unknown error during execution";
|
|
157
|
+
span?.setAttribute("capstan.a2a.status", "failed");
|
|
158
|
+
}
|
|
159
|
+
return successResponse(reqId, task);
|
|
160
|
+
});
|
|
150
161
|
}
|
|
151
162
|
/**
|
|
152
163
|
* Streaming variant of `handleTasksSend`. Yields SSE events as the task
|
|
@@ -224,16 +235,26 @@ export function createA2AHandler(config, routes, executeRoute) {
|
|
|
224
235
|
return errorResponse(rpc.id, -32600, "Invalid JSON-RPC version");
|
|
225
236
|
}
|
|
226
237
|
const params = rpc.params ?? {};
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
238
|
+
return withSpan(`capstan.a2a.${rpc.method}`, {
|
|
239
|
+
"capstan.a2a.method": rpc.method,
|
|
240
|
+
}, async (span) => {
|
|
241
|
+
let response;
|
|
242
|
+
switch (rpc.method) {
|
|
243
|
+
case "tasks/send":
|
|
244
|
+
response = await handleTasksSend(rpc.id, params);
|
|
245
|
+
break;
|
|
246
|
+
case "tasks/get":
|
|
247
|
+
response = handleTasksGet(rpc.id, params);
|
|
248
|
+
break;
|
|
249
|
+
case "agent/card":
|
|
250
|
+
response = successResponse(rpc.id, agentCard);
|
|
251
|
+
break;
|
|
252
|
+
default:
|
|
253
|
+
response = errorResponse(rpc.id, -32601, `Method not found: ${rpc.method}`);
|
|
254
|
+
}
|
|
255
|
+
span?.setAttribute("capstan.a2a.status", response.error ? "error" : "ok");
|
|
256
|
+
return response;
|
|
257
|
+
});
|
|
237
258
|
}
|
|
238
259
|
/**
|
|
239
260
|
* SSE streaming request handler.
|
package/dist/a2a.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a.js","sourceRoot":"","sources":["../src/a2a.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"a2a.js","sourceRoot":"","sources":["../src/a2a.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
export { generateAgentManifest } from "./manifest.js";
|
|
2
|
-
export { createMcpServer, serveMcpStdio, routeToToolName, inputSchemaToZodShape, } from "./mcp.js";
|
|
2
|
+
export { createMcpServer, createMcpHttpHandler, serveMcpStdio, routeToToolName, inputSchemaToZodShape, } from "./mcp.js";
|
|
3
3
|
export { generateOpenApiSpec } from "./openapi.js";
|
|
4
4
|
export { generateA2AAgentCard, createA2AHandler, formatSseEvent, } from "./a2a.js";
|
|
5
5
|
export type { A2AAgentCard, A2ATask, A2AStreamEvent } from "./a2a.js";
|
|
6
6
|
export { CapabilityRegistry } from "./registry.js";
|
|
7
|
+
export { withSpan } from "./telemetry.js";
|
|
8
|
+
export { createMcpClient } from "./mcp-client.js";
|
|
9
|
+
export type { McpClient, McpClientOptions, McpTool } from "./mcp-client.js";
|
|
10
|
+
export { McpTestHarness, McpHttpTestClient } from "./testing.js";
|
|
11
|
+
export type { McpTestResult } from "./testing.js";
|
|
12
|
+
export { toLangChainTools, toLangChainToolSpecs } from "./langchain.js";
|
|
13
|
+
export type { LangChainToolDefinition, ToLangChainOptions } from "./langchain.js";
|
|
7
14
|
export type { AgentManifest, RouteRegistryEntry, AgentConfig } from "./types.js";
|
|
8
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,eAAe,EACf,aAAa,EACb,eAAe,EACf,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACxE,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAClF,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export { generateAgentManifest } from "./manifest.js";
|
|
2
|
-
export { createMcpServer, serveMcpStdio, routeToToolName, inputSchemaToZodShape, } from "./mcp.js";
|
|
2
|
+
export { createMcpServer, createMcpHttpHandler, serveMcpStdio, routeToToolName, inputSchemaToZodShape, } from "./mcp.js";
|
|
3
3
|
export { generateOpenApiSpec } from "./openapi.js";
|
|
4
4
|
export { generateA2AAgentCard, createA2AHandler, formatSseEvent, } from "./a2a.js";
|
|
5
5
|
export { CapabilityRegistry } from "./registry.js";
|
|
6
|
+
export { withSpan } from "./telemetry.js";
|
|
7
|
+
export { createMcpClient } from "./mcp-client.js";
|
|
8
|
+
export { McpTestHarness, McpHttpTestClient } from "./testing.js";
|
|
9
|
+
export { toLangChainTools, toLangChainToolSpecs } from "./langchain.js";
|
|
6
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,eAAe,EACf,aAAa,EACb,eAAe,EACf,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { CapabilityRegistry } from "./registry.js";
|
|
2
|
+
/**
|
|
3
|
+
* LangChain DynamicTool-compatible definition.
|
|
4
|
+
*
|
|
5
|
+
* This interface mirrors LangChain's tool format so consumers can pass these
|
|
6
|
+
* directly to LangChain agents without importing LangChain as a dependency
|
|
7
|
+
* of this package.
|
|
8
|
+
*/
|
|
9
|
+
export interface LangChainToolDefinition {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
/** JSON Schema for the tool's input. */
|
|
13
|
+
schema: Record<string, unknown>;
|
|
14
|
+
/** Execute the tool — calls the Capstan API over HTTP. */
|
|
15
|
+
func: (input: string | Record<string, unknown>) => Promise<string>;
|
|
16
|
+
}
|
|
17
|
+
export interface ToLangChainOptions {
|
|
18
|
+
/** Base URL of the running Capstan server (e.g. "http://localhost:3000"). */
|
|
19
|
+
baseUrl: string;
|
|
20
|
+
/** Value for the Authorization header (e.g. "Bearer <token>"). */
|
|
21
|
+
authorization?: string;
|
|
22
|
+
/** Only include routes whose capability matches one of these values. */
|
|
23
|
+
capabilities?: ("read" | "write")[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Convert a {@link CapabilityRegistry} into an array of LangChain-compatible
|
|
27
|
+
* tool definitions.
|
|
28
|
+
*
|
|
29
|
+
* Each tool invokes the corresponding Capstan API endpoint over HTTP when
|
|
30
|
+
* called, so the Capstan server must be running at `options.baseUrl`.
|
|
31
|
+
*
|
|
32
|
+
* @param registry - The Capstan capability registry.
|
|
33
|
+
* @param options - Connection and filtering options.
|
|
34
|
+
* @returns An array of tool definitions ready to hand to a LangChain agent.
|
|
35
|
+
*/
|
|
36
|
+
export declare function toLangChainTools(registry: CapabilityRegistry, options: ToLangChainOptions): LangChainToolDefinition[];
|
|
37
|
+
/**
|
|
38
|
+
* Generate LangChain-compatible tool specifications (metadata only, no
|
|
39
|
+
* executable function).
|
|
40
|
+
*
|
|
41
|
+
* Useful for sending tool definitions over the wire or for inspection
|
|
42
|
+
* without needing a live server connection.
|
|
43
|
+
*
|
|
44
|
+
* @param registry - The Capstan capability registry.
|
|
45
|
+
* @returns An array of tool spec objects.
|
|
46
|
+
*/
|
|
47
|
+
export declare function toLangChainToolSpecs(registry: CapabilityRegistry): Array<{
|
|
48
|
+
name: string;
|
|
49
|
+
description: string;
|
|
50
|
+
parameters: Record<string, unknown>;
|
|
51
|
+
}>;
|
|
52
|
+
//# sourceMappingURL=langchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAOxD;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,0DAA0D;IAC1D,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,YAAY,CAAC,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;CACrC;AAmGD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,kBAAkB,GAC1B,uBAAuB,EAAE,CAkD3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,kBAAkB,GAC3B,KAAK,CAAC;IACP,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,CAAC,CAiBD"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { routeToToolName } from "./mcp.js";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Internal helpers
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
/** HTTP methods that carry a request body. */
|
|
6
|
+
const BODY_METHODS = new Set(["POST", "PUT", "PATCH", "DELETE"]);
|
|
7
|
+
/**
|
|
8
|
+
* Build a human-readable tool description from a route entry.
|
|
9
|
+
*/
|
|
10
|
+
function buildDescription(route) {
|
|
11
|
+
if (route.description) {
|
|
12
|
+
return route.description;
|
|
13
|
+
}
|
|
14
|
+
return `${route.method.toUpperCase()} ${route.path}`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build the JSON Schema that describes the tool's input.
|
|
18
|
+
*
|
|
19
|
+
* If the route already carries an `inputSchema` we return it as-is
|
|
20
|
+
* (it is already JSON Schema). Otherwise we return a permissive
|
|
21
|
+
* empty-object schema.
|
|
22
|
+
*/
|
|
23
|
+
function buildInputJsonSchema(route) {
|
|
24
|
+
if (route.inputSchema) {
|
|
25
|
+
return { ...route.inputSchema };
|
|
26
|
+
}
|
|
27
|
+
return { type: "object", properties: {} };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Construct the URL for a GET request, appending `input` as query parameters.
|
|
31
|
+
*/
|
|
32
|
+
function buildGetUrl(base, path, input) {
|
|
33
|
+
const url = new URL(path, base);
|
|
34
|
+
for (const [key, value] of Object.entries(input)) {
|
|
35
|
+
if (value !== undefined && value !== null) {
|
|
36
|
+
url.searchParams.set(key, String(value));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return url.toString();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Determine whether a route should be included given the capability filter.
|
|
43
|
+
*/
|
|
44
|
+
function matchesCapabilities(route, capabilities) {
|
|
45
|
+
if (!capabilities || capabilities.length === 0) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
// Routes without an explicit capability are included only when no filter
|
|
49
|
+
// is specified (handled above). When a filter IS specified, the route
|
|
50
|
+
// must declare a matching capability.
|
|
51
|
+
if (!route.capability) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
return capabilities.includes(route.capability);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Normalise the `input` argument that LangChain passes to `func`.
|
|
58
|
+
*
|
|
59
|
+
* LangChain may send either a JSON string or an object depending on the
|
|
60
|
+
* agent implementation, so we handle both.
|
|
61
|
+
*/
|
|
62
|
+
function normaliseInput(input) {
|
|
63
|
+
if (typeof input === "string") {
|
|
64
|
+
if (input.trim() === "") {
|
|
65
|
+
return {};
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const parsed = JSON.parse(input);
|
|
69
|
+
if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
|
|
70
|
+
return parsed;
|
|
71
|
+
}
|
|
72
|
+
return {};
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return {};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return input;
|
|
79
|
+
}
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
// Public API
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
/**
|
|
84
|
+
* Convert a {@link CapabilityRegistry} into an array of LangChain-compatible
|
|
85
|
+
* tool definitions.
|
|
86
|
+
*
|
|
87
|
+
* Each tool invokes the corresponding Capstan API endpoint over HTTP when
|
|
88
|
+
* called, so the Capstan server must be running at `options.baseUrl`.
|
|
89
|
+
*
|
|
90
|
+
* @param registry - The Capstan capability registry.
|
|
91
|
+
* @param options - Connection and filtering options.
|
|
92
|
+
* @returns An array of tool definitions ready to hand to a LangChain agent.
|
|
93
|
+
*/
|
|
94
|
+
export function toLangChainTools(registry, options) {
|
|
95
|
+
const { baseUrl, authorization, capabilities } = options;
|
|
96
|
+
const routes = registry.getRoutes();
|
|
97
|
+
const tools = [];
|
|
98
|
+
for (const route of routes) {
|
|
99
|
+
if (!matchesCapabilities(route, capabilities)) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const name = routeToToolName(route.method, route.path);
|
|
103
|
+
const description = buildDescription(route);
|
|
104
|
+
const schema = buildInputJsonSchema(route);
|
|
105
|
+
const method = route.method.toUpperCase();
|
|
106
|
+
const func = async (rawInput) => {
|
|
107
|
+
const input = normaliseInput(rawInput);
|
|
108
|
+
const headers = {};
|
|
109
|
+
if (authorization) {
|
|
110
|
+
headers["Authorization"] = authorization;
|
|
111
|
+
}
|
|
112
|
+
let response;
|
|
113
|
+
if (BODY_METHODS.has(method)) {
|
|
114
|
+
headers["Content-Type"] = "application/json";
|
|
115
|
+
response = await fetch(new URL(route.path, baseUrl).toString(), {
|
|
116
|
+
method,
|
|
117
|
+
headers,
|
|
118
|
+
body: JSON.stringify(input),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// GET / HEAD — pass input as query parameters.
|
|
123
|
+
response = await fetch(buildGetUrl(baseUrl, route.path, input), {
|
|
124
|
+
method,
|
|
125
|
+
headers,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
const text = await response.text();
|
|
129
|
+
return text;
|
|
130
|
+
};
|
|
131
|
+
tools.push({ name, description, schema, func });
|
|
132
|
+
}
|
|
133
|
+
return tools;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Generate LangChain-compatible tool specifications (metadata only, no
|
|
137
|
+
* executable function).
|
|
138
|
+
*
|
|
139
|
+
* Useful for sending tool definitions over the wire or for inspection
|
|
140
|
+
* without needing a live server connection.
|
|
141
|
+
*
|
|
142
|
+
* @param registry - The Capstan capability registry.
|
|
143
|
+
* @returns An array of tool spec objects.
|
|
144
|
+
*/
|
|
145
|
+
export function toLangChainToolSpecs(registry) {
|
|
146
|
+
const routes = registry.getRoutes();
|
|
147
|
+
const specs = [];
|
|
148
|
+
for (const route of routes) {
|
|
149
|
+
specs.push({
|
|
150
|
+
name: routeToToolName(route.method, route.path),
|
|
151
|
+
description: buildDescription(route),
|
|
152
|
+
parameters: buildInputJsonSchema(route),
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return specs;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=langchain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.js","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Client — connect to external MCP servers and consume their tools.
|
|
3
|
+
*
|
|
4
|
+
* Uses the official `@modelcontextprotocol/sdk` Client and
|
|
5
|
+
* StreamableHTTPClientTransport for spec-compliant communication.
|
|
6
|
+
* Falls back to a raw JSON-RPC 2.0 implementation when the SDK
|
|
7
|
+
* transport encounters issues (e.g. the remote server does not
|
|
8
|
+
* support Streamable HTTP).
|
|
9
|
+
*/
|
|
10
|
+
/** Options for connecting to a remote MCP server. */
|
|
11
|
+
export interface McpClientOptions {
|
|
12
|
+
/** MCP server URL (Streamable HTTP endpoint). */
|
|
13
|
+
url: string;
|
|
14
|
+
/** Optional authorization header value (e.g. "Bearer <token>"). */
|
|
15
|
+
authorization?: string;
|
|
16
|
+
/** Client name for identification during the MCP handshake. */
|
|
17
|
+
clientName?: string;
|
|
18
|
+
}
|
|
19
|
+
/** A tool exposed by a remote MCP server. */
|
|
20
|
+
export interface McpTool {
|
|
21
|
+
name: string;
|
|
22
|
+
description?: string | undefined;
|
|
23
|
+
inputSchema?: Record<string, unknown> | undefined;
|
|
24
|
+
}
|
|
25
|
+
/** A connected MCP client that can list and invoke remote tools. */
|
|
26
|
+
export interface McpClient {
|
|
27
|
+
/** List available tools on the remote server. */
|
|
28
|
+
listTools(): Promise<McpTool[]>;
|
|
29
|
+
/** Call a tool by name with optional arguments. */
|
|
30
|
+
callTool(name: string, args?: Record<string, unknown>): Promise<unknown>;
|
|
31
|
+
/** Close the connection. */
|
|
32
|
+
close(): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create an MCP client connected to a remote server.
|
|
36
|
+
*
|
|
37
|
+
* Attempts to connect using the official SDK `Client` +
|
|
38
|
+
* `StreamableHTTPClientTransport` first. Falls back to a raw JSON-RPC 2.0
|
|
39
|
+
* implementation if the SDK transport fails (e.g. unsupported server).
|
|
40
|
+
*
|
|
41
|
+
* @param options - Connection options (URL, auth, client name).
|
|
42
|
+
* @returns A connected `McpClient` ready to list and call tools.
|
|
43
|
+
*/
|
|
44
|
+
export declare function createMcpClient(options: McpClientOptions): Promise<McpClient>;
|
|
45
|
+
//# sourceMappingURL=mcp-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,6CAA6C;AAC7C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CACnD;AAED,oEAAoE;AACpE,MAAM,WAAW,SAAS;IACxB,iDAAiD;IACjD,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAChC,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,4BAA4B;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAyUD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,SAAS,CAAC,CAuCpB"}
|