@zauso-ai/capstan-agent 0.2.0 → 1.0.0-beta.2
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 +21 -0
- package/dist/a2a.d.ts.map +1 -1
- package/dist/a2a.js +121 -1
- package/dist/a2a.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +9 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +82 -14
- package/dist/mcp.js.map +1 -1
- package/dist/registry.d.ts +2 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js.map +1 -1
- package/package.json +1 -1
package/dist/a2a.d.ts
CHANGED
|
@@ -29,6 +29,11 @@ export interface A2ATask {
|
|
|
29
29
|
output?: unknown;
|
|
30
30
|
error?: string;
|
|
31
31
|
}
|
|
32
|
+
/** SSE event for A2A streaming responses. */
|
|
33
|
+
export interface A2AStreamEvent {
|
|
34
|
+
type: "task_status" | "task_result";
|
|
35
|
+
task: A2ATask;
|
|
36
|
+
}
|
|
32
37
|
/** JSON-RPC response envelope. */
|
|
33
38
|
interface A2AJsonRpcResponse {
|
|
34
39
|
jsonrpc: "2.0";
|
|
@@ -45,6 +50,14 @@ interface A2AJsonRpcResponse {
|
|
|
45
50
|
* routes. Each route is mapped to an A2A "skill".
|
|
46
51
|
*/
|
|
47
52
|
export declare function generateA2AAgentCard(config: AgentConfig, routes: RouteRegistryEntry[]): A2AAgentCard;
|
|
53
|
+
/**
|
|
54
|
+
* Format an A2AStreamEvent as an SSE data line.
|
|
55
|
+
*
|
|
56
|
+
* Each event is serialised as:
|
|
57
|
+
* event: <type>\n
|
|
58
|
+
* data: <json>\n\n
|
|
59
|
+
*/
|
|
60
|
+
export declare function formatSseEvent(event: A2AStreamEvent): string;
|
|
48
61
|
/**
|
|
49
62
|
* Create an A2A handler that processes JSON-RPC requests according to
|
|
50
63
|
* Google's Agent-to-Agent protocol.
|
|
@@ -56,9 +69,17 @@ export declare function generateA2AAgentCard(config: AgentConfig, routes: RouteR
|
|
|
56
69
|
*
|
|
57
70
|
* Tasks are tracked in an in-memory Map so callers can query status after
|
|
58
71
|
* submission.
|
|
72
|
+
*
|
|
73
|
+
* When `handleStreamRequest` is used (for `Accept: text/event-stream`
|
|
74
|
+
* requests), the handler returns an `AsyncGenerator` of `A2AStreamEvent`
|
|
75
|
+
* objects that the caller can pipe to an SSE response. Progress events
|
|
76
|
+
* (`task_status`) are emitted as the task transitions through its
|
|
77
|
+
* lifecycle, followed by a final `task_result` event on completion or
|
|
78
|
+
* failure.
|
|
59
79
|
*/
|
|
60
80
|
export declare function createA2AHandler(config: AgentConfig, routes: RouteRegistryEntry[], executeRoute: (method: string, path: string, input: unknown) => Promise<unknown>): {
|
|
61
81
|
handleRequest: (body: unknown) => Promise<A2AJsonRpcResponse>;
|
|
82
|
+
handleStreamRequest: (body: unknown) => AsyncGenerator<A2AStreamEvent, void, unknown>;
|
|
62
83
|
getAgentCard: () => A2AAgentCard;
|
|
63
84
|
};
|
|
64
85
|
export {};
|
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;AAOlE,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;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
|
|
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;AAOlE,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,CA2PA"}
|
package/dist/a2a.js
CHANGED
|
@@ -42,7 +42,7 @@ export function generateA2AAgentCard(config, routes) {
|
|
|
42
42
|
url: config.baseUrl ?? "http://localhost:3000",
|
|
43
43
|
version: "1.0.0",
|
|
44
44
|
capabilities: {
|
|
45
|
-
streaming:
|
|
45
|
+
streaming: true,
|
|
46
46
|
pushNotifications: false,
|
|
47
47
|
},
|
|
48
48
|
skills,
|
|
@@ -71,6 +71,16 @@ function resolveSkill(skillId, routes) {
|
|
|
71
71
|
}
|
|
72
72
|
return null;
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Format an A2AStreamEvent as an SSE data line.
|
|
76
|
+
*
|
|
77
|
+
* Each event is serialised as:
|
|
78
|
+
* event: <type>\n
|
|
79
|
+
* data: <json>\n\n
|
|
80
|
+
*/
|
|
81
|
+
export function formatSseEvent(event) {
|
|
82
|
+
return `event: ${event.type}\ndata: ${JSON.stringify(event.task)}\n\n`;
|
|
83
|
+
}
|
|
74
84
|
/**
|
|
75
85
|
* Create an A2A handler that processes JSON-RPC requests according to
|
|
76
86
|
* Google's Agent-to-Agent protocol.
|
|
@@ -82,6 +92,13 @@ function resolveSkill(skillId, routes) {
|
|
|
82
92
|
*
|
|
83
93
|
* Tasks are tracked in an in-memory Map so callers can query status after
|
|
84
94
|
* submission.
|
|
95
|
+
*
|
|
96
|
+
* When `handleStreamRequest` is used (for `Accept: text/event-stream`
|
|
97
|
+
* requests), the handler returns an `AsyncGenerator` of `A2AStreamEvent`
|
|
98
|
+
* objects that the caller can pipe to an SSE response. Progress events
|
|
99
|
+
* (`task_status`) are emitted as the task transitions through its
|
|
100
|
+
* lifecycle, followed by a final `task_result` event on completion or
|
|
101
|
+
* failure.
|
|
85
102
|
*/
|
|
86
103
|
export function createA2AHandler(config, routes, executeRoute) {
|
|
87
104
|
const tasks = new Map();
|
|
@@ -131,6 +148,59 @@ export function createA2AHandler(config, routes, executeRoute) {
|
|
|
131
148
|
}
|
|
132
149
|
return successResponse(reqId, task);
|
|
133
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Streaming variant of `handleTasksSend`. Yields SSE events as the task
|
|
153
|
+
* transitions through submitted -> working -> completed/failed.
|
|
154
|
+
*/
|
|
155
|
+
async function* handleTasksSendStream(params) {
|
|
156
|
+
const skillId = params["skill"];
|
|
157
|
+
if (!skillId) {
|
|
158
|
+
const errTask = {
|
|
159
|
+
id: generateTaskId(),
|
|
160
|
+
status: "failed",
|
|
161
|
+
skill: "unknown",
|
|
162
|
+
error: "Missing required parameter: skill",
|
|
163
|
+
};
|
|
164
|
+
yield { type: "task_result", task: errTask };
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const resolved = resolveSkill(skillId, routes);
|
|
168
|
+
if (!resolved) {
|
|
169
|
+
const errTask = {
|
|
170
|
+
id: generateTaskId(),
|
|
171
|
+
status: "failed",
|
|
172
|
+
skill: skillId,
|
|
173
|
+
error: `Unknown skill: ${skillId}`,
|
|
174
|
+
};
|
|
175
|
+
yield { type: "task_result", task: errTask };
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const taskId = generateTaskId();
|
|
179
|
+
const task = {
|
|
180
|
+
id: taskId,
|
|
181
|
+
status: "submitted",
|
|
182
|
+
skill: skillId,
|
|
183
|
+
input: params["input"],
|
|
184
|
+
};
|
|
185
|
+
tasks.set(taskId, task);
|
|
186
|
+
// Emit submitted status
|
|
187
|
+
yield { type: "task_status", task: { ...task } };
|
|
188
|
+
// Transition to working
|
|
189
|
+
task.status = "working";
|
|
190
|
+
yield { type: "task_status", task: { ...task } };
|
|
191
|
+
try {
|
|
192
|
+
const result = await executeRoute(resolved.method, resolved.path, params["input"]);
|
|
193
|
+
task.status = "completed";
|
|
194
|
+
task.output = result;
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
task.status = "failed";
|
|
198
|
+
task.error =
|
|
199
|
+
err instanceof Error ? err.message : "Unknown error during execution";
|
|
200
|
+
}
|
|
201
|
+
// Emit final result event
|
|
202
|
+
yield { type: "task_result", task: { ...task } };
|
|
203
|
+
}
|
|
134
204
|
function handleTasksGet(reqId, params) {
|
|
135
205
|
const taskId = params["id"];
|
|
136
206
|
if (!taskId) {
|
|
@@ -165,8 +235,58 @@ export function createA2AHandler(config, routes, executeRoute) {
|
|
|
165
235
|
return errorResponse(rpc.id, -32601, `Method not found: ${rpc.method}`);
|
|
166
236
|
}
|
|
167
237
|
}
|
|
238
|
+
/**
|
|
239
|
+
* SSE streaming request handler.
|
|
240
|
+
*
|
|
241
|
+
* Validates the JSON-RPC envelope and, for `tasks/send`, returns an async
|
|
242
|
+
* generator of `A2AStreamEvent` values. For non-streamable methods the
|
|
243
|
+
* generator yields a single `task_result` event wrapping the synchronous
|
|
244
|
+
* response.
|
|
245
|
+
*/
|
|
246
|
+
async function* handleStreamRequest(body) {
|
|
247
|
+
if (body === null ||
|
|
248
|
+
typeof body !== "object" ||
|
|
249
|
+
!("method" in body)) {
|
|
250
|
+
const errTask = {
|
|
251
|
+
id: generateTaskId(),
|
|
252
|
+
status: "failed",
|
|
253
|
+
skill: "unknown",
|
|
254
|
+
error: "Invalid JSON-RPC request",
|
|
255
|
+
};
|
|
256
|
+
yield { type: "task_result", task: errTask };
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
const rpc = body;
|
|
260
|
+
if (rpc.jsonrpc !== "2.0") {
|
|
261
|
+
const errTask = {
|
|
262
|
+
id: generateTaskId(),
|
|
263
|
+
status: "failed",
|
|
264
|
+
skill: "unknown",
|
|
265
|
+
error: "Invalid JSON-RPC version",
|
|
266
|
+
};
|
|
267
|
+
yield { type: "task_result", task: errTask };
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
const params = rpc.params ?? {};
|
|
271
|
+
if (rpc.method === "tasks/send") {
|
|
272
|
+
yield* handleTasksSendStream(params);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
// Non-streamable methods: fall back to synchronous handling and wrap
|
|
276
|
+
// the result in a single event.
|
|
277
|
+
const response = await handleRequest(body);
|
|
278
|
+
const fallbackTask = {
|
|
279
|
+
id: generateTaskId(),
|
|
280
|
+
status: response.error ? "failed" : "completed",
|
|
281
|
+
skill: "unknown",
|
|
282
|
+
...(response.result !== undefined ? { output: response.result } : {}),
|
|
283
|
+
...(response.error ? { error: response.error.message } : {}),
|
|
284
|
+
};
|
|
285
|
+
yield { type: "task_result", task: fallbackTask };
|
|
286
|
+
}
|
|
168
287
|
return {
|
|
169
288
|
handleRequest,
|
|
289
|
+
handleStreamRequest,
|
|
170
290
|
getAgentCard: () => agentCard,
|
|
171
291
|
};
|
|
172
292
|
}
|
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,8 @@
|
|
|
1
1
|
export { generateAgentManifest } from "./manifest.js";
|
|
2
|
-
export { createMcpServer, serveMcpStdio, routeToToolName } from "./mcp.js";
|
|
2
|
+
export { createMcpServer, serveMcpStdio, routeToToolName, inputSchemaToZodShape, } from "./mcp.js";
|
|
3
3
|
export { generateOpenApiSpec } from "./openapi.js";
|
|
4
|
-
export { generateA2AAgentCard, createA2AHandler, } from "./a2a.js";
|
|
5
|
-
export type { A2AAgentCard, A2ATask } from "./a2a.js";
|
|
4
|
+
export { generateA2AAgentCard, createA2AHandler, formatSseEvent, } from "./a2a.js";
|
|
5
|
+
export type { A2AAgentCard, A2ATask, A2AStreamEvent } from "./a2a.js";
|
|
6
6
|
export { CapabilityRegistry } from "./registry.js";
|
|
7
7
|
export type { AgentManifest, RouteRegistryEntry, AgentConfig } from "./types.js";
|
|
8
8
|
//# 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,
|
|
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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { generateAgentManifest } from "./manifest.js";
|
|
2
|
-
export { createMcpServer, serveMcpStdio, routeToToolName } from "./mcp.js";
|
|
2
|
+
export { createMcpServer, serveMcpStdio, routeToToolName, inputSchemaToZodShape, } from "./mcp.js";
|
|
3
3
|
export { generateOpenApiSpec } from "./openapi.js";
|
|
4
|
-
export { generateA2AAgentCard, createA2AHandler, } from "./a2a.js";
|
|
4
|
+
export { generateA2AAgentCard, createA2AHandler, formatSseEvent, } from "./a2a.js";
|
|
5
5
|
export { CapabilityRegistry } from "./registry.js";
|
|
6
6
|
//# 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,
|
|
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"}
|
package/dist/mcp.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { ZodTypeAny } from "zod";
|
|
2
3
|
import type { AgentConfig, RouteRegistryEntry } from "./types.js";
|
|
3
4
|
/**
|
|
4
5
|
* Convert an HTTP method + URL path into a snake_case MCP tool name.
|
|
@@ -11,6 +12,14 @@ import type { AgentConfig, RouteRegistryEntry } from "./types.js";
|
|
|
11
12
|
* DELETE /orgs/:orgId/members/:memberId -> "delete_orgs_by_orgId_members_by_memberId"
|
|
12
13
|
*/
|
|
13
14
|
export declare function routeToToolName(method: string, path: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Convert a route's `inputSchema` (JSON Schema object) into a Zod raw shape
|
|
17
|
+
* suitable for the MCP SDK's `server.tool()` method.
|
|
18
|
+
*
|
|
19
|
+
* If the route has no input schema, returns an empty shape so the tool
|
|
20
|
+
* accepts no arguments.
|
|
21
|
+
*/
|
|
22
|
+
export declare function inputSchemaToZodShape(inputSchema: Record<string, unknown> | undefined): Record<string, ZodTypeAny>;
|
|
14
23
|
/**
|
|
15
24
|
* Create an MCP server that exposes all Capstan API routes as MCP tools.
|
|
16
25
|
*
|
package/dist/mcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAElE;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBpE;AA4DD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC/C,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAqB5B;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,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,MAAM,EAAE,SAAS,CAAC;IAClB,kBAAkB,EAAE,MAAM,KAAK,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC,CAAC;CACJ,CAmDA;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE"}
|
package/dist/mcp.js
CHANGED
|
@@ -30,6 +30,80 @@ export function routeToToolName(method, path) {
|
|
|
30
30
|
}
|
|
31
31
|
return `${prefix}_${parts.join("_")}`;
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Convert a JSON Schema type string to the corresponding Zod type.
|
|
35
|
+
*/
|
|
36
|
+
function jsonSchemaTypeToZod(prop) {
|
|
37
|
+
const type = prop["type"];
|
|
38
|
+
switch (type) {
|
|
39
|
+
case "string": {
|
|
40
|
+
const enumValues = prop["enum"];
|
|
41
|
+
if (enumValues && enumValues.length > 0) {
|
|
42
|
+
return z.enum(enumValues);
|
|
43
|
+
}
|
|
44
|
+
return z.string();
|
|
45
|
+
}
|
|
46
|
+
case "number":
|
|
47
|
+
case "integer":
|
|
48
|
+
return z.number();
|
|
49
|
+
case "boolean":
|
|
50
|
+
return z.boolean();
|
|
51
|
+
case "array": {
|
|
52
|
+
const items = prop["items"];
|
|
53
|
+
if (items) {
|
|
54
|
+
return z.array(jsonSchemaTypeToZod(items));
|
|
55
|
+
}
|
|
56
|
+
return z.array(z.unknown());
|
|
57
|
+
}
|
|
58
|
+
case "object": {
|
|
59
|
+
const nested = prop["properties"];
|
|
60
|
+
if (nested) {
|
|
61
|
+
const nestedRequired = prop["required"] ?? [];
|
|
62
|
+
return jsonSchemaToZodObject(nested, nestedRequired);
|
|
63
|
+
}
|
|
64
|
+
return z.record(z.string(), z.unknown());
|
|
65
|
+
}
|
|
66
|
+
default:
|
|
67
|
+
return z.unknown();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Convert a JSON Schema `properties` object into a `z.object()` schema.
|
|
72
|
+
*
|
|
73
|
+
* Properties listed in `required` are kept mandatory; all others become
|
|
74
|
+
* `.optional()`.
|
|
75
|
+
*/
|
|
76
|
+
function jsonSchemaToZodObject(properties, required) {
|
|
77
|
+
const shape = {};
|
|
78
|
+
for (const [key, prop] of Object.entries(properties)) {
|
|
79
|
+
const base = jsonSchemaTypeToZod(prop);
|
|
80
|
+
shape[key] = required.includes(key) ? base : base.optional();
|
|
81
|
+
}
|
|
82
|
+
return z.object(shape);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Convert a route's `inputSchema` (JSON Schema object) into a Zod raw shape
|
|
86
|
+
* suitable for the MCP SDK's `server.tool()` method.
|
|
87
|
+
*
|
|
88
|
+
* If the route has no input schema, returns an empty shape so the tool
|
|
89
|
+
* accepts no arguments.
|
|
90
|
+
*/
|
|
91
|
+
export function inputSchemaToZodShape(inputSchema) {
|
|
92
|
+
if (!inputSchema) {
|
|
93
|
+
return {};
|
|
94
|
+
}
|
|
95
|
+
const properties = inputSchema["properties"];
|
|
96
|
+
if (!properties) {
|
|
97
|
+
return {};
|
|
98
|
+
}
|
|
99
|
+
const required = inputSchema["required"] ?? [];
|
|
100
|
+
const shape = {};
|
|
101
|
+
for (const [key, prop] of Object.entries(properties)) {
|
|
102
|
+
const base = jsonSchemaTypeToZod(prop);
|
|
103
|
+
shape[key] = required.includes(key) ? base : base.optional();
|
|
104
|
+
}
|
|
105
|
+
return shape;
|
|
106
|
+
}
|
|
33
107
|
/**
|
|
34
108
|
* Build a tool description from a route.
|
|
35
109
|
*/
|
|
@@ -57,11 +131,6 @@ export function createMcpServer(config, routes, executeRoute) {
|
|
|
57
131
|
version: "1.0.0",
|
|
58
132
|
});
|
|
59
133
|
const toolDefinitions = [];
|
|
60
|
-
// A permissive Zod schema that accepts any object and passes all
|
|
61
|
-
// properties through. This lets the MCP SDK forward client-supplied
|
|
62
|
-
// arguments to our handler while avoiding the need to convert each
|
|
63
|
-
// route's JSON Schema into a Zod type at registration time.
|
|
64
|
-
const passthroughShape = { _input: z.unknown().optional() };
|
|
65
134
|
for (const route of routes) {
|
|
66
135
|
const toolName = routeToToolName(route.method, route.path);
|
|
67
136
|
const description = buildToolDescription(route);
|
|
@@ -71,17 +140,16 @@ export function createMcpServer(config, routes, executeRoute) {
|
|
|
71
140
|
description,
|
|
72
141
|
inputSchema: route.inputSchema ?? { type: "object", properties: {} },
|
|
73
142
|
});
|
|
143
|
+
// Convert the route's JSON Schema inputSchema to a Zod shape so MCP
|
|
144
|
+
// clients receive proper parameter validation and documentation.
|
|
145
|
+
const zodShape = inputSchemaToZodShape(route.inputSchema);
|
|
74
146
|
// Register the tool with the MCP server.
|
|
75
147
|
//
|
|
76
|
-
// We use the `tool(name, description, paramsSchema, callback)` overload
|
|
77
|
-
//
|
|
78
|
-
//
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
-
server.tool(toolName, description, passthroughShape, async (args) => {
|
|
82
|
-
// Forward all arguments (minus our synthetic _input marker) to the
|
|
83
|
-
// route handler. Agents will send the actual input properties
|
|
84
|
-
// directly in the tool arguments object.
|
|
148
|
+
// We use the `tool(name, description, paramsSchema, callback)` overload.
|
|
149
|
+
// The Zod shape gives the MCP SDK real type information for each
|
|
150
|
+
// parameter, so clients see proper names, types, and required markers
|
|
151
|
+
// instead of a permissive passthrough.
|
|
152
|
+
server.tool(toolName, description, zodShape, async (args) => {
|
|
85
153
|
const input = Object.keys(args).length > 0 ? args : undefined;
|
|
86
154
|
const result = await executeRoute(route.method, route.path, input);
|
|
87
155
|
return {
|
package/dist/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AgentConfig, AgentManifest, RouteRegistryEntry } from "./types.js";
|
|
2
|
-
import type { A2AAgentCard } from "./a2a.js";
|
|
2
|
+
import type { A2AAgentCard, A2AStreamEvent } from "./a2a.js";
|
|
3
3
|
/**
|
|
4
4
|
* Unified capability registry — the central abstraction for Capstan's
|
|
5
5
|
* multi-protocol adapter layer.
|
|
@@ -53,6 +53,7 @@ export declare class CapabilityRegistry {
|
|
|
53
53
|
*/
|
|
54
54
|
toA2A(executeRoute: (method: string, path: string, input: unknown) => Promise<unknown>): {
|
|
55
55
|
handleRequest: (body: unknown) => Promise<unknown>;
|
|
56
|
+
handleStreamRequest: (body: unknown) => AsyncGenerator<A2AStreamEvent, void, unknown>;
|
|
56
57
|
getAgentCard: () => A2AAgentCard;
|
|
57
58
|
};
|
|
58
59
|
}
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM7D;;;;;;;;;;;;GAYG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,EAAE,WAAW;IAQ/B,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAIzC,+CAA+C;IAC/C,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI;IAM/C,kDAAkD;IAClD,SAAS,IAAI,SAAS,kBAAkB,EAAE;IAI1C,mCAAmC;IACnC,SAAS,IAAI,QAAQ,CAAC,WAAW,CAAC;IAQlC,gDAAgD;IAChD,UAAU,IAAI,aAAa;IAI3B,4CAA4C;IAC5C,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIpC;;;;;;OAMG;IACH,KAAK,CACH,YAAY,EAAE,CACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,KACX,OAAO,CAAC,OAAO,CAAC,GACpB;QACD,MAAM,EAAE,YAAY,CAAC,cAAc,yCAAyC,EAAE,SAAS,CAAC,CAAC;QACzF,kBAAkB,EAAE,MAAM,KAAK,CAAC;YAC9B,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,WAAW,EAAE,OAAO,CAAC;SACtB,CAAC,CAAC;KACJ;IAID;;;;;;OAMG;IACH,KAAK,CACH,YAAY,EAAE,CACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,KACX,OAAO,CAAC,OAAO,CAAC,GACpB;QACD,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACnD,mBAAmB,EAAE,CACnB,IAAI,EAAE,OAAO,KACV,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,YAAY,EAAE,MAAM,YAAY,CAAC;KAClC;CAGF"}
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,kBAAkB;IACrB,MAAM,GAAyB,EAAE,CAAC;IAClC,MAAM,CAAc;IAE5B,YAAY,MAAmB;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,4EAA4E;IAC5E,eAAe;IACf,4EAA4E;IAE5E,qCAAqC;IACrC,QAAQ,CAAC,KAAyB;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,+CAA+C;IAC/C,WAAW,CAAC,MAA4B;QACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,mCAAmC;IACnC,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,gDAAgD;IAChD,UAAU;QACR,OAAO,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,4CAA4C;IAC5C,SAAS;QACP,OAAO,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CACH,YAIqB;QASrB,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CACH,YAIqB;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,kBAAkB;IACrB,MAAM,GAAyB,EAAE,CAAC;IAClC,MAAM,CAAc;IAE5B,YAAY,MAAmB;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,4EAA4E;IAC5E,eAAe;IACf,4EAA4E;IAE5E,qCAAqC;IACrC,QAAQ,CAAC,KAAyB;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,+CAA+C;IAC/C,WAAW,CAAC,MAA4B;QACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,mCAAmC;IACnC,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,gDAAgD;IAChD,UAAU;QACR,OAAO,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,4CAA4C;IAC5C,SAAS;QACP,OAAO,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CACH,YAIqB;QASrB,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CACH,YAIqB;QAQrB,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;CACF"}
|