@claude-flow/cli 3.0.0-alpha.2 → 3.0.0-alpha.20

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 (263) hide show
  1. package/README.md +172 -6
  2. package/bin/cli.js +0 -0
  3. package/dist/src/commands/agent.d.ts.map +1 -1
  4. package/dist/src/commands/agent.js +43 -27
  5. package/dist/src/commands/agent.js.map +1 -1
  6. package/dist/src/commands/analyze.d.ts +19 -0
  7. package/dist/src/commands/analyze.d.ts.map +1 -0
  8. package/dist/src/commands/analyze.js +1823 -0
  9. package/dist/src/commands/analyze.js.map +1 -0
  10. package/dist/src/commands/claims.d.ts +10 -0
  11. package/dist/src/commands/claims.d.ts.map +1 -0
  12. package/dist/src/commands/claims.js +288 -0
  13. package/dist/src/commands/claims.js.map +1 -0
  14. package/dist/src/commands/completions.d.ts +10 -0
  15. package/dist/src/commands/completions.d.ts.map +1 -0
  16. package/dist/src/commands/completions.js +539 -0
  17. package/dist/src/commands/completions.js.map +1 -0
  18. package/dist/src/commands/config.js +2 -2
  19. package/dist/src/commands/config.js.map +1 -1
  20. package/dist/src/commands/daemon.d.ts +8 -0
  21. package/dist/src/commands/daemon.d.ts.map +1 -0
  22. package/dist/src/commands/daemon.js +545 -0
  23. package/dist/src/commands/daemon.js.map +1 -0
  24. package/dist/src/commands/deployment.d.ts +10 -0
  25. package/dist/src/commands/deployment.d.ts.map +1 -0
  26. package/dist/src/commands/deployment.js +289 -0
  27. package/dist/src/commands/deployment.js.map +1 -0
  28. package/dist/src/commands/doctor.d.ts +10 -0
  29. package/dist/src/commands/doctor.d.ts.map +1 -0
  30. package/dist/src/commands/doctor.js +429 -0
  31. package/dist/src/commands/doctor.js.map +1 -0
  32. package/dist/src/commands/embeddings.d.ts +18 -0
  33. package/dist/src/commands/embeddings.d.ts.map +1 -0
  34. package/dist/src/commands/embeddings.js +616 -0
  35. package/dist/src/commands/embeddings.js.map +1 -0
  36. package/dist/src/commands/hive-mind.d.ts.map +1 -1
  37. package/dist/src/commands/hive-mind.js +252 -35
  38. package/dist/src/commands/hive-mind.js.map +1 -1
  39. package/dist/src/commands/hooks.d.ts.map +1 -1
  40. package/dist/src/commands/hooks.js +326 -2
  41. package/dist/src/commands/hooks.js.map +1 -1
  42. package/dist/src/commands/index.d.ts +13 -0
  43. package/dist/src/commands/index.d.ts.map +1 -1
  44. package/dist/src/commands/index.js +52 -1
  45. package/dist/src/commands/index.js.map +1 -1
  46. package/dist/src/commands/mcp.js +4 -4
  47. package/dist/src/commands/mcp.js.map +1 -1
  48. package/dist/src/commands/memory.d.ts.map +1 -1
  49. package/dist/src/commands/memory.js +236 -170
  50. package/dist/src/commands/memory.js.map +1 -1
  51. package/dist/src/commands/migrate.js +1 -1
  52. package/dist/src/commands/migrate.js.map +1 -1
  53. package/dist/src/commands/neural.d.ts +10 -0
  54. package/dist/src/commands/neural.d.ts.map +1 -0
  55. package/dist/src/commands/neural.js +224 -0
  56. package/dist/src/commands/neural.js.map +1 -0
  57. package/dist/src/commands/performance.d.ts +10 -0
  58. package/dist/src/commands/performance.d.ts.map +1 -0
  59. package/dist/src/commands/performance.js +262 -0
  60. package/dist/src/commands/performance.js.map +1 -0
  61. package/dist/src/commands/plugins.d.ts +10 -0
  62. package/dist/src/commands/plugins.d.ts.map +1 -0
  63. package/dist/src/commands/plugins.js +280 -0
  64. package/dist/src/commands/plugins.js.map +1 -0
  65. package/dist/src/commands/process.d.ts.map +1 -1
  66. package/dist/src/commands/process.js +95 -20
  67. package/dist/src/commands/process.js.map +1 -1
  68. package/dist/src/commands/providers.d.ts +10 -0
  69. package/dist/src/commands/providers.d.ts.map +1 -0
  70. package/dist/src/commands/providers.js +232 -0
  71. package/dist/src/commands/providers.js.map +1 -0
  72. package/dist/src/commands/route.d.ts +16 -0
  73. package/dist/src/commands/route.d.ts.map +1 -0
  74. package/dist/src/commands/route.js +603 -0
  75. package/dist/src/commands/route.js.map +1 -0
  76. package/dist/src/commands/security.d.ts +10 -0
  77. package/dist/src/commands/security.d.ts.map +1 -0
  78. package/dist/src/commands/security.js +261 -0
  79. package/dist/src/commands/security.js.map +1 -0
  80. package/dist/src/commands/start.js +2 -2
  81. package/dist/src/commands/start.js.map +1 -1
  82. package/dist/src/commands/status.d.ts.map +1 -1
  83. package/dist/src/commands/status.js +26 -2
  84. package/dist/src/commands/status.js.map +1 -1
  85. package/dist/src/commands/swarm.js +6 -6
  86. package/dist/src/commands/swarm.js.map +1 -1
  87. package/dist/src/index.d.ts +4 -2
  88. package/dist/src/index.d.ts.map +1 -1
  89. package/dist/src/index.js +63 -5
  90. package/dist/src/index.js.map +1 -1
  91. package/dist/src/init/claudemd-generator.d.ts.map +1 -1
  92. package/dist/src/init/claudemd-generator.js +218 -362
  93. package/dist/src/init/claudemd-generator.js.map +1 -1
  94. package/dist/src/init/executor.d.ts.map +1 -1
  95. package/dist/src/init/executor.js +5 -0
  96. package/dist/src/init/executor.js.map +1 -1
  97. package/dist/src/init/settings-generator.d.ts.map +1 -1
  98. package/dist/src/init/settings-generator.js +22 -12
  99. package/dist/src/init/settings-generator.js.map +1 -1
  100. package/dist/src/mcp-client.d.ts.map +1 -1
  101. package/dist/src/mcp-client.js +17 -1
  102. package/dist/src/mcp-client.js.map +1 -1
  103. package/dist/src/mcp-server.d.ts.map +1 -1
  104. package/dist/src/mcp-server.js +5 -0
  105. package/dist/src/mcp-server.js.map +1 -1
  106. package/dist/src/mcp-tools/agent-tools.d.ts +1 -1
  107. package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
  108. package/dist/src/mcp-tools/agent-tools.js +350 -14
  109. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  110. package/dist/src/mcp-tools/analyze-tools.d.ts +38 -0
  111. package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -0
  112. package/dist/src/mcp-tools/analyze-tools.js +317 -0
  113. package/dist/src/mcp-tools/analyze-tools.js.map +1 -0
  114. package/dist/src/mcp-tools/config-tools.d.ts +1 -1
  115. package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
  116. package/dist/src/mcp-tools/config-tools.js +262 -15
  117. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  118. package/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -0
  119. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -0
  120. package/dist/src/mcp-tools/hive-mind-tools.js +447 -0
  121. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -0
  122. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  123. package/dist/src/mcp-tools/hooks-tools.js +80 -15
  124. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  125. package/dist/src/mcp-tools/index.d.ts +6 -0
  126. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  127. package/dist/src/mcp-tools/index.js +6 -0
  128. package/dist/src/mcp-tools/index.js.map +1 -1
  129. package/dist/src/mcp-tools/memory-tools.d.ts +1 -1
  130. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
  131. package/dist/src/mcp-tools/memory-tools.js +157 -9
  132. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  133. package/dist/src/mcp-tools/session-tools.d.ts +8 -0
  134. package/dist/src/mcp-tools/session-tools.d.ts.map +1 -0
  135. package/dist/src/mcp-tools/session-tools.js +315 -0
  136. package/dist/src/mcp-tools/session-tools.js.map +1 -0
  137. package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
  138. package/dist/src/mcp-tools/swarm-tools.js +37 -2
  139. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  140. package/dist/src/mcp-tools/task-tools.d.ts +8 -0
  141. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -0
  142. package/dist/src/mcp-tools/task-tools.js +302 -0
  143. package/dist/src/mcp-tools/task-tools.js.map +1 -0
  144. package/dist/src/mcp-tools/workflow-tools.d.ts +8 -0
  145. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -0
  146. package/dist/src/mcp-tools/workflow-tools.js +481 -0
  147. package/dist/src/mcp-tools/workflow-tools.js.map +1 -0
  148. package/dist/src/output.d.ts +16 -0
  149. package/dist/src/output.d.ts.map +1 -1
  150. package/dist/src/output.js +42 -0
  151. package/dist/src/output.js.map +1 -1
  152. package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
  153. package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
  154. package/dist/src/ruvector/ast-analyzer.js +277 -0
  155. package/dist/src/ruvector/ast-analyzer.js.map +1 -0
  156. package/dist/src/ruvector/coverage-router.d.ts +145 -0
  157. package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
  158. package/dist/src/ruvector/coverage-router.js +451 -0
  159. package/dist/src/ruvector/coverage-router.js.map +1 -0
  160. package/dist/src/ruvector/coverage-tools.d.ts +33 -0
  161. package/dist/src/ruvector/coverage-tools.d.ts.map +1 -0
  162. package/dist/src/ruvector/coverage-tools.js +157 -0
  163. package/dist/src/ruvector/coverage-tools.js.map +1 -0
  164. package/dist/src/ruvector/diff-classifier.d.ts +154 -0
  165. package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
  166. package/dist/src/ruvector/diff-classifier.js +508 -0
  167. package/dist/src/ruvector/diff-classifier.js.map +1 -0
  168. package/dist/src/ruvector/graph-analyzer.d.ts +174 -0
  169. package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
  170. package/dist/src/ruvector/graph-analyzer.js +878 -0
  171. package/dist/src/ruvector/graph-analyzer.js.map +1 -0
  172. package/dist/src/ruvector/index.d.ts +27 -0
  173. package/dist/src/ruvector/index.d.ts.map +1 -0
  174. package/dist/src/ruvector/index.js +47 -0
  175. package/dist/src/ruvector/index.js.map +1 -0
  176. package/dist/src/ruvector/q-learning-router.d.ts +211 -0
  177. package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
  178. package/dist/src/ruvector/q-learning-router.js +681 -0
  179. package/dist/src/ruvector/q-learning-router.js.map +1 -0
  180. package/dist/src/ruvector/vector-db.d.ts +69 -0
  181. package/dist/src/ruvector/vector-db.d.ts.map +1 -0
  182. package/dist/src/ruvector/vector-db.js +243 -0
  183. package/dist/src/ruvector/vector-db.js.map +1 -0
  184. package/dist/src/services/index.d.ts +7 -0
  185. package/dist/src/services/index.d.ts.map +1 -0
  186. package/dist/src/services/index.js +6 -0
  187. package/dist/src/services/index.js.map +1 -0
  188. package/dist/src/services/worker-daemon.d.ts +153 -0
  189. package/dist/src/services/worker-daemon.d.ts.map +1 -0
  190. package/dist/src/services/worker-daemon.js +567 -0
  191. package/dist/src/services/worker-daemon.js.map +1 -0
  192. package/dist/src/suggest.d.ts +53 -0
  193. package/dist/src/suggest.d.ts.map +1 -0
  194. package/dist/src/suggest.js +200 -0
  195. package/dist/src/suggest.js.map +1 -0
  196. package/dist/tsconfig.tsbuildinfo +1 -1
  197. package/package.json +28 -6
  198. package/.agentic-flow/intelligence.json +0 -16
  199. package/.claude-flow/metrics/agent-metrics.json +0 -1
  200. package/.claude-flow/metrics/performance.json +0 -87
  201. package/.claude-flow/metrics/task-metrics.json +0 -10
  202. package/__tests__/README.md +0 -140
  203. package/__tests__/TEST_SUMMARY.md +0 -144
  204. package/__tests__/cli.test.ts +0 -558
  205. package/__tests__/commands.test.ts +0 -726
  206. package/__tests__/config-adapter.test.ts +0 -362
  207. package/__tests__/config-loading.test.ts +0 -106
  208. package/__tests__/coverage/.tmp/coverage-0.json +0 -1
  209. package/__tests__/coverage/.tmp/coverage-1.json +0 -1
  210. package/__tests__/coverage/.tmp/coverage-2.json +0 -1
  211. package/__tests__/coverage/.tmp/coverage-3.json +0 -1
  212. package/__tests__/coverage/.tmp/coverage-4.json +0 -1
  213. package/__tests__/coverage/.tmp/coverage-5.json +0 -1
  214. package/__tests__/mcp-client.test.ts +0 -480
  215. package/__tests__/p1-commands.test.ts +0 -1064
  216. package/docs/CONFIG_LOADING.md +0 -236
  217. package/docs/IMPLEMENTATION_COMPLETE.md +0 -421
  218. package/docs/MCP_CLIENT_GUIDE.md +0 -620
  219. package/docs/REFACTORING_SUMMARY.md +0 -247
  220. package/src/commands/agent.ts +0 -941
  221. package/src/commands/config.ts +0 -452
  222. package/src/commands/hive-mind.ts +0 -762
  223. package/src/commands/hooks.ts +0 -2603
  224. package/src/commands/index.ts +0 -115
  225. package/src/commands/init.ts +0 -597
  226. package/src/commands/mcp.ts +0 -753
  227. package/src/commands/memory.ts +0 -1063
  228. package/src/commands/migrate.ts +0 -447
  229. package/src/commands/process.ts +0 -617
  230. package/src/commands/session.ts +0 -891
  231. package/src/commands/start.ts +0 -457
  232. package/src/commands/status.ts +0 -705
  233. package/src/commands/swarm.ts +0 -648
  234. package/src/commands/task.ts +0 -792
  235. package/src/commands/workflow.ts +0 -742
  236. package/src/config-adapter.ts +0 -210
  237. package/src/index.ts +0 -383
  238. package/src/infrastructure/in-memory-repositories.ts +0 -310
  239. package/src/init/claudemd-generator.ts +0 -631
  240. package/src/init/executor.ts +0 -756
  241. package/src/init/helpers-generator.ts +0 -628
  242. package/src/init/index.ts +0 -60
  243. package/src/init/mcp-generator.ts +0 -83
  244. package/src/init/settings-generator.ts +0 -274
  245. package/src/init/statusline-generator.ts +0 -211
  246. package/src/init/types.ts +0 -447
  247. package/src/mcp-client.ts +0 -227
  248. package/src/mcp-server.ts +0 -571
  249. package/src/mcp-tools/agent-tools.ts +0 -92
  250. package/src/mcp-tools/config-tools.ts +0 -88
  251. package/src/mcp-tools/hooks-tools.ts +0 -1819
  252. package/src/mcp-tools/index.ts +0 -12
  253. package/src/mcp-tools/memory-tools.ts +0 -89
  254. package/src/mcp-tools/swarm-tools.ts +0 -69
  255. package/src/mcp-tools/types.ts +0 -33
  256. package/src/output.ts +0 -593
  257. package/src/parser.ts +0 -417
  258. package/src/prompt.ts +0 -619
  259. package/src/types.ts +0 -287
  260. package/tmp.json +0 -0
  261. package/tsconfig.json +0 -16
  262. package/tsconfig.tsbuildinfo +0 -1
  263. package/vitest.config.ts +0 -13
