network-ai 5.10.2 → 5.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/INTEGRATION_GUIDE.md +2 -2
  2. package/QUICKSTART.md +10 -0
  3. package/README.md +32 -3
  4. package/SKILL.md +3 -3
  5. package/dist/esm/adapters/a2a-adapter.js +235 -0
  6. package/dist/esm/adapters/a2a-adapter.js.map +1 -0
  7. package/dist/esm/adapters/adapter-registry.js +613 -0
  8. package/dist/esm/adapters/adapter-registry.js.map +1 -0
  9. package/dist/esm/adapters/agno-adapter.js +140 -0
  10. package/dist/esm/adapters/agno-adapter.js.map +1 -0
  11. package/dist/esm/adapters/anthropic-computer-use-adapter.js +180 -0
  12. package/dist/esm/adapters/anthropic-computer-use-adapter.js.map +1 -0
  13. package/dist/esm/adapters/aps-adapter.js +289 -0
  14. package/dist/esm/adapters/aps-adapter.js.map +1 -0
  15. package/dist/esm/adapters/autogen-adapter.js +141 -0
  16. package/dist/esm/adapters/autogen-adapter.js.map +1 -0
  17. package/dist/esm/adapters/base-adapter.js +104 -0
  18. package/dist/esm/adapters/base-adapter.js.map +1 -0
  19. package/dist/esm/adapters/browser-agent-adapter.js +219 -0
  20. package/dist/esm/adapters/browser-agent-adapter.js.map +1 -0
  21. package/dist/esm/adapters/codex-adapter.js +318 -0
  22. package/dist/esm/adapters/codex-adapter.js.map +1 -0
  23. package/dist/esm/adapters/copilot-adapter.js +132 -0
  24. package/dist/esm/adapters/copilot-adapter.js.map +1 -0
  25. package/dist/esm/adapters/crewai-adapter.js +148 -0
  26. package/dist/esm/adapters/crewai-adapter.js.map +1 -0
  27. package/dist/esm/adapters/custom-adapter.js +142 -0
  28. package/dist/esm/adapters/custom-adapter.js.map +1 -0
  29. package/dist/esm/adapters/custom-streaming-adapter.js +181 -0
  30. package/dist/esm/adapters/custom-streaming-adapter.js.map +1 -0
  31. package/dist/esm/adapters/dspy-adapter.js +127 -0
  32. package/dist/esm/adapters/dspy-adapter.js.map +1 -0
  33. package/dist/esm/adapters/haystack-adapter.js +149 -0
  34. package/dist/esm/adapters/haystack-adapter.js.map +1 -0
  35. package/dist/esm/adapters/hermes-adapter.js +217 -0
  36. package/dist/esm/adapters/hermes-adapter.js.map +1 -0
  37. package/dist/esm/adapters/index.js +109 -0
  38. package/dist/esm/adapters/index.js.map +1 -0
  39. package/dist/esm/adapters/langchain-adapter.js +134 -0
  40. package/dist/esm/adapters/langchain-adapter.js.map +1 -0
  41. package/dist/esm/adapters/langchain-streaming-adapter.js +161 -0
  42. package/dist/esm/adapters/langchain-streaming-adapter.js.map +1 -0
  43. package/dist/esm/adapters/langgraph-adapter.js +119 -0
  44. package/dist/esm/adapters/langgraph-adapter.js.map +1 -0
  45. package/dist/esm/adapters/llamaindex-adapter.js +135 -0
  46. package/dist/esm/adapters/llamaindex-adapter.js.map +1 -0
  47. package/dist/esm/adapters/mcp-adapter.js +200 -0
  48. package/dist/esm/adapters/mcp-adapter.js.map +1 -0
  49. package/dist/esm/adapters/minimax-adapter.js +233 -0
  50. package/dist/esm/adapters/minimax-adapter.js.map +1 -0
  51. package/dist/esm/adapters/nemoclaw-adapter.js +465 -0
  52. package/dist/esm/adapters/nemoclaw-adapter.js.map +1 -0
  53. package/dist/esm/adapters/openai-agents-adapter.js +118 -0
  54. package/dist/esm/adapters/openai-agents-adapter.js.map +1 -0
  55. package/dist/esm/adapters/openai-assistants-adapter.js +130 -0
  56. package/dist/esm/adapters/openai-assistants-adapter.js.map +1 -0
  57. package/dist/esm/adapters/openclaw-adapter.js +107 -0
  58. package/dist/esm/adapters/openclaw-adapter.js.map +1 -0
  59. package/dist/esm/adapters/orchestrator-adapter.js +218 -0
  60. package/dist/esm/adapters/orchestrator-adapter.js.map +1 -0
  61. package/dist/esm/adapters/pydantic-ai-adapter.js +163 -0
  62. package/dist/esm/adapters/pydantic-ai-adapter.js.map +1 -0
  63. package/dist/esm/adapters/rlm-adapter.js +167 -0
  64. package/dist/esm/adapters/rlm-adapter.js.map +1 -0
  65. package/dist/esm/adapters/semantic-kernel-adapter.js +123 -0
  66. package/dist/esm/adapters/semantic-kernel-adapter.js.map +1 -0
  67. package/dist/esm/adapters/streaming-base-adapter.js +74 -0
  68. package/dist/esm/adapters/streaming-base-adapter.js.map +1 -0
  69. package/dist/esm/adapters/vertex-ai-adapter.js +166 -0
  70. package/dist/esm/adapters/vertex-ai-adapter.js.map +1 -0
  71. package/dist/esm/demo-control-plane.js +147 -0
  72. package/dist/esm/demo-control-plane.js.map +1 -0
  73. package/dist/esm/demo-worktree-dashboard.js +131 -0
  74. package/dist/esm/demo-worktree-dashboard.js.map +1 -0
  75. package/dist/esm/examples/01-hello-swarm.js +165 -0
  76. package/dist/esm/examples/01-hello-swarm.js.map +1 -0
  77. package/dist/esm/examples/02-fsm-pipeline.js +189 -0
  78. package/dist/esm/examples/02-fsm-pipeline.js.map +1 -0
  79. package/dist/esm/examples/03-parallel-agents.js +192 -0
  80. package/dist/esm/examples/03-parallel-agents.js.map +1 -0
  81. package/dist/esm/examples/05-code-review-swarm.js +1177 -0
  82. package/dist/esm/examples/05-code-review-swarm.js.map +1 -0
  83. package/dist/esm/examples/06-ai-pipeline-demo.js +263 -0
  84. package/dist/esm/examples/06-ai-pipeline-demo.js.map +1 -0
  85. package/dist/esm/examples/07-full-showcase.js +946 -0
  86. package/dist/esm/examples/07-full-showcase.js.map +1 -0
  87. package/dist/esm/examples/08-control-plane-stress-demo.js +186 -0
  88. package/dist/esm/examples/08-control-plane-stress-demo.js.map +1 -0
  89. package/dist/esm/examples/09-real-langchain.js +231 -0
  90. package/dist/esm/examples/09-real-langchain.js.map +1 -0
  91. package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js +270 -0
  92. package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js.map +1 -0
  93. package/dist/esm/examples/demo-runner.js +119 -0
  94. package/dist/esm/examples/demo-runner.js.map +1 -0
  95. package/dist/esm/index.js +1352 -0
  96. package/dist/esm/index.js.map +1 -0
  97. package/dist/esm/lib/adapter-hooks.js +216 -0
  98. package/dist/esm/lib/adapter-hooks.js.map +1 -0
  99. package/dist/esm/lib/adapter-test-harness.js +118 -0
  100. package/dist/esm/lib/adapter-test-harness.js.map +1 -0
  101. package/dist/esm/lib/agent-conversation.js +155 -0
  102. package/dist/esm/lib/agent-conversation.js.map +1 -0
  103. package/dist/esm/lib/agent-debate.js +146 -0
  104. package/dist/esm/lib/agent-debate.js.map +1 -0
  105. package/dist/esm/lib/agent-memory.js +336 -0
  106. package/dist/esm/lib/agent-memory.js.map +1 -0
  107. package/dist/esm/lib/agent-runtime.js +818 -0
  108. package/dist/esm/lib/agent-runtime.js.map +1 -0
  109. package/dist/esm/lib/agent-vcr.js +218 -0
  110. package/dist/esm/lib/agent-vcr.js.map +1 -0
  111. package/dist/esm/lib/anomaly-detector.js +178 -0
  112. package/dist/esm/lib/anomaly-detector.js.map +1 -0
  113. package/dist/esm/lib/approval-inbox.js +385 -0
  114. package/dist/esm/lib/approval-inbox.js.map +1 -0
  115. package/dist/esm/lib/auth-guardian.js +692 -0
  116. package/dist/esm/lib/auth-guardian.js.map +1 -0
  117. package/dist/esm/lib/auth-validator.js +32 -0
  118. package/dist/esm/lib/auth-validator.js.map +1 -0
  119. package/dist/esm/lib/blackboard-backend-crdt.js +251 -0
  120. package/dist/esm/lib/blackboard-backend-crdt.js.map +1 -0
  121. package/dist/esm/lib/blackboard-backend-redis.js +244 -0
  122. package/dist/esm/lib/blackboard-backend-redis.js.map +1 -0
  123. package/dist/esm/lib/blackboard-backend.js +141 -0
  124. package/dist/esm/lib/blackboard-backend.js.map +1 -0
  125. package/dist/esm/lib/blackboard-validator.js +985 -0
  126. package/dist/esm/lib/blackboard-validator.js.map +1 -0
  127. package/dist/esm/lib/circuit-breaker.js +164 -0
  128. package/dist/esm/lib/circuit-breaker.js.map +1 -0
  129. package/dist/esm/lib/claim-verifier.js +173 -0
  130. package/dist/esm/lib/claim-verifier.js.map +1 -0
  131. package/dist/esm/lib/comparison-runner.js +138 -0
  132. package/dist/esm/lib/comparison-runner.js.map +1 -0
  133. package/dist/esm/lib/compliance-monitor.js +261 -0
  134. package/dist/esm/lib/compliance-monitor.js.map +1 -0
  135. package/dist/esm/lib/confidence-filter.js +210 -0
  136. package/dist/esm/lib/confidence-filter.js.map +1 -0
  137. package/dist/esm/lib/config-watcher.js +215 -0
  138. package/dist/esm/lib/config-watcher.js.map +1 -0
  139. package/dist/esm/lib/consistency.js +274 -0
  140. package/dist/esm/lib/consistency.js.map +1 -0
  141. package/dist/esm/lib/console-ui.js +276 -0
  142. package/dist/esm/lib/console-ui.js.map +1 -0
  143. package/dist/esm/lib/context-throttler.js +171 -0
  144. package/dist/esm/lib/context-throttler.js.map +1 -0
  145. package/dist/esm/lib/control-plane.js +527 -0
  146. package/dist/esm/lib/control-plane.js.map +1 -0
  147. package/dist/esm/lib/cost-governor.js +128 -0
  148. package/dist/esm/lib/cost-governor.js.map +1 -0
  149. package/dist/esm/lib/cost-heatmap.js +161 -0
  150. package/dist/esm/lib/cost-heatmap.js.map +1 -0
  151. package/dist/esm/lib/coverage-gate.js +213 -0
  152. package/dist/esm/lib/coverage-gate.js.map +1 -0
  153. package/dist/esm/lib/coverage-reporter.js +177 -0
  154. package/dist/esm/lib/coverage-reporter.js.map +1 -0
  155. package/dist/esm/lib/crdt.js +141 -0
  156. package/dist/esm/lib/crdt.js.map +1 -0
  157. package/dist/esm/lib/dashboard-server.js +403 -0
  158. package/dist/esm/lib/dashboard-server.js.map +1 -0
  159. package/dist/esm/lib/dry-run.js +130 -0
  160. package/dist/esm/lib/dry-run.js.map +1 -0
  161. package/dist/esm/lib/env-manager.js +518 -0
  162. package/dist/esm/lib/env-manager.js.map +1 -0
  163. package/dist/esm/lib/errors.js +201 -0
  164. package/dist/esm/lib/errors.js.map +1 -0
  165. package/dist/esm/lib/event-bus.js +229 -0
  166. package/dist/esm/lib/event-bus.js.map +1 -0
  167. package/dist/esm/lib/explainability.js +102 -0
  168. package/dist/esm/lib/explainability.js.map +1 -0
  169. package/dist/esm/lib/fan-out.js +237 -0
  170. package/dist/esm/lib/fan-out.js.map +1 -0
  171. package/dist/esm/lib/federated-budget.js +322 -0
  172. package/dist/esm/lib/federated-budget.js.map +1 -0
  173. package/dist/esm/lib/fsm-journey.js +478 -0
  174. package/dist/esm/lib/fsm-journey.js.map +1 -0
  175. package/dist/esm/lib/goal-decomposer.js +698 -0
  176. package/dist/esm/lib/goal-decomposer.js.map +1 -0
  177. package/dist/esm/lib/goal-dsl.js +391 -0
  178. package/dist/esm/lib/goal-dsl.js.map +1 -0
  179. package/dist/esm/lib/job-queue.js +310 -0
  180. package/dist/esm/lib/job-queue.js.map +1 -0
  181. package/dist/esm/lib/landscape-agent.js +134 -0
  182. package/dist/esm/lib/landscape-agent.js.map +1 -0
  183. package/dist/esm/lib/learning-loop.js +181 -0
  184. package/dist/esm/lib/learning-loop.js.map +1 -0
  185. package/dist/esm/lib/lifecycle-hooks.js +148 -0
  186. package/dist/esm/lib/lifecycle-hooks.js.map +1 -0
  187. package/dist/esm/lib/locked-blackboard.js +1295 -0
  188. package/dist/esm/lib/locked-blackboard.js.map +1 -0
  189. package/dist/esm/lib/logger.js +150 -0
  190. package/dist/esm/lib/logger.js.map +1 -0
  191. package/dist/esm/lib/mcp-blackboard-tools.js +298 -0
  192. package/dist/esm/lib/mcp-blackboard-tools.js.map +1 -0
  193. package/dist/esm/lib/mcp-bridge.js +357 -0
  194. package/dist/esm/lib/mcp-bridge.js.map +1 -0
  195. package/dist/esm/lib/mcp-tool-consumer.js +287 -0
  196. package/dist/esm/lib/mcp-tool-consumer.js.map +1 -0
  197. package/dist/esm/lib/mcp-tools-control.js +392 -0
  198. package/dist/esm/lib/mcp-tools-control.js.map +1 -0
  199. package/dist/esm/lib/mcp-tools-extended.js +371 -0
  200. package/dist/esm/lib/mcp-tools-extended.js.map +1 -0
  201. package/dist/esm/lib/mcp-transport-http.js +528 -0
  202. package/dist/esm/lib/mcp-transport-http.js.map +1 -0
  203. package/dist/esm/lib/mcp-transport-sse.js +503 -0
  204. package/dist/esm/lib/mcp-transport-sse.js.map +1 -0
  205. package/dist/esm/lib/metrics.js +284 -0
  206. package/dist/esm/lib/metrics.js.map +1 -0
  207. package/dist/esm/lib/orchestrator-types.js +66 -0
  208. package/dist/esm/lib/orchestrator-types.js.map +1 -0
  209. package/dist/esm/lib/otel-bridge.js +167 -0
  210. package/dist/esm/lib/otel-bridge.js.map +1 -0
  211. package/dist/esm/lib/partition-planner.js +246 -0
  212. package/dist/esm/lib/partition-planner.js.map +1 -0
  213. package/dist/esm/lib/phase-pipeline.js +367 -0
  214. package/dist/esm/lib/phase-pipeline.js.map +1 -0
  215. package/dist/esm/lib/playground.js +224 -0
  216. package/dist/esm/lib/playground.js.map +1 -0
  217. package/dist/esm/lib/qa-orchestrator.js +296 -0
  218. package/dist/esm/lib/qa-orchestrator.js.map +1 -0
  219. package/dist/esm/lib/quadtree.js +259 -0
  220. package/dist/esm/lib/quadtree.js.map +1 -0
  221. package/dist/esm/lib/route-classifier.js +217 -0
  222. package/dist/esm/lib/route-classifier.js.map +1 -0
  223. package/dist/esm/lib/semantic-search.js +235 -0
  224. package/dist/esm/lib/semantic-search.js.map +1 -0
  225. package/dist/esm/lib/shared-blackboard.js +249 -0
  226. package/dist/esm/lib/shared-blackboard.js.map +1 -0
  227. package/dist/esm/lib/skill-composer.js +190 -0
  228. package/dist/esm/lib/skill-composer.js.map +1 -0
  229. package/dist/esm/lib/speculative-executor.js +107 -0
  230. package/dist/esm/lib/speculative-executor.js.map +1 -0
  231. package/dist/esm/lib/strategy-agent.js +626 -0
  232. package/dist/esm/lib/strategy-agent.js.map +1 -0
  233. package/dist/esm/lib/swarm-transport.js +307 -0
  234. package/dist/esm/lib/swarm-transport.js.map +1 -0
  235. package/dist/esm/lib/swarm-utils.js +510 -0
  236. package/dist/esm/lib/swarm-utils.js.map +1 -0
  237. package/dist/esm/lib/task-decomposer.js +272 -0
  238. package/dist/esm/lib/task-decomposer.js.map +1 -0
  239. package/dist/esm/lib/telemetry-provider.js +207 -0
  240. package/dist/esm/lib/telemetry-provider.js.map +1 -0
  241. package/dist/esm/lib/timeline-scrubber.js +173 -0
  242. package/dist/esm/lib/timeline-scrubber.js.map +1 -0
  243. package/dist/esm/lib/topology.js +591 -0
  244. package/dist/esm/lib/topology.js.map +1 -0
  245. package/dist/esm/lib/transport-agent.js +366 -0
  246. package/dist/esm/lib/transport-agent.js.map +1 -0
  247. package/dist/esm/lib/work-tree-dashboard.js +583 -0
  248. package/dist/esm/lib/work-tree-dashboard.js.map +1 -0
  249. package/dist/esm/lib/work-tree-ui.js +333 -0
  250. package/dist/esm/lib/work-tree-ui.js.map +1 -0
  251. package/dist/esm/lib/work-tree.js +480 -0
  252. package/dist/esm/lib/work-tree.js.map +1 -0
  253. package/dist/esm/run.js +144 -0
  254. package/dist/esm/run.js.map +1 -0
  255. package/dist/esm/security.js +1122 -0
  256. package/dist/esm/security.js.map +1 -0
  257. package/dist/index.d.ts +2 -0
  258. package/dist/index.d.ts.map +1 -1
  259. package/dist/index.js +6 -1
  260. package/dist/index.js.map +1 -1
  261. package/dist/lib/mcp-transport-http.d.ts +203 -0
  262. package/dist/lib/mcp-transport-http.d.ts.map +1 -0
  263. package/dist/lib/mcp-transport-http.js +528 -0
  264. package/dist/lib/mcp-transport-http.js.map +1 -0
  265. package/dist/lib/phase-pipeline.d.ts +31 -0
  266. package/dist/lib/phase-pipeline.d.ts.map +1 -1
  267. package/dist/lib/phase-pipeline.js +93 -1
  268. package/dist/lib/phase-pipeline.js.map +1 -1
  269. package/dist/lib/semantic-search.d.ts +42 -6
  270. package/dist/lib/semantic-search.d.ts.map +1 -1
  271. package/dist/lib/semantic-search.js +87 -6
  272. package/dist/lib/semantic-search.js.map +1 -1
  273. package/package.json +24 -4
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ /**
3
+ * Typed Error Classes for Network-AI
4
+ *
5
+ * Provides specific error types so consumers can catch and handle
6
+ * different failure modes independently (e.g., retry on rate limit,
7
+ * re-authenticate on token expiry, alert on namespace violation).
8
+ *
9
+ * All errors extend NetworkAIError, which extends Error.
10
+ *
11
+ * @module Errors
12
+ * @version 1.0.0
13
+ * @license MIT
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.TimeoutError = exports.ParallelLimitError = exports.AdapterNotInitializedError = exports.AdapterNotFoundError = exports.AdapterAlreadyRegisteredError = exports.ConflictError = exports.LockAcquisitionError = exports.ValidationError = exports.NamespaceViolationError = exports.IdentityVerificationError = exports.NetworkAIError = void 0;
17
+ exports.mapErrorToSkillResult = mapErrorToSkillResult;
18
+ // ============================================================================
19
+ // BASE ERROR
20
+ // ============================================================================
21
+ /**
22
+ * Base error class for all Network-AI errors.
23
+ * Every error includes a machine-readable `code` and optional `details`.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * try {
28
+ * blackboard.write('key', value, 'agent');
29
+ * } catch (err) {
30
+ * if (err instanceof NetworkAIError) {
31
+ * console.log(err.code); // e.g., 'IDENTITY_VERIFICATION_FAILED'
32
+ * console.log(err.details); // { agentId: 'agent' }
33
+ * }
34
+ * }
35
+ * ```
36
+ */
37
+ class NetworkAIError extends Error {
38
+ /** Machine-readable error code */
39
+ code;
40
+ /** Additional structured context */
41
+ details;
42
+ constructor(message, code, details) {
43
+ super(message);
44
+ this.name = 'NetworkAIError';
45
+ this.code = code;
46
+ this.details = details;
47
+ // Fix prototype chain for instanceof checks
48
+ Object.setPrototypeOf(this, new.target.prototype);
49
+ }
50
+ }
51
+ exports.NetworkAIError = NetworkAIError;
52
+ // ============================================================================
53
+ // BLACKBOARD ERRORS
54
+ // ============================================================================
55
+ /**
56
+ * Thrown when an agent fails identity verification on blackboard write.
57
+ */
58
+ class IdentityVerificationError extends NetworkAIError {
59
+ constructor(agentId) {
60
+ super(`Identity verification failed for agent '${agentId}'`, 'IDENTITY_VERIFICATION_FAILED', { agentId });
61
+ this.name = 'IdentityVerificationError';
62
+ }
63
+ }
64
+ exports.IdentityVerificationError = IdentityVerificationError;
65
+ /**
66
+ * Thrown when an agent tries to write to a namespace it doesn't have access to.
67
+ */
68
+ class NamespaceViolationError extends NetworkAIError {
69
+ constructor(agentId, key) {
70
+ super(`Agent '${agentId}' not allowed to write to key '${key}'`, 'NAMESPACE_VIOLATION', { agentId, key });
71
+ this.name = 'NamespaceViolationError';
72
+ }
73
+ }
74
+ exports.NamespaceViolationError = NamespaceViolationError;
75
+ /**
76
+ * Thrown when a value fails size or structure validation before write.
77
+ */
78
+ class ValidationError extends NetworkAIError {
79
+ constructor(reason) {
80
+ super(`Value validation failed: ${reason}`, 'VALIDATION_FAILED', { reason });
81
+ this.name = 'ValidationError';
82
+ }
83
+ }
84
+ exports.ValidationError = ValidationError;
85
+ // ============================================================================
86
+ // LOCK ERRORS
87
+ // ============================================================================
88
+ /**
89
+ * Thrown when a file-system lock cannot be acquired within the timeout.
90
+ */
91
+ class LockAcquisitionError extends NetworkAIError {
92
+ constructor(operation) {
93
+ super(`Failed to acquire lock for ${operation}`, 'LOCK_ACQUISITION_FAILED', { operation });
94
+ this.name = 'LockAcquisitionError';
95
+ }
96
+ }
97
+ exports.LockAcquisitionError = LockAcquisitionError;
98
+ /**
99
+ * Thrown when a conflict is detected during the atomic commit workflow.
100
+ */
101
+ class ConflictError extends NetworkAIError {
102
+ constructor(key, expectedHash, actualHash) {
103
+ super(`Conflict detected for key '${key}': data changed since proposal`, 'CONFLICT_DETECTED', { key, expectedHash, actualHash });
104
+ this.name = 'ConflictError';
105
+ }
106
+ }
107
+ exports.ConflictError = ConflictError;
108
+ // ============================================================================
109
+ // ADAPTER ERRORS
110
+ // ============================================================================
111
+ /**
112
+ * Thrown when an adapter is already registered under the same name.
113
+ */
114
+ class AdapterAlreadyRegisteredError extends NetworkAIError {
115
+ constructor(adapterName) {
116
+ super(`Adapter "${adapterName}" is already registered`, 'ADAPTER_ALREADY_REGISTERED', { adapterName });
117
+ this.name = 'AdapterAlreadyRegisteredError';
118
+ }
119
+ }
120
+ exports.AdapterAlreadyRegisteredError = AdapterAlreadyRegisteredError;
121
+ /**
122
+ * Thrown when referencing an adapter name that isn't in the registry.
123
+ */
124
+ class AdapterNotFoundError extends NetworkAIError {
125
+ constructor(adapterName) {
126
+ super(`Adapter "${adapterName}" is not registered`, 'ADAPTER_NOT_FOUND', { adapterName });
127
+ this.name = 'AdapterNotFoundError';
128
+ }
129
+ }
130
+ exports.AdapterNotFoundError = AdapterNotFoundError;
131
+ /**
132
+ * Thrown when calling executeAgent on an adapter before it has been initialized.
133
+ */
134
+ class AdapterNotInitializedError extends NetworkAIError {
135
+ constructor(adapterName) {
136
+ super(`Adapter "${adapterName}" is not initialized. Call initialize() first.`, 'ADAPTER_NOT_INITIALIZED', { adapterName });
137
+ this.name = 'AdapterNotInitializedError';
138
+ }
139
+ }
140
+ exports.AdapterNotInitializedError = AdapterNotInitializedError;
141
+ // ============================================================================
142
+ // ORCHESTRATOR ERRORS
143
+ // ============================================================================
144
+ /**
145
+ * Thrown when too many parallel agents are requested.
146
+ */
147
+ class ParallelLimitError extends NetworkAIError {
148
+ constructor(requested, maximum) {
149
+ super(`Cannot spawn ${requested} agents. Maximum is ${maximum}. Decompose further or use 'chain' strategy.`, 'PARALLEL_LIMIT_EXCEEDED', { requested, maximum });
150
+ this.name = 'ParallelLimitError';
151
+ }
152
+ }
153
+ exports.ParallelLimitError = ParallelLimitError;
154
+ /**
155
+ * Thrown when an operation exceeds its timeout.
156
+ */
157
+ class TimeoutError extends NetworkAIError {
158
+ constructor(timeoutMs) {
159
+ super(`Operation timed out after ${timeoutMs}ms`, 'TIMEOUT', { timeoutMs });
160
+ this.name = 'TimeoutError';
161
+ }
162
+ }
163
+ exports.TimeoutError = TimeoutError;
164
+ // ============================================================================
165
+ // ERROR MAPPING UTILITY
166
+ // ============================================================================
167
+ /** Error codes that are considered recoverable (caller can retry). */
168
+ const RECOVERABLE_CODES = new Set([
169
+ 'LOCK_ACQUISITION_FAILED',
170
+ 'TIMEOUT',
171
+ 'CONFLICT_DETECTED',
172
+ ]);
173
+ /**
174
+ * Convert any error to a standardised SkillResult with `success: false`.
175
+ *
176
+ * For {@link NetworkAIError} subclasses the machine-readable `code` and
177
+ * `details` are preserved. Unknown errors are wrapped as `INTERNAL_ERROR`.
178
+ */
179
+ function mapErrorToSkillResult(error) {
180
+ if (error instanceof NetworkAIError) {
181
+ return {
182
+ success: false,
183
+ error: {
184
+ code: error.code,
185
+ message: error.message,
186
+ recoverable: RECOVERABLE_CODES.has(error.code),
187
+ trace: error.details,
188
+ },
189
+ };
190
+ }
191
+ const msg = error instanceof Error ? error.message : String(error);
192
+ return {
193
+ success: false,
194
+ error: {
195
+ code: 'INTERNAL_ERROR',
196
+ message: msg,
197
+ recoverable: false,
198
+ },
199
+ };
200
+ }
201
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../lib/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ /**
3
+ * OrchestratorEventBus — Central event stream for replay & time-travel debugging.
4
+ *
5
+ * Collects events from all orchestrator subsystems (blackboard, auth, adapters,
6
+ * topology, decisions) into a single monotonically-sequenced stream with periodic
7
+ * state snapshots for efficient point-in-time reconstruction.
8
+ *
9
+ * @module EventBus
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.OrchestratorEventBus = void 0;
13
+ const events_1 = require("events");
14
+ // Severity ordering for filtering
15
+ const SEVERITY_ORDER = {
16
+ trace: 0,
17
+ info: 1,
18
+ warn: 2,
19
+ error: 3,
20
+ };
21
+ // ============================================================================
22
+ // EVENT BUS
23
+ // ============================================================================
24
+ /**
25
+ * Central event bus for the orchestrator.
26
+ *
27
+ * Provides:
28
+ * - Unified monotonic event stream from all subsystems
29
+ * - Periodic state snapshots for O(1) point-in-time reconstruction
30
+ * - Replay with filtering (source, agent, severity, correlation)
31
+ * - Configurable retention (max events, max snapshots)
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const bus = new OrchestratorEventBus();
36
+ * bus.publish('blackboard', 'write', 'info', { key: 'x', value: 42 }, 'agent-1');
37
+ * bus.snapshot({ blackboard: bb.getSnapshot(), agents: {} });
38
+ * const replay = bus.replay({ fromSeq: 0, toSeq: 100 });
39
+ * ```
40
+ */
41
+ class OrchestratorEventBus extends events_1.EventEmitter {
42
+ events = [];
43
+ snapshots = [];
44
+ seq = 0;
45
+ maxEvents;
46
+ maxSnapshots;
47
+ snapshotInterval;
48
+ eventsSinceSnapshot = 0;
49
+ constructor(options) {
50
+ super();
51
+ this.maxEvents = options?.maxEvents ?? 50_000;
52
+ this.maxSnapshots = options?.maxSnapshots ?? 100;
53
+ this.snapshotInterval = options?.snapshotInterval ?? 0;
54
+ }
55
+ /**
56
+ * Publish an event to the bus.
57
+ * Returns the assigned sequence number.
58
+ */
59
+ publish(source, type, severity, data, agentId, correlationId) {
60
+ const event = {
61
+ seq: this.seq++,
62
+ timestamp: new Date().toISOString(),
63
+ source,
64
+ type,
65
+ severity,
66
+ agentId,
67
+ correlationId,
68
+ data,
69
+ };
70
+ this.events.push(event);
71
+ this.eventsSinceSnapshot++;
72
+ // Evict oldest
73
+ if (this.events.length > this.maxEvents) {
74
+ this.events.splice(0, this.events.length - this.maxEvents);
75
+ }
76
+ this.emit('event', event);
77
+ return event.seq;
78
+ }
79
+ /**
80
+ * Take a state snapshot at the current sequence position.
81
+ */
82
+ snapshot(state) {
83
+ const snap = {
84
+ atSeq: this.seq - 1,
85
+ timestamp: new Date().toISOString(),
86
+ blackboard: state.blackboard,
87
+ agents: state.agents,
88
+ budget: state.budget,
89
+ metadata: state.metadata,
90
+ };
91
+ this.snapshots.push(snap);
92
+ this.eventsSinceSnapshot = 0;
93
+ // Evict oldest snapshots
94
+ if (this.snapshots.length > this.maxSnapshots) {
95
+ this.snapshots.splice(0, this.snapshots.length - this.maxSnapshots);
96
+ }
97
+ this.emit('snapshot', snap);
98
+ return snap;
99
+ }
100
+ /**
101
+ * Check if an automatic snapshot should be taken (called internally after publish).
102
+ * Returns true if a snapshot is due. Callers must provide state via `snapshot()`.
103
+ */
104
+ isSnapshotDue() {
105
+ return this.snapshotInterval > 0 && this.eventsSinceSnapshot >= this.snapshotInterval;
106
+ }
107
+ /**
108
+ * Replay events with optional filtering.
109
+ * Returns the nearest base snapshot + matching events.
110
+ */
111
+ replay(options) {
112
+ const fromSeq = options?.fromSeq ?? 0;
113
+ const toSeq = options?.toSeq ?? this.seq;
114
+ const minSev = options?.minSeverity ? SEVERITY_ORDER[options.minSeverity] : 0;
115
+ // Find nearest snapshot at or before fromSeq
116
+ let baseSnapshot = null;
117
+ for (let i = this.snapshots.length - 1; i >= 0; i--) {
118
+ if (this.snapshots[i].atSeq <= fromSeq) {
119
+ baseSnapshot = this.snapshots[i];
120
+ break;
121
+ }
122
+ }
123
+ // Filter events
124
+ const filtered = this.events.filter((e) => {
125
+ if (e.seq < fromSeq || e.seq > toSeq)
126
+ return false;
127
+ if (options?.sources && !options.sources.includes(e.source))
128
+ return false;
129
+ if (options?.agentId && e.agentId !== options.agentId)
130
+ return false;
131
+ if (options?.correlationId && e.correlationId !== options.correlationId)
132
+ return false;
133
+ if (SEVERITY_ORDER[e.severity] < minSev)
134
+ return false;
135
+ return true;
136
+ });
137
+ return {
138
+ baseSnapshot,
139
+ events: filtered,
140
+ totalEvents: this.events.length,
141
+ };
142
+ }
143
+ /**
144
+ * Get the event at a specific sequence number.
145
+ */
146
+ getEvent(seq) {
147
+ return this.events.find((e) => e.seq === seq);
148
+ }
149
+ /**
150
+ * Get the most recent N events.
151
+ */
152
+ recent(count) {
153
+ return this.events.slice(-count);
154
+ }
155
+ /**
156
+ * Get all snapshots.
157
+ */
158
+ getSnapshots() {
159
+ return [...this.snapshots];
160
+ }
161
+ /**
162
+ * Find the nearest snapshot at or before a given sequence.
163
+ */
164
+ snapshotAt(seq) {
165
+ for (let i = this.snapshots.length - 1; i >= 0; i--) {
166
+ if (this.snapshots[i].atSeq <= seq) {
167
+ return this.snapshots[i];
168
+ }
169
+ }
170
+ return null;
171
+ }
172
+ /** Current sequence counter value (next event will get this seq). */
173
+ get currentSeq() {
174
+ return this.seq;
175
+ }
176
+ /** Total stored events. */
177
+ get size() {
178
+ return this.events.length;
179
+ }
180
+ /** Total stored snapshots. */
181
+ get snapshotCount() {
182
+ return this.snapshots.length;
183
+ }
184
+ /** Clear all events and snapshots, reset sequence. */
185
+ clear() {
186
+ this.events.length = 0;
187
+ this.snapshots.length = 0;
188
+ this.seq = 0;
189
+ this.eventsSinceSnapshot = 0;
190
+ }
191
+ /**
192
+ * Export the full stream (events + snapshots) as a serializable object.
193
+ */
194
+ export() {
195
+ return {
196
+ events: [...this.events],
197
+ snapshots: [...this.snapshots],
198
+ };
199
+ }
200
+ /**
201
+ * Import a previously exported stream, merging into current state.
202
+ */
203
+ import(data) {
204
+ if (!Array.isArray(data.events) || !Array.isArray(data.snapshots)) {
205
+ throw new Error('Invalid import data: expected { events: [], snapshots: [] }');
206
+ }
207
+ for (const e of data.events) {
208
+ this.events.push(e);
209
+ if (e.seq >= this.seq) {
210
+ this.seq = e.seq + 1;
211
+ }
212
+ }
213
+ for (const s of data.snapshots) {
214
+ this.snapshots.push(s);
215
+ }
216
+ // Sort by sequence
217
+ this.events.sort((a, b) => a.seq - b.seq);
218
+ this.snapshots.sort((a, b) => a.atSeq - b.atSeq);
219
+ // Enforce limits
220
+ if (this.events.length > this.maxEvents) {
221
+ this.events.splice(0, this.events.length - this.maxEvents);
222
+ }
223
+ if (this.snapshots.length > this.maxSnapshots) {
224
+ this.snapshots.splice(0, this.snapshots.length - this.maxSnapshots);
225
+ }
226
+ }
227
+ }
228
+ exports.OrchestratorEventBus = OrchestratorEventBus;
229
+ //# sourceMappingURL=event-bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../../lib/event-bus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ /**
3
+ * ExplainabilityTracer — structured decision cards for agent actions.
4
+ *
5
+ * Records every significant decision made during task orchestration so that
6
+ * operators can audit *why* a particular outcome was produced.
7
+ *
8
+ * @module explainability
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.ExplainabilityTracer = void 0;
12
+ /**
13
+ * Collects decision cards during a session.
14
+ *
15
+ * Usage:
16
+ * ```ts
17
+ * const tracer = new ExplainabilityTracer();
18
+ * tracer.record({
19
+ * source: 'AuthGuardian',
20
+ * decision: 'permission_check',
21
+ * outcome: 'granted',
22
+ * factors: [{ name: 'trust_level', value: 0.8 }],
23
+ * });
24
+ * const cards = tracer.getTrace(traceId);
25
+ * ```
26
+ */
27
+ class ExplainabilityTracer {
28
+ cards = [];
29
+ maxCards;
30
+ constructor(options) {
31
+ this.maxCards = options?.maxCards ?? 10_000;
32
+ }
33
+ /**
34
+ * Record a decision card. Returns the generated traceId.
35
+ */
36
+ record(card) {
37
+ const traceId = card.traceId ?? this.generateId();
38
+ const full = {
39
+ traceId,
40
+ timestamp: card.timestamp ?? new Date().toISOString(),
41
+ source: card.source,
42
+ decision: card.decision,
43
+ outcome: card.outcome,
44
+ factors: card.factors,
45
+ parentTraceId: card.parentTraceId,
46
+ agentId: card.agentId,
47
+ metadata: card.metadata,
48
+ };
49
+ this.cards.push(full);
50
+ // Evict oldest when over limit
51
+ if (this.cards.length > this.maxCards) {
52
+ this.cards.splice(0, this.cards.length - this.maxCards);
53
+ }
54
+ return traceId;
55
+ }
56
+ /** Get a single card by traceId. */
57
+ getCard(traceId) {
58
+ return this.cards.find((c) => c.traceId === traceId);
59
+ }
60
+ /** Get all cards sharing a parentTraceId — i.e. the full trace tree for a delegation. */
61
+ getTrace(parentTraceId) {
62
+ return this.cards.filter((c) => c.traceId === parentTraceId || c.parentTraceId === parentTraceId);
63
+ }
64
+ /** Get cards filtered by source, decision type, agent, or time range. */
65
+ query(filter) {
66
+ return this.cards.filter((c) => {
67
+ if (filter.source && c.source !== filter.source)
68
+ return false;
69
+ if (filter.decision && c.decision !== filter.decision)
70
+ return false;
71
+ if (filter.agentId && c.agentId !== filter.agentId)
72
+ return false;
73
+ if (filter.since && c.timestamp < filter.since)
74
+ return false;
75
+ if (filter.until && c.timestamp > filter.until)
76
+ return false;
77
+ return true;
78
+ });
79
+ }
80
+ /** Total number of recorded cards. */
81
+ get size() {
82
+ return this.cards.length;
83
+ }
84
+ /** Clear all recorded cards. */
85
+ clear() {
86
+ this.cards.length = 0;
87
+ }
88
+ /** Export all cards as a JSON-serializable array. */
89
+ export() {
90
+ return [...this.cards];
91
+ }
92
+ generateId() {
93
+ // Simple random hex id (no crypto dependency needed for trace ids)
94
+ const bytes = new Uint8Array(12);
95
+ for (let i = 0; i < bytes.length; i++) {
96
+ bytes[i] = Math.floor(Math.random() * 256);
97
+ }
98
+ return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
99
+ }
100
+ }
101
+ exports.ExplainabilityTracer = ExplainabilityTracer;
102
+ //# sourceMappingURL=explainability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainability.js","sourceRoot":"","sources":["../../../lib/explainability.ts"],"names":[],"mappings":"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"}