@copilotkit/aimock 1.7.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/.claude-plugin/marketplace.json +17 -0
- package/.claude-plugin/plugin.json +12 -0
- package/LICENSE +21 -0
- package/README.md +82 -0
- package/dist/_virtual/_rolldown/runtime.cjs +29 -0
- package/dist/a2a-handler.cjs +203 -0
- package/dist/a2a-handler.cjs.map +1 -0
- package/dist/a2a-handler.js +199 -0
- package/dist/a2a-handler.js.map +1 -0
- package/dist/a2a-mock.cjs +292 -0
- package/dist/a2a-mock.cjs.map +1 -0
- package/dist/a2a-mock.d.cts +41 -0
- package/dist/a2a-mock.d.cts.map +1 -0
- package/dist/a2a-mock.d.ts +41 -0
- package/dist/a2a-mock.d.ts.map +1 -0
- package/dist/a2a-mock.js +290 -0
- package/dist/a2a-mock.js.map +1 -0
- package/dist/a2a-stub.cjs +4 -0
- package/dist/a2a-stub.d.cts +3 -0
- package/dist/a2a-stub.d.ts +3 -0
- package/dist/a2a-stub.js +3 -0
- package/dist/a2a-types.d.cts +68 -0
- package/dist/a2a-types.d.cts.map +1 -0
- package/dist/a2a-types.d.ts +68 -0
- package/dist/a2a-types.d.ts.map +1 -0
- package/dist/aimock-cli.cjs +112 -0
- package/dist/aimock-cli.cjs.map +1 -0
- package/dist/aimock-cli.d.cts +19 -0
- package/dist/aimock-cli.d.cts.map +1 -0
- package/dist/aimock-cli.d.ts +19 -0
- package/dist/aimock-cli.d.ts.map +1 -0
- package/dist/aimock-cli.js +110 -0
- package/dist/aimock-cli.js.map +1 -0
- package/dist/aws-event-stream.cjs +117 -0
- package/dist/aws-event-stream.cjs.map +1 -0
- package/dist/aws-event-stream.d.cts +38 -0
- package/dist/aws-event-stream.d.cts.map +1 -0
- package/dist/aws-event-stream.d.ts +38 -0
- package/dist/aws-event-stream.d.ts.map +1 -0
- package/dist/aws-event-stream.js +114 -0
- package/dist/aws-event-stream.js.map +1 -0
- package/dist/bedrock-converse.cjs +445 -0
- package/dist/bedrock-converse.cjs.map +1 -0
- package/dist/bedrock-converse.d.cts +50 -0
- package/dist/bedrock-converse.d.cts.map +1 -0
- package/dist/bedrock-converse.d.ts +50 -0
- package/dist/bedrock-converse.d.ts.map +1 -0
- package/dist/bedrock-converse.js +443 -0
- package/dist/bedrock-converse.js.map +1 -0
- package/dist/bedrock.cjs +557 -0
- package/dist/bedrock.cjs.map +1 -0
- package/dist/bedrock.d.cts +41 -0
- package/dist/bedrock.d.cts.map +1 -0
- package/dist/bedrock.d.ts +41 -0
- package/dist/bedrock.d.ts.map +1 -0
- package/dist/bedrock.js +553 -0
- package/dist/bedrock.js.map +1 -0
- package/dist/chaos.cjs +114 -0
- package/dist/chaos.cjs.map +1 -0
- package/dist/chaos.d.cts +27 -0
- package/dist/chaos.d.cts.map +1 -0
- package/dist/chaos.d.ts +27 -0
- package/dist/chaos.d.ts.map +1 -0
- package/dist/chaos.js +113 -0
- package/dist/chaos.js.map +1 -0
- package/dist/cli.cjs +268 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +268 -0
- package/dist/cli.js.map +1 -0
- package/dist/cohere.cjs +434 -0
- package/dist/cohere.cjs.map +1 -0
- package/dist/cohere.d.cts +34 -0
- package/dist/cohere.d.cts.map +1 -0
- package/dist/cohere.d.ts +34 -0
- package/dist/cohere.d.ts.map +1 -0
- package/dist/cohere.js +433 -0
- package/dist/cohere.js.map +1 -0
- package/dist/config-loader.cjs +111 -0
- package/dist/config-loader.cjs.map +1 -0
- package/dist/config-loader.d.cts +100 -0
- package/dist/config-loader.d.cts.map +1 -0
- package/dist/config-loader.d.ts +100 -0
- package/dist/config-loader.d.ts.map +1 -0
- package/dist/config-loader.js +107 -0
- package/dist/config-loader.js.map +1 -0
- package/dist/embeddings.cjs +150 -0
- package/dist/embeddings.cjs.map +1 -0
- package/dist/embeddings.d.cts +12 -0
- package/dist/embeddings.d.cts.map +1 -0
- package/dist/embeddings.d.ts +12 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +150 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/fixture-loader.cjs +269 -0
- package/dist/fixture-loader.cjs.map +1 -0
- package/dist/fixture-loader.d.cts +17 -0
- package/dist/fixture-loader.d.cts.map +1 -0
- package/dist/fixture-loader.d.ts +17 -0
- package/dist/fixture-loader.d.ts.map +1 -0
- package/dist/fixture-loader.js +265 -0
- package/dist/fixture-loader.js.map +1 -0
- package/dist/gemini.cjs +403 -0
- package/dist/gemini.cjs.map +1 -0
- package/dist/gemini.d.cts +10 -0
- package/dist/gemini.d.cts.map +1 -0
- package/dist/gemini.d.ts +10 -0
- package/dist/gemini.d.ts.map +1 -0
- package/dist/gemini.js +403 -0
- package/dist/gemini.js.map +1 -0
- package/dist/helpers.cjs +276 -0
- package/dist/helpers.cjs.map +1 -0
- package/dist/helpers.d.cts +39 -0
- package/dist/helpers.d.cts.map +1 -0
- package/dist/helpers.d.ts +39 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +259 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.cjs +113 -0
- package/dist/index.d.cts +42 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.js +39 -0
- package/dist/interruption.cjs +40 -0
- package/dist/interruption.cjs.map +1 -0
- package/dist/interruption.d.cts +15 -0
- package/dist/interruption.d.cts.map +1 -0
- package/dist/interruption.d.ts +15 -0
- package/dist/interruption.d.ts.map +1 -0
- package/dist/interruption.js +39 -0
- package/dist/interruption.js.map +1 -0
- package/dist/journal.cjs +65 -0
- package/dist/journal.cjs.map +1 -0
- package/dist/journal.d.cts +23 -0
- package/dist/journal.d.cts.map +1 -0
- package/dist/journal.d.ts +23 -0
- package/dist/journal.d.ts.map +1 -0
- package/dist/journal.js +65 -0
- package/dist/journal.js.map +1 -0
- package/dist/jsonrpc.cjs +91 -0
- package/dist/jsonrpc.cjs.map +1 -0
- package/dist/jsonrpc.d.cts +24 -0
- package/dist/jsonrpc.d.cts.map +1 -0
- package/dist/jsonrpc.d.ts +24 -0
- package/dist/jsonrpc.d.ts.map +1 -0
- package/dist/jsonrpc.js +90 -0
- package/dist/jsonrpc.js.map +1 -0
- package/dist/llmock.cjs +223 -0
- package/dist/llmock.cjs.map +1 -0
- package/dist/llmock.d.cts +70 -0
- package/dist/llmock.d.cts.map +1 -0
- package/dist/llmock.d.ts +70 -0
- package/dist/llmock.d.ts.map +1 -0
- package/dist/llmock.js +223 -0
- package/dist/llmock.js.map +1 -0
- package/dist/logger.cjs +29 -0
- package/dist/logger.cjs.map +1 -0
- package/dist/logger.d.cts +14 -0
- package/dist/logger.d.cts.map +1 -0
- package/dist/logger.d.ts +14 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +28 -0
- package/dist/logger.js.map +1 -0
- package/dist/mcp-handler.cjs +189 -0
- package/dist/mcp-handler.cjs.map +1 -0
- package/dist/mcp-handler.js +188 -0
- package/dist/mcp-handler.js.map +1 -0
- package/dist/mcp-mock.cjs +169 -0
- package/dist/mcp-mock.cjs.map +1 -0
- package/dist/mcp-mock.d.cts +40 -0
- package/dist/mcp-mock.d.cts.map +1 -0
- package/dist/mcp-mock.d.ts +40 -0
- package/dist/mcp-mock.d.ts.map +1 -0
- package/dist/mcp-mock.js +167 -0
- package/dist/mcp-mock.js.map +1 -0
- package/dist/mcp-stub.cjs +4 -0
- package/dist/mcp-stub.d.cts +3 -0
- package/dist/mcp-stub.d.ts +3 -0
- package/dist/mcp-stub.js +3 -0
- package/dist/mcp-types.d.cts +65 -0
- package/dist/mcp-types.d.cts.map +1 -0
- package/dist/mcp-types.d.ts +65 -0
- package/dist/mcp-types.d.ts.map +1 -0
- package/dist/messages.cjs +489 -0
- package/dist/messages.cjs.map +1 -0
- package/dist/messages.d.cts +10 -0
- package/dist/messages.d.cts.map +1 -0
- package/dist/messages.d.ts +10 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +489 -0
- package/dist/messages.js.map +1 -0
- package/dist/metrics.cjs +160 -0
- package/dist/metrics.cjs.map +1 -0
- package/dist/metrics.d.cts +24 -0
- package/dist/metrics.d.cts.map +1 -0
- package/dist/metrics.d.ts +24 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +158 -0
- package/dist/metrics.js.map +1 -0
- package/dist/moderation.cjs +91 -0
- package/dist/moderation.cjs.map +1 -0
- package/dist/moderation.d.cts +23 -0
- package/dist/moderation.d.cts.map +1 -0
- package/dist/moderation.d.ts +23 -0
- package/dist/moderation.d.ts.map +1 -0
- package/dist/moderation.js +91 -0
- package/dist/moderation.js.map +1 -0
- package/dist/ndjson-writer.cjs +31 -0
- package/dist/ndjson-writer.cjs.map +1 -0
- package/dist/ndjson-writer.d.cts +17 -0
- package/dist/ndjson-writer.d.cts.map +1 -0
- package/dist/ndjson-writer.d.ts +17 -0
- package/dist/ndjson-writer.d.ts.map +1 -0
- package/dist/ndjson-writer.js +31 -0
- package/dist/ndjson-writer.js.map +1 -0
- package/dist/ollama.cjs +519 -0
- package/dist/ollama.cjs.map +1 -0
- package/dist/ollama.d.cts +34 -0
- package/dist/ollama.d.cts.map +1 -0
- package/dist/ollama.d.ts +34 -0
- package/dist/ollama.d.ts.map +1 -0
- package/dist/ollama.js +517 -0
- package/dist/ollama.js.map +1 -0
- package/dist/recorder.cjs +311 -0
- package/dist/recorder.cjs.map +1 -0
- package/dist/recorder.d.cts +23 -0
- package/dist/recorder.d.cts.map +1 -0
- package/dist/recorder.d.ts +23 -0
- package/dist/recorder.d.ts.map +1 -0
- package/dist/recorder.js +305 -0
- package/dist/recorder.js.map +1 -0
- package/dist/rerank.cjs +71 -0
- package/dist/rerank.cjs.map +1 -0
- package/dist/rerank.d.cts +22 -0
- package/dist/rerank.d.cts.map +1 -0
- package/dist/rerank.d.ts +22 -0
- package/dist/rerank.d.ts.map +1 -0
- package/dist/rerank.js +71 -0
- package/dist/rerank.js.map +1 -0
- package/dist/responses.cjs +637 -0
- package/dist/responses.cjs.map +1 -0
- package/dist/responses.d.cts +16 -0
- package/dist/responses.d.cts.map +1 -0
- package/dist/responses.d.ts +16 -0
- package/dist/responses.d.ts.map +1 -0
- package/dist/responses.js +634 -0
- package/dist/responses.js.map +1 -0
- package/dist/router.cjs +68 -0
- package/dist/router.cjs.map +1 -0
- package/dist/router.d.cts +16 -0
- package/dist/router.d.cts.map +1 -0
- package/dist/router.d.ts +16 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +65 -0
- package/dist/router.js.map +1 -0
- package/dist/search.cjs +59 -0
- package/dist/search.cjs.map +1 -0
- package/dist/search.d.cts +23 -0
- package/dist/search.d.cts.map +1 -0
- package/dist/search.d.ts +23 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +59 -0
- package/dist/search.js.map +1 -0
- package/dist/server.cjs +935 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.cts +28 -0
- package/dist/server.d.cts.map +1 -0
- package/dist/server.d.ts +28 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +933 -0
- package/dist/server.js.map +1 -0
- package/dist/sse-writer.cjs +59 -0
- package/dist/sse-writer.cjs.map +1 -0
- package/dist/sse-writer.d.cts +19 -0
- package/dist/sse-writer.d.cts.map +1 -0
- package/dist/sse-writer.d.ts +19 -0
- package/dist/sse-writer.d.ts.map +1 -0
- package/dist/sse-writer.js +55 -0
- package/dist/sse-writer.js.map +1 -0
- package/dist/stream-collapse.cjs +496 -0
- package/dist/stream-collapse.cjs.map +1 -0
- package/dist/stream-collapse.d.cts +70 -0
- package/dist/stream-collapse.d.cts.map +1 -0
- package/dist/stream-collapse.d.ts +70 -0
- package/dist/stream-collapse.d.ts.map +1 -0
- package/dist/stream-collapse.js +489 -0
- package/dist/stream-collapse.js.map +1 -0
- package/dist/suite.cjs +46 -0
- package/dist/suite.cjs.map +1 -0
- package/dist/suite.d.cts +31 -0
- package/dist/suite.d.cts.map +1 -0
- package/dist/suite.d.ts +31 -0
- package/dist/suite.d.ts.map +1 -0
- package/dist/suite.js +46 -0
- package/dist/suite.js.map +1 -0
- package/dist/types.d.cts +243 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.ts +243 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/url.cjs +21 -0
- package/dist/url.cjs.map +1 -0
- package/dist/url.d.cts +16 -0
- package/dist/url.d.cts.map +1 -0
- package/dist/url.d.ts +16 -0
- package/dist/url.d.ts.map +1 -0
- package/dist/url.js +20 -0
- package/dist/url.js.map +1 -0
- package/dist/vector-handler.cjs +239 -0
- package/dist/vector-handler.cjs.map +1 -0
- package/dist/vector-handler.js +238 -0
- package/dist/vector-handler.js.map +1 -0
- package/dist/vector-mock.cjs +229 -0
- package/dist/vector-mock.cjs.map +1 -0
- package/dist/vector-mock.d.cts +39 -0
- package/dist/vector-mock.d.cts.map +1 -0
- package/dist/vector-mock.d.ts +39 -0
- package/dist/vector-mock.d.ts.map +1 -0
- package/dist/vector-mock.js +227 -0
- package/dist/vector-mock.js.map +1 -0
- package/dist/vector-stub.cjs +4 -0
- package/dist/vector-stub.d.cts +3 -0
- package/dist/vector-stub.d.ts +3 -0
- package/dist/vector-stub.js +3 -0
- package/dist/vector-types.d.cts +32 -0
- package/dist/vector-types.d.cts.map +1 -0
- package/dist/vector-types.d.ts +32 -0
- package/dist/vector-types.d.ts.map +1 -0
- package/dist/watcher.cjs +59 -0
- package/dist/watcher.cjs.map +1 -0
- package/dist/watcher.js +58 -0
- package/dist/watcher.js.map +1 -0
- package/dist/ws-framing.cjs +187 -0
- package/dist/ws-framing.cjs.map +1 -0
- package/dist/ws-framing.d.cts +26 -0
- package/dist/ws-framing.d.cts.map +1 -0
- package/dist/ws-framing.d.ts +26 -0
- package/dist/ws-framing.d.ts.map +1 -0
- package/dist/ws-framing.js +184 -0
- package/dist/ws-framing.js.map +1 -0
- package/dist/ws-gemini-live.cjs +364 -0
- package/dist/ws-gemini-live.cjs.map +1 -0
- package/dist/ws-gemini-live.d.cts +18 -0
- package/dist/ws-gemini-live.d.cts.map +1 -0
- package/dist/ws-gemini-live.d.ts +18 -0
- package/dist/ws-gemini-live.d.ts.map +1 -0
- package/dist/ws-gemini-live.js +364 -0
- package/dist/ws-gemini-live.js.map +1 -0
- package/dist/ws-realtime.cjs +435 -0
- package/dist/ws-realtime.cjs.map +1 -0
- package/dist/ws-realtime.d.cts +17 -0
- package/dist/ws-realtime.d.cts.map +1 -0
- package/dist/ws-realtime.d.ts +17 -0
- package/dist/ws-realtime.d.ts.map +1 -0
- package/dist/ws-realtime.js +435 -0
- package/dist/ws-realtime.js.map +1 -0
- package/dist/ws-responses.cjs +164 -0
- package/dist/ws-responses.cjs.map +1 -0
- package/dist/ws-responses.d.cts +18 -0
- package/dist/ws-responses.d.cts.map +1 -0
- package/dist/ws-responses.d.ts +18 -0
- package/dist/ws-responses.d.ts.map +1 -0
- package/dist/ws-responses.js +164 -0
- package/dist/ws-responses.js.map +1 -0
- package/fixtures/example-greeting.json +12 -0
- package/fixtures/example-multi-turn.json +14 -0
- package/fixtures/example-tool-call.json +15 -0
- package/package.json +118 -0
- package/skills/write-fixtures/SKILL.md +625 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_helpers = require('./helpers.cjs');
|
|
3
|
+
const require_a2a_handler = require('./a2a-handler.cjs');
|
|
4
|
+
const require_jsonrpc = require('./jsonrpc.cjs');
|
|
5
|
+
let node_http = require("node:http");
|
|
6
|
+
node_http = require_runtime.__toESM(node_http);
|
|
7
|
+
|
|
8
|
+
//#region src/a2a-mock.ts
|
|
9
|
+
var A2AMock = class {
|
|
10
|
+
agents = /* @__PURE__ */ new Map();
|
|
11
|
+
tasks = /* @__PURE__ */ new Map();
|
|
12
|
+
server = null;
|
|
13
|
+
journal = null;
|
|
14
|
+
registry = null;
|
|
15
|
+
options;
|
|
16
|
+
baseUrl = "";
|
|
17
|
+
dispatcher;
|
|
18
|
+
constructor(options) {
|
|
19
|
+
this.options = options ?? {};
|
|
20
|
+
this.dispatcher = this.buildDispatcher();
|
|
21
|
+
}
|
|
22
|
+
buildDispatcher() {
|
|
23
|
+
return require_jsonrpc.createJsonRpcDispatcher({ methods: require_a2a_handler.createA2AMethods(this.agents, this.tasks) });
|
|
24
|
+
}
|
|
25
|
+
registerAgent(def) {
|
|
26
|
+
this.agents.set(def.name, {
|
|
27
|
+
def,
|
|
28
|
+
patterns: []
|
|
29
|
+
});
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
onMessage(agentName, pattern, parts) {
|
|
33
|
+
const agent = this.agents.get(agentName);
|
|
34
|
+
if (!agent) throw new Error(`Agent "${agentName}" not registered`);
|
|
35
|
+
agent.patterns.push({
|
|
36
|
+
kind: "message",
|
|
37
|
+
pattern,
|
|
38
|
+
agentName,
|
|
39
|
+
parts
|
|
40
|
+
});
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
onTask(agentName, pattern, artifacts) {
|
|
44
|
+
const agent = this.agents.get(agentName);
|
|
45
|
+
if (!agent) throw new Error(`Agent "${agentName}" not registered`);
|
|
46
|
+
agent.patterns.push({
|
|
47
|
+
kind: "task",
|
|
48
|
+
pattern,
|
|
49
|
+
agentName,
|
|
50
|
+
artifacts
|
|
51
|
+
});
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
onStreamingTask(agentName, pattern, events, delayMs) {
|
|
55
|
+
const agent = this.agents.get(agentName);
|
|
56
|
+
if (!agent) throw new Error(`Agent "${agentName}" not registered`);
|
|
57
|
+
agent.patterns.push({
|
|
58
|
+
kind: "streamingTask",
|
|
59
|
+
pattern,
|
|
60
|
+
agentName,
|
|
61
|
+
events,
|
|
62
|
+
delayMs
|
|
63
|
+
});
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
async handleRequest(req, res, pathname) {
|
|
67
|
+
if (req.method === "GET" && pathname === "/.well-known/agent-card.json") {
|
|
68
|
+
if (this.registry) this.registry.incrementCounter("aimock_a2a_requests_total", { method: "GetAgentCard" });
|
|
69
|
+
const card = require_a2a_handler.buildAgentCard(this.agents, this.baseUrl);
|
|
70
|
+
res.writeHead(200, {
|
|
71
|
+
"Content-Type": "application/json",
|
|
72
|
+
"A2A-Version": "1.0"
|
|
73
|
+
});
|
|
74
|
+
res.end(JSON.stringify(card));
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
if (req.method === "POST" && (pathname === "/" || pathname === "")) {
|
|
78
|
+
const body = await require_helpers.readBody(req);
|
|
79
|
+
let parsed;
|
|
80
|
+
try {
|
|
81
|
+
parsed = JSON.parse(body);
|
|
82
|
+
} catch {
|
|
83
|
+
res.writeHead(200, {
|
|
84
|
+
"Content-Type": "application/json",
|
|
85
|
+
"A2A-Version": "1.0"
|
|
86
|
+
});
|
|
87
|
+
res.end(JSON.stringify({
|
|
88
|
+
jsonrpc: "2.0",
|
|
89
|
+
id: null,
|
|
90
|
+
error: {
|
|
91
|
+
code: -32700,
|
|
92
|
+
message: "Parse error"
|
|
93
|
+
}
|
|
94
|
+
}));
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
if (this.registry) {
|
|
98
|
+
const rpcMethod = typeof parsed === "object" && parsed !== null && "method" in parsed ? String(parsed.method) : "unknown";
|
|
99
|
+
this.registry.incrementCounter("aimock_a2a_requests_total", { method: rpcMethod });
|
|
100
|
+
}
|
|
101
|
+
if (isStreamingRequest(parsed)) {
|
|
102
|
+
await this.handleStreamingMessage(parsed, req, res);
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
res.setHeader("A2A-Version", "1.0");
|
|
106
|
+
await this.dispatcher(req, res, body);
|
|
107
|
+
if (this.journal) this.journal.add({
|
|
108
|
+
method: req.method ?? "POST",
|
|
109
|
+
path: pathname,
|
|
110
|
+
headers: require_helpers.flattenHeaders(req.headers),
|
|
111
|
+
body: null,
|
|
112
|
+
service: "a2a",
|
|
113
|
+
response: {
|
|
114
|
+
status: res.statusCode,
|
|
115
|
+
fixture: null
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
health() {
|
|
123
|
+
return {
|
|
124
|
+
status: "ok",
|
|
125
|
+
agents: this.agents.size,
|
|
126
|
+
tasks: this.tasks.size
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
setJournal(journal) {
|
|
130
|
+
this.journal = journal;
|
|
131
|
+
}
|
|
132
|
+
setRegistry(registry) {
|
|
133
|
+
this.registry = registry;
|
|
134
|
+
}
|
|
135
|
+
async start() {
|
|
136
|
+
if (this.server) throw new Error("A2AMock server already started");
|
|
137
|
+
const host = this.options.host ?? "127.0.0.1";
|
|
138
|
+
const port = this.options.port ?? 0;
|
|
139
|
+
return new Promise((resolve, reject) => {
|
|
140
|
+
const srv = node_http.createServer(async (req, res) => {
|
|
141
|
+
const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
|
|
142
|
+
await this.handleRequest(req, res, url.pathname).catch((err) => {
|
|
143
|
+
console.error("A2AMock request error:", err);
|
|
144
|
+
if (!res.headersSent) {
|
|
145
|
+
res.writeHead(500);
|
|
146
|
+
res.end("Internal server error");
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
srv.on("error", reject);
|
|
151
|
+
srv.listen(port, host, () => {
|
|
152
|
+
const addr = srv.address();
|
|
153
|
+
if (typeof addr === "object" && addr !== null) this.baseUrl = `http://${host}:${addr.port}`;
|
|
154
|
+
this.server = srv;
|
|
155
|
+
resolve(this.baseUrl);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
async stop() {
|
|
160
|
+
if (!this.server) throw new Error("A2AMock server not started");
|
|
161
|
+
const srv = this.server;
|
|
162
|
+
await new Promise((resolve, reject) => {
|
|
163
|
+
srv.close((err) => err ? reject(err) : resolve());
|
|
164
|
+
});
|
|
165
|
+
this.server = null;
|
|
166
|
+
}
|
|
167
|
+
get url() {
|
|
168
|
+
if (!this.server) throw new Error("A2AMock server not started");
|
|
169
|
+
return this.baseUrl;
|
|
170
|
+
}
|
|
171
|
+
reset() {
|
|
172
|
+
this.agents.clear();
|
|
173
|
+
this.tasks.clear();
|
|
174
|
+
return this;
|
|
175
|
+
}
|
|
176
|
+
setBaseUrl(url) {
|
|
177
|
+
this.baseUrl = url;
|
|
178
|
+
}
|
|
179
|
+
async handleStreamingMessage(parsed, req, res) {
|
|
180
|
+
const params = parsed.params;
|
|
181
|
+
const id = parsed.id;
|
|
182
|
+
const text = require_a2a_handler.extractText(params);
|
|
183
|
+
const entry = require_a2a_handler.findStreamingMatch(text, this.agents);
|
|
184
|
+
if (!entry) {
|
|
185
|
+
res.writeHead(200, {
|
|
186
|
+
"Content-Type": "application/json",
|
|
187
|
+
"A2A-Version": "1.0"
|
|
188
|
+
});
|
|
189
|
+
res.end(JSON.stringify({
|
|
190
|
+
jsonrpc: "2.0",
|
|
191
|
+
id,
|
|
192
|
+
error: {
|
|
193
|
+
code: -32e3,
|
|
194
|
+
message: "No matching pattern for message"
|
|
195
|
+
}
|
|
196
|
+
}));
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const taskId = require_helpers.generateId("task");
|
|
200
|
+
const contextId = require_helpers.generateId("ctx");
|
|
201
|
+
const userParts = params?.message ? params.message.parts ?? [{ text }] : [{ text }];
|
|
202
|
+
const task = {
|
|
203
|
+
id: taskId,
|
|
204
|
+
contextId,
|
|
205
|
+
status: {
|
|
206
|
+
state: "TASK_STATE_WORKING",
|
|
207
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
208
|
+
},
|
|
209
|
+
artifacts: [],
|
|
210
|
+
history: [{
|
|
211
|
+
messageId: require_helpers.generateId("msg"),
|
|
212
|
+
role: "ROLE_USER",
|
|
213
|
+
parts: userParts
|
|
214
|
+
}]
|
|
215
|
+
};
|
|
216
|
+
this.tasks.set(taskId, task);
|
|
217
|
+
res.writeHead(200, {
|
|
218
|
+
"Content-Type": "text/event-stream",
|
|
219
|
+
"Cache-Control": "no-cache",
|
|
220
|
+
Connection: "keep-alive",
|
|
221
|
+
"A2A-Version": "1.0"
|
|
222
|
+
});
|
|
223
|
+
const delayMs = entry.delayMs ?? 0;
|
|
224
|
+
for (const event of entry.events) {
|
|
225
|
+
if (delayMs > 0) await delay(delayMs);
|
|
226
|
+
let resultPayload;
|
|
227
|
+
if (event.type === "status") {
|
|
228
|
+
task.status = {
|
|
229
|
+
state: event.state,
|
|
230
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
231
|
+
};
|
|
232
|
+
resultPayload = { task: {
|
|
233
|
+
id: task.id,
|
|
234
|
+
contextId: task.contextId,
|
|
235
|
+
status: task.status
|
|
236
|
+
} };
|
|
237
|
+
} else {
|
|
238
|
+
const artifact = {
|
|
239
|
+
parts: event.parts,
|
|
240
|
+
name: event.name,
|
|
241
|
+
append: event.append,
|
|
242
|
+
lastChunk: event.lastChunk
|
|
243
|
+
};
|
|
244
|
+
task.artifacts.push({
|
|
245
|
+
parts: event.parts,
|
|
246
|
+
name: event.name
|
|
247
|
+
});
|
|
248
|
+
resultPayload = {
|
|
249
|
+
task: {
|
|
250
|
+
id: task.id,
|
|
251
|
+
contextId: task.contextId,
|
|
252
|
+
status: task.status
|
|
253
|
+
},
|
|
254
|
+
artifact
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
const envelope = JSON.stringify({
|
|
258
|
+
jsonrpc: "2.0",
|
|
259
|
+
id,
|
|
260
|
+
result: resultPayload
|
|
261
|
+
});
|
|
262
|
+
res.write(`data: ${envelope}\n\n`);
|
|
263
|
+
}
|
|
264
|
+
if (!require_a2a_handler.TERMINAL_STATES.has(task.status.state)) task.status = {
|
|
265
|
+
state: "TASK_STATE_COMPLETED",
|
|
266
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
267
|
+
};
|
|
268
|
+
res.end();
|
|
269
|
+
if (this.journal) this.journal.add({
|
|
270
|
+
method: "POST",
|
|
271
|
+
path: "/",
|
|
272
|
+
headers: require_helpers.flattenHeaders(req.headers),
|
|
273
|
+
body: null,
|
|
274
|
+
service: "a2a",
|
|
275
|
+
response: {
|
|
276
|
+
status: res.statusCode,
|
|
277
|
+
fixture: null
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
function isStreamingRequest(parsed) {
|
|
283
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return false;
|
|
284
|
+
return parsed.method === "SendStreamingMessage";
|
|
285
|
+
}
|
|
286
|
+
function delay(ms) {
|
|
287
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
//#endregion
|
|
291
|
+
exports.A2AMock = A2AMock;
|
|
292
|
+
//# sourceMappingURL=a2a-mock.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2a-mock.cjs","names":["createJsonRpcDispatcher","createA2AMethods","buildAgentCard","readBody","flattenHeaders","http","extractText","findStreamingMatch","generateId","TERMINAL_STATES"],"sources":["../src/a2a-mock.ts"],"sourcesContent":["import * as http from \"node:http\";\nimport type { Mountable } from \"./types.js\";\nimport type { Journal } from \"./journal.js\";\nimport type { MetricsRegistry } from \"./metrics.js\";\nimport type {\n A2AAgentDefinition,\n A2AArtifact,\n A2AMockOptions,\n A2APart,\n A2AStreamEvent,\n A2ATask,\n} from \"./a2a-types.js\";\nimport type { PatternEntry } from \"./a2a-handler.js\";\nimport {\n buildAgentCard,\n createA2AMethods,\n extractText,\n findStreamingMatch,\n TERMINAL_STATES,\n} from \"./a2a-handler.js\";\nimport { createJsonRpcDispatcher } from \"./jsonrpc.js\";\nimport { generateId, flattenHeaders, readBody } from \"./helpers.js\";\n\nexport class A2AMock implements Mountable {\n private agents: Map<string, { def: A2AAgentDefinition; patterns: PatternEntry[] }> = new Map();\n private tasks: Map<string, A2ATask> = new Map();\n private server: http.Server | null = null;\n private journal: Journal | null = null;\n private registry: MetricsRegistry | null = null;\n private options: A2AMockOptions;\n private baseUrl = \"\";\n private dispatcher: ReturnType<typeof createJsonRpcDispatcher>;\n\n constructor(options?: A2AMockOptions) {\n this.options = options ?? {};\n this.dispatcher = this.buildDispatcher();\n }\n\n private buildDispatcher() {\n const methods = createA2AMethods(this.agents, this.tasks);\n return createJsonRpcDispatcher({ methods });\n }\n\n // ---- Agent registration ----\n\n registerAgent(def: A2AAgentDefinition): this {\n this.agents.set(def.name, { def, patterns: [] });\n return this;\n }\n\n // ---- Pattern registration ----\n\n onMessage(agentName: string, pattern: string | RegExp, parts: A2APart[]): this {\n const agent = this.agents.get(agentName);\n if (!agent) {\n throw new Error(`Agent \"${agentName}\" not registered`);\n }\n agent.patterns.push({ kind: \"message\", pattern, agentName, parts });\n return this;\n }\n\n onTask(agentName: string, pattern: string | RegExp, artifacts: A2AArtifact[]): this {\n const agent = this.agents.get(agentName);\n if (!agent) {\n throw new Error(`Agent \"${agentName}\" not registered`);\n }\n agent.patterns.push({ kind: \"task\", pattern, agentName, artifacts });\n return this;\n }\n\n onStreamingTask(\n agentName: string,\n pattern: string | RegExp,\n events: A2AStreamEvent[],\n delayMs?: number,\n ): this {\n const agent = this.agents.get(agentName);\n if (!agent) {\n throw new Error(`Agent \"${agentName}\" not registered`);\n }\n agent.patterns.push({ kind: \"streamingTask\", pattern, agentName, events, delayMs });\n return this;\n }\n\n // ---- Mountable interface ----\n\n async handleRequest(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n pathname: string,\n ): Promise<boolean> {\n // Agent card endpoint\n if (req.method === \"GET\" && pathname === \"/.well-known/agent-card.json\") {\n if (this.registry) {\n this.registry.incrementCounter(\"aimock_a2a_requests_total\", { method: \"GetAgentCard\" });\n }\n const card = buildAgentCard(this.agents, this.baseUrl);\n res.writeHead(200, {\n \"Content-Type\": \"application/json\",\n \"A2A-Version\": \"1.0\",\n });\n res.end(JSON.stringify(card));\n return true;\n }\n\n // JSON-RPC endpoint\n if (req.method === \"POST\" && (pathname === \"/\" || pathname === \"\")) {\n const body = await readBody(req);\n\n // Check for SendStreamingMessage before dispatching\n let parsed: unknown;\n try {\n parsed = JSON.parse(body);\n } catch {\n res.writeHead(200, {\n \"Content-Type\": \"application/json\",\n \"A2A-Version\": \"1.0\",\n });\n res.end(\n JSON.stringify({\n jsonrpc: \"2.0\",\n id: null,\n error: { code: -32700, message: \"Parse error\" },\n }),\n );\n return true;\n }\n\n // Record A2A method metric\n if (this.registry) {\n const rpcMethod =\n typeof parsed === \"object\" && parsed !== null && \"method\" in parsed\n ? String((parsed as Record<string, unknown>).method)\n : \"unknown\";\n this.registry.incrementCounter(\"aimock_a2a_requests_total\", { method: rpcMethod });\n }\n\n if (isStreamingRequest(parsed)) {\n await this.handleStreamingMessage(parsed as Record<string, unknown>, req, res);\n return true;\n }\n\n // Regular JSON-RPC dispatch\n // Add A2A-Version header before dispatching\n res.setHeader(\"A2A-Version\", \"1.0\");\n\n await this.dispatcher(req, res, body);\n\n // Journal the request after the handler completes\n if (this.journal) {\n this.journal.add({\n method: req.method ?? \"POST\",\n path: pathname,\n headers: flattenHeaders(req.headers),\n body: null,\n service: \"a2a\",\n response: { status: res.statusCode, fixture: null },\n });\n }\n\n return true;\n }\n\n return false;\n }\n\n health(): { status: string; agents: number; tasks: number } {\n return {\n status: \"ok\",\n agents: this.agents.size,\n tasks: this.tasks.size,\n };\n }\n\n setJournal(journal: Journal): void {\n this.journal = journal;\n }\n\n setRegistry(registry: MetricsRegistry): void {\n this.registry = registry;\n }\n\n // ---- Standalone mode ----\n\n async start(): Promise<string> {\n if (this.server) {\n throw new Error(\"A2AMock server already started\");\n }\n\n const host = this.options.host ?? \"127.0.0.1\";\n const port = this.options.port ?? 0;\n\n return new Promise<string>((resolve, reject) => {\n const srv = http.createServer(async (req, res) => {\n const url = new URL(req.url ?? \"/\", `http://${req.headers.host ?? \"localhost\"}`);\n await this.handleRequest(req, res, url.pathname).catch((err) => {\n console.error(\"A2AMock request error:\", err);\n if (!res.headersSent) {\n res.writeHead(500);\n res.end(\"Internal server error\");\n }\n });\n });\n\n srv.on(\"error\", reject);\n\n srv.listen(port, host, () => {\n const addr = srv.address();\n if (typeof addr === \"object\" && addr !== null) {\n this.baseUrl = `http://${host}:${addr.port}`;\n }\n this.server = srv;\n resolve(this.baseUrl);\n });\n });\n }\n\n async stop(): Promise<void> {\n if (!this.server) {\n throw new Error(\"A2AMock server not started\");\n }\n const srv = this.server;\n await new Promise<void>((resolve, reject) => {\n srv.close((err: Error | undefined) => (err ? reject(err) : resolve()));\n });\n this.server = null;\n }\n\n get url(): string {\n if (!this.server) {\n throw new Error(\"A2AMock server not started\");\n }\n return this.baseUrl;\n }\n\n // ---- Reset ----\n\n reset(): this {\n this.agents.clear();\n this.tasks.clear();\n return this;\n }\n\n // ---- Internal: set base URL when mounted ----\n\n setBaseUrl(url: string): void {\n this.baseUrl = url;\n }\n\n // ---- Private: streaming handler ----\n\n private async handleStreamingMessage(\n parsed: Record<string, unknown>,\n req: http.IncomingMessage,\n res: http.ServerResponse,\n ): Promise<void> {\n const params = parsed.params as Record<string, unknown> | undefined;\n const id = parsed.id as string | number;\n const text = extractText(params);\n const entry = findStreamingMatch(text, this.agents);\n\n if (!entry) {\n res.writeHead(200, {\n \"Content-Type\": \"application/json\",\n \"A2A-Version\": \"1.0\",\n });\n res.end(\n JSON.stringify({\n jsonrpc: \"2.0\",\n id,\n error: { code: -32000, message: \"No matching pattern for message\" },\n }),\n );\n return;\n }\n\n // Create task for the streaming response\n const taskId = generateId(\"task\");\n const contextId = generateId(\"ctx\");\n const userParts: A2APart[] = params?.message\n ? (((params.message as Record<string, unknown>).parts as A2APart[]) ?? [{ text }])\n : [{ text }];\n\n const task: A2ATask = {\n id: taskId,\n contextId,\n status: { state: \"TASK_STATE_WORKING\", timestamp: new Date().toISOString() },\n artifacts: [],\n history: [\n {\n messageId: generateId(\"msg\"),\n role: \"ROLE_USER\",\n parts: userParts,\n },\n ],\n };\n this.tasks.set(taskId, task);\n\n // Write SSE response\n res.writeHead(200, {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"A2A-Version\": \"1.0\",\n });\n\n const delayMs = entry.delayMs ?? 0;\n\n for (const event of entry.events) {\n if (delayMs > 0) {\n await delay(delayMs);\n }\n\n let resultPayload: Record<string, unknown>;\n\n if (event.type === \"status\") {\n task.status = { state: event.state, timestamp: new Date().toISOString() };\n resultPayload = {\n task: {\n id: task.id,\n contextId: task.contextId,\n status: task.status,\n },\n };\n } else {\n // artifact event\n const artifact = {\n parts: event.parts,\n name: event.name,\n append: event.append,\n lastChunk: event.lastChunk,\n };\n task.artifacts.push({ parts: event.parts, name: event.name });\n resultPayload = {\n task: {\n id: task.id,\n contextId: task.contextId,\n status: task.status,\n },\n artifact,\n };\n }\n\n const envelope = JSON.stringify({\n jsonrpc: \"2.0\",\n id,\n result: resultPayload,\n });\n\n res.write(`data: ${envelope}\\n\\n`);\n }\n\n // Final completion — only set COMPLETED if the task is not already in a terminal state\n if (!TERMINAL_STATES.has(task.status.state)) {\n task.status = { state: \"TASK_STATE_COMPLETED\", timestamp: new Date().toISOString() };\n }\n\n res.end();\n\n // Journal\n if (this.journal) {\n this.journal.add({\n method: \"POST\",\n path: \"/\",\n headers: flattenHeaders(req.headers),\n body: null,\n service: \"a2a\",\n response: { status: res.statusCode, fixture: null },\n });\n }\n }\n}\n\n// ---- Helpers ----\n\nfunction isStreamingRequest(parsed: unknown): boolean {\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) return false;\n const obj = parsed as Record<string, unknown>;\n return obj.method === \"SendStreamingMessage\";\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"],"mappings":";;;;;;;;AAuBA,IAAa,UAAb,MAA0C;CACxC,AAAQ,yBAA6E,IAAI,KAAK;CAC9F,AAAQ,wBAA8B,IAAI,KAAK;CAC/C,AAAQ,SAA6B;CACrC,AAAQ,UAA0B;CAClC,AAAQ,WAAmC;CAC3C,AAAQ;CACR,AAAQ,UAAU;CAClB,AAAQ;CAER,YAAY,SAA0B;AACpC,OAAK,UAAU,WAAW,EAAE;AAC5B,OAAK,aAAa,KAAK,iBAAiB;;CAG1C,AAAQ,kBAAkB;AAExB,SAAOA,wCAAwB,EAAE,SADjBC,qCAAiB,KAAK,QAAQ,KAAK,MAAM,EACf,CAAC;;CAK7C,cAAc,KAA+B;AAC3C,OAAK,OAAO,IAAI,IAAI,MAAM;GAAE;GAAK,UAAU,EAAE;GAAE,CAAC;AAChD,SAAO;;CAKT,UAAU,WAAmB,SAA0B,OAAwB;EAC7E,MAAM,QAAQ,KAAK,OAAO,IAAI,UAAU;AACxC,MAAI,CAAC,MACH,OAAM,IAAI,MAAM,UAAU,UAAU,kBAAkB;AAExD,QAAM,SAAS,KAAK;GAAE,MAAM;GAAW;GAAS;GAAW;GAAO,CAAC;AACnE,SAAO;;CAGT,OAAO,WAAmB,SAA0B,WAAgC;EAClF,MAAM,QAAQ,KAAK,OAAO,IAAI,UAAU;AACxC,MAAI,CAAC,MACH,OAAM,IAAI,MAAM,UAAU,UAAU,kBAAkB;AAExD,QAAM,SAAS,KAAK;GAAE,MAAM;GAAQ;GAAS;GAAW;GAAW,CAAC;AACpE,SAAO;;CAGT,gBACE,WACA,SACA,QACA,SACM;EACN,MAAM,QAAQ,KAAK,OAAO,IAAI,UAAU;AACxC,MAAI,CAAC,MACH,OAAM,IAAI,MAAM,UAAU,UAAU,kBAAkB;AAExD,QAAM,SAAS,KAAK;GAAE,MAAM;GAAiB;GAAS;GAAW;GAAQ;GAAS,CAAC;AACnF,SAAO;;CAKT,MAAM,cACJ,KACA,KACA,UACkB;AAElB,MAAI,IAAI,WAAW,SAAS,aAAa,gCAAgC;AACvE,OAAI,KAAK,SACP,MAAK,SAAS,iBAAiB,6BAA6B,EAAE,QAAQ,gBAAgB,CAAC;GAEzF,MAAM,OAAOC,mCAAe,KAAK,QAAQ,KAAK,QAAQ;AACtD,OAAI,UAAU,KAAK;IACjB,gBAAgB;IAChB,eAAe;IAChB,CAAC;AACF,OAAI,IAAI,KAAK,UAAU,KAAK,CAAC;AAC7B,UAAO;;AAIT,MAAI,IAAI,WAAW,WAAW,aAAa,OAAO,aAAa,KAAK;GAClE,MAAM,OAAO,MAAMC,yBAAS,IAAI;GAGhC,IAAI;AACJ,OAAI;AACF,aAAS,KAAK,MAAM,KAAK;WACnB;AACN,QAAI,UAAU,KAAK;KACjB,gBAAgB;KAChB,eAAe;KAChB,CAAC;AACF,QAAI,IACF,KAAK,UAAU;KACb,SAAS;KACT,IAAI;KACJ,OAAO;MAAE,MAAM;MAAQ,SAAS;MAAe;KAChD,CAAC,CACH;AACD,WAAO;;AAIT,OAAI,KAAK,UAAU;IACjB,MAAM,YACJ,OAAO,WAAW,YAAY,WAAW,QAAQ,YAAY,SACzD,OAAQ,OAAmC,OAAO,GAClD;AACN,SAAK,SAAS,iBAAiB,6BAA6B,EAAE,QAAQ,WAAW,CAAC;;AAGpF,OAAI,mBAAmB,OAAO,EAAE;AAC9B,UAAM,KAAK,uBAAuB,QAAmC,KAAK,IAAI;AAC9E,WAAO;;AAKT,OAAI,UAAU,eAAe,MAAM;AAEnC,SAAM,KAAK,WAAW,KAAK,KAAK,KAAK;AAGrC,OAAI,KAAK,QACP,MAAK,QAAQ,IAAI;IACf,QAAQ,IAAI,UAAU;IACtB,MAAM;IACN,SAASC,+BAAe,IAAI,QAAQ;IACpC,MAAM;IACN,SAAS;IACT,UAAU;KAAE,QAAQ,IAAI;KAAY,SAAS;KAAM;IACpD,CAAC;AAGJ,UAAO;;AAGT,SAAO;;CAGT,SAA4D;AAC1D,SAAO;GACL,QAAQ;GACR,QAAQ,KAAK,OAAO;GACpB,OAAO,KAAK,MAAM;GACnB;;CAGH,WAAW,SAAwB;AACjC,OAAK,UAAU;;CAGjB,YAAY,UAAiC;AAC3C,OAAK,WAAW;;CAKlB,MAAM,QAAyB;AAC7B,MAAI,KAAK,OACP,OAAM,IAAI,MAAM,iCAAiC;EAGnD,MAAM,OAAO,KAAK,QAAQ,QAAQ;EAClC,MAAM,OAAO,KAAK,QAAQ,QAAQ;AAElC,SAAO,IAAI,SAAiB,SAAS,WAAW;GAC9C,MAAM,MAAMC,UAAK,aAAa,OAAO,KAAK,QAAQ;IAChD,MAAM,MAAM,IAAI,IAAI,IAAI,OAAO,KAAK,UAAU,IAAI,QAAQ,QAAQ,cAAc;AAChF,UAAM,KAAK,cAAc,KAAK,KAAK,IAAI,SAAS,CAAC,OAAO,QAAQ;AAC9D,aAAQ,MAAM,0BAA0B,IAAI;AAC5C,SAAI,CAAC,IAAI,aAAa;AACpB,UAAI,UAAU,IAAI;AAClB,UAAI,IAAI,wBAAwB;;MAElC;KACF;AAEF,OAAI,GAAG,SAAS,OAAO;AAEvB,OAAI,OAAO,MAAM,YAAY;IAC3B,MAAM,OAAO,IAAI,SAAS;AAC1B,QAAI,OAAO,SAAS,YAAY,SAAS,KACvC,MAAK,UAAU,UAAU,KAAK,GAAG,KAAK;AAExC,SAAK,SAAS;AACd,YAAQ,KAAK,QAAQ;KACrB;IACF;;CAGJ,MAAM,OAAsB;AAC1B,MAAI,CAAC,KAAK,OACR,OAAM,IAAI,MAAM,6BAA6B;EAE/C,MAAM,MAAM,KAAK;AACjB,QAAM,IAAI,SAAe,SAAS,WAAW;AAC3C,OAAI,OAAO,QAA4B,MAAM,OAAO,IAAI,GAAG,SAAS,CAAE;IACtE;AACF,OAAK,SAAS;;CAGhB,IAAI,MAAc;AAChB,MAAI,CAAC,KAAK,OACR,OAAM,IAAI,MAAM,6BAA6B;AAE/C,SAAO,KAAK;;CAKd,QAAc;AACZ,OAAK,OAAO,OAAO;AACnB,OAAK,MAAM,OAAO;AAClB,SAAO;;CAKT,WAAW,KAAmB;AAC5B,OAAK,UAAU;;CAKjB,MAAc,uBACZ,QACA,KACA,KACe;EACf,MAAM,SAAS,OAAO;EACtB,MAAM,KAAK,OAAO;EAClB,MAAM,OAAOC,gCAAY,OAAO;EAChC,MAAM,QAAQC,uCAAmB,MAAM,KAAK,OAAO;AAEnD,MAAI,CAAC,OAAO;AACV,OAAI,UAAU,KAAK;IACjB,gBAAgB;IAChB,eAAe;IAChB,CAAC;AACF,OAAI,IACF,KAAK,UAAU;IACb,SAAS;IACT;IACA,OAAO;KAAE,MAAM;KAAQ,SAAS;KAAmC;IACpE,CAAC,CACH;AACD;;EAIF,MAAM,SAASC,2BAAW,OAAO;EACjC,MAAM,YAAYA,2BAAW,MAAM;EACnC,MAAM,YAAuB,QAAQ,UAC9B,OAAO,QAAoC,SAAuB,CAAC,EAAE,MAAM,CAAC,GAC/E,CAAC,EAAE,MAAM,CAAC;EAEd,MAAM,OAAgB;GACpB,IAAI;GACJ;GACA,QAAQ;IAAE,OAAO;IAAsB,4BAAW,IAAI,MAAM,EAAC,aAAa;IAAE;GAC5E,WAAW,EAAE;GACb,SAAS,CACP;IACE,WAAWA,2BAAW,MAAM;IAC5B,MAAM;IACN,OAAO;IACR,CACF;GACF;AACD,OAAK,MAAM,IAAI,QAAQ,KAAK;AAG5B,MAAI,UAAU,KAAK;GACjB,gBAAgB;GAChB,iBAAiB;GACjB,YAAY;GACZ,eAAe;GAChB,CAAC;EAEF,MAAM,UAAU,MAAM,WAAW;AAEjC,OAAK,MAAM,SAAS,MAAM,QAAQ;AAChC,OAAI,UAAU,EACZ,OAAM,MAAM,QAAQ;GAGtB,IAAI;AAEJ,OAAI,MAAM,SAAS,UAAU;AAC3B,SAAK,SAAS;KAAE,OAAO,MAAM;KAAO,4BAAW,IAAI,MAAM,EAAC,aAAa;KAAE;AACzE,oBAAgB,EACd,MAAM;KACJ,IAAI,KAAK;KACT,WAAW,KAAK;KAChB,QAAQ,KAAK;KACd,EACF;UACI;IAEL,MAAM,WAAW;KACf,OAAO,MAAM;KACb,MAAM,MAAM;KACZ,QAAQ,MAAM;KACd,WAAW,MAAM;KAClB;AACD,SAAK,UAAU,KAAK;KAAE,OAAO,MAAM;KAAO,MAAM,MAAM;KAAM,CAAC;AAC7D,oBAAgB;KACd,MAAM;MACJ,IAAI,KAAK;MACT,WAAW,KAAK;MAChB,QAAQ,KAAK;MACd;KACD;KACD;;GAGH,MAAM,WAAW,KAAK,UAAU;IAC9B,SAAS;IACT;IACA,QAAQ;IACT,CAAC;AAEF,OAAI,MAAM,SAAS,SAAS,MAAM;;AAIpC,MAAI,CAACC,oCAAgB,IAAI,KAAK,OAAO,MAAM,CACzC,MAAK,SAAS;GAAE,OAAO;GAAwB,4BAAW,IAAI,MAAM,EAAC,aAAa;GAAE;AAGtF,MAAI,KAAK;AAGT,MAAI,KAAK,QACP,MAAK,QAAQ,IAAI;GACf,QAAQ;GACR,MAAM;GACN,SAASL,+BAAe,IAAI,QAAQ;GACpC,MAAM;GACN,SAAS;GACT,UAAU;IAAE,QAAQ,IAAI;IAAY,SAAS;IAAM;GACpD,CAAC;;;AAOR,SAAS,mBAAmB,QAA0B;AACpD,KAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,MAAM,QAAQ,OAAO,CAAE,QAAO;AAEnF,QADY,OACD,WAAW;;AAGxB,SAAS,MAAM,IAA2B;AACxC,QAAO,IAAI,SAAS,YAAY,WAAW,SAAS,GAAG,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Journal } from "./journal.cjs";
|
|
2
|
+
import { MetricsRegistry } from "./metrics.cjs";
|
|
3
|
+
import { Mountable } from "./types.cjs";
|
|
4
|
+
import { A2AAgentDefinition, A2AArtifact, A2AMockOptions, A2APart, A2AStreamEvent } from "./a2a-types.cjs";
|
|
5
|
+
import * as http from "node:http";
|
|
6
|
+
|
|
7
|
+
//#region src/a2a-mock.d.ts
|
|
8
|
+
declare class A2AMock implements Mountable {
|
|
9
|
+
private agents;
|
|
10
|
+
private tasks;
|
|
11
|
+
private server;
|
|
12
|
+
private journal;
|
|
13
|
+
private registry;
|
|
14
|
+
private options;
|
|
15
|
+
private baseUrl;
|
|
16
|
+
private dispatcher;
|
|
17
|
+
constructor(options?: A2AMockOptions);
|
|
18
|
+
private buildDispatcher;
|
|
19
|
+
registerAgent(def: A2AAgentDefinition): this;
|
|
20
|
+
onMessage(agentName: string, pattern: string | RegExp, parts: A2APart[]): this;
|
|
21
|
+
onTask(agentName: string, pattern: string | RegExp, artifacts: A2AArtifact[]): this;
|
|
22
|
+
onStreamingTask(agentName: string, pattern: string | RegExp, events: A2AStreamEvent[], delayMs?: number): this;
|
|
23
|
+
handleRequest(req: http.IncomingMessage, res: http.ServerResponse, pathname: string): Promise<boolean>;
|
|
24
|
+
health(): {
|
|
25
|
+
status: string;
|
|
26
|
+
agents: number;
|
|
27
|
+
tasks: number;
|
|
28
|
+
};
|
|
29
|
+
setJournal(journal: Journal): void;
|
|
30
|
+
setRegistry(registry: MetricsRegistry): void;
|
|
31
|
+
start(): Promise<string>;
|
|
32
|
+
stop(): Promise<void>;
|
|
33
|
+
get url(): string;
|
|
34
|
+
reset(): this;
|
|
35
|
+
setBaseUrl(url: string): void;
|
|
36
|
+
private handleStreamingMessage;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=a2a-mock.d.ts.map
|
|
39
|
+
//#endregion
|
|
40
|
+
export { A2AMock };
|
|
41
|
+
//# sourceMappingURL=a2a-mock.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2a-mock.d.cts","names":[],"sources":["../src/a2a-mock.ts"],"sourcesContent":[],"mappings":";;;;;;;cAuBa,OAAA,YAAmB;;EAAnB,QAAA,KAAQ;EAAA,QAAA,MAAA;UAUG,OAAA;UAYH,QAAA;UAO4B,OAAA;UAAe,OAAA;UASlB,UAAA;aAAmB,CAAA,OAAA,CAAA,EA5BzC,cA4ByC;UAW3C,eAAA;eACV,CAAA,GAAA,EA5BS,kBA4BT,CAAA,EAAA,IAAA;WAcE,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,GAnCmC,MAmCnC,EAAA,KAAA,EAnCkD,OAmClD,EAAA,CAAA,EAAA,IAAA;QACL,CAAA,SAAK,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,GA3BgC,MA2BhC,EAAA,SAAA,EA3BmD,WA2BnD,EAAA,CAAA,EAAA,IAAA;iBAET,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,GAlBiB,MAkBjB,EAAA,MAAA,EAjBO,cAiBP,EAAA,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;eAoFiB,CAAA,GAAA,EAvFb,IAAA,CAAK,eAuFQ,EAAA,GAAA,EAtFb,IAAA,CAAK,cAsFQ,EAAA,QAAA,EAAA,MAAA,CAAA,EApFjB,OAoFiB,CAAA,OAAA,CAAA;QAIE,CAAA,CAAA,EAAA;IAMP,MAAA,EAAA,MAAA;IAiCD,MAAA,EAAA,MAAA;IAlMgB,KAAA,EAAA,MAAA;EAAS,CAAA;sBAuJnB;wBAIE;WAMP;UAiCD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Journal } from "./journal.js";
|
|
2
|
+
import { MetricsRegistry } from "./metrics.js";
|
|
3
|
+
import { Mountable } from "./types.js";
|
|
4
|
+
import { A2AAgentDefinition, A2AArtifact, A2AMockOptions, A2APart, A2AStreamEvent } from "./a2a-types.js";
|
|
5
|
+
import * as http from "node:http";
|
|
6
|
+
|
|
7
|
+
//#region src/a2a-mock.d.ts
|
|
8
|
+
declare class A2AMock implements Mountable {
|
|
9
|
+
private agents;
|
|
10
|
+
private tasks;
|
|
11
|
+
private server;
|
|
12
|
+
private journal;
|
|
13
|
+
private registry;
|
|
14
|
+
private options;
|
|
15
|
+
private baseUrl;
|
|
16
|
+
private dispatcher;
|
|
17
|
+
constructor(options?: A2AMockOptions);
|
|
18
|
+
private buildDispatcher;
|
|
19
|
+
registerAgent(def: A2AAgentDefinition): this;
|
|
20
|
+
onMessage(agentName: string, pattern: string | RegExp, parts: A2APart[]): this;
|
|
21
|
+
onTask(agentName: string, pattern: string | RegExp, artifacts: A2AArtifact[]): this;
|
|
22
|
+
onStreamingTask(agentName: string, pattern: string | RegExp, events: A2AStreamEvent[], delayMs?: number): this;
|
|
23
|
+
handleRequest(req: http.IncomingMessage, res: http.ServerResponse, pathname: string): Promise<boolean>;
|
|
24
|
+
health(): {
|
|
25
|
+
status: string;
|
|
26
|
+
agents: number;
|
|
27
|
+
tasks: number;
|
|
28
|
+
};
|
|
29
|
+
setJournal(journal: Journal): void;
|
|
30
|
+
setRegistry(registry: MetricsRegistry): void;
|
|
31
|
+
start(): Promise<string>;
|
|
32
|
+
stop(): Promise<void>;
|
|
33
|
+
get url(): string;
|
|
34
|
+
reset(): this;
|
|
35
|
+
setBaseUrl(url: string): void;
|
|
36
|
+
private handleStreamingMessage;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=a2a-mock.d.ts.map
|
|
39
|
+
//#endregion
|
|
40
|
+
export { A2AMock };
|
|
41
|
+
//# sourceMappingURL=a2a-mock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2a-mock.d.ts","names":[],"sources":["../src/a2a-mock.ts"],"sourcesContent":[],"mappings":";;;;;;;cAuBa,OAAA,YAAmB;;EAAnB,QAAA,KAAQ;EAAA,QAAA,MAAA;UAUG,OAAA;UAYH,QAAA;UAO4B,OAAA;UAAe,OAAA;UASlB,UAAA;aAAmB,CAAA,OAAA,CAAA,EA5BzC,cA4ByC;UAW3C,eAAA;eACV,CAAA,GAAA,EA5BS,kBA4BT,CAAA,EAAA,IAAA;WAcE,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,GAnCmC,MAmCnC,EAAA,KAAA,EAnCkD,OAmClD,EAAA,CAAA,EAAA,IAAA;QACL,CAAA,SAAK,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,GA3BgC,MA2BhC,EAAA,SAAA,EA3BmD,WA2BnD,EAAA,CAAA,EAAA,IAAA;iBAET,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,GAlBiB,MAkBjB,EAAA,MAAA,EAjBO,cAiBP,EAAA,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;eAoFiB,CAAA,GAAA,EAvFb,IAAA,CAAK,eAuFQ,EAAA,GAAA,EAtFb,IAAA,CAAK,cAsFQ,EAAA,QAAA,EAAA,MAAA,CAAA,EApFjB,OAoFiB,CAAA,OAAA,CAAA;QAIE,CAAA,CAAA,EAAA;IAMP,MAAA,EAAA,MAAA;IAiCD,MAAA,EAAA,MAAA;IAlMgB,KAAA,EAAA,MAAA;EAAS,CAAA;sBAuJnB;wBAIE;WAMP;UAiCD"}
|