cotx-engine 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. package/LICENSE +94 -0
  2. package/README.md +103 -0
  3. package/dist/commands/compile.d.ts +3 -0
  4. package/dist/commands/compile.js +93 -0
  5. package/dist/commands/compile.js.map +1 -0
  6. package/dist/commands/context.d.ts +1 -0
  7. package/dist/commands/context.js +98 -0
  8. package/dist/commands/context.js.map +1 -0
  9. package/dist/commands/diff.d.ts +19 -0
  10. package/dist/commands/diff.js +127 -0
  11. package/dist/commands/diff.js.map +1 -0
  12. package/dist/commands/impact.d.ts +3 -0
  13. package/dist/commands/impact.js +91 -0
  14. package/dist/commands/impact.js.map +1 -0
  15. package/dist/commands/init.d.ts +1 -0
  16. package/dist/commands/init.js +13 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/lint.d.ts +13 -0
  19. package/dist/commands/lint.js +290 -0
  20. package/dist/commands/lint.js.map +1 -0
  21. package/dist/commands/map.d.ts +6 -0
  22. package/dist/commands/map.js +409 -0
  23. package/dist/commands/map.js.map +1 -0
  24. package/dist/commands/migrate.d.ts +16 -0
  25. package/dist/commands/migrate.js +150 -0
  26. package/dist/commands/migrate.js.map +1 -0
  27. package/dist/commands/query.d.ts +3 -0
  28. package/dist/commands/query.js +47 -0
  29. package/dist/commands/query.js.map +1 -0
  30. package/dist/commands/rename.d.ts +5 -0
  31. package/dist/commands/rename.js +163 -0
  32. package/dist/commands/rename.js.map +1 -0
  33. package/dist/commands/snapshot.d.ts +6 -0
  34. package/dist/commands/snapshot.js +48 -0
  35. package/dist/commands/snapshot.js.map +1 -0
  36. package/dist/commands/status.d.ts +1 -0
  37. package/dist/commands/status.js +72 -0
  38. package/dist/commands/status.js.map +1 -0
  39. package/dist/commands/update.d.ts +8 -0
  40. package/dist/commands/update.js +163 -0
  41. package/dist/commands/update.js.map +1 -0
  42. package/dist/commands/write.d.ts +6 -0
  43. package/dist/commands/write.js +221 -0
  44. package/dist/commands/write.js.map +1 -0
  45. package/dist/compiler/auto-describe.d.ts +13 -0
  46. package/dist/compiler/auto-describe.js +91 -0
  47. package/dist/compiler/auto-describe.js.map +1 -0
  48. package/dist/compiler/concept-compiler.d.ts +21 -0
  49. package/dist/compiler/concept-compiler.js +125 -0
  50. package/dist/compiler/concept-compiler.js.map +1 -0
  51. package/dist/compiler/contract-compiler.d.ts +16 -0
  52. package/dist/compiler/contract-compiler.js +90 -0
  53. package/dist/compiler/contract-compiler.js.map +1 -0
  54. package/dist/compiler/delta-detector.d.ts +8 -0
  55. package/dist/compiler/delta-detector.js +34 -0
  56. package/dist/compiler/delta-detector.js.map +1 -0
  57. package/dist/compiler/flow-compiler.d.ts +18 -0
  58. package/dist/compiler/flow-compiler.js +69 -0
  59. package/dist/compiler/flow-compiler.js.map +1 -0
  60. package/dist/compiler/module-compiler.d.ts +18 -0
  61. package/dist/compiler/module-compiler.js +420 -0
  62. package/dist/compiler/module-compiler.js.map +1 -0
  63. package/dist/compiler/stale-detector.d.ts +22 -0
  64. package/dist/compiler/stale-detector.js +79 -0
  65. package/dist/compiler/stale-detector.js.map +1 -0
  66. package/dist/config/ignore-service.d.ts +26 -0
  67. package/dist/config/ignore-service.js +366 -0
  68. package/dist/config/ignore-service.js.map +1 -0
  69. package/dist/core/analysis/cluster-enricher.d.ts +38 -0
  70. package/dist/core/analysis/cluster-enricher.js +169 -0
  71. package/dist/core/analysis/cluster-enricher.js.map +1 -0
  72. package/dist/core/analysis/community-processor.d.ts +39 -0
  73. package/dist/core/analysis/community-processor.js +319 -0
  74. package/dist/core/analysis/community-processor.js.map +1 -0
  75. package/dist/core/analysis/process-processor.d.ts +51 -0
  76. package/dist/core/analysis/process-processor.js +318 -0
  77. package/dist/core/analysis/process-processor.js.map +1 -0
  78. package/dist/core/bridge.d.ts +15 -0
  79. package/dist/core/bridge.js +63 -0
  80. package/dist/core/bridge.js.map +1 -0
  81. package/dist/core/export/json-exporter.d.ts +43 -0
  82. package/dist/core/export/json-exporter.js +13 -0
  83. package/dist/core/export/json-exporter.js.map +1 -0
  84. package/dist/core/graph/graph.d.ts +2 -0
  85. package/dist/core/graph/graph.js +79 -0
  86. package/dist/core/graph/graph.js.map +1 -0
  87. package/dist/core/graph/types.d.ts +25 -0
  88. package/dist/core/graph/types.js +2 -0
  89. package/dist/core/graph/types.js.map +1 -0
  90. package/dist/core/parser/ast-cache.d.ts +11 -0
  91. package/dist/core/parser/ast-cache.js +36 -0
  92. package/dist/core/parser/ast-cache.js.map +1 -0
  93. package/dist/core/parser/call-processor.d.ts +105 -0
  94. package/dist/core/parser/call-processor.js +1807 -0
  95. package/dist/core/parser/call-processor.js.map +1 -0
  96. package/dist/core/parser/call-routing.d.ts +55 -0
  97. package/dist/core/parser/call-routing.js +113 -0
  98. package/dist/core/parser/call-routing.js.map +1 -0
  99. package/dist/core/parser/call-sites/extract-language-call-site.d.ts +10 -0
  100. package/dist/core/parser/call-sites/extract-language-call-site.js +23 -0
  101. package/dist/core/parser/call-sites/extract-language-call-site.js.map +1 -0
  102. package/dist/core/parser/call-sites/java.d.ts +9 -0
  103. package/dist/core/parser/call-sites/java.js +31 -0
  104. package/dist/core/parser/call-sites/java.js.map +1 -0
  105. package/dist/core/parser/cluster-enricher.d.ts +38 -0
  106. package/dist/core/parser/cluster-enricher.js +169 -0
  107. package/dist/core/parser/cluster-enricher.js.map +1 -0
  108. package/dist/core/parser/community-processor.d.ts +39 -0
  109. package/dist/core/parser/community-processor.js +321 -0
  110. package/dist/core/parser/community-processor.js.map +1 -0
  111. package/dist/core/parser/constants.d.ts +16 -0
  112. package/dist/core/parser/constants.js +17 -0
  113. package/dist/core/parser/constants.js.map +1 -0
  114. package/dist/core/parser/entry-point-scoring.d.ts +57 -0
  115. package/dist/core/parser/entry-point-scoring.js +377 -0
  116. package/dist/core/parser/entry-point-scoring.js.map +1 -0
  117. package/dist/core/parser/export-detection.d.ts +57 -0
  118. package/dist/core/parser/export-detection.js +234 -0
  119. package/dist/core/parser/export-detection.js.map +1 -0
  120. package/dist/core/parser/field-extractor.d.ts +34 -0
  121. package/dist/core/parser/field-extractor.js +33 -0
  122. package/dist/core/parser/field-extractor.js.map +1 -0
  123. package/dist/core/parser/field-extractors/configs/c-cpp.d.ts +16 -0
  124. package/dist/core/parser/field-extractors/configs/c-cpp.js +129 -0
  125. package/dist/core/parser/field-extractors/configs/c-cpp.js.map +1 -0
  126. package/dist/core/parser/field-extractors/configs/csharp.d.ts +15 -0
  127. package/dist/core/parser/field-extractors/configs/csharp.js +129 -0
  128. package/dist/core/parser/field-extractors/configs/csharp.js.map +1 -0
  129. package/dist/core/parser/field-extractors/configs/dart.d.ts +12 -0
  130. package/dist/core/parser/field-extractors/configs/dart.js +93 -0
  131. package/dist/core/parser/field-extractors/configs/dart.js.map +1 -0
  132. package/dist/core/parser/field-extractors/configs/go.d.ts +12 -0
  133. package/dist/core/parser/field-extractors/configs/go.js +66 -0
  134. package/dist/core/parser/field-extractors/configs/go.js.map +1 -0
  135. package/dist/core/parser/field-extractors/configs/helpers.d.ts +40 -0
  136. package/dist/core/parser/field-extractors/configs/helpers.js +118 -0
  137. package/dist/core/parser/field-extractors/configs/helpers.js.map +1 -0
  138. package/dist/core/parser/field-extractors/configs/jvm.d.ts +17 -0
  139. package/dist/core/parser/field-extractors/configs/jvm.js +139 -0
  140. package/dist/core/parser/field-extractors/configs/jvm.js.map +1 -0
  141. package/dist/core/parser/field-extractors/configs/php.d.ts +12 -0
  142. package/dist/core/parser/field-extractors/configs/php.js +69 -0
  143. package/dist/core/parser/field-extractors/configs/php.js.map +1 -0
  144. package/dist/core/parser/field-extractors/configs/python.d.ts +15 -0
  145. package/dist/core/parser/field-extractors/configs/python.js +92 -0
  146. package/dist/core/parser/field-extractors/configs/python.js.map +1 -0
  147. package/dist/core/parser/field-extractors/configs/ruby.d.ts +15 -0
  148. package/dist/core/parser/field-extractors/configs/ruby.js +68 -0
  149. package/dist/core/parser/field-extractors/configs/ruby.js.map +1 -0
  150. package/dist/core/parser/field-extractors/configs/rust.d.ts +12 -0
  151. package/dist/core/parser/field-extractors/configs/rust.js +58 -0
  152. package/dist/core/parser/field-extractors/configs/rust.js.map +1 -0
  153. package/dist/core/parser/field-extractors/configs/swift.d.ts +15 -0
  154. package/dist/core/parser/field-extractors/configs/swift.js +75 -0
  155. package/dist/core/parser/field-extractors/configs/swift.js.map +1 -0
  156. package/dist/core/parser/field-extractors/configs/typescript-javascript.d.ts +14 -0
  157. package/dist/core/parser/field-extractors/configs/typescript-javascript.js +72 -0
  158. package/dist/core/parser/field-extractors/configs/typescript-javascript.js.map +1 -0
  159. package/dist/core/parser/field-extractors/generic.d.ts +61 -0
  160. package/dist/core/parser/field-extractors/generic.js +170 -0
  161. package/dist/core/parser/field-extractors/generic.js.map +1 -0
  162. package/dist/core/parser/field-extractors/typescript.d.ts +16 -0
  163. package/dist/core/parser/field-extractors/typescript.js +167 -0
  164. package/dist/core/parser/field-extractors/typescript.js.map +1 -0
  165. package/dist/core/parser/field-types.d.ts +46 -0
  166. package/dist/core/parser/field-types.js +2 -0
  167. package/dist/core/parser/field-types.js.map +1 -0
  168. package/dist/core/parser/filesystem-walker.d.ts +28 -0
  169. package/dist/core/parser/filesystem-walker.js +82 -0
  170. package/dist/core/parser/filesystem-walker.js.map +1 -0
  171. package/dist/core/parser/framework-detection.d.ts +149 -0
  172. package/dist/core/parser/framework-detection.js +782 -0
  173. package/dist/core/parser/framework-detection.js.map +1 -0
  174. package/dist/core/parser/heritage-processor.d.ts +52 -0
  175. package/dist/core/parser/heritage-processor.js +339 -0
  176. package/dist/core/parser/heritage-processor.js.map +1 -0
  177. package/dist/core/parser/import-processor.d.ts +33 -0
  178. package/dist/core/parser/import-processor.js +382 -0
  179. package/dist/core/parser/import-processor.js.map +1 -0
  180. package/dist/core/parser/import-resolvers/csharp.d.ts +19 -0
  181. package/dist/core/parser/import-resolvers/csharp.js +132 -0
  182. package/dist/core/parser/import-resolvers/csharp.js.map +1 -0
  183. package/dist/core/parser/import-resolvers/dart.d.ts +7 -0
  184. package/dist/core/parser/import-resolvers/dart.js +45 -0
  185. package/dist/core/parser/import-resolvers/dart.js.map +1 -0
  186. package/dist/core/parser/import-resolvers/go.d.ts +18 -0
  187. package/dist/core/parser/import-resolvers/go.js +62 -0
  188. package/dist/core/parser/import-resolvers/go.js.map +1 -0
  189. package/dist/core/parser/import-resolvers/jvm.d.ts +32 -0
  190. package/dist/core/parser/import-resolvers/jvm.js +160 -0
  191. package/dist/core/parser/import-resolvers/jvm.js.map +1 -0
  192. package/dist/core/parser/import-resolvers/php.d.ts +25 -0
  193. package/dist/core/parser/import-resolvers/php.js +81 -0
  194. package/dist/core/parser/import-resolvers/php.js.map +1 -0
  195. package/dist/core/parser/import-resolvers/python.d.ts +25 -0
  196. package/dist/core/parser/import-resolvers/python.js +85 -0
  197. package/dist/core/parser/import-resolvers/python.js.map +1 -0
  198. package/dist/core/parser/import-resolvers/ruby.d.ts +15 -0
  199. package/dist/core/parser/import-resolvers/ruby.js +21 -0
  200. package/dist/core/parser/import-resolvers/ruby.js.map +1 -0
  201. package/dist/core/parser/import-resolvers/rust.d.ts +18 -0
  202. package/dist/core/parser/import-resolvers/rust.js +119 -0
  203. package/dist/core/parser/import-resolvers/rust.js.map +1 -0
  204. package/dist/core/parser/import-resolvers/standard.d.ts +36 -0
  205. package/dist/core/parser/import-resolvers/standard.js +144 -0
  206. package/dist/core/parser/import-resolvers/standard.js.map +1 -0
  207. package/dist/core/parser/import-resolvers/swift.d.ts +7 -0
  208. package/dist/core/parser/import-resolvers/swift.js +25 -0
  209. package/dist/core/parser/import-resolvers/swift.js.map +1 -0
  210. package/dist/core/parser/import-resolvers/types.d.ts +44 -0
  211. package/dist/core/parser/import-resolvers/types.js +7 -0
  212. package/dist/core/parser/import-resolvers/types.js.map +1 -0
  213. package/dist/core/parser/import-resolvers/utils.d.ts +35 -0
  214. package/dist/core/parser/import-resolvers/utils.js +150 -0
  215. package/dist/core/parser/import-resolvers/utils.js.map +1 -0
  216. package/dist/core/parser/import-resolvers/vue.d.ts +8 -0
  217. package/dist/core/parser/import-resolvers/vue.js +10 -0
  218. package/dist/core/parser/import-resolvers/vue.js.map +1 -0
  219. package/dist/core/parser/language-config.d.ts +52 -0
  220. package/dist/core/parser/language-config.js +182 -0
  221. package/dist/core/parser/language-config.js.map +1 -0
  222. package/dist/core/parser/language-provider.d.ts +126 -0
  223. package/dist/core/parser/language-provider.js +25 -0
  224. package/dist/core/parser/language-provider.js.map +1 -0
  225. package/dist/core/parser/languages/c-cpp.d.ts +12 -0
  226. package/dist/core/parser/languages/c-cpp.js +312 -0
  227. package/dist/core/parser/languages/c-cpp.js.map +1 -0
  228. package/dist/core/parser/languages/csharp.d.ts +8 -0
  229. package/dist/core/parser/languages/csharp.js +127 -0
  230. package/dist/core/parser/languages/csharp.js.map +1 -0
  231. package/dist/core/parser/languages/dart.d.ts +12 -0
  232. package/dist/core/parser/languages/dart.js +91 -0
  233. package/dist/core/parser/languages/dart.js.map +1 -0
  234. package/dist/core/parser/languages/go.d.ts +11 -0
  235. package/dist/core/parser/languages/go.js +32 -0
  236. package/dist/core/parser/languages/go.js.map +1 -0
  237. package/dist/core/parser/languages/index.d.ts +38 -0
  238. package/dist/core/parser/languages/index.js +63 -0
  239. package/dist/core/parser/languages/index.js.map +1 -0
  240. package/dist/core/parser/languages/java.d.ts +9 -0
  241. package/dist/core/parser/languages/java.js +33 -0
  242. package/dist/core/parser/languages/java.js.map +1 -0
  243. package/dist/core/parser/languages/kotlin.d.ts +9 -0
  244. package/dist/core/parser/languages/kotlin.js +112 -0
  245. package/dist/core/parser/languages/kotlin.js.map +1 -0
  246. package/dist/core/parser/languages/php.d.ts +8 -0
  247. package/dist/core/parser/languages/php.js +226 -0
  248. package/dist/core/parser/languages/php.js.map +1 -0
  249. package/dist/core/parser/languages/python.d.ts +12 -0
  250. package/dist/core/parser/languages/python.js +66 -0
  251. package/dist/core/parser/languages/python.js.map +1 -0
  252. package/dist/core/parser/languages/ruby.d.ts +9 -0
  253. package/dist/core/parser/languages/ruby.js +109 -0
  254. package/dist/core/parser/languages/ruby.js.map +1 -0
  255. package/dist/core/parser/languages/rust.d.ts +12 -0
  256. package/dist/core/parser/languages/rust.js +121 -0
  257. package/dist/core/parser/languages/rust.js.map +1 -0
  258. package/dist/core/parser/languages/swift.d.ts +12 -0
  259. package/dist/core/parser/languages/swift.js +233 -0
  260. package/dist/core/parser/languages/swift.js.map +1 -0
  261. package/dist/core/parser/languages/typescript.d.ts +11 -0
  262. package/dist/core/parser/languages/typescript.js +169 -0
  263. package/dist/core/parser/languages/typescript.js.map +1 -0
  264. package/dist/core/parser/languages/vue.d.ts +13 -0
  265. package/dist/core/parser/languages/vue.js +65 -0
  266. package/dist/core/parser/languages/vue.js.map +1 -0
  267. package/dist/core/parser/markdown-processor.d.ts +17 -0
  268. package/dist/core/parser/markdown-processor.js +125 -0
  269. package/dist/core/parser/markdown-processor.js.map +1 -0
  270. package/dist/core/parser/method-extractors/configs/c-cpp.d.ts +3 -0
  271. package/dist/core/parser/method-extractors/configs/c-cpp.js +276 -0
  272. package/dist/core/parser/method-extractors/configs/c-cpp.js.map +1 -0
  273. package/dist/core/parser/method-extractors/configs/csharp.d.ts +2 -0
  274. package/dist/core/parser/method-extractors/configs/csharp.js +243 -0
  275. package/dist/core/parser/method-extractors/configs/csharp.js.map +1 -0
  276. package/dist/core/parser/method-extractors/configs/dart.d.ts +2 -0
  277. package/dist/core/parser/method-extractors/configs/dart.js +263 -0
  278. package/dist/core/parser/method-extractors/configs/dart.js.map +1 -0
  279. package/dist/core/parser/method-extractors/configs/go.d.ts +2 -0
  280. package/dist/core/parser/method-extractors/configs/go.js +120 -0
  281. package/dist/core/parser/method-extractors/configs/go.js.map +1 -0
  282. package/dist/core/parser/method-extractors/configs/jvm.d.ts +3 -0
  283. package/dist/core/parser/method-extractors/configs/jvm.js +309 -0
  284. package/dist/core/parser/method-extractors/configs/jvm.js.map +1 -0
  285. package/dist/core/parser/method-extractors/configs/php.d.ts +2 -0
  286. package/dist/core/parser/method-extractors/configs/php.js +243 -0
  287. package/dist/core/parser/method-extractors/configs/php.js.map +1 -0
  288. package/dist/core/parser/method-extractors/configs/python.d.ts +2 -0
  289. package/dist/core/parser/method-extractors/configs/python.js +219 -0
  290. package/dist/core/parser/method-extractors/configs/python.js.map +1 -0
  291. package/dist/core/parser/method-extractors/configs/ruby.d.ts +2 -0
  292. package/dist/core/parser/method-extractors/configs/ruby.js +201 -0
  293. package/dist/core/parser/method-extractors/configs/ruby.js.map +1 -0
  294. package/dist/core/parser/method-extractors/configs/rust.d.ts +2 -0
  295. package/dist/core/parser/method-extractors/configs/rust.js +120 -0
  296. package/dist/core/parser/method-extractors/configs/rust.js.map +1 -0
  297. package/dist/core/parser/method-extractors/configs/swift.d.ts +2 -0
  298. package/dist/core/parser/method-extractors/configs/swift.js +191 -0
  299. package/dist/core/parser/method-extractors/configs/swift.js.map +1 -0
  300. package/dist/core/parser/method-extractors/configs/typescript-javascript.d.ts +3 -0
  301. package/dist/core/parser/method-extractors/configs/typescript-javascript.js +231 -0
  302. package/dist/core/parser/method-extractors/configs/typescript-javascript.js.map +1 -0
  303. package/dist/core/parser/method-extractors/generic.d.ts +11 -0
  304. package/dist/core/parser/method-extractors/generic.js +162 -0
  305. package/dist/core/parser/method-extractors/generic.js.map +1 -0
  306. package/dist/core/parser/method-types.d.ts +110 -0
  307. package/dist/core/parser/method-types.js +2 -0
  308. package/dist/core/parser/method-types.js.map +1 -0
  309. package/dist/core/parser/mro-processor.d.ts +46 -0
  310. package/dist/core/parser/mro-processor.js +677 -0
  311. package/dist/core/parser/mro-processor.js.map +1 -0
  312. package/dist/core/parser/named-binding-processor.d.ts +18 -0
  313. package/dist/core/parser/named-binding-processor.js +43 -0
  314. package/dist/core/parser/named-binding-processor.js.map +1 -0
  315. package/dist/core/parser/named-bindings/csharp.d.ts +3 -0
  316. package/dist/core/parser/named-bindings/csharp.js +38 -0
  317. package/dist/core/parser/named-bindings/csharp.js.map +1 -0
  318. package/dist/core/parser/named-bindings/java.d.ts +3 -0
  319. package/dist/core/parser/named-bindings/java.js +30 -0
  320. package/dist/core/parser/named-bindings/java.js.map +1 -0
  321. package/dist/core/parser/named-bindings/kotlin.d.ts +3 -0
  322. package/dist/core/parser/named-bindings/kotlin.js +37 -0
  323. package/dist/core/parser/named-bindings/kotlin.js.map +1 -0
  324. package/dist/core/parser/named-bindings/php.d.ts +3 -0
  325. package/dist/core/parser/named-bindings/php.js +62 -0
  326. package/dist/core/parser/named-bindings/php.js.map +1 -0
  327. package/dist/core/parser/named-bindings/python.d.ts +3 -0
  328. package/dist/core/parser/named-bindings/python.js +50 -0
  329. package/dist/core/parser/named-bindings/python.js.map +1 -0
  330. package/dist/core/parser/named-bindings/rust.d.ts +3 -0
  331. package/dist/core/parser/named-bindings/rust.js +67 -0
  332. package/dist/core/parser/named-bindings/rust.js.map +1 -0
  333. package/dist/core/parser/named-bindings/types.d.ts +16 -0
  334. package/dist/core/parser/named-bindings/types.js +7 -0
  335. package/dist/core/parser/named-bindings/types.js.map +1 -0
  336. package/dist/core/parser/named-bindings/typescript.d.ts +3 -0
  337. package/dist/core/parser/named-bindings/typescript.js +59 -0
  338. package/dist/core/parser/named-bindings/typescript.js.map +1 -0
  339. package/dist/core/parser/parsing-processor.d.ts +23 -0
  340. package/dist/core/parser/parsing-processor.js +464 -0
  341. package/dist/core/parser/parsing-processor.js.map +1 -0
  342. package/dist/core/parser/pipeline.d.ts +17 -0
  343. package/dist/core/parser/pipeline.js +1405 -0
  344. package/dist/core/parser/pipeline.js.map +1 -0
  345. package/dist/core/parser/process-processor.d.ts +51 -0
  346. package/dist/core/parser/process-processor.js +318 -0
  347. package/dist/core/parser/process-processor.js.map +1 -0
  348. package/dist/core/parser/resolution-context.d.ts +58 -0
  349. package/dist/core/parser/resolution-context.js +136 -0
  350. package/dist/core/parser/resolution-context.js.map +1 -0
  351. package/dist/core/parser/route-extractors/expo.d.ts +1 -0
  352. package/dist/core/parser/route-extractors/expo.js +37 -0
  353. package/dist/core/parser/route-extractors/expo.js.map +1 -0
  354. package/dist/core/parser/route-extractors/middleware.d.ts +47 -0
  355. package/dist/core/parser/route-extractors/middleware.js +168 -0
  356. package/dist/core/parser/route-extractors/middleware.js.map +1 -0
  357. package/dist/core/parser/route-extractors/nextjs.d.ts +3 -0
  358. package/dist/core/parser/route-extractors/nextjs.js +77 -0
  359. package/dist/core/parser/route-extractors/nextjs.js.map +1 -0
  360. package/dist/core/parser/route-extractors/php.d.ts +7 -0
  361. package/dist/core/parser/route-extractors/php.js +23 -0
  362. package/dist/core/parser/route-extractors/php.js.map +1 -0
  363. package/dist/core/parser/route-extractors/response-shapes.d.ts +20 -0
  364. package/dist/core/parser/route-extractors/response-shapes.js +295 -0
  365. package/dist/core/parser/route-extractors/response-shapes.js.map +1 -0
  366. package/dist/core/parser/structure-processor.d.ts +2 -0
  367. package/dist/core/parser/structure-processor.js +37 -0
  368. package/dist/core/parser/structure-processor.js.map +1 -0
  369. package/dist/core/parser/symbol-table.d.ts +79 -0
  370. package/dist/core/parser/symbol-table.js +116 -0
  371. package/dist/core/parser/symbol-table.js.map +1 -0
  372. package/dist/core/parser/tree-sitter-queries.d.ts +16 -0
  373. package/dist/core/parser/tree-sitter-queries.js +1180 -0
  374. package/dist/core/parser/tree-sitter-queries.js.map +1 -0
  375. package/dist/core/parser/type-env.d.ts +81 -0
  376. package/dist/core/parser/type-env.js +1048 -0
  377. package/dist/core/parser/type-env.js.map +1 -0
  378. package/dist/core/parser/type-extractors/c-cpp.d.ts +7 -0
  379. package/dist/core/parser/type-extractors/c-cpp.js +533 -0
  380. package/dist/core/parser/type-extractors/c-cpp.js.map +1 -0
  381. package/dist/core/parser/type-extractors/csharp.d.ts +2 -0
  382. package/dist/core/parser/type-extractors/csharp.js +584 -0
  383. package/dist/core/parser/type-extractors/csharp.js.map +1 -0
  384. package/dist/core/parser/type-extractors/dart.d.ts +15 -0
  385. package/dist/core/parser/type-extractors/dart.js +370 -0
  386. package/dist/core/parser/type-extractors/dart.js.map +1 -0
  387. package/dist/core/parser/type-extractors/go.d.ts +2 -0
  388. package/dist/core/parser/type-extractors/go.js +514 -0
  389. package/dist/core/parser/type-extractors/go.js.map +1 -0
  390. package/dist/core/parser/type-extractors/jvm.d.ts +3 -0
  391. package/dist/core/parser/type-extractors/jvm.js +857 -0
  392. package/dist/core/parser/type-extractors/jvm.js.map +1 -0
  393. package/dist/core/parser/type-extractors/php.d.ts +2 -0
  394. package/dist/core/parser/type-extractors/php.js +535 -0
  395. package/dist/core/parser/type-extractors/php.js.map +1 -0
  396. package/dist/core/parser/type-extractors/python.d.ts +2 -0
  397. package/dist/core/parser/type-extractors/python.js +475 -0
  398. package/dist/core/parser/type-extractors/python.js.map +1 -0
  399. package/dist/core/parser/type-extractors/ruby.d.ts +2 -0
  400. package/dist/core/parser/type-extractors/ruby.js +378 -0
  401. package/dist/core/parser/type-extractors/ruby.js.map +1 -0
  402. package/dist/core/parser/type-extractors/rust.d.ts +2 -0
  403. package/dist/core/parser/type-extractors/rust.js +516 -0
  404. package/dist/core/parser/type-extractors/rust.js.map +1 -0
  405. package/dist/core/parser/type-extractors/shared.d.ts +131 -0
  406. package/dist/core/parser/type-extractors/shared.js +797 -0
  407. package/dist/core/parser/type-extractors/shared.js.map +1 -0
  408. package/dist/core/parser/type-extractors/swift.d.ts +2 -0
  409. package/dist/core/parser/type-extractors/swift.js +485 -0
  410. package/dist/core/parser/type-extractors/swift.js.map +1 -0
  411. package/dist/core/parser/type-extractors/types.d.ts +172 -0
  412. package/dist/core/parser/type-extractors/types.js +2 -0
  413. package/dist/core/parser/type-extractors/types.js.map +1 -0
  414. package/dist/core/parser/type-extractors/typescript.d.ts +2 -0
  415. package/dist/core/parser/type-extractors/typescript.js +662 -0
  416. package/dist/core/parser/type-extractors/typescript.js.map +1 -0
  417. package/dist/core/parser/utils/ast-helpers.d.ts +73 -0
  418. package/dist/core/parser/utils/ast-helpers.js +415 -0
  419. package/dist/core/parser/utils/ast-helpers.js.map +1 -0
  420. package/dist/core/parser/utils/call-analysis.d.ts +75 -0
  421. package/dist/core/parser/utils/call-analysis.js +575 -0
  422. package/dist/core/parser/utils/call-analysis.js.map +1 -0
  423. package/dist/core/parser/utils/event-loop.d.ts +5 -0
  424. package/dist/core/parser/utils/event-loop.js +6 -0
  425. package/dist/core/parser/utils/event-loop.js.map +1 -0
  426. package/dist/core/parser/utils/method-props.d.ts +8 -0
  427. package/dist/core/parser/utils/method-props.js +39 -0
  428. package/dist/core/parser/utils/method-props.js.map +1 -0
  429. package/dist/core/parser/utils/verbose.d.ts +1 -0
  430. package/dist/core/parser/utils/verbose.js +8 -0
  431. package/dist/core/parser/utils/verbose.js.map +1 -0
  432. package/dist/core/parser/vue-sfc-extractor.d.ts +44 -0
  433. package/dist/core/parser/vue-sfc-extractor.js +95 -0
  434. package/dist/core/parser/vue-sfc-extractor.js.map +1 -0
  435. package/dist/core/parser/workers/parse-worker.d.ts +171 -0
  436. package/dist/core/parser/workers/parse-worker.js +1724 -0
  437. package/dist/core/parser/workers/parse-worker.js.map +1 -0
  438. package/dist/core/parser/workers/worker-pool.d.ts +16 -0
  439. package/dist/core/parser/workers/worker-pool.js +124 -0
  440. package/dist/core/parser/workers/worker-pool.js.map +1 -0
  441. package/dist/core/shared/graph-types.d.ts +61 -0
  442. package/dist/core/shared/graph-types.js +5 -0
  443. package/dist/core/shared/graph-types.js.map +1 -0
  444. package/dist/core/shared/index.d.ts +4 -0
  445. package/dist/core/shared/index.js +4 -0
  446. package/dist/core/shared/index.js.map +1 -0
  447. package/dist/core/shared/language-detection.d.ts +22 -0
  448. package/dist/core/shared/language-detection.js +137 -0
  449. package/dist/core/shared/language-detection.js.map +1 -0
  450. package/dist/core/shared/languages.d.ts +23 -0
  451. package/dist/core/shared/languages.js +25 -0
  452. package/dist/core/shared/languages.js.map +1 -0
  453. package/dist/core/shared/pipeline.d.ts +15 -0
  454. package/dist/core/shared/pipeline.js +5 -0
  455. package/dist/core/shared/pipeline.js.map +1 -0
  456. package/dist/core/tree-sitter/parser-loader.d.ts +5 -0
  457. package/dist/core/tree-sitter/parser-loader.js +71 -0
  458. package/dist/core/tree-sitter/parser-loader.js.map +1 -0
  459. package/dist/index.d.ts +2 -0
  460. package/dist/index.js +132 -0
  461. package/dist/index.js.map +1 -0
  462. package/dist/lib/hash.d.ts +1 -0
  463. package/dist/lib/hash.js +6 -0
  464. package/dist/lib/hash.js.map +1 -0
  465. package/dist/lib/naming.d.ts +12 -0
  466. package/dist/lib/naming.js +28 -0
  467. package/dist/lib/naming.js.map +1 -0
  468. package/dist/lib/utils.d.ts +1 -0
  469. package/dist/lib/utils.js +4 -0
  470. package/dist/lib/utils.js.map +1 -0
  471. package/dist/mcp/server.d.ts +26 -0
  472. package/dist/mcp/server.js +282 -0
  473. package/dist/mcp/server.js.map +1 -0
  474. package/dist/mcp/tools.d.ts +37 -0
  475. package/dist/mcp/tools.js +650 -0
  476. package/dist/mcp/tools.js.map +1 -0
  477. package/dist/query/bm25.d.ts +19 -0
  478. package/dist/query/bm25.js +60 -0
  479. package/dist/query/bm25.js.map +1 -0
  480. package/dist/query/graph-index.d.ts +40 -0
  481. package/dist/query/graph-index.js +178 -0
  482. package/dist/query/graph-index.js.map +1 -0
  483. package/dist/store/derived-index.d.ts +4 -0
  484. package/dist/store/derived-index.js +68 -0
  485. package/dist/store/derived-index.js.map +1 -0
  486. package/dist/store/meta.d.ts +1 -0
  487. package/dist/store/meta.js +3 -0
  488. package/dist/store/meta.js.map +1 -0
  489. package/dist/store/schema.d.ts +135 -0
  490. package/dist/store/schema.js +2 -0
  491. package/dist/store/schema.js.map +1 -0
  492. package/dist/store/store.d.ts +49 -0
  493. package/dist/store/store.js +254 -0
  494. package/dist/store/store.js.map +1 -0
  495. package/dist/types/pipeline.d.ts +12 -0
  496. package/dist/types/pipeline.js +2 -0
  497. package/dist/types/pipeline.js.map +1 -0
  498. package/package.json +69 -0
  499. package/skills/cotx-enrich/SKILL.md +59 -0
  500. package/vendor/leiden/index.cjs +355 -0
  501. package/vendor/leiden/utils.cjs +392 -0
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Cluster Enricher
3
+ *
4
+ * LLM-based enrichment for community clusters.
5
+ * Generates semantic names, keywords, and descriptions using an LLM.
6
+ */
7
+ // ============================================================================
8
+ // PROMPT TEMPLATE
9
+ // ============================================================================
10
+ const buildEnrichmentPrompt = (members, heuristicLabel) => {
11
+ // Limit to first 20 members to control token usage
12
+ const limitedMembers = members.slice(0, 20);
13
+ const memberList = limitedMembers.map((m) => `${m.name} (${m.type})`).join(', ');
14
+ return `Analyze this code cluster and provide a semantic name and short description.
15
+
16
+ Heuristic: "${heuristicLabel}"
17
+ Members: ${memberList}${members.length > 20 ? ` (+${members.length - 20} more)` : ''}
18
+
19
+ Reply with JSON only:
20
+ {"name": "2-4 word semantic name", "description": "One sentence describing purpose"}`;
21
+ };
22
+ // ============================================================================
23
+ // PARSE LLM RESPONSE
24
+ // ============================================================================
25
+ const parseEnrichmentResponse = (response, fallbackLabel) => {
26
+ try {
27
+ // Extract JSON from response (handles markdown code blocks)
28
+ const jsonMatch = response.match(/\{[\s\S]*\}/);
29
+ if (!jsonMatch) {
30
+ throw new Error('No JSON found in response');
31
+ }
32
+ const parsed = JSON.parse(jsonMatch[0]);
33
+ return {
34
+ name: parsed.name || fallbackLabel,
35
+ keywords: Array.isArray(parsed.keywords) ? parsed.keywords : [],
36
+ description: parsed.description || '',
37
+ };
38
+ }
39
+ catch {
40
+ // Fallback if parsing fails
41
+ return {
42
+ name: fallbackLabel,
43
+ keywords: [],
44
+ description: '',
45
+ };
46
+ }
47
+ };
48
+ // ============================================================================
49
+ // MAIN ENRICHMENT FUNCTION
50
+ // ============================================================================
51
+ /**
52
+ * Enrich clusters with LLM-generated names, keywords, and descriptions
53
+ *
54
+ * @param communities - Community nodes to enrich
55
+ * @param memberMap - Map of communityId -> member info
56
+ * @param llmClient - LLM client for generation
57
+ * @param onProgress - Progress callback
58
+ */
59
+ export const enrichClusters = async (communities, memberMap, llmClient, onProgress) => {
60
+ const enrichments = new Map();
61
+ let tokensUsed = 0;
62
+ for (let i = 0; i < communities.length; i++) {
63
+ const community = communities[i];
64
+ const members = memberMap.get(community.id) || [];
65
+ onProgress?.(i + 1, communities.length);
66
+ if (members.length === 0) {
67
+ // No members, use heuristic
68
+ enrichments.set(community.id, {
69
+ name: community.heuristicLabel,
70
+ keywords: [],
71
+ description: '',
72
+ });
73
+ continue;
74
+ }
75
+ try {
76
+ const prompt = buildEnrichmentPrompt(members, community.heuristicLabel);
77
+ const response = await llmClient.generate(prompt);
78
+ // Rough token estimate
79
+ tokensUsed += prompt.length / 4 + response.length / 4;
80
+ const enrichment = parseEnrichmentResponse(response, community.heuristicLabel);
81
+ enrichments.set(community.id, enrichment);
82
+ }
83
+ catch (error) {
84
+ // On error, fallback to heuristic
85
+ console.warn(`Failed to enrich cluster ${community.id}:`, error);
86
+ enrichments.set(community.id, {
87
+ name: community.heuristicLabel,
88
+ keywords: [],
89
+ description: '',
90
+ });
91
+ }
92
+ }
93
+ return { enrichments, tokensUsed };
94
+ };
95
+ // ============================================================================
96
+ // BATCH ENRICHMENT (more efficient)
97
+ // ============================================================================
98
+ /**
99
+ * Enrich multiple clusters in a single LLM call (batch mode)
100
+ * More efficient for token usage but requires larger context window
101
+ */
102
+ export const enrichClustersBatch = async (communities, memberMap, llmClient, batchSize = 5, onProgress) => {
103
+ const enrichments = new Map();
104
+ let tokensUsed = 0;
105
+ // Process in batches
106
+ for (let i = 0; i < communities.length; i += batchSize) {
107
+ // Report progress
108
+ onProgress?.(Math.min(i + batchSize, communities.length), communities.length);
109
+ const batch = communities.slice(i, i + batchSize);
110
+ const batchPrompt = batch
111
+ .map((community, idx) => {
112
+ const members = memberMap.get(community.id) || [];
113
+ const limitedMembers = members.slice(0, 15);
114
+ const memberList = limitedMembers.map((m) => `${m.name} (${m.type})`).join(', ');
115
+ return `Cluster ${idx + 1} (id: ${community.id}):
116
+ Heuristic: "${community.heuristicLabel}"
117
+ Members: ${memberList}`;
118
+ })
119
+ .join('\n\n');
120
+ const prompt = `Analyze these code clusters and generate semantic names, keywords, and descriptions.
121
+
122
+ ${batchPrompt}
123
+
124
+ Output JSON array:
125
+ [
126
+ {"id": "comm_X", "name": "...", "keywords": [...], "description": "..."},
127
+ ...
128
+ ]`;
129
+ try {
130
+ const response = await llmClient.generate(prompt);
131
+ tokensUsed += prompt.length / 4 + response.length / 4;
132
+ // Parse batch response
133
+ const jsonMatch = response.match(/\[[\s\S]*\]/);
134
+ if (jsonMatch) {
135
+ const parsed = JSON.parse(jsonMatch[0]);
136
+ for (const item of parsed) {
137
+ enrichments.set(item.id, {
138
+ name: item.name,
139
+ keywords: item.keywords || [],
140
+ description: item.description || '',
141
+ });
142
+ }
143
+ }
144
+ }
145
+ catch (error) {
146
+ console.warn('Batch enrichment failed, falling back to heuristics:', error);
147
+ // Fallback for this batch
148
+ for (const community of batch) {
149
+ enrichments.set(community.id, {
150
+ name: community.heuristicLabel,
151
+ keywords: [],
152
+ description: '',
153
+ });
154
+ }
155
+ }
156
+ }
157
+ // Fill in any missing communities
158
+ for (const community of communities) {
159
+ if (!enrichments.has(community.id)) {
160
+ enrichments.set(community.id, {
161
+ name: community.heuristicLabel,
162
+ keywords: [],
163
+ description: '',
164
+ });
165
+ }
166
+ }
167
+ return { enrichments, tokensUsed };
168
+ };
169
+ //# sourceMappingURL=cluster-enricher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster-enricher.js","sourceRoot":"","sources":["../../../src/core/analysis/cluster-enricher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6BH,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,MAAM,qBAAqB,GAAG,CAAC,OAA4B,EAAE,cAAsB,EAAU,EAAE;IAC7F,mDAAmD;IACnD,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjF,OAAO;;cAEK,cAAc;WACjB,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;;;qFAGC,CAAC;AACtF,CAAC,CAAC;AAEF,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,MAAM,uBAAuB,GAAG,CAAC,QAAgB,EAAE,aAAqB,EAAqB,EAAE;IAC7F,IAAI,CAAC;QACH,4DAA4D;QAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAExC,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,aAAa;YAClC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC/D,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;SACtC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;QAC5B,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,WAA4B,EAC5B,SAA2C,EAC3C,SAAoB,EACpB,UAAqD,EAC1B,EAAE;IAC7B,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;IACzD,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAElD,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,4BAA4B;YAC5B,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE;gBAC5B,IAAI,EAAE,SAAS,CAAC,cAAc;gBAC9B,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,EAAE;aAChB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAElD,uBAAuB;YACvB,UAAU,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAEtD,MAAM,UAAU,GAAG,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;YAC/E,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kCAAkC;YAClC,OAAO,CAAC,IAAI,CAAC,4BAA4B,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACjE,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE;gBAC5B,IAAI,EAAE,SAAS,CAAC,cAAc;gBAC9B,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,EAAE;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,WAA4B,EAC5B,SAA2C,EAC3C,SAAoB,EACpB,YAAoB,CAAC,EACrB,UAAqD,EAC1B,EAAE;IAC7B,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;IACzD,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,qBAAqB;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACvD,kBAAkB;QAClB,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAE9E,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;QAElD,MAAM,WAAW,GAAG,KAAK;aACtB,GAAG,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE;YACtB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEjF,OAAO,WAAW,GAAG,GAAG,CAAC,SAAS,SAAS,CAAC,EAAE;cACxC,SAAS,CAAC,cAAc;WAC3B,UAAU,EAAE,CAAC;QAClB,CAAC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,MAAM,GAAG;;EAEjB,WAAW;;;;;;EAMX,CAAC;QAEC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClD,UAAU,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAEtD,uBAAuB;YACvB,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAChD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAKpC,CAAC;gBAEH,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;oBAC1B,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;wBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;wBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;qBACpC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE,KAAK,CAAC,CAAC;YAC5E,0BAA0B;YAC1B,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;gBAC9B,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE;oBAC5B,IAAI,EAAE,SAAS,CAAC,cAAc;oBAC9B,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE,EAAE;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACnC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE;gBAC5B,IAAI,EAAE,SAAS,CAAC,cAAc;gBAC9B,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,EAAE;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACrC,CAAC,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Community Detection Processor
3
+ *
4
+ * Uses the Leiden algorithm (via graphology-communities-leiden) to detect
5
+ * communities/clusters in the code graph based on CALLS relationships.
6
+ *
7
+ * Communities represent groups of code that work together frequently,
8
+ * helping agents navigate the codebase by functional area rather than file structure.
9
+ */
10
+ import { KnowledgeGraph } from '../graph/types.js';
11
+ export interface CommunityNode {
12
+ id: string;
13
+ label: string;
14
+ heuristicLabel: string;
15
+ cohesion: number;
16
+ symbolCount: number;
17
+ }
18
+ export interface CommunityMembership {
19
+ nodeId: string;
20
+ communityId: string;
21
+ }
22
+ export interface CommunityDetectionResult {
23
+ communities: CommunityNode[];
24
+ memberships: CommunityMembership[];
25
+ stats: {
26
+ totalCommunities: number;
27
+ modularity: number;
28
+ nodesProcessed: number;
29
+ };
30
+ }
31
+ export declare const COMMUNITY_COLORS: string[];
32
+ export declare const getCommunityColor: (communityIndex: number) => string;
33
+ /**
34
+ * Detect communities in the knowledge graph using Leiden algorithm
35
+ *
36
+ * This runs AFTER all relationships (CALLS, IMPORTS, etc.) have been built.
37
+ * It uses primarily CALLS edges to cluster code that works together.
38
+ */
39
+ export declare const processCommunities: (knowledgeGraph: KnowledgeGraph, onProgress?: (message: string, progress: number) => void) => Promise<CommunityDetectionResult>;
@@ -0,0 +1,319 @@
1
+ /**
2
+ * Community Detection Processor
3
+ *
4
+ * Uses the Leiden algorithm (via graphology-communities-leiden) to detect
5
+ * communities/clusters in the code graph based on CALLS relationships.
6
+ *
7
+ * Communities represent groups of code that work together frequently,
8
+ * helping agents navigate the codebase by functional area rather than file structure.
9
+ */
10
+ // NOTE: The Leiden algorithm source is vendored from graphology's repo
11
+ // (src/communities-leiden) because it was never published to npm.
12
+ // We use createRequire to load the CommonJS vendored files in ESM context.
13
+ import Graph from 'graphology';
14
+ import { createRequire } from 'node:module';
15
+ import { fileURLToPath } from 'node:url';
16
+ import { dirname, resolve } from 'node:path';
17
+ const __filename = fileURLToPath(import.meta.url);
18
+ const __dirname = dirname(__filename);
19
+ // Navigate to package root (works from both src/ and dist/)
20
+ const leidenPath = resolve(__dirname, '..', '..', '..', 'vendor', 'leiden', 'index.cjs');
21
+ const _require = createRequire(import.meta.url);
22
+ const leiden = _require(leidenPath);
23
+ // ============================================================================
24
+ // COMMUNITY COLORS (for visualization)
25
+ // ============================================================================
26
+ export const COMMUNITY_COLORS = [
27
+ '#ef4444', // red
28
+ '#f97316', // orange
29
+ '#eab308', // yellow
30
+ '#22c55e', // green
31
+ '#06b6d4', // cyan
32
+ '#3b82f6', // blue
33
+ '#8b5cf6', // violet
34
+ '#d946ef', // fuchsia
35
+ '#ec4899', // pink
36
+ '#f43f5e', // rose
37
+ '#14b8a6', // teal
38
+ '#84cc16', // lime
39
+ ];
40
+ export const getCommunityColor = (communityIndex) => {
41
+ return COMMUNITY_COLORS[communityIndex % COMMUNITY_COLORS.length];
42
+ };
43
+ // ============================================================================
44
+ // MAIN PROCESSOR
45
+ // ============================================================================
46
+ /**
47
+ * Detect communities in the knowledge graph using Leiden algorithm
48
+ *
49
+ * This runs AFTER all relationships (CALLS, IMPORTS, etc.) have been built.
50
+ * It uses primarily CALLS edges to cluster code that works together.
51
+ */
52
+ export const processCommunities = async (knowledgeGraph, onProgress) => {
53
+ onProgress?.('Building graph for community detection...', 0);
54
+ // Pre-check total symbol count to determine large-graph mode before building
55
+ let symbolCount = 0;
56
+ knowledgeGraph.forEachNode((node) => {
57
+ if (node.label === 'Function' ||
58
+ node.label === 'Class' ||
59
+ node.label === 'Method' ||
60
+ node.label === 'Interface') {
61
+ symbolCount++;
62
+ }
63
+ });
64
+ const isLarge = symbolCount > 10_000;
65
+ const graph = buildGraphologyGraph(knowledgeGraph, isLarge);
66
+ if (graph.order === 0) {
67
+ return {
68
+ communities: [],
69
+ memberships: [],
70
+ stats: { totalCommunities: 0, modularity: 0, nodesProcessed: 0 },
71
+ };
72
+ }
73
+ const nodeCount = graph.order;
74
+ const edgeCount = graph.size;
75
+ onProgress?.(`Running Leiden on ${nodeCount} nodes, ${edgeCount} edges${isLarge ? ` (filtered from ${symbolCount} symbols)` : ''}...`, 30);
76
+ // Large graphs: higher resolution + capped iterations (matching Python leidenalg default of 2).
77
+ // The first 2 iterations capture ~95%+ of modularity; additional iterations have diminishing returns.
78
+ // Timeout: abort after 60s for pathological graph structures.
79
+ const LEIDEN_TIMEOUT_MS = 60_000;
80
+ let details;
81
+ try {
82
+ details = await Promise.race([
83
+ Promise.resolve(leiden.detailed(graph, {
84
+ resolution: isLarge ? 2.0 : 1.0,
85
+ maxIterations: isLarge ? 3 : 0,
86
+ })),
87
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Leiden timeout')), LEIDEN_TIMEOUT_MS)),
88
+ ]);
89
+ }
90
+ catch (e) {
91
+ if (e.message === 'Leiden timeout') {
92
+ onProgress?.('Community detection timed out, using fallback...', 60);
93
+ // Fallback: assign all nodes to community 0
94
+ const communities = {};
95
+ graph.forEachNode((node) => {
96
+ communities[node] = 0;
97
+ });
98
+ details = { communities, count: 1, modularity: 0 };
99
+ }
100
+ else {
101
+ throw e;
102
+ }
103
+ }
104
+ onProgress?.(`Found ${details.count} communities...`, 60);
105
+ // Step 3: Create community nodes with heuristic labels
106
+ const communityNodes = createCommunityNodes(details.communities, details.count, graph, knowledgeGraph);
107
+ onProgress?.('Creating membership edges...', 80);
108
+ // Step 4: Create membership mappings
109
+ const memberships = [];
110
+ Object.entries(details.communities).forEach(([nodeId, communityNum]) => {
111
+ memberships.push({
112
+ nodeId,
113
+ communityId: `comm_${communityNum}`,
114
+ });
115
+ });
116
+ onProgress?.('Community detection complete!', 100);
117
+ return {
118
+ communities: communityNodes,
119
+ memberships,
120
+ stats: {
121
+ totalCommunities: details.count,
122
+ modularity: details.modularity,
123
+ nodesProcessed: graph.order,
124
+ },
125
+ };
126
+ };
127
+ // ============================================================================
128
+ // HELPER: Build graphology graph from knowledge graph
129
+ // ============================================================================
130
+ /**
131
+ * Build a graphology graph containing only symbol nodes and clustering edges.
132
+ * For large graphs (>10K symbols), filter out low-confidence fuzzy-global edges
133
+ * and degree-1 nodes that add noise and massively increase Leiden runtime.
134
+ */
135
+ const MIN_CONFIDENCE_LARGE = 0.5;
136
+ const buildGraphologyGraph = (knowledgeGraph, isLarge) => {
137
+ const GraphCtor = Graph;
138
+ const graph = new GraphCtor({ type: 'undirected', allowSelfLoops: false });
139
+ const symbolTypes = new Set(['Function', 'Class', 'Method', 'Interface']);
140
+ const clusteringRelTypes = new Set(['CALLS', 'EXTENDS', 'IMPLEMENTS']);
141
+ const connectedNodes = new Set();
142
+ const nodeDegree = new Map();
143
+ knowledgeGraph.forEachRelationship((rel) => {
144
+ if (!clusteringRelTypes.has(rel.type) || rel.sourceId === rel.targetId)
145
+ return;
146
+ if (isLarge && rel.confidence < MIN_CONFIDENCE_LARGE)
147
+ return;
148
+ connectedNodes.add(rel.sourceId);
149
+ connectedNodes.add(rel.targetId);
150
+ nodeDegree.set(rel.sourceId, (nodeDegree.get(rel.sourceId) || 0) + 1);
151
+ nodeDegree.set(rel.targetId, (nodeDegree.get(rel.targetId) || 0) + 1);
152
+ });
153
+ knowledgeGraph.forEachNode((node) => {
154
+ if (!symbolTypes.has(node.label) || !connectedNodes.has(node.id))
155
+ return;
156
+ // For large graphs, skip degree-1 nodes — they just become singletons or
157
+ // get absorbed into their single neighbor's community, but cost iteration time.
158
+ if (isLarge && (nodeDegree.get(node.id) || 0) < 2)
159
+ return;
160
+ graph.addNode(node.id, {
161
+ name: node.properties.name,
162
+ filePath: node.properties.filePath,
163
+ type: node.label,
164
+ });
165
+ });
166
+ knowledgeGraph.forEachRelationship((rel) => {
167
+ if (!clusteringRelTypes.has(rel.type))
168
+ return;
169
+ if (isLarge && rel.confidence < MIN_CONFIDENCE_LARGE)
170
+ return;
171
+ if (graph.hasNode(rel.sourceId) &&
172
+ graph.hasNode(rel.targetId) &&
173
+ rel.sourceId !== rel.targetId) {
174
+ if (!graph.hasEdge(rel.sourceId, rel.targetId)) {
175
+ graph.addEdge(rel.sourceId, rel.targetId);
176
+ }
177
+ }
178
+ });
179
+ return graph;
180
+ };
181
+ // ============================================================================
182
+ // HELPER: Create community nodes with heuristic labels
183
+ // ============================================================================
184
+ /**
185
+ * Create Community nodes with auto-generated labels based on member file paths
186
+ */
187
+ const createCommunityNodes = (communities, communityCount, graph, knowledgeGraph) => {
188
+ // Group node IDs by community
189
+ const communityMembers = new Map();
190
+ Object.entries(communities).forEach(([nodeId, commNum]) => {
191
+ if (!communityMembers.has(commNum)) {
192
+ communityMembers.set(commNum, []);
193
+ }
194
+ communityMembers.get(commNum).push(nodeId);
195
+ });
196
+ // Build node lookup for file paths
197
+ const nodePathMap = new Map();
198
+ for (const node of knowledgeGraph.iterNodes()) {
199
+ if (node.properties.filePath) {
200
+ nodePathMap.set(node.id, node.properties.filePath);
201
+ }
202
+ }
203
+ // Create community nodes - SKIP SINGLETONS (isolated nodes)
204
+ const communityNodes = [];
205
+ communityMembers.forEach((memberIds, commNum) => {
206
+ // Skip singleton communities - they're just isolated nodes
207
+ if (memberIds.length < 2)
208
+ return;
209
+ const heuristicLabel = generateHeuristicLabel(memberIds, nodePathMap, graph, commNum);
210
+ communityNodes.push({
211
+ id: `comm_${commNum}`,
212
+ label: heuristicLabel,
213
+ heuristicLabel,
214
+ cohesion: calculateCohesion(memberIds, graph),
215
+ symbolCount: memberIds.length,
216
+ });
217
+ });
218
+ // Sort by size descending
219
+ communityNodes.sort((a, b) => b.symbolCount - a.symbolCount);
220
+ return communityNodes;
221
+ };
222
+ // ============================================================================
223
+ // HELPER: Generate heuristic label from folder patterns
224
+ // ============================================================================
225
+ /**
226
+ * Generate a human-readable label from the most common folder name in the community
227
+ */
228
+ const generateHeuristicLabel = (memberIds, nodePathMap, graph, commNum) => {
229
+ // Collect folder names from file paths
230
+ const folderCounts = new Map();
231
+ memberIds.forEach((nodeId) => {
232
+ const filePath = nodePathMap.get(nodeId) || '';
233
+ const parts = filePath.split('/').filter(Boolean);
234
+ // Get the most specific folder (parent directory)
235
+ if (parts.length >= 2) {
236
+ const folder = parts[parts.length - 2];
237
+ // Skip generic folder names
238
+ if (!['src', 'lib', 'core', 'utils', 'common', 'shared', 'helpers'].includes(folder.toLowerCase())) {
239
+ folderCounts.set(folder, (folderCounts.get(folder) || 0) + 1);
240
+ }
241
+ }
242
+ });
243
+ // Find most common folder
244
+ let maxCount = 0;
245
+ let bestFolder = '';
246
+ folderCounts.forEach((count, folder) => {
247
+ if (count > maxCount) {
248
+ maxCount = count;
249
+ bestFolder = folder;
250
+ }
251
+ });
252
+ if (bestFolder) {
253
+ // Capitalize first letter
254
+ return bestFolder.charAt(0).toUpperCase() + bestFolder.slice(1);
255
+ }
256
+ // Fallback: use function names to detect patterns
257
+ const names = [];
258
+ memberIds.forEach((nodeId) => {
259
+ const name = graph.getNodeAttribute(nodeId, 'name');
260
+ if (name)
261
+ names.push(name);
262
+ });
263
+ // Look for common prefixes
264
+ if (names.length > 2) {
265
+ const commonPrefix = findCommonPrefix(names);
266
+ if (commonPrefix.length > 2) {
267
+ return commonPrefix.charAt(0).toUpperCase() + commonPrefix.slice(1);
268
+ }
269
+ }
270
+ // Last resort: generic name with community ID for uniqueness
271
+ return `Cluster_${commNum}`;
272
+ };
273
+ /**
274
+ * Find common prefix among strings
275
+ */
276
+ const findCommonPrefix = (strings) => {
277
+ if (strings.length === 0)
278
+ return '';
279
+ const sorted = strings.slice().sort();
280
+ const first = sorted[0];
281
+ const last = sorted[sorted.length - 1];
282
+ let i = 0;
283
+ while (i < first.length && first[i] === last[i]) {
284
+ i++;
285
+ }
286
+ return first.substring(0, i);
287
+ };
288
+ // ============================================================================
289
+ // HELPER: Calculate community cohesion
290
+ // ============================================================================
291
+ /**
292
+ * Estimate cohesion score (0-1) based on internal edge density.
293
+ * Uses sampling for large communities to avoid O(N^2) cost.
294
+ */
295
+ const calculateCohesion = (memberIds, graph) => {
296
+ if (memberIds.length <= 1)
297
+ return 1.0;
298
+ const memberSet = new Set(memberIds);
299
+ // Sample up to 50 members for large communities
300
+ const SAMPLE_SIZE = 50;
301
+ const sample = memberIds.length <= SAMPLE_SIZE ? memberIds : memberIds.slice(0, SAMPLE_SIZE);
302
+ let internalEdges = 0;
303
+ let totalEdges = 0;
304
+ for (const nodeId of sample) {
305
+ if (!graph.hasNode(nodeId))
306
+ continue;
307
+ graph.forEachNeighbor(nodeId, (neighbor) => {
308
+ totalEdges++;
309
+ if (memberSet.has(neighbor)) {
310
+ internalEdges++;
311
+ }
312
+ });
313
+ }
314
+ // Cohesion = fraction of edges that stay internal
315
+ if (totalEdges === 0)
316
+ return 1.0;
317
+ return Math.min(1.0, internalEdges / totalEdges);
318
+ };
319
+ //# sourceMappingURL=community-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"community-processor.js","sourceRoot":"","sources":["../../../src/core/analysis/community-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Process Detection Processor
3
+ *
4
+ * Detects execution flows (Processes) in the code graph by:
5
+ * 1. Finding entry points (functions with no internal callers)
6
+ * 2. Tracing forward via CALLS edges (BFS)
7
+ * 3. Grouping and deduplicating similar paths
8
+ * 4. Labeling with heuristic names
9
+ *
10
+ * Processes help agents understand how features work through the codebase.
11
+ */
12
+ import { KnowledgeGraph } from '../graph/types.js';
13
+ import { CommunityMembership } from './community-processor.js';
14
+ export interface ProcessDetectionConfig {
15
+ maxTraceDepth: number;
16
+ maxBranching: number;
17
+ maxProcesses: number;
18
+ minSteps: number;
19
+ }
20
+ export interface ProcessNode {
21
+ id: string;
22
+ label: string;
23
+ heuristicLabel: string;
24
+ processType: 'intra_community' | 'cross_community';
25
+ stepCount: number;
26
+ communities: string[];
27
+ entryPointId: string;
28
+ terminalId: string;
29
+ trace: string[];
30
+ }
31
+ export interface ProcessStep {
32
+ nodeId: string;
33
+ processId: string;
34
+ step: number;
35
+ }
36
+ export interface ProcessDetectionResult {
37
+ processes: ProcessNode[];
38
+ steps: ProcessStep[];
39
+ stats: {
40
+ totalProcesses: number;
41
+ crossCommunityCount: number;
42
+ avgStepCount: number;
43
+ entryPointsFound: number;
44
+ };
45
+ }
46
+ /**
47
+ * Detect processes (execution flows) in the knowledge graph
48
+ *
49
+ * This runs AFTER community detection, using CALLS edges to trace flows.
50
+ */
51
+ export declare const processProcesses: (knowledgeGraph: KnowledgeGraph, memberships: CommunityMembership[], onProgress?: (message: string, progress: number) => void, config?: Partial<ProcessDetectionConfig>) => Promise<ProcessDetectionResult>;