network-ai 4.15.3 → 5.1.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/INTEGRATION_GUIDE.md +12 -5
- package/QUICKSTART.md +32 -5
- package/README.md +42 -17
- package/bin/dashboard.ts +146 -0
- package/bin/mcp-server.ts +3 -2
- package/dist/adapters/adapter-registry.d.ts +33 -1
- package/dist/adapters/adapter-registry.d.ts.map +1 -1
- package/dist/adapters/adapter-registry.js +49 -0
- package/dist/adapters/adapter-registry.js.map +1 -1
- package/dist/adapters/anthropic-computer-use-adapter.d.ts +132 -0
- package/dist/adapters/anthropic-computer-use-adapter.d.ts.map +1 -0
- package/dist/adapters/anthropic-computer-use-adapter.js +180 -0
- package/dist/adapters/anthropic-computer-use-adapter.js.map +1 -0
- package/dist/adapters/browser-agent-adapter.d.ts +121 -0
- package/dist/adapters/browser-agent-adapter.d.ts.map +1 -0
- package/dist/adapters/browser-agent-adapter.js +219 -0
- package/dist/adapters/browser-agent-adapter.js.map +1 -0
- package/dist/adapters/copilot-adapter.d.ts +59 -0
- package/dist/adapters/copilot-adapter.d.ts.map +1 -0
- package/dist/adapters/copilot-adapter.js +132 -0
- package/dist/adapters/copilot-adapter.js.map +1 -0
- package/dist/adapters/custom-adapter.d.ts +1 -1
- package/dist/adapters/custom-adapter.js +1 -1
- package/dist/adapters/index.d.ts +17 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +25 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/langchain-adapter.js +1 -1
- package/dist/adapters/langchain-adapter.js.map +1 -1
- package/dist/adapters/langgraph-adapter.d.ts +70 -0
- package/dist/adapters/langgraph-adapter.d.ts.map +1 -0
- package/dist/adapters/langgraph-adapter.js +119 -0
- package/dist/adapters/langgraph-adapter.js.map +1 -0
- package/dist/adapters/mcp-adapter.d.ts +1 -1
- package/dist/adapters/mcp-adapter.js +3 -3
- package/dist/adapters/mcp-adapter.js.map +1 -1
- package/dist/adapters/openai-agents-adapter.d.ts +100 -0
- package/dist/adapters/openai-agents-adapter.d.ts.map +1 -0
- package/dist/adapters/openai-agents-adapter.js +118 -0
- package/dist/adapters/openai-agents-adapter.js.map +1 -0
- package/dist/adapters/openclaw-adapter.d.ts +1 -1
- package/dist/adapters/openclaw-adapter.js +3 -3
- package/dist/adapters/openclaw-adapter.js.map +1 -1
- package/dist/adapters/orchestrator-adapter.d.ts +118 -0
- package/dist/adapters/orchestrator-adapter.d.ts.map +1 -0
- package/dist/adapters/orchestrator-adapter.js +219 -0
- package/dist/adapters/orchestrator-adapter.js.map +1 -0
- package/dist/adapters/pydantic-ai-adapter.d.ts +104 -0
- package/dist/adapters/pydantic-ai-adapter.d.ts.map +1 -0
- package/dist/adapters/pydantic-ai-adapter.js +163 -0
- package/dist/adapters/pydantic-ai-adapter.js.map +1 -0
- package/dist/adapters/vertex-ai-adapter.d.ts +122 -0
- package/dist/adapters/vertex-ai-adapter.d.ts.map +1 -0
- package/dist/adapters/vertex-ai-adapter.js +166 -0
- package/dist/adapters/vertex-ai-adapter.js.map +1 -0
- package/dist/bin/dashboard.d.ts +11 -0
- package/dist/bin/dashboard.d.ts.map +1 -0
- package/dist/bin/dashboard.js +135 -0
- package/dist/bin/dashboard.js.map +1 -0
- package/dist/bin/mcp-server.js +3 -2
- package/dist/bin/mcp-server.js.map +1 -1
- package/dist/demo-control-plane.d.ts +12 -0
- package/dist/demo-control-plane.d.ts.map +1 -0
- package/dist/demo-control-plane.js +147 -0
- package/dist/demo-control-plane.js.map +1 -0
- package/dist/demo-worktree-dashboard.d.ts +2 -0
- package/dist/demo-worktree-dashboard.d.ts.map +1 -0
- package/dist/demo-worktree-dashboard.js +131 -0
- package/dist/demo-worktree-dashboard.js.map +1 -0
- package/dist/examples/01-hello-swarm.d.ts +13 -0
- package/dist/examples/01-hello-swarm.d.ts.map +1 -0
- package/dist/examples/01-hello-swarm.js +165 -0
- package/dist/examples/01-hello-swarm.js.map +1 -0
- package/dist/examples/02-fsm-pipeline.d.ts +20 -0
- package/dist/examples/02-fsm-pipeline.d.ts.map +1 -0
- package/dist/examples/02-fsm-pipeline.js +189 -0
- package/dist/examples/02-fsm-pipeline.js.map +1 -0
- package/dist/examples/03-parallel-agents.d.ts +21 -0
- package/dist/examples/03-parallel-agents.d.ts.map +1 -0
- package/dist/examples/03-parallel-agents.js +192 -0
- package/dist/examples/03-parallel-agents.js.map +1 -0
- package/dist/examples/05-code-review-swarm.d.ts +21 -0
- package/dist/examples/05-code-review-swarm.d.ts.map +1 -0
- package/dist/examples/05-code-review-swarm.js +1177 -0
- package/dist/examples/05-code-review-swarm.js.map +1 -0
- package/dist/examples/06-ai-pipeline-demo.d.ts +24 -0
- package/dist/examples/06-ai-pipeline-demo.d.ts.map +1 -0
- package/dist/examples/06-ai-pipeline-demo.js +263 -0
- package/dist/examples/06-ai-pipeline-demo.js.map +1 -0
- package/dist/examples/07-full-showcase.d.ts +27 -0
- package/dist/examples/07-full-showcase.d.ts.map +1 -0
- package/dist/examples/07-full-showcase.js +946 -0
- package/dist/examples/07-full-showcase.js.map +1 -0
- package/dist/examples/08-control-plane-stress-demo.d.ts +19 -0
- package/dist/examples/08-control-plane-stress-demo.d.ts.map +1 -0
- package/dist/examples/08-control-plane-stress-demo.js +186 -0
- package/dist/examples/08-control-plane-stress-demo.js.map +1 -0
- package/dist/examples/09-real-langchain.d.ts +19 -0
- package/dist/examples/09-real-langchain.d.ts.map +1 -0
- package/dist/examples/09-real-langchain.js +231 -0
- package/dist/examples/09-real-langchain.js.map +1 -0
- package/dist/examples/10-nemoclaw-sandbox-swarm.d.ts +16 -0
- package/dist/examples/10-nemoclaw-sandbox-swarm.d.ts.map +1 -0
- package/dist/examples/10-nemoclaw-sandbox-swarm.js +270 -0
- package/dist/examples/10-nemoclaw-sandbox-swarm.js.map +1 -0
- package/dist/examples/demo-runner.d.ts +2 -0
- package/dist/examples/demo-runner.d.ts.map +1 -0
- package/dist/examples/demo-runner.js +119 -0
- package/dist/examples/demo-runner.js.map +1 -0
- package/dist/index.d.ts +113 -559
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +310 -1074
- package/dist/index.js.map +1 -1
- package/dist/lib/adapter-test-harness.d.ts +88 -0
- package/dist/lib/adapter-test-harness.d.ts.map +1 -0
- package/dist/lib/adapter-test-harness.js +118 -0
- package/dist/lib/adapter-test-harness.js.map +1 -0
- package/dist/lib/agent-conversation.d.ts +115 -0
- package/dist/lib/agent-conversation.d.ts.map +1 -0
- package/dist/lib/agent-conversation.js +155 -0
- package/dist/lib/agent-conversation.js.map +1 -0
- package/dist/lib/agent-debate.d.ts +115 -0
- package/dist/lib/agent-debate.d.ts.map +1 -0
- package/dist/lib/agent-debate.js +146 -0
- package/dist/lib/agent-debate.js.map +1 -0
- package/dist/lib/agent-memory.d.ts +157 -0
- package/dist/lib/agent-memory.d.ts.map +1 -0
- package/dist/lib/agent-memory.js +336 -0
- package/dist/lib/agent-memory.js.map +1 -0
- package/dist/lib/agent-vcr.d.ts +133 -0
- package/dist/lib/agent-vcr.d.ts.map +1 -0
- package/dist/lib/agent-vcr.js +218 -0
- package/dist/lib/agent-vcr.js.map +1 -0
- package/dist/lib/anomaly-detector.d.ts +112 -0
- package/dist/lib/anomaly-detector.d.ts.map +1 -0
- package/dist/lib/anomaly-detector.js +178 -0
- package/dist/lib/anomaly-detector.js.map +1 -0
- package/dist/lib/approval-inbox.d.ts +147 -0
- package/dist/lib/approval-inbox.d.ts.map +1 -0
- package/dist/lib/approval-inbox.js +385 -0
- package/dist/lib/approval-inbox.js.map +1 -0
- package/dist/lib/auth-guardian.d.ts +170 -0
- package/dist/lib/auth-guardian.d.ts.map +1 -0
- package/dist/lib/auth-guardian.js +604 -0
- package/dist/lib/auth-guardian.js.map +1 -0
- package/dist/lib/auth-validator.d.ts +70 -0
- package/dist/lib/auth-validator.d.ts.map +1 -0
- package/dist/lib/auth-validator.js +32 -0
- package/dist/lib/auth-validator.js.map +1 -0
- package/dist/lib/blackboard-validator.d.ts +56 -0
- package/dist/lib/blackboard-validator.d.ts.map +1 -1
- package/dist/lib/blackboard-validator.js +181 -4
- package/dist/lib/blackboard-validator.js.map +1 -1
- package/dist/lib/comparison-runner.d.ts +99 -0
- package/dist/lib/comparison-runner.d.ts.map +1 -0
- package/dist/lib/comparison-runner.js +138 -0
- package/dist/lib/comparison-runner.js.map +1 -0
- package/dist/lib/config-watcher.d.ts +109 -0
- package/dist/lib/config-watcher.d.ts.map +1 -0
- package/dist/lib/config-watcher.js +215 -0
- package/dist/lib/config-watcher.js.map +1 -0
- package/dist/lib/control-plane.d.ts +128 -0
- package/dist/lib/control-plane.d.ts.map +1 -0
- package/dist/lib/control-plane.js +527 -0
- package/dist/lib/control-plane.js.map +1 -0
- package/dist/lib/cost-governor.d.ts +105 -0
- package/dist/lib/cost-governor.d.ts.map +1 -0
- package/dist/lib/cost-governor.js +128 -0
- package/dist/lib/cost-governor.js.map +1 -0
- package/dist/lib/cost-heatmap.d.ts +104 -0
- package/dist/lib/cost-heatmap.d.ts.map +1 -0
- package/dist/lib/cost-heatmap.js +161 -0
- package/dist/lib/cost-heatmap.js.map +1 -0
- package/dist/lib/coverage-reporter.d.ts +92 -0
- package/dist/lib/coverage-reporter.d.ts.map +1 -0
- package/dist/lib/coverage-reporter.js +177 -0
- package/dist/lib/coverage-reporter.js.map +1 -0
- package/dist/lib/dashboard-server.d.ts +71 -0
- package/dist/lib/dashboard-server.d.ts.map +1 -0
- package/dist/lib/dashboard-server.js +403 -0
- package/dist/lib/dashboard-server.js.map +1 -0
- package/dist/lib/dry-run.d.ts +73 -0
- package/dist/lib/dry-run.d.ts.map +1 -0
- package/dist/lib/dry-run.js +130 -0
- package/dist/lib/dry-run.js.map +1 -0
- package/dist/lib/errors.d.ts +15 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +38 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/event-bus.d.ts +167 -0
- package/dist/lib/event-bus.d.ts.map +1 -0
- package/dist/lib/event-bus.js +229 -0
- package/dist/lib/event-bus.js.map +1 -0
- package/dist/lib/explainability.d.ts +85 -0
- package/dist/lib/explainability.d.ts.map +1 -0
- package/dist/lib/explainability.js +102 -0
- package/dist/lib/explainability.js.map +1 -0
- package/dist/lib/goal-dsl.d.ts +157 -0
- package/dist/lib/goal-dsl.d.ts.map +1 -0
- package/dist/lib/goal-dsl.js +391 -0
- package/dist/lib/goal-dsl.js.map +1 -0
- package/dist/lib/job-queue.d.ts +183 -0
- package/dist/lib/job-queue.d.ts.map +1 -0
- package/dist/lib/job-queue.js +310 -0
- package/dist/lib/job-queue.js.map +1 -0
- package/dist/lib/learning-loop.d.ts +113 -0
- package/dist/lib/learning-loop.d.ts.map +1 -0
- package/dist/lib/learning-loop.js +181 -0
- package/dist/lib/learning-loop.js.map +1 -0
- package/dist/lib/lifecycle-hooks.d.ts +116 -0
- package/dist/lib/lifecycle-hooks.d.ts.map +1 -0
- package/dist/lib/lifecycle-hooks.js +148 -0
- package/dist/lib/lifecycle-hooks.js.map +1 -0
- package/dist/lib/locked-blackboard.d.ts.map +1 -1
- package/dist/lib/locked-blackboard.js +9 -5
- package/dist/lib/locked-blackboard.js.map +1 -1
- package/dist/lib/mcp-tool-consumer.d.ts +153 -0
- package/dist/lib/mcp-tool-consumer.d.ts.map +1 -0
- package/dist/lib/mcp-tool-consumer.js +320 -0
- package/dist/lib/mcp-tool-consumer.js.map +1 -0
- package/dist/lib/metrics.d.ts +119 -0
- package/dist/lib/metrics.d.ts.map +1 -0
- package/dist/lib/metrics.js +284 -0
- package/dist/lib/metrics.js.map +1 -0
- package/dist/lib/orchestrator-types.d.ts +309 -0
- package/dist/lib/orchestrator-types.d.ts.map +1 -0
- package/dist/lib/orchestrator-types.js +61 -0
- package/dist/lib/orchestrator-types.js.map +1 -0
- package/dist/lib/otel-bridge.d.ts +74 -0
- package/dist/lib/otel-bridge.d.ts.map +1 -0
- package/dist/lib/otel-bridge.js +167 -0
- package/dist/lib/otel-bridge.js.map +1 -0
- package/dist/lib/playground.d.ts +76 -0
- package/dist/lib/playground.d.ts.map +1 -0
- package/dist/lib/playground.js +224 -0
- package/dist/lib/playground.js.map +1 -0
- package/dist/lib/quadtree.d.ts +114 -0
- package/dist/lib/quadtree.d.ts.map +1 -0
- package/dist/lib/quadtree.js +259 -0
- package/dist/lib/quadtree.js.map +1 -0
- package/dist/lib/shared-blackboard.d.ts +101 -0
- package/dist/lib/shared-blackboard.d.ts.map +1 -0
- package/dist/lib/shared-blackboard.js +249 -0
- package/dist/lib/shared-blackboard.js.map +1 -0
- package/dist/lib/speculative-executor.d.ts +89 -0
- package/dist/lib/speculative-executor.d.ts.map +1 -0
- package/dist/lib/speculative-executor.js +107 -0
- package/dist/lib/speculative-executor.js.map +1 -0
- package/dist/lib/swarm-transport.d.ts +150 -0
- package/dist/lib/swarm-transport.d.ts.map +1 -0
- package/dist/lib/swarm-transport.js +307 -0
- package/dist/lib/swarm-transport.js.map +1 -0
- package/dist/lib/task-decomposer.d.ts +41 -0
- package/dist/lib/task-decomposer.d.ts.map +1 -0
- package/dist/lib/task-decomposer.js +272 -0
- package/dist/lib/task-decomposer.js.map +1 -0
- package/dist/lib/timeline-scrubber.d.ts +84 -0
- package/dist/lib/timeline-scrubber.d.ts.map +1 -0
- package/dist/lib/timeline-scrubber.js +173 -0
- package/dist/lib/timeline-scrubber.js.map +1 -0
- package/dist/lib/topology.d.ts +361 -0
- package/dist/lib/topology.d.ts.map +1 -0
- package/dist/lib/topology.js +591 -0
- package/dist/lib/topology.js.map +1 -0
- package/dist/lib/work-tree-dashboard.d.ts +130 -0
- package/dist/lib/work-tree-dashboard.d.ts.map +1 -0
- package/dist/lib/work-tree-dashboard.js +583 -0
- package/dist/lib/work-tree-dashboard.js.map +1 -0
- package/dist/lib/work-tree-ui.d.ts +107 -0
- package/dist/lib/work-tree-ui.d.ts.map +1 -0
- package/dist/lib/work-tree-ui.js +333 -0
- package/dist/lib/work-tree-ui.js.map +1 -0
- package/dist/lib/work-tree.d.ts +184 -0
- package/dist/lib/work-tree.d.ts.map +1 -0
- package/dist/lib/work-tree.js +480 -0
- package/dist/lib/work-tree.js.map +1 -0
- package/dist/security.d.ts +95 -0
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +267 -4
- package/dist/security.js.map +1 -1
- package/package.json +8 -6
- package/types/agent-adapter.d.ts +5 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCPToolConsumer — Connect to external MCP servers and consume their tools.
|
|
4
|
+
*
|
|
5
|
+
* Implements `MCPServerConnection` for the MCPAdapter, providing:
|
|
6
|
+
* - Stdio-based client transport (spawn child process)
|
|
7
|
+
* - SSE-based client transport (HTTP long-poll)
|
|
8
|
+
* - Auto-discovery of remote tools with caching
|
|
9
|
+
* - Permission-gated remote tool execution
|
|
10
|
+
*
|
|
11
|
+
* BYOC: No external MCP client library required.
|
|
12
|
+
*
|
|
13
|
+
* @module MCPToolConsumer
|
|
14
|
+
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
32
|
+
var ownKeys = function(o) {
|
|
33
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
34
|
+
var ar = [];
|
|
35
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
return ownKeys(o);
|
|
39
|
+
};
|
|
40
|
+
return function (mod) {
|
|
41
|
+
if (mod && mod.__esModule) return mod;
|
|
42
|
+
var result = {};
|
|
43
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
44
|
+
__setModuleDefault(result, mod);
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
})();
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.MCPToolConsumer = exports.HttpClientTransport = exports.StdioClientTransport = void 0;
|
|
50
|
+
const events_1 = require("events");
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// STDIO CLIENT TRANSPORT
|
|
53
|
+
// ============================================================================
|
|
54
|
+
/**
|
|
55
|
+
* Stdio-based MCP client transport.
|
|
56
|
+
* Spawns a child process and communicates via stdin/stdout JSON-RPC.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* const transport = new StdioClientTransport('npx', ['some-mcp-server']);
|
|
61
|
+
* const consumer = new MCPToolConsumer({ transport });
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
class StdioClientTransport {
|
|
65
|
+
command;
|
|
66
|
+
args;
|
|
67
|
+
process = null;
|
|
68
|
+
pendingRequests = new Map();
|
|
69
|
+
nextId = 1;
|
|
70
|
+
buffer = '';
|
|
71
|
+
spawnFn = null;
|
|
72
|
+
constructor(command, args = []) {
|
|
73
|
+
this.command = command;
|
|
74
|
+
this.args = args;
|
|
75
|
+
}
|
|
76
|
+
async send(request) {
|
|
77
|
+
if (!this.process)
|
|
78
|
+
await this.start();
|
|
79
|
+
const id = this.nextId++;
|
|
80
|
+
const req = { ...request, id };
|
|
81
|
+
return new Promise((resolve, reject) => {
|
|
82
|
+
this.pendingRequests.set(id, { resolve, reject });
|
|
83
|
+
this.process.stdin.write(JSON.stringify(req) + '\n');
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
async close() {
|
|
87
|
+
if (this.process) {
|
|
88
|
+
this.process.kill();
|
|
89
|
+
this.process = null;
|
|
90
|
+
}
|
|
91
|
+
for (const { reject } of this.pendingRequests.values()) {
|
|
92
|
+
reject(new Error('Transport closed'));
|
|
93
|
+
}
|
|
94
|
+
this.pendingRequests.clear();
|
|
95
|
+
}
|
|
96
|
+
async start() {
|
|
97
|
+
if (!this.spawnFn) {
|
|
98
|
+
// Dynamic import to avoid bundling child_process in browser contexts
|
|
99
|
+
const cp = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
100
|
+
this.spawnFn = cp.spawn;
|
|
101
|
+
}
|
|
102
|
+
this.process = this.spawnFn(this.command, this.args, {
|
|
103
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
104
|
+
});
|
|
105
|
+
this.process.stdout.on('data', (chunk) => {
|
|
106
|
+
this.buffer += chunk.toString();
|
|
107
|
+
this.processBuffer();
|
|
108
|
+
});
|
|
109
|
+
this.process.on('exit', () => {
|
|
110
|
+
for (const { reject } of this.pendingRequests.values()) {
|
|
111
|
+
reject(new Error('MCP server process exited'));
|
|
112
|
+
}
|
|
113
|
+
this.pendingRequests.clear();
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
processBuffer() {
|
|
117
|
+
const lines = this.buffer.split('\n');
|
|
118
|
+
this.buffer = lines.pop() ?? '';
|
|
119
|
+
for (const line of lines) {
|
|
120
|
+
const trimmed = line.trim();
|
|
121
|
+
if (!trimmed)
|
|
122
|
+
continue;
|
|
123
|
+
try {
|
|
124
|
+
const response = JSON.parse(trimmed);
|
|
125
|
+
if (response.id !== undefined && this.pendingRequests.has(response.id)) {
|
|
126
|
+
const { resolve } = this.pendingRequests.get(response.id);
|
|
127
|
+
this.pendingRequests.delete(response.id);
|
|
128
|
+
resolve(response);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Not valid JSON — skip
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.StdioClientTransport = StdioClientTransport;
|
|
138
|
+
// ============================================================================
|
|
139
|
+
// HTTP CLIENT TRANSPORT
|
|
140
|
+
// ============================================================================
|
|
141
|
+
/**
|
|
142
|
+
* HTTP-based MCP client transport.
|
|
143
|
+
* Sends JSON-RPC over HTTP POST requests to an MCP server endpoint.
|
|
144
|
+
*/
|
|
145
|
+
class HttpClientTransport {
|
|
146
|
+
url;
|
|
147
|
+
headers;
|
|
148
|
+
nextId = 1;
|
|
149
|
+
constructor(url, headers = {}) {
|
|
150
|
+
this.url = url;
|
|
151
|
+
this.headers = headers;
|
|
152
|
+
}
|
|
153
|
+
async send(request) {
|
|
154
|
+
const id = this.nextId++;
|
|
155
|
+
const req = { ...request, id };
|
|
156
|
+
const response = await fetch(this.url, {
|
|
157
|
+
method: 'POST',
|
|
158
|
+
headers: { 'Content-Type': 'application/json', ...this.headers },
|
|
159
|
+
body: JSON.stringify(req),
|
|
160
|
+
});
|
|
161
|
+
if (!response.ok) {
|
|
162
|
+
throw new Error(`MCP HTTP error: ${response.status} ${response.statusText}`);
|
|
163
|
+
}
|
|
164
|
+
return response.json();
|
|
165
|
+
}
|
|
166
|
+
async close() {
|
|
167
|
+
// HTTP is stateless — nothing to close
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exports.HttpClientTransport = HttpClientTransport;
|
|
171
|
+
// ============================================================================
|
|
172
|
+
// MCP TOOL CONSUMER
|
|
173
|
+
// ============================================================================
|
|
174
|
+
/**
|
|
175
|
+
* Consume tools from an external MCP server.
|
|
176
|
+
* Implements MCPServerConnection for use with MCPAdapter.
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```ts
|
|
180
|
+
* const transport = new HttpClientTransport('http://localhost:3001/mcp');
|
|
181
|
+
* const consumer = new MCPToolConsumer({ transport });
|
|
182
|
+
*
|
|
183
|
+
* // Use with MCPAdapter:
|
|
184
|
+
* const adapter = new MCPAdapter();
|
|
185
|
+
* adapter.initialize({ options: { serverConnection: consumer } });
|
|
186
|
+
* await adapter.discoverServerTools();
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
class MCPToolConsumer extends events_1.EventEmitter {
|
|
190
|
+
transport;
|
|
191
|
+
toolCache = null;
|
|
192
|
+
toolCacheTime = 0;
|
|
193
|
+
toolCacheTtlMs;
|
|
194
|
+
callTimeoutMs;
|
|
195
|
+
prefix;
|
|
196
|
+
toolInfo = new Map();
|
|
197
|
+
initialized = false;
|
|
198
|
+
constructor(options) {
|
|
199
|
+
super();
|
|
200
|
+
this.transport = options.transport;
|
|
201
|
+
this.toolCacheTtlMs = options.toolCacheTtlMs ?? 60_000;
|
|
202
|
+
this.callTimeoutMs = options.callTimeoutMs ?? 30_000;
|
|
203
|
+
this.prefix = options.prefix ?? 'mcp';
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Initialize the MCP connection (send initialize handshake).
|
|
207
|
+
*/
|
|
208
|
+
async initialize(clientInfo) {
|
|
209
|
+
if (this.initialized)
|
|
210
|
+
return;
|
|
211
|
+
const response = await this.transport.send({
|
|
212
|
+
jsonrpc: '2.0',
|
|
213
|
+
id: 0,
|
|
214
|
+
method: 'initialize',
|
|
215
|
+
params: {
|
|
216
|
+
protocolVersion: '2024-11-05',
|
|
217
|
+
capabilities: {},
|
|
218
|
+
clientInfo: clientInfo ?? { name: 'network-ai', version: '5.0.0' },
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
if (response.error) {
|
|
222
|
+
throw new Error(`MCP initialize failed: ${response.error.message}`);
|
|
223
|
+
}
|
|
224
|
+
this.initialized = true;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* List available tools from the remote MCP server.
|
|
228
|
+
* Results are cached for `toolCacheTtlMs`.
|
|
229
|
+
*/
|
|
230
|
+
async listTools() {
|
|
231
|
+
if (!this.initialized)
|
|
232
|
+
await this.initialize();
|
|
233
|
+
const now = Date.now();
|
|
234
|
+
if (this.toolCache && (now - this.toolCacheTime) < this.toolCacheTtlMs) {
|
|
235
|
+
return this.toolCache;
|
|
236
|
+
}
|
|
237
|
+
const response = await this.transport.send({
|
|
238
|
+
jsonrpc: '2.0',
|
|
239
|
+
id: 0,
|
|
240
|
+
method: 'tools/list',
|
|
241
|
+
});
|
|
242
|
+
if (response.error) {
|
|
243
|
+
throw new Error(`tools/list failed: ${response.error.message}`);
|
|
244
|
+
}
|
|
245
|
+
const result = response.result;
|
|
246
|
+
const tools = result?.tools ?? [];
|
|
247
|
+
this.toolCache = tools;
|
|
248
|
+
this.toolCacheTime = now;
|
|
249
|
+
// Update tool info registry
|
|
250
|
+
for (const tool of tools) {
|
|
251
|
+
if (!this.toolInfo.has(tool.name)) {
|
|
252
|
+
this.toolInfo.set(tool.name, {
|
|
253
|
+
tool,
|
|
254
|
+
serverPrefix: this.prefix,
|
|
255
|
+
lastDiscovered: now,
|
|
256
|
+
callCount: 0,
|
|
257
|
+
errorCount: 0,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
this.emit('tools-discovered', tools);
|
|
262
|
+
return tools;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Call a tool on the remote MCP server.
|
|
266
|
+
*/
|
|
267
|
+
async callTool(name, args) {
|
|
268
|
+
if (!this.initialized)
|
|
269
|
+
await this.initialize();
|
|
270
|
+
const info = this.toolInfo.get(name);
|
|
271
|
+
if (info)
|
|
272
|
+
info.callCount++;
|
|
273
|
+
const resultPromise = this.transport.send({
|
|
274
|
+
jsonrpc: '2.0',
|
|
275
|
+
id: 0,
|
|
276
|
+
method: 'tools/call',
|
|
277
|
+
params: { name, arguments: args },
|
|
278
|
+
});
|
|
279
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`Tool call timeout: ${name}`)), this.callTimeoutMs));
|
|
280
|
+
try {
|
|
281
|
+
const response = await Promise.race([resultPromise, timeoutPromise]);
|
|
282
|
+
if (response.error) {
|
|
283
|
+
if (info)
|
|
284
|
+
info.errorCount++;
|
|
285
|
+
return {
|
|
286
|
+
content: [{ type: 'text', text: response.error.message }],
|
|
287
|
+
isError: true,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
const result = response.result;
|
|
291
|
+
return result ?? { content: [{ type: 'text', text: 'No result' }] };
|
|
292
|
+
}
|
|
293
|
+
catch (err) {
|
|
294
|
+
if (info)
|
|
295
|
+
info.errorCount++;
|
|
296
|
+
throw err;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/** Close the transport connection */
|
|
300
|
+
async close() {
|
|
301
|
+
await this.transport.close();
|
|
302
|
+
this.toolCache = null;
|
|
303
|
+
this.initialized = false;
|
|
304
|
+
}
|
|
305
|
+
/** Get info about discovered tools */
|
|
306
|
+
getToolInfo() {
|
|
307
|
+
return [...this.toolInfo.values()];
|
|
308
|
+
}
|
|
309
|
+
/** Invalidate the tool cache to force re-discovery */
|
|
310
|
+
invalidateCache() {
|
|
311
|
+
this.toolCache = null;
|
|
312
|
+
this.toolCacheTime = 0;
|
|
313
|
+
}
|
|
314
|
+
/** Get the prefix used for agent naming */
|
|
315
|
+
getPrefix() {
|
|
316
|
+
return this.prefix;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
exports.MCPToolConsumer = MCPToolConsumer;
|
|
320
|
+
//# sourceMappingURL=mcp-tool-consumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tool-consumer.js","sourceRoot":"","sources":["../../lib/mcp-tool-consumer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MetricsRegistry — Zero-dependency Prometheus-compatible metrics.
|
|
3
|
+
*
|
|
4
|
+
* Provides Counter, Gauge, and Histogram metric types with label support.
|
|
5
|
+
* Exports metrics in Prometheus text exposition format for scraping.
|
|
6
|
+
*
|
|
7
|
+
* No runtime dependencies — drop-in for any HTTP server or the MCP endpoint.
|
|
8
|
+
*
|
|
9
|
+
* @module Metrics
|
|
10
|
+
*/
|
|
11
|
+
/** Supported metric types */
|
|
12
|
+
export type MetricType = 'counter' | 'gauge' | 'histogram';
|
|
13
|
+
/** A set of label key-value pairs */
|
|
14
|
+
export type Labels = Record<string, string>;
|
|
15
|
+
/** Configuration for a histogram */
|
|
16
|
+
export interface HistogramBuckets {
|
|
17
|
+
/** Upper bounds for each bucket (must be sorted ascending) */
|
|
18
|
+
boundaries: number[];
|
|
19
|
+
}
|
|
20
|
+
/** Monotonically increasing counter */
|
|
21
|
+
export declare class Counter {
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly help: string;
|
|
24
|
+
private series;
|
|
25
|
+
private labelMap;
|
|
26
|
+
constructor(name: string, help: string);
|
|
27
|
+
inc(labels?: Labels, amount?: number): void;
|
|
28
|
+
get(labels?: Labels): number;
|
|
29
|
+
/** Prometheus text lines */
|
|
30
|
+
expose(): string;
|
|
31
|
+
}
|
|
32
|
+
/** Gauge — can go up or down */
|
|
33
|
+
export declare class Gauge {
|
|
34
|
+
readonly name: string;
|
|
35
|
+
readonly help: string;
|
|
36
|
+
private series;
|
|
37
|
+
private labelMap;
|
|
38
|
+
constructor(name: string, help: string);
|
|
39
|
+
set(labels: Labels, value: number): void;
|
|
40
|
+
set(value: number): void;
|
|
41
|
+
inc(labels?: Labels, amount?: number): void;
|
|
42
|
+
dec(labels?: Labels, amount?: number): void;
|
|
43
|
+
get(labels?: Labels): number;
|
|
44
|
+
expose(): string;
|
|
45
|
+
}
|
|
46
|
+
/** Histogram with configurable buckets */
|
|
47
|
+
export declare class Histogram {
|
|
48
|
+
readonly name: string;
|
|
49
|
+
readonly help: string;
|
|
50
|
+
readonly boundaries: number[];
|
|
51
|
+
private series;
|
|
52
|
+
private labelMap;
|
|
53
|
+
constructor(name: string, help: string, buckets?: HistogramBuckets);
|
|
54
|
+
observe(labels: Labels, value: number): void;
|
|
55
|
+
observe(value: number): void;
|
|
56
|
+
expose(): string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Central metrics registry. Collects all metrics and exposes them in
|
|
60
|
+
* Prometheus text format.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```ts
|
|
64
|
+
* const registry = new MetricsRegistry();
|
|
65
|
+
* const delegations = registry.counter('nai_delegations_total', 'Total delegations');
|
|
66
|
+
* const activeAgents = registry.gauge('nai_active_agents', 'Currently active agents');
|
|
67
|
+
* const latency = registry.histogram('nai_delegation_duration_ms', 'Delegation latency');
|
|
68
|
+
*
|
|
69
|
+
* delegations.inc({ agent: 'planner' });
|
|
70
|
+
* activeAgents.set(5);
|
|
71
|
+
* latency.observe({ agent: 'planner' }, 142);
|
|
72
|
+
*
|
|
73
|
+
* const text = registry.expose(); // Prometheus text exposition format
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare class MetricsRegistry {
|
|
77
|
+
private counters;
|
|
78
|
+
private gauges;
|
|
79
|
+
private histograms;
|
|
80
|
+
/** Create or retrieve a counter */
|
|
81
|
+
counter(name: string, help: string): Counter;
|
|
82
|
+
/** Create or retrieve a gauge */
|
|
83
|
+
gauge(name: string, help: string): Gauge;
|
|
84
|
+
/** Create or retrieve a histogram */
|
|
85
|
+
histogram(name: string, help: string, buckets?: HistogramBuckets): Histogram;
|
|
86
|
+
/**
|
|
87
|
+
* Export all registered metrics in Prometheus text exposition format.
|
|
88
|
+
*/
|
|
89
|
+
expose(): string;
|
|
90
|
+
/** Get a specific counter by name */
|
|
91
|
+
getCounter(name: string): Counter | undefined;
|
|
92
|
+
/** Get a specific gauge by name */
|
|
93
|
+
getGauge(name: string): Gauge | undefined;
|
|
94
|
+
/** Get a specific histogram by name */
|
|
95
|
+
getHistogram(name: string): Histogram | undefined;
|
|
96
|
+
/** Total number of registered metrics */
|
|
97
|
+
get size(): number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create a pre-configured MetricsRegistry with standard orchestrator metrics.
|
|
101
|
+
*
|
|
102
|
+
* Returns the registry and named handles to the individual metrics.
|
|
103
|
+
*/
|
|
104
|
+
export declare function createOrchestratorMetrics(): {
|
|
105
|
+
registry: MetricsRegistry;
|
|
106
|
+
delegationsTotal: Counter;
|
|
107
|
+
delegationErrors: Counter;
|
|
108
|
+
permissionChecks: Counter;
|
|
109
|
+
permissionDenials: Counter;
|
|
110
|
+
injectionBlocks: Counter;
|
|
111
|
+
qualityRejections: Counter;
|
|
112
|
+
blackboardWrites: Counter;
|
|
113
|
+
activeAgents: Gauge;
|
|
114
|
+
blackboardSize: Gauge;
|
|
115
|
+
budgetUsedPercent: Gauge;
|
|
116
|
+
delegationDurationMs: Histogram;
|
|
117
|
+
adapterDurationMs: Histogram;
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../lib/metrics.ts"],"names":[],"mappings":"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"}
|