@sparkleideas/cli 3.1.0-alpha.37 → 3.1.0-alpha.64

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 (627) hide show
  1. package/.claude/helpers/learning-service.mjs +3 -3
  2. package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
  3. package/dist/src/benchmarks/pretrain/index.d.ts.map +1 -0
  4. package/dist/src/benchmarks/pretrain/index.js +404 -0
  5. package/dist/src/benchmarks/pretrain/index.js.map +1 -0
  6. package/dist/src/commands/agent.d.ts +8 -0
  7. package/dist/src/commands/agent.d.ts.map +1 -0
  8. package/dist/src/commands/agent.js +819 -0
  9. package/dist/src/commands/agent.js.map +1 -0
  10. package/dist/src/commands/analyze.d.ts +19 -0
  11. package/dist/src/commands/analyze.d.ts.map +1 -0
  12. package/dist/src/commands/analyze.js +1823 -0
  13. package/dist/src/commands/analyze.js.map +1 -0
  14. package/dist/src/commands/benchmark.d.ts +10 -0
  15. package/dist/src/commands/benchmark.d.ts.map +1 -0
  16. package/dist/src/commands/benchmark.js +459 -0
  17. package/dist/src/commands/benchmark.js.map +1 -0
  18. package/dist/src/commands/claims.d.ts +10 -0
  19. package/dist/src/commands/claims.d.ts.map +1 -0
  20. package/dist/src/commands/claims.js +373 -0
  21. package/dist/src/commands/claims.js.map +1 -0
  22. package/dist/src/commands/completions.d.ts +10 -0
  23. package/dist/src/commands/completions.d.ts.map +1 -0
  24. package/dist/src/commands/completions.js +539 -0
  25. package/dist/src/commands/completions.js.map +1 -0
  26. package/dist/src/commands/config.d.ts +8 -0
  27. package/dist/src/commands/config.d.ts.map +1 -0
  28. package/dist/src/commands/config.js +406 -0
  29. package/dist/src/commands/config.js.map +1 -0
  30. package/dist/src/commands/daemon.d.ts +8 -0
  31. package/dist/src/commands/daemon.d.ts.map +1 -0
  32. package/dist/src/commands/daemon.js +593 -0
  33. package/dist/src/commands/daemon.js.map +1 -0
  34. package/dist/src/commands/deployment.d.ts +10 -0
  35. package/dist/src/commands/deployment.d.ts.map +1 -0
  36. package/dist/src/commands/deployment.js +289 -0
  37. package/dist/src/commands/deployment.js.map +1 -0
  38. package/dist/src/commands/doctor.d.ts +10 -0
  39. package/dist/src/commands/doctor.d.ts.map +1 -0
  40. package/dist/src/commands/doctor.js +571 -0
  41. package/dist/src/commands/doctor.js.map +1 -0
  42. package/dist/src/commands/embeddings.d.ts +18 -0
  43. package/dist/src/commands/embeddings.d.ts.map +1 -0
  44. package/dist/src/commands/embeddings.js +1576 -0
  45. package/dist/src/commands/embeddings.js.map +1 -0
  46. package/dist/src/commands/guidance.d.ts +8 -0
  47. package/dist/src/commands/guidance.d.ts.map +1 -0
  48. package/dist/src/commands/guidance.js +560 -0
  49. package/dist/src/commands/guidance.js.map +1 -0
  50. package/dist/src/commands/hive-mind.d.ts +11 -0
  51. package/dist/src/commands/hive-mind.d.ts.map +1 -0
  52. package/dist/src/commands/hive-mind.js +1230 -0
  53. package/dist/src/commands/hive-mind.js.map +1 -0
  54. package/dist/src/commands/hooks.d.ts +8 -0
  55. package/dist/src/commands/hooks.d.ts.map +1 -0
  56. package/dist/src/commands/hooks.js +3756 -0
  57. package/dist/src/commands/hooks.js.map +1 -0
  58. package/dist/src/commands/index.d.ts +108 -0
  59. package/dist/src/commands/index.d.ts.map +1 -0
  60. package/dist/src/commands/index.js +359 -0
  61. package/dist/src/commands/index.js.map +1 -0
  62. package/dist/src/commands/init.d.ts +8 -0
  63. package/dist/src/commands/init.d.ts.map +1 -0
  64. package/dist/src/commands/init.js +970 -0
  65. package/dist/src/commands/init.js.map +1 -0
  66. package/dist/src/commands/issues.d.ts +21 -0
  67. package/dist/src/commands/issues.d.ts.map +1 -0
  68. package/dist/src/commands/issues.js +567 -0
  69. package/dist/src/commands/issues.js.map +1 -0
  70. package/dist/src/commands/mcp.d.ts +11 -0
  71. package/dist/src/commands/mcp.d.ts.map +1 -0
  72. package/dist/src/commands/mcp.js +700 -0
  73. package/dist/src/commands/mcp.js.map +1 -0
  74. package/dist/src/commands/memory.d.ts +8 -0
  75. package/dist/src/commands/memory.d.ts.map +1 -0
  76. package/dist/src/commands/memory.js +1268 -0
  77. package/dist/src/commands/memory.js.map +1 -0
  78. package/dist/src/commands/migrate.d.ts +8 -0
  79. package/dist/src/commands/migrate.d.ts.map +1 -0
  80. package/dist/src/commands/migrate.js +410 -0
  81. package/dist/src/commands/migrate.js.map +1 -0
  82. package/dist/src/commands/neural.d.ts +10 -0
  83. package/dist/src/commands/neural.d.ts.map +1 -0
  84. package/dist/src/commands/neural.js +1448 -0
  85. package/dist/src/commands/neural.js.map +1 -0
  86. package/dist/src/commands/performance.d.ts +10 -0
  87. package/dist/src/commands/performance.d.ts.map +1 -0
  88. package/dist/src/commands/performance.js +579 -0
  89. package/dist/src/commands/performance.js.map +1 -0
  90. package/dist/src/commands/plugins.d.ts +11 -0
  91. package/dist/src/commands/plugins.d.ts.map +1 -0
  92. package/dist/src/commands/plugins.js +820 -0
  93. package/dist/src/commands/plugins.js.map +1 -0
  94. package/dist/src/commands/process.d.ts +10 -0
  95. package/dist/src/commands/process.d.ts.map +1 -0
  96. package/dist/src/commands/process.js +641 -0
  97. package/dist/src/commands/process.js.map +1 -0
  98. package/dist/src/commands/progress.d.ts +11 -0
  99. package/dist/src/commands/progress.d.ts.map +1 -0
  100. package/dist/src/commands/progress.js +259 -0
  101. package/dist/src/commands/progress.js.map +1 -0
  102. package/dist/src/commands/providers.d.ts +10 -0
  103. package/dist/src/commands/providers.d.ts.map +1 -0
  104. package/dist/src/commands/providers.js +232 -0
  105. package/dist/src/commands/providers.js.map +1 -0
  106. package/dist/src/commands/route.d.ts +16 -0
  107. package/dist/src/commands/route.d.ts.map +1 -0
  108. package/dist/src/commands/route.js +813 -0
  109. package/dist/src/commands/route.js.map +1 -0
  110. package/dist/src/commands/ruvector/backup.d.ts +11 -0
  111. package/dist/src/commands/ruvector/backup.d.ts.map +1 -0
  112. package/dist/src/commands/ruvector/backup.js +746 -0
  113. package/dist/src/commands/ruvector/backup.js.map +1 -0
  114. package/dist/src/commands/ruvector/benchmark.d.ts +11 -0
  115. package/dist/src/commands/ruvector/benchmark.d.ts.map +1 -0
  116. package/dist/src/commands/ruvector/benchmark.js +480 -0
  117. package/dist/src/commands/ruvector/benchmark.js.map +1 -0
  118. package/dist/src/commands/ruvector/import.d.ts +18 -0
  119. package/dist/src/commands/ruvector/import.d.ts.map +1 -0
  120. package/dist/src/commands/ruvector/import.js +349 -0
  121. package/dist/src/commands/ruvector/import.js.map +1 -0
  122. package/dist/src/commands/ruvector/index.d.ts +29 -0
  123. package/dist/src/commands/ruvector/index.d.ts.map +1 -0
  124. package/dist/src/commands/ruvector/index.js +129 -0
  125. package/dist/src/commands/ruvector/index.js.map +1 -0
  126. package/dist/src/commands/ruvector/init.d.ts +11 -0
  127. package/dist/src/commands/ruvector/init.d.ts.map +1 -0
  128. package/dist/src/commands/ruvector/init.js +431 -0
  129. package/dist/src/commands/ruvector/init.js.map +1 -0
  130. package/dist/src/commands/ruvector/migrate.d.ts +11 -0
  131. package/dist/src/commands/ruvector/migrate.d.ts.map +1 -0
  132. package/dist/src/commands/ruvector/migrate.js +481 -0
  133. package/dist/src/commands/ruvector/migrate.js.map +1 -0
  134. package/dist/src/commands/ruvector/optimize.d.ts +11 -0
  135. package/dist/src/commands/ruvector/optimize.d.ts.map +1 -0
  136. package/dist/src/commands/ruvector/optimize.js +503 -0
  137. package/dist/src/commands/ruvector/optimize.js.map +1 -0
  138. package/dist/src/commands/ruvector/setup.d.ts +18 -0
  139. package/dist/src/commands/ruvector/setup.d.ts.map +1 -0
  140. package/dist/src/commands/ruvector/setup.js +765 -0
  141. package/dist/src/commands/ruvector/setup.js.map +1 -0
  142. package/dist/src/commands/ruvector/status.d.ts +11 -0
  143. package/dist/src/commands/ruvector/status.d.ts.map +1 -0
  144. package/dist/src/commands/ruvector/status.js +456 -0
  145. package/dist/src/commands/ruvector/status.js.map +1 -0
  146. package/dist/src/commands/security.d.ts +10 -0
  147. package/dist/src/commands/security.d.ts.map +1 -0
  148. package/dist/src/commands/security.js +575 -0
  149. package/dist/src/commands/security.js.map +1 -0
  150. package/dist/src/commands/session.d.ts +8 -0
  151. package/dist/src/commands/session.d.ts.map +1 -0
  152. package/dist/src/commands/session.js +750 -0
  153. package/dist/src/commands/session.js.map +1 -0
  154. package/dist/src/commands/start.d.ts +8 -0
  155. package/dist/src/commands/start.d.ts.map +1 -0
  156. package/dist/src/commands/start.js +418 -0
  157. package/dist/src/commands/start.js.map +1 -0
  158. package/dist/src/commands/status.d.ts +8 -0
  159. package/dist/src/commands/status.d.ts.map +1 -0
  160. package/dist/src/commands/status.js +584 -0
  161. package/dist/src/commands/status.js.map +1 -0
  162. package/dist/src/commands/swarm.d.ts +8 -0
  163. package/dist/src/commands/swarm.d.ts.map +1 -0
  164. package/dist/src/commands/swarm.js +748 -0
  165. package/dist/src/commands/swarm.js.map +1 -0
  166. package/dist/src/commands/task.d.ts +8 -0
  167. package/dist/src/commands/task.d.ts.map +1 -0
  168. package/dist/src/commands/task.js +671 -0
  169. package/dist/src/commands/task.js.map +1 -0
  170. package/dist/src/commands/transfer-store.d.ts +13 -0
  171. package/dist/src/commands/transfer-store.d.ts.map +1 -0
  172. package/dist/src/commands/transfer-store.js +428 -0
  173. package/dist/src/commands/transfer-store.js.map +1 -0
  174. package/dist/src/commands/update.d.ts +8 -0
  175. package/dist/src/commands/update.d.ts.map +1 -0
  176. package/dist/src/commands/update.js +276 -0
  177. package/dist/src/commands/update.js.map +1 -0
  178. package/dist/src/commands/workflow.d.ts +8 -0
  179. package/dist/src/commands/workflow.d.ts.map +1 -0
  180. package/dist/src/commands/workflow.js +617 -0
  181. package/dist/src/commands/workflow.js.map +1 -0
  182. package/dist/src/config-adapter.d.ts +15 -0
  183. package/dist/src/config-adapter.d.ts.map +1 -0
  184. package/dist/src/config-adapter.js +186 -0
  185. package/dist/src/config-adapter.js.map +1 -0
  186. package/dist/src/index.d.ts +76 -0
  187. package/dist/src/index.d.ts.map +1 -0
  188. package/dist/src/index.js +470 -0
  189. package/dist/src/index.js.map +1 -0
  190. package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
  191. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +1 -0
  192. package/dist/src/infrastructure/in-memory-repositories.js +264 -0
  193. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -0
  194. package/dist/src/init/claudemd-generator.d.ts +25 -0
  195. package/dist/src/init/claudemd-generator.d.ts.map +1 -0
  196. package/dist/src/init/claudemd-generator.js +486 -0
  197. package/dist/src/init/claudemd-generator.js.map +1 -0
  198. package/dist/src/init/executor.d.ts +41 -0
  199. package/dist/src/init/executor.d.ts.map +1 -0
  200. package/dist/src/init/executor.js +1630 -0
  201. package/dist/src/init/executor.js.map +1 -0
  202. package/dist/src/init/helpers-generator.d.ts +42 -0
  203. package/dist/src/init/helpers-generator.d.ts.map +1 -0
  204. package/dist/src/init/helpers-generator.js +613 -0
  205. package/dist/src/init/helpers-generator.js.map +1 -0
  206. package/dist/src/init/index.d.ts +13 -0
  207. package/dist/src/init/index.d.ts.map +1 -0
  208. package/dist/src/init/index.js +15 -0
  209. package/dist/src/init/index.js.map +1 -0
  210. package/dist/src/init/mcp-generator.d.ts +27 -0
  211. package/dist/src/init/mcp-generator.d.ts.map +1 -0
  212. package/dist/src/init/mcp-generator.js +100 -0
  213. package/dist/src/init/mcp-generator.js.map +1 -0
  214. package/dist/src/init/settings-generator.d.ts +14 -0
  215. package/dist/src/init/settings-generator.d.ts.map +1 -0
  216. package/dist/src/init/settings-generator.js +396 -0
  217. package/dist/src/init/settings-generator.js.map +1 -0
  218. package/dist/src/init/statusline-generator.d.ts +20 -0
  219. package/dist/src/init/statusline-generator.d.ts.map +1 -0
  220. package/dist/src/init/statusline-generator.js +1241 -0
  221. package/dist/src/init/statusline-generator.js.map +1 -0
  222. package/dist/src/init/types.d.ts +279 -0
  223. package/dist/src/init/types.d.ts.map +1 -0
  224. package/dist/src/init/types.js +252 -0
  225. package/dist/src/init/types.js.map +1 -0
  226. package/dist/src/mcp-client.d.ts +92 -0
  227. package/dist/src/mcp-client.d.ts.map +1 -0
  228. package/dist/src/mcp-client.js +233 -0
  229. package/dist/src/mcp-client.js.map +1 -0
  230. package/dist/src/mcp-server.d.ts +161 -0
  231. package/dist/src/mcp-server.d.ts.map +1 -0
  232. package/dist/src/mcp-server.js +601 -0
  233. package/dist/src/mcp-server.js.map +1 -0
  234. package/dist/src/mcp-tools/agent-tools.d.ts +9 -0
  235. package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -0
  236. package/dist/src/mcp-tools/agent-tools.js +549 -0
  237. package/dist/src/mcp-tools/agent-tools.js.map +1 -0
  238. package/dist/src/mcp-tools/analyze-tools.d.ts +38 -0
  239. package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -0
  240. package/dist/src/mcp-tools/analyze-tools.js +317 -0
  241. package/dist/src/mcp-tools/analyze-tools.js.map +1 -0
  242. package/dist/src/mcp-tools/auto-install.d.ts +83 -0
  243. package/dist/src/mcp-tools/auto-install.d.ts.map +1 -0
  244. package/dist/src/mcp-tools/auto-install.js +131 -0
  245. package/dist/src/mcp-tools/auto-install.js.map +1 -0
  246. package/dist/src/mcp-tools/browser-tools.d.ts +13 -0
  247. package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -0
  248. package/dist/src/mcp-tools/browser-tools.js +550 -0
  249. package/dist/src/mcp-tools/browser-tools.js.map +1 -0
  250. package/dist/src/mcp-tools/claims-tools.d.ts +12 -0
  251. package/dist/src/mcp-tools/claims-tools.d.ts.map +1 -0
  252. package/dist/src/mcp-tools/claims-tools.js +732 -0
  253. package/dist/src/mcp-tools/claims-tools.js.map +1 -0
  254. package/dist/src/mcp-tools/config-tools.d.ts +8 -0
  255. package/dist/src/mcp-tools/config-tools.d.ts.map +1 -0
  256. package/dist/src/mcp-tools/config-tools.js +333 -0
  257. package/dist/src/mcp-tools/config-tools.js.map +1 -0
  258. package/dist/src/mcp-tools/coordination-tools.d.ts +13 -0
  259. package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -0
  260. package/dist/src/mcp-tools/coordination-tools.js +486 -0
  261. package/dist/src/mcp-tools/coordination-tools.js.map +1 -0
  262. package/dist/src/mcp-tools/daa-tools.d.ts +13 -0
  263. package/dist/src/mcp-tools/daa-tools.d.ts.map +1 -0
  264. package/dist/src/mcp-tools/daa-tools.js +426 -0
  265. package/dist/src/mcp-tools/daa-tools.js.map +1 -0
  266. package/dist/src/mcp-tools/embeddings-tools.d.ts +9 -0
  267. package/dist/src/mcp-tools/embeddings-tools.d.ts.map +1 -0
  268. package/dist/src/mcp-tools/embeddings-tools.js +782 -0
  269. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -0
  270. package/dist/src/mcp-tools/github-tools.d.ts +13 -0
  271. package/dist/src/mcp-tools/github-tools.d.ts.map +1 -0
  272. package/dist/src/mcp-tools/github-tools.js +373 -0
  273. package/dist/src/mcp-tools/github-tools.js.map +1 -0
  274. package/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -0
  275. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -0
  276. package/dist/src/mcp-tools/hive-mind-tools.js +583 -0
  277. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -0
  278. package/dist/src/mcp-tools/hooks-tools.d.ts +44 -0
  279. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -0
  280. package/dist/src/mcp-tools/hooks-tools.js +2797 -0
  281. package/dist/src/mcp-tools/hooks-tools.js.map +1 -0
  282. package/dist/src/mcp-tools/index.d.ts +23 -0
  283. package/dist/src/mcp-tools/index.d.ts.map +1 -0
  284. package/dist/src/mcp-tools/index.js +22 -0
  285. package/dist/src/mcp-tools/index.js.map +1 -0
  286. package/dist/src/mcp-tools/memory-tools.d.ts +14 -0
  287. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -0
  288. package/dist/src/mcp-tools/memory-tools.js +482 -0
  289. package/dist/src/mcp-tools/memory-tools.js.map +1 -0
  290. package/dist/src/mcp-tools/neural-tools.d.ts +16 -0
  291. package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -0
  292. package/dist/src/mcp-tools/neural-tools.js +456 -0
  293. package/dist/src/mcp-tools/neural-tools.js.map +1 -0
  294. package/dist/src/mcp-tools/performance-tools.d.ts +16 -0
  295. package/dist/src/mcp-tools/performance-tools.d.ts.map +1 -0
  296. package/dist/src/mcp-tools/performance-tools.js +534 -0
  297. package/dist/src/mcp-tools/performance-tools.js.map +1 -0
  298. package/dist/src/mcp-tools/progress-tools.d.ts +14 -0
  299. package/dist/src/mcp-tools/progress-tools.d.ts.map +1 -0
  300. package/dist/src/mcp-tools/progress-tools.js +348 -0
  301. package/dist/src/mcp-tools/progress-tools.js.map +1 -0
  302. package/dist/src/mcp-tools/security-tools.d.ts +18 -0
  303. package/dist/src/mcp-tools/security-tools.d.ts.map +1 -0
  304. package/dist/src/mcp-tools/security-tools.js +434 -0
  305. package/dist/src/mcp-tools/security-tools.js.map +1 -0
  306. package/dist/src/mcp-tools/session-tools.d.ts +8 -0
  307. package/dist/src/mcp-tools/session-tools.d.ts.map +1 -0
  308. package/dist/src/mcp-tools/session-tools.js +315 -0
  309. package/dist/src/mcp-tools/session-tools.js.map +1 -0
  310. package/dist/src/mcp-tools/swarm-tools.d.ts +8 -0
  311. package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -0
  312. package/dist/src/mcp-tools/swarm-tools.js +102 -0
  313. package/dist/src/mcp-tools/swarm-tools.js.map +1 -0
  314. package/dist/src/mcp-tools/system-tools.d.ts +13 -0
  315. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -0
  316. package/dist/src/mcp-tools/system-tools.js +314 -0
  317. package/dist/src/mcp-tools/system-tools.js.map +1 -0
  318. package/dist/src/mcp-tools/task-tools.d.ts +8 -0
  319. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -0
  320. package/dist/src/mcp-tools/task-tools.js +302 -0
  321. package/dist/src/mcp-tools/task-tools.js.map +1 -0
  322. package/dist/src/mcp-tools/terminal-tools.d.ts +13 -0
  323. package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -0
  324. package/dist/src/mcp-tools/terminal-tools.js +246 -0
  325. package/dist/src/mcp-tools/terminal-tools.js.map +1 -0
  326. package/dist/src/mcp-tools/transfer-tools.d.ts +14 -0
  327. package/dist/src/mcp-tools/transfer-tools.d.ts.map +1 -0
  328. package/dist/src/mcp-tools/transfer-tools.js +396 -0
  329. package/dist/src/mcp-tools/transfer-tools.js.map +1 -0
  330. package/dist/src/mcp-tools/types.d.ts +31 -0
  331. package/dist/src/mcp-tools/types.d.ts.map +1 -0
  332. package/dist/src/mcp-tools/types.js +7 -0
  333. package/dist/src/mcp-tools/types.js.map +1 -0
  334. package/dist/src/mcp-tools/workflow-tools.d.ts +8 -0
  335. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -0
  336. package/dist/src/mcp-tools/workflow-tools.js +481 -0
  337. package/dist/src/mcp-tools/workflow-tools.js.map +1 -0
  338. package/dist/src/memory/ewc-consolidation.d.ts +271 -0
  339. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -0
  340. package/dist/src/memory/ewc-consolidation.js +542 -0
  341. package/dist/src/memory/ewc-consolidation.js.map +1 -0
  342. package/dist/src/memory/intelligence.d.ts +285 -0
  343. package/dist/src/memory/intelligence.d.ts.map +1 -0
  344. package/dist/src/memory/intelligence.js +766 -0
  345. package/dist/src/memory/intelligence.js.map +1 -0
  346. package/dist/src/memory/memory-initializer.d.ts +396 -0
  347. package/dist/src/memory/memory-initializer.d.ts.map +1 -0
  348. package/dist/src/memory/memory-initializer.js +1933 -0
  349. package/dist/src/memory/memory-initializer.js.map +1 -0
  350. package/dist/src/memory/sona-optimizer.d.ts +227 -0
  351. package/dist/src/memory/sona-optimizer.d.ts.map +1 -0
  352. package/dist/src/memory/sona-optimizer.js +633 -0
  353. package/dist/src/memory/sona-optimizer.js.map +1 -0
  354. package/dist/src/output.d.ts +133 -0
  355. package/dist/src/output.d.ts.map +1 -0
  356. package/dist/src/output.js +513 -0
  357. package/dist/src/output.js.map +1 -0
  358. package/dist/src/parser.d.ts +41 -0
  359. package/dist/src/parser.d.ts.map +1 -0
  360. package/dist/src/parser.js +377 -0
  361. package/dist/src/parser.js.map +1 -0
  362. package/dist/src/plugins/manager.d.ts +133 -0
  363. package/dist/src/plugins/manager.d.ts.map +1 -0
  364. package/dist/src/plugins/manager.js +383 -0
  365. package/dist/src/plugins/manager.js.map +1 -0
  366. package/dist/src/plugins/store/discovery.d.ts +88 -0
  367. package/dist/src/plugins/store/discovery.d.ts.map +1 -0
  368. package/dist/src/plugins/store/discovery.js +1147 -0
  369. package/dist/src/plugins/store/discovery.js.map +1 -0
  370. package/dist/src/plugins/store/index.d.ts +76 -0
  371. package/dist/src/plugins/store/index.d.ts.map +1 -0
  372. package/dist/src/plugins/store/index.js +141 -0
  373. package/dist/src/plugins/store/index.js.map +1 -0
  374. package/dist/src/plugins/store/search.d.ts +46 -0
  375. package/dist/src/plugins/store/search.d.ts.map +1 -0
  376. package/dist/src/plugins/store/search.js +230 -0
  377. package/dist/src/plugins/store/search.js.map +1 -0
  378. package/dist/src/plugins/store/types.d.ts +274 -0
  379. package/dist/src/plugins/store/types.d.ts.map +1 -0
  380. package/dist/src/plugins/store/types.js +7 -0
  381. package/dist/src/plugins/store/types.js.map +1 -0
  382. package/dist/src/plugins/tests/demo-plugin-store.d.ts +7 -0
  383. package/dist/src/plugins/tests/demo-plugin-store.d.ts.map +1 -0
  384. package/dist/src/plugins/tests/demo-plugin-store.js +126 -0
  385. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -0
  386. package/dist/src/plugins/tests/standalone-test.d.ts +12 -0
  387. package/dist/src/plugins/tests/standalone-test.d.ts.map +1 -0
  388. package/dist/src/plugins/tests/standalone-test.js +188 -0
  389. package/dist/src/plugins/tests/standalone-test.js.map +1 -0
  390. package/dist/src/plugins/tests/test-plugin-store.d.ts +7 -0
  391. package/dist/src/plugins/tests/test-plugin-store.d.ts.map +1 -0
  392. package/dist/src/plugins/tests/test-plugin-store.js +206 -0
  393. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -0
  394. package/dist/src/production/circuit-breaker.d.ts +101 -0
  395. package/dist/src/production/circuit-breaker.d.ts.map +1 -0
  396. package/dist/src/production/circuit-breaker.js +241 -0
  397. package/dist/src/production/circuit-breaker.js.map +1 -0
  398. package/dist/src/production/error-handler.d.ts +92 -0
  399. package/dist/src/production/error-handler.d.ts.map +1 -0
  400. package/dist/src/production/error-handler.js +299 -0
  401. package/dist/src/production/error-handler.js.map +1 -0
  402. package/dist/src/production/index.d.ts +23 -0
  403. package/dist/src/production/index.d.ts.map +1 -0
  404. package/dist/src/production/index.js +18 -0
  405. package/dist/src/production/index.js.map +1 -0
  406. package/dist/src/production/monitoring.d.ts +161 -0
  407. package/dist/src/production/monitoring.d.ts.map +1 -0
  408. package/dist/src/production/monitoring.js +356 -0
  409. package/dist/src/production/monitoring.js.map +1 -0
  410. package/dist/src/production/rate-limiter.d.ts +80 -0
  411. package/dist/src/production/rate-limiter.d.ts.map +1 -0
  412. package/dist/src/production/rate-limiter.js +201 -0
  413. package/dist/src/production/rate-limiter.js.map +1 -0
  414. package/dist/src/production/retry.d.ts +48 -0
  415. package/dist/src/production/retry.d.ts.map +1 -0
  416. package/dist/src/production/retry.js +179 -0
  417. package/dist/src/production/retry.js.map +1 -0
  418. package/dist/src/prompt.d.ts +44 -0
  419. package/dist/src/prompt.d.ts.map +1 -0
  420. package/dist/src/prompt.js +501 -0
  421. package/dist/src/prompt.js.map +1 -0
  422. package/dist/src/runtime/headless.d.ts +60 -0
  423. package/dist/src/runtime/headless.d.ts.map +1 -0
  424. package/dist/src/runtime/headless.js +284 -0
  425. package/dist/src/runtime/headless.js.map +1 -0
  426. package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
  427. package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
  428. package/dist/src/ruvector/ast-analyzer.js +277 -0
  429. package/dist/src/ruvector/ast-analyzer.js.map +1 -0
  430. package/dist/src/ruvector/coverage-router.d.ts +160 -0
  431. package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
  432. package/dist/src/ruvector/coverage-router.js +529 -0
  433. package/dist/src/ruvector/coverage-router.js.map +1 -0
  434. package/dist/src/ruvector/coverage-tools.d.ts +33 -0
  435. package/dist/src/ruvector/coverage-tools.d.ts.map +1 -0
  436. package/dist/src/ruvector/coverage-tools.js +157 -0
  437. package/dist/src/ruvector/coverage-tools.js.map +1 -0
  438. package/dist/src/ruvector/diff-classifier.d.ts +175 -0
  439. package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
  440. package/dist/src/ruvector/diff-classifier.js +698 -0
  441. package/dist/src/ruvector/diff-classifier.js.map +1 -0
  442. package/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
  443. package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -0
  444. package/dist/src/ruvector/enhanced-model-router.js +519 -0
  445. package/dist/src/ruvector/enhanced-model-router.js.map +1 -0
  446. package/dist/src/ruvector/flash-attention.d.ts +195 -0
  447. package/dist/src/ruvector/flash-attention.d.ts.map +1 -0
  448. package/dist/src/ruvector/flash-attention.js +643 -0
  449. package/dist/src/ruvector/flash-attention.js.map +1 -0
  450. package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
  451. package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
  452. package/dist/src/ruvector/graph-analyzer.js +929 -0
  453. package/dist/src/ruvector/graph-analyzer.js.map +1 -0
  454. package/dist/src/ruvector/index.d.ts +34 -0
  455. package/dist/src/ruvector/index.d.ts.map +1 -0
  456. package/dist/src/ruvector/index.js +60 -0
  457. package/dist/src/ruvector/index.js.map +1 -0
  458. package/dist/src/ruvector/lora-adapter.d.ts +218 -0
  459. package/dist/src/ruvector/lora-adapter.d.ts.map +1 -0
  460. package/dist/src/ruvector/lora-adapter.js +455 -0
  461. package/dist/src/ruvector/lora-adapter.js.map +1 -0
  462. package/dist/src/ruvector/model-router.d.ts +220 -0
  463. package/dist/src/ruvector/model-router.d.ts.map +1 -0
  464. package/dist/src/ruvector/model-router.js +488 -0
  465. package/dist/src/ruvector/model-router.js.map +1 -0
  466. package/dist/src/ruvector/moe-router.d.ts +206 -0
  467. package/dist/src/ruvector/moe-router.d.ts.map +1 -0
  468. package/dist/src/ruvector/moe-router.js +626 -0
  469. package/dist/src/ruvector/moe-router.js.map +1 -0
  470. package/dist/src/ruvector/q-learning-router.d.ts +211 -0
  471. package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
  472. package/dist/src/ruvector/q-learning-router.js +681 -0
  473. package/dist/src/ruvector/q-learning-router.js.map +1 -0
  474. package/dist/src/ruvector/semantic-router.d.ts +77 -0
  475. package/dist/src/ruvector/semantic-router.d.ts.map +1 -0
  476. package/dist/src/ruvector/semantic-router.js +178 -0
  477. package/dist/src/ruvector/semantic-router.js.map +1 -0
  478. package/dist/src/ruvector/vector-db.d.ts +69 -0
  479. package/dist/src/ruvector/vector-db.d.ts.map +1 -0
  480. package/dist/src/ruvector/vector-db.js +243 -0
  481. package/dist/src/ruvector/vector-db.js.map +1 -0
  482. package/dist/src/services/claim-service.d.ts +204 -0
  483. package/dist/src/services/claim-service.d.ts.map +1 -0
  484. package/dist/src/services/claim-service.js +818 -0
  485. package/dist/src/services/claim-service.js.map +1 -0
  486. package/dist/src/services/container-worker-pool.d.ts +197 -0
  487. package/dist/src/services/container-worker-pool.d.ts.map +1 -0
  488. package/dist/src/services/container-worker-pool.js +581 -0
  489. package/dist/src/services/container-worker-pool.js.map +1 -0
  490. package/dist/src/services/headless-worker-executor.d.ts +304 -0
  491. package/dist/src/services/headless-worker-executor.d.ts.map +1 -0
  492. package/dist/src/services/headless-worker-executor.js +999 -0
  493. package/dist/src/services/headless-worker-executor.js.map +1 -0
  494. package/dist/src/services/index.d.ts +13 -0
  495. package/dist/src/services/index.d.ts.map +1 -0
  496. package/dist/src/services/index.js +11 -0
  497. package/dist/src/services/index.js.map +1 -0
  498. package/dist/src/services/registry-api.d.ts +58 -0
  499. package/dist/src/services/registry-api.d.ts.map +1 -0
  500. package/dist/src/services/registry-api.js +146 -0
  501. package/dist/src/services/registry-api.js.map +1 -0
  502. package/dist/src/services/ruvector-training.d.ts +213 -0
  503. package/dist/src/services/ruvector-training.d.ts.map +1 -0
  504. package/dist/src/services/ruvector-training.js +498 -0
  505. package/dist/src/services/ruvector-training.js.map +1 -0
  506. package/dist/src/services/worker-daemon.d.ts +203 -0
  507. package/dist/src/services/worker-daemon.d.ts.map +1 -0
  508. package/dist/src/services/worker-daemon.js +756 -0
  509. package/dist/src/services/worker-daemon.js.map +1 -0
  510. package/dist/src/services/worker-queue.d.ts +194 -0
  511. package/dist/src/services/worker-queue.d.ts.map +1 -0
  512. package/dist/src/services/worker-queue.js +511 -0
  513. package/dist/src/services/worker-queue.js.map +1 -0
  514. package/dist/src/suggest.d.ts +53 -0
  515. package/dist/src/suggest.d.ts.map +1 -0
  516. package/dist/src/suggest.js +200 -0
  517. package/dist/src/suggest.js.map +1 -0
  518. package/dist/src/transfer/anonymization/index.d.ts +25 -0
  519. package/dist/src/transfer/anonymization/index.d.ts.map +1 -0
  520. package/dist/src/transfer/anonymization/index.js +175 -0
  521. package/dist/src/transfer/anonymization/index.js.map +1 -0
  522. package/dist/src/transfer/deploy-seraphine.d.ts +13 -0
  523. package/dist/src/transfer/deploy-seraphine.d.ts.map +1 -0
  524. package/dist/src/transfer/deploy-seraphine.js +205 -0
  525. package/dist/src/transfer/deploy-seraphine.js.map +1 -0
  526. package/dist/src/transfer/export.d.ts +25 -0
  527. package/dist/src/transfer/export.d.ts.map +1 -0
  528. package/dist/src/transfer/export.js +113 -0
  529. package/dist/src/transfer/export.js.map +1 -0
  530. package/dist/src/transfer/index.d.ts +12 -0
  531. package/dist/src/transfer/index.d.ts.map +1 -0
  532. package/dist/src/transfer/index.js +31 -0
  533. package/dist/src/transfer/index.js.map +1 -0
  534. package/dist/src/transfer/ipfs/client.d.ts +109 -0
  535. package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
  536. package/dist/src/transfer/ipfs/client.js +299 -0
  537. package/dist/src/transfer/ipfs/client.js.map +1 -0
  538. package/dist/src/transfer/ipfs/upload.d.ts +95 -0
  539. package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
  540. package/dist/src/transfer/ipfs/upload.js +413 -0
  541. package/dist/src/transfer/ipfs/upload.js.map +1 -0
  542. package/dist/src/transfer/models/seraphine.d.ts +72 -0
  543. package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
  544. package/dist/src/transfer/models/seraphine.js +373 -0
  545. package/dist/src/transfer/models/seraphine.js.map +1 -0
  546. package/dist/src/transfer/serialization/cfp.d.ts +49 -0
  547. package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
  548. package/dist/src/transfer/serialization/cfp.js +180 -0
  549. package/dist/src/transfer/serialization/cfp.js.map +1 -0
  550. package/dist/src/transfer/storage/gcs.d.ts +82 -0
  551. package/dist/src/transfer/storage/gcs.d.ts.map +1 -0
  552. package/dist/src/transfer/storage/gcs.js +230 -0
  553. package/dist/src/transfer/storage/gcs.js.map +1 -0
  554. package/dist/src/transfer/storage/index.d.ts +6 -0
  555. package/dist/src/transfer/storage/index.d.ts.map +1 -0
  556. package/dist/src/transfer/storage/index.js +6 -0
  557. package/dist/src/transfer/storage/index.js.map +1 -0
  558. package/dist/src/transfer/store/discovery.d.ts +84 -0
  559. package/dist/src/transfer/store/discovery.d.ts.map +1 -0
  560. package/dist/src/transfer/store/discovery.js +382 -0
  561. package/dist/src/transfer/store/discovery.js.map +1 -0
  562. package/dist/src/transfer/store/download.d.ts +70 -0
  563. package/dist/src/transfer/store/download.d.ts.map +1 -0
  564. package/dist/src/transfer/store/download.js +334 -0
  565. package/dist/src/transfer/store/download.js.map +1 -0
  566. package/dist/src/transfer/store/index.d.ts +84 -0
  567. package/dist/src/transfer/store/index.d.ts.map +1 -0
  568. package/dist/src/transfer/store/index.js +153 -0
  569. package/dist/src/transfer/store/index.js.map +1 -0
  570. package/dist/src/transfer/store/publish.d.ts +76 -0
  571. package/dist/src/transfer/store/publish.d.ts.map +1 -0
  572. package/dist/src/transfer/store/publish.js +294 -0
  573. package/dist/src/transfer/store/publish.js.map +1 -0
  574. package/dist/src/transfer/store/registry.d.ts +58 -0
  575. package/dist/src/transfer/store/registry.d.ts.map +1 -0
  576. package/dist/src/transfer/store/registry.js +285 -0
  577. package/dist/src/transfer/store/registry.js.map +1 -0
  578. package/dist/src/transfer/store/search.d.ts +54 -0
  579. package/dist/src/transfer/store/search.d.ts.map +1 -0
  580. package/dist/src/transfer/store/search.js +232 -0
  581. package/dist/src/transfer/store/search.js.map +1 -0
  582. package/dist/src/transfer/store/tests/standalone-test.d.ts +12 -0
  583. package/dist/src/transfer/store/tests/standalone-test.d.ts.map +1 -0
  584. package/dist/src/transfer/store/tests/standalone-test.js +190 -0
  585. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -0
  586. package/dist/src/transfer/store/types.d.ts +193 -0
  587. package/dist/src/transfer/store/types.d.ts.map +1 -0
  588. package/dist/src/transfer/store/types.js +6 -0
  589. package/dist/src/transfer/store/types.js.map +1 -0
  590. package/dist/src/transfer/test-seraphine.d.ts +6 -0
  591. package/dist/src/transfer/test-seraphine.d.ts.map +1 -0
  592. package/dist/src/transfer/test-seraphine.js +105 -0
  593. package/dist/src/transfer/test-seraphine.js.map +1 -0
  594. package/dist/src/transfer/tests/test-store.d.ts +7 -0
  595. package/dist/src/transfer/tests/test-store.d.ts.map +1 -0
  596. package/dist/src/transfer/tests/test-store.js +214 -0
  597. package/dist/src/transfer/tests/test-store.js.map +1 -0
  598. package/dist/src/transfer/types.d.ts +245 -0
  599. package/dist/src/transfer/types.d.ts.map +1 -0
  600. package/dist/src/transfer/types.js +6 -0
  601. package/dist/src/transfer/types.js.map +1 -0
  602. package/dist/src/types.d.ts +198 -0
  603. package/dist/src/types.d.ts.map +1 -0
  604. package/dist/src/types.js +38 -0
  605. package/dist/src/types.js.map +1 -0
  606. package/dist/src/update/checker.d.ts +34 -0
  607. package/dist/src/update/checker.d.ts.map +1 -0
  608. package/dist/src/update/checker.js +190 -0
  609. package/dist/src/update/checker.js.map +1 -0
  610. package/dist/src/update/executor.d.ts +32 -0
  611. package/dist/src/update/executor.d.ts.map +1 -0
  612. package/dist/src/update/executor.js +181 -0
  613. package/dist/src/update/executor.js.map +1 -0
  614. package/dist/src/update/index.d.ts +33 -0
  615. package/dist/src/update/index.d.ts.map +1 -0
  616. package/dist/src/update/index.js +64 -0
  617. package/dist/src/update/index.js.map +1 -0
  618. package/dist/src/update/rate-limiter.d.ts +20 -0
  619. package/dist/src/update/rate-limiter.d.ts.map +1 -0
  620. package/dist/src/update/rate-limiter.js +96 -0
  621. package/dist/src/update/rate-limiter.js.map +1 -0
  622. package/dist/src/update/validator.d.ts +17 -0
  623. package/dist/src/update/validator.d.ts.map +1 -0
  624. package/dist/src/update/validator.js +123 -0
  625. package/dist/src/update/validator.js.map +1 -0
  626. package/dist/tsconfig.build.tsbuildinfo +1 -0
  627. package/package.json +1 -1
