network-ai 5.10.2 → 5.12.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.
Files changed (273) hide show
  1. package/INTEGRATION_GUIDE.md +2 -2
  2. package/QUICKSTART.md +10 -0
  3. package/README.md +32 -3
  4. package/SKILL.md +3 -3
  5. package/dist/esm/adapters/a2a-adapter.js +235 -0
  6. package/dist/esm/adapters/a2a-adapter.js.map +1 -0
  7. package/dist/esm/adapters/adapter-registry.js +613 -0
  8. package/dist/esm/adapters/adapter-registry.js.map +1 -0
  9. package/dist/esm/adapters/agno-adapter.js +140 -0
  10. package/dist/esm/adapters/agno-adapter.js.map +1 -0
  11. package/dist/esm/adapters/anthropic-computer-use-adapter.js +180 -0
  12. package/dist/esm/adapters/anthropic-computer-use-adapter.js.map +1 -0
  13. package/dist/esm/adapters/aps-adapter.js +289 -0
  14. package/dist/esm/adapters/aps-adapter.js.map +1 -0
  15. package/dist/esm/adapters/autogen-adapter.js +141 -0
  16. package/dist/esm/adapters/autogen-adapter.js.map +1 -0
  17. package/dist/esm/adapters/base-adapter.js +104 -0
  18. package/dist/esm/adapters/base-adapter.js.map +1 -0
  19. package/dist/esm/adapters/browser-agent-adapter.js +219 -0
  20. package/dist/esm/adapters/browser-agent-adapter.js.map +1 -0
  21. package/dist/esm/adapters/codex-adapter.js +318 -0
  22. package/dist/esm/adapters/codex-adapter.js.map +1 -0
  23. package/dist/esm/adapters/copilot-adapter.js +132 -0
  24. package/dist/esm/adapters/copilot-adapter.js.map +1 -0
  25. package/dist/esm/adapters/crewai-adapter.js +148 -0
  26. package/dist/esm/adapters/crewai-adapter.js.map +1 -0
  27. package/dist/esm/adapters/custom-adapter.js +142 -0
  28. package/dist/esm/adapters/custom-adapter.js.map +1 -0
  29. package/dist/esm/adapters/custom-streaming-adapter.js +181 -0
  30. package/dist/esm/adapters/custom-streaming-adapter.js.map +1 -0
  31. package/dist/esm/adapters/dspy-adapter.js +127 -0
  32. package/dist/esm/adapters/dspy-adapter.js.map +1 -0
  33. package/dist/esm/adapters/haystack-adapter.js +149 -0
  34. package/dist/esm/adapters/haystack-adapter.js.map +1 -0
  35. package/dist/esm/adapters/hermes-adapter.js +217 -0
  36. package/dist/esm/adapters/hermes-adapter.js.map +1 -0
  37. package/dist/esm/adapters/index.js +109 -0
  38. package/dist/esm/adapters/index.js.map +1 -0
  39. package/dist/esm/adapters/langchain-adapter.js +134 -0
  40. package/dist/esm/adapters/langchain-adapter.js.map +1 -0
  41. package/dist/esm/adapters/langchain-streaming-adapter.js +161 -0
  42. package/dist/esm/adapters/langchain-streaming-adapter.js.map +1 -0
  43. package/dist/esm/adapters/langgraph-adapter.js +119 -0
  44. package/dist/esm/adapters/langgraph-adapter.js.map +1 -0
  45. package/dist/esm/adapters/llamaindex-adapter.js +135 -0
  46. package/dist/esm/adapters/llamaindex-adapter.js.map +1 -0
  47. package/dist/esm/adapters/mcp-adapter.js +200 -0
  48. package/dist/esm/adapters/mcp-adapter.js.map +1 -0
  49. package/dist/esm/adapters/minimax-adapter.js +233 -0
  50. package/dist/esm/adapters/minimax-adapter.js.map +1 -0
  51. package/dist/esm/adapters/nemoclaw-adapter.js +465 -0
  52. package/dist/esm/adapters/nemoclaw-adapter.js.map +1 -0
  53. package/dist/esm/adapters/openai-agents-adapter.js +118 -0
  54. package/dist/esm/adapters/openai-agents-adapter.js.map +1 -0
  55. package/dist/esm/adapters/openai-assistants-adapter.js +130 -0
  56. package/dist/esm/adapters/openai-assistants-adapter.js.map +1 -0
  57. package/dist/esm/adapters/openclaw-adapter.js +107 -0
  58. package/dist/esm/adapters/openclaw-adapter.js.map +1 -0
  59. package/dist/esm/adapters/orchestrator-adapter.js +218 -0
  60. package/dist/esm/adapters/orchestrator-adapter.js.map +1 -0
  61. package/dist/esm/adapters/pydantic-ai-adapter.js +163 -0
  62. package/dist/esm/adapters/pydantic-ai-adapter.js.map +1 -0
  63. package/dist/esm/adapters/rlm-adapter.js +167 -0
  64. package/dist/esm/adapters/rlm-adapter.js.map +1 -0
  65. package/dist/esm/adapters/semantic-kernel-adapter.js +123 -0
  66. package/dist/esm/adapters/semantic-kernel-adapter.js.map +1 -0
  67. package/dist/esm/adapters/streaming-base-adapter.js +74 -0
  68. package/dist/esm/adapters/streaming-base-adapter.js.map +1 -0
  69. package/dist/esm/adapters/vertex-ai-adapter.js +166 -0
  70. package/dist/esm/adapters/vertex-ai-adapter.js.map +1 -0
  71. package/dist/esm/demo-control-plane.js +147 -0
  72. package/dist/esm/demo-control-plane.js.map +1 -0
  73. package/dist/esm/demo-worktree-dashboard.js +131 -0
  74. package/dist/esm/demo-worktree-dashboard.js.map +1 -0
  75. package/dist/esm/examples/01-hello-swarm.js +165 -0
  76. package/dist/esm/examples/01-hello-swarm.js.map +1 -0
  77. package/dist/esm/examples/02-fsm-pipeline.js +189 -0
  78. package/dist/esm/examples/02-fsm-pipeline.js.map +1 -0
  79. package/dist/esm/examples/03-parallel-agents.js +192 -0
  80. package/dist/esm/examples/03-parallel-agents.js.map +1 -0
  81. package/dist/esm/examples/05-code-review-swarm.js +1177 -0
  82. package/dist/esm/examples/05-code-review-swarm.js.map +1 -0
  83. package/dist/esm/examples/06-ai-pipeline-demo.js +263 -0
  84. package/dist/esm/examples/06-ai-pipeline-demo.js.map +1 -0
  85. package/dist/esm/examples/07-full-showcase.js +946 -0
  86. package/dist/esm/examples/07-full-showcase.js.map +1 -0
  87. package/dist/esm/examples/08-control-plane-stress-demo.js +186 -0
  88. package/dist/esm/examples/08-control-plane-stress-demo.js.map +1 -0
  89. package/dist/esm/examples/09-real-langchain.js +231 -0
  90. package/dist/esm/examples/09-real-langchain.js.map +1 -0
  91. package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js +270 -0
  92. package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js.map +1 -0
  93. package/dist/esm/examples/demo-runner.js +119 -0
  94. package/dist/esm/examples/demo-runner.js.map +1 -0
  95. package/dist/esm/index.js +1352 -0
  96. package/dist/esm/index.js.map +1 -0
  97. package/dist/esm/lib/adapter-hooks.js +216 -0
  98. package/dist/esm/lib/adapter-hooks.js.map +1 -0
  99. package/dist/esm/lib/adapter-test-harness.js +118 -0
  100. package/dist/esm/lib/adapter-test-harness.js.map +1 -0
  101. package/dist/esm/lib/agent-conversation.js +155 -0
  102. package/dist/esm/lib/agent-conversation.js.map +1 -0
  103. package/dist/esm/lib/agent-debate.js +146 -0
  104. package/dist/esm/lib/agent-debate.js.map +1 -0
  105. package/dist/esm/lib/agent-memory.js +336 -0
  106. package/dist/esm/lib/agent-memory.js.map +1 -0
  107. package/dist/esm/lib/agent-runtime.js +818 -0
  108. package/dist/esm/lib/agent-runtime.js.map +1 -0
  109. package/dist/esm/lib/agent-vcr.js +218 -0
  110. package/dist/esm/lib/agent-vcr.js.map +1 -0
  111. package/dist/esm/lib/anomaly-detector.js +178 -0
  112. package/dist/esm/lib/anomaly-detector.js.map +1 -0
  113. package/dist/esm/lib/approval-inbox.js +385 -0
  114. package/dist/esm/lib/approval-inbox.js.map +1 -0
  115. package/dist/esm/lib/auth-guardian.js +692 -0
  116. package/dist/esm/lib/auth-guardian.js.map +1 -0
  117. package/dist/esm/lib/auth-validator.js +32 -0
  118. package/dist/esm/lib/auth-validator.js.map +1 -0
  119. package/dist/esm/lib/blackboard-backend-crdt.js +251 -0
  120. package/dist/esm/lib/blackboard-backend-crdt.js.map +1 -0
  121. package/dist/esm/lib/blackboard-backend-redis.js +244 -0
  122. package/dist/esm/lib/blackboard-backend-redis.js.map +1 -0
  123. package/dist/esm/lib/blackboard-backend.js +141 -0
  124. package/dist/esm/lib/blackboard-backend.js.map +1 -0
  125. package/dist/esm/lib/blackboard-validator.js +985 -0
  126. package/dist/esm/lib/blackboard-validator.js.map +1 -0
  127. package/dist/esm/lib/circuit-breaker.js +164 -0
  128. package/dist/esm/lib/circuit-breaker.js.map +1 -0
  129. package/dist/esm/lib/claim-verifier.js +173 -0
  130. package/dist/esm/lib/claim-verifier.js.map +1 -0
  131. package/dist/esm/lib/comparison-runner.js +138 -0
  132. package/dist/esm/lib/comparison-runner.js.map +1 -0
  133. package/dist/esm/lib/compliance-monitor.js +261 -0
  134. package/dist/esm/lib/compliance-monitor.js.map +1 -0
  135. package/dist/esm/lib/confidence-filter.js +210 -0
  136. package/dist/esm/lib/confidence-filter.js.map +1 -0
  137. package/dist/esm/lib/config-watcher.js +215 -0
  138. package/dist/esm/lib/config-watcher.js.map +1 -0
  139. package/dist/esm/lib/consistency.js +274 -0
  140. package/dist/esm/lib/consistency.js.map +1 -0
  141. package/dist/esm/lib/console-ui.js +276 -0
  142. package/dist/esm/lib/console-ui.js.map +1 -0
  143. package/dist/esm/lib/context-throttler.js +171 -0
  144. package/dist/esm/lib/context-throttler.js.map +1 -0
  145. package/dist/esm/lib/control-plane.js +527 -0
  146. package/dist/esm/lib/control-plane.js.map +1 -0
  147. package/dist/esm/lib/cost-governor.js +128 -0
  148. package/dist/esm/lib/cost-governor.js.map +1 -0
  149. package/dist/esm/lib/cost-heatmap.js +161 -0
  150. package/dist/esm/lib/cost-heatmap.js.map +1 -0
  151. package/dist/esm/lib/coverage-gate.js +213 -0
  152. package/dist/esm/lib/coverage-gate.js.map +1 -0
  153. package/dist/esm/lib/coverage-reporter.js +177 -0
  154. package/dist/esm/lib/coverage-reporter.js.map +1 -0
  155. package/dist/esm/lib/crdt.js +141 -0
  156. package/dist/esm/lib/crdt.js.map +1 -0
  157. package/dist/esm/lib/dashboard-server.js +403 -0
  158. package/dist/esm/lib/dashboard-server.js.map +1 -0
  159. package/dist/esm/lib/dry-run.js +130 -0
  160. package/dist/esm/lib/dry-run.js.map +1 -0
  161. package/dist/esm/lib/env-manager.js +518 -0
  162. package/dist/esm/lib/env-manager.js.map +1 -0
  163. package/dist/esm/lib/errors.js +201 -0
  164. package/dist/esm/lib/errors.js.map +1 -0
  165. package/dist/esm/lib/event-bus.js +229 -0
  166. package/dist/esm/lib/event-bus.js.map +1 -0
  167. package/dist/esm/lib/explainability.js +102 -0
  168. package/dist/esm/lib/explainability.js.map +1 -0
  169. package/dist/esm/lib/fan-out.js +237 -0
  170. package/dist/esm/lib/fan-out.js.map +1 -0
  171. package/dist/esm/lib/federated-budget.js +322 -0
  172. package/dist/esm/lib/federated-budget.js.map +1 -0
  173. package/dist/esm/lib/fsm-journey.js +478 -0
  174. package/dist/esm/lib/fsm-journey.js.map +1 -0
  175. package/dist/esm/lib/goal-decomposer.js +698 -0
  176. package/dist/esm/lib/goal-decomposer.js.map +1 -0
  177. package/dist/esm/lib/goal-dsl.js +391 -0
  178. package/dist/esm/lib/goal-dsl.js.map +1 -0
  179. package/dist/esm/lib/job-queue.js +310 -0
  180. package/dist/esm/lib/job-queue.js.map +1 -0
  181. package/dist/esm/lib/landscape-agent.js +134 -0
  182. package/dist/esm/lib/landscape-agent.js.map +1 -0
  183. package/dist/esm/lib/learning-loop.js +181 -0
  184. package/dist/esm/lib/learning-loop.js.map +1 -0
  185. package/dist/esm/lib/lifecycle-hooks.js +148 -0
  186. package/dist/esm/lib/lifecycle-hooks.js.map +1 -0
  187. package/dist/esm/lib/locked-blackboard.js +1295 -0
  188. package/dist/esm/lib/locked-blackboard.js.map +1 -0
  189. package/dist/esm/lib/logger.js +150 -0
  190. package/dist/esm/lib/logger.js.map +1 -0
  191. package/dist/esm/lib/mcp-blackboard-tools.js +298 -0
  192. package/dist/esm/lib/mcp-blackboard-tools.js.map +1 -0
  193. package/dist/esm/lib/mcp-bridge.js +357 -0
  194. package/dist/esm/lib/mcp-bridge.js.map +1 -0
  195. package/dist/esm/lib/mcp-tool-consumer.js +287 -0
  196. package/dist/esm/lib/mcp-tool-consumer.js.map +1 -0
  197. package/dist/esm/lib/mcp-tools-control.js +392 -0
  198. package/dist/esm/lib/mcp-tools-control.js.map +1 -0
  199. package/dist/esm/lib/mcp-tools-extended.js +371 -0
  200. package/dist/esm/lib/mcp-tools-extended.js.map +1 -0
  201. package/dist/esm/lib/mcp-transport-http.js +528 -0
  202. package/dist/esm/lib/mcp-transport-http.js.map +1 -0
  203. package/dist/esm/lib/mcp-transport-sse.js +503 -0
  204. package/dist/esm/lib/mcp-transport-sse.js.map +1 -0
  205. package/dist/esm/lib/metrics.js +284 -0
  206. package/dist/esm/lib/metrics.js.map +1 -0
  207. package/dist/esm/lib/orchestrator-types.js +66 -0
  208. package/dist/esm/lib/orchestrator-types.js.map +1 -0
  209. package/dist/esm/lib/otel-bridge.js +167 -0
  210. package/dist/esm/lib/otel-bridge.js.map +1 -0
  211. package/dist/esm/lib/partition-planner.js +246 -0
  212. package/dist/esm/lib/partition-planner.js.map +1 -0
  213. package/dist/esm/lib/phase-pipeline.js +367 -0
  214. package/dist/esm/lib/phase-pipeline.js.map +1 -0
  215. package/dist/esm/lib/playground.js +224 -0
  216. package/dist/esm/lib/playground.js.map +1 -0
  217. package/dist/esm/lib/qa-orchestrator.js +296 -0
  218. package/dist/esm/lib/qa-orchestrator.js.map +1 -0
  219. package/dist/esm/lib/quadtree.js +259 -0
  220. package/dist/esm/lib/quadtree.js.map +1 -0
  221. package/dist/esm/lib/route-classifier.js +217 -0
  222. package/dist/esm/lib/route-classifier.js.map +1 -0
  223. package/dist/esm/lib/semantic-search.js +235 -0
  224. package/dist/esm/lib/semantic-search.js.map +1 -0
  225. package/dist/esm/lib/shared-blackboard.js +249 -0
  226. package/dist/esm/lib/shared-blackboard.js.map +1 -0
  227. package/dist/esm/lib/skill-composer.js +190 -0
  228. package/dist/esm/lib/skill-composer.js.map +1 -0
  229. package/dist/esm/lib/speculative-executor.js +107 -0
  230. package/dist/esm/lib/speculative-executor.js.map +1 -0
  231. package/dist/esm/lib/strategy-agent.js +626 -0
  232. package/dist/esm/lib/strategy-agent.js.map +1 -0
  233. package/dist/esm/lib/swarm-transport.js +307 -0
  234. package/dist/esm/lib/swarm-transport.js.map +1 -0
  235. package/dist/esm/lib/swarm-utils.js +510 -0
  236. package/dist/esm/lib/swarm-utils.js.map +1 -0
  237. package/dist/esm/lib/task-decomposer.js +272 -0
  238. package/dist/esm/lib/task-decomposer.js.map +1 -0
  239. package/dist/esm/lib/telemetry-provider.js +207 -0
  240. package/dist/esm/lib/telemetry-provider.js.map +1 -0
  241. package/dist/esm/lib/timeline-scrubber.js +173 -0
  242. package/dist/esm/lib/timeline-scrubber.js.map +1 -0
  243. package/dist/esm/lib/topology.js +591 -0
  244. package/dist/esm/lib/topology.js.map +1 -0
  245. package/dist/esm/lib/transport-agent.js +366 -0
  246. package/dist/esm/lib/transport-agent.js.map +1 -0
  247. package/dist/esm/lib/work-tree-dashboard.js +583 -0
  248. package/dist/esm/lib/work-tree-dashboard.js.map +1 -0
  249. package/dist/esm/lib/work-tree-ui.js +333 -0
  250. package/dist/esm/lib/work-tree-ui.js.map +1 -0
  251. package/dist/esm/lib/work-tree.js +480 -0
  252. package/dist/esm/lib/work-tree.js.map +1 -0
  253. package/dist/esm/run.js +144 -0
  254. package/dist/esm/run.js.map +1 -0
  255. package/dist/esm/security.js +1122 -0
  256. package/dist/esm/security.js.map +1 -0
  257. package/dist/index.d.ts +2 -0
  258. package/dist/index.d.ts.map +1 -1
  259. package/dist/index.js +6 -1
  260. package/dist/index.js.map +1 -1
  261. package/dist/lib/mcp-transport-http.d.ts +203 -0
  262. package/dist/lib/mcp-transport-http.d.ts.map +1 -0
  263. package/dist/lib/mcp-transport-http.js +528 -0
  264. package/dist/lib/mcp-transport-http.js.map +1 -0
  265. package/dist/lib/phase-pipeline.d.ts +31 -0
  266. package/dist/lib/phase-pipeline.d.ts.map +1 -1
  267. package/dist/lib/phase-pipeline.js +93 -1
  268. package/dist/lib/phase-pipeline.js.map +1 -1
  269. package/dist/lib/semantic-search.d.ts +42 -6
  270. package/dist/lib/semantic-search.d.ts.map +1 -1
  271. package/dist/lib/semantic-search.js +87 -6
  272. package/dist/lib/semantic-search.js.map +1 -1
  273. 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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"}