@zauso-ai/capstan-agent 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/a2a.d.ts +21 -0
- package/dist/a2a.d.ts.map +1 -1
- package/dist/a2a.js +152 -11
- package/dist/a2a.js.map +1 -1
- package/dist/commerce.d.ts +62 -0
- package/dist/commerce.d.ts.map +1 -0
- package/dist/commerce.js +39 -0
- package/dist/commerce.js.map +1 -0
- package/dist/index.d.ts +12 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- 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/llm.d.ts +41 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +166 -0
- package/dist/llm.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 +32 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +167 -15
- package/dist/mcp.js.map +1 -1
- package/dist/registry.d.ts +23 -1
- 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 +11 -3
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;
|
|
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
|
// ---------------------------------------------------------------------------
|
|
@@ -42,7 +43,7 @@ export function generateA2AAgentCard(config, routes) {
|
|
|
42
43
|
url: config.baseUrl ?? "http://localhost:3000",
|
|
43
44
|
version: "1.0.0",
|
|
44
45
|
capabilities: {
|
|
45
|
-
streaming:
|
|
46
|
+
streaming: true,
|
|
46
47
|
pushNotifications: false,
|
|
47
48
|
},
|
|
48
49
|
skills,
|
|
@@ -71,6 +72,16 @@ function resolveSkill(skillId, routes) {
|
|
|
71
72
|
}
|
|
72
73
|
return null;
|
|
73
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Format an A2AStreamEvent as an SSE data line.
|
|
77
|
+
*
|
|
78
|
+
* Each event is serialised as:
|
|
79
|
+
* event: <type>\n
|
|
80
|
+
* data: <json>\n\n
|
|
81
|
+
*/
|
|
82
|
+
export function formatSseEvent(event) {
|
|
83
|
+
return `event: ${event.type}\ndata: ${JSON.stringify(event.task)}\n\n`;
|
|
84
|
+
}
|
|
74
85
|
/**
|
|
75
86
|
* Create an A2A handler that processes JSON-RPC requests according to
|
|
76
87
|
* Google's Agent-to-Agent protocol.
|
|
@@ -82,6 +93,13 @@ function resolveSkill(skillId, routes) {
|
|
|
82
93
|
*
|
|
83
94
|
* Tasks are tracked in an in-memory Map so callers can query status after
|
|
84
95
|
* submission.
|
|
96
|
+
*
|
|
97
|
+
* When `handleStreamRequest` is used (for `Accept: text/event-stream`
|
|
98
|
+
* requests), the handler returns an `AsyncGenerator` of `A2AStreamEvent`
|
|
99
|
+
* objects that the caller can pipe to an SSE response. Progress events
|
|
100
|
+
* (`task_status`) are emitted as the task transitions through its
|
|
101
|
+
* lifecycle, followed by a final `task_result` event on completion or
|
|
102
|
+
* failure.
|
|
85
103
|
*/
|
|
86
104
|
export function createA2AHandler(config, routes, executeRoute) {
|
|
87
105
|
const tasks = new Map();
|
|
@@ -119,6 +137,68 @@ export function createA2AHandler(config, routes, executeRoute) {
|
|
|
119
137
|
tasks.set(taskId, task);
|
|
120
138
|
// Transition to working.
|
|
121
139
|
task.status = "working";
|
|
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
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Streaming variant of `handleTasksSend`. Yields SSE events as the task
|
|
164
|
+
* transitions through submitted -> working -> completed/failed.
|
|
165
|
+
*/
|
|
166
|
+
async function* handleTasksSendStream(params) {
|
|
167
|
+
const skillId = params["skill"];
|
|
168
|
+
if (!skillId) {
|
|
169
|
+
const errTask = {
|
|
170
|
+
id: generateTaskId(),
|
|
171
|
+
status: "failed",
|
|
172
|
+
skill: "unknown",
|
|
173
|
+
error: "Missing required parameter: skill",
|
|
174
|
+
};
|
|
175
|
+
yield { type: "task_result", task: errTask };
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const resolved = resolveSkill(skillId, routes);
|
|
179
|
+
if (!resolved) {
|
|
180
|
+
const errTask = {
|
|
181
|
+
id: generateTaskId(),
|
|
182
|
+
status: "failed",
|
|
183
|
+
skill: skillId,
|
|
184
|
+
error: `Unknown skill: ${skillId}`,
|
|
185
|
+
};
|
|
186
|
+
yield { type: "task_result", task: errTask };
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const taskId = generateTaskId();
|
|
190
|
+
const task = {
|
|
191
|
+
id: taskId,
|
|
192
|
+
status: "submitted",
|
|
193
|
+
skill: skillId,
|
|
194
|
+
input: params["input"],
|
|
195
|
+
};
|
|
196
|
+
tasks.set(taskId, task);
|
|
197
|
+
// Emit submitted status
|
|
198
|
+
yield { type: "task_status", task: { ...task } };
|
|
199
|
+
// Transition to working
|
|
200
|
+
task.status = "working";
|
|
201
|
+
yield { type: "task_status", task: { ...task } };
|
|
122
202
|
try {
|
|
123
203
|
const result = await executeRoute(resolved.method, resolved.path, params["input"]);
|
|
124
204
|
task.status = "completed";
|
|
@@ -129,7 +209,8 @@ export function createA2AHandler(config, routes, executeRoute) {
|
|
|
129
209
|
task.error =
|
|
130
210
|
err instanceof Error ? err.message : "Unknown error during execution";
|
|
131
211
|
}
|
|
132
|
-
|
|
212
|
+
// Emit final result event
|
|
213
|
+
yield { type: "task_result", task: { ...task } };
|
|
133
214
|
}
|
|
134
215
|
function handleTasksGet(reqId, params) {
|
|
135
216
|
const taskId = params["id"];
|
|
@@ -154,19 +235,79 @@ export function createA2AHandler(config, routes, executeRoute) {
|
|
|
154
235
|
return errorResponse(rpc.id, -32600, "Invalid JSON-RPC version");
|
|
155
236
|
}
|
|
156
237
|
const params = rpc.params ?? {};
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
+
});
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* SSE streaming request handler.
|
|
261
|
+
*
|
|
262
|
+
* Validates the JSON-RPC envelope and, for `tasks/send`, returns an async
|
|
263
|
+
* generator of `A2AStreamEvent` values. For non-streamable methods the
|
|
264
|
+
* generator yields a single `task_result` event wrapping the synchronous
|
|
265
|
+
* response.
|
|
266
|
+
*/
|
|
267
|
+
async function* handleStreamRequest(body) {
|
|
268
|
+
if (body === null ||
|
|
269
|
+
typeof body !== "object" ||
|
|
270
|
+
!("method" in body)) {
|
|
271
|
+
const errTask = {
|
|
272
|
+
id: generateTaskId(),
|
|
273
|
+
status: "failed",
|
|
274
|
+
skill: "unknown",
|
|
275
|
+
error: "Invalid JSON-RPC request",
|
|
276
|
+
};
|
|
277
|
+
yield { type: "task_result", task: errTask };
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
const rpc = body;
|
|
281
|
+
if (rpc.jsonrpc !== "2.0") {
|
|
282
|
+
const errTask = {
|
|
283
|
+
id: generateTaskId(),
|
|
284
|
+
status: "failed",
|
|
285
|
+
skill: "unknown",
|
|
286
|
+
error: "Invalid JSON-RPC version",
|
|
287
|
+
};
|
|
288
|
+
yield { type: "task_result", task: errTask };
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
const params = rpc.params ?? {};
|
|
292
|
+
if (rpc.method === "tasks/send") {
|
|
293
|
+
yield* handleTasksSendStream(params);
|
|
294
|
+
return;
|
|
166
295
|
}
|
|
296
|
+
// Non-streamable methods: fall back to synchronous handling and wrap
|
|
297
|
+
// the result in a single event.
|
|
298
|
+
const response = await handleRequest(body);
|
|
299
|
+
const fallbackTask = {
|
|
300
|
+
id: generateTaskId(),
|
|
301
|
+
status: response.error ? "failed" : "completed",
|
|
302
|
+
skill: "unknown",
|
|
303
|
+
...(response.result !== undefined ? { output: response.result } : {}),
|
|
304
|
+
...(response.error ? { error: response.error.message } : {}),
|
|
305
|
+
};
|
|
306
|
+
yield { type: "task_result", task: fallbackTask };
|
|
167
307
|
}
|
|
168
308
|
return {
|
|
169
309
|
handleRequest,
|
|
310
|
+
handleStreamRequest,
|
|
170
311
|
getAgentCard: () => agentCard,
|
|
171
312
|
};
|
|
172
313
|
}
|
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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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export interface PaymentMandate {
|
|
2
|
+
/** Unique mandate ID */
|
|
3
|
+
id: string;
|
|
4
|
+
/** Maximum amount authorized */
|
|
5
|
+
maxAmount: number;
|
|
6
|
+
/** Currency code (ISO 4217) */
|
|
7
|
+
currency: string;
|
|
8
|
+
/** Mandate expiry (ISO 8601) */
|
|
9
|
+
expiresAt: string;
|
|
10
|
+
/** User who authorized this mandate */
|
|
11
|
+
authorizedBy: string;
|
|
12
|
+
/** Cryptographic signature of the mandate */
|
|
13
|
+
signature?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface TransactionConfig {
|
|
16
|
+
/** Transaction name for discovery */
|
|
17
|
+
name: string;
|
|
18
|
+
/** Amount calculator */
|
|
19
|
+
amount: (input: unknown) => number;
|
|
20
|
+
/** Currency (default: USD) */
|
|
21
|
+
currency?: string;
|
|
22
|
+
/** Maximum amount per transaction */
|
|
23
|
+
maxAmount?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface TransactionResult {
|
|
26
|
+
transactionId: string;
|
|
27
|
+
amount: number;
|
|
28
|
+
currency: string;
|
|
29
|
+
status: "completed" | "pending" | "failed";
|
|
30
|
+
mandateId?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Define a transactable API endpoint.
|
|
34
|
+
* When an agent calls this, it must present a valid payment mandate.
|
|
35
|
+
*/
|
|
36
|
+
export declare function defineTransaction(config: TransactionConfig): TransactionConfig;
|
|
37
|
+
/**
|
|
38
|
+
* Validate a payment mandate.
|
|
39
|
+
*/
|
|
40
|
+
export declare function validateMandate(mandate: PaymentMandate): {
|
|
41
|
+
valid: boolean;
|
|
42
|
+
reason?: string;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Create a metered usage tracker for API calls.
|
|
46
|
+
*/
|
|
47
|
+
export declare class UsageMeter {
|
|
48
|
+
private usage;
|
|
49
|
+
record(agentId: string, amount: number): void;
|
|
50
|
+
getUsage(agentId: string): {
|
|
51
|
+
calls: number;
|
|
52
|
+
totalAmount: number;
|
|
53
|
+
};
|
|
54
|
+
getAllUsage(): {
|
|
55
|
+
[k: string]: {
|
|
56
|
+
calls: number;
|
|
57
|
+
totalAmount: number;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
reset(): void;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=commerce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commerce.d.ts","sourceRoot":"","sources":["../src/commerce.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACnC,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAE9E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAO5F;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAA6D;IAE1E,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAO7C,QAAQ,CAAC,OAAO,EAAE,MAAM;eATiB,MAAM;qBAAe,MAAM;;IAUpE,WAAW;;mBAV8B,MAAM;yBAAe,MAAM;;;IAWpE,KAAK;CACN"}
|
package/dist/commerce.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Define a transactable API endpoint.
|
|
3
|
+
* When an agent calls this, it must present a valid payment mandate.
|
|
4
|
+
*/
|
|
5
|
+
export function defineTransaction(config) {
|
|
6
|
+
return config;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Validate a payment mandate.
|
|
10
|
+
*/
|
|
11
|
+
export function validateMandate(mandate) {
|
|
12
|
+
if (!mandate.id)
|
|
13
|
+
return { valid: false, reason: "Missing mandate ID" };
|
|
14
|
+
if (!mandate.maxAmount || mandate.maxAmount <= 0)
|
|
15
|
+
return { valid: false, reason: "Invalid amount" };
|
|
16
|
+
if (!mandate.currency)
|
|
17
|
+
return { valid: false, reason: "Missing currency" };
|
|
18
|
+
if (new Date(mandate.expiresAt) < new Date())
|
|
19
|
+
return { valid: false, reason: "Mandate expired" };
|
|
20
|
+
if (!mandate.authorizedBy)
|
|
21
|
+
return { valid: false, reason: "Missing authorization" };
|
|
22
|
+
return { valid: true };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create a metered usage tracker for API calls.
|
|
26
|
+
*/
|
|
27
|
+
export class UsageMeter {
|
|
28
|
+
usage = new Map();
|
|
29
|
+
record(agentId, amount) {
|
|
30
|
+
const current = this.usage.get(agentId) ?? { calls: 0, totalAmount: 0 };
|
|
31
|
+
current.calls++;
|
|
32
|
+
current.totalAmount += amount;
|
|
33
|
+
this.usage.set(agentId, current);
|
|
34
|
+
}
|
|
35
|
+
getUsage(agentId) { return this.usage.get(agentId) ?? { calls: 0, totalAmount: 0 }; }
|
|
36
|
+
getAllUsage() { return Object.fromEntries(this.usage); }
|
|
37
|
+
reset() { this.usage.clear(); }
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=commerce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commerce.js","sourceRoot":"","sources":["../src/commerce.ts"],"names":[],"mappings":"AAkCA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAuB;IACrD,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACvE,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACpG,IAAI,CAAC,OAAO,CAAC,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC3E,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACjG,IAAI,CAAC,OAAO,CAAC,YAAY;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IACpF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,UAAU;IACb,KAAK,GAAG,IAAI,GAAG,EAAkD,CAAC;IAE1E,MAAM,CAAC,OAAe,EAAE,MAAc;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,QAAQ,CAAC,OAAe,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,WAAW,KAAK,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxD,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CAChC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
export { generateAgentManifest } from "./manifest.js";
|
|
2
|
-
export { createMcpServer, serveMcpStdio, routeToToolName } from "./mcp.js";
|
|
2
|
+
export { createMcpServer, createMcpHttpHandler, 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
|
+
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";
|
|
15
|
+
export { openaiProvider, anthropicProvider } from "./llm.js";
|
|
16
|
+
export type { LLMProvider, LLMMessage, LLMResponse, LLMStreamChunk, LLMOptions, } from "./llm.js";
|
|
8
17
|
//# 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,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;AACjF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7D,YAAY,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,cAAc,EACd,UAAU,GACX,MAAM,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export { generateAgentManifest } from "./manifest.js";
|
|
2
|
-
export { createMcpServer, serveMcpStdio, routeToToolName } from "./mcp.js";
|
|
2
|
+
export { createMcpServer, createMcpHttpHandler, 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
|
+
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";
|
|
10
|
+
export { openaiProvider, anthropicProvider } from "./llm.js";
|
|
6
11
|
//# 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,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;AAGxE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,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"}
|