network-ai 5.10.1 → 5.11.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 +2 -2
- package/README.md +5 -3
- package/SKILL.md +3 -3
- package/dist/esm/adapters/a2a-adapter.js +235 -0
- package/dist/esm/adapters/a2a-adapter.js.map +1 -0
- package/dist/esm/adapters/adapter-registry.js +613 -0
- package/dist/esm/adapters/adapter-registry.js.map +1 -0
- package/dist/esm/adapters/agno-adapter.js +140 -0
- package/dist/esm/adapters/agno-adapter.js.map +1 -0
- package/dist/esm/adapters/anthropic-computer-use-adapter.js +180 -0
- package/dist/esm/adapters/anthropic-computer-use-adapter.js.map +1 -0
- package/dist/esm/adapters/aps-adapter.js +289 -0
- package/dist/esm/adapters/aps-adapter.js.map +1 -0
- package/dist/esm/adapters/autogen-adapter.js +141 -0
- package/dist/esm/adapters/autogen-adapter.js.map +1 -0
- package/dist/esm/adapters/base-adapter.js +104 -0
- package/dist/esm/adapters/base-adapter.js.map +1 -0
- package/dist/esm/adapters/browser-agent-adapter.js +219 -0
- package/dist/esm/adapters/browser-agent-adapter.js.map +1 -0
- package/dist/esm/adapters/codex-adapter.js +318 -0
- package/dist/esm/adapters/codex-adapter.js.map +1 -0
- package/dist/esm/adapters/copilot-adapter.js +132 -0
- package/dist/esm/adapters/copilot-adapter.js.map +1 -0
- package/dist/esm/adapters/crewai-adapter.js +148 -0
- package/dist/esm/adapters/crewai-adapter.js.map +1 -0
- package/dist/esm/adapters/custom-adapter.js +142 -0
- package/dist/esm/adapters/custom-adapter.js.map +1 -0
- package/dist/esm/adapters/custom-streaming-adapter.js +181 -0
- package/dist/esm/adapters/custom-streaming-adapter.js.map +1 -0
- package/dist/esm/adapters/dspy-adapter.js +127 -0
- package/dist/esm/adapters/dspy-adapter.js.map +1 -0
- package/dist/esm/adapters/haystack-adapter.js +149 -0
- package/dist/esm/adapters/haystack-adapter.js.map +1 -0
- package/dist/esm/adapters/hermes-adapter.js +217 -0
- package/dist/esm/adapters/hermes-adapter.js.map +1 -0
- package/dist/esm/adapters/index.js +109 -0
- package/dist/esm/adapters/index.js.map +1 -0
- package/dist/esm/adapters/langchain-adapter.js +134 -0
- package/dist/esm/adapters/langchain-adapter.js.map +1 -0
- package/dist/esm/adapters/langchain-streaming-adapter.js +161 -0
- package/dist/esm/adapters/langchain-streaming-adapter.js.map +1 -0
- package/dist/esm/adapters/langgraph-adapter.js +119 -0
- package/dist/esm/adapters/langgraph-adapter.js.map +1 -0
- package/dist/esm/adapters/llamaindex-adapter.js +135 -0
- package/dist/esm/adapters/llamaindex-adapter.js.map +1 -0
- package/dist/esm/adapters/mcp-adapter.js +200 -0
- package/dist/esm/adapters/mcp-adapter.js.map +1 -0
- package/dist/esm/adapters/minimax-adapter.js +233 -0
- package/dist/esm/adapters/minimax-adapter.js.map +1 -0
- package/dist/esm/adapters/nemoclaw-adapter.js +465 -0
- package/dist/esm/adapters/nemoclaw-adapter.js.map +1 -0
- package/dist/esm/adapters/openai-agents-adapter.js +118 -0
- package/dist/esm/adapters/openai-agents-adapter.js.map +1 -0
- package/dist/esm/adapters/openai-assistants-adapter.js +130 -0
- package/dist/esm/adapters/openai-assistants-adapter.js.map +1 -0
- package/dist/esm/adapters/openclaw-adapter.js +107 -0
- package/dist/esm/adapters/openclaw-adapter.js.map +1 -0
- package/dist/esm/adapters/orchestrator-adapter.js +218 -0
- package/dist/esm/adapters/orchestrator-adapter.js.map +1 -0
- package/dist/esm/adapters/pydantic-ai-adapter.js +163 -0
- package/dist/esm/adapters/pydantic-ai-adapter.js.map +1 -0
- package/dist/esm/adapters/rlm-adapter.js +167 -0
- package/dist/esm/adapters/rlm-adapter.js.map +1 -0
- package/dist/esm/adapters/semantic-kernel-adapter.js +123 -0
- package/dist/esm/adapters/semantic-kernel-adapter.js.map +1 -0
- package/dist/esm/adapters/streaming-base-adapter.js +74 -0
- package/dist/esm/adapters/streaming-base-adapter.js.map +1 -0
- package/dist/esm/adapters/vertex-ai-adapter.js +166 -0
- package/dist/esm/adapters/vertex-ai-adapter.js.map +1 -0
- package/dist/esm/demo-control-plane.js +147 -0
- package/dist/esm/demo-control-plane.js.map +1 -0
- package/dist/esm/demo-worktree-dashboard.js +131 -0
- package/dist/esm/demo-worktree-dashboard.js.map +1 -0
- package/dist/esm/examples/01-hello-swarm.js +165 -0
- package/dist/esm/examples/01-hello-swarm.js.map +1 -0
- package/dist/esm/examples/02-fsm-pipeline.js +189 -0
- package/dist/esm/examples/02-fsm-pipeline.js.map +1 -0
- package/dist/esm/examples/03-parallel-agents.js +192 -0
- package/dist/esm/examples/03-parallel-agents.js.map +1 -0
- package/dist/esm/examples/05-code-review-swarm.js +1177 -0
- package/dist/esm/examples/05-code-review-swarm.js.map +1 -0
- package/dist/esm/examples/06-ai-pipeline-demo.js +263 -0
- package/dist/esm/examples/06-ai-pipeline-demo.js.map +1 -0
- package/dist/esm/examples/07-full-showcase.js +946 -0
- package/dist/esm/examples/07-full-showcase.js.map +1 -0
- package/dist/esm/examples/08-control-plane-stress-demo.js +186 -0
- package/dist/esm/examples/08-control-plane-stress-demo.js.map +1 -0
- package/dist/esm/examples/09-real-langchain.js +231 -0
- package/dist/esm/examples/09-real-langchain.js.map +1 -0
- package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js +270 -0
- package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js.map +1 -0
- package/dist/esm/examples/demo-runner.js +119 -0
- package/dist/esm/examples/demo-runner.js.map +1 -0
- package/dist/esm/index.js +1352 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/adapter-hooks.js +216 -0
- package/dist/esm/lib/adapter-hooks.js.map +1 -0
- package/dist/esm/lib/adapter-test-harness.js +118 -0
- package/dist/esm/lib/adapter-test-harness.js.map +1 -0
- package/dist/esm/lib/agent-conversation.js +155 -0
- package/dist/esm/lib/agent-conversation.js.map +1 -0
- package/dist/esm/lib/agent-debate.js +146 -0
- package/dist/esm/lib/agent-debate.js.map +1 -0
- package/dist/esm/lib/agent-memory.js +336 -0
- package/dist/esm/lib/agent-memory.js.map +1 -0
- package/dist/esm/lib/agent-runtime.js +818 -0
- package/dist/esm/lib/agent-runtime.js.map +1 -0
- package/dist/esm/lib/agent-vcr.js +218 -0
- package/dist/esm/lib/agent-vcr.js.map +1 -0
- package/dist/esm/lib/anomaly-detector.js +178 -0
- package/dist/esm/lib/anomaly-detector.js.map +1 -0
- package/dist/esm/lib/approval-inbox.js +385 -0
- package/dist/esm/lib/approval-inbox.js.map +1 -0
- package/dist/esm/lib/auth-guardian.js +692 -0
- package/dist/esm/lib/auth-guardian.js.map +1 -0
- package/dist/esm/lib/auth-validator.js +32 -0
- package/dist/esm/lib/auth-validator.js.map +1 -0
- package/dist/esm/lib/blackboard-backend-crdt.js +251 -0
- package/dist/esm/lib/blackboard-backend-crdt.js.map +1 -0
- package/dist/esm/lib/blackboard-backend-redis.js +244 -0
- package/dist/esm/lib/blackboard-backend-redis.js.map +1 -0
- package/dist/esm/lib/blackboard-backend.js +141 -0
- package/dist/esm/lib/blackboard-backend.js.map +1 -0
- package/dist/esm/lib/blackboard-validator.js +985 -0
- package/dist/esm/lib/blackboard-validator.js.map +1 -0
- package/dist/esm/lib/circuit-breaker.js +164 -0
- package/dist/esm/lib/circuit-breaker.js.map +1 -0
- package/dist/esm/lib/claim-verifier.js +173 -0
- package/dist/esm/lib/claim-verifier.js.map +1 -0
- package/dist/esm/lib/comparison-runner.js +138 -0
- package/dist/esm/lib/comparison-runner.js.map +1 -0
- package/dist/esm/lib/compliance-monitor.js +261 -0
- package/dist/esm/lib/compliance-monitor.js.map +1 -0
- package/dist/esm/lib/confidence-filter.js +210 -0
- package/dist/esm/lib/confidence-filter.js.map +1 -0
- package/dist/esm/lib/config-watcher.js +215 -0
- package/dist/esm/lib/config-watcher.js.map +1 -0
- package/dist/esm/lib/consistency.js +274 -0
- package/dist/esm/lib/consistency.js.map +1 -0
- package/dist/esm/lib/console-ui.js +276 -0
- package/dist/esm/lib/console-ui.js.map +1 -0
- package/dist/esm/lib/context-throttler.js +171 -0
- package/dist/esm/lib/context-throttler.js.map +1 -0
- package/dist/esm/lib/control-plane.js +527 -0
- package/dist/esm/lib/control-plane.js.map +1 -0
- package/dist/esm/lib/cost-governor.js +128 -0
- package/dist/esm/lib/cost-governor.js.map +1 -0
- package/dist/esm/lib/cost-heatmap.js +161 -0
- package/dist/esm/lib/cost-heatmap.js.map +1 -0
- package/dist/esm/lib/coverage-gate.js +213 -0
- package/dist/esm/lib/coverage-gate.js.map +1 -0
- package/dist/esm/lib/coverage-reporter.js +177 -0
- package/dist/esm/lib/coverage-reporter.js.map +1 -0
- package/dist/esm/lib/crdt.js +141 -0
- package/dist/esm/lib/crdt.js.map +1 -0
- package/dist/esm/lib/dashboard-server.js +403 -0
- package/dist/esm/lib/dashboard-server.js.map +1 -0
- package/dist/esm/lib/dry-run.js +130 -0
- package/dist/esm/lib/dry-run.js.map +1 -0
- package/dist/esm/lib/env-manager.js +518 -0
- package/dist/esm/lib/env-manager.js.map +1 -0
- package/dist/esm/lib/errors.js +201 -0
- package/dist/esm/lib/errors.js.map +1 -0
- package/dist/esm/lib/event-bus.js +229 -0
- package/dist/esm/lib/event-bus.js.map +1 -0
- package/dist/esm/lib/explainability.js +102 -0
- package/dist/esm/lib/explainability.js.map +1 -0
- package/dist/esm/lib/fan-out.js +237 -0
- package/dist/esm/lib/fan-out.js.map +1 -0
- package/dist/esm/lib/federated-budget.js +322 -0
- package/dist/esm/lib/federated-budget.js.map +1 -0
- package/dist/esm/lib/fsm-journey.js +478 -0
- package/dist/esm/lib/fsm-journey.js.map +1 -0
- package/dist/esm/lib/goal-decomposer.js +698 -0
- package/dist/esm/lib/goal-decomposer.js.map +1 -0
- package/dist/esm/lib/goal-dsl.js +391 -0
- package/dist/esm/lib/goal-dsl.js.map +1 -0
- package/dist/esm/lib/job-queue.js +310 -0
- package/dist/esm/lib/job-queue.js.map +1 -0
- package/dist/esm/lib/landscape-agent.js +134 -0
- package/dist/esm/lib/landscape-agent.js.map +1 -0
- package/dist/esm/lib/learning-loop.js +181 -0
- package/dist/esm/lib/learning-loop.js.map +1 -0
- package/dist/esm/lib/lifecycle-hooks.js +148 -0
- package/dist/esm/lib/lifecycle-hooks.js.map +1 -0
- package/dist/esm/lib/locked-blackboard.js +1295 -0
- package/dist/esm/lib/locked-blackboard.js.map +1 -0
- package/dist/esm/lib/logger.js +150 -0
- package/dist/esm/lib/logger.js.map +1 -0
- package/dist/esm/lib/mcp-blackboard-tools.js +298 -0
- package/dist/esm/lib/mcp-blackboard-tools.js.map +1 -0
- package/dist/esm/lib/mcp-bridge.js +357 -0
- package/dist/esm/lib/mcp-bridge.js.map +1 -0
- package/dist/esm/lib/mcp-tool-consumer.js +287 -0
- package/dist/esm/lib/mcp-tool-consumer.js.map +1 -0
- package/dist/esm/lib/mcp-tools-control.js +392 -0
- package/dist/esm/lib/mcp-tools-control.js.map +1 -0
- package/dist/esm/lib/mcp-tools-extended.js +371 -0
- package/dist/esm/lib/mcp-tools-extended.js.map +1 -0
- package/dist/esm/lib/mcp-transport-http.js +528 -0
- package/dist/esm/lib/mcp-transport-http.js.map +1 -0
- package/dist/esm/lib/mcp-transport-sse.js +503 -0
- package/dist/esm/lib/mcp-transport-sse.js.map +1 -0
- package/dist/esm/lib/metrics.js +284 -0
- package/dist/esm/lib/metrics.js.map +1 -0
- package/dist/esm/lib/orchestrator-types.js +66 -0
- package/dist/esm/lib/orchestrator-types.js.map +1 -0
- package/dist/esm/lib/otel-bridge.js +167 -0
- package/dist/esm/lib/otel-bridge.js.map +1 -0
- package/dist/esm/lib/partition-planner.js +246 -0
- package/dist/esm/lib/partition-planner.js.map +1 -0
- package/dist/esm/lib/phase-pipeline.js +367 -0
- package/dist/esm/lib/phase-pipeline.js.map +1 -0
- package/dist/esm/lib/playground.js +224 -0
- package/dist/esm/lib/playground.js.map +1 -0
- package/dist/esm/lib/qa-orchestrator.js +296 -0
- package/dist/esm/lib/qa-orchestrator.js.map +1 -0
- package/dist/esm/lib/quadtree.js +259 -0
- package/dist/esm/lib/quadtree.js.map +1 -0
- package/dist/esm/lib/route-classifier.js +217 -0
- package/dist/esm/lib/route-classifier.js.map +1 -0
- package/dist/esm/lib/semantic-search.js +235 -0
- package/dist/esm/lib/semantic-search.js.map +1 -0
- package/dist/esm/lib/shared-blackboard.js +249 -0
- package/dist/esm/lib/shared-blackboard.js.map +1 -0
- package/dist/esm/lib/skill-composer.js +190 -0
- package/dist/esm/lib/skill-composer.js.map +1 -0
- package/dist/esm/lib/speculative-executor.js +107 -0
- package/dist/esm/lib/speculative-executor.js.map +1 -0
- package/dist/esm/lib/strategy-agent.js +626 -0
- package/dist/esm/lib/strategy-agent.js.map +1 -0
- package/dist/esm/lib/swarm-transport.js +307 -0
- package/dist/esm/lib/swarm-transport.js.map +1 -0
- package/dist/esm/lib/swarm-utils.js +510 -0
- package/dist/esm/lib/swarm-utils.js.map +1 -0
- package/dist/esm/lib/task-decomposer.js +272 -0
- package/dist/esm/lib/task-decomposer.js.map +1 -0
- package/dist/esm/lib/telemetry-provider.js +207 -0
- package/dist/esm/lib/telemetry-provider.js.map +1 -0
- package/dist/esm/lib/timeline-scrubber.js +173 -0
- package/dist/esm/lib/timeline-scrubber.js.map +1 -0
- package/dist/esm/lib/topology.js +591 -0
- package/dist/esm/lib/topology.js.map +1 -0
- package/dist/esm/lib/transport-agent.js +366 -0
- package/dist/esm/lib/transport-agent.js.map +1 -0
- package/dist/esm/lib/work-tree-dashboard.js +583 -0
- package/dist/esm/lib/work-tree-dashboard.js.map +1 -0
- package/dist/esm/lib/work-tree-ui.js +333 -0
- package/dist/esm/lib/work-tree-ui.js.map +1 -0
- package/dist/esm/lib/work-tree.js +480 -0
- package/dist/esm/lib/work-tree.js.map +1 -0
- package/dist/esm/run.js +144 -0
- package/dist/esm/run.js.map +1 -0
- package/dist/esm/security.js +1122 -0
- package/dist/esm/security.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/mcp-transport-http.d.ts +203 -0
- package/dist/lib/mcp-transport-http.d.ts.map +1 -0
- package/dist/lib/mcp-transport-http.js +528 -0
- package/dist/lib/mcp-transport-http.js.map +1 -0
- package/dist/lib/phase-pipeline.d.ts +31 -0
- package/dist/lib/phase-pipeline.d.ts.map +1 -1
- package/dist/lib/phase-pipeline.js +93 -1
- package/dist/lib/phase-pipeline.js.map +1 -1
- package/dist/lib/semantic-search.d.ts +42 -6
- package/dist/lib/semantic-search.d.ts.map +1 -1
- package/dist/lib/semantic-search.js +87 -6
- package/dist/lib/semantic-search.js.map +1 -1
- package/package.json +24 -4
|
@@ -0,0 +1,613 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Adapter Registry -- Routes agent requests to the correct adapter
|
|
4
|
+
*
|
|
5
|
+
* The registry is the single entry point the SwarmOrchestrator uses.
|
|
6
|
+
* It manages multiple adapters, routes requests based on agent ID patterns,
|
|
7
|
+
* and provides unified agent discovery across all registered adapters.
|
|
8
|
+
*
|
|
9
|
+
* @module AdapterRegistry
|
|
10
|
+
* @version 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.AdapterRegistry = void 0;
|
|
14
|
+
exports.getRegistry = getRegistry;
|
|
15
|
+
const errors_1 = require("../lib/errors");
|
|
16
|
+
const circuit_breaker_1 = require("../lib/circuit-breaker");
|
|
17
|
+
const DEFAULT_RETRY_POLICY = {
|
|
18
|
+
maxRetries: 0,
|
|
19
|
+
baseDelayMs: 200,
|
|
20
|
+
maxDelayMs: 5000,
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Central registry that manages multiple agent framework adapters and
|
|
24
|
+
* routes execution requests to the correct one.
|
|
25
|
+
*
|
|
26
|
+
* Supports pattern-based routing, automatic prefix detection, default
|
|
27
|
+
* adapter fallback, agent caching, unified discovery, and lifecycle events.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { AdapterRegistry, LangChainAdapter, CustomAdapter } from 'network-ai';
|
|
32
|
+
*
|
|
33
|
+
* const registry = new AdapterRegistry();
|
|
34
|
+
* await registry.addAdapter(new LangChainAdapter());
|
|
35
|
+
* await registry.addAdapter(new CustomAdapter());
|
|
36
|
+
*
|
|
37
|
+
* // Route by prefix: "lc:research" -> LangChainAdapter
|
|
38
|
+
* registry.addRoute({ pattern: 'lc:*', adapterName: 'langchain' });
|
|
39
|
+
*
|
|
40
|
+
* const result = await registry.executeAgent('lc:research', payload, context);
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
class AdapterRegistry {
|
|
44
|
+
adapters = new Map();
|
|
45
|
+
routes = [];
|
|
46
|
+
defaultAdapterName = null;
|
|
47
|
+
eventHandlers = new Map();
|
|
48
|
+
agentCache = new Map(); // agentId -> adapterName
|
|
49
|
+
deferredFactories = new Map();
|
|
50
|
+
/** Opt-in retry policy for adapter execution. */
|
|
51
|
+
retryPolicy;
|
|
52
|
+
/** Per-adapter circuit breakers. */
|
|
53
|
+
circuitBreakers = new Map();
|
|
54
|
+
/** Circuit breaker configuration applied to all new breakers. */
|
|
55
|
+
circuitBreakerConfig;
|
|
56
|
+
/** Ordered list of fallback adapter names tried when the primary circuit opens. */
|
|
57
|
+
fallbackChain;
|
|
58
|
+
constructor(config) {
|
|
59
|
+
if (config) {
|
|
60
|
+
this.defaultAdapterName = config.defaultAdapter ?? null;
|
|
61
|
+
this.routes = config.routes ?? [];
|
|
62
|
+
}
|
|
63
|
+
this.retryPolicy = { ...DEFAULT_RETRY_POLICY, ...config?.retryPolicy };
|
|
64
|
+
this.circuitBreakerConfig = config?.circuitBreaker ?? {};
|
|
65
|
+
this.fallbackChain = config?.fallbackChain ?? [];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Update the retry policy at runtime.
|
|
69
|
+
*/
|
|
70
|
+
setRetryPolicy(policy) {
|
|
71
|
+
this.retryPolicy = { ...this.retryPolicy, ...policy };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Update the circuit breaker configuration at runtime.
|
|
75
|
+
* Only affects breakers created after this call.
|
|
76
|
+
*/
|
|
77
|
+
setCircuitBreakerConfig(config) {
|
|
78
|
+
this.circuitBreakerConfig = { ...this.circuitBreakerConfig, ...config };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Return the current state of the circuit breaker for a given adapter.
|
|
82
|
+
* Returns `'CLOSED'` if no breaker has been created yet (no traffic).
|
|
83
|
+
*/
|
|
84
|
+
getCircuitState(adapterName) {
|
|
85
|
+
return this.circuitBreakers.get(adapterName)?.getState() ?? 'CLOSED';
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Force-reset the circuit breaker for a given adapter to CLOSED.
|
|
89
|
+
* Useful for manual recovery or tests.
|
|
90
|
+
*/
|
|
91
|
+
resetCircuit(adapterName) {
|
|
92
|
+
this.circuitBreakers.get(adapterName)?.reset();
|
|
93
|
+
}
|
|
94
|
+
/** Get or lazily create the circuit breaker for `adapterName`. @internal */
|
|
95
|
+
getBreaker(adapterName) {
|
|
96
|
+
if (!this.circuitBreakers.has(adapterName)) {
|
|
97
|
+
this.circuitBreakers.set(adapterName, new circuit_breaker_1.CircuitBreaker(adapterName, {
|
|
98
|
+
...this.circuitBreakerConfig,
|
|
99
|
+
onStateChange: (from, to, name) => {
|
|
100
|
+
const eventType = to === 'OPEN' ? 'circuit:open' :
|
|
101
|
+
to === 'HALF_OPEN' ? 'circuit:half-open' :
|
|
102
|
+
'circuit:close';
|
|
103
|
+
this.emit(eventType, name, { from, to });
|
|
104
|
+
// Forward to user callback if supplied
|
|
105
|
+
this.circuitBreakerConfig.onStateChange?.(from, to, name);
|
|
106
|
+
},
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
return this.circuitBreakers.get(adapterName);
|
|
110
|
+
}
|
|
111
|
+
// =========================================================================
|
|
112
|
+
// ADAPTER MANAGEMENT
|
|
113
|
+
// =========================================================================
|
|
114
|
+
/**
|
|
115
|
+
* Register an adapter with the registry.
|
|
116
|
+
* Call this for each agent framework you want to support.
|
|
117
|
+
*/
|
|
118
|
+
registerAdapter(adapter) {
|
|
119
|
+
if (!adapter || typeof adapter !== 'object') {
|
|
120
|
+
throw new errors_1.ValidationError('adapter is required and must be an object');
|
|
121
|
+
}
|
|
122
|
+
if (typeof adapter.name !== 'string' || adapter.name.trim() === '') {
|
|
123
|
+
throw new errors_1.ValidationError('adapter.name must be a non-empty string');
|
|
124
|
+
}
|
|
125
|
+
if (this.adapters.has(adapter.name)) {
|
|
126
|
+
throw new errors_1.AdapterAlreadyRegisteredError(adapter.name);
|
|
127
|
+
}
|
|
128
|
+
this.adapters.set(adapter.name, adapter);
|
|
129
|
+
this.emit('adapter:registered', adapter.name);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Initialize a registered adapter with its configuration
|
|
133
|
+
*/
|
|
134
|
+
async initializeAdapter(adapterName, config = {}) {
|
|
135
|
+
if (!adapterName || typeof adapterName !== 'string') {
|
|
136
|
+
throw new errors_1.ValidationError('adapterName must be a non-empty string');
|
|
137
|
+
}
|
|
138
|
+
const adapter = this.adapters.get(adapterName);
|
|
139
|
+
if (!adapter) {
|
|
140
|
+
throw new errors_1.AdapterNotFoundError(adapterName);
|
|
141
|
+
}
|
|
142
|
+
await adapter.initialize(config);
|
|
143
|
+
this.emit('adapter:initialized', adapterName);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Register + initialize in one call (convenience)
|
|
147
|
+
*/
|
|
148
|
+
async addAdapter(adapter, config = {}) {
|
|
149
|
+
this.registerAdapter(adapter);
|
|
150
|
+
await this.initializeAdapter(adapter.name, config);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Remove an adapter and shut it down
|
|
154
|
+
*/
|
|
155
|
+
async removeAdapter(adapterName) {
|
|
156
|
+
const adapter = this.adapters.get(adapterName);
|
|
157
|
+
if (adapter) {
|
|
158
|
+
await adapter.shutdown();
|
|
159
|
+
this.adapters.delete(adapterName);
|
|
160
|
+
// Clear agent cache entries for this adapter
|
|
161
|
+
for (const [agentId, name] of this.agentCache.entries()) {
|
|
162
|
+
if (name === adapterName)
|
|
163
|
+
this.agentCache.delete(agentId);
|
|
164
|
+
}
|
|
165
|
+
this.emit('adapter:shutdown', adapterName);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Register an adapter factory for deferred (lazy) initialization.
|
|
170
|
+
* The adapter instance is created and initialized only when first needed.
|
|
171
|
+
* @param name Unique adapter name
|
|
172
|
+
* @param factory Function that creates the adapter instance
|
|
173
|
+
* @param config Configuration to pass during initialization
|
|
174
|
+
*/
|
|
175
|
+
registerDeferred(name, factory, config = {}) {
|
|
176
|
+
if (this.adapters.has(name)) {
|
|
177
|
+
throw new errors_1.AdapterAlreadyRegisteredError(name);
|
|
178
|
+
}
|
|
179
|
+
this.deferredFactories.set(name, { factory, config });
|
|
180
|
+
this.emit('adapter:deferred', name);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Materialize a deferred adapter: create instance, initialize, and move to active map.
|
|
184
|
+
* @returns The initialized adapter, or null if no deferred factory exists
|
|
185
|
+
*/
|
|
186
|
+
async materializeDeferred(name) {
|
|
187
|
+
const deferred = this.deferredFactories.get(name);
|
|
188
|
+
if (!deferred)
|
|
189
|
+
return null;
|
|
190
|
+
const adapter = deferred.factory();
|
|
191
|
+
await adapter.initialize(deferred.config);
|
|
192
|
+
this.adapters.set(name, adapter);
|
|
193
|
+
this.deferredFactories.delete(name);
|
|
194
|
+
this.emit('adapter:registered', name);
|
|
195
|
+
this.emit('adapter:initialized', name);
|
|
196
|
+
return adapter;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Check whether a deferred factory is registered for the given name.
|
|
200
|
+
*/
|
|
201
|
+
hasDeferred(name) {
|
|
202
|
+
return this.deferredFactories.has(name);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get a registered adapter by name
|
|
206
|
+
*/
|
|
207
|
+
getAdapter(adapterName) {
|
|
208
|
+
return this.adapters.get(adapterName);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* List all registered adapters (active and deferred)
|
|
212
|
+
*/
|
|
213
|
+
listAdapters() {
|
|
214
|
+
const active = Array.from(this.adapters.values()).map(a => ({
|
|
215
|
+
name: a.name,
|
|
216
|
+
version: a.version,
|
|
217
|
+
ready: a.isReady(),
|
|
218
|
+
}));
|
|
219
|
+
const deferred = Array.from(this.deferredFactories.keys()).map(name => ({
|
|
220
|
+
name,
|
|
221
|
+
version: 'deferred',
|
|
222
|
+
ready: false,
|
|
223
|
+
deferred: true,
|
|
224
|
+
}));
|
|
225
|
+
return [...active, ...deferred];
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Set the default adapter for unrouted requests
|
|
229
|
+
*/
|
|
230
|
+
setDefaultAdapter(adapterName) {
|
|
231
|
+
if (!this.adapters.has(adapterName)) {
|
|
232
|
+
throw new errors_1.AdapterNotFoundError(adapterName);
|
|
233
|
+
}
|
|
234
|
+
this.defaultAdapterName = adapterName;
|
|
235
|
+
}
|
|
236
|
+
// =========================================================================
|
|
237
|
+
// ROUTING
|
|
238
|
+
// =========================================================================
|
|
239
|
+
/**
|
|
240
|
+
* Add a routing rule: agent IDs matching the pattern go to the specified adapter.
|
|
241
|
+
*
|
|
242
|
+
* Patterns:
|
|
243
|
+
* "lc:*" -> all agents prefixed with "lc:" go to the LangChain adapter
|
|
244
|
+
* "autogen:*" -> AutoGen agents
|
|
245
|
+
* "crew:*" -> CrewAI agents
|
|
246
|
+
* "*" -> catch-all
|
|
247
|
+
* "data_analyst" -> exact match
|
|
248
|
+
*/
|
|
249
|
+
addRoute(route) {
|
|
250
|
+
this.routes.push(route);
|
|
251
|
+
// Sort by priority (highest first)
|
|
252
|
+
this.routes.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Resolve which adapter should handle a given agent ID
|
|
256
|
+
*/
|
|
257
|
+
resolveAdapter(agentId) {
|
|
258
|
+
// 1. Check cache
|
|
259
|
+
const cached = this.agentCache.get(agentId);
|
|
260
|
+
if (cached) {
|
|
261
|
+
const adapter = this.adapters.get(cached);
|
|
262
|
+
if (adapter?.isReady())
|
|
263
|
+
return adapter;
|
|
264
|
+
this.agentCache.delete(agentId); // Stale cache
|
|
265
|
+
}
|
|
266
|
+
// 2. Check routing rules
|
|
267
|
+
for (const route of this.routes) {
|
|
268
|
+
if (this.matchPattern(agentId, route.pattern)) {
|
|
269
|
+
const adapter = this.adapters.get(route.adapterName);
|
|
270
|
+
if (adapter?.isReady()) {
|
|
271
|
+
this.agentCache.set(agentId, route.adapterName);
|
|
272
|
+
return adapter;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// 3. Check if agent ID has a prefix indicating the adapter (convention: "adapter:agentId")
|
|
277
|
+
const colonIndex = agentId.indexOf(':');
|
|
278
|
+
if (colonIndex > 0) {
|
|
279
|
+
const prefix = agentId.substring(0, colonIndex);
|
|
280
|
+
const adapter = this.adapters.get(prefix);
|
|
281
|
+
if (adapter?.isReady()) {
|
|
282
|
+
this.agentCache.set(agentId, prefix);
|
|
283
|
+
return adapter;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// 4. Fall back to default adapter
|
|
287
|
+
if (this.defaultAdapterName) {
|
|
288
|
+
const adapter = this.adapters.get(this.defaultAdapterName);
|
|
289
|
+
if (adapter?.isReady())
|
|
290
|
+
return adapter;
|
|
291
|
+
}
|
|
292
|
+
// 5. If only one adapter is registered, use it
|
|
293
|
+
if (this.adapters.size === 1) {
|
|
294
|
+
const adapter = Array.from(this.adapters.values())[0];
|
|
295
|
+
if (adapter.isReady())
|
|
296
|
+
return adapter;
|
|
297
|
+
}
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Async version of resolveAdapter that materializes deferred adapters on demand.
|
|
302
|
+
* Prefer this over resolveAdapter() when deferred factories may be registered.
|
|
303
|
+
*/
|
|
304
|
+
async resolveAdapterAsync(agentId) {
|
|
305
|
+
// Try synchronous resolution first
|
|
306
|
+
const resolved = this.resolveAdapter(agentId);
|
|
307
|
+
if (resolved)
|
|
308
|
+
return resolved;
|
|
309
|
+
// Check deferred factories via routing rules
|
|
310
|
+
for (const route of this.routes) {
|
|
311
|
+
if (this.matchPattern(agentId, route.pattern) && this.deferredFactories.has(route.adapterName)) {
|
|
312
|
+
const adapter = await this.materializeDeferred(route.adapterName);
|
|
313
|
+
if (adapter?.isReady()) {
|
|
314
|
+
this.agentCache.set(agentId, route.adapterName);
|
|
315
|
+
return adapter;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// Check deferred via prefix convention
|
|
320
|
+
const colonIndex = agentId.indexOf(':');
|
|
321
|
+
if (colonIndex > 0) {
|
|
322
|
+
const prefix = agentId.substring(0, colonIndex);
|
|
323
|
+
if (this.deferredFactories.has(prefix)) {
|
|
324
|
+
const adapter = await this.materializeDeferred(prefix);
|
|
325
|
+
if (adapter?.isReady()) {
|
|
326
|
+
this.agentCache.set(agentId, prefix);
|
|
327
|
+
return adapter;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
// Check deferred default adapter
|
|
332
|
+
if (this.defaultAdapterName && this.deferredFactories.has(this.defaultAdapterName)) {
|
|
333
|
+
const adapter = await this.materializeDeferred(this.defaultAdapterName);
|
|
334
|
+
if (adapter?.isReady())
|
|
335
|
+
return adapter;
|
|
336
|
+
}
|
|
337
|
+
return null;
|
|
338
|
+
}
|
|
339
|
+
matchPattern(agentId, pattern) {
|
|
340
|
+
if (pattern === '*')
|
|
341
|
+
return true;
|
|
342
|
+
if (pattern === agentId)
|
|
343
|
+
return true;
|
|
344
|
+
// Simple glob: "prefix:*" or "prefix*"
|
|
345
|
+
if (pattern.endsWith('*')) {
|
|
346
|
+
const prefix = pattern.slice(0, -1);
|
|
347
|
+
return agentId.startsWith(prefix);
|
|
348
|
+
}
|
|
349
|
+
// Regex pattern (wrapped in /.../)
|
|
350
|
+
// Safety: reject patterns with catastrophic-backtracking constructs before
|
|
351
|
+
// building the RegExp, so attacker-controlled input cannot trigger ReDoS.
|
|
352
|
+
if (pattern.startsWith('/') && pattern.endsWith('/')) {
|
|
353
|
+
try {
|
|
354
|
+
const inner = pattern.slice(1, -1);
|
|
355
|
+
// Block nested quantifiers and excessively complex patterns
|
|
356
|
+
if (/(\(.*[+*]\))[+*?]|(\[[^\]]*\])[+*]{2}|([+*]){2,}/.test(inner))
|
|
357
|
+
return false;
|
|
358
|
+
if (inner.length > 200)
|
|
359
|
+
return false;
|
|
360
|
+
return new RegExp(inner).test(agentId);
|
|
361
|
+
}
|
|
362
|
+
catch {
|
|
363
|
+
return false;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return false;
|
|
367
|
+
}
|
|
368
|
+
// =========================================================================
|
|
369
|
+
// EXECUTION -- The main interface the orchestrator uses
|
|
370
|
+
// =========================================================================
|
|
371
|
+
/**
|
|
372
|
+
* Execute an agent task, automatically routing to the correct adapter.
|
|
373
|
+
* This is the primary method the SwarmOrchestrator calls.
|
|
374
|
+
*/
|
|
375
|
+
async executeAgent(agentId, payload, context) {
|
|
376
|
+
// Try sync resolution first, then async (materializes deferred adapters)
|
|
377
|
+
const adapter = this.resolveAdapter(agentId) ?? await this.resolveAdapterAsync(agentId);
|
|
378
|
+
if (!adapter) {
|
|
379
|
+
return {
|
|
380
|
+
success: false,
|
|
381
|
+
error: {
|
|
382
|
+
code: 'NO_ADAPTER',
|
|
383
|
+
message: `No adapter found for agent "${agentId}". Register an adapter or add a routing rule.`,
|
|
384
|
+
recoverable: false,
|
|
385
|
+
suggestedAction: 'Register an adapter using registry.addAdapter() and optionally add routes with registry.addRoute()',
|
|
386
|
+
},
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
const result = await this.executeWithRetry(adapter, agentId, payload, context);
|
|
390
|
+
// If all retries exhausted and a fallback adapter is configured, try it
|
|
391
|
+
if (!result.success && result.error?.recoverable && this.retryPolicy.fallbackAdapter) {
|
|
392
|
+
const fallback = this.adapters.get(this.retryPolicy.fallbackAdapter);
|
|
393
|
+
if (fallback && fallback !== adapter) {
|
|
394
|
+
this.emit('agent:execution:fallback', this.retryPolicy.fallbackAdapter, { agentId, originalAdapter: adapter.name });
|
|
395
|
+
return this.executeOnce(fallback, agentId, payload, context);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
return result;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Execute with exponential-backoff retries for recoverable errors.
|
|
402
|
+
*/
|
|
403
|
+
async executeWithRetry(adapter, agentId, payload, context) {
|
|
404
|
+
let lastResult = await this.executeOnce(adapter, agentId, payload, context);
|
|
405
|
+
let attempt = 0;
|
|
406
|
+
while (attempt < this.retryPolicy.maxRetries &&
|
|
407
|
+
!lastResult.success &&
|
|
408
|
+
lastResult.error?.recoverable) {
|
|
409
|
+
attempt++;
|
|
410
|
+
const delay = Math.min(this.retryPolicy.baseDelayMs * Math.pow(2, attempt - 1), this.retryPolicy.maxDelayMs);
|
|
411
|
+
await new Promise(r => setTimeout(r, delay));
|
|
412
|
+
this.emit('agent:execution:retry', adapter.name, { agentId, attempt, delayMs: delay });
|
|
413
|
+
lastResult = await this.executeOnce(adapter, agentId, payload, context);
|
|
414
|
+
}
|
|
415
|
+
if (lastResult.metadata) {
|
|
416
|
+
lastResult.metadata.retryAttempts = attempt;
|
|
417
|
+
}
|
|
418
|
+
return lastResult;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Single adapter execution attempt with event emission.
|
|
422
|
+
*/
|
|
423
|
+
async executeOnce(adapter, agentId, payload, context) {
|
|
424
|
+
this.emit('agent:execution:start', adapter.name, { agentId, payload });
|
|
425
|
+
const startTime = Date.now();
|
|
426
|
+
const breaker = this.getBreaker(adapter.name);
|
|
427
|
+
try {
|
|
428
|
+
const result = await breaker.execute(async () => {
|
|
429
|
+
// Strip adapter prefix from agentId if present (e.g., "lc:research" -> "research")
|
|
430
|
+
const colonIndex = agentId.indexOf(':');
|
|
431
|
+
const resolvedAgentId = colonIndex > 0 && this.adapters.has(agentId.substring(0, colonIndex))
|
|
432
|
+
? agentId.substring(colonIndex + 1)
|
|
433
|
+
: agentId;
|
|
434
|
+
return adapter.executeAgent(resolvedAgentId, payload, context);
|
|
435
|
+
});
|
|
436
|
+
// Enrich result with routing metadata
|
|
437
|
+
result.metadata = {
|
|
438
|
+
...result.metadata,
|
|
439
|
+
adapter: adapter.name,
|
|
440
|
+
executionTimeMs: Date.now() - startTime,
|
|
441
|
+
};
|
|
442
|
+
this.emit('agent:execution:complete', adapter.name, { agentId, result });
|
|
443
|
+
return result;
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
if (error instanceof circuit_breaker_1.CircuitOpenError) {
|
|
447
|
+
// Circuit is OPEN — attempt fallback chain before giving up
|
|
448
|
+
for (const fallbackName of this.fallbackChain) {
|
|
449
|
+
if (fallbackName === adapter.name)
|
|
450
|
+
continue;
|
|
451
|
+
const fallback = this.adapters.get(fallbackName);
|
|
452
|
+
if (fallback?.isReady()) {
|
|
453
|
+
this.emit('agent:execution:fallback', fallbackName, { agentId, originalAdapter: adapter.name, reason: 'circuit-open' });
|
|
454
|
+
return this.executeOnce(fallback, agentId, payload, context);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
// Also check retryPolicy.fallbackAdapter for backward compat
|
|
458
|
+
if (this.retryPolicy.fallbackAdapter && this.retryPolicy.fallbackAdapter !== adapter.name) {
|
|
459
|
+
const fallback = this.adapters.get(this.retryPolicy.fallbackAdapter);
|
|
460
|
+
if (fallback?.isReady()) {
|
|
461
|
+
this.emit('agent:execution:fallback', this.retryPolicy.fallbackAdapter, { agentId, originalAdapter: adapter.name, reason: 'circuit-open' });
|
|
462
|
+
return this.executeOnce(fallback, agentId, payload, context);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
this.emit('agent:execution:error', adapter.name, { agentId, error });
|
|
466
|
+
return {
|
|
467
|
+
success: false,
|
|
468
|
+
error: {
|
|
469
|
+
code: 'CIRCUIT_OPEN',
|
|
470
|
+
message: error.message,
|
|
471
|
+
recoverable: false,
|
|
472
|
+
nativeError: error,
|
|
473
|
+
},
|
|
474
|
+
metadata: {
|
|
475
|
+
adapter: adapter.name,
|
|
476
|
+
executionTimeMs: Date.now() - startTime,
|
|
477
|
+
},
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
this.emit('agent:execution:error', adapter.name, { agentId, error });
|
|
481
|
+
return {
|
|
482
|
+
success: false,
|
|
483
|
+
error: {
|
|
484
|
+
code: 'ADAPTER_ERROR',
|
|
485
|
+
message: error instanceof Error ? error.message : 'Unknown adapter error',
|
|
486
|
+
recoverable: true,
|
|
487
|
+
nativeError: error,
|
|
488
|
+
},
|
|
489
|
+
metadata: {
|
|
490
|
+
adapter: adapter.name,
|
|
491
|
+
executionTimeMs: Date.now() - startTime,
|
|
492
|
+
},
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
// =========================================================================
|
|
497
|
+
// DISCOVERY -- Unified agent listing across all adapters
|
|
498
|
+
// =========================================================================
|
|
499
|
+
/**
|
|
500
|
+
* Discover all agents across all registered adapters
|
|
501
|
+
*/
|
|
502
|
+
async discoverAgents() {
|
|
503
|
+
const allAgents = [];
|
|
504
|
+
for (const adapter of this.adapters.values()) {
|
|
505
|
+
if (!adapter.isReady())
|
|
506
|
+
continue;
|
|
507
|
+
try {
|
|
508
|
+
const agents = await adapter.listAgents();
|
|
509
|
+
allAgents.push(...agents);
|
|
510
|
+
for (const agent of agents) {
|
|
511
|
+
this.agentCache.set(agent.id, adapter.name);
|
|
512
|
+
this.emit('agent:discovered', adapter.name, { agent });
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
catch (err) {
|
|
516
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
517
|
+
console.warn(`[AdapterRegistry] Adapter "${adapter.name}" dropped during agent discovery: ${msg}`);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
return allAgents;
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Check if any adapter can handle a specific agent
|
|
524
|
+
*/
|
|
525
|
+
async isAgentAvailable(agentId) {
|
|
526
|
+
const adapter = this.resolveAdapter(agentId);
|
|
527
|
+
if (!adapter)
|
|
528
|
+
return false;
|
|
529
|
+
const colonIndex = agentId.indexOf(':');
|
|
530
|
+
const resolvedId = colonIndex > 0 && this.adapters.has(agentId.substring(0, colonIndex))
|
|
531
|
+
? agentId.substring(colonIndex + 1)
|
|
532
|
+
: agentId;
|
|
533
|
+
return adapter.isAgentAvailable(resolvedId);
|
|
534
|
+
}
|
|
535
|
+
// =========================================================================
|
|
536
|
+
// HEALTH -- System-wide health status
|
|
537
|
+
// =========================================================================
|
|
538
|
+
async healthCheck() {
|
|
539
|
+
const results = {};
|
|
540
|
+
for (const [name, adapter] of this.adapters.entries()) {
|
|
541
|
+
try {
|
|
542
|
+
results[name] = await adapter.healthCheck();
|
|
543
|
+
}
|
|
544
|
+
catch (error) {
|
|
545
|
+
results[name] = {
|
|
546
|
+
healthy: false,
|
|
547
|
+
details: error instanceof Error ? error.message : 'Health check failed',
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
return results;
|
|
552
|
+
}
|
|
553
|
+
// =========================================================================
|
|
554
|
+
// EVENTS
|
|
555
|
+
// =========================================================================
|
|
556
|
+
on(event, handler) {
|
|
557
|
+
const handlers = this.eventHandlers.get(event) ?? [];
|
|
558
|
+
handlers.push(handler);
|
|
559
|
+
this.eventHandlers.set(event, handlers);
|
|
560
|
+
}
|
|
561
|
+
off(event, handler) {
|
|
562
|
+
const handlers = this.eventHandlers.get(event) ?? [];
|
|
563
|
+
this.eventHandlers.set(event, handlers.filter(h => h !== handler));
|
|
564
|
+
}
|
|
565
|
+
emit(type, adapter, data) {
|
|
566
|
+
const event = {
|
|
567
|
+
type,
|
|
568
|
+
adapter,
|
|
569
|
+
timestamp: new Date().toISOString(),
|
|
570
|
+
data,
|
|
571
|
+
};
|
|
572
|
+
const handlers = this.eventHandlers.get(type) ?? [];
|
|
573
|
+
for (const handler of handlers) {
|
|
574
|
+
try {
|
|
575
|
+
handler(event);
|
|
576
|
+
}
|
|
577
|
+
catch {
|
|
578
|
+
// Don't let event handler errors break execution
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
// =========================================================================
|
|
583
|
+
// CLEANUP
|
|
584
|
+
// =========================================================================
|
|
585
|
+
/**
|
|
586
|
+
* Shut down all adapters and clear the registry
|
|
587
|
+
*/
|
|
588
|
+
async shutdownAll() {
|
|
589
|
+
for (const [name, adapter] of this.adapters.entries()) {
|
|
590
|
+
try {
|
|
591
|
+
await adapter.shutdown();
|
|
592
|
+
this.emit('adapter:shutdown', name);
|
|
593
|
+
}
|
|
594
|
+
catch {
|
|
595
|
+
// Best-effort shutdown
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
this.adapters.clear();
|
|
599
|
+
this.agentCache.clear();
|
|
600
|
+
this.deferredFactories.clear();
|
|
601
|
+
this.routes = [];
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
exports.AdapterRegistry = AdapterRegistry;
|
|
605
|
+
// Default singleton registry
|
|
606
|
+
let defaultRegistry = null;
|
|
607
|
+
function getRegistry(config) {
|
|
608
|
+
if (!defaultRegistry || config) {
|
|
609
|
+
defaultRegistry = new AdapterRegistry(config);
|
|
610
|
+
}
|
|
611
|
+
return defaultRegistry;
|
|
612
|
+
}
|
|
613
|
+
//# sourceMappingURL=adapter-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-registry.js","sourceRoot":"","sources":["../../../adapters/adapter-registry.ts"],"names":[],"mappings":"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"}
|