network-ai 5.10.2 → 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.
Files changed (272) hide show
  1. package/INTEGRATION_GUIDE.md +2 -2
  2. package/README.md +5 -3
  3. package/SKILL.md +3 -3
  4. package/dist/esm/adapters/a2a-adapter.js +235 -0
  5. package/dist/esm/adapters/a2a-adapter.js.map +1 -0
  6. package/dist/esm/adapters/adapter-registry.js +613 -0
  7. package/dist/esm/adapters/adapter-registry.js.map +1 -0
  8. package/dist/esm/adapters/agno-adapter.js +140 -0
  9. package/dist/esm/adapters/agno-adapter.js.map +1 -0
  10. package/dist/esm/adapters/anthropic-computer-use-adapter.js +180 -0
  11. package/dist/esm/adapters/anthropic-computer-use-adapter.js.map +1 -0
  12. package/dist/esm/adapters/aps-adapter.js +289 -0
  13. package/dist/esm/adapters/aps-adapter.js.map +1 -0
  14. package/dist/esm/adapters/autogen-adapter.js +141 -0
  15. package/dist/esm/adapters/autogen-adapter.js.map +1 -0
  16. package/dist/esm/adapters/base-adapter.js +104 -0
  17. package/dist/esm/adapters/base-adapter.js.map +1 -0
  18. package/dist/esm/adapters/browser-agent-adapter.js +219 -0
  19. package/dist/esm/adapters/browser-agent-adapter.js.map +1 -0
  20. package/dist/esm/adapters/codex-adapter.js +318 -0
  21. package/dist/esm/adapters/codex-adapter.js.map +1 -0
  22. package/dist/esm/adapters/copilot-adapter.js +132 -0
  23. package/dist/esm/adapters/copilot-adapter.js.map +1 -0
  24. package/dist/esm/adapters/crewai-adapter.js +148 -0
  25. package/dist/esm/adapters/crewai-adapter.js.map +1 -0
  26. package/dist/esm/adapters/custom-adapter.js +142 -0
  27. package/dist/esm/adapters/custom-adapter.js.map +1 -0
  28. package/dist/esm/adapters/custom-streaming-adapter.js +181 -0
  29. package/dist/esm/adapters/custom-streaming-adapter.js.map +1 -0
  30. package/dist/esm/adapters/dspy-adapter.js +127 -0
  31. package/dist/esm/adapters/dspy-adapter.js.map +1 -0
  32. package/dist/esm/adapters/haystack-adapter.js +149 -0
  33. package/dist/esm/adapters/haystack-adapter.js.map +1 -0
  34. package/dist/esm/adapters/hermes-adapter.js +217 -0
  35. package/dist/esm/adapters/hermes-adapter.js.map +1 -0
  36. package/dist/esm/adapters/index.js +109 -0
  37. package/dist/esm/adapters/index.js.map +1 -0
  38. package/dist/esm/adapters/langchain-adapter.js +134 -0
  39. package/dist/esm/adapters/langchain-adapter.js.map +1 -0
  40. package/dist/esm/adapters/langchain-streaming-adapter.js +161 -0
  41. package/dist/esm/adapters/langchain-streaming-adapter.js.map +1 -0
  42. package/dist/esm/adapters/langgraph-adapter.js +119 -0
  43. package/dist/esm/adapters/langgraph-adapter.js.map +1 -0
  44. package/dist/esm/adapters/llamaindex-adapter.js +135 -0
  45. package/dist/esm/adapters/llamaindex-adapter.js.map +1 -0
  46. package/dist/esm/adapters/mcp-adapter.js +200 -0
  47. package/dist/esm/adapters/mcp-adapter.js.map +1 -0
  48. package/dist/esm/adapters/minimax-adapter.js +233 -0
  49. package/dist/esm/adapters/minimax-adapter.js.map +1 -0
  50. package/dist/esm/adapters/nemoclaw-adapter.js +465 -0
  51. package/dist/esm/adapters/nemoclaw-adapter.js.map +1 -0
  52. package/dist/esm/adapters/openai-agents-adapter.js +118 -0
  53. package/dist/esm/adapters/openai-agents-adapter.js.map +1 -0
  54. package/dist/esm/adapters/openai-assistants-adapter.js +130 -0
  55. package/dist/esm/adapters/openai-assistants-adapter.js.map +1 -0
  56. package/dist/esm/adapters/openclaw-adapter.js +107 -0
  57. package/dist/esm/adapters/openclaw-adapter.js.map +1 -0
  58. package/dist/esm/adapters/orchestrator-adapter.js +218 -0
  59. package/dist/esm/adapters/orchestrator-adapter.js.map +1 -0
  60. package/dist/esm/adapters/pydantic-ai-adapter.js +163 -0
  61. package/dist/esm/adapters/pydantic-ai-adapter.js.map +1 -0
  62. package/dist/esm/adapters/rlm-adapter.js +167 -0
  63. package/dist/esm/adapters/rlm-adapter.js.map +1 -0
  64. package/dist/esm/adapters/semantic-kernel-adapter.js +123 -0
  65. package/dist/esm/adapters/semantic-kernel-adapter.js.map +1 -0
  66. package/dist/esm/adapters/streaming-base-adapter.js +74 -0
  67. package/dist/esm/adapters/streaming-base-adapter.js.map +1 -0
  68. package/dist/esm/adapters/vertex-ai-adapter.js +166 -0
  69. package/dist/esm/adapters/vertex-ai-adapter.js.map +1 -0
  70. package/dist/esm/demo-control-plane.js +147 -0
  71. package/dist/esm/demo-control-plane.js.map +1 -0
  72. package/dist/esm/demo-worktree-dashboard.js +131 -0
  73. package/dist/esm/demo-worktree-dashboard.js.map +1 -0
  74. package/dist/esm/examples/01-hello-swarm.js +165 -0
  75. package/dist/esm/examples/01-hello-swarm.js.map +1 -0
  76. package/dist/esm/examples/02-fsm-pipeline.js +189 -0
  77. package/dist/esm/examples/02-fsm-pipeline.js.map +1 -0
  78. package/dist/esm/examples/03-parallel-agents.js +192 -0
  79. package/dist/esm/examples/03-parallel-agents.js.map +1 -0
  80. package/dist/esm/examples/05-code-review-swarm.js +1177 -0
  81. package/dist/esm/examples/05-code-review-swarm.js.map +1 -0
  82. package/dist/esm/examples/06-ai-pipeline-demo.js +263 -0
  83. package/dist/esm/examples/06-ai-pipeline-demo.js.map +1 -0
  84. package/dist/esm/examples/07-full-showcase.js +946 -0
  85. package/dist/esm/examples/07-full-showcase.js.map +1 -0
  86. package/dist/esm/examples/08-control-plane-stress-demo.js +186 -0
  87. package/dist/esm/examples/08-control-plane-stress-demo.js.map +1 -0
  88. package/dist/esm/examples/09-real-langchain.js +231 -0
  89. package/dist/esm/examples/09-real-langchain.js.map +1 -0
  90. package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js +270 -0
  91. package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js.map +1 -0
  92. package/dist/esm/examples/demo-runner.js +119 -0
  93. package/dist/esm/examples/demo-runner.js.map +1 -0
  94. package/dist/esm/index.js +1352 -0
  95. package/dist/esm/index.js.map +1 -0
  96. package/dist/esm/lib/adapter-hooks.js +216 -0
  97. package/dist/esm/lib/adapter-hooks.js.map +1 -0
  98. package/dist/esm/lib/adapter-test-harness.js +118 -0
  99. package/dist/esm/lib/adapter-test-harness.js.map +1 -0
  100. package/dist/esm/lib/agent-conversation.js +155 -0
  101. package/dist/esm/lib/agent-conversation.js.map +1 -0
  102. package/dist/esm/lib/agent-debate.js +146 -0
  103. package/dist/esm/lib/agent-debate.js.map +1 -0
  104. package/dist/esm/lib/agent-memory.js +336 -0
  105. package/dist/esm/lib/agent-memory.js.map +1 -0
  106. package/dist/esm/lib/agent-runtime.js +818 -0
  107. package/dist/esm/lib/agent-runtime.js.map +1 -0
  108. package/dist/esm/lib/agent-vcr.js +218 -0
  109. package/dist/esm/lib/agent-vcr.js.map +1 -0
  110. package/dist/esm/lib/anomaly-detector.js +178 -0
  111. package/dist/esm/lib/anomaly-detector.js.map +1 -0
  112. package/dist/esm/lib/approval-inbox.js +385 -0
  113. package/dist/esm/lib/approval-inbox.js.map +1 -0
  114. package/dist/esm/lib/auth-guardian.js +692 -0
  115. package/dist/esm/lib/auth-guardian.js.map +1 -0
  116. package/dist/esm/lib/auth-validator.js +32 -0
  117. package/dist/esm/lib/auth-validator.js.map +1 -0
  118. package/dist/esm/lib/blackboard-backend-crdt.js +251 -0
  119. package/dist/esm/lib/blackboard-backend-crdt.js.map +1 -0
  120. package/dist/esm/lib/blackboard-backend-redis.js +244 -0
  121. package/dist/esm/lib/blackboard-backend-redis.js.map +1 -0
  122. package/dist/esm/lib/blackboard-backend.js +141 -0
  123. package/dist/esm/lib/blackboard-backend.js.map +1 -0
  124. package/dist/esm/lib/blackboard-validator.js +985 -0
  125. package/dist/esm/lib/blackboard-validator.js.map +1 -0
  126. package/dist/esm/lib/circuit-breaker.js +164 -0
  127. package/dist/esm/lib/circuit-breaker.js.map +1 -0
  128. package/dist/esm/lib/claim-verifier.js +173 -0
  129. package/dist/esm/lib/claim-verifier.js.map +1 -0
  130. package/dist/esm/lib/comparison-runner.js +138 -0
  131. package/dist/esm/lib/comparison-runner.js.map +1 -0
  132. package/dist/esm/lib/compliance-monitor.js +261 -0
  133. package/dist/esm/lib/compliance-monitor.js.map +1 -0
  134. package/dist/esm/lib/confidence-filter.js +210 -0
  135. package/dist/esm/lib/confidence-filter.js.map +1 -0
  136. package/dist/esm/lib/config-watcher.js +215 -0
  137. package/dist/esm/lib/config-watcher.js.map +1 -0
  138. package/dist/esm/lib/consistency.js +274 -0
  139. package/dist/esm/lib/consistency.js.map +1 -0
  140. package/dist/esm/lib/console-ui.js +276 -0
  141. package/dist/esm/lib/console-ui.js.map +1 -0
  142. package/dist/esm/lib/context-throttler.js +171 -0
  143. package/dist/esm/lib/context-throttler.js.map +1 -0
  144. package/dist/esm/lib/control-plane.js +527 -0
  145. package/dist/esm/lib/control-plane.js.map +1 -0
  146. package/dist/esm/lib/cost-governor.js +128 -0
  147. package/dist/esm/lib/cost-governor.js.map +1 -0
  148. package/dist/esm/lib/cost-heatmap.js +161 -0
  149. package/dist/esm/lib/cost-heatmap.js.map +1 -0
  150. package/dist/esm/lib/coverage-gate.js +213 -0
  151. package/dist/esm/lib/coverage-gate.js.map +1 -0
  152. package/dist/esm/lib/coverage-reporter.js +177 -0
  153. package/dist/esm/lib/coverage-reporter.js.map +1 -0
  154. package/dist/esm/lib/crdt.js +141 -0
  155. package/dist/esm/lib/crdt.js.map +1 -0
  156. package/dist/esm/lib/dashboard-server.js +403 -0
  157. package/dist/esm/lib/dashboard-server.js.map +1 -0
  158. package/dist/esm/lib/dry-run.js +130 -0
  159. package/dist/esm/lib/dry-run.js.map +1 -0
  160. package/dist/esm/lib/env-manager.js +518 -0
  161. package/dist/esm/lib/env-manager.js.map +1 -0
  162. package/dist/esm/lib/errors.js +201 -0
  163. package/dist/esm/lib/errors.js.map +1 -0
  164. package/dist/esm/lib/event-bus.js +229 -0
  165. package/dist/esm/lib/event-bus.js.map +1 -0
  166. package/dist/esm/lib/explainability.js +102 -0
  167. package/dist/esm/lib/explainability.js.map +1 -0
  168. package/dist/esm/lib/fan-out.js +237 -0
  169. package/dist/esm/lib/fan-out.js.map +1 -0
  170. package/dist/esm/lib/federated-budget.js +322 -0
  171. package/dist/esm/lib/federated-budget.js.map +1 -0
  172. package/dist/esm/lib/fsm-journey.js +478 -0
  173. package/dist/esm/lib/fsm-journey.js.map +1 -0
  174. package/dist/esm/lib/goal-decomposer.js +698 -0
  175. package/dist/esm/lib/goal-decomposer.js.map +1 -0
  176. package/dist/esm/lib/goal-dsl.js +391 -0
  177. package/dist/esm/lib/goal-dsl.js.map +1 -0
  178. package/dist/esm/lib/job-queue.js +310 -0
  179. package/dist/esm/lib/job-queue.js.map +1 -0
  180. package/dist/esm/lib/landscape-agent.js +134 -0
  181. package/dist/esm/lib/landscape-agent.js.map +1 -0
  182. package/dist/esm/lib/learning-loop.js +181 -0
  183. package/dist/esm/lib/learning-loop.js.map +1 -0
  184. package/dist/esm/lib/lifecycle-hooks.js +148 -0
  185. package/dist/esm/lib/lifecycle-hooks.js.map +1 -0
  186. package/dist/esm/lib/locked-blackboard.js +1295 -0
  187. package/dist/esm/lib/locked-blackboard.js.map +1 -0
  188. package/dist/esm/lib/logger.js +150 -0
  189. package/dist/esm/lib/logger.js.map +1 -0
  190. package/dist/esm/lib/mcp-blackboard-tools.js +298 -0
  191. package/dist/esm/lib/mcp-blackboard-tools.js.map +1 -0
  192. package/dist/esm/lib/mcp-bridge.js +357 -0
  193. package/dist/esm/lib/mcp-bridge.js.map +1 -0
  194. package/dist/esm/lib/mcp-tool-consumer.js +287 -0
  195. package/dist/esm/lib/mcp-tool-consumer.js.map +1 -0
  196. package/dist/esm/lib/mcp-tools-control.js +392 -0
  197. package/dist/esm/lib/mcp-tools-control.js.map +1 -0
  198. package/dist/esm/lib/mcp-tools-extended.js +371 -0
  199. package/dist/esm/lib/mcp-tools-extended.js.map +1 -0
  200. package/dist/esm/lib/mcp-transport-http.js +528 -0
  201. package/dist/esm/lib/mcp-transport-http.js.map +1 -0
  202. package/dist/esm/lib/mcp-transport-sse.js +503 -0
  203. package/dist/esm/lib/mcp-transport-sse.js.map +1 -0
  204. package/dist/esm/lib/metrics.js +284 -0
  205. package/dist/esm/lib/metrics.js.map +1 -0
  206. package/dist/esm/lib/orchestrator-types.js +66 -0
  207. package/dist/esm/lib/orchestrator-types.js.map +1 -0
  208. package/dist/esm/lib/otel-bridge.js +167 -0
  209. package/dist/esm/lib/otel-bridge.js.map +1 -0
  210. package/dist/esm/lib/partition-planner.js +246 -0
  211. package/dist/esm/lib/partition-planner.js.map +1 -0
  212. package/dist/esm/lib/phase-pipeline.js +367 -0
  213. package/dist/esm/lib/phase-pipeline.js.map +1 -0
  214. package/dist/esm/lib/playground.js +224 -0
  215. package/dist/esm/lib/playground.js.map +1 -0
  216. package/dist/esm/lib/qa-orchestrator.js +296 -0
  217. package/dist/esm/lib/qa-orchestrator.js.map +1 -0
  218. package/dist/esm/lib/quadtree.js +259 -0
  219. package/dist/esm/lib/quadtree.js.map +1 -0
  220. package/dist/esm/lib/route-classifier.js +217 -0
  221. package/dist/esm/lib/route-classifier.js.map +1 -0
  222. package/dist/esm/lib/semantic-search.js +235 -0
  223. package/dist/esm/lib/semantic-search.js.map +1 -0
  224. package/dist/esm/lib/shared-blackboard.js +249 -0
  225. package/dist/esm/lib/shared-blackboard.js.map +1 -0
  226. package/dist/esm/lib/skill-composer.js +190 -0
  227. package/dist/esm/lib/skill-composer.js.map +1 -0
  228. package/dist/esm/lib/speculative-executor.js +107 -0
  229. package/dist/esm/lib/speculative-executor.js.map +1 -0
  230. package/dist/esm/lib/strategy-agent.js +626 -0
  231. package/dist/esm/lib/strategy-agent.js.map +1 -0
  232. package/dist/esm/lib/swarm-transport.js +307 -0
  233. package/dist/esm/lib/swarm-transport.js.map +1 -0
  234. package/dist/esm/lib/swarm-utils.js +510 -0
  235. package/dist/esm/lib/swarm-utils.js.map +1 -0
  236. package/dist/esm/lib/task-decomposer.js +272 -0
  237. package/dist/esm/lib/task-decomposer.js.map +1 -0
  238. package/dist/esm/lib/telemetry-provider.js +207 -0
  239. package/dist/esm/lib/telemetry-provider.js.map +1 -0
  240. package/dist/esm/lib/timeline-scrubber.js +173 -0
  241. package/dist/esm/lib/timeline-scrubber.js.map +1 -0
  242. package/dist/esm/lib/topology.js +591 -0
  243. package/dist/esm/lib/topology.js.map +1 -0
  244. package/dist/esm/lib/transport-agent.js +366 -0
  245. package/dist/esm/lib/transport-agent.js.map +1 -0
  246. package/dist/esm/lib/work-tree-dashboard.js +583 -0
  247. package/dist/esm/lib/work-tree-dashboard.js.map +1 -0
  248. package/dist/esm/lib/work-tree-ui.js +333 -0
  249. package/dist/esm/lib/work-tree-ui.js.map +1 -0
  250. package/dist/esm/lib/work-tree.js +480 -0
  251. package/dist/esm/lib/work-tree.js.map +1 -0
  252. package/dist/esm/run.js +144 -0
  253. package/dist/esm/run.js.map +1 -0
  254. package/dist/esm/security.js +1122 -0
  255. package/dist/esm/security.js.map +1 -0
  256. package/dist/index.d.ts +2 -0
  257. package/dist/index.d.ts.map +1 -1
  258. package/dist/index.js +6 -1
  259. package/dist/index.js.map +1 -1
  260. package/dist/lib/mcp-transport-http.d.ts +203 -0
  261. package/dist/lib/mcp-transport-http.d.ts.map +1 -0
  262. package/dist/lib/mcp-transport-http.js +528 -0
  263. package/dist/lib/mcp-transport-http.js.map +1 -0
  264. package/dist/lib/phase-pipeline.d.ts +31 -0
  265. package/dist/lib/phase-pipeline.d.ts.map +1 -1
  266. package/dist/lib/phase-pipeline.js +93 -1
  267. package/dist/lib/phase-pipeline.js.map +1 -1
  268. package/dist/lib/semantic-search.d.ts +42 -6
  269. package/dist/lib/semantic-search.d.ts.map +1 -1
  270. package/dist/lib/semantic-search.js +87 -6
  271. package/dist/lib/semantic-search.js.map +1 -1
  272. package/package.json +24 -4