@@ -0,0 +1,451 @@
1
+ /**
2
+ * Coverage Router for Test Routing
3
+ */
4
+ const DEFAULT_CONFIG = {
5
+ minCoverage: 70,
6
+ targetCoverage: 85,
7
+ incremental: true,
8
+ coverageTypes: ['line', 'branch', 'function', 'statement'],
9
+ };
10
+ export class CoverageRouter {
11
+ config;
12
+ ruvectorEngine = null;
13
+ useNative = false;
14
+ coverageHistory = [];
15
+ constructor(config = {}) {
16
+ this.config = { ...DEFAULT_CONFIG, ...config };
17
+ }
18
+ async initialize() {
19
+ try {
20
+ // @ruvector/coverage is optional - gracefully fallback if not installed
21
+ const ruvector = await import('@ruvector/coverage').catch(() => null);
22
+ if (ruvector) {
23
+ this.ruvectorEngine = ruvector.createCoverageRouter?.(this.config);
24
+ this.useNative = !!this.ruvectorEngine;
25
+ }
26
+ }
27
+ catch {
28
+ this.useNative = false;
29
+ }
30
+ }
31
+ parseCoverage(data, format = 'json') {
32
+ switch (format) {
33
+ case 'lcov': return this.parseLcov(data);
34
+ case 'istanbul': return this.parseIstanbul(data);
35
+ case 'cobertura': return this.parseCobertura(data);
36
+ default: return this.parseJson(data);
37
+ }
38
+ }
39
+ route(coverage, changedFiles) {
40
+ const gaps = this.calculateGaps(coverage);
41
+ const targetFiles = this.prioritizeFiles(coverage, changedFiles);
42
+ const action = this.determineAction(coverage, gaps);
43
+ const priority = this.calculatePriority(coverage, changedFiles);
44
+ const testTypes = this.recommendTestTypes(gaps);
45
+ const estimatedEffort = this.estimateEffort(gaps);
46
+ const impactScore = this.calculateImpact(coverage, targetFiles);
47
+ return { action, priority, targetFiles, testTypes, gaps, estimatedEffort, impactScore };
48
+ }
49
+ getTrend() {
50
+ if (this.coverageHistory.length < 2)
51
+ return { direction: 'stable', change: 0 };
52
+ const recent = this.coverageHistory[this.coverageHistory.length - 1];
53
+ const previous = this.coverageHistory[this.coverageHistory.length - 2];
54
+ const change = recent.overall - previous.overall;
55
+ return { direction: change > 0.5 ? 'up' : change < -0.5 ? 'down' : 'stable', change };
56
+ }
57
+ addToHistory(report) {
58
+ this.coverageHistory.push(report);
59
+ if (this.coverageHistory.length > 10)
60
+ this.coverageHistory.shift();
61
+ }
62
+ getStats() {
63
+ return { useNative: this.useNative, historySize: this.coverageHistory.length, minCoverage: this.config.minCoverage, targetCoverage: this.config.targetCoverage };
64
+ }
65
+ parseLcov(data) {
66
+ const files = [];
67
+ let currentFile = null;
68
+ const lines = data.split('\n');
69
+ for (const line of lines) {
70
+ if (line.startsWith('SF:')) {
71
+ if (currentFile?.path)
72
+ files.push(this.finalizeFileCoverage(currentFile));
73
+ currentFile = { path: line.substring(3), uncoveredLines: [], totalLines: 0, coveredLines: 0 };
74
+ }
75
+ else if (line.startsWith('LF:')) {
76
+ if (currentFile)
77
+ currentFile.totalLines = parseInt(line.substring(3), 10);
78
+ }
79
+ else if (line.startsWith('LH:')) {
80
+ if (currentFile)
81
+ currentFile.coveredLines = parseInt(line.substring(3), 10);
82
+ }
83
+ else if (line.startsWith('DA:')) {
84
+ const [lineNum, hits] = line.substring(3).split(',').map(Number);
85
+ if (currentFile && hits === 0)
86
+ currentFile.uncoveredLines?.push(lineNum);
87
+ }
88
+ else if (line === 'end_of_record') {
89
+ if (currentFile?.path)
90
+ files.push(this.finalizeFileCoverage(currentFile));
91
+ currentFile = null;
92
+ }
93
+ }
94
+ return this.buildReport(files);
95
+ }
96
+ parseIstanbul(data) {
97
+ const files = [];
98
+ for (const [path, coverage] of Object.entries(data)) {
99
+ const cov = coverage;
100
+ const statements = cov.s;
101
+ const functions = cov.f;
102
+ const branches = cov.b;
103
+ const statementCovered = Object.values(statements).filter(v => v > 0).length;
104
+ const statementTotal = Object.values(statements).length;
105
+ const functionCovered = Object.values(functions).filter(v => v > 0).length;
106
+ const functionTotal = Object.values(functions).length;
107
+ const branchCovered = Object.values(branches).flat().filter(v => v > 0).length;
108
+ const branchTotal = Object.values(branches).flat().length;
109
+ files.push({
110
+ path, lineCoverage: statementTotal > 0 ? (statementCovered / statementTotal) * 100 : 100,
111
+ branchCoverage: branchTotal > 0 ? (branchCovered / branchTotal) * 100 : 100,
112
+ functionCoverage: functionTotal > 0 ? (functionCovered / functionTotal) * 100 : 100,
113
+ statementCoverage: statementTotal > 0 ? (statementCovered / statementTotal) * 100 : 100,
114
+ uncoveredLines: [], totalLines: statementTotal, coveredLines: statementCovered,
115
+ });
116
+ }
117
+ return this.buildReport(files);
118
+ }
119
+ parseCobertura(data) {
120
+ const files = [];
121
+ const classMatches = data.matchAll(/<class[^>]*filename="([^"]+)"[^>]*line-rate="([^"]+)"[^>]*branch-rate="([^"]+)"[^>]*>/g);
122
+ for (const match of classMatches) {
123
+ files.push({
124
+ path: match[1], lineCoverage: parseFloat(match[2]) * 100, branchCoverage: parseFloat(match[3]) * 100,
125
+ functionCoverage: parseFloat(match[2]) * 100, statementCoverage: parseFloat(match[2]) * 100,
126
+ uncoveredLines: [], totalLines: 0, coveredLines: 0,
127
+ });
128
+ }
129
+ return this.buildReport(files);
130
+ }
131
+ parseJson(data) {
132
+ if (Array.isArray(data))
133
+ return this.buildReport(data);
134
+ const files = [];
135
+ for (const [path, coverage] of Object.entries(data)) {
136
+ const cov = coverage;
137
+ files.push({
138
+ path, lineCoverage: cov.lineCoverage || 0, branchCoverage: cov.branchCoverage || 0,
139
+ functionCoverage: cov.functionCoverage || 0, statementCoverage: cov.statementCoverage || 0,
140
+ uncoveredLines: cov.uncoveredLines || [], totalLines: cov.totalLines || 0, coveredLines: cov.coveredLines || 0,
141
+ });
142
+ }
143
+ return this.buildReport(files);
144
+ }
145
+ finalizeFileCoverage(partial) {
146
+ const lineCoverage = partial.totalLines && partial.totalLines > 0 ? (partial.coveredLines || 0) / partial.totalLines * 100 : 100;
147
+ return { path: partial.path || 'unknown', lineCoverage, branchCoverage: lineCoverage, functionCoverage: lineCoverage, statementCoverage: lineCoverage, uncoveredLines: partial.uncoveredLines || [], totalLines: partial.totalLines || 0, coveredLines: partial.coveredLines || 0 };
148
+ }
149
+ buildReport(files) {
150
+ const totalLines = files.reduce((sum, f) => sum + f.totalLines, 0);
151
+ const coveredLines = files.reduce((sum, f) => sum + f.coveredLines, 0);
152
+ const overall = totalLines > 0 ? (coveredLines / totalLines) * 100 : 100;
153
+ const avgLine = files.length > 0 ? files.reduce((sum, f) => sum + f.lineCoverage, 0) / files.length : 100;
154
+ const avgBranch = files.length > 0 ? files.reduce((sum, f) => sum + f.branchCoverage, 0) / files.length : 100;
155
+ const avgFunction = files.length > 0 ? files.reduce((sum, f) => sum + f.functionCoverage, 0) / files.length : 100;
156
+ const avgStatement = files.length > 0 ? files.reduce((sum, f) => sum + f.statementCoverage, 0) / files.length : 100;
157
+ const sortedByLine = [...files].sort((a, b) => a.lineCoverage - b.lineCoverage);
158
+ return { overall, byType: { line: avgLine, branch: avgBranch, function: avgFunction, statement: avgStatement }, byFile: files, lowestCoverage: sortedByLine.slice(0, 5), highestCoverage: sortedByLine.slice(-5).reverse(), uncoveredCritical: this.findCriticalUncovered(files), timestamp: Date.now() };
159
+ }
160
+ findCriticalUncovered(files) {
161
+ const critical = [];
162
+ const criticalPatterns = [/auth/, /security/, /payment/, /core/, /main/, /index/];
163
+ for (const file of files) {
164
+ if (file.lineCoverage < this.config.minCoverage) {
165
+ for (const pattern of criticalPatterns) {
166
+ if (pattern.test(file.path)) {
167
+ critical.push(file.path);
168
+ break;
169
+ }
170
+ }
171
+ }
172
+ }
173
+ return critical.slice(0, 10);
174
+ }
175
+ calculateGaps(coverage) {
176
+ const gaps = [];
177
+ for (const file of coverage.byFile) {
178
+ if (file.lineCoverage < this.config.targetCoverage) {
179
+ const gap = this.config.targetCoverage - file.lineCoverage;
180
+ gaps.push({ file: file.path, currentCoverage: file.lineCoverage, targetCoverage: this.config.targetCoverage, gap, suggestedTests: this.suggestTests(file) });
181
+ }
182
+ }
183
+ return gaps.sort((a, b) => b.gap - a.gap).slice(0, 10);
184
+ }
185
+ suggestTests(file) {
186
+ const suggestions = [];
187
+ if (file.uncoveredLines.length > 10)
188
+ suggestions.push('Add unit tests for uncovered code paths');
189
+ if (file.branchCoverage < 50)
190
+ suggestions.push('Add branch coverage tests (if/else paths)');
191
+ if (file.functionCoverage < 80)
192
+ suggestions.push('Add tests for untested functions');
193
+ if (/api|endpoint|route|handler/.test(file.path))
194
+ suggestions.push('Add integration tests for API endpoints');
195
+ return suggestions.slice(0, 3);
196
+ }
197
+ prioritizeFiles(coverage, changedFiles) {
198
+ let targetFiles = coverage.lowestCoverage.map(f => f.path);
199
+ if (changedFiles && changedFiles.length > 0) {
200
+ const changedWithLowCoverage = coverage.byFile.filter(f => changedFiles.some(cf => f.path.includes(cf))).filter(f => f.lineCoverage < this.config.targetCoverage).map(f => f.path);
201
+ targetFiles = [...new Set([...changedWithLowCoverage, ...targetFiles])];
202
+ }
203
+ return targetFiles.slice(0, 10);
204
+ }
205
+ determineAction(coverage, gaps) {
206
+ if (coverage.overall < this.config.minCoverage)
207
+ return 'prioritize';
208
+ if (gaps.length > 5)
209
+ return 'add-tests';
210
+ if (coverage.overall < this.config.targetCoverage)
211
+ return 'review-coverage';
212
+ return 'skip';
213
+ }
214
+ calculatePriority(coverage, changedFiles) {
215
+ let priority = 5;
216
+ if (coverage.overall < 50)
217
+ priority += 4;
218
+ else if (coverage.overall < 70)
219
+ priority += 2;
220
+ else if (coverage.overall < 85)
221
+ priority += 1;
222
+ priority += Math.min(3, coverage.uncoveredCritical.length);
223
+ if (changedFiles && changedFiles.length > 0) {
224
+ const changedLowCoverage = coverage.byFile.filter(f => changedFiles.some(cf => f.path.includes(cf))).filter(f => f.lineCoverage < this.config.minCoverage);
225
+ priority += Math.min(2, changedLowCoverage.length);
226
+ }
227
+ return Math.min(10, priority);
228
+ }
229
+ recommendTestTypes(gaps) {
230
+ const types = new Set(['unit']);
231
+ for (const gap of gaps) {
232
+ if (/api|endpoint|route|handler|service/.test(gap.file))
233
+ types.add('integration');
234
+ if (/page|component|view|ui/.test(gap.file))
235
+ types.add('e2e');
236
+ }
237
+ return Array.from(types);
238
+ }
239
+ estimateEffort(gaps) {
240
+ let effort = 0;
241
+ for (const gap of gaps)
242
+ effort += (gap.gap / 10) * 0.5;
243
+ return Math.round(effort * 10) / 10;
244
+ }
245
+ calculateImpact(coverage, targetFiles) {
246
+ const potentialGain = targetFiles.reduce((sum, file) => {
247
+ const fileCov = coverage.byFile.find(f => f.path === file);
248
+ return fileCov ? sum + (this.config.targetCoverage - fileCov.lineCoverage) : sum;
249
+ }, 0);
250
+ return Math.min(100, Math.round(potentialGain / targetFiles.length || 0));
251
+ }
252
+ }
253
+ export function createCoverageRouter(config) {
254
+ return new CoverageRouter(config);
255
+ }
256
+ /**
257
+ * Route a task based on coverage analysis
258
+ */
259
+ export async function coverageRoute(task, options = {}) {
260
+ const router = new CoverageRouter({
261
+ targetCoverage: options.threshold || 80,
262
+ });
263
+ // Try to load coverage data
264
+ const coverage = await loadProjectCoverage(options.projectRoot);
265
+ if (!coverage) {
266
+ return {
267
+ action: 'skip',
268
+ priority: 1,
269
+ targetFiles: [],
270
+ testTypes: ['unit'],
271
+ gaps: [],
272
+ estimatedEffort: 0,
273
+ impactScore: 0,
274
+ };
275
+ }
276
+ return router.route(coverage);
277
+ }
278
+ /**
279
+ * Suggest coverage improvements for a path
280
+ */
281
+ export async function coverageSuggest(path, options = {}) {
282
+ const limit = options.limit || 20;
283
+ const threshold = options.threshold || 80;
284
+ const coverage = await loadProjectCoverage(options.projectRoot);
285
+ if (!coverage) {
286
+ return {
287
+ path,
288
+ suggestions: [],
289
+ totalGap: 0,
290
+ estimatedEffort: 0,
291
+ };
292
+ }
293
+ // Filter files matching the path
294
+ const matchingFiles = coverage.byFile.filter(f => f.path.includes(path));
295
+ const belowThreshold = matchingFiles.filter(f => f.lineCoverage < threshold);
296
+ const suggestions = belowThreshold
297
+ .map(f => ({
298
+ file: f.path,
299
+ currentCoverage: f.lineCoverage,
300
+ targetCoverage: threshold,
301
+ gap: threshold - f.lineCoverage,
302
+ priority: calculateFilePriority(f.path, f.lineCoverage, threshold),
303
+ suggestedTests: suggestTestsForFile(f),
304
+ }))
305
+ .sort((a, b) => b.priority - a.priority)
306
+ .slice(0, limit);
307
+ const totalGap = suggestions.reduce((sum, s) => sum + s.gap, 0);
308
+ const estimatedEffort = totalGap * 0.1; // Rough estimate: 0.1 hours per % gap
309
+ return { path, suggestions, totalGap, estimatedEffort };
310
+ }
311
+ /**
312
+ * List all coverage gaps with agent assignments
313
+ */
314
+ export async function coverageGaps(options = {}) {
315
+ const threshold = options.threshold || 80;
316
+ const groupByAgent = options.groupByAgent !== false;
317
+ const coverage = await loadProjectCoverage(options.projectRoot);
318
+ if (!coverage) {
319
+ return {
320
+ totalGaps: 0,
321
+ gaps: [],
322
+ byAgent: {},
323
+ summary: 'No coverage data found',
324
+ };
325
+ }
326
+ const belowThreshold = coverage.byFile.filter(f => f.lineCoverage < threshold);
327
+ const gaps = belowThreshold.map(f => ({
328
+ file: f.path,
329
+ currentCoverage: f.lineCoverage,
330
+ targetCoverage: threshold,
331
+ gap: threshold - f.lineCoverage,
332
+ priority: calculateFilePriority(f.path, f.lineCoverage, threshold),
333
+ suggestedAgent: suggestAgentForFile(f.path),
334
+ }));
335
+ const byAgent = {};
336
+ if (groupByAgent) {
337
+ for (const gap of gaps) {
338
+ if (!byAgent[gap.suggestedAgent]) {
339
+ byAgent[gap.suggestedAgent] = [];
340
+ }
341
+ byAgent[gap.suggestedAgent].push(gap.file);
342
+ }
343
+ }
344
+ return {
345
+ totalGaps: gaps.length,
346
+ gaps,
347
+ byAgent,
348
+ summary: `${gaps.length} files below ${threshold}% coverage threshold`,
349
+ };
350
+ }
351
+ /**
352
+ * Load project coverage data (stub - implement based on project setup)
353
+ */
354
+ async function loadProjectCoverage(projectRoot) {
355
+ const { existsSync, readFileSync } = require('fs');
356
+ const { join } = require('path');
357
+ const root = projectRoot || process.cwd();
358
+ // Try common coverage locations
359
+ const coveragePaths = [
360
+ join(root, 'coverage', 'coverage-final.json'),
361
+ join(root, 'coverage', 'lcov.info'),
362
+ join(root, '.nyc_output', 'coverage.json'),
363
+ join(root, 'coverage.json'),
364
+ ];
365
+ for (const coveragePath of coveragePaths) {
366
+ if (existsSync(coveragePath)) {
367
+ try {
368
+ const content = readFileSync(coveragePath, 'utf-8');
369
+ const router = new CoverageRouter();
370
+ if (coveragePath.endsWith('.json')) {
371
+ return router.parseCoverage(JSON.parse(content), 'istanbul');
372
+ }
373
+ else if (coveragePath.endsWith('.info')) {
374
+ return router.parseCoverage(content, 'lcov');
375
+ }
376
+ }
377
+ catch {
378
+ // Continue to next path
379
+ }
380
+ }
381
+ }
382
+ return null;
383
+ }
384
+ /**
385
+ * Calculate priority for a file based on path and coverage
386
+ */
387
+ function calculateFilePriority(path, coverage, threshold) {
388
+ let priority = 5;
389
+ // Gap-based priority
390
+ const gap = threshold - coverage;
391
+ if (gap > 50)
392
+ priority += 3;
393
+ else if (gap > 30)
394
+ priority += 2;
395
+ else if (gap > 15)
396
+ priority += 1;
397
+ // Path-based priority
398
+ const lowerPath = path.toLowerCase();
399
+ if (/core|main|index/.test(lowerPath))
400
+ priority += 2;
401
+ if (/auth|security|payment/.test(lowerPath))
402
+ priority += 3;
403
+ if (/api|service|controller/.test(lowerPath))
404
+ priority += 1;
405
+ if (/util|helper/.test(lowerPath))
406
+ priority -= 1;
407
+ if (/test|spec|mock/.test(lowerPath))
408
+ priority -= 2;
409
+ return Math.max(1, Math.min(10, priority));
410
+ }
411
+ /**
412
+ * Suggest tests for a file based on its coverage
413
+ */
414
+ function suggestTestsForFile(file) {
415
+ const suggestions = [];
416
+ if (file.uncoveredLines.length > 10) {
417
+ suggestions.push('Add unit tests for uncovered code paths');
418
+ }
419
+ if (file.branchCoverage < 50) {
420
+ suggestions.push('Add branch coverage tests (if/else paths)');
421
+ }
422
+ if (file.functionCoverage < 80) {
423
+ suggestions.push('Add tests for untested functions');
424
+ }
425
+ const lowerPath = file.path.toLowerCase();
426
+ if (/api|endpoint|route|handler/.test(lowerPath)) {
427
+ suggestions.push('Add integration tests for API endpoints');
428
+ }
429
+ if (/component|view|ui/.test(lowerPath)) {
430
+ suggestions.push('Add component tests with user interactions');
431
+ }
432
+ return suggestions.slice(0, 3);
433
+ }
434
+ /**
435
+ * Suggest an agent type for a file
436
+ */
437
+ function suggestAgentForFile(path) {
438
+ const lowerPath = path.toLowerCase();
439
+ if (/api|endpoint|route|controller/.test(lowerPath))
440
+ return 'api-tester';
441
+ if (/component|view|ui|page/.test(lowerPath))
442
+ return 'ui-tester';
443
+ if (/service|repository|model/.test(lowerPath))
444
+ return 'unit-tester';
445
+ if (/integration|e2e/.test(lowerPath))
446
+ return 'e2e-tester';
447
+ if (/util|helper|lib/.test(lowerPath))
448
+ return 'unit-tester';
449
+ return 'tester';
450
+ }
451
+ //# sourceMappingURL=coverage-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-router.js","sourceRoot":"","sources":["../../../src/ruvector/coverage-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Coverage Router MCP Tools
3
+ *
4
+ * MCP tool implementations for coverage-aware routing.
5
+ * Integrates with hooks_coverage_route and hooks_coverage_suggest from ruvector.
6
+ */
7
+ import type { MCPTool } from '../mcp-tools/types.js';
8
+ /**
9
+ * Coverage-aware routing MCP tool
10
+ *
11
+ * Routes tasks to optimal agents based on test coverage gaps.
12
+ * Uses ruvector's hooks_coverage_route when available.
13
+ */
14
+ export declare const hooksCoverageRoute: MCPTool;
15
+ /**
16
+ * Coverage suggestions MCP tool
17
+ *
18
+ * Suggests which files need better coverage in a given path.
19
+ * Uses ruvector's hooks_coverage_suggest when available.
20
+ */
21
+ export declare const hooksCoverageSuggest: MCPTool;
22
+ /**
23
+ * Coverage gaps MCP tool
24
+ *
25
+ * Lists all coverage gaps in the project with agent assignments.
26
+ */
27
+ export declare const hooksCoverageGaps: MCPTool;
28
+ /**
29
+ * All coverage router MCP tools
30
+ */
31
+ export declare const coverageRouterTools: MCPTool[];
32
+ export default coverageRouterTools;
33
+ //# sourceMappingURL=coverage-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-tools.d.ts","sourceRoot":"","sources":["../../../src/ruvector/coverage-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAUrD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAuChC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,OA6ClC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAuC/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,EAIxC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}