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,177 @@
1
+ "use strict";
2
+ /**
3
+ * CoverageReporter — Lightweight code coverage reporting without external deps
4
+ *
5
+ * Integrates with Node.js built-in V8 coverage (`NODE_V8_COVERAGE`).
6
+ * Parses V8 coverage JSON output into a structured report with file-level
7
+ * line and function coverage metrics. Supports thresholds and reporters.
8
+ *
9
+ * Usage:
10
+ * // Run tests with V8 coverage:
11
+ * // NODE_V8_COVERAGE=./coverage npx ts-node test.ts
12
+ *
13
+ * const reporter = new CoverageReporter({ coverageDir: './coverage' });
14
+ * const report = await reporter.collect();
15
+ * reporter.printSummary(report);
16
+ * reporter.enforce(report, { linePct: 80, branchPct: 70 });
17
+ *
18
+ * @module CoverageReporter
19
+ * @version 1.0.0
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.CoverageReporter = void 0;
23
+ const promises_1 = require("fs/promises");
24
+ const path_1 = require("path");
25
+ // ============================================================================
26
+ // REPORTER
27
+ // ============================================================================
28
+ /**
29
+ * CoverageReporter — Collects and reports V8 code coverage data.
30
+ */
31
+ class CoverageReporter {
32
+ config;
33
+ constructor(config) {
34
+ this.config = {
35
+ coverageDir: (0, path_1.resolve)(config.coverageDir),
36
+ projectRoot: config.projectRoot ?? process.cwd(),
37
+ include: config.include ?? ['.ts', '.js'],
38
+ exclude: config.exclude ?? ['node_modules', 'test-', 'dist/'],
39
+ };
40
+ }
41
+ /**
42
+ * Collect coverage data from V8 coverage directory.
43
+ */
44
+ async collect() {
45
+ const files = [];
46
+ const coverageFiles = await this.findCoverageFiles();
47
+ for (const cf of coverageFiles) {
48
+ const raw = await (0, promises_1.readFile)(cf, 'utf-8');
49
+ const data = JSON.parse(raw);
50
+ for (const script of data.result) {
51
+ if (!this.shouldInclude(script.url))
52
+ continue;
53
+ const relPath = this.toRelativePath(script.url);
54
+ const existing = files.find((f) => f.file === relPath);
55
+ if (existing)
56
+ continue; // Deduplicate
57
+ const totalFunctions = script.functions.length;
58
+ const coveredFunctions = script.functions.filter((fn) => fn.ranges.some((r) => r.count > 0)).length;
59
+ let totalRanges = 0;
60
+ let coveredRanges = 0;
61
+ for (const fn of script.functions) {
62
+ for (const range of fn.ranges) {
63
+ totalRanges++;
64
+ if (range.count > 0)
65
+ coveredRanges++;
66
+ }
67
+ }
68
+ files.push({
69
+ file: relPath,
70
+ totalFunctions,
71
+ coveredFunctions,
72
+ functionPct: totalFunctions > 0 ? round((coveredFunctions / totalFunctions) * 100) : 100,
73
+ totalRanges,
74
+ coveredRanges,
75
+ rangePct: totalRanges > 0 ? round((coveredRanges / totalRanges) * 100) : 100,
76
+ });
77
+ }
78
+ }
79
+ files.sort((a, b) => a.file.localeCompare(b.file));
80
+ const totalFns = files.reduce((s, f) => s + f.totalFunctions, 0);
81
+ const coveredFns = files.reduce((s, f) => s + f.coveredFunctions, 0);
82
+ const totalRng = files.reduce((s, f) => s + f.totalRanges, 0);
83
+ const coveredRng = files.reduce((s, f) => s + f.coveredRanges, 0);
84
+ return {
85
+ files,
86
+ totalFunctionPct: totalFns > 0 ? round((coveredFns / totalFns) * 100) : 100,
87
+ totalRangePct: totalRng > 0 ? round((coveredRng / totalRng) * 100) : 100,
88
+ fileCount: files.length,
89
+ generatedAt: Date.now(),
90
+ };
91
+ }
92
+ /**
93
+ * Print a summary table to console.
94
+ */
95
+ printSummary(report) {
96
+ const header = 'File'.padEnd(50) + 'Functions'.padEnd(15) + 'Ranges';
97
+ console.log('─'.repeat(75));
98
+ console.log(header);
99
+ console.log('─'.repeat(75));
100
+ for (const f of report.files) {
101
+ const name = f.file.length > 48 ? '…' + f.file.slice(-47) : f.file;
102
+ const fnCol = `${f.coveredFunctions}/${f.totalFunctions} (${f.functionPct}%)`.padEnd(15);
103
+ const rgCol = `${f.coveredRanges}/${f.totalRanges} (${f.rangePct}%)`;
104
+ console.log(name.padEnd(50) + fnCol + rgCol);
105
+ }
106
+ console.log('─'.repeat(75));
107
+ console.log(`Total: ${report.fileCount} files | ` +
108
+ `Functions: ${report.totalFunctionPct}% | ` +
109
+ `Ranges: ${report.totalRangePct}%`);
110
+ console.log('─'.repeat(75));
111
+ }
112
+ /**
113
+ * Enforce coverage thresholds. Throws if below threshold.
114
+ */
115
+ enforce(report, thresholds) {
116
+ const failures = [];
117
+ if (thresholds.functionPct !== undefined && report.totalFunctionPct < thresholds.functionPct) {
118
+ failures.push(`Function coverage ${report.totalFunctionPct}% below threshold ${thresholds.functionPct}%`);
119
+ }
120
+ if (thresholds.rangePct !== undefined && report.totalRangePct < thresholds.rangePct) {
121
+ failures.push(`Range coverage ${report.totalRangePct}% below threshold ${thresholds.rangePct}%`);
122
+ }
123
+ if (thresholds.perFileFunctionPct !== undefined) {
124
+ for (const f of report.files) {
125
+ if (f.functionPct < thresholds.perFileFunctionPct) {
126
+ failures.push(`${f.file}: function coverage ${f.functionPct}% below per-file threshold ${thresholds.perFileFunctionPct}%`);
127
+ }
128
+ }
129
+ }
130
+ if (failures.length > 0) {
131
+ throw new Error(`Coverage thresholds not met:\n${failures.join('\n')}`);
132
+ }
133
+ }
134
+ // --------------------------------------------------------------------------
135
+ // Internal
136
+ // --------------------------------------------------------------------------
137
+ async findCoverageFiles() {
138
+ const results = [];
139
+ try {
140
+ const entries = await (0, promises_1.readdir)(this.config.coverageDir);
141
+ for (const entry of entries) {
142
+ if (entry.endsWith('.json')) {
143
+ results.push((0, path_1.join)(this.config.coverageDir, entry));
144
+ }
145
+ }
146
+ }
147
+ catch {
148
+ // Directory doesn't exist or not readable
149
+ }
150
+ return results;
151
+ }
152
+ shouldInclude(url) {
153
+ if (!url || url.startsWith('node:'))
154
+ return false;
155
+ const hasInclude = this.config.include.some((p) => url.includes(p));
156
+ const hasExclude = this.config.exclude.some((p) => url.includes(p));
157
+ return hasInclude && !hasExclude;
158
+ }
159
+ toRelativePath(url) {
160
+ let path = url;
161
+ // Strip file:// prefix
162
+ if (path.startsWith('file://')) {
163
+ path = path.slice(7);
164
+ }
165
+ // On Windows, strip leading slash before drive letter
166
+ if (/^\/[A-Za-z]:/.test(path)) {
167
+ path = path.slice(1);
168
+ }
169
+ return (0, path_1.relative)(this.config.projectRoot, path).replace(/\\/g, '/');
170
+ }
171
+ }
172
+ exports.CoverageReporter = CoverageReporter;
173
+ /** Round to 1 decimal */
174
+ function round(n) {
175
+ return Math.round(n * 10) / 10;
176
+ }
177
+ //# sourceMappingURL=coverage-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-reporter.js","sourceRoot":"","sources":["../../../lib/coverage-reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ /**
3
+ * CRDT (Conflict-free Replicated Data Type) Primitives
4
+ *
5
+ * Provides vector clocks and merge logic that allow multiple `CrdtBackend`
6
+ * instances (on different processes or machines) to synchronize without
7
+ * coordination and converge to the same state.
8
+ *
9
+ * Vector clock semantics:
10
+ * - Each node tracks its own logical time as an integer counter.
11
+ * - On every write, the node increments its own counter.
12
+ * - "Happens-before" (A → B): every component of A's clock is ≤ B's,
13
+ * and at least one is strictly less.
14
+ * - "Concurrent" (A ∥ B): neither happened-before the other.
15
+ * - Conflict resolution for concurrent writes: last-write-wins by
16
+ * wall-clock timestamp; lexicographically larger nodeId as tiebreaker
17
+ * for identical timestamps (deterministic, independent of arrival order).
18
+ *
19
+ * @module CRDT
20
+ * @version 1.0.0
21
+ * @license MIT
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.tickClock = tickClock;
25
+ exports.mergeClock = mergeClock;
26
+ exports.happensBefore = happensBefore;
27
+ exports.isConcurrent = isConcurrent;
28
+ exports.compareClock = compareClock;
29
+ exports.mergeEntry = mergeEntry;
30
+ // ============================================================================
31
+ // CLOCK OPERATIONS
32
+ // ============================================================================
33
+ /**
34
+ * Increment a node's counter in a vector clock.
35
+ * Returns a new clock — does not mutate the input.
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * const c0 = {};
40
+ * const c1 = tickClock(c0, 'node-a'); // { 'node-a': 1 }
41
+ * const c2 = tickClock(c1, 'node-a'); // { 'node-a': 2 }
42
+ * ```
43
+ */
44
+ function tickClock(clock, nodeId) {
45
+ return { ...clock, [nodeId]: (clock[nodeId] ?? 0) + 1 };
46
+ }
47
+ /**
48
+ * Merge two vector clocks by taking the component-wise maximum.
49
+ * Returns a new clock — does not mutate the inputs.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const a = { 'node-a': 3, 'node-b': 1 };
54
+ * const b = { 'node-a': 1, 'node-b': 4 };
55
+ * mergeClock(a, b); // { 'node-a': 3, 'node-b': 4 }
56
+ * ```
57
+ */
58
+ function mergeClock(a, b) {
59
+ const result = { ...a };
60
+ for (const [node, counter] of Object.entries(b)) {
61
+ result[node] = Math.max(result[node] ?? 0, counter);
62
+ }
63
+ return result;
64
+ }
65
+ /**
66
+ * Returns `true` if clock `a` happened-before clock `b`.
67
+ *
68
+ * Every component of `a` must be ≤ the corresponding component of `b`,
69
+ * and at least one component of `a` must be strictly less than `b`.
70
+ */
71
+ function happensBefore(a, b) {
72
+ const allNodes = new Set([...Object.keys(a), ...Object.keys(b)]);
73
+ let hasStrictlyLess = false;
74
+ for (const node of allNodes) {
75
+ const aVal = a[node] ?? 0;
76
+ const bVal = b[node] ?? 0;
77
+ if (aVal > bVal)
78
+ return false; // a is NOT ≤ b — cannot happen-before
79
+ if (aVal < bVal)
80
+ hasStrictlyLess = true;
81
+ }
82
+ return hasStrictlyLess;
83
+ }
84
+ /**
85
+ * Returns `true` if `a` and `b` are concurrent — neither happened-before
86
+ * the other. Both clocks have components where each is strictly greater
87
+ * than the other.
88
+ */
89
+ function isConcurrent(a, b) {
90
+ return !happensBefore(a, b) && !happensBefore(b, a);
91
+ }
92
+ /**
93
+ * Compare two vector clocks.
94
+ *
95
+ * Returns:
96
+ * -1 if `a` happened-before `b`
97
+ * 1 if `b` happened-before `a`
98
+ * 0 if concurrent or identical
99
+ */
100
+ function compareClock(a, b) {
101
+ if (happensBefore(a, b))
102
+ return -1;
103
+ if (happensBefore(b, a))
104
+ return 1;
105
+ return 0;
106
+ }
107
+ // ============================================================================
108
+ // CRDT MERGE
109
+ // ============================================================================
110
+ /**
111
+ * Merge two `CrdtEntry` values for the same key, returning the winner.
112
+ *
113
+ * Resolution order:
114
+ * 1. Causal order — if one entry happened-before the other, the later one wins.
115
+ * 2. Timestamp tiebreak — for concurrent entries, the later wall-clock
116
+ * `timestamp` wins.
117
+ * 3. NodeId tiebreak — for identical timestamps, the lexicographically
118
+ * larger `nodeId` wins (deterministic, node-independent).
119
+ *
120
+ * Tombstones (`deleted: true`) participate normally in this ordering —
121
+ * a delete recorded at a later vector clock will win over a live write.
122
+ *
123
+ * @example
124
+ * ```typescript
125
+ * const winner = mergeEntry(entryFromNodeA, entryFromNodeB);
126
+ * ```
127
+ */
128
+ function mergeEntry(a, b) {
129
+ const order = compareClock(a.vectorClock, b.vectorClock);
130
+ if (order === -1)
131
+ return b; // a happened-before b → b wins
132
+ if (order === 1)
133
+ return a; // b happened-before a → a wins
134
+ // Concurrent — tiebreak by timestamp, then nodeId
135
+ const aTime = new Date(a.timestamp).getTime();
136
+ const bTime = new Date(b.timestamp).getTime();
137
+ if (aTime !== bTime)
138
+ return aTime > bTime ? a : b;
139
+ return a.nodeId >= b.nodeId ? a : b;
140
+ }
141
+ //# sourceMappingURL=crdt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crdt.js","sourceRoot":"","sources":["../../../lib/crdt.ts"],"names":[],"mappings":"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"}