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,34 @@
1
+ export function detectDelta(store, changedFiles) {
2
+ const changedSet = new Set(changedFiles);
3
+ const affectedModules = new Set();
4
+ const affectedContracts = new Set();
5
+ const affectedFlows = new Set();
6
+ // 1. Find affected modules: any module whose files[] overlaps with changedFiles
7
+ for (const id of store.listModules()) {
8
+ const mod = store.readModule(id);
9
+ if (mod.files.some(f => changedSet.has(f))) {
10
+ affectedModules.add(id);
11
+ }
12
+ }
13
+ // 2. Find affected contracts: provider or consumer is an affected module
14
+ for (const id of store.listContracts()) {
15
+ const contract = store.readContract(id);
16
+ if (affectedModules.has(contract.provider) || affectedModules.has(contract.consumer)) {
17
+ affectedContracts.add(id);
18
+ }
19
+ }
20
+ // 3. Find affected flows: any step's module is an affected module
21
+ for (const id of store.listFlows()) {
22
+ const flow = store.readFlow(id);
23
+ if (flow.steps?.some(s => affectedModules.has(s.module))) {
24
+ affectedFlows.add(id);
25
+ }
26
+ }
27
+ return {
28
+ changedFiles,
29
+ affectedModules: [...affectedModules].sort(),
30
+ affectedContracts: [...affectedContracts].sort(),
31
+ affectedFlows: [...affectedFlows].sort(),
32
+ };
33
+ }
34
+ //# sourceMappingURL=delta-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta-detector.js","sourceRoot":"","sources":["../../src/compiler/delta-detector.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,WAAW,CAAC,KAAgB,EAAE,YAAsB;IAClE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAExC,gFAAgF;IAChF,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrF,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACzD,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO;QACL,YAAY;QACZ,eAAe,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,IAAI,EAAE;QAC5C,iBAAiB,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,EAAE;QAChD,aAAa,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,EAAE;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { GraphNode, ProcessData } from '../core/export/json-exporter.js';
2
+ import type { ModuleNode, FlowNode } from '../store/schema.js';
3
+ /**
4
+ * Compile ProcessData[] (from BFS detection) into FlowNode[] records.
5
+ *
6
+ * Algorithm:
7
+ * 1. Build nodeId→moduleId map: for each ModuleNode, expand its files set;
8
+ * for each GraphNode, find which module owns its filePath.
9
+ * 2. Build nodeId→name map from GraphNode properties.
10
+ * 3. Map each ProcessData → FlowNode:
11
+ * - id: process ID as-is
12
+ * - type: 'flow'
13
+ * - trigger: entryPointId resolved to function name (or "unknown")
14
+ * - steps: sorted by step number, each resolved to { module, function }
15
+ * - struct_hash: over { id, trigger, steps: [{module, function}] }
16
+ * 4. Return FlowNode[] sorted alphabetically by id.
17
+ */
18
+ export declare function compileFlows(processes: ProcessData[], nodes: GraphNode[], modules: ModuleNode[]): FlowNode[];
@@ -0,0 +1,69 @@
1
+ import { structHash } from '../lib/hash.js';
2
+ /**
3
+ * Compile ProcessData[] (from BFS detection) into FlowNode[] records.
4
+ *
5
+ * Algorithm:
6
+ * 1. Build nodeId→moduleId map: for each ModuleNode, expand its files set;
7
+ * for each GraphNode, find which module owns its filePath.
8
+ * 2. Build nodeId→name map from GraphNode properties.
9
+ * 3. Map each ProcessData → FlowNode:
10
+ * - id: process ID as-is
11
+ * - type: 'flow'
12
+ * - trigger: entryPointId resolved to function name (or "unknown")
13
+ * - steps: sorted by step number, each resolved to { module, function }
14
+ * - struct_hash: over { id, trigger, steps: [{module, function}] }
15
+ * 4. Return FlowNode[] sorted alphabetically by id.
16
+ */
17
+ export function compileFlows(processes, nodes, modules) {
18
+ // Step 1: build nodeId → moduleId map via ModuleNode file sets
19
+ const fileToModule = new Map();
20
+ for (const mod of modules) {
21
+ for (const file of mod.files) {
22
+ fileToModule.set(file, mod.id);
23
+ }
24
+ }
25
+ const nodeToModule = new Map();
26
+ for (const node of nodes) {
27
+ const filePath = node.properties.filePath;
28
+ if (filePath) {
29
+ const modId = fileToModule.get(filePath);
30
+ if (modId !== undefined) {
31
+ nodeToModule.set(node.id, modId);
32
+ }
33
+ }
34
+ }
35
+ // Step 2: build nodeId → function name map
36
+ const nodeToName = new Map();
37
+ for (const node of nodes) {
38
+ const name = node.properties.name;
39
+ if (name !== undefined) {
40
+ nodeToName.set(node.id, name);
41
+ }
42
+ }
43
+ // Step 3: map each ProcessData → FlowNode
44
+ const flows = processes.map((proc) => {
45
+ const trigger = nodeToName.get(proc.entryPointId) ?? 'unknown';
46
+ const steps = [...proc.steps]
47
+ .sort((a, b) => a.step - b.step)
48
+ .map((s) => ({
49
+ module: nodeToModule.get(s.nodeId) ?? 'unknown',
50
+ function: nodeToName.get(s.nodeId) ?? 'unknown',
51
+ }));
52
+ const hash = structHash({
53
+ id: proc.id,
54
+ trigger,
55
+ steps: steps.map((s) => ({ module: s.module, function: s.function })),
56
+ });
57
+ return {
58
+ id: proc.id,
59
+ type: 'flow',
60
+ trigger,
61
+ steps,
62
+ struct_hash: hash,
63
+ };
64
+ });
65
+ // Step 4: sort alphabetically by id
66
+ flows.sort((a, b) => a.id.localeCompare(b.id));
67
+ return flows;
68
+ }
69
+ //# sourceMappingURL=flow-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-compiler.js","sourceRoot":"","sources":["../../src/compiler/flow-compiler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAwB,EACxB,KAAkB,EAClB,OAAqB;IAErB,+DAA+D;IAC/D,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7B,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAA8B,CAAC;QAChE,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAA0B,CAAC;QACxD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,KAAK,GAAe,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;QAE/D,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;aAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,SAAS;YAC/C,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,SAAS;SAChD,CAAC,CAAC,CAAC;QAEN,MAAM,IAAI,GAAG,UAAU,CAAC;YACtB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO;YACP,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;SACtE,CAAC,CAAC;QAEH,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,MAAe;YACrB,OAAO;YACP,KAAK;YACL,WAAW,EAAE,IAAI;SACC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,oCAAoC;IACpC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/C,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ModuleNode } from '../store/schema.js';
2
+ import type { GraphNode, GraphEdge, CommunityData } from '../core/export/json-exporter.js';
3
+ /**
4
+ * Compile GraphNode + GraphEdge data into ModuleNode records.
5
+ *
6
+ * Algorithm:
7
+ * 1. Group nodes by top-level directory of their filePath.
8
+ * 2. For large modules (> COMMUNITY_SPLIT_THRESHOLD files), use community
9
+ * data to split into sub-modules with labels derived from member names.
10
+ * 3. Build deduplicated file sets per module.
11
+ * 4. Map each node ID → module ID.
12
+ * 5. Count external in-calls per node (caller module ≠ callee module).
13
+ * 6. Canonical entry = most externally called exported function in module.
14
+ * 7. Build depends_on / depended_by from cross-module CALLS edges.
15
+ * 8. Compute struct_hash from { id, canonical_entry, files }.
16
+ * 9. Sort modules alphabetically.
17
+ */
18
+ export declare function compileModules(nodes: GraphNode[], edges: GraphEdge[], communities: CommunityData[]): ModuleNode[];
@@ -0,0 +1,420 @@
1
+ import { structHash } from '../lib/hash.js';
2
+ import { splitCompoundName, moduleIdForFile } from '../lib/naming.js';
3
+ /** Minimum files in a directory module before community splitting kicks in. */
4
+ const COMMUNITY_SPLIT_THRESHOLD = 50;
5
+ /** Sub-modules below this file count get merged into their closest neighbor. */
6
+ const MIN_SUBMODULE_FILES = 5;
7
+ /** Sub-modules above this count get directory-aware refinement. */
8
+ const DIRECTORY_REFINE_THRESHOLD = 100;
9
+ /**
10
+ * Generate a sub-module label from member function/symbol names.
11
+ * Finds the most common non-noise word root across member names.
12
+ */
13
+ function generateSubModuleLabel(memberNodeIds, nodeById) {
14
+ const NOISE = new Set([
15
+ 'get', 'set', 'new', 'create', 'handle', 'error', 'config', 'init',
16
+ 'type', 'data', 'info', 'item', 'list', 'map', 'test', 'mock', 'base',
17
+ 'default', 'internal', 'util', 'helper', 'manager', 'service', 'handler',
18
+ 'processor', 'builder', 'factory', 'impl', 'abstract', 'interface',
19
+ 'command', 'func', 'run', 'load', 'write', 'read', 'parse', 'string',
20
+ 'options', 'args', 'result', 'value', 'node', 'file', 'path', 'name',
21
+ ]);
22
+ const wordCounts = new Map();
23
+ for (const nodeId of memberNodeIds) {
24
+ const node = nodeById.get(nodeId);
25
+ if (!node)
26
+ continue;
27
+ const name = node.properties.name;
28
+ if (!name)
29
+ continue;
30
+ const words = splitCompoundName(name);
31
+ // Count each word once per symbol (not per occurrence)
32
+ const seen = new Set();
33
+ for (const w of words) {
34
+ if (NOISE.has(w) || seen.has(w))
35
+ continue;
36
+ seen.add(w);
37
+ wordCounts.set(w, (wordCounts.get(w) ?? 0) + 1);
38
+ }
39
+ }
40
+ // Pick word with highest count; tie-break by length desc (longer = more meaningful)
41
+ let best = '';
42
+ let bestCount = 0;
43
+ for (const [word, count] of wordCounts) {
44
+ if (count > bestCount ||
45
+ (count === bestCount && word.length > best.length) ||
46
+ (count === bestCount && word.length === best.length && word < best)) {
47
+ bestCount = count;
48
+ best = word;
49
+ }
50
+ }
51
+ return best || 'misc';
52
+ }
53
+ /**
54
+ * Compile GraphNode + GraphEdge data into ModuleNode records.
55
+ *
56
+ * Algorithm:
57
+ * 1. Group nodes by top-level directory of their filePath.
58
+ * 2. For large modules (> COMMUNITY_SPLIT_THRESHOLD files), use community
59
+ * data to split into sub-modules with labels derived from member names.
60
+ * 3. Build deduplicated file sets per module.
61
+ * 4. Map each node ID → module ID.
62
+ * 5. Count external in-calls per node (caller module ≠ callee module).
63
+ * 6. Canonical entry = most externally called exported function in module.
64
+ * 7. Build depends_on / depended_by from cross-module CALLS edges.
65
+ * 8. Compute struct_hash from { id, canonical_entry, files }.
66
+ * 9. Sort modules alphabetically.
67
+ */
68
+ export function compileModules(nodes, edges, communities) {
69
+ // Build a lookup of node properties for quick access
70
+ const nodeById = new Map();
71
+ for (const node of nodes) {
72
+ nodeById.set(node.id, node);
73
+ }
74
+ // Step 1: group nodes by top-level directory
75
+ const dirFiles = new Map();
76
+ const dirNodeIds = new Map();
77
+ for (const node of nodes) {
78
+ const filePath = node.properties.filePath;
79
+ if (!filePath)
80
+ continue;
81
+ const dirId = moduleIdForFile(filePath);
82
+ if (!dirFiles.has(dirId)) {
83
+ dirFiles.set(dirId, new Set());
84
+ dirNodeIds.set(dirId, new Set());
85
+ }
86
+ dirFiles.get(dirId).add(filePath);
87
+ dirNodeIds.get(dirId).add(node.id);
88
+ }
89
+ // Step 2: community-based splitting for large modules
90
+ // Build community membership lookup: nodeId → communityId
91
+ const nodeToCommunity = new Map();
92
+ for (const comm of communities) {
93
+ for (const memberId of comm.members) {
94
+ nodeToCommunity.set(memberId, comm.id);
95
+ }
96
+ }
97
+ // Final module maps (after potential splitting)
98
+ const moduleFiles = new Map();
99
+ const moduleNodeIds = new Map();
100
+ for (const [dirId, fileSet] of dirFiles) {
101
+ const nodeIds = dirNodeIds.get(dirId);
102
+ if (fileSet.size > COMMUNITY_SPLIT_THRESHOLD && communities.length > 0) {
103
+ // Phase A: label each community, then MERGE same-label communities
104
+ const communityGroups = new Map(); // commId → nodeIds
105
+ for (const nodeId of nodeIds) {
106
+ const commId = nodeToCommunity.get(nodeId);
107
+ if (commId) {
108
+ if (!communityGroups.has(commId))
109
+ communityGroups.set(commId, new Set());
110
+ communityGroups.get(commId).add(nodeId);
111
+ }
112
+ }
113
+ // Compute label for each community, then merge by label
114
+ const labelToNodes = new Map();
115
+ for (const [, members] of communityGroups) {
116
+ if (members.size === 0)
117
+ continue;
118
+ const label = generateSubModuleLabel([...members], nodeById);
119
+ if (!labelToNodes.has(label))
120
+ labelToNodes.set(label, new Set());
121
+ const merged = labelToNodes.get(label);
122
+ for (const n of members)
123
+ merged.add(n);
124
+ }
125
+ // Phase B: FILE-LEVEL assignment — assign each file to the label
126
+ // that has the most community-member nodes in that file
127
+ const fileToNodeIds = new Map();
128
+ for (const nodeId of nodeIds) {
129
+ const fp = nodeById.get(nodeId)?.properties.filePath;
130
+ if (!fp)
131
+ continue;
132
+ if (!fileToNodeIds.has(fp))
133
+ fileToNodeIds.set(fp, []);
134
+ fileToNodeIds.get(fp).push(nodeId);
135
+ }
136
+ // Build node→label lookup for community-assigned nodes
137
+ const nodeToLabel = new Map();
138
+ for (const [label, nodes2] of labelToNodes) {
139
+ for (const nid of nodes2)
140
+ nodeToLabel.set(nid, label);
141
+ }
142
+ // For each file, count which label has the most members in it
143
+ const fileToLabel = new Map();
144
+ for (const [fp, fNodes] of fileToNodeIds) {
145
+ const labelCounts = new Map();
146
+ for (const nid of fNodes) {
147
+ const label = nodeToLabel.get(nid);
148
+ if (label)
149
+ labelCounts.set(label, (labelCounts.get(label) ?? 0) + 1);
150
+ }
151
+ if (labelCounts.size > 0) {
152
+ let best = '';
153
+ let bestCount = 0;
154
+ for (const [label, count] of labelCounts) {
155
+ if (count > bestCount || (count === bestCount && label < best)) {
156
+ bestCount = count;
157
+ best = label;
158
+ }
159
+ }
160
+ fileToLabel.set(fp, best);
161
+ }
162
+ // else: file has no community members, will be assigned in Phase C
163
+ }
164
+ // Phase C: assign remaining files by co-location — if a file has the
165
+ // same basename prefix (e.g. control_state.go ↔ control_ops.go) as
166
+ // assigned files, group them together. Otherwise use edge proximity.
167
+ const unassignedFiles = [...fileToNodeIds.keys()].filter((fp) => !fileToLabel.has(fp));
168
+ // Build file basename → label mapping from assigned files
169
+ const prefixToLabel = new Map();
170
+ for (const [fp, label] of fileToLabel) {
171
+ const base = fp.split('/').pop().replace(/\.[^.]+$/, '');
172
+ const prefix = base.replace(/_test$/, '').split('_')[0];
173
+ if (!prefixToLabel.has(prefix))
174
+ prefixToLabel.set(prefix, new Map());
175
+ const counts = prefixToLabel.get(prefix);
176
+ counts.set(label, (counts.get(label) ?? 0) + 1);
177
+ }
178
+ for (const fp of unassignedFiles) {
179
+ const base = fp.split('/').pop().replace(/\.[^.]+$/, '');
180
+ const prefix = base.replace(/_test$/, '').split('_')[0];
181
+ // Try prefix match
182
+ const counts = prefixToLabel.get(prefix);
183
+ if (counts && counts.size > 0) {
184
+ let best = '';
185
+ let bestCount = 0;
186
+ for (const [label, count] of counts) {
187
+ if (count > bestCount) {
188
+ bestCount = count;
189
+ best = label;
190
+ }
191
+ }
192
+ fileToLabel.set(fp, best);
193
+ continue;
194
+ }
195
+ // Last resort: use the file's own nodes' word roots as a label
196
+ const fNodes = fileToNodeIds.get(fp) ?? [];
197
+ const selfLabel = generateSubModuleLabel(fNodes, nodeById);
198
+ fileToLabel.set(fp, selfLabel);
199
+ }
200
+ // Phase D: assemble sub-modules from file assignments
201
+ const labelModFiles = new Map();
202
+ const labelModNodes = new Map();
203
+ for (const [fp, label] of fileToLabel) {
204
+ if (!labelModFiles.has(label)) {
205
+ labelModFiles.set(label, new Set());
206
+ labelModNodes.set(label, new Set());
207
+ }
208
+ labelModFiles.get(label).add(fp);
209
+ for (const nid of (fileToNodeIds.get(fp) ?? [])) {
210
+ labelModNodes.get(label).add(nid);
211
+ }
212
+ }
213
+ // Phase E: merge small sub-modules into their closest large neighbor
214
+ // Find which labels are "small" (below threshold)
215
+ const smallLabels = new Set();
216
+ const largeLabels = new Set();
217
+ for (const [label, files] of labelModFiles) {
218
+ if (files.size < MIN_SUBMODULE_FILES)
219
+ smallLabels.add(label);
220
+ else
221
+ largeLabels.add(label);
222
+ }
223
+ if (smallLabels.size > 0 && largeLabels.size > 0) {
224
+ // Single-pass edge bucketing: build nodeId → label map, then one
225
+ // pass over edges to accumulate mergeScores[smallLabel][largeLabel].
226
+ const allNodeToLabel = new Map();
227
+ for (const [label, nids] of labelModNodes) {
228
+ for (const nid of nids)
229
+ allNodeToLabel.set(nid, label);
230
+ }
231
+ const mergeScores = new Map();
232
+ for (const sl of smallLabels)
233
+ mergeScores.set(sl, new Map());
234
+ for (const edge of edges) {
235
+ if (edge.type !== 'CALLS')
236
+ continue;
237
+ const srcLabel = allNodeToLabel.get(edge.sourceId);
238
+ const tgtLabel = allNodeToLabel.get(edge.targetId);
239
+ if (!srcLabel || !tgtLabel || srcLabel === tgtLabel)
240
+ continue;
241
+ // One must be small, the other large
242
+ if (smallLabels.has(srcLabel) && largeLabels.has(tgtLabel)) {
243
+ const counts = mergeScores.get(srcLabel);
244
+ counts.set(tgtLabel, (counts.get(tgtLabel) ?? 0) + 1);
245
+ }
246
+ else if (smallLabels.has(tgtLabel) && largeLabels.has(srcLabel)) {
247
+ const counts = mergeScores.get(tgtLabel);
248
+ counts.set(srcLabel, (counts.get(srcLabel) ?? 0) + 1);
249
+ }
250
+ }
251
+ for (const smallLabel of smallLabels) {
252
+ const edgeCounts = mergeScores.get(smallLabel);
253
+ // Pick the most connected large label, or the largest by file count
254
+ let bestTarget = '';
255
+ let bestScore = 0;
256
+ for (const [label, count] of edgeCounts) {
257
+ if (count > bestScore) {
258
+ bestScore = count;
259
+ bestTarget = label;
260
+ }
261
+ }
262
+ if (!bestTarget) {
263
+ // Fallback: merge into the largest sub-module
264
+ let maxFiles = 0;
265
+ for (const ll of largeLabels) {
266
+ const size = labelModFiles.get(ll).size;
267
+ if (size > maxFiles) {
268
+ maxFiles = size;
269
+ bestTarget = ll;
270
+ }
271
+ }
272
+ }
273
+ if (bestTarget) {
274
+ // Merge small into large
275
+ const smallNodes = labelModNodes.get(smallLabel);
276
+ const targetFiles = labelModFiles.get(bestTarget);
277
+ const targetNodes = labelModNodes.get(bestTarget);
278
+ for (const f of labelModFiles.get(smallLabel))
279
+ targetFiles.add(f);
280
+ for (const n of smallNodes)
281
+ targetNodes.add(n);
282
+ labelModFiles.delete(smallLabel);
283
+ labelModNodes.delete(smallLabel);
284
+ }
285
+ }
286
+ }
287
+ // Phase F: directory-aware refinement for still-large sub-modules
288
+ for (const [label, files] of [...labelModFiles.entries()]) {
289
+ if (files.size <= DIRECTORY_REFINE_THRESHOLD)
290
+ continue;
291
+ // Check if files span multiple subdirectories
292
+ const subdirCounts = new Map();
293
+ for (const fp of files) {
294
+ const parts = fp.split('/');
295
+ const subdir = parts.length >= 3 ? parts[1] : '_flat';
296
+ if (!subdirCounts.has(subdir))
297
+ subdirCounts.set(subdir, new Set());
298
+ subdirCounts.get(subdir).add(fp);
299
+ }
300
+ // Only refine if there are multiple meaningful subdirs
301
+ if (subdirCounts.size < 2)
302
+ continue;
303
+ // Split: each subdir becomes its own sub-module
304
+ const nodes2 = labelModNodes.get(label);
305
+ labelModFiles.delete(label);
306
+ labelModNodes.delete(label);
307
+ for (const [subdir, subdirFiles] of subdirCounts) {
308
+ const refinedLabel = subdir === '_flat' ? label : subdir;
309
+ const refinedNodes = new Set();
310
+ for (const nid of nodes2) {
311
+ const fp = nodeById.get(nid)?.properties.filePath;
312
+ if (fp && subdirFiles.has(fp))
313
+ refinedNodes.add(nid);
314
+ }
315
+ if (!labelModFiles.has(refinedLabel)) {
316
+ labelModFiles.set(refinedLabel, new Set());
317
+ labelModNodes.set(refinedLabel, new Set());
318
+ }
319
+ const existing = labelModFiles.get(refinedLabel);
320
+ const existingNodes = labelModNodes.get(refinedLabel);
321
+ for (const f of subdirFiles)
322
+ existing.add(f);
323
+ for (const n of refinedNodes)
324
+ existingNodes.add(n);
325
+ }
326
+ }
327
+ for (const [label, files] of labelModFiles) {
328
+ if (files.size === 0)
329
+ continue;
330
+ const subModId = `${dirId}/${label}`;
331
+ moduleFiles.set(subModId, files);
332
+ moduleNodeIds.set(subModId, labelModNodes.get(label));
333
+ }
334
+ }
335
+ else {
336
+ // Small module — keep as-is
337
+ moduleFiles.set(dirId, fileSet);
338
+ moduleNodeIds.set(dirId, nodeIds);
339
+ }
340
+ }
341
+ // Step 3: map node ID → module ID for fast lookup
342
+ const nodeToModule = new Map();
343
+ for (const [modId, nodeIds] of moduleNodeIds) {
344
+ for (const nodeId of nodeIds) {
345
+ nodeToModule.set(nodeId, modId);
346
+ }
347
+ }
348
+ // Step 4: count external in-calls per node (CALLS edges only)
349
+ const externalInCallCount = new Map();
350
+ const dependsOnSet = new Map();
351
+ const dependedBySet = new Map();
352
+ for (const modId of moduleFiles.keys()) {
353
+ dependsOnSet.set(modId, new Set());
354
+ dependedBySet.set(modId, new Set());
355
+ }
356
+ for (const edge of edges) {
357
+ if (edge.type !== 'CALLS')
358
+ continue;
359
+ const srcMod = nodeToModule.get(edge.sourceId);
360
+ const tgtMod = nodeToModule.get(edge.targetId);
361
+ if (!srcMod || !tgtMod)
362
+ continue;
363
+ if (srcMod !== tgtMod) {
364
+ externalInCallCount.set(edge.targetId, (externalInCallCount.get(edge.targetId) ?? 0) + 1);
365
+ dependsOnSet.get(srcMod).add(tgtMod);
366
+ dependedBySet.get(tgtMod).add(srcMod);
367
+ }
368
+ }
369
+ // Step 5: find canonical_entry per module
370
+ const moduleCanonicalEntry = new Map();
371
+ for (const [modId, nodeIds] of moduleNodeIds) {
372
+ let bestNodeId;
373
+ let bestCount = -1;
374
+ for (const nodeId of nodeIds) {
375
+ const node = nodeById.get(nodeId);
376
+ const isExported = node.properties.isExported;
377
+ if (!isExported)
378
+ continue;
379
+ const count = externalInCallCount.get(nodeId) ?? 0;
380
+ if (count > bestCount) {
381
+ bestCount = count;
382
+ bestNodeId = nodeId;
383
+ }
384
+ }
385
+ if (bestNodeId) {
386
+ const node = nodeById.get(bestNodeId);
387
+ moduleCanonicalEntry.set(modId, node.properties.name);
388
+ }
389
+ else {
390
+ const exportedNodes = [...nodeIds]
391
+ .map((id) => nodeById.get(id))
392
+ .filter((n) => n.properties.isExported)
393
+ .sort((a, b) => String(a.properties.name).localeCompare(String(b.properties.name)));
394
+ if (exportedNodes.length > 0) {
395
+ moduleCanonicalEntry.set(modId, exportedNodes[0].properties.name);
396
+ }
397
+ else {
398
+ moduleCanonicalEntry.set(modId, '');
399
+ }
400
+ }
401
+ }
402
+ // Step 6: assemble ModuleNode records and sort alphabetically
403
+ const moduleIds = [...moduleFiles.keys()].sort();
404
+ return moduleIds.map((modId) => {
405
+ const files = [...moduleFiles.get(modId)].sort();
406
+ const canonical_entry = moduleCanonicalEntry.get(modId) ?? '';
407
+ const depends_on = [...(dependsOnSet.get(modId) ?? [])].sort();
408
+ const depended_by = [...(dependedBySet.get(modId) ?? [])].sort();
409
+ const hash = structHash({ id: modId, canonical_entry, files });
410
+ return {
411
+ id: modId,
412
+ canonical_entry,
413
+ files,
414
+ depends_on,
415
+ depended_by,
416
+ struct_hash: hash,
417
+ };
418
+ });
419
+ }
420
+ //# sourceMappingURL=module-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-compiler.js","sourceRoot":"","sources":["../../src/compiler/module-compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { CotxStore } from '../store/store.js';
2
+ export interface StaleResult {
3
+ staleEnrichments: Array<{
4
+ nodeId: string;
5
+ layer: string;
6
+ source_hash: string;
7
+ struct_hash: string;
8
+ }>;
9
+ staleAnnotations: Array<{
10
+ nodeId: string;
11
+ layer: string;
12
+ annotationIndex: number;
13
+ reason: string;
14
+ }>;
15
+ summary: {
16
+ totalStale: number;
17
+ enrichments: number;
18
+ annotations: number;
19
+ };
20
+ }
21
+ export declare function detectStale(store: CotxStore): StaleResult;
22
+ export declare function markStaleAnnotations(store: CotxStore, changedNodeIds: Set<string>, reason: string): number;