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,138 @@
1
+ "use strict";
2
+ /**
3
+ * ComparisonRunner — Run the same goal across two adapter configurations side-by-side
4
+ *
5
+ * Executes identical tasks through two different adapter setups and produces
6
+ * a structured comparison of results, timing, cost, and quality.
7
+ *
8
+ * Usage:
9
+ * const runner = new ComparisonRunner();
10
+ * const result = await runner.compare({
11
+ * goal: { action: 'review', params: { code: '...' } },
12
+ * configA: { name: 'GPT-4', adapter: openaiAdapter },
13
+ * configB: { name: 'Claude', adapter: anthropicAdapter },
14
+ * });
15
+ * runner.printReport(result);
16
+ *
17
+ * @module ComparisonRunner
18
+ * @version 1.0.0
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.ComparisonRunner = void 0;
22
+ // ============================================================================
23
+ // RUNNER
24
+ // ============================================================================
25
+ /**
26
+ * ComparisonRunner — Side-by-side adapter comparison.
27
+ */
28
+ class ComparisonRunner {
29
+ /**
30
+ * Run the same goal through two configurations and compare results.
31
+ */
32
+ async compare(input) {
33
+ const runs = input.runs ?? 1;
34
+ const [runsA, runsB] = await Promise.all([
35
+ this.runSide(input.configA, input.goal, runs, input.scorer),
36
+ this.runSide(input.configB, input.goal, runs, input.scorer),
37
+ ]);
38
+ const a = this.aggregateSide(input.configA.name, runsA, input.scorer);
39
+ const b = this.aggregateSide(input.configB.name, runsB, input.scorer);
40
+ const { winner, winReason } = this.determineWinner(a, b);
41
+ return {
42
+ goal: input.goal,
43
+ a,
44
+ b,
45
+ winner,
46
+ winReason,
47
+ comparedAt: Date.now(),
48
+ };
49
+ }
50
+ /**
51
+ * Print a human-readable comparison report.
52
+ */
53
+ printReport(result) {
54
+ const { a, b } = result;
55
+ console.log('═'.repeat(60));
56
+ console.log(' COMPARISON REPORT');
57
+ console.log('═'.repeat(60));
58
+ console.log(` A: ${a.name}`);
59
+ console.log(` B: ${b.name}`);
60
+ console.log('─'.repeat(60));
61
+ const rows = [
62
+ ['Metric', a.name, b.name],
63
+ ['Success Rate', `${pct(a.successRate)}`, `${pct(b.successRate)}`],
64
+ ['Avg Duration', `${a.avgDurationMs.toFixed(0)}ms`, `${b.avgDurationMs.toFixed(0)}ms`],
65
+ ];
66
+ if (a.avgScore !== null) {
67
+ rows.push(['Avg Score', `${a.avgScore.toFixed(1)}`, `${b.avgScore?.toFixed(1) ?? 'N/A'}`]);
68
+ }
69
+ if (a.avgCostUsd !== null) {
70
+ rows.push(['Avg Cost', `$${a.avgCostUsd.toFixed(4)}`, `$${b.avgCostUsd?.toFixed(4) ?? 'N/A'}`]);
71
+ }
72
+ for (const [label, va, vb] of rows) {
73
+ console.log(` ${label.padEnd(20)} ${va.padEnd(18)} ${vb}`);
74
+ }
75
+ console.log('─'.repeat(60));
76
+ console.log(` Winner: ${result.winner === 'TIE' ? 'TIE' : result.winner === 'A' ? a.name : b.name}`);
77
+ console.log(` Reason: ${result.winReason}`);
78
+ console.log('═'.repeat(60));
79
+ }
80
+ // --------------------------------------------------------------------------
81
+ // Internal
82
+ // --------------------------------------------------------------------------
83
+ async runSide(config, goal, runs, _scorer) {
84
+ const results = [];
85
+ for (let i = 0; i < runs; i++) {
86
+ const start = Date.now();
87
+ let output;
88
+ try {
89
+ output = await config.handler(goal);
90
+ }
91
+ catch (err) {
92
+ output = {
93
+ success: false,
94
+ error: err instanceof Error ? err.message : String(err),
95
+ };
96
+ }
97
+ results.push({ output, durationMs: Date.now() - start, runIndex: i });
98
+ }
99
+ return results;
100
+ }
101
+ aggregateSide(name, runs, scorer) {
102
+ const avgDurationMs = runs.reduce((s, r) => s + r.durationMs, 0) / runs.length;
103
+ const successRate = runs.filter((r) => r.output.success).length / runs.length;
104
+ let avgScore = null;
105
+ if (scorer) {
106
+ const scores = runs.map((r) => scorer(r.output));
107
+ avgScore = scores.reduce((s, v) => s + v, 0) / scores.length;
108
+ }
109
+ let avgCostUsd = null;
110
+ const costs = runs.map((r) => r.output.costUsd).filter((c) => c !== undefined);
111
+ if (costs.length > 0) {
112
+ avgCostUsd = costs.reduce((s, c) => s + c, 0) / costs.length;
113
+ }
114
+ return { name, runs, avgDurationMs, avgScore, avgCostUsd, successRate };
115
+ }
116
+ determineWinner(a, b) {
117
+ // Priority: success rate > score > speed > cost
118
+ if (a.successRate !== b.successRate) {
119
+ const w = a.successRate > b.successRate ? 'A' : 'B';
120
+ return { winner: w, winReason: `Higher success rate (${pct(Math.max(a.successRate, b.successRate))})` };
121
+ }
122
+ if (a.avgScore !== null && b.avgScore !== null && Math.abs(a.avgScore - b.avgScore) > 1) {
123
+ const w = a.avgScore > b.avgScore ? 'A' : 'B';
124
+ return { winner: w, winReason: `Higher quality score` };
125
+ }
126
+ const speedDiff = Math.abs(a.avgDurationMs - b.avgDurationMs);
127
+ if (speedDiff > a.avgDurationMs * 0.1) {
128
+ const w = a.avgDurationMs < b.avgDurationMs ? 'A' : 'B';
129
+ return { winner: w, winReason: `Faster execution` };
130
+ }
131
+ return { winner: 'TIE', winReason: 'No significant difference' };
132
+ }
133
+ }
134
+ exports.ComparisonRunner = ComparisonRunner;
135
+ function pct(n) {
136
+ return `${(n * 100).toFixed(0)}%`;
137
+ }
138
+ //# sourceMappingURL=comparison-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comparison-runner.js","sourceRoot":"","sources":["../../lib/comparison-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * ConfigWatcher — Hot-reload configuration from disk.
3
+ *
4
+ * Uses `fs.watch()` to monitor config files and applies changes to
5
+ * live CONFIG, trust levels, resource profiles, and budget ceilings.
6
+ * Emits events on reload so components can react.
7
+ *
8
+ * @module ConfigWatcher
9
+ */
10
+ import { EventEmitter } from 'events';
11
+ /** Fields that can be hot-reloaded on CONFIG */
12
+ export interface ReloadableConfig {
13
+ maxParallelAgents?: number;
14
+ defaultTimeout?: number;
15
+ enableTracing?: boolean;
16
+ grantTokenTTL?: number;
17
+ maxBlackboardValueSize?: number;
18
+ [key: string]: unknown;
19
+ }
20
+ /** Trust level entry */
21
+ export interface TrustEntry {
22
+ agentId: string;
23
+ level: number;
24
+ tags?: string[];
25
+ }
26
+ /** Budget overrides */
27
+ export interface BudgetOverrides {
28
+ ceiling?: number;
29
+ perAgentCeiling?: number;
30
+ }
31
+ /** Callback targets for reloaded config */
32
+ export interface ConfigTargets {
33
+ /** Mutable CONFIG object to patch in-place */
34
+ config?: Record<string, unknown>;
35
+ /** AuthGuardian instance — for trust level updates */
36
+ authGuardian?: {
37
+ setTrustLevel?(agentId: string, level: number): void;
38
+ };
39
+ /** FederatedBudget instance — for ceiling updates */
40
+ budget?: {
41
+ setCeiling?(ceiling: number): void;
42
+ };
43
+ }
44
+ /** Emitted on successful reload */
45
+ export interface ReloadEvent {
46
+ file: string;
47
+ timestamp: number;
48
+ changes: string[];
49
+ }
50
+ /** Emitted on reload error */
51
+ export interface ReloadError {
52
+ file: string;
53
+ timestamp: number;
54
+ error: string;
55
+ }
56
+ /**
57
+ * Watches config files on disk and applies changes to live objects.
58
+ *
59
+ * Supports three config file types:
60
+ * - **config.json** — patches `CONFIG` object fields
61
+ * - **trust_levels.json** — array of `{ agentId, level }` applied to AuthGuardian
62
+ * - **budget.json** — `{ ceiling, perAgentCeiling }` applied to FederatedBudget
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * const watcher = new ConfigWatcher({
67
+ * configPath: './data/config.json',
68
+ * trustPath: './data/trust_levels.json',
69
+ * targets: { config: CONFIG, authGuardian: guardian, budget: fed },
70
+ * });
71
+ * watcher.on('reload', (evt) => console.log('Reloaded:', evt.file));
72
+ * watcher.start();
73
+ * // ... later
74
+ * watcher.stop();
75
+ * ```
76
+ */
77
+ export declare class ConfigWatcher extends EventEmitter {
78
+ private watchers;
79
+ private targets;
80
+ private configPath?;
81
+ private trustPath?;
82
+ private budgetPath?;
83
+ private debounceMs;
84
+ private debounceTimers;
85
+ private running;
86
+ constructor(options?: {
87
+ configPath?: string;
88
+ trustPath?: string;
89
+ budgetPath?: string;
90
+ targets?: ConfigTargets;
91
+ debounceMs?: number;
92
+ });
93
+ /** Update targets after construction */
94
+ setTargets(targets: ConfigTargets): void;
95
+ /** Start watching all configured paths */
96
+ start(): void;
97
+ /** Stop all watchers */
98
+ stop(): void;
99
+ /** Manually trigger a reload for a specific file */
100
+ reload(filePath: string): void;
101
+ /** Whether the watcher is currently active */
102
+ isRunning(): boolean;
103
+ private debouncedReload;
104
+ private applyReload;
105
+ private applyConfig;
106
+ private applyTrust;
107
+ private applyBudget;
108
+ }
109
+ //# sourceMappingURL=config-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-watcher.d.ts","sourceRoot":"","sources":["../../lib/config-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC,gDAAgD;AAChD,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAwB;AACxB,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,uBAAuB;AACvB,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,2CAA2C;AAC3C,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,sDAAsD;IACtD,YAAY,CAAC,EAAE;QAAE,aAAa,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACxE,qDAAqD;IACrD,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACjD;AAED,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,8BAA8B;AAC9B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAyD;IAC/E,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,aAAa,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;KAChB;IASN,wCAAwC;IACxC,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIxC,0CAA0C;IAC1C,KAAK,IAAI,IAAI;IAkBb,wBAAwB;IACxB,IAAI,IAAI,IAAI;IAUZ,oDAAoD;IACpD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI9B,8CAA8C;IAC9C,SAAS,IAAI,OAAO;IAQpB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,WAAW;CAQpB"}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ /**
3
+ * ConfigWatcher — Hot-reload configuration from disk.
4
+ *
5
+ * Uses `fs.watch()` to monitor config files and applies changes to
6
+ * live CONFIG, trust levels, resource profiles, and budget ceilings.
7
+ * Emits events on reload so components can react.
8
+ *
9
+ * @module ConfigWatcher
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.ConfigWatcher = void 0;
46
+ const events_1 = require("events");
47
+ const fs = __importStar(require("fs"));
48
+ const path = __importStar(require("path"));
49
+ // ============================================================================
50
+ // CONFIG WATCHER
51
+ // ============================================================================
52
+ /**
53
+ * Watches config files on disk and applies changes to live objects.
54
+ *
55
+ * Supports three config file types:
56
+ * - **config.json** — patches `CONFIG` object fields
57
+ * - **trust_levels.json** — array of `{ agentId, level }` applied to AuthGuardian
58
+ * - **budget.json** — `{ ceiling, perAgentCeiling }` applied to FederatedBudget
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * const watcher = new ConfigWatcher({
63
+ * configPath: './data/config.json',
64
+ * trustPath: './data/trust_levels.json',
65
+ * targets: { config: CONFIG, authGuardian: guardian, budget: fed },
66
+ * });
67
+ * watcher.on('reload', (evt) => console.log('Reloaded:', evt.file));
68
+ * watcher.start();
69
+ * // ... later
70
+ * watcher.stop();
71
+ * ```
72
+ */
73
+ class ConfigWatcher extends events_1.EventEmitter {
74
+ watchers = [];
75
+ targets;
76
+ configPath;
77
+ trustPath;
78
+ budgetPath;
79
+ debounceMs;
80
+ debounceTimers = new Map();
81
+ running = false;
82
+ constructor(options = {}) {
83
+ super();
84
+ this.configPath = options.configPath;
85
+ this.trustPath = options.trustPath;
86
+ this.budgetPath = options.budgetPath;
87
+ this.targets = options.targets ?? {};
88
+ this.debounceMs = options.debounceMs ?? 300;
89
+ }
90
+ /** Update targets after construction */
91
+ setTargets(targets) {
92
+ Object.assign(this.targets, targets);
93
+ }
94
+ /** Start watching all configured paths */
95
+ start() {
96
+ if (this.running)
97
+ return;
98
+ this.running = true;
99
+ const paths = [this.configPath, this.trustPath, this.budgetPath].filter(Boolean);
100
+ for (const filePath of paths) {
101
+ try {
102
+ if (!fs.existsSync(filePath))
103
+ continue;
104
+ const watcher = fs.watch(filePath, { persistent: false }, (_event) => {
105
+ this.debouncedReload(filePath);
106
+ });
107
+ this.watchers.push(watcher);
108
+ }
109
+ catch {
110
+ // File doesn't exist or not watchable — skip silently
111
+ }
112
+ }
113
+ }
114
+ /** Stop all watchers */
115
+ stop() {
116
+ this.running = false;
117
+ for (const w of this.watchers) {
118
+ try {
119
+ w.close();
120
+ }
121
+ catch { /* ignore */ }
122
+ }
123
+ this.watchers = [];
124
+ for (const timer of this.debounceTimers.values())
125
+ clearTimeout(timer);
126
+ this.debounceTimers.clear();
127
+ }
128
+ /** Manually trigger a reload for a specific file */
129
+ reload(filePath) {
130
+ this.applyReload(filePath);
131
+ }
132
+ /** Whether the watcher is currently active */
133
+ isRunning() {
134
+ return this.running;
135
+ }
136
+ // --------------------------------------------------------------------------
137
+ // INTERNAL
138
+ // --------------------------------------------------------------------------
139
+ debouncedReload(filePath) {
140
+ const existing = this.debounceTimers.get(filePath);
141
+ if (existing)
142
+ clearTimeout(existing);
143
+ this.debounceTimers.set(filePath, setTimeout(() => {
144
+ this.debounceTimers.delete(filePath);
145
+ this.applyReload(filePath);
146
+ }, this.debounceMs));
147
+ }
148
+ applyReload(filePath) {
149
+ try {
150
+ const resolved = path.resolve(filePath);
151
+ const raw = fs.readFileSync(resolved, 'utf-8');
152
+ const data = JSON.parse(raw);
153
+ const changes = [];
154
+ if (resolved === path.resolve(this.configPath ?? '')) {
155
+ this.applyConfig(data, changes);
156
+ }
157
+ else if (resolved === path.resolve(this.trustPath ?? '')) {
158
+ this.applyTrust(data, changes);
159
+ }
160
+ else if (resolved === path.resolve(this.budgetPath ?? '')) {
161
+ this.applyBudget(data, changes);
162
+ }
163
+ const evt = { file: filePath, timestamp: Date.now(), changes };
164
+ this.emit('reload', evt);
165
+ }
166
+ catch (err) {
167
+ const errEvt = {
168
+ file: filePath,
169
+ timestamp: Date.now(),
170
+ error: err instanceof Error ? err.message : String(err),
171
+ };
172
+ this.emit('error', errEvt);
173
+ }
174
+ }
175
+ applyConfig(data, changes) {
176
+ if (!this.targets.config || typeof data !== 'object' || data === null)
177
+ return;
178
+ const obj = data;
179
+ const allowed = new Set([
180
+ 'maxParallelAgents', 'defaultTimeout', 'enableTracing',
181
+ 'grantTokenTTL', 'maxBlackboardValueSize',
182
+ ]);
183
+ for (const [key, value] of Object.entries(obj)) {
184
+ if (allowed.has(key)) {
185
+ this.targets.config[key] = value;
186
+ changes.push(`config.${key}=${JSON.stringify(value)}`);
187
+ }
188
+ }
189
+ }
190
+ applyTrust(data, changes) {
191
+ if (!this.targets.authGuardian?.setTrustLevel || !Array.isArray(data))
192
+ return;
193
+ for (const entry of data) {
194
+ if (typeof entry === 'object' && entry !== null &&
195
+ 'agentId' in entry && 'level' in entry &&
196
+ typeof entry.agentId === 'string' &&
197
+ typeof entry.level === 'number') {
198
+ const { agentId, level } = entry;
199
+ this.targets.authGuardian.setTrustLevel(agentId, level);
200
+ changes.push(`trust.${agentId}=${level}`);
201
+ }
202
+ }
203
+ }
204
+ applyBudget(data, changes) {
205
+ if (!this.targets.budget?.setCeiling || typeof data !== 'object' || data === null)
206
+ return;
207
+ const obj = data;
208
+ if (typeof obj.ceiling === 'number') {
209
+ this.targets.budget.setCeiling(obj.ceiling);
210
+ changes.push(`budget.ceiling=${obj.ceiling}`);
211
+ }
212
+ }
213
+ }
214
+ exports.ConfigWatcher = ConfigWatcher;
215
+ //# sourceMappingURL=config-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-watcher.js","sourceRoot":"","sources":["../../lib/config-watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * ControlPlane — Unified multi-workspace dashboard server
3
+ *
4
+ * Provides a single HTTP + WebSocket server that aggregates multiple
5
+ * WorkTrees and LockedBlackboards into one live dashboard. Users register
6
+ * named workspaces; the browser UI lets operators switch between them
7
+ * and view Task Trees, Agent orchestration, and Blackboard state.
8
+ *
9
+ * ```typescript
10
+ * const cp = new ControlPlane({ port: 4800 });
11
+ * cp.addWorkspace('feature-x', { tree: myTree, blackboard: myBB });
12
+ * cp.addWorkspace('feature-y', { tree: otherTree });
13
+ * await cp.start();
14
+ * // Open http://127.0.0.1:4800
15
+ * ```
16
+ *
17
+ * @module ControlPlane
18
+ * @version 1.0.0
19
+ */
20
+ import { EventEmitter } from 'events';
21
+ import type { WorkTree } from './work-tree';
22
+ import type { LockedBlackboard } from './locked-blackboard';
23
+ /** Configuration for a single workspace */
24
+ export interface WorkspaceConfig {
25
+ /** Hierarchical task tree (enables Tree + Agents tabs) */
26
+ tree?: WorkTree;
27
+ /** Shared blackboard (enables Blackboard tab) */
28
+ blackboard?: LockedBlackboard;
29
+ }
30
+ /** A log entry for an agent */
31
+ export interface AgentLogEntry {
32
+ time: string;
33
+ message: string;
34
+ level: 'info' | 'warn' | 'error';
35
+ }
36
+ /** Agent info for the dashboard */
37
+ export interface CPAgentInfo {
38
+ name: string;
39
+ role: 'orchestrator' | 'worker';
40
+ status: 'idle' | 'busy' | 'error';
41
+ tasks: Array<{
42
+ id: string;
43
+ label: string;
44
+ status: string;
45
+ }>;
46
+ currentTask: string | null;
47
+ logs: AgentLogEntry[];
48
+ tokens: number;
49
+ }
50
+ /** Workspace summary for the workspace picker */
51
+ export interface WorkspaceSummary {
52
+ name: string;
53
+ hasTree: boolean;
54
+ hasBlackboard: boolean;
55
+ nodeCount: number;
56
+ progress: number;
57
+ bbKeyCount: number;
58
+ }
59
+ /** Options for the ControlPlane */
60
+ export interface ControlPlaneOptions {
61
+ /** TCP port (default: 4800) */
62
+ port?: number;
63
+ /** Hostname (default: '127.0.0.1') */
64
+ host?: string;
65
+ }
66
+ /**
67
+ * Unified dashboard server for multiple WorkTrees and Blackboards.
68
+ *
69
+ * Register named workspaces, then open the browser to see them all.
70
+ */
71
+ export declare class ControlPlane extends EventEmitter {
72
+ private readonly port;
73
+ private readonly host;
74
+ private server;
75
+ private clients;
76
+ private workspaces;
77
+ private pingInterval;
78
+ private bbPollInterval;
79
+ private clientCounter;
80
+ private pendingBroadcasts;
81
+ constructor(options?: ControlPlaneOptions);
82
+ /**
83
+ * Register a named workspace with an optional WorkTree and/or Blackboard.
84
+ */
85
+ addWorkspace(name: string, config: WorkspaceConfig): void;
86
+ /**
87
+ * Remove a workspace.
88
+ */
89
+ removeWorkspace(name: string): boolean;
90
+ /**
91
+ * Set the orchestrator agent for a workspace.
92
+ */
93
+ setOrchestrator(workspaceName: string, agentName: string): void;
94
+ /**
95
+ * Push a log entry to an agent in a workspace.
96
+ */
97
+ pushLog(workspaceName: string, agent: string, message: string, level?: 'info' | 'warn' | 'error'): void;
98
+ /**
99
+ * Push a narrative message to the orchestrator log for a workspace.
100
+ */
101
+ pushNarrative(workspaceName: string, message: string): void;
102
+ /**
103
+ * List all registered workspace names.
104
+ */
105
+ listWorkspaces(): string[];
106
+ /** Start the ControlPlane server. */
107
+ start(): Promise<void>;
108
+ /** Stop the ControlPlane server. */
109
+ stop(): Promise<void>;
110
+ /** Number of connected clients. */
111
+ clientCount(): number;
112
+ /** Dashboard URL. */
113
+ get url(): string;
114
+ private handleHTTP;
115
+ private handleUpgrade;
116
+ private handleClientMessage;
117
+ private buildWorkspaceList;
118
+ private buildWorkspaceData;
119
+ private buildAgentMap;
120
+ private sendWorkspaceSnapshot;
121
+ private scheduleBroadcast;
122
+ private broadcastWorkspaceList;
123
+ /** Track last BB snapshot hashes for change detection */
124
+ private bbHashes;
125
+ private pollBlackboards;
126
+ private pingClients;
127
+ }
128
+ //# sourceMappingURL=control-plane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-plane.d.ts","sourceRoot":"","sources":["../../lib/control-plane.ts"],"names":[],"mappings":"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"}