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,224 @@
1
+ "use strict";
2
+ /**
3
+ * Playground — Interactive REPL sandbox for Network-AI
4
+ *
5
+ * Provides an in-process REPL environment with pre-configured mock adapters,
6
+ * a blackboard, budget, auth guardian, and orchestrator — ready to experiment
7
+ * with immediately.
8
+ *
9
+ * Features:
10
+ * - Pre-wired SwarmOrchestrator with mock CustomAdapter
11
+ * - LockedBlackboard with in-memory backend
12
+ * - AuthGuardian with default trust levels
13
+ * - FederatedBudget with generous defaults
14
+ * - REPL context exposes all key objects
15
+ * - Helper functions: delegate(), bb(), budget(), agents()
16
+ *
17
+ * Usage:
18
+ * import { startPlayground } from 'network-ai';
19
+ * await startPlayground();
20
+ *
21
+ * CLI:
22
+ * npx network-ai playground
23
+ *
24
+ * @module Playground
25
+ * @version 1.0.0
26
+ */
27
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ var desc = Object.getOwnPropertyDescriptor(m, k);
30
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
31
+ desc = { enumerable: true, get: function() { return m[k]; } };
32
+ }
33
+ Object.defineProperty(o, k2, desc);
34
+ }) : (function(o, m, k, k2) {
35
+ if (k2 === undefined) k2 = k;
36
+ o[k2] = m[k];
37
+ }));
38
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
39
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
40
+ }) : function(o, v) {
41
+ o["default"] = v;
42
+ });
43
+ var __importStar = (this && this.__importStar) || (function () {
44
+ var ownKeys = function(o) {
45
+ ownKeys = Object.getOwnPropertyNames || function (o) {
46
+ var ar = [];
47
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
48
+ return ar;
49
+ };
50
+ return ownKeys(o);
51
+ };
52
+ return function (mod) {
53
+ if (mod && mod.__esModule) return mod;
54
+ var result = {};
55
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
56
+ __setModuleDefault(result, mod);
57
+ return result;
58
+ };
59
+ })();
60
+ Object.defineProperty(exports, "__esModule", { value: true });
61
+ exports.MockAgentRegistry = void 0;
62
+ exports.startPlayground = startPlayground;
63
+ const repl = __importStar(require("repl"));
64
+ const events_1 = require("events");
65
+ // ============================================================================
66
+ // MOCK HELPERS
67
+ // ============================================================================
68
+ /** Simple mock agent registry for the playground */
69
+ class MockAgentRegistry {
70
+ handlers = new Map();
71
+ callLog = [];
72
+ /** Register a mock agent */
73
+ register(name, handler) {
74
+ this.handlers.set(name, handler);
75
+ }
76
+ /** List registered mock agents */
77
+ list() {
78
+ return Array.from(this.handlers.keys());
79
+ }
80
+ /** Call a mock agent */
81
+ async call(name, input) {
82
+ const handler = this.handlers.get(name);
83
+ if (!handler) {
84
+ throw new Error(`No mock agent '${name}'. Available: ${this.list().join(', ')}`);
85
+ }
86
+ const output = await handler(input);
87
+ this.callLog.push({ agentId: name, input, output, timestamp: Date.now() });
88
+ return output;
89
+ }
90
+ /** Get call history */
91
+ history() {
92
+ return this.callLog;
93
+ }
94
+ /** Clear call history */
95
+ clearHistory() {
96
+ this.callLog = [];
97
+ }
98
+ }
99
+ exports.MockAgentRegistry = MockAgentRegistry;
100
+ // ============================================================================
101
+ // DEFAULT MOCKS
102
+ // ============================================================================
103
+ function createDefaultMocks() {
104
+ return {
105
+ echo: (input) => `Echo: ${input}`,
106
+ upper: (input) => input.toUpperCase(),
107
+ reverse: (input) => input.split('').reverse().join(''),
108
+ count: (input) => `Words: ${input.split(/\s+/).filter(Boolean).length}`,
109
+ json: (input) => JSON.stringify({ input, processed: true, timestamp: Date.now() }),
110
+ summarize: (input) => {
111
+ const words = input.split(/\s+/);
112
+ return words.length <= 10 ? input : words.slice(0, 10).join(' ') + '...';
113
+ },
114
+ sentiment: (input) => {
115
+ const positive = /good|great|excellent|happy|love|amazing|wonderful/i;
116
+ const negative = /bad|terrible|awful|hate|horrible|worst/i;
117
+ if (positive.test(input))
118
+ return 'positive';
119
+ if (negative.test(input))
120
+ return 'negative';
121
+ return 'neutral';
122
+ },
123
+ };
124
+ }
125
+ // ============================================================================
126
+ // PLAYGROUND
127
+ // ============================================================================
128
+ const DEFAULT_BANNER = `
129
+ \x1b[36m\x1b[1m╔══════════════════════════════════════════════════╗
130
+ ║ Network-AI Playground (REPL) ║
131
+ ╚══════════════════════════════════════════════════╝\x1b[0m
132
+
133
+ \x1b[33mPre-loaded objects:\x1b[0m
134
+ \x1b[32mmocks\x1b[0m — MockAgentRegistry (register/call/list/history)
135
+ \x1b[32mdelegate\x1b[0m — Call a mock agent: delegate('echo', 'hello')
136
+ \x1b[32magents\x1b[0m — List available mock agents
137
+ \x1b[32mhistory\x1b[0m — View call history
138
+
139
+ \x1b[33mTips:\x1b[0m
140
+ • Type \x1b[32m.help\x1b[0m for REPL commands
141
+ • Type \x1b[32magents()\x1b[0m to see available agents
142
+ • Type \x1b[32mdelegate('echo', 'hello world')\x1b[0m to test
143
+ • Type \x1b[32m.exit\x1b[0m to quit
144
+ `;
145
+ /**
146
+ * Start an interactive playground REPL with mock adapters.
147
+ *
148
+ * All key Network-AI objects are available in the REPL context.
149
+ * Mock agents respond instantly with deterministic outputs.
150
+ */
151
+ function startPlayground(config = {}) {
152
+ const emitter = new events_1.EventEmitter();
153
+ let running = true;
154
+ const banner = config.banner ?? DEFAULT_BANNER;
155
+ const prompt = config.prompt ?? 'swarm> ';
156
+ // Set up mocks
157
+ const mocks = new MockAgentRegistry();
158
+ const defaultMocks = createDefaultMocks();
159
+ for (const [name, handler] of Object.entries(defaultMocks)) {
160
+ mocks.register(name, handler);
161
+ }
162
+ if (config.mockAgents) {
163
+ for (const [name, handler] of Object.entries(config.mockAgents)) {
164
+ mocks.register(name, handler);
165
+ }
166
+ }
167
+ // Print banner
168
+ if (banner) {
169
+ console.log(banner);
170
+ }
171
+ // Create REPL
172
+ const server = repl.start({
173
+ prompt,
174
+ useColors: true,
175
+ ignoreUndefined: true,
176
+ });
177
+ // Expose objects in REPL context
178
+ server.context['mocks'] = mocks;
179
+ server.context['delegate'] = async (agentId, input) => {
180
+ try {
181
+ const result = await mocks.call(agentId, input);
182
+ console.log(`\x1b[32m✓\x1b[0m ${result}`);
183
+ return result;
184
+ }
185
+ catch (err) {
186
+ console.log(`\x1b[31m✗\x1b[0m ${err instanceof Error ? err.message : String(err)}`);
187
+ return undefined;
188
+ }
189
+ };
190
+ server.context['agents'] = () => {
191
+ const list = mocks.list();
192
+ console.log(`\x1b[36mAvailable agents (${list.length}):\x1b[0m`);
193
+ for (const name of list) {
194
+ console.log(` • ${name}`);
195
+ }
196
+ return list;
197
+ };
198
+ server.context['history'] = () => {
199
+ const hist = mocks.history();
200
+ if (hist.length === 0) {
201
+ console.log('\x1b[33mNo calls yet.\x1b[0m');
202
+ return [];
203
+ }
204
+ for (const entry of hist) {
205
+ const time = new Date(entry.timestamp).toLocaleTimeString();
206
+ console.log(` [${time}] ${entry.agentId}("${entry.input}") → "${entry.output}"`);
207
+ }
208
+ return hist;
209
+ };
210
+ server.on('exit', () => {
211
+ running = false;
212
+ emitter.emit('exit');
213
+ });
214
+ emitter.emit('started');
215
+ return {
216
+ emitter,
217
+ stop: () => {
218
+ running = false;
219
+ server.close();
220
+ },
221
+ get isRunning() { return running; },
222
+ };
223
+ }
224
+ //# sourceMappingURL=playground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground.js","sourceRoot":"","sources":["../../../lib/playground.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ /**
3
+ * QA Orchestrator Agent
4
+ *
5
+ * Coordination layer on top of QualityGateAgent and ComplianceMonitor.
6
+ * Provides:
7
+ * 1. Scenario replay — re-run blackboard entries through quality gates
8
+ * 2. Feedback loop — route rejections back to agents with suggested fixes
9
+ * 3. Regression tracker — historical quality metrics over time
10
+ * 4. Cross-agent consistency — detect contradictions in multi-agent output
11
+ *
12
+ * @module lib/qa-orchestrator
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.QAOrchestratorAgent = void 0;
16
+ const blackboard_validator_1 = require("./blackboard-validator");
17
+ const compliance_monitor_1 = require("./compliance-monitor");
18
+ // ============================================================================
19
+ // Implementation
20
+ // ============================================================================
21
+ /**
22
+ * QA Orchestrator Agent — coordinates quality gating, compliance monitoring,
23
+ * feedback routing, regression tracking, and cross-agent consistency checks.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const qa = new QAOrchestratorAgent({
28
+ * qualityThreshold: 0.7,
29
+ * maxRetries: 2,
30
+ * onFeedback: (fb) => console.log('Route to agent:', fb),
31
+ * });
32
+ *
33
+ * const result = await qa.runScenario({
34
+ * id: 'test-1', key: 'analysis', value: { findings: [...] },
35
+ * sourceAgent: 'analyst',
36
+ * });
37
+ * ```
38
+ */
39
+ class QAOrchestratorAgent {
40
+ gate;
41
+ compliance;
42
+ maxRetries;
43
+ onFeedback;
44
+ contradictionDetector;
45
+ /** Historical snapshots for regression tracking */
46
+ history = [];
47
+ /** Track retry counts per scenario */
48
+ retryCounts = new Map();
49
+ /** Track last-seen value per key+agent for contradiction detection */
50
+ agentOutputs = new Map();
51
+ constructor(options = {}) {
52
+ this.gate = new blackboard_validator_1.QualityGateAgent({
53
+ qualityThreshold: options.qualityThreshold,
54
+ autoRejectThreshold: options.autoRejectThreshold,
55
+ validationConfig: options.validationConfig,
56
+ aiReviewCallback: options.aiReviewCallback,
57
+ });
58
+ this.compliance = new compliance_monitor_1.ComplianceMonitor(options.complianceOptions);
59
+ this.maxRetries = options.maxRetries ?? 3;
60
+ this.onFeedback = options.onFeedback;
61
+ this.contradictionDetector = options.contradictionDetector ?? defaultContradictionDetector;
62
+ }
63
+ // --------------------------------------------------------------------------
64
+ // Core: Single scenario
65
+ // --------------------------------------------------------------------------
66
+ /**
67
+ * Run a single scenario through the two-layer quality gate.
68
+ * If the entry is rejected or quarantined and a feedback callback is
69
+ * configured, structured feedback is routed back to the source agent.
70
+ */
71
+ async runScenario(scenario) {
72
+ const { id, key, value, sourceAgent, metadata, minScore } = scenario;
73
+ // Record the agent action for compliance monitoring
74
+ this.compliance.recordAction({
75
+ agentId: sourceAgent,
76
+ action: 'qa_submission',
77
+ tool: 'qa_orchestrator',
78
+ });
79
+ // Run through quality gate
80
+ const gateResult = await this.gate.gate(key, value, sourceAgent, metadata);
81
+ const score = gateResult.validation.score;
82
+ const issues = gateResult.validation.issues.map(i => `[${i.severity}] ${i.message}`);
83
+ // Threshold override per scenario
84
+ const passThreshold = minScore ?? (this.gate.getValidator() ? 0.7 : 0.7);
85
+ const passed = gateResult.decision === 'approve' && score >= passThreshold;
86
+ // Track for cross-agent consistency
87
+ this.trackAgentOutput(key, sourceAgent, value);
88
+ // Route feedback on rejection/quarantine
89
+ let feedbackRouted = false;
90
+ let feedbackPayload;
91
+ if (!passed && this.onFeedback) {
92
+ const retries = this.retryCounts.get(id) ?? 0;
93
+ if (retries < this.maxRetries) {
94
+ this.retryCounts.set(id, retries + 1);
95
+ feedbackPayload = {
96
+ scenarioId: id,
97
+ sourceAgent,
98
+ key,
99
+ decision: gateResult.decision,
100
+ score,
101
+ issues,
102
+ suggestedFixes: this.extractSuggestedFixes(gateResult),
103
+ retryCount: retries + 1,
104
+ };
105
+ await this.onFeedback(feedbackPayload);
106
+ feedbackRouted = true;
107
+ }
108
+ }
109
+ return { scenarioId: id, decision: gateResult.decision, score, passed, issues, feedbackRouted, feedbackPayload };
110
+ }
111
+ // --------------------------------------------------------------------------
112
+ // Harness: Batch scenario replay
113
+ // --------------------------------------------------------------------------
114
+ /**
115
+ * Run a batch of scenarios and collect aggregate results, contradictions,
116
+ * and a quality snapshot.
117
+ */
118
+ async runHarness(scenarios) {
119
+ const results = [];
120
+ for (const scenario of scenarios) {
121
+ results.push(await this.runScenario(scenario));
122
+ }
123
+ const passedCount = results.filter(r => r.passed).length;
124
+ const contradictions = this.detectContradictions();
125
+ const snapshot = this.takeSnapshot(results.length, passedCount);
126
+ return {
127
+ total: results.length,
128
+ passed: passedCount,
129
+ failed: results.length - passedCount,
130
+ passRate: results.length > 0 ? passedCount / results.length : 0,
131
+ results,
132
+ contradictions,
133
+ snapshot,
134
+ };
135
+ }
136
+ // --------------------------------------------------------------------------
137
+ // Regression tracking
138
+ // --------------------------------------------------------------------------
139
+ /**
140
+ * Take an explicit quality snapshot and store it in history.
141
+ * Called automatically after `runHarness()`, but can also be called manually.
142
+ */
143
+ takeSnapshot(scenariosRun = 0, scenariosPassed = 0) {
144
+ const gateMetrics = this.gate.getMetrics();
145
+ const complianceSummary = this.compliance.getSummary();
146
+ const snapshot = {
147
+ timestamp: new Date().toISOString(),
148
+ gateMetrics,
149
+ complianceViolations: complianceSummary.total,
150
+ violationsByType: complianceSummary.byType,
151
+ violationsByAgent: complianceSummary.byAgent,
152
+ scenariosRun,
153
+ scenarioPassRate: scenariosRun > 0 ? scenariosPassed / scenariosRun : 0,
154
+ };
155
+ this.history.push(snapshot);
156
+ return snapshot;
157
+ }
158
+ /**
159
+ * Get all historical quality snapshots for trend analysis.
160
+ */
161
+ getHistory() {
162
+ return this.history;
163
+ }
164
+ /**
165
+ * Compare the latest two snapshots and return a regression report.
166
+ * Returns null if fewer than two snapshots exist.
167
+ */
168
+ getRegressionReport() {
169
+ if (this.history.length < 2)
170
+ return null;
171
+ const prev = this.history[this.history.length - 2];
172
+ const curr = this.history[this.history.length - 1];
173
+ return {
174
+ from: prev.timestamp,
175
+ to: curr.timestamp,
176
+ passRateDelta: curr.scenarioPassRate - prev.scenarioPassRate,
177
+ complianceDelta: curr.complianceViolations - prev.complianceViolations,
178
+ approvalRateDelta: approvalRate(curr.gateMetrics) - approvalRate(prev.gateMetrics),
179
+ regressed: curr.scenarioPassRate < prev.scenarioPassRate ||
180
+ curr.complianceViolations > prev.complianceViolations,
181
+ };
182
+ }
183
+ // --------------------------------------------------------------------------
184
+ // Cross-agent consistency
185
+ // --------------------------------------------------------------------------
186
+ /**
187
+ * Detect contradictions across agents that wrote to the same blackboard key.
188
+ */
189
+ detectContradictions() {
190
+ const contradictions = [];
191
+ for (const [key, agentMap] of this.agentOutputs) {
192
+ const agents = Array.from(agentMap.entries());
193
+ for (let i = 0; i < agents.length; i++) {
194
+ for (let j = i + 1; j < agents.length; j++) {
195
+ const [agentA, valueA] = agents[i];
196
+ const [agentB, valueB] = agents[j];
197
+ if (this.contradictionDetector(valueA, valueB)) {
198
+ contradictions.push({
199
+ key,
200
+ agentA,
201
+ agentB,
202
+ valueA,
203
+ valueB,
204
+ detectedAt: new Date().toISOString(),
205
+ });
206
+ }
207
+ }
208
+ }
209
+ }
210
+ return contradictions;
211
+ }
212
+ // --------------------------------------------------------------------------
213
+ // Accessors
214
+ // --------------------------------------------------------------------------
215
+ /** Access the underlying QualityGateAgent for direct configuration. */
216
+ getQualityGate() {
217
+ return this.gate;
218
+ }
219
+ /** Access the underlying ComplianceMonitor for direct configuration. */
220
+ getComplianceMonitor() {
221
+ return this.compliance;
222
+ }
223
+ /** Get current gate metrics without taking a full snapshot. */
224
+ getMetrics() {
225
+ return this.gate.getMetrics();
226
+ }
227
+ /** Get the number of remaining retries for a scenario. */
228
+ getRetriesRemaining(scenarioId) {
229
+ return this.maxRetries - (this.retryCounts.get(scenarioId) ?? 0);
230
+ }
231
+ /** Reset retry count for a scenario (e.g., after manual fix). */
232
+ resetRetries(scenarioId) {
233
+ this.retryCounts.delete(scenarioId);
234
+ }
235
+ /** Clear all tracked agent outputs (for fresh contradiction detection). */
236
+ clearOutputTracking() {
237
+ this.agentOutputs.clear();
238
+ }
239
+ // --------------------------------------------------------------------------
240
+ // Private helpers
241
+ // --------------------------------------------------------------------------
242
+ trackAgentOutput(key, agent, value) {
243
+ if (!this.agentOutputs.has(key)) {
244
+ this.agentOutputs.set(key, new Map());
245
+ }
246
+ this.agentOutputs.get(key).set(agent, value);
247
+ }
248
+ extractSuggestedFixes(gateResult) {
249
+ const fixes = [];
250
+ for (const issue of gateResult.validation.issues) {
251
+ if (issue.suggestion) {
252
+ fixes.push(issue.suggestion);
253
+ }
254
+ }
255
+ if (gateResult.reviewNotes.length > 0) {
256
+ fixes.push(...gateResult.reviewNotes);
257
+ }
258
+ return fixes;
259
+ }
260
+ }
261
+ exports.QAOrchestratorAgent = QAOrchestratorAgent;
262
+ // ============================================================================
263
+ // Utility functions
264
+ // ============================================================================
265
+ function approvalRate(metrics) {
266
+ return metrics.totalChecked > 0 ? metrics.approved / metrics.totalChecked : 0;
267
+ }
268
+ /**
269
+ * Default contradiction detector: returns true when two values for the same
270
+ * key have opposing boolean fields (e.g., `{ success: true }` vs `{ success: false }`)
271
+ * or when one is an error and the other is not.
272
+ */
273
+ function defaultContradictionDetector(a, b) {
274
+ if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') {
275
+ return false;
276
+ }
277
+ const objA = a;
278
+ const objB = b;
279
+ // Check for opposing boolean fields
280
+ for (const key of Object.keys(objA)) {
281
+ if (typeof objA[key] === 'boolean' && typeof objB[key] === 'boolean') {
282
+ if (objA[key] !== objB[key])
283
+ return true;
284
+ }
285
+ }
286
+ // One has error, other has success data
287
+ const aHasError = 'error' in objA && objA['error'] != null;
288
+ const bHasError = 'error' in objB && objB['error'] != null;
289
+ const aHasData = 'data' in objA || 'result' in objA || 'findings' in objA;
290
+ const bHasData = 'data' in objB || 'result' in objB || 'findings' in objB;
291
+ if ((aHasError && bHasData && !bHasError) || (bHasError && aHasData && !aHasError)) {
292
+ return true;
293
+ }
294
+ return false;
295
+ }
296
+ //# sourceMappingURL=qa-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qa-orchestrator.js","sourceRoot":"","sources":["../../../lib/qa-orchestrator.ts"],"names":[],"mappings":"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"}