@@ -0,0 +1,698 @@
1
+ /**
2
+ * Diff Classifier for Change Analysis
3
+ */
4
+ const DEFAULT_CONFIG = {
5
+ maxDiffSize: 10000,
6
+ classifyByImpact: true,
7
+ detectRefactoring: true,
8
+ minConfidence: 0.5,
9
+ };
10
+ const CLASSIFICATION_PATTERNS = {
11
+ feature: [/^feat/, /add.*feature/, /implement/, /new.*functionality/i],
12
+ bugfix: [/^fix/, /bug/, /patch/, /resolve.*issue/i, /hotfix/i],
13
+ refactor: [/^refactor/, /restructure/, /reorganize/, /cleanup/i, /rename/i],
14
+ docs: [/^docs?/, /documentation/, /readme/i, /comment/i, /\.md$/i],
15
+ test: [/^test/, /spec/, /\.test\.[jt]sx?$/, /\.spec\.[jt]sx?$/, /__tests__/],
16
+ config: [/^config/, /\.config\./, /package\.json/, /tsconfig/, /\.env/],
17
+ style: [/^style/, /format/, /lint/, /prettier/, /eslint/],
18
+ };
19
+ const IMPACT_KEYWORDS = {
20
+ security: 3, auth: 3, payment: 3, database: 2, api: 2, core: 2,
21
+ util: 1, helper: 1, test: 0, mock: 0, fixture: 0,
22
+ };
23
+ export class DiffClassifier {
24
+ config;
25
+ ruvectorEngine = null;
26
+ useNative = false;
27
+ classificationCache = new Map();
28
+ constructor(config = {}) {
29
+ this.config = { ...DEFAULT_CONFIG, ...config };
30
+ }
31
+ async initialize() {
32
+ try {
33
+ // @ruvector/diff is optional - gracefully fallback if not installed
34
+ const ruvector = await import('@ruvector/diff').catch(() => null);
35
+ if (ruvector) {
36
+ this.ruvectorEngine = ruvector.createDiffClassifier?.(this.config);
37
+ this.useNative = !!this.ruvectorEngine;
38
+ }
39
+ }
40
+ catch {
41
+ this.useNative = false;
42
+ }
43
+ }
44
+ parseDiff(diffContent) {
45
+ const files = [];
46
+ const fileBlocks = diffContent.split(/^diff --git/m).filter(Boolean);
47
+ for (const block of fileBlocks) {
48
+ const pathMatch = block.match(/a\/(.+?)\s+b\/(.+)/);
49
+ if (!pathMatch)
50
+ continue;
51
+ const path = pathMatch[2];
52
+ const hunks = this.parseHunks(block);
53
+ const additions = hunks.reduce((sum, h) => sum + h.changes.filter(c => c.type === 'add').length, 0);
54
+ const deletions = hunks.reduce((sum, h) => sum + h.changes.filter(c => c.type === 'remove').length, 0);
55
+ const classification = this.classifyFile(path, hunks);
56
+ files.push({ path, hunks, additions, deletions, classification });
57
+ }
58
+ return files;
59
+ }
60
+ classify(files) {
61
+ const overall = this.computeOverallClassification(files);
62
+ const stats = {
63
+ totalAdditions: files.reduce((sum, f) => sum + f.additions, 0),
64
+ totalDeletions: files.reduce((sum, f) => sum + f.deletions, 0),
65
+ filesChanged: files.length,
66
+ avgConfidence: files.length > 0 ? files.reduce((sum, f) => sum + f.classification.confidence, 0) / files.length : 0,
67
+ };
68
+ return { files, overall, stats, timestamp: Date.now() };
69
+ }
70
+ classifyCommitMessage(message) {
71
+ const lowerMessage = message.toLowerCase();
72
+ for (const [type, patterns] of Object.entries(CLASSIFICATION_PATTERNS)) {
73
+ for (const pattern of patterns) {
74
+ if (pattern.test(lowerMessage))
75
+ return type;
76
+ }
77
+ }
78
+ return 'unknown';
79
+ }
80
+ getStats() {
81
+ return { useNative: this.useNative, cacheSize: this.classificationCache.size };
82
+ }
83
+ clearCache() { this.classificationCache.clear(); }
84
+ parseHunks(block) {
85
+ const hunks = [];
86
+ const hunkMatches = block.matchAll(/@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@([^\n]*)\n([\s\S]*?)(?=@@|$)/g);
87
+ for (const match of hunkMatches) {
88
+ const oldStart = parseInt(match[1], 10);
89
+ const oldLines = parseInt(match[2] || '1', 10);
90
+ const newStart = parseInt(match[3], 10);
91
+ const newLines = parseInt(match[4] || '1', 10);
92
+ const content = match[6] || '';
93
+ const changes = this.parseChanges(content, newStart);
94
+ hunks.push({ oldStart, oldLines, newStart, newLines, content, changes });
95
+ }
96
+ return hunks;
97
+ }
98
+ parseChanges(content, startLine) {
99
+ const changes = [];
100
+ const lines = content.split('\n');
101
+ let lineNumber = startLine;
102
+ for (const line of lines) {
103
+ if (line.startsWith('+')) {
104
+ changes.push({ type: 'add', lineNumber, content: line.substring(1) });
105
+ lineNumber++;
106
+ }
107
+ else if (line.startsWith('-')) {
108
+ changes.push({ type: 'remove', lineNumber: -1, content: line.substring(1) });
109
+ }
110
+ else if (line.startsWith(' ') || line === '') {
111
+ changes.push({ type: 'context', lineNumber, content: line.substring(1) || '' });
112
+ lineNumber++;
113
+ }
114
+ }
115
+ return changes;
116
+ }
117
+ classifyFile(path, hunks) {
118
+ const cacheKey = this.getCacheKey(path, hunks);
119
+ const cached = this.classificationCache.get(cacheKey);
120
+ if (cached)
121
+ return cached;
122
+ const primary = this.determinePrimaryClassification(path, hunks);
123
+ const secondary = this.determineSecondaryClassifications(path, hunks, primary);
124
+ const confidence = this.calculateConfidence(path, hunks, primary);
125
+ const impactLevel = this.determineImpactLevel(path, hunks);
126
+ const suggestedReviewers = this.suggestReviewers(path, primary, impactLevel);
127
+ const testingStrategy = this.determineTestingStrategy(path, primary, impactLevel);
128
+ const riskFactors = this.identifyRiskFactors(path, hunks, impactLevel);
129
+ const classification = { primary, secondary, confidence, impactLevel, suggestedReviewers, testingStrategy, riskFactors };
130
+ this.classificationCache.set(cacheKey, classification);
131
+ return classification;
132
+ }
133
+ getCacheKey(path, hunks) {
134
+ const hunkSummary = hunks.map(h => h.oldStart + ':' + h.newStart).join(',');
135
+ return path + ':' + hunkSummary;
136
+ }
137
+ determinePrimaryClassification(path, hunks) {
138
+ for (const [type, patterns] of Object.entries(CLASSIFICATION_PATTERNS)) {
139
+ for (const pattern of patterns) {
140
+ if (pattern.test(path))
141
+ return type;
142
+ }
143
+ }
144
+ const allContent = hunks.flatMap(h => h.changes.map(c => c.content)).join('\n').toLowerCase();
145
+ if (/function|class|interface|type\s+\w+/.test(allContent) && hunks.some(h => h.changes.filter(c => c.type === 'add').length > 10))
146
+ return 'feature';
147
+ if (/fix|bug|issue|error|exception/.test(allContent))
148
+ return 'bugfix';
149
+ if (this.config.detectRefactoring && this.isRefactoring(hunks))
150
+ return 'refactor';
151
+ return 'unknown';
152
+ }
153
+ isRefactoring(hunks) {
154
+ let totalAdds = 0, totalRemoves = 0;
155
+ for (const hunk of hunks) {
156
+ for (const change of hunk.changes) {
157
+ if (change.type === 'add')
158
+ totalAdds++;
159
+ else if (change.type === 'remove')
160
+ totalRemoves++;
161
+ }
162
+ }
163
+ const ratio = totalAdds > 0 ? totalRemoves / totalAdds : 0;
164
+ return ratio > 0.7 && ratio < 1.4 && totalAdds > 5;
165
+ }
166
+ determineSecondaryClassifications(path, hunks, primary) {
167
+ const secondary = [];
168
+ for (const [type, patterns] of Object.entries(CLASSIFICATION_PATTERNS)) {
169
+ if (type === primary)
170
+ continue;
171
+ for (const pattern of patterns) {
172
+ if (pattern.test(path)) {
173
+ secondary.push(type);
174
+ break;
175
+ }
176
+ }
177
+ }
178
+ return secondary.slice(0, 3);
179
+ }
180
+ calculateConfidence(path, hunks, primary) {
181
+ let confidence = 0.5;
182
+ for (const patterns of Object.values(CLASSIFICATION_PATTERNS)) {
183
+ for (const pattern of patterns) {
184
+ if (pattern.test(path)) {
185
+ confidence += 0.2;
186
+ break;
187
+ }
188
+ }
189
+ }
190
+ const totalChanges = hunks.reduce((sum, h) => sum + h.changes.length, 0);
191
+ if (totalChanges > 10)
192
+ confidence += 0.1;
193
+ if (totalChanges > 50)
194
+ confidence += 0.1;
195
+ if (primary !== 'unknown')
196
+ confidence += 0.1;
197
+ return Math.min(1, confidence);
198
+ }
199
+ determineImpactLevel(path, hunks) {
200
+ let score = 0;
201
+ const lowerPath = path.toLowerCase();
202
+ for (const [keyword, weight] of Object.entries(IMPACT_KEYWORDS)) {
203
+ if (lowerPath.includes(keyword))
204
+ score = Math.max(score, weight);
205
+ }
206
+ const totalChanges = hunks.reduce((sum, h) => sum + h.changes.filter(c => c.type !== 'context').length, 0);
207
+ if (totalChanges > 100)
208
+ score = Math.max(score, 2);
209
+ if (totalChanges > 300)
210
+ score = Math.max(score, 3);
211
+ if (score >= 3)
212
+ return 'critical';
213
+ if (score >= 2)
214
+ return 'high';
215
+ if (score >= 1)
216
+ return 'medium';
217
+ return 'low';
218
+ }
219
+ suggestReviewers(path, primary, impact) {
220
+ const reviewers = [];
221
+ const typeReviewers = { feature: ['tech-lead', 'product-owner'], bugfix: ['qa-engineer', 'developer'], refactor: ['senior-developer', 'architect'], docs: ['tech-writer', 'developer'], test: ['qa-engineer', 'developer'], config: ['devops', 'tech-lead'], style: ['developer'], unknown: ['developer'] };
222
+ reviewers.push(...(typeReviewers[primary] || typeReviewers.unknown));
223
+ if (impact === 'critical' || impact === 'high')
224
+ reviewers.push('security-reviewer');
225
+ if (/security|auth/.test(path))
226
+ reviewers.push('security-team');
227
+ if (/database|migration/.test(path))
228
+ reviewers.push('dba');
229
+ return [...new Set(reviewers)].slice(0, 4);
230
+ }
231
+ determineTestingStrategy(path, primary, impact) {
232
+ const strategies = [];
233
+ if (primary !== 'test')
234
+ strategies.push('unit-tests');
235
+ if (primary === 'feature')
236
+ strategies.push('integration-tests');
237
+ if (impact === 'high' || impact === 'critical') {
238
+ strategies.push('regression-tests');
239
+ strategies.push('e2e-tests');
240
+ }
241
+ if (/api|endpoint|route|handler/.test(path))
242
+ strategies.push('api-contract-tests');
243
+ if (/security|auth|crypto/.test(path))
244
+ strategies.push('security-audit');
245
+ return strategies.slice(0, 5);
246
+ }
247
+ identifyRiskFactors(path, hunks, impact) {
248
+ const risks = [];
249
+ const totalChanges = hunks.reduce((sum, h) => sum + h.changes.length, 0);
250
+ if (totalChanges > 200)
251
+ risks.push('Large change set - increased review time needed');
252
+ if (impact === 'critical')
253
+ risks.push('Critical system component - requires careful review');
254
+ if (impact === 'high')
255
+ risks.push('High-impact area - monitor after deployment');
256
+ if (/security|auth/.test(path))
257
+ risks.push('Security-sensitive code');
258
+ if (/database|migration/.test(path))
259
+ risks.push('Database changes - ensure backup strategy');
260
+ if (/config|env/.test(path))
261
+ risks.push('Configuration changes - verify all environments');
262
+ const allContent = hunks.flatMap(h => h.changes.map(c => c.content)).join('\n');
263
+ if (/TODO|FIXME|HACK/.test(allContent))
264
+ risks.push('Contains TODO/FIXME comments');
265
+ if (/password|secret|key|token/i.test(allContent))
266
+ risks.push('Potential secrets in code');
267
+ return risks.slice(0, 5);
268
+ }
269
+ computeOverallClassification(files) {
270
+ if (files.length === 0)
271
+ return { primary: 'unknown', secondary: [], confidence: 0, impactLevel: 'low', suggestedReviewers: [], testingStrategy: [], riskFactors: [] };
272
+ const primaryCounts = {};
273
+ for (const file of files) {
274
+ const p = file.classification.primary;
275
+ primaryCounts[p] = (primaryCounts[p] || 0) + 1;
276
+ }
277
+ let primary = 'unknown';
278
+ let maxCount = 0;
279
+ for (const [type, count] of Object.entries(primaryCounts)) {
280
+ if (count > maxCount) {
281
+ maxCount = count;
282
+ primary = type;
283
+ }
284
+ }
285
+ const secondaryCounts = {};
286
+ for (const file of files) {
287
+ for (const s of file.classification.secondary) {
288
+ secondaryCounts[s] = (secondaryCounts[s] || 0) + 1;
289
+ }
290
+ }
291
+ const secondary = Object.entries(secondaryCounts).sort((a, b) => b[1] - a[1]).slice(0, 3).map(([type]) => type);
292
+ const confidence = files.reduce((sum, f) => sum + f.classification.confidence, 0) / files.length;
293
+ const impactOrder = ['low', 'medium', 'high', 'critical'];
294
+ let impactLevel = 'low';
295
+ for (const file of files) {
296
+ if (impactOrder.indexOf(file.classification.impactLevel) > impactOrder.indexOf(impactLevel))
297
+ impactLevel = file.classification.impactLevel;
298
+ }
299
+ const reviewers = [...new Set(files.flatMap(f => f.classification.suggestedReviewers))].slice(0, 5);
300
+ const testingStrategy = [...new Set(files.flatMap(f => f.classification.testingStrategy))].slice(0, 5);
301
+ const riskFactors = [...new Set(files.flatMap(f => f.classification.riskFactors))].slice(0, 5);
302
+ return { primary, secondary, confidence, impactLevel, suggestedReviewers: reviewers, testingStrategy, riskFactors };
303
+ }
304
+ }
305
+ export function createDiffClassifier(config) {
306
+ return new DiffClassifier(config);
307
+ }
308
+ // ============================================================================
309
+ // Optimized Git Diff Functions
310
+ // ============================================================================
311
+ // Cache for diff results (TTL-based)
312
+ const diffCache = new Map();
313
+ const CACHE_TTL_MS = 5000; // 5 seconds - short TTL since diffs change frequently
314
+ /**
315
+ * Validate git ref to prevent command injection
316
+ * Only allows safe characters: alphanumeric, -, _, /, ., ~, ^
317
+ */
318
+ function validateGitRef(ref) {
319
+ // Block shell metacharacters and dangerous patterns
320
+ if (!/^[a-zA-Z0-9_\-./~^@]+$/.test(ref)) {
321
+ throw new Error(`Invalid git ref: contains unsafe characters`);
322
+ }
323
+ // Block multiple dots (path traversal)
324
+ if (ref.includes('..') && !ref.match(/^[a-zA-Z0-9_\-]+\.\.\.?[a-zA-Z0-9_\-]+$/)) {
325
+ if (!/^\w+\.\.[.\w]+$/.test(ref)) {
326
+ throw new Error(`Invalid git ref: suspicious pattern`);
327
+ }
328
+ }
329
+ // Max length check
330
+ if (ref.length > 256) {
331
+ throw new Error(`Invalid git ref: too long`);
332
+ }
333
+ }
334
+ /**
335
+ * Get git diff statistics using SINGLE combined command (optimized)
336
+ * Replaces two separate git commands with one
337
+ */
338
+ export function getGitDiffNumstat(ref = 'HEAD') {
339
+ // SECURITY: Validate git ref to prevent command injection
340
+ validateGitRef(ref);
341
+ // Check cache first
342
+ const cacheKey = `numstat:${ref}`;
343
+ const cached = diffCache.get(cacheKey);
344
+ if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {
345
+ return cached.files;
346
+ }
347
+ const { execFileSync } = require('child_process');
348
+ try {
349
+ // SECURITY: Use execFileSync with args array instead of shell string
350
+ // This prevents command injection via the ref parameter
351
+ const numstatOutput = execFileSync('git', [
352
+ 'diff', '--numstat', '--diff-filter=ACDMRTUXB', ref
353
+ ], { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
354
+ const statusOutput = execFileSync('git', [
355
+ 'diff', '--name-status', ref
356
+ ], { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
357
+ const output = numstatOutput + '---STATUS---' + statusOutput;
358
+ const [numstatPart, statusPart] = output.split('---STATUS---');
359
+ // Parse status (usually smaller, parse first)
360
+ const statusMap = new Map();
361
+ if (statusPart) {
362
+ for (const line of statusPart.trim().split('\n')) {
363
+ if (!line)
364
+ continue;
365
+ const [status, ...pathParts] = line.split('\t');
366
+ const path = pathParts[pathParts.length - 1] || pathParts[0];
367
+ if (path)
368
+ statusMap.set(path, status.charAt(0));
369
+ }
370
+ }
371
+ // Parse numstat
372
+ const files = [];
373
+ if (numstatPart) {
374
+ for (const line of numstatPart.trim().split('\n')) {
375
+ if (!line)
376
+ continue;
377
+ const [addStr, delStr, path] = line.split('\t');
378
+ if (!path)
379
+ continue;
380
+ const additions = addStr === '-' ? 0 : parseInt(addStr, 10) || 0;
381
+ const deletions = delStr === '-' ? 0 : parseInt(delStr, 10) || 0;
382
+ const binary = addStr === '-' && delStr === '-';
383
+ const statusChar = statusMap.get(path) || 'M';
384
+ let status = 'modified';
385
+ switch (statusChar) {
386
+ case 'A':
387
+ status = 'added';
388
+ break;
389
+ case 'D':
390
+ status = 'deleted';
391
+ break;
392
+ case 'R':
393
+ status = 'renamed';
394
+ break;
395
+ default: status = 'modified';
396
+ }
397
+ files.push({ path, status, additions, deletions, hunks: 1, binary });
398
+ }
399
+ }
400
+ // Cache the result
401
+ diffCache.set(cacheKey, { files, timestamp: Date.now() });
402
+ return files;
403
+ }
404
+ catch {
405
+ return [];
406
+ }
407
+ }
408
+ /**
409
+ * Async version of getGitDiffNumstat for non-blocking operation
410
+ */
411
+ export async function getGitDiffNumstatAsync(ref = 'HEAD') {
412
+ // SECURITY: Validate git ref to prevent command injection
413
+ validateGitRef(ref);
414
+ // Check cache first
415
+ const cacheKey = `numstat:${ref}`;
416
+ const cached = diffCache.get(cacheKey);
417
+ if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {
418
+ return cached.files;
419
+ }
420
+ const { execFile } = require('child_process');
421
+ const { promisify } = require('util');
422
+ const execFileAsync = promisify(execFile);
423
+ try {
424
+ // SECURITY: Use execFile with args array instead of shell string
425
+ const { stdout: numstatOutput } = await execFileAsync('git', [
426
+ 'diff', '--numstat', '--diff-filter=ACDMRTUXB', ref
427
+ ], { maxBuffer: 10 * 1024 * 1024 });
428
+ const { stdout: statusOutput } = await execFileAsync('git', [
429
+ 'diff', '--name-status', ref
430
+ ], { maxBuffer: 10 * 1024 * 1024 });
431
+ const stdout = numstatOutput + '---STATUS---' + statusOutput;
432
+ const [numstatPart, statusPart] = stdout.split('---STATUS---');
433
+ const statusMap = new Map();
434
+ if (statusPart) {
435
+ for (const line of statusPart.trim().split('\n')) {
436
+ if (!line)
437
+ continue;
438
+ const [status, ...pathParts] = line.split('\t');
439
+ const path = pathParts[pathParts.length - 1] || pathParts[0];
440
+ if (path)
441
+ statusMap.set(path, status.charAt(0));
442
+ }
443
+ }
444
+ const files = [];
445
+ if (numstatPart) {
446
+ for (const line of numstatPart.trim().split('\n')) {
447
+ if (!line)
448
+ continue;
449
+ const [addStr, delStr, path] = line.split('\t');
450
+ if (!path)
451
+ continue;
452
+ const additions = addStr === '-' ? 0 : parseInt(addStr, 10) || 0;
453
+ const deletions = delStr === '-' ? 0 : parseInt(delStr, 10) || 0;
454
+ const binary = addStr === '-' && delStr === '-';
455
+ const statusChar = statusMap.get(path) || 'M';
456
+ let status = 'modified';
457
+ switch (statusChar) {
458
+ case 'A':
459
+ status = 'added';
460
+ break;
461
+ case 'D':
462
+ status = 'deleted';
463
+ break;
464
+ case 'R':
465
+ status = 'renamed';
466
+ break;
467
+ default: status = 'modified';
468
+ }
469
+ files.push({ path, status, additions, deletions, hunks: 1, binary });
470
+ }
471
+ }
472
+ diffCache.set(cacheKey, { files, timestamp: Date.now() });
473
+ return files;
474
+ }
475
+ catch {
476
+ return [];
477
+ }
478
+ }
479
+ /**
480
+ * Clear the diff cache (call when git state changes)
481
+ */
482
+ export function clearDiffCache() {
483
+ diffCache.clear();
484
+ }
485
+ /**
486
+ * Assess risk for a single file
487
+ */
488
+ export function assessFileRisk(file) {
489
+ const reasons = [];
490
+ let score = 0;
491
+ // Size-based risk
492
+ const totalChanges = file.additions + file.deletions;
493
+ if (totalChanges > 300) {
494
+ score += 30;
495
+ reasons.push('Large change size (>300 lines)');
496
+ }
497
+ else if (totalChanges > 100) {
498
+ score += 15;
499
+ reasons.push('Medium change size (>100 lines)');
500
+ }
501
+ // Path-based risk
502
+ const lowerPath = file.path.toLowerCase();
503
+ if (/security|auth|crypto|password/.test(lowerPath)) {
504
+ score += 40;
505
+ reasons.push('Security-sensitive file');
506
+ }
507
+ if (/payment|billing|transaction/.test(lowerPath)) {
508
+ score += 35;
509
+ reasons.push('Payment-related file');
510
+ }
511
+ if (/database|migration|schema/.test(lowerPath)) {
512
+ score += 25;
513
+ reasons.push('Database-related file');
514
+ }
515
+ if (/core|main|index/.test(lowerPath)) {
516
+ score += 15;
517
+ reasons.push('Core module');
518
+ }
519
+ if (/config|env|settings/.test(lowerPath)) {
520
+ score += 20;
521
+ reasons.push('Configuration file');
522
+ }
523
+ // Status-based risk
524
+ if (file.status === 'deleted') {
525
+ score += 10;
526
+ reasons.push('File deleted');
527
+ }
528
+ // Binary file risk
529
+ if (file.binary) {
530
+ score += 5;
531
+ reasons.push('Binary file');
532
+ }
533
+ let risk = 'low';
534
+ if (score >= 60)
535
+ risk = 'critical';
536
+ else if (score >= 40)
537
+ risk = 'high';
538
+ else if (score >= 20)
539
+ risk = 'medium';
540
+ return { file: file.path, risk, score: Math.min(100, score), reasons };
541
+ }
542
+ /**
543
+ * Assess overall risk from files and file risks
544
+ */
545
+ export function assessOverallRisk(files, fileRisks) {
546
+ const breakdown = { low: 0, medium: 0, high: 0, critical: 0 };
547
+ let totalScore = 0;
548
+ for (const fr of fileRisks) {
549
+ breakdown[fr.risk]++;
550
+ totalScore += fr.score;
551
+ }
552
+ const avgScore = fileRisks.length > 0 ? totalScore / fileRisks.length : 0;
553
+ // Weight more heavily towards high/critical files
554
+ const weightedScore = avgScore + (breakdown.critical * 15) + (breakdown.high * 10);
555
+ let overall = 'low';
556
+ if (weightedScore >= 60 || breakdown.critical > 0)
557
+ overall = 'critical';
558
+ else if (weightedScore >= 40 || breakdown.high > 1)
559
+ overall = 'high';
560
+ else if (weightedScore >= 20 || breakdown.medium > 2)
561
+ overall = 'medium';
562
+ return { overall, score: Math.min(100, Math.round(weightedScore)), breakdown };
563
+ }
564
+ // Singleton classifier instance for reuse
565
+ let classifierInstance = null;
566
+ function getClassifier() {
567
+ if (!classifierInstance) {
568
+ classifierInstance = new DiffClassifier();
569
+ }
570
+ return classifierInstance;
571
+ }
572
+ /**
573
+ * Classify a diff based on files (uses singleton classifier)
574
+ */
575
+ export function classifyDiff(files) {
576
+ const classifier = getClassifier();
577
+ const fileDiffs = files.map(f => ({
578
+ path: f.path,
579
+ hunks: [],
580
+ additions: f.additions,
581
+ deletions: f.deletions,
582
+ classification: classifier['classifyFile'](f.path, []),
583
+ }));
584
+ return classifier['computeOverallClassification'](fileDiffs);
585
+ }
586
+ /**
587
+ * Suggest reviewers based on files and risks
588
+ */
589
+ export function suggestReviewers(files, fileRisks) {
590
+ const reviewers = new Set();
591
+ for (const file of files) {
592
+ const lowerPath = file.path.toLowerCase();
593
+ if (/security|auth|crypto/.test(lowerPath))
594
+ reviewers.add('security-team');
595
+ if (/database|migration/.test(lowerPath))
596
+ reviewers.add('dba');
597
+ if (/api|endpoint|route/.test(lowerPath))
598
+ reviewers.add('api-owner');
599
+ if (/test|spec/.test(lowerPath))
600
+ reviewers.add('qa-engineer');
601
+ if (/config|deploy|ci/.test(lowerPath))
602
+ reviewers.add('devops');
603
+ if (/ui|component|style/.test(lowerPath))
604
+ reviewers.add('frontend-lead');
605
+ if (/model|service|repository/.test(lowerPath))
606
+ reviewers.add('backend-lead');
607
+ }
608
+ // Add based on risk
609
+ const hasHighRisk = fileRisks.some(fr => fr.risk === 'high' || fr.risk === 'critical');
610
+ if (hasHighRisk) {
611
+ reviewers.add('tech-lead');
612
+ reviewers.add('senior-developer');
613
+ }
614
+ // Default reviewer
615
+ if (reviewers.size === 0) {
616
+ reviewers.add('developer');
617
+ }
618
+ return Array.from(reviewers).slice(0, 5);
619
+ }
620
+ // Analysis result cache
621
+ const analysisCache = new Map();
622
+ const ANALYSIS_CACHE_TTL_MS = 3000; // 3 seconds
623
+ /**
624
+ * Analyze a diff with full analysis (optimized with caching)
625
+ */
626
+ export async function analyzeDiff(options) {
627
+ const ref = options.ref || 'HEAD';
628
+ // Check analysis cache (unless skipCache is true)
629
+ if (!options.skipCache) {
630
+ const cached = analysisCache.get(ref);
631
+ if (cached && Date.now() - cached.timestamp < ANALYSIS_CACHE_TTL_MS) {
632
+ return cached.result;
633
+ }
634
+ }
635
+ // Use async git diff for non-blocking operation
636
+ const files = await getGitDiffNumstatAsync(ref);
637
+ // Parallel file risk assessment for large diffs
638
+ const fileRisks = files.length > 20
639
+ ? await Promise.all(files.map(f => Promise.resolve(assessFileRisk(f))))
640
+ : files.map(assessFileRisk);
641
+ const risk = assessOverallRisk(files, fileRisks);
642
+ const classification = classifyDiff(files);
643
+ const recommendedReviewers = suggestReviewers(files, fileRisks);
644
+ const totalAdditions = files.reduce((sum, f) => sum + f.additions, 0);
645
+ const totalDeletions = files.reduce((sum, f) => sum + f.deletions, 0);
646
+ const result = {
647
+ ref,
648
+ timestamp: Date.now(),
649
+ files,
650
+ risk,
651
+ classification,
652
+ summary: `${files.length} files changed (+${totalAdditions}/-${totalDeletions}), ${risk.overall} risk`,
653
+ fileRisks,
654
+ recommendedReviewers,
655
+ };
656
+ // Cache the result
657
+ analysisCache.set(ref, { result, timestamp: Date.now() });
658
+ return result;
659
+ }
660
+ /**
661
+ * Synchronous version of analyzeDiff for backward compatibility
662
+ */
663
+ export function analyzeDiffSync(options) {
664
+ const ref = options.ref || 'HEAD';
665
+ // Check analysis cache
666
+ const cached = analysisCache.get(ref);
667
+ if (cached && Date.now() - cached.timestamp < ANALYSIS_CACHE_TTL_MS) {
668
+ return cached.result;
669
+ }
670
+ const files = getGitDiffNumstat(ref);
671
+ const fileRisks = files.map(assessFileRisk);
672
+ const risk = assessOverallRisk(files, fileRisks);
673
+ const classification = classifyDiff(files);
674
+ const recommendedReviewers = suggestReviewers(files, fileRisks);
675
+ const totalAdditions = files.reduce((sum, f) => sum + f.additions, 0);
676
+ const totalDeletions = files.reduce((sum, f) => sum + f.deletions, 0);
677
+ const result = {
678
+ ref,
679
+ timestamp: Date.now(),
680
+ files,
681
+ risk,
682
+ classification,
683
+ summary: `${files.length} files changed (+${totalAdditions}/-${totalDeletions}), ${risk.overall} risk`,
684
+ fileRisks,
685
+ recommendedReviewers,
686
+ };
687
+ analysisCache.set(ref, { result, timestamp: Date.now() });
688
+ return result;
689
+ }
690
+ /**
691
+ * Clear all diff-related caches
692
+ */
693
+ export function clearAllDiffCaches() {
694
+ diffCache.clear();
695
+ analysisCache.clear();
696
+ classifierInstance?.clearCache();
697
+ }
698
+ //# sourceMappingURL=diff-classifier.js.map