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.
Files changed (282) hide show
  1. package/INTEGRATION_GUIDE.md +12 -5
  2. package/QUICKSTART.md +32 -5
  3. package/README.md +42 -17
  4. package/bin/dashboard.ts +146 -0
  5. package/bin/mcp-server.ts +3 -2
  6. package/dist/adapters/adapter-registry.d.ts +33 -1
  7. package/dist/adapters/adapter-registry.d.ts.map +1 -1
  8. package/dist/adapters/adapter-registry.js +49 -0
  9. package/dist/adapters/adapter-registry.js.map +1 -1
  10. package/dist/adapters/anthropic-computer-use-adapter.d.ts +132 -0
  11. package/dist/adapters/anthropic-computer-use-adapter.d.ts.map +1 -0
  12. package/dist/adapters/anthropic-computer-use-adapter.js +180 -0
  13. package/dist/adapters/anthropic-computer-use-adapter.js.map +1 -0
  14. package/dist/adapters/browser-agent-adapter.d.ts +121 -0
  15. package/dist/adapters/browser-agent-adapter.d.ts.map +1 -0
  16. package/dist/adapters/browser-agent-adapter.js +219 -0
  17. package/dist/adapters/browser-agent-adapter.js.map +1 -0
  18. package/dist/adapters/copilot-adapter.d.ts +59 -0
  19. package/dist/adapters/copilot-adapter.d.ts.map +1 -0
  20. package/dist/adapters/copilot-adapter.js +132 -0
  21. package/dist/adapters/copilot-adapter.js.map +1 -0
  22. package/dist/adapters/custom-adapter.d.ts +1 -1
  23. package/dist/adapters/custom-adapter.js +1 -1
  24. package/dist/adapters/index.d.ts +17 -1
  25. package/dist/adapters/index.d.ts.map +1 -1
  26. package/dist/adapters/index.js +25 -1
  27. package/dist/adapters/index.js.map +1 -1
  28. package/dist/adapters/langchain-adapter.js +1 -1
  29. package/dist/adapters/langchain-adapter.js.map +1 -1
  30. package/dist/adapters/langgraph-adapter.d.ts +70 -0
  31. package/dist/adapters/langgraph-adapter.d.ts.map +1 -0
  32. package/dist/adapters/langgraph-adapter.js +119 -0
  33. package/dist/adapters/langgraph-adapter.js.map +1 -0
  34. package/dist/adapters/mcp-adapter.d.ts +1 -1
  35. package/dist/adapters/mcp-adapter.js +3 -3
  36. package/dist/adapters/mcp-adapter.js.map +1 -1
  37. package/dist/adapters/openai-agents-adapter.d.ts +100 -0
  38. package/dist/adapters/openai-agents-adapter.d.ts.map +1 -0
  39. package/dist/adapters/openai-agents-adapter.js +118 -0
  40. package/dist/adapters/openai-agents-adapter.js.map +1 -0
  41. package/dist/adapters/openclaw-adapter.d.ts +1 -1
  42. package/dist/adapters/openclaw-adapter.js +3 -3
  43. package/dist/adapters/openclaw-adapter.js.map +1 -1
  44. package/dist/adapters/orchestrator-adapter.d.ts +118 -0
  45. package/dist/adapters/orchestrator-adapter.d.ts.map +1 -0
  46. package/dist/adapters/orchestrator-adapter.js +219 -0
  47. package/dist/adapters/orchestrator-adapter.js.map +1 -0
  48. package/dist/adapters/pydantic-ai-adapter.d.ts +104 -0
  49. package/dist/adapters/pydantic-ai-adapter.d.ts.map +1 -0
  50. package/dist/adapters/pydantic-ai-adapter.js +163 -0
  51. package/dist/adapters/pydantic-ai-adapter.js.map +1 -0
  52. package/dist/adapters/vertex-ai-adapter.d.ts +122 -0
  53. package/dist/adapters/vertex-ai-adapter.d.ts.map +1 -0
  54. package/dist/adapters/vertex-ai-adapter.js +166 -0
  55. package/dist/adapters/vertex-ai-adapter.js.map +1 -0
  56. package/dist/bin/dashboard.d.ts +11 -0
  57. package/dist/bin/dashboard.d.ts.map +1 -0
  58. package/dist/bin/dashboard.js +135 -0
  59. package/dist/bin/dashboard.js.map +1 -0
  60. package/dist/bin/mcp-server.js +3 -2
  61. package/dist/bin/mcp-server.js.map +1 -1
  62. package/dist/demo-control-plane.d.ts +12 -0
  63. package/dist/demo-control-plane.d.ts.map +1 -0
  64. package/dist/demo-control-plane.js +147 -0
  65. package/dist/demo-control-plane.js.map +1 -0
  66. package/dist/demo-worktree-dashboard.d.ts +2 -0
  67. package/dist/demo-worktree-dashboard.d.ts.map +1 -0
  68. package/dist/demo-worktree-dashboard.js +131 -0
  69. package/dist/demo-worktree-dashboard.js.map +1 -0
  70. package/dist/examples/01-hello-swarm.d.ts +13 -0
  71. package/dist/examples/01-hello-swarm.d.ts.map +1 -0
  72. package/dist/examples/01-hello-swarm.js +165 -0
  73. package/dist/examples/01-hello-swarm.js.map +1 -0
  74. package/dist/examples/02-fsm-pipeline.d.ts +20 -0
  75. package/dist/examples/02-fsm-pipeline.d.ts.map +1 -0
  76. package/dist/examples/02-fsm-pipeline.js +189 -0
  77. package/dist/examples/02-fsm-pipeline.js.map +1 -0
  78. package/dist/examples/03-parallel-agents.d.ts +21 -0
  79. package/dist/examples/03-parallel-agents.d.ts.map +1 -0
  80. package/dist/examples/03-parallel-agents.js +192 -0
  81. package/dist/examples/03-parallel-agents.js.map +1 -0
  82. package/dist/examples/05-code-review-swarm.d.ts +21 -0
  83. package/dist/examples/05-code-review-swarm.d.ts.map +1 -0
  84. package/dist/examples/05-code-review-swarm.js +1177 -0
  85. package/dist/examples/05-code-review-swarm.js.map +1 -0
  86. package/dist/examples/06-ai-pipeline-demo.d.ts +24 -0
  87. package/dist/examples/06-ai-pipeline-demo.d.ts.map +1 -0
  88. package/dist/examples/06-ai-pipeline-demo.js +263 -0
  89. package/dist/examples/06-ai-pipeline-demo.js.map +1 -0
  90. package/dist/examples/07-full-showcase.d.ts +27 -0
  91. package/dist/examples/07-full-showcase.d.ts.map +1 -0
  92. package/dist/examples/07-full-showcase.js +946 -0
  93. package/dist/examples/07-full-showcase.js.map +1 -0
  94. package/dist/examples/08-control-plane-stress-demo.d.ts +19 -0
  95. package/dist/examples/08-control-plane-stress-demo.d.ts.map +1 -0
  96. package/dist/examples/08-control-plane-stress-demo.js +186 -0
  97. package/dist/examples/08-control-plane-stress-demo.js.map +1 -0
  98. package/dist/examples/09-real-langchain.d.ts +19 -0
  99. package/dist/examples/09-real-langchain.d.ts.map +1 -0
  100. package/dist/examples/09-real-langchain.js +231 -0
  101. package/dist/examples/09-real-langchain.js.map +1 -0
  102. package/dist/examples/10-nemoclaw-sandbox-swarm.d.ts +16 -0
  103. package/dist/examples/10-nemoclaw-sandbox-swarm.d.ts.map +1 -0
  104. package/dist/examples/10-nemoclaw-sandbox-swarm.js +270 -0
  105. package/dist/examples/10-nemoclaw-sandbox-swarm.js.map +1 -0
  106. package/dist/examples/demo-runner.d.ts +2 -0
  107. package/dist/examples/demo-runner.d.ts.map +1 -0
  108. package/dist/examples/demo-runner.js +119 -0
  109. package/dist/examples/demo-runner.js.map +1 -0
  110. package/dist/index.d.ts +113 -559
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +310 -1074
  113. package/dist/index.js.map +1 -1
  114. package/dist/lib/adapter-test-harness.d.ts +88 -0
  115. package/dist/lib/adapter-test-harness.d.ts.map +1 -0
  116. package/dist/lib/adapter-test-harness.js +118 -0
  117. package/dist/lib/adapter-test-harness.js.map +1 -0
  118. package/dist/lib/agent-conversation.d.ts +115 -0
  119. package/dist/lib/agent-conversation.d.ts.map +1 -0
  120. package/dist/lib/agent-conversation.js +155 -0
  121. package/dist/lib/agent-conversation.js.map +1 -0
  122. package/dist/lib/agent-debate.d.ts +115 -0
  123. package/dist/lib/agent-debate.d.ts.map +1 -0
  124. package/dist/lib/agent-debate.js +146 -0
  125. package/dist/lib/agent-debate.js.map +1 -0
  126. package/dist/lib/agent-memory.d.ts +157 -0
  127. package/dist/lib/agent-memory.d.ts.map +1 -0
  128. package/dist/lib/agent-memory.js +336 -0
  129. package/dist/lib/agent-memory.js.map +1 -0
  130. package/dist/lib/agent-vcr.d.ts +133 -0
  131. package/dist/lib/agent-vcr.d.ts.map +1 -0
  132. package/dist/lib/agent-vcr.js +218 -0
  133. package/dist/lib/agent-vcr.js.map +1 -0
  134. package/dist/lib/anomaly-detector.d.ts +112 -0
  135. package/dist/lib/anomaly-detector.d.ts.map +1 -0
  136. package/dist/lib/anomaly-detector.js +178 -0
  137. package/dist/lib/anomaly-detector.js.map +1 -0
  138. package/dist/lib/approval-inbox.d.ts +147 -0
  139. package/dist/lib/approval-inbox.d.ts.map +1 -0
  140. package/dist/lib/approval-inbox.js +385 -0
  141. package/dist/lib/approval-inbox.js.map +1 -0
  142. package/dist/lib/auth-guardian.d.ts +170 -0
  143. package/dist/lib/auth-guardian.d.ts.map +1 -0
  144. package/dist/lib/auth-guardian.js +604 -0
  145. package/dist/lib/auth-guardian.js.map +1 -0
  146. package/dist/lib/auth-validator.d.ts +70 -0
  147. package/dist/lib/auth-validator.d.ts.map +1 -0
  148. package/dist/lib/auth-validator.js +32 -0
  149. package/dist/lib/auth-validator.js.map +1 -0
  150. package/dist/lib/blackboard-validator.d.ts +56 -0
  151. package/dist/lib/blackboard-validator.d.ts.map +1 -1
  152. package/dist/lib/blackboard-validator.js +181 -4
  153. package/dist/lib/blackboard-validator.js.map +1 -1
  154. package/dist/lib/comparison-runner.d.ts +99 -0
  155. package/dist/lib/comparison-runner.d.ts.map +1 -0
  156. package/dist/lib/comparison-runner.js +138 -0
  157. package/dist/lib/comparison-runner.js.map +1 -0
  158. package/dist/lib/config-watcher.d.ts +109 -0
  159. package/dist/lib/config-watcher.d.ts.map +1 -0
  160. package/dist/lib/config-watcher.js +215 -0
  161. package/dist/lib/config-watcher.js.map +1 -0
  162. package/dist/lib/control-plane.d.ts +128 -0
  163. package/dist/lib/control-plane.d.ts.map +1 -0
  164. package/dist/lib/control-plane.js +527 -0
  165. package/dist/lib/control-plane.js.map +1 -0
  166. package/dist/lib/cost-governor.d.ts +105 -0
  167. package/dist/lib/cost-governor.d.ts.map +1 -0
  168. package/dist/lib/cost-governor.js +128 -0
  169. package/dist/lib/cost-governor.js.map +1 -0
  170. package/dist/lib/cost-heatmap.d.ts +104 -0
  171. package/dist/lib/cost-heatmap.d.ts.map +1 -0
  172. package/dist/lib/cost-heatmap.js +161 -0
  173. package/dist/lib/cost-heatmap.js.map +1 -0
  174. package/dist/lib/coverage-reporter.d.ts +92 -0
  175. package/dist/lib/coverage-reporter.d.ts.map +1 -0
  176. package/dist/lib/coverage-reporter.js +177 -0
  177. package/dist/lib/coverage-reporter.js.map +1 -0
  178. package/dist/lib/dashboard-server.d.ts +71 -0
  179. package/dist/lib/dashboard-server.d.ts.map +1 -0
  180. package/dist/lib/dashboard-server.js +403 -0
  181. package/dist/lib/dashboard-server.js.map +1 -0
  182. package/dist/lib/dry-run.d.ts +73 -0
  183. package/dist/lib/dry-run.d.ts.map +1 -0
  184. package/dist/lib/dry-run.js +130 -0
  185. package/dist/lib/dry-run.js.map +1 -0
  186. package/dist/lib/errors.d.ts +15 -0
  187. package/dist/lib/errors.d.ts.map +1 -1
  188. package/dist/lib/errors.js +38 -0
  189. package/dist/lib/errors.js.map +1 -1
  190. package/dist/lib/event-bus.d.ts +167 -0
  191. package/dist/lib/event-bus.d.ts.map +1 -0
  192. package/dist/lib/event-bus.js +229 -0
  193. package/dist/lib/event-bus.js.map +1 -0
  194. package/dist/lib/explainability.d.ts +85 -0
  195. package/dist/lib/explainability.d.ts.map +1 -0
  196. package/dist/lib/explainability.js +102 -0
  197. package/dist/lib/explainability.js.map +1 -0
  198. package/dist/lib/goal-dsl.d.ts +157 -0
  199. package/dist/lib/goal-dsl.d.ts.map +1 -0
  200. package/dist/lib/goal-dsl.js +391 -0
  201. package/dist/lib/goal-dsl.js.map +1 -0
  202. package/dist/lib/job-queue.d.ts +183 -0
  203. package/dist/lib/job-queue.d.ts.map +1 -0
  204. package/dist/lib/job-queue.js +310 -0
  205. package/dist/lib/job-queue.js.map +1 -0
  206. package/dist/lib/learning-loop.d.ts +113 -0
  207. package/dist/lib/learning-loop.d.ts.map +1 -0
  208. package/dist/lib/learning-loop.js +181 -0
  209. package/dist/lib/learning-loop.js.map +1 -0
  210. package/dist/lib/lifecycle-hooks.d.ts +116 -0
  211. package/dist/lib/lifecycle-hooks.d.ts.map +1 -0
  212. package/dist/lib/lifecycle-hooks.js +148 -0
  213. package/dist/lib/lifecycle-hooks.js.map +1 -0
  214. package/dist/lib/locked-blackboard.d.ts.map +1 -1
  215. package/dist/lib/locked-blackboard.js +9 -5
  216. package/dist/lib/locked-blackboard.js.map +1 -1
  217. package/dist/lib/mcp-tool-consumer.d.ts +153 -0
  218. package/dist/lib/mcp-tool-consumer.d.ts.map +1 -0
  219. package/dist/lib/mcp-tool-consumer.js +320 -0
  220. package/dist/lib/mcp-tool-consumer.js.map +1 -0
  221. package/dist/lib/metrics.d.ts +119 -0
  222. package/dist/lib/metrics.d.ts.map +1 -0
  223. package/dist/lib/metrics.js +284 -0
  224. package/dist/lib/metrics.js.map +1 -0
  225. package/dist/lib/orchestrator-types.d.ts +309 -0
  226. package/dist/lib/orchestrator-types.d.ts.map +1 -0
  227. package/dist/lib/orchestrator-types.js +61 -0
  228. package/dist/lib/orchestrator-types.js.map +1 -0
  229. package/dist/lib/otel-bridge.d.ts +74 -0
  230. package/dist/lib/otel-bridge.d.ts.map +1 -0
  231. package/dist/lib/otel-bridge.js +167 -0
  232. package/dist/lib/otel-bridge.js.map +1 -0
  233. package/dist/lib/playground.d.ts +76 -0
  234. package/dist/lib/playground.d.ts.map +1 -0
  235. package/dist/lib/playground.js +224 -0
  236. package/dist/lib/playground.js.map +1 -0
  237. package/dist/lib/quadtree.d.ts +114 -0
  238. package/dist/lib/quadtree.d.ts.map +1 -0
  239. package/dist/lib/quadtree.js +259 -0
  240. package/dist/lib/quadtree.js.map +1 -0
  241. package/dist/lib/shared-blackboard.d.ts +101 -0
  242. package/dist/lib/shared-blackboard.d.ts.map +1 -0
  243. package/dist/lib/shared-blackboard.js +249 -0
  244. package/dist/lib/shared-blackboard.js.map +1 -0
  245. package/dist/lib/speculative-executor.d.ts +89 -0
  246. package/dist/lib/speculative-executor.d.ts.map +1 -0
  247. package/dist/lib/speculative-executor.js +107 -0
  248. package/dist/lib/speculative-executor.js.map +1 -0
  249. package/dist/lib/swarm-transport.d.ts +150 -0
  250. package/dist/lib/swarm-transport.d.ts.map +1 -0
  251. package/dist/lib/swarm-transport.js +307 -0
  252. package/dist/lib/swarm-transport.js.map +1 -0
  253. package/dist/lib/task-decomposer.d.ts +41 -0
  254. package/dist/lib/task-decomposer.d.ts.map +1 -0
  255. package/dist/lib/task-decomposer.js +272 -0
  256. package/dist/lib/task-decomposer.js.map +1 -0
  257. package/dist/lib/timeline-scrubber.d.ts +84 -0
  258. package/dist/lib/timeline-scrubber.d.ts.map +1 -0
  259. package/dist/lib/timeline-scrubber.js +173 -0
  260. package/dist/lib/timeline-scrubber.js.map +1 -0
  261. package/dist/lib/topology.d.ts +361 -0
  262. package/dist/lib/topology.d.ts.map +1 -0
  263. package/dist/lib/topology.js +591 -0
  264. package/dist/lib/topology.js.map +1 -0
  265. package/dist/lib/work-tree-dashboard.d.ts +130 -0
  266. package/dist/lib/work-tree-dashboard.d.ts.map +1 -0
  267. package/dist/lib/work-tree-dashboard.js +583 -0
  268. package/dist/lib/work-tree-dashboard.js.map +1 -0
  269. package/dist/lib/work-tree-ui.d.ts +107 -0
  270. package/dist/lib/work-tree-ui.d.ts.map +1 -0
  271. package/dist/lib/work-tree-ui.js +333 -0
  272. package/dist/lib/work-tree-ui.js.map +1 -0
  273. package/dist/lib/work-tree.d.ts +184 -0
  274. package/dist/lib/work-tree.d.ts.map +1 -0
  275. package/dist/lib/work-tree.js +480 -0
  276. package/dist/lib/work-tree.js.map +1 -0
  277. package/dist/security.d.ts +95 -0
  278. package/dist/security.d.ts.map +1 -1
  279. package/dist/security.js +267 -4
  280. package/dist/security.js.map +1 -1
  281. package/package.json +8 -6
  282. package/types/agent-adapter.d.ts +5 -0
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ /**
3
+ * Distributed Swarm Transport — HTTP/JSON-RPC transport layer
4
+ *
5
+ * Enables multi-node swarm orchestration over the network.
6
+ * Provides:
7
+ * - SwarmTransportServer — HTTP server that exposes SwarmOrchestrator methods
8
+ * - SwarmTransportClient — HTTP client that proxies calls to a remote server
9
+ * - Message envelope with auth, correlation IDs, and TTL
10
+ *
11
+ * Uses Node built-in `http` module — no external dependencies.
12
+ * Communication format: JSON-RPC 2.0 over HTTP POST.
13
+ *
14
+ * Usage (server):
15
+ * const server = new SwarmTransportServer(orchestrator, { port: 4000 });
16
+ * await server.start();
17
+ *
18
+ * Usage (client):
19
+ * const client = new SwarmTransportClient('http://node-2:4000');
20
+ * const result = await client.delegateTask(agentId, payload);
21
+ *
22
+ * @module SwarmTransport
23
+ * @version 1.0.0
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.SwarmTransportClient = exports.SwarmTransportServer = void 0;
27
+ const http_1 = require("http");
28
+ const events_1 = require("events");
29
+ const crypto_1 = require("crypto");
30
+ // ============================================================================
31
+ // SERVER
32
+ // ============================================================================
33
+ /**
34
+ * HTTP transport server for distributed swarm orchestration.
35
+ *
36
+ * Exposes registered methods over HTTP POST with JSON-RPC 2.0 protocol.
37
+ * Supports HMAC authentication, node allowlisting, TTL enforcement,
38
+ * and request size limits.
39
+ */
40
+ class SwarmTransportServer extends events_1.EventEmitter {
41
+ server = null;
42
+ handlers = new Map();
43
+ config;
44
+ constructor(config = {}) {
45
+ super();
46
+ this.config = {
47
+ port: config.port ?? 4000,
48
+ hostname: config.hostname ?? '127.0.0.1',
49
+ sharedSecret: config.sharedSecret ?? '',
50
+ maxBodyBytes: config.maxBodyBytes ?? 1_048_576,
51
+ allowedNodes: config.allowedNodes ?? [],
52
+ nodeId: config.nodeId ?? `node-${(0, crypto_1.randomBytes)(4).toString('hex')}`,
53
+ };
54
+ }
55
+ /** Register a method handler */
56
+ register(method, handler) {
57
+ this.handlers.set(method, handler);
58
+ }
59
+ /** Register multiple handlers at once */
60
+ registerAll(handlers) {
61
+ for (const [method, handler] of Object.entries(handlers)) {
62
+ this.handlers.set(method, handler);
63
+ }
64
+ }
65
+ /** Start the transport server */
66
+ async start() {
67
+ if (this.server)
68
+ return;
69
+ this.server = (0, http_1.createServer)((req, res) => this.handleRequest(req, res));
70
+ await new Promise((resolve) => {
71
+ this.server.listen(this.config.port, this.config.hostname, () => {
72
+ this.emit('listening', { port: this.config.port, hostname: this.config.hostname });
73
+ resolve();
74
+ });
75
+ });
76
+ }
77
+ /** Stop the transport server */
78
+ async stop() {
79
+ if (!this.server)
80
+ return;
81
+ await new Promise((resolve, reject) => {
82
+ this.server.close((err) => (err ? reject(err) : resolve()));
83
+ });
84
+ this.server = null;
85
+ this.emit('stopped');
86
+ }
87
+ /** Get the node ID */
88
+ get nodeId() {
89
+ return this.config.nodeId;
90
+ }
91
+ /** Whether the server is running */
92
+ get isRunning() {
93
+ return this.server !== null && this.server.listening;
94
+ }
95
+ // -----------------------------------------------------------------------
96
+ // Internal
97
+ // -----------------------------------------------------------------------
98
+ async handleRequest(req, res) {
99
+ res.setHeader('Content-Type', 'application/json');
100
+ // Only POST allowed
101
+ if (req.method !== 'POST') {
102
+ this.sendResponse(res, {
103
+ jsonrpc: '2.0', id: '', error: { code: -32600, message: 'Only POST allowed' },
104
+ });
105
+ return;
106
+ }
107
+ // Health endpoint
108
+ if (req.url === '/health') {
109
+ this.sendResponse(res, {
110
+ jsonrpc: '2.0', id: 'health',
111
+ result: { nodeId: this.config.nodeId, methods: Array.from(this.handlers.keys()), uptime: process.uptime() },
112
+ });
113
+ return;
114
+ }
115
+ try {
116
+ const body = await this.readBody(req);
117
+ const envelope = JSON.parse(body);
118
+ // Validate envelope
119
+ if (envelope.jsonrpc !== '2.0' || !envelope.method || !envelope.id) {
120
+ this.sendResponse(res, {
121
+ jsonrpc: '2.0', id: envelope?.id ?? '',
122
+ error: { code: -32600, message: 'Invalid JSON-RPC 2.0 request' },
123
+ });
124
+ return;
125
+ }
126
+ // Check node allowlist
127
+ if (this.config.allowedNodes.length > 0 && envelope.meta?.sourceNode) {
128
+ if (!this.config.allowedNodes.includes(envelope.meta.sourceNode)) {
129
+ this.sendResponse(res, {
130
+ jsonrpc: '2.0', id: envelope.id,
131
+ error: { code: -32001, message: 'Source node not allowed' },
132
+ });
133
+ return;
134
+ }
135
+ }
136
+ // Verify HMAC
137
+ if (this.config.sharedSecret && envelope.meta?.signature) {
138
+ const expected = this.computeHmac(envelope.method, envelope.params, envelope.meta.timestamp);
139
+ if (envelope.meta.signature !== expected) {
140
+ this.sendResponse(res, {
141
+ jsonrpc: '2.0', id: envelope.id,
142
+ error: { code: -32002, message: 'Invalid signature' },
143
+ });
144
+ return;
145
+ }
146
+ }
147
+ else if (this.config.sharedSecret && !envelope.meta?.signature) {
148
+ this.sendResponse(res, {
149
+ jsonrpc: '2.0', id: envelope.id,
150
+ error: { code: -32003, message: 'Signature required' },
151
+ });
152
+ return;
153
+ }
154
+ // Check TTL
155
+ if (envelope.meta?.ttlMs && envelope.meta.ttlMs > 0) {
156
+ const age = Date.now() - envelope.meta.timestamp;
157
+ if (age > envelope.meta.ttlMs) {
158
+ this.sendResponse(res, {
159
+ jsonrpc: '2.0', id: envelope.id,
160
+ error: { code: -32004, message: 'Message expired' },
161
+ });
162
+ return;
163
+ }
164
+ }
165
+ // Find handler
166
+ const handler = this.handlers.get(envelope.method);
167
+ if (!handler) {
168
+ this.sendResponse(res, {
169
+ jsonrpc: '2.0', id: envelope.id,
170
+ error: { code: -32601, message: `Method not found: ${envelope.method}` },
171
+ });
172
+ return;
173
+ }
174
+ // Execute
175
+ this.emit('request', { method: envelope.method, id: envelope.id, source: envelope.meta?.sourceNode });
176
+ const result = await handler(envelope.params);
177
+ this.sendResponse(res, { jsonrpc: '2.0', id: envelope.id, result });
178
+ }
179
+ catch (err) {
180
+ this.sendResponse(res, {
181
+ jsonrpc: '2.0', id: '',
182
+ error: { code: -32700, message: err instanceof Error ? err.message : 'Parse error' },
183
+ });
184
+ }
185
+ }
186
+ readBody(req) {
187
+ return new Promise((resolve, reject) => {
188
+ const chunks = [];
189
+ let size = 0;
190
+ req.on('data', (chunk) => {
191
+ size += chunk.length;
192
+ if (size > this.config.maxBodyBytes) {
193
+ req.destroy();
194
+ reject(new Error('Request body too large'));
195
+ return;
196
+ }
197
+ chunks.push(chunk);
198
+ });
199
+ req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
200
+ req.on('error', reject);
201
+ });
202
+ }
203
+ sendResponse(res, response) {
204
+ const body = JSON.stringify(response);
205
+ res.writeHead(response.error ? 400 : 200, { 'Content-Length': Buffer.byteLength(body) });
206
+ res.end(body);
207
+ }
208
+ computeHmac(method, params, timestamp) {
209
+ const payload = `${method}:${JSON.stringify(params)}:${timestamp}`;
210
+ return (0, crypto_1.createHmac)('sha256', this.config.sharedSecret).update(payload).digest('hex');
211
+ }
212
+ }
213
+ exports.SwarmTransportServer = SwarmTransportServer;
214
+ // ============================================================================
215
+ // CLIENT
216
+ // ============================================================================
217
+ /**
218
+ * HTTP transport client for distributed swarm orchestration.
219
+ *
220
+ * Proxies method calls to a remote SwarmTransportServer over HTTP POST.
221
+ * Supports HMAC authentication, correlation IDs, and TTL.
222
+ */
223
+ class SwarmTransportClient extends events_1.EventEmitter {
224
+ config;
225
+ constructor(config) {
226
+ super();
227
+ this.config = {
228
+ url: config.url.replace(/\/$/, ''),
229
+ sharedSecret: config.sharedSecret ?? '',
230
+ nodeId: config.nodeId ?? `client-${(0, crypto_1.randomBytes)(4).toString('hex')}`,
231
+ timeoutMs: config.timeoutMs ?? 30_000,
232
+ ttlMs: config.ttlMs ?? 60_000,
233
+ };
234
+ }
235
+ /**
236
+ * Call a remote method.
237
+ * @returns The result from the remote handler.
238
+ * @throws If the remote returns an error or the request times out.
239
+ */
240
+ async call(method, params = {}) {
241
+ const id = (0, crypto_1.randomBytes)(8).toString('hex');
242
+ const correlationId = (0, crypto_1.randomBytes)(8).toString('hex');
243
+ const timestamp = Date.now();
244
+ const meta = {
245
+ correlationId,
246
+ sourceNode: this.config.nodeId,
247
+ timestamp,
248
+ ttlMs: this.config.ttlMs,
249
+ };
250
+ // Sign if shared secret is configured
251
+ if (this.config.sharedSecret) {
252
+ const payload = `${method}:${JSON.stringify(params)}:${timestamp}`;
253
+ meta.signature = (0, crypto_1.createHmac)('sha256', this.config.sharedSecret).update(payload).digest('hex');
254
+ }
255
+ const envelope = {
256
+ jsonrpc: '2.0',
257
+ id,
258
+ method,
259
+ params,
260
+ meta,
261
+ };
262
+ const body = JSON.stringify(envelope);
263
+ const controller = new AbortController();
264
+ const timer = setTimeout(() => controller.abort(), this.config.timeoutMs);
265
+ try {
266
+ const response = await fetch(this.config.url, {
267
+ method: 'POST',
268
+ headers: { 'Content-Type': 'application/json', 'Content-Length': String(Buffer.byteLength(body)) },
269
+ body,
270
+ signal: controller.signal,
271
+ });
272
+ const data = await response.json();
273
+ if (data.error) {
274
+ const err = new Error(data.error.message);
275
+ err['code'] = data.error.code;
276
+ throw err;
277
+ }
278
+ this.emit('response', { method, id, correlationId, durationMs: Date.now() - timestamp });
279
+ return data.result;
280
+ }
281
+ finally {
282
+ clearTimeout(timer);
283
+ }
284
+ }
285
+ /** Get the node ID */
286
+ get nodeId() {
287
+ return this.config.nodeId;
288
+ }
289
+ /** Convenience: delegate a task to a remote orchestrator */
290
+ async delegateTask(agentId, payload) {
291
+ return this.call('delegateTask', { agentId, payload });
292
+ }
293
+ /** Convenience: read from remote blackboard */
294
+ async blackboardRead(key) {
295
+ return this.call('blackboard_read', { key });
296
+ }
297
+ /** Convenience: write to remote blackboard */
298
+ async blackboardWrite(key, value, proposer) {
299
+ return this.call('blackboard_write', { key, value, proposer });
300
+ }
301
+ /** Convenience: query remote budget status */
302
+ async budgetStatus() {
303
+ return this.call('budget_status', {});
304
+ }
305
+ }
306
+ exports.SwarmTransportClient = SwarmTransportClient;
307
+ //# sourceMappingURL=swarm-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm-transport.js","sourceRoot":"","sources":["../../lib/swarm-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Task decomposition engine for parallel multi-agent execution.
3
+ *
4
+ * Breaks complex tasks into parallel sub-agent calls, routes them through
5
+ * the adapter registry, caches results on the blackboard, and synthesizes
6
+ * outputs using configurable strategies (merge, vote, chain, first-success).
7
+ *
8
+ * @module TaskDecomposer
9
+ */
10
+ import { AdapterRegistry } from '../adapters/adapter-registry';
11
+ import { SharedBlackboard } from './shared-blackboard';
12
+ import { AuthGuardian } from './auth-guardian';
13
+ import type { SkillContext, ParallelTask, ParallelExecutionResult, SynthesisStrategy } from './orchestrator-types';
14
+ export declare class TaskDecomposer {
15
+ private blackboard;
16
+ private authGuardian;
17
+ private adapterRegistry;
18
+ /** Maximum number of tasks to run concurrently (0 = unlimited). */
19
+ private maxConcurrency;
20
+ constructor(blackboard: SharedBlackboard, authGuardian: AuthGuardian, adapterRegistry: AdapterRegistry, options?: {
21
+ maxConcurrency?: number;
22
+ });
23
+ /**
24
+ * Decomposes a complex task into parallel sub-agent calls
25
+ * This is the "Wall Breaker" - transforms impossible monolithic tasks
26
+ * into manageable parallel executions
27
+ */
28
+ executeParallel(tasks: ParallelTask[], synthesisStrategy: SynthesisStrategy | undefined, context: SkillContext): Promise<ParallelExecutionResult>;
29
+ private executeSingleTask;
30
+ private synthesize;
31
+ private generateMergeSummary;
32
+ private hashPayload;
33
+ /**
34
+ * Execute async functions with a bounded concurrency pool.
35
+ * @param items Items to process
36
+ * @param fn Async function to apply to each item
37
+ * @param limit Max concurrent executions (0 = unlimited)
38
+ */
39
+ private runWithConcurrencyLimit;
40
+ }
41
+ //# sourceMappingURL=task-decomposer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-decomposer.d.ts","sourceRoot":"","sources":["../../lib/task-decomposer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,KAAK,EACV,YAAY,EAGZ,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAG9B,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAkB;IACzC,mEAAmE;IACnE,OAAO,CAAC,cAAc,CAAS;gBAG7B,UAAU,EAAE,gBAAgB,EAC5B,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE;IAiBvC;;;;OAIG;IACG,eAAe,CACnB,KAAK,EAAE,YAAY,EAAE,EACrB,iBAAiB,EAAE,iBAAiB,YAAU,EAC9C,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,uBAAuB,CAAC;YA2ErB,iBAAiB;IAiF/B,OAAO,CAAC,UAAU;IA8DlB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,WAAW;IAYnB;;;;;OAKG;YACW,uBAAuB;CA0BtC"}
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ /**
3
+ * Task decomposition engine for parallel multi-agent execution.
4
+ *
5
+ * Breaks complex tasks into parallel sub-agent calls, routes them through
6
+ * the adapter registry, caches results on the blackboard, and synthesizes
7
+ * outputs using configurable strategies (merge, vote, chain, first-success).
8
+ *
9
+ * @module TaskDecomposer
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.TaskDecomposer = void 0;
13
+ const crypto_1 = require("crypto");
14
+ const adapter_registry_1 = require("../adapters/adapter-registry");
15
+ const security_1 = require("../security");
16
+ const errors_1 = require("./errors");
17
+ const shared_blackboard_1 = require("./shared-blackboard");
18
+ const auth_guardian_1 = require("./auth-guardian");
19
+ const orchestrator_types_1 = require("./orchestrator-types");
20
+ class TaskDecomposer {
21
+ blackboard;
22
+ authGuardian;
23
+ adapterRegistry;
24
+ /** Maximum number of tasks to run concurrently (0 = unlimited). */
25
+ maxConcurrency;
26
+ constructor(blackboard, authGuardian, adapterRegistry, options) {
27
+ if (!blackboard || !(blackboard instanceof shared_blackboard_1.SharedBlackboard)) {
28
+ throw new errors_1.ValidationError('blackboard must be an instance of SharedBlackboard');
29
+ }
30
+ if (!authGuardian || !(authGuardian instanceof auth_guardian_1.AuthGuardian)) {
31
+ throw new errors_1.ValidationError('authGuardian must be an instance of AuthGuardian');
32
+ }
33
+ if (!adapterRegistry || !(adapterRegistry instanceof adapter_registry_1.AdapterRegistry)) {
34
+ throw new errors_1.ValidationError('adapterRegistry must be an instance of AdapterRegistry');
35
+ }
36
+ this.blackboard = blackboard;
37
+ this.authGuardian = authGuardian;
38
+ this.adapterRegistry = adapterRegistry;
39
+ this.maxConcurrency = options?.maxConcurrency ?? 5;
40
+ }
41
+ /**
42
+ * Decomposes a complex task into parallel sub-agent calls
43
+ * This is the "Wall Breaker" - transforms impossible monolithic tasks
44
+ * into manageable parallel executions
45
+ */
46
+ async executeParallel(tasks, synthesisStrategy = 'merge', context) {
47
+ if (!tasks || !Array.isArray(tasks)) {
48
+ throw new errors_1.ValidationError('tasks must be an array');
49
+ }
50
+ if (tasks.length === 0) {
51
+ throw new errors_1.ValidationError('tasks array must not be empty');
52
+ }
53
+ if (!context || typeof context !== 'object' || !context.agentId) {
54
+ throw new errors_1.ValidationError('context is required and must include agentId');
55
+ }
56
+ // No hard parallel limit — caller controls concurrency via task count
57
+ const startTime = Date.now();
58
+ const individualResults = [];
59
+ // Check blackboard for cached results first
60
+ const cachedTasks = [];
61
+ const uncachedTasks = [];
62
+ for (const task of tasks) {
63
+ const cacheKey = `task:${task.agentType}:${this.hashPayload(task.taskPayload)}`;
64
+ const cached = this.blackboard.read(cacheKey);
65
+ if (cached) {
66
+ individualResults.push({
67
+ agentType: task.agentType,
68
+ success: true,
69
+ result: cached.value,
70
+ executionTime: 0, // From cache
71
+ });
72
+ cachedTasks.push(task);
73
+ }
74
+ else {
75
+ uncachedTasks.push(task);
76
+ }
77
+ }
78
+ // Execute uncached tasks with concurrency cap
79
+ if (uncachedTasks.length > 0) {
80
+ const results = await this.runWithConcurrencyLimit(uncachedTasks, task => this.executeSingleTask(task, context), this.maxConcurrency);
81
+ for (let i = 0; i < results.length; i++) {
82
+ const task = uncachedTasks[i];
83
+ const result = results[i];
84
+ individualResults.push(result);
85
+ // Cache successful results
86
+ if (result.success) {
87
+ const cacheKey = `task:${task.agentType}:${this.hashPayload(task.taskPayload)}`;
88
+ this.blackboard.write(cacheKey, result.result, context.agentId, 3600, 'system-orchestrator-token'); // 1 hour TTL
89
+ }
90
+ }
91
+ }
92
+ // Synthesize results based on strategy
93
+ const synthesizedResult = this.synthesize(individualResults, synthesisStrategy);
94
+ const totalTime = Date.now() - startTime;
95
+ const successCount = individualResults.filter(r => r.success).length;
96
+ return {
97
+ synthesizedResult,
98
+ individualResults,
99
+ executionMetrics: {
100
+ totalTime,
101
+ successRate: successCount / individualResults.length,
102
+ synthesisStrategy,
103
+ },
104
+ };
105
+ }
106
+ async executeSingleTask(task, context) {
107
+ const taskStart = Date.now();
108
+ try {
109
+ // Build the handoff message
110
+ const handoff = {
111
+ handoffId: (0, crypto_1.randomUUID)(),
112
+ sourceAgent: context.agentId,
113
+ targetAgent: task.agentType,
114
+ taskType: 'delegate',
115
+ payload: task.taskPayload,
116
+ metadata: {
117
+ priority: 1,
118
+ deadline: Date.now() + orchestrator_types_1.CONFIG.defaultTimeout,
119
+ parentTaskId: context.taskId ?? null,
120
+ },
121
+ };
122
+ // Sanitize the instruction before sending to adapter
123
+ let sanitizedInstruction = task.taskPayload.instruction;
124
+ try {
125
+ sanitizedInstruction = security_1.InputSanitizer.sanitizeString(task.taskPayload.instruction, 10000);
126
+ }
127
+ catch { /* use original if sanitization fails */ }
128
+ // Use namespace-scoped snapshot -- target agent only sees keys it's allowed to see
129
+ const scopedSnapshot = this.blackboard.getScopedSnapshot(task.agentType);
130
+ // Route through the adapter registry (framework-agnostic)
131
+ const agentPayload = {
132
+ action: 'execute',
133
+ params: {},
134
+ handoff: {
135
+ handoffId: handoff.handoffId,
136
+ sourceAgent: handoff.sourceAgent,
137
+ targetAgent: handoff.targetAgent,
138
+ taskType: handoff.taskType,
139
+ instruction: sanitizedInstruction,
140
+ context: handoff.payload.context,
141
+ constraints: handoff.payload.constraints,
142
+ expectedOutput: handoff.payload.expectedOutput,
143
+ metadata: handoff.metadata,
144
+ },
145
+ blackboardSnapshot: scopedSnapshot,
146
+ };
147
+ const agentContext = {
148
+ agentId: context.agentId,
149
+ taskId: context.taskId,
150
+ sessionId: context.sessionId,
151
+ };
152
+ const result = await this.adapterRegistry.executeAgent(task.agentType, agentPayload, agentContext);
153
+ // Sanitize adapter output before returning/caching
154
+ let sanitizedData = result.data;
155
+ try {
156
+ sanitizedData = security_1.InputSanitizer.sanitizeObject(result.data);
157
+ }
158
+ catch { /* use raw if sanitization fails */ }
159
+ return {
160
+ agentType: task.agentType,
161
+ success: true,
162
+ result: sanitizedData,
163
+ executionTime: Date.now() - taskStart,
164
+ };
165
+ }
166
+ catch (error) {
167
+ return {
168
+ agentType: task.agentType,
169
+ success: false,
170
+ result: {
171
+ error: error instanceof Error ? error.message : 'Unknown error',
172
+ recoverable: true,
173
+ },
174
+ executionTime: Date.now() - taskStart,
175
+ };
176
+ }
177
+ }
178
+ synthesize(results, strategy) {
179
+ const successfulResults = results.filter(r => r.success);
180
+ if (successfulResults.length === 0) {
181
+ return {
182
+ error: 'All parallel tasks failed',
183
+ individualErrors: results.map(r => ({
184
+ agent: r.agentType,
185
+ error: r.result,
186
+ })),
187
+ };
188
+ }
189
+ switch (strategy) {
190
+ case 'merge':
191
+ // Combine all results into a unified object
192
+ return {
193
+ merged: true,
194
+ contributions: successfulResults.map(r => ({
195
+ source: r.agentType,
196
+ data: r.result,
197
+ })),
198
+ summary: this.generateMergeSummary(successfulResults),
199
+ };
200
+ case 'vote':
201
+ // Return the result with highest "confidence" (simplified: most data)
202
+ const scored = successfulResults.map(r => ({
203
+ result: r,
204
+ score: JSON.stringify(r.result).length,
205
+ }));
206
+ scored.sort((a, b) => b.score - a.score);
207
+ return {
208
+ voted: true,
209
+ winner: scored[0].result.agentType,
210
+ result: scored[0].result.result,
211
+ };
212
+ case 'chain':
213
+ // Results should already be ordered; return the final one
214
+ return {
215
+ chained: true,
216
+ finalResult: successfulResults[successfulResults.length - 1].result,
217
+ chainLength: successfulResults.length,
218
+ };
219
+ case 'first-success':
220
+ // Return the first successful result
221
+ return {
222
+ firstSuccess: true,
223
+ source: successfulResults[0].agentType,
224
+ result: successfulResults[0].result,
225
+ };
226
+ default:
227
+ return successfulResults.map(r => r.result);
228
+ }
229
+ }
230
+ generateMergeSummary(results) {
231
+ const agents = results.map(r => r.agentType).join(', ');
232
+ return `Synthesized from ${results.length} agents: ${agents}`;
233
+ }
234
+ hashPayload(payload) {
235
+ // Simple hash for cache key generation
236
+ const str = JSON.stringify(payload);
237
+ let hash = 0;
238
+ for (let i = 0; i < str.length; i++) {
239
+ const char = str.charCodeAt(i);
240
+ hash = ((hash << 5) - hash) + char;
241
+ hash = hash & hash;
242
+ }
243
+ return Math.abs(hash).toString(16);
244
+ }
245
+ /**
246
+ * Execute async functions with a bounded concurrency pool.
247
+ * @param items Items to process
248
+ * @param fn Async function to apply to each item
249
+ * @param limit Max concurrent executions (0 = unlimited)
250
+ */
251
+ async runWithConcurrencyLimit(items, fn, limit) {
252
+ if (limit <= 0 || items.length <= limit) {
253
+ return Promise.all(items.map(fn));
254
+ }
255
+ const results = new Array(items.length);
256
+ let nextIndex = 0;
257
+ async function worker() {
258
+ while (nextIndex < items.length) {
259
+ const idx = nextIndex++;
260
+ results[idx] = await fn(items[idx]);
261
+ }
262
+ }
263
+ const workers = [];
264
+ for (let i = 0; i < Math.min(limit, items.length); i++) {
265
+ workers.push(worker());
266
+ }
267
+ await Promise.all(workers);
268
+ return results;
269
+ }
270
+ }
271
+ exports.TaskDecomposer = TaskDecomposer;
272
+ //# sourceMappingURL=task-decomposer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-decomposer.js","sourceRoot":"","sources":["../../lib/task-decomposer.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,mCAAoC;AACpC,mEAA+D;AAC/D,0CAA6C;AAC7C,qCAA2C;AAC3C,2DAAuD;AACvD,mDAA+C;AAC/C,6DAA8C;AAW9C,MAAa,cAAc;IACjB,UAAU,CAAmB;IAC7B,YAAY,CAAe;IAC3B,eAAe,CAAkB;IACzC,mEAAmE;IAC3D,cAAc,CAAS;IAE/B,YACE,UAA4B,EAC5B,YAA0B,EAC1B,eAAgC,EAChC,OAAqC;QAErC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,YAAY,oCAAgB,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,wBAAe,CAAC,oDAAoD,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,YAAY,4BAAY,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,wBAAe,CAAC,kDAAkD,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,eAAe,YAAY,kCAAe,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,wBAAe,CAAC,wDAAwD,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,CAAC,CAAC;IACrD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CACnB,KAAqB,EACrB,oBAAuC,OAAO,EAC9C,OAAqB;QAErB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,wBAAe,CAAC,wBAAwB,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,wBAAe,CAAC,+BAA+B,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAChE,MAAM,IAAI,wBAAe,CAAC,8CAA8C,CAAC,CAAC;QAC5E,CAAC;QACD,sEAAsE;QAEtE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,iBAAiB,GAAiD,EAAE,CAAC;QAE3E,4CAA4C;QAC5C,MAAM,WAAW,GAAmB,EAAE,CAAC;QACvC,MAAM,aAAa,GAAmB,EAAE,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAChF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE9C,IAAI,MAAM,EAAE,CAAC;gBACX,iBAAiB,CAAC,IAAI,CAAC;oBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,MAAM,CAAC,KAAK;oBACpB,aAAa,EAAE,CAAC,EAAE,aAAa;iBAChC,CAAC,CAAC;gBACH,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAChD,aAAa,EACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,EAC7C,IAAI,CAAC,cAAc,CACpB,CAAC;YAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAE1B,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE/B,2BAA2B;gBAC3B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBAChF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC,aAAa;gBACnH,CAAC;YACH,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAEhF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACzC,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAErE,OAAO;YACL,iBAAiB;YACjB,iBAAiB;YACjB,gBAAgB,EAAE;gBAChB,SAAS;gBACT,WAAW,EAAE,YAAY,GAAG,iBAAiB,CAAC,MAAM;gBACpD,iBAAiB;aAClB;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,IAAkB,EAClB,OAAqB;QAErB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,4BAA4B;YAC5B,MAAM,OAAO,GAAmB;gBAC9B,SAAS,EAAE,IAAA,mBAAU,GAAE;gBACvB,WAAW,EAAE,OAAO,CAAC,OAAO;gBAC5B,WAAW,EAAE,IAAI,CAAC,SAAS;gBAC3B,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE,IAAI,CAAC,WAAW;gBACzB,QAAQ,EAAE;oBACR,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,2BAAM,CAAC,cAAc;oBAC5C,YAAY,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;iBACrC;aACF,CAAC;YAEF,qDAAqD;YACrD,IAAI,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;YACxD,IAAI,CAAC;gBACH,oBAAoB,GAAG,yBAAc,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC5F,CAAC;YAAC,MAAM,CAAC,CAAC,wCAAwC,CAAC,CAAC;YAEpD,mFAAmF;YACnF,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEzE,0DAA0D;YAC1D,MAAM,YAAY,GAAiB;gBACjC,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE;oBACP,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,WAAW,EAAE,oBAAoB;oBACjC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;oBAChC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW;oBACxC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc;oBAC9C,QAAQ,EAAE,OAAO,CAAC,QAA8C;iBACjE;gBACD,kBAAkB,EAAE,cAAyC;aAC9D,CAAC;YAEF,MAAM,YAAY,GAAiB;gBACjC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;YAEnG,mDAAmD;YACnD,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC;YAChC,IAAI,CAAC;gBACH,aAAa,GAAG,yBAAc,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC,CAAC,mCAAmC,CAAC,CAAC;YAE/C,OAAO;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,aAAa;gBACrB,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACtC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACN,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;oBAC/D,WAAW,EAAE,IAAI;iBAClB;gBACD,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACtC,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,UAAU,CAChB,OAAqD,EACrD,QAA2B;QAE3B,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAEzD,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO;gBACL,KAAK,EAAE,2BAA2B;gBAClC,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClC,KAAK,EAAE,CAAC,CAAC,SAAS;oBAClB,KAAK,EAAE,CAAC,CAAC,MAAM;iBAChB,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;QAED,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,OAAO;gBACV,4CAA4C;gBAC5C,OAAO;oBACL,MAAM,EAAE,IAAI;oBACZ,aAAa,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACzC,MAAM,EAAE,CAAC,CAAC,SAAS;wBACnB,IAAI,EAAE,CAAC,CAAC,MAAM;qBACf,CAAC,CAAC;oBACH,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;iBACtD,CAAC;YAEJ,KAAK,MAAM;gBACT,sEAAsE;gBACtE,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACzC,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;iBACvC,CAAC,CAAC,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;gBACzC,OAAO;oBACL,KAAK,EAAE,IAAI;oBACX,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;oBAClC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;iBAChC,CAAC;YAEJ,KAAK,OAAO;gBACV,0DAA0D;gBAC1D,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,WAAW,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM;oBACnE,WAAW,EAAE,iBAAiB,CAAC,MAAM;iBACtC,CAAC;YAEJ,KAAK,eAAe;gBAClB,qCAAqC;gBACrC,OAAO;oBACL,YAAY,EAAE,IAAI;oBAClB,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS;oBACtC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM;iBACpC,CAAC;YAEJ;gBACE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,OAAqD;QAChF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,oBAAoB,OAAO,CAAC,MAAM,YAAY,MAAM,EAAE,CAAC;IAChE,CAAC;IAEO,WAAW,CAAC,OAAoB;QACtC,uCAAuC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;YACnC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,uBAAuB,CACnC,KAAU,EACV,EAA2B,EAC3B,KAAa;QAEb,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;YACxC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,OAAO,GAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,UAAU,MAAM;YACnB,OAAO,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAhTD,wCAgTC"}