@@ -0,0 +1,626 @@
1
+ "use strict";
2
+ /**
3
+ * Strategy Agent — AI Meta-Orchestrator for Network-AI
4
+ *
5
+ * The StrategyAgent sits above SwarmOrchestrator and makes high-level decisions
6
+ * about agent allocation, workload distribution, budget partitioning, and
7
+ * adaptive scaling. It is designed for scenarios where a single AI controls
8
+ * thousands to millions of agents.
9
+ *
10
+ * Architecture:
11
+ * - **AgentPool**: Elastic pool of agents from a template — spawn/recycle on demand
12
+ * - **WorkloadPartitioner**: Splits large tasks into chunks and routes to pools
13
+ * - **StrategyPlanner**: Evaluates current state and produces a StrategyPlan
14
+ * - **StrategyAgent**: Facade that composes all of the above
15
+ *
16
+ * Design principles:
17
+ * - Zero external dependencies (Node.js builtins only)
18
+ * - Pluggable strategy functions (bring your own AI decision-making)
19
+ * - Non-destructive: all actions go through existing orchestrator APIs
20
+ * - Observable: every decision is logged and emittable
21
+ *
22
+ * @module StrategyAgent
23
+ * @version 1.0.0
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.StrategyAgent = exports.WorkloadPartitioner = exports.AgentPool = void 0;
27
+ exports.adaptiveStrategy = adaptiveStrategy;
28
+ const events_1 = require("events");
29
+ // ============================================================================
30
+ // AGENT POOL
31
+ // ============================================================================
32
+ /**
33
+ * Elastic pool of agents from a template. Manages spawn/complete/recycle
34
+ * lifecycle without knowing about specific adapter implementations.
35
+ */
36
+ class AgentPool {
37
+ template;
38
+ agents = new Map();
39
+ _completedCount = 0;
40
+ _failedCount = 0;
41
+ _totalTokens = 0;
42
+ _events;
43
+ _dispatchPaused = false;
44
+ _dispatchAllowedPercent = 100;
45
+ constructor(template, events) {
46
+ this.template = template;
47
+ this._events = events;
48
+ }
49
+ /** Number of currently active (spawning or running) agents */
50
+ get active() {
51
+ let count = 0;
52
+ for (const a of this.agents.values()) {
53
+ if (a.status === 'spawning' || a.status === 'running')
54
+ count++;
55
+ }
56
+ return count;
57
+ }
58
+ /** Total completed agents */
59
+ get completed() { return this._completedCount; }
60
+ /** Total failed agents */
61
+ get failed() { return this._failedCount; }
62
+ /** Total tokens consumed by this pool */
63
+ get totalTokensUsed() { return this._totalTokens; }
64
+ /** Whether the pool can accept more agents */
65
+ get canSpawn() {
66
+ if (this._dispatchPaused)
67
+ return false;
68
+ const limit = this._dispatchAllowedPercent < 100
69
+ ? Math.max(1, Math.floor(this.template.maxConcurrent * this._dispatchAllowedPercent / 100))
70
+ : this.template.maxConcurrent;
71
+ return this.active < limit;
72
+ }
73
+ /** How many more agents can be spawned */
74
+ get availableSlots() { return Math.max(0, this.template.maxConcurrent - this.active); }
75
+ /** Whether dispatch is currently paused for this pool. */
76
+ get isDispatchPaused() { return this._dispatchPaused; }
77
+ /** Current allowed spawn percentage (0–100). */
78
+ get dispatchAllowedPercent() { return this._dispatchAllowedPercent; }
79
+ /**
80
+ * Pause or partially resume dispatch for this pool.
81
+ * Used by TransportAgent to drain the fleet before an environment promotion.
82
+ * @param paused - true to fully pause; false to resume (optionally at a partial rate)
83
+ * @param options.percent - 1–100 fraction of maxConcurrent slots to allow (ignored when paused=true)
84
+ */
85
+ setDispatchPause(paused, options) {
86
+ this._dispatchPaused = paused;
87
+ if (!paused) {
88
+ this._dispatchAllowedPercent = Math.min(100, Math.max(1, options?.percent ?? 100));
89
+ }
90
+ }
91
+ /**
92
+ * Reserve a slot and create a ManagedAgent record.
93
+ * Returns null if pool is at capacity.
94
+ */
95
+ spawn(taskId) {
96
+ if (!this.canSpawn)
97
+ return null;
98
+ const agent = {
99
+ id: `${this.template.id}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
100
+ templateId: this.template.id,
101
+ status: 'spawning',
102
+ spawnedAt: Date.now(),
103
+ taskId,
104
+ tokensUsed: 0,
105
+ };
106
+ this.agents.set(agent.id, agent);
107
+ this._events.emit('agent:spawned', agent);
108
+ return agent;
109
+ }
110
+ /** Mark an agent as running */
111
+ markRunning(agentId) {
112
+ const agent = this.agents.get(agentId);
113
+ if (agent && (agent.status === 'spawning')) {
114
+ agent.status = 'running';
115
+ }
116
+ }
117
+ /** Mark an agent as completed and record token usage */
118
+ markCompleted(agentId, tokensUsed = 0) {
119
+ const agent = this.agents.get(agentId);
120
+ if (!agent)
121
+ return;
122
+ agent.status = 'completed';
123
+ agent.completedAt = Date.now();
124
+ agent.tokensUsed = tokensUsed;
125
+ this._completedCount++;
126
+ this._totalTokens += tokensUsed;
127
+ this._events.emit('agent:completed', agent);
128
+ }
129
+ /** Mark an agent as failed */
130
+ markFailed(agentId, error) {
131
+ const agent = this.agents.get(agentId);
132
+ if (!agent)
133
+ return;
134
+ agent.status = 'failed';
135
+ agent.completedAt = Date.now();
136
+ this._failedCount++;
137
+ this._events.emit('agent:failed', agent, error);
138
+ }
139
+ /** Recycle completed/failed agents to free slots */
140
+ recycle() {
141
+ let recycled = 0;
142
+ for (const [id, agent] of this.agents) {
143
+ if (agent.status === 'completed' || agent.status === 'failed') {
144
+ agent.status = 'recycled';
145
+ this.agents.delete(id);
146
+ recycled++;
147
+ }
148
+ }
149
+ return recycled;
150
+ }
151
+ /** Get a snapshot of pool status */
152
+ getStatus(pendingChunks = 0) {
153
+ return {
154
+ templateId: this.template.id,
155
+ active: this.active,
156
+ maxConcurrent: this.template.maxConcurrent,
157
+ completed: this._completedCount,
158
+ failed: this._failedCount,
159
+ totalTokensUsed: this._totalTokens,
160
+ budgetPerAgent: this.template.budgetPerAgent,
161
+ pendingChunks,
162
+ };
163
+ }
164
+ /** Get all agents (for inspection) */
165
+ getAgents() {
166
+ return Array.from(this.agents.values());
167
+ }
168
+ }
169
+ exports.AgentPool = AgentPool;
170
+ // ============================================================================
171
+ // WORKLOAD PARTITIONER
172
+ // ============================================================================
173
+ /**
174
+ * Splits large tasks into work chunks and manages the chunk lifecycle.
175
+ */
176
+ class WorkloadPartitioner {
177
+ chunks = new Map();
178
+ _chunkCounter = 0;
179
+ _events;
180
+ constructor(events) {
181
+ this._events = events;
182
+ }
183
+ /**
184
+ * Create work chunks from an array of inputs.
185
+ * @param inputs - Array of task inputs
186
+ * @param targetPool - Pool template ID to route chunks to
187
+ * @param priority - Priority level (higher = more urgent)
188
+ */
189
+ partition(inputs, targetPool, priority = 1) {
190
+ const created = [];
191
+ for (const input of inputs) {
192
+ const chunk = {
193
+ id: `chunk-${++this._chunkCounter}`,
194
+ input,
195
+ priority,
196
+ assignedPool: targetPool,
197
+ status: 'pending',
198
+ createdAt: Date.now(),
199
+ };
200
+ this.chunks.set(chunk.id, chunk);
201
+ this._events.emit('chunk:created', chunk);
202
+ created.push(chunk);
203
+ }
204
+ return created;
205
+ }
206
+ /** Get all pending chunks for a pool, sorted by priority (descending) */
207
+ getPendingForPool(poolId) {
208
+ const pending = [];
209
+ for (const chunk of this.chunks.values()) {
210
+ if (chunk.status === 'pending' && chunk.assignedPool === poolId) {
211
+ pending.push(chunk);
212
+ }
213
+ }
214
+ return pending.sort((a, b) => b.priority - a.priority);
215
+ }
216
+ /** Assign a chunk to an agent */
217
+ assign(chunkId, agentId) {
218
+ const chunk = this.chunks.get(chunkId);
219
+ if (!chunk || chunk.status !== 'pending')
220
+ return false;
221
+ chunk.status = 'assigned';
222
+ chunk.assignedAgent = agentId;
223
+ this._events.emit('chunk:assigned', chunk);
224
+ return true;
225
+ }
226
+ /** Mark a chunk as running */
227
+ markRunning(chunkId) {
228
+ const chunk = this.chunks.get(chunkId);
229
+ if (chunk && chunk.status === 'assigned') {
230
+ chunk.status = 'running';
231
+ }
232
+ }
233
+ /** Mark a chunk as completed */
234
+ markCompleted(chunkId, result) {
235
+ const chunk = this.chunks.get(chunkId);
236
+ if (!chunk)
237
+ return;
238
+ chunk.status = 'completed';
239
+ chunk.result = result;
240
+ chunk.completedAt = Date.now();
241
+ this._events.emit('chunk:completed', chunk);
242
+ }
243
+ /** Mark a chunk as failed */
244
+ markFailed(chunkId, error) {
245
+ const chunk = this.chunks.get(chunkId);
246
+ if (!chunk)
247
+ return;
248
+ chunk.status = 'failed';
249
+ chunk.error = error;
250
+ chunk.completedAt = Date.now();
251
+ this._events.emit('chunk:failed', chunk);
252
+ }
253
+ /** Get counts by status */
254
+ getCounts() {
255
+ let pending = 0, assigned = 0, running = 0, completed = 0, failed = 0;
256
+ for (const chunk of this.chunks.values()) {
257
+ switch (chunk.status) {
258
+ case 'pending':
259
+ pending++;
260
+ break;
261
+ case 'assigned':
262
+ assigned++;
263
+ break;
264
+ case 'running':
265
+ running++;
266
+ break;
267
+ case 'completed':
268
+ completed++;
269
+ break;
270
+ case 'failed':
271
+ failed++;
272
+ break;
273
+ }
274
+ }
275
+ return { pending, assigned, running, completed, failed, total: this.chunks.size };
276
+ }
277
+ /** Get all chunks for a pool */
278
+ getChunksForPool(poolId) {
279
+ const result = [];
280
+ for (const chunk of this.chunks.values()) {
281
+ if (chunk.assignedPool === poolId)
282
+ result.push(chunk);
283
+ }
284
+ return result;
285
+ }
286
+ /** Get a chunk by ID */
287
+ getChunk(chunkId) {
288
+ return this.chunks.get(chunkId);
289
+ }
290
+ }
291
+ exports.WorkloadPartitioner = WorkloadPartitioner;
292
+ // ============================================================================
293
+ // STRATEGY PLANNER
294
+ // ============================================================================
295
+ /**
296
+ * Default adaptive strategy that:
297
+ * - Scales up pools with pending work
298
+ * - Scales down idle pools
299
+ * - Reallocates budget from idle to busy pools
300
+ */
301
+ function adaptiveStrategy(snapshot) {
302
+ const scaleUp = new Map();
303
+ const scaleDown = new Map();
304
+ const budgetReallocation = new Map();
305
+ const newChunks = [];
306
+ const budgetUsedPct = snapshot.totalBudgetCeiling > 0
307
+ ? snapshot.totalBudgetSpent / snapshot.totalBudgetCeiling
308
+ : 0;
309
+ const descriptions = [];
310
+ for (const [poolId, pool] of snapshot.pools) {
311
+ const utilization = pool.maxConcurrent > 0 ? pool.active / pool.maxConcurrent : 0;
312
+ const failRate = (pool.completed + pool.failed) > 0
313
+ ? pool.failed / (pool.completed + pool.failed)
314
+ : 0;
315
+ // Scale up: pool has pending work and isn't at capacity
316
+ if (pool.pendingChunks > 0 && utilization < 0.8 && budgetUsedPct < 0.9) {
317
+ const target = Math.min(pool.maxConcurrent, pool.active + Math.ceil(pool.pendingChunks * 0.5));
318
+ if (target > pool.active) {
319
+ scaleUp.set(poolId, target);
320
+ descriptions.push(`Scale up ${poolId}: ${pool.active} → ${target}`);
321
+ }
322
+ }
323
+ // Scale down: no pending work and low utilization
324
+ if (pool.pendingChunks === 0 && utilization > 0 && pool.active > 1) {
325
+ const target = Math.max(1, Math.floor(pool.active * 0.5));
326
+ if (target < pool.active) {
327
+ scaleDown.set(poolId, target);
328
+ descriptions.push(`Scale down ${poolId}: ${pool.active} → ${target}`);
329
+ }
330
+ }
331
+ // Budget: reduce allocation for high-fail-rate pools
332
+ if (failRate > 0.3 && pool.budgetPerAgent > 100) {
333
+ const newBudget = Math.max(100, Math.floor(pool.budgetPerAgent * 0.7));
334
+ budgetReallocation.set(poolId, newBudget);
335
+ descriptions.push(`Reduce budget for ${poolId}: ${pool.budgetPerAgent} → ${newBudget}`);
336
+ }
337
+ }
338
+ // Compute confidence based on data quality
339
+ const totalTasks = snapshot.completedTasks + snapshot.failedTasks;
340
+ const confidence = totalTasks > 10 ? 0.8 : totalTasks > 0 ? 0.5 : 0.3;
341
+ return {
342
+ description: descriptions.length > 0 ? descriptions.join('; ') : 'No changes needed',
343
+ scaleUp,
344
+ scaleDown,
345
+ budgetReallocation,
346
+ newChunks,
347
+ confidence,
348
+ createdAt: Date.now(),
349
+ };
350
+ }
351
+ // ============================================================================
352
+ // STRATEGY AGENT
353
+ // ============================================================================
354
+ /**
355
+ * AI Meta-Orchestrator that manages agent pools, work distribution, and
356
+ * adaptive strategy. Designed for controlling thousands to millions of agents.
357
+ *
358
+ * @example
359
+ * ```typescript
360
+ * const strategy = new StrategyAgent({
361
+ * globalAgentLimit: 10000,
362
+ * globalBudgetLimit: 1_000_000,
363
+ * evaluationInterval: 5000,
364
+ * });
365
+ *
366
+ * // Define agent templates
367
+ * strategy.createPool({
368
+ * id: 'researchers',
369
+ * adapter: 'langchain',
370
+ * defaultAction: 'research',
371
+ * defaultParams: { depth: 'thorough' },
372
+ * maxConcurrent: 500,
373
+ * budgetPerAgent: 1000,
374
+ * tags: ['research', 'data'],
375
+ * });
376
+ *
377
+ * // Distribute work
378
+ * const urls = [...thousandUrls];
379
+ * strategy.distributeWork(urls, 'researchers', 2);
380
+ *
381
+ * // Start auto-evaluation loop
382
+ * strategy.start();
383
+ *
384
+ * // Or manually evaluate + execute
385
+ * const plan = await strategy.evaluate();
386
+ * await strategy.executePlan(plan);
387
+ * ```
388
+ */
389
+ class StrategyAgent extends events_1.EventEmitter {
390
+ pools = new Map();
391
+ partitioner;
392
+ strategyFn;
393
+ evaluationInterval;
394
+ globalAgentLimit;
395
+ globalBudgetLimit;
396
+ intervalHandle = null;
397
+ _cycleCount = 0;
398
+ _plans = [];
399
+ constructor(options = {}) {
400
+ super();
401
+ this.partitioner = new WorkloadPartitioner(this);
402
+ this.strategyFn = options.strategy ?? adaptiveStrategy;
403
+ this.evaluationInterval = options.evaluationInterval ?? 5000;
404
+ this.globalAgentLimit = options.globalAgentLimit ?? 10000;
405
+ this.globalBudgetLimit = options.globalBudgetLimit ?? Infinity;
406
+ if (options.autoStart)
407
+ this.start();
408
+ }
409
+ // --------------------------------------------------------------------------
410
+ // POOL MANAGEMENT
411
+ // --------------------------------------------------------------------------
412
+ /** Create an agent pool from a template */
413
+ createPool(template) {
414
+ if (this.pools.has(template.id)) {
415
+ throw new Error(`Pool "${template.id}" already exists`);
416
+ }
417
+ const pool = new AgentPool(template, this);
418
+ this.pools.set(template.id, pool);
419
+ this.emit('pool:created', template.id);
420
+ return pool;
421
+ }
422
+ /** Get a pool by template ID */
423
+ getPool(templateId) {
424
+ return this.pools.get(templateId);
425
+ }
426
+ /** List all pools */
427
+ listPools() {
428
+ const result = [];
429
+ for (const [id, pool] of this.pools) {
430
+ const pendingChunks = this.partitioner.getPendingForPool(id).length;
431
+ result.push(pool.getStatus(pendingChunks));
432
+ }
433
+ return result;
434
+ }
435
+ /** Remove a pool (recycles all agents first) */
436
+ removePool(templateId) {
437
+ const pool = this.pools.get(templateId);
438
+ if (!pool)
439
+ return false;
440
+ pool.recycle();
441
+ this.pools.delete(templateId);
442
+ return true;
443
+ }
444
+ /** Total active agents across all pools */
445
+ get totalActiveAgents() {
446
+ let total = 0;
447
+ for (const pool of this.pools.values())
448
+ total += pool.active;
449
+ return total;
450
+ }
451
+ /** Whether the global agent limit has been reached */
452
+ get atCapacity() {
453
+ return this.totalActiveAgents >= this.globalAgentLimit;
454
+ }
455
+ // --------------------------------------------------------------------------
456
+ // WORK DISTRIBUTION
457
+ // --------------------------------------------------------------------------
458
+ /**
459
+ * Distribute work items across a pool.
460
+ * Each input becomes a work chunk assigned to the pool.
461
+ */
462
+ distributeWork(inputs, targetPool, priority = 1) {
463
+ if (!this.pools.has(targetPool)) {
464
+ throw new Error(`Pool "${targetPool}" does not exist`);
465
+ }
466
+ return this.partitioner.partition(inputs, targetPool, priority);
467
+ }
468
+ /** Get work distribution status */
469
+ getWorkStatus() {
470
+ return this.partitioner.getCounts();
471
+ }
472
+ /** Access the partitioner directly */
473
+ get workload() {
474
+ return this.partitioner;
475
+ }
476
+ // --------------------------------------------------------------------------
477
+ // STRATEGY EVALUATION
478
+ // --------------------------------------------------------------------------
479
+ /** Take a snapshot of the current system state */
480
+ snapshot(budgetSpent = 0, budgetCeiling = 0, fsmState = 'unknown') {
481
+ const pools = new Map();
482
+ let runningAgents = 0;
483
+ let completedTasks = 0;
484
+ let failedTasks = 0;
485
+ let totalDuration = 0;
486
+ let durationCount = 0;
487
+ for (const [id, pool] of this.pools) {
488
+ const pendingChunks = this.partitioner.getPendingForPool(id).length;
489
+ pools.set(id, pool.getStatus(pendingChunks));
490
+ runningAgents += pool.active;
491
+ completedTasks += pool.completed;
492
+ failedTasks += pool.failed;
493
+ // Compute average task duration from completed agents
494
+ for (const agent of pool.getAgents()) {
495
+ if (agent.status === 'completed' && agent.completedAt) {
496
+ totalDuration += agent.completedAt - agent.spawnedAt;
497
+ durationCount++;
498
+ }
499
+ }
500
+ }
501
+ const counts = this.partitioner.getCounts();
502
+ return {
503
+ pools,
504
+ totalBudgetSpent: budgetSpent,
505
+ totalBudgetCeiling: budgetCeiling,
506
+ fsmState,
507
+ pendingChunks: counts.pending,
508
+ runningAgents,
509
+ completedTasks,
510
+ failedTasks,
511
+ averageTaskDuration: durationCount > 0 ? totalDuration / durationCount : 0,
512
+ timestamp: Date.now(),
513
+ };
514
+ }
515
+ /** Evaluate the current state and produce a strategy plan */
516
+ async evaluate(budgetSpent = 0, budgetCeiling = 0, fsmState = 'unknown') {
517
+ const snap = this.snapshot(budgetSpent, budgetCeiling, fsmState);
518
+ const plan = await this.strategyFn(snap);
519
+ this._plans.push(plan);
520
+ this.emit('plan:created', plan);
521
+ return plan;
522
+ }
523
+ /**
524
+ * Execute a strategy plan: scale pools, reallocate budgets, create chunks.
525
+ * Returns the number of actions taken.
526
+ */
527
+ executePlan(plan) {
528
+ let actions = 0;
529
+ // Scale up: spawn agents to reach target
530
+ for (const [poolId, target] of plan.scaleUp) {
531
+ const pool = this.pools.get(poolId);
532
+ if (!pool)
533
+ continue;
534
+ const toSpawn = target - pool.active;
535
+ for (let i = 0; i < toSpawn; i++) {
536
+ if (this.atCapacity)
537
+ break;
538
+ const pending = this.partitioner.getPendingForPool(poolId);
539
+ const chunk = pending[0];
540
+ const agent = pool.spawn(chunk?.id);
541
+ if (agent && chunk) {
542
+ this.partitioner.assign(chunk.id, agent.id);
543
+ }
544
+ if (agent)
545
+ actions++;
546
+ }
547
+ if (toSpawn > 0) {
548
+ this.emit('pool:scaled', poolId, pool.active - toSpawn, pool.active);
549
+ }
550
+ }
551
+ // Scale down: mark excess agents for recycling
552
+ for (const [poolId, _target] of plan.scaleDown) {
553
+ const pool = this.pools.get(poolId);
554
+ if (!pool)
555
+ continue;
556
+ const before = pool.active;
557
+ pool.recycle();
558
+ if (pool.active !== before) {
559
+ this.emit('pool:scaled', poolId, before, pool.active);
560
+ actions++;
561
+ }
562
+ }
563
+ // Budget reallocation
564
+ for (const [poolId, newBudget] of plan.budgetReallocation) {
565
+ const pool = this.pools.get(poolId);
566
+ if (!pool)
567
+ continue;
568
+ pool.template.budgetPerAgent = newBudget;
569
+ actions++;
570
+ }
571
+ // Create new chunks
572
+ for (const chunk of plan.newChunks) {
573
+ this.partitioner.partition([chunk.input], chunk.targetPool, chunk.priority);
574
+ actions++;
575
+ }
576
+ this.emit('plan:executed', plan);
577
+ return actions;
578
+ }
579
+ // --------------------------------------------------------------------------
580
+ // EVALUATION LOOP
581
+ // --------------------------------------------------------------------------
582
+ /** Start the automatic evaluation loop */
583
+ start() {
584
+ if (this.intervalHandle)
585
+ return;
586
+ this.intervalHandle = setInterval(async () => {
587
+ this._cycleCount++;
588
+ this.emit('cycle:start', this._cycleCount);
589
+ const plan = await this.evaluate();
590
+ this.executePlan(plan);
591
+ this.emit('cycle:end', this._cycleCount, plan);
592
+ }, this.evaluationInterval);
593
+ }
594
+ /** Stop the evaluation loop */
595
+ stop() {
596
+ if (this.intervalHandle) {
597
+ clearInterval(this.intervalHandle);
598
+ this.intervalHandle = null;
599
+ }
600
+ }
601
+ /** Whether the evaluation loop is running */
602
+ get isRunning() { return this.intervalHandle !== null; }
603
+ /** Number of evaluation cycles completed */
604
+ get cycleCount() { return this._cycleCount; }
605
+ /** All plans produced so far */
606
+ get planHistory() { return this._plans; }
607
+ // --------------------------------------------------------------------------
608
+ // CONVENIENCE
609
+ // --------------------------------------------------------------------------
610
+ /** Get a summary string of the current state */
611
+ summary() {
612
+ const pools = this.listPools();
613
+ const work = this.getWorkStatus();
614
+ const lines = [
615
+ `Pools: ${pools.length} | Active agents: ${this.totalActiveAgents}/${this.globalAgentLimit}`,
616
+ `Work: ${work.pending} pending, ${work.running} running, ${work.completed} completed, ${work.failed} failed`,
617
+ `Plans: ${this._plans.length} | Cycles: ${this._cycleCount}`,
618
+ ];
619
+ for (const p of pools) {
620
+ lines.push(` ${p.templateId}: ${p.active}/${p.maxConcurrent} active, ${p.completed} done, ${p.failed} failed, ${p.totalTokensUsed} tokens`);
621
+ }
622
+ return lines.join('\n');
623
+ }
624
+ }
625
+ exports.StrategyAgent = StrategyAgent;
626
+ //# sourceMappingURL=strategy-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-agent.js","sourceRoot":"","sources":["../../../lib/strategy-agent.ts"],"names":[],"mappings":"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"}