codesift-mcp 0.2.18 → 0.4.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 (461) hide show
  1. package/README.md +143 -20
  2. package/dist/cache/hono-cache.d.ts +50 -0
  3. package/dist/cache/hono-cache.d.ts.map +1 -0
  4. package/dist/cache/hono-cache.js +132 -0
  5. package/dist/cache/hono-cache.js.map +1 -0
  6. package/dist/cli/setup.d.ts.map +1 -1
  7. package/dist/cli/setup.js +17 -2
  8. package/dist/cli/setup.js.map +1 -1
  9. package/dist/formatters-shortening.d.ts +13 -0
  10. package/dist/formatters-shortening.d.ts.map +1 -1
  11. package/dist/formatters-shortening.js +131 -0
  12. package/dist/formatters-shortening.js.map +1 -1
  13. package/dist/formatters.d.ts +38 -0
  14. package/dist/formatters.d.ts.map +1 -1
  15. package/dist/formatters.js +498 -0
  16. package/dist/formatters.js.map +1 -1
  17. package/dist/instructions.d.ts +1 -1
  18. package/dist/instructions.d.ts.map +1 -1
  19. package/dist/instructions.js +27 -26
  20. package/dist/instructions.js.map +1 -1
  21. package/dist/lsp/lsp-servers.d.ts.map +1 -1
  22. package/dist/lsp/lsp-servers.js +5 -0
  23. package/dist/lsp/lsp-servers.js.map +1 -1
  24. package/dist/lsp/lsp-tools.d.ts.map +1 -1
  25. package/dist/lsp/lsp-tools.js +1 -0
  26. package/dist/lsp/lsp-tools.js.map +1 -1
  27. package/dist/parser/astro-template.d.ts +47 -0
  28. package/dist/parser/astro-template.d.ts.map +1 -0
  29. package/dist/parser/astro-template.js +171 -0
  30. package/dist/parser/astro-template.js.map +1 -0
  31. package/dist/parser/extractors/_shared.d.ts +4 -0
  32. package/dist/parser/extractors/_shared.d.ts.map +1 -1
  33. package/dist/parser/extractors/_shared.js +8 -0
  34. package/dist/parser/extractors/_shared.js.map +1 -1
  35. package/dist/parser/extractors/astro.d.ts +4 -5
  36. package/dist/parser/extractors/astro.d.ts.map +1 -1
  37. package/dist/parser/extractors/astro.js +102 -26
  38. package/dist/parser/extractors/astro.js.map +1 -1
  39. package/dist/parser/extractors/gradle-kts.d.ts +4 -0
  40. package/dist/parser/extractors/gradle-kts.d.ts.map +1 -0
  41. package/dist/parser/extractors/gradle-kts.js +246 -0
  42. package/dist/parser/extractors/gradle-kts.js.map +1 -0
  43. package/dist/parser/extractors/hono-inline-analyzer.d.ts +34 -0
  44. package/dist/parser/extractors/hono-inline-analyzer.d.ts.map +1 -0
  45. package/dist/parser/extractors/hono-inline-analyzer.js +465 -0
  46. package/dist/parser/extractors/hono-inline-analyzer.js.map +1 -0
  47. package/dist/parser/extractors/hono-model.d.ts +196 -0
  48. package/dist/parser/extractors/hono-model.d.ts.map +1 -0
  49. package/dist/parser/extractors/hono-model.js +10 -0
  50. package/dist/parser/extractors/hono-model.js.map +1 -0
  51. package/dist/parser/extractors/hono.d.ts +118 -0
  52. package/dist/parser/extractors/hono.d.ts.map +1 -0
  53. package/dist/parser/extractors/hono.js +1527 -0
  54. package/dist/parser/extractors/hono.js.map +1 -0
  55. package/dist/parser/extractors/kotlin.d.ts +4 -0
  56. package/dist/parser/extractors/kotlin.d.ts.map +1 -0
  57. package/dist/parser/extractors/kotlin.js +521 -0
  58. package/dist/parser/extractors/kotlin.js.map +1 -0
  59. package/dist/parser/extractors/php.d.ts +22 -0
  60. package/dist/parser/extractors/php.d.ts.map +1 -0
  61. package/dist/parser/extractors/php.js +326 -0
  62. package/dist/parser/extractors/php.js.map +1 -0
  63. package/dist/parser/extractors/python.d.ts.map +1 -1
  64. package/dist/parser/extractors/python.js +234 -11
  65. package/dist/parser/extractors/python.js.map +1 -1
  66. package/dist/parser/extractors/sql.d.ts +33 -0
  67. package/dist/parser/extractors/sql.d.ts.map +1 -0
  68. package/dist/parser/extractors/sql.js +506 -0
  69. package/dist/parser/extractors/sql.js.map +1 -0
  70. package/dist/parser/extractors/typescript.d.ts.map +1 -1
  71. package/dist/parser/extractors/typescript.js +166 -3
  72. package/dist/parser/extractors/typescript.js.map +1 -1
  73. package/dist/parser/languages/tree-sitter-javascript.wasm +0 -0
  74. package/dist/parser/languages/tree-sitter-kotlin.wasm +0 -0
  75. package/dist/parser/languages/tree-sitter-php.wasm +0 -0
  76. package/dist/parser/languages/tree-sitter-php_only.wasm +0 -0
  77. package/dist/parser/languages/tree-sitter-python.wasm +0 -0
  78. package/dist/parser/parser-manager.d.ts +32 -0
  79. package/dist/parser/parser-manager.d.ts.map +1 -1
  80. package/dist/parser/parser-manager.js +82 -3
  81. package/dist/parser/parser-manager.js.map +1 -1
  82. package/dist/parser/symbol-extractor.d.ts.map +1 -1
  83. package/dist/parser/symbol-extractor.js +16 -0
  84. package/dist/parser/symbol-extractor.js.map +1 -1
  85. package/dist/register-tools.d.ts +37 -1
  86. package/dist/register-tools.d.ts.map +1 -1
  87. package/dist/register-tools.js +2657 -191
  88. package/dist/register-tools.js.map +1 -1
  89. package/dist/search/reranker.js +1 -1
  90. package/dist/search/reranker.js.map +1 -1
  91. package/dist/server-helpers.d.ts.map +1 -1
  92. package/dist/server-helpers.js +11 -0
  93. package/dist/server-helpers.js.map +1 -1
  94. package/dist/server.js +28 -1
  95. package/dist/server.js.map +1 -1
  96. package/dist/storage/index-store.d.ts +15 -1
  97. package/dist/storage/index-store.d.ts.map +1 -1
  98. package/dist/storage/index-store.js +27 -1
  99. package/dist/storage/index-store.js.map +1 -1
  100. package/dist/storage/session-state.d.ts +1 -1
  101. package/dist/storage/session-state.d.ts.map +1 -1
  102. package/dist/storage/session-state.js +6 -4
  103. package/dist/storage/session-state.js.map +1 -1
  104. package/dist/tools/agent-config-tools.d.ts +24 -0
  105. package/dist/tools/agent-config-tools.d.ts.map +1 -0
  106. package/dist/tools/agent-config-tools.js +119 -0
  107. package/dist/tools/agent-config-tools.js.map +1 -0
  108. package/dist/tools/architecture-tools.d.ts +23 -0
  109. package/dist/tools/architecture-tools.d.ts.map +1 -0
  110. package/dist/tools/architecture-tools.js +140 -0
  111. package/dist/tools/architecture-tools.js.map +1 -0
  112. package/dist/tools/astro-config.d.ts +33 -0
  113. package/dist/tools/astro-config.d.ts.map +1 -0
  114. package/dist/tools/astro-config.js +260 -0
  115. package/dist/tools/astro-config.js.map +1 -0
  116. package/dist/tools/astro-islands.d.ts +61 -0
  117. package/dist/tools/astro-islands.d.ts.map +1 -0
  118. package/dist/tools/astro-islands.js +240 -0
  119. package/dist/tools/astro-islands.js.map +1 -0
  120. package/dist/tools/astro-routes.d.ts +49 -0
  121. package/dist/tools/astro-routes.d.ts.map +1 -0
  122. package/dist/tools/astro-routes.js +119 -0
  123. package/dist/tools/astro-routes.js.map +1 -0
  124. package/dist/tools/audit-tools.d.ts +38 -0
  125. package/dist/tools/audit-tools.d.ts.map +1 -0
  126. package/dist/tools/audit-tools.js +248 -0
  127. package/dist/tools/audit-tools.js.map +1 -0
  128. package/dist/tools/celery-tools.d.ts +38 -0
  129. package/dist/tools/celery-tools.d.ts.map +1 -0
  130. package/dist/tools/celery-tools.js +154 -0
  131. package/dist/tools/celery-tools.js.map +1 -0
  132. package/dist/tools/clone-tools.js +1 -1
  133. package/dist/tools/clone-tools.js.map +1 -1
  134. package/dist/tools/complexity-tools.d.ts +4 -0
  135. package/dist/tools/complexity-tools.d.ts.map +1 -1
  136. package/dist/tools/complexity-tools.js +78 -4
  137. package/dist/tools/complexity-tools.js.map +1 -1
  138. package/dist/tools/compose-tools.d.ts +60 -0
  139. package/dist/tools/compose-tools.d.ts.map +1 -0
  140. package/dist/tools/compose-tools.js +203 -0
  141. package/dist/tools/compose-tools.js.map +1 -0
  142. package/dist/tools/coupling-tools.d.ts +50 -0
  143. package/dist/tools/coupling-tools.d.ts.map +1 -0
  144. package/dist/tools/coupling-tools.js +262 -0
  145. package/dist/tools/coupling-tools.js.map +1 -0
  146. package/dist/tools/dependency-audit-tools.d.ts +65 -0
  147. package/dist/tools/dependency-audit-tools.d.ts.map +1 -0
  148. package/dist/tools/dependency-audit-tools.js +553 -0
  149. package/dist/tools/dependency-audit-tools.js.map +1 -0
  150. package/dist/tools/django-settings.d.ts +22 -0
  151. package/dist/tools/django-settings.d.ts.map +1 -0
  152. package/dist/tools/django-settings.js +301 -0
  153. package/dist/tools/django-settings.js.map +1 -0
  154. package/dist/tools/frequency-tools.js +1 -1
  155. package/dist/tools/frequency-tools.js.map +1 -1
  156. package/dist/tools/graph-tools.d.ts +8 -2
  157. package/dist/tools/graph-tools.d.ts.map +1 -1
  158. package/dist/tools/graph-tools.js +44 -3
  159. package/dist/tools/graph-tools.js.map +1 -1
  160. package/dist/tools/hilt-tools.d.ts +55 -0
  161. package/dist/tools/hilt-tools.d.ts.map +1 -0
  162. package/dist/tools/hilt-tools.js +258 -0
  163. package/dist/tools/hilt-tools.js.map +1 -0
  164. package/dist/tools/hono-analyze-app.d.ts +48 -0
  165. package/dist/tools/hono-analyze-app.d.ts.map +1 -0
  166. package/dist/tools/hono-analyze-app.js +102 -0
  167. package/dist/tools/hono-analyze-app.js.map +1 -0
  168. package/dist/tools/hono-api-contract.d.ts +22 -0
  169. package/dist/tools/hono-api-contract.d.ts.map +1 -0
  170. package/dist/tools/hono-api-contract.js +80 -0
  171. package/dist/tools/hono-api-contract.js.map +1 -0
  172. package/dist/tools/hono-conditional-middleware.d.ts +27 -0
  173. package/dist/tools/hono-conditional-middleware.d.ts.map +1 -0
  174. package/dist/tools/hono-conditional-middleware.js +62 -0
  175. package/dist/tools/hono-conditional-middleware.js.map +1 -0
  176. package/dist/tools/hono-context-flow.d.ts +24 -0
  177. package/dist/tools/hono-context-flow.d.ts.map +1 -0
  178. package/dist/tools/hono-context-flow.js +78 -0
  179. package/dist/tools/hono-context-flow.js.map +1 -0
  180. package/dist/tools/hono-dead-routes.d.ts +26 -0
  181. package/dist/tools/hono-dead-routes.d.ts.map +1 -0
  182. package/dist/tools/hono-dead-routes.js +109 -0
  183. package/dist/tools/hono-dead-routes.js.map +1 -0
  184. package/dist/tools/hono-env-regression.d.ts +29 -0
  185. package/dist/tools/hono-env-regression.d.ts.map +1 -0
  186. package/dist/tools/hono-env-regression.js +157 -0
  187. package/dist/tools/hono-env-regression.js.map +1 -0
  188. package/dist/tools/hono-inline-analyze.d.ts +31 -0
  189. package/dist/tools/hono-inline-analyze.d.ts.map +1 -0
  190. package/dist/tools/hono-inline-analyze.js +67 -0
  191. package/dist/tools/hono-inline-analyze.js.map +1 -0
  192. package/dist/tools/hono-middleware-chain.d.ts +22 -0
  193. package/dist/tools/hono-middleware-chain.d.ts.map +1 -0
  194. package/dist/tools/hono-middleware-chain.js +84 -0
  195. package/dist/tools/hono-middleware-chain.js.map +1 -0
  196. package/dist/tools/hono-modules.d.ts +22 -0
  197. package/dist/tools/hono-modules.d.ts.map +1 -0
  198. package/dist/tools/hono-modules.js +126 -0
  199. package/dist/tools/hono-modules.js.map +1 -0
  200. package/dist/tools/hono-response-types.d.ts +37 -0
  201. package/dist/tools/hono-response-types.d.ts.map +1 -0
  202. package/dist/tools/hono-response-types.js +84 -0
  203. package/dist/tools/hono-response-types.js.map +1 -0
  204. package/dist/tools/hono-rpc-types.d.ts +21 -0
  205. package/dist/tools/hono-rpc-types.d.ts.map +1 -0
  206. package/dist/tools/hono-rpc-types.js +57 -0
  207. package/dist/tools/hono-rpc-types.js.map +1 -0
  208. package/dist/tools/hono-security.d.ts +21 -0
  209. package/dist/tools/hono-security.d.ts.map +1 -0
  210. package/dist/tools/hono-security.js +98 -0
  211. package/dist/tools/hono-security.js.map +1 -0
  212. package/dist/tools/hono-visualize.d.ts +13 -0
  213. package/dist/tools/hono-visualize.d.ts.map +1 -0
  214. package/dist/tools/hono-visualize.js +72 -0
  215. package/dist/tools/hono-visualize.js.map +1 -0
  216. package/dist/tools/hotspot-tools.d.ts.map +1 -1
  217. package/dist/tools/hotspot-tools.js +9 -7
  218. package/dist/tools/hotspot-tools.js.map +1 -1
  219. package/dist/tools/index-tools.d.ts +17 -0
  220. package/dist/tools/index-tools.d.ts.map +1 -1
  221. package/dist/tools/index-tools.js +210 -10
  222. package/dist/tools/index-tools.js.map +1 -1
  223. package/dist/tools/kotlin-tools.d.ts +142 -0
  224. package/dist/tools/kotlin-tools.d.ts.map +1 -0
  225. package/dist/tools/kotlin-tools.js +572 -0
  226. package/dist/tools/kotlin-tools.js.map +1 -0
  227. package/dist/tools/legacy-hono-conventions.d.ts +14 -0
  228. package/dist/tools/legacy-hono-conventions.d.ts.map +1 -0
  229. package/dist/tools/legacy-hono-conventions.js +152 -0
  230. package/dist/tools/legacy-hono-conventions.js.map +1 -0
  231. package/dist/tools/migration-lint-tools.d.ts +26 -0
  232. package/dist/tools/migration-lint-tools.d.ts.map +1 -0
  233. package/dist/tools/migration-lint-tools.js +247 -0
  234. package/dist/tools/migration-lint-tools.js.map +1 -0
  235. package/dist/tools/model-tools.d.ts +30 -0
  236. package/dist/tools/model-tools.d.ts.map +1 -0
  237. package/dist/tools/model-tools.js +145 -0
  238. package/dist/tools/model-tools.js.map +1 -0
  239. package/dist/tools/nest-ext-tools.d.ts +92 -0
  240. package/dist/tools/nest-ext-tools.d.ts.map +1 -0
  241. package/dist/tools/nest-ext-tools.js +359 -0
  242. package/dist/tools/nest-ext-tools.js.map +1 -0
  243. package/dist/tools/nest-tools.d.ts +171 -0
  244. package/dist/tools/nest-tools.d.ts.map +1 -0
  245. package/dist/tools/nest-tools.js +1042 -0
  246. package/dist/tools/nest-tools.js.map +1 -0
  247. package/dist/tools/nextjs-api-contract-readers.d.ts +14 -0
  248. package/dist/tools/nextjs-api-contract-readers.d.ts.map +1 -0
  249. package/dist/tools/nextjs-api-contract-readers.js +204 -0
  250. package/dist/tools/nextjs-api-contract-readers.js.map +1 -0
  251. package/dist/tools/nextjs-api-contract-tools.d.ts +57 -0
  252. package/dist/tools/nextjs-api-contract-tools.d.ts.map +1 -0
  253. package/dist/tools/nextjs-api-contract-tools.js +144 -0
  254. package/dist/tools/nextjs-api-contract-tools.js.map +1 -0
  255. package/dist/tools/nextjs-boundary-tools.d.ts +39 -0
  256. package/dist/tools/nextjs-boundary-tools.d.ts.map +1 -0
  257. package/dist/tools/nextjs-boundary-tools.js +152 -0
  258. package/dist/tools/nextjs-boundary-tools.js.map +1 -0
  259. package/dist/tools/nextjs-component-tools.d.ts +121 -0
  260. package/dist/tools/nextjs-component-tools.d.ts.map +1 -0
  261. package/dist/tools/nextjs-component-tools.js +460 -0
  262. package/dist/tools/nextjs-component-tools.js.map +1 -0
  263. package/dist/tools/nextjs-data-flow-tools.d.ts +42 -0
  264. package/dist/tools/nextjs-data-flow-tools.d.ts.map +1 -0
  265. package/dist/tools/nextjs-data-flow-tools.js +158 -0
  266. package/dist/tools/nextjs-data-flow-tools.js.map +1 -0
  267. package/dist/tools/nextjs-framework-audit-tools.d.ts +37 -0
  268. package/dist/tools/nextjs-framework-audit-tools.d.ts.map +1 -0
  269. package/dist/tools/nextjs-framework-audit-tools.js +211 -0
  270. package/dist/tools/nextjs-framework-audit-tools.js.map +1 -0
  271. package/dist/tools/nextjs-link-tools.d.ts +41 -0
  272. package/dist/tools/nextjs-link-tools.d.ts.map +1 -0
  273. package/dist/tools/nextjs-link-tools.js +157 -0
  274. package/dist/tools/nextjs-link-tools.js.map +1 -0
  275. package/dist/tools/nextjs-metadata-tools.d.ts +74 -0
  276. package/dist/tools/nextjs-metadata-tools.d.ts.map +1 -0
  277. package/dist/tools/nextjs-metadata-tools.js +252 -0
  278. package/dist/tools/nextjs-metadata-tools.js.map +1 -0
  279. package/dist/tools/nextjs-middleware-coverage-tools.d.ts +41 -0
  280. package/dist/tools/nextjs-middleware-coverage-tools.d.ts.map +1 -0
  281. package/dist/tools/nextjs-middleware-coverage-tools.js +88 -0
  282. package/dist/tools/nextjs-middleware-coverage-tools.js.map +1 -0
  283. package/dist/tools/nextjs-route-tools.d.ts +100 -0
  284. package/dist/tools/nextjs-route-tools.d.ts.map +1 -0
  285. package/dist/tools/nextjs-route-tools.js +493 -0
  286. package/dist/tools/nextjs-route-tools.js.map +1 -0
  287. package/dist/tools/nextjs-security-readers.d.ts +22 -0
  288. package/dist/tools/nextjs-security-readers.d.ts.map +1 -0
  289. package/dist/tools/nextjs-security-readers.js +318 -0
  290. package/dist/tools/nextjs-security-readers.js.map +1 -0
  291. package/dist/tools/nextjs-security-scoring.d.ts +15 -0
  292. package/dist/tools/nextjs-security-scoring.d.ts.map +1 -0
  293. package/dist/tools/nextjs-security-scoring.js +65 -0
  294. package/dist/tools/nextjs-security-scoring.js.map +1 -0
  295. package/dist/tools/nextjs-security-tools.d.ts +75 -0
  296. package/dist/tools/nextjs-security-tools.d.ts.map +1 -0
  297. package/dist/tools/nextjs-security-tools.js +153 -0
  298. package/dist/tools/nextjs-security-tools.js.map +1 -0
  299. package/dist/tools/nextjs-tools.d.ts +15 -0
  300. package/dist/tools/nextjs-tools.d.ts.map +1 -0
  301. package/dist/tools/nextjs-tools.js +15 -0
  302. package/dist/tools/nextjs-tools.js.map +1 -0
  303. package/dist/tools/outline-tools.d.ts.map +1 -1
  304. package/dist/tools/outline-tools.js +20 -0
  305. package/dist/tools/outline-tools.js.map +1 -1
  306. package/dist/tools/pattern-tools.d.ts +8 -0
  307. package/dist/tools/pattern-tools.d.ts.map +1 -1
  308. package/dist/tools/pattern-tools.js +561 -3
  309. package/dist/tools/pattern-tools.js.map +1 -1
  310. package/dist/tools/perf-tools.d.ts +32 -0
  311. package/dist/tools/perf-tools.d.ts.map +1 -0
  312. package/dist/tools/perf-tools.js +227 -0
  313. package/dist/tools/perf-tools.js.map +1 -0
  314. package/dist/tools/php-tools.d.ts +176 -0
  315. package/dist/tools/php-tools.d.ts.map +1 -0
  316. package/dist/tools/php-tools.js +543 -0
  317. package/dist/tools/php-tools.js.map +1 -0
  318. package/dist/tools/prisma-schema-tools.d.ts +44 -0
  319. package/dist/tools/prisma-schema-tools.d.ts.map +1 -0
  320. package/dist/tools/prisma-schema-tools.js +358 -0
  321. package/dist/tools/prisma-schema-tools.js.map +1 -0
  322. package/dist/tools/project-tools.d.ts +115 -6
  323. package/dist/tools/project-tools.d.ts.map +1 -1
  324. package/dist/tools/project-tools.js +594 -217
  325. package/dist/tools/project-tools.js.map +1 -1
  326. package/dist/tools/pyproject-tools.d.ts +23 -0
  327. package/dist/tools/pyproject-tools.d.ts.map +1 -0
  328. package/dist/tools/pyproject-tools.js +133 -0
  329. package/dist/tools/pyproject-tools.js.map +1 -0
  330. package/dist/tools/pytest-tools.d.ts +20 -0
  331. package/dist/tools/pytest-tools.d.ts.map +1 -0
  332. package/dist/tools/pytest-tools.js +106 -0
  333. package/dist/tools/pytest-tools.js.map +1 -0
  334. package/dist/tools/python-callers.d.ts +28 -0
  335. package/dist/tools/python-callers.d.ts.map +1 -0
  336. package/dist/tools/python-callers.js +110 -0
  337. package/dist/tools/python-callers.js.map +1 -0
  338. package/dist/tools/python-circular-imports.d.ts +19 -0
  339. package/dist/tools/python-circular-imports.d.ts.map +1 -0
  340. package/dist/tools/python-circular-imports.js +126 -0
  341. package/dist/tools/python-circular-imports.js.map +1 -0
  342. package/dist/tools/python-deps-analyzer.d.ts +46 -0
  343. package/dist/tools/python-deps-analyzer.d.ts.map +1 -0
  344. package/dist/tools/python-deps-analyzer.js +227 -0
  345. package/dist/tools/python-deps-analyzer.js.map +1 -0
  346. package/dist/tools/query-tools.d.ts +23 -0
  347. package/dist/tools/query-tools.d.ts.map +1 -0
  348. package/dist/tools/query-tools.js +256 -0
  349. package/dist/tools/query-tools.js.map +1 -0
  350. package/dist/tools/react-tools.d.ts +218 -0
  351. package/dist/tools/react-tools.d.ts.map +1 -0
  352. package/dist/tools/react-tools.js +714 -0
  353. package/dist/tools/react-tools.js.map +1 -0
  354. package/dist/tools/report-tools.js +47 -0
  355. package/dist/tools/report-tools.js.map +1 -1
  356. package/dist/tools/review-diff-tools.d.ts +2 -6
  357. package/dist/tools/review-diff-tools.d.ts.map +1 -1
  358. package/dist/tools/review-diff-tools.js +51 -66
  359. package/dist/tools/review-diff-tools.js.map +1 -1
  360. package/dist/tools/room-tools.d.ts +36 -0
  361. package/dist/tools/room-tools.d.ts.map +1 -0
  362. package/dist/tools/room-tools.js +147 -0
  363. package/dist/tools/room-tools.js.map +1 -0
  364. package/dist/tools/route-tools.d.ts +27 -1
  365. package/dist/tools/route-tools.d.ts.map +1 -1
  366. package/dist/tools/route-tools.js +744 -18
  367. package/dist/tools/route-tools.js.map +1 -1
  368. package/dist/tools/ruff-tools.d.ts +32 -0
  369. package/dist/tools/ruff-tools.d.ts.map +1 -0
  370. package/dist/tools/ruff-tools.js +114 -0
  371. package/dist/tools/ruff-tools.js.map +1 -0
  372. package/dist/tools/search-ranker.d.ts.map +1 -1
  373. package/dist/tools/search-ranker.js +7 -0
  374. package/dist/tools/search-ranker.js.map +1 -1
  375. package/dist/tools/serialization-tools.d.ts +24 -0
  376. package/dist/tools/serialization-tools.d.ts.map +1 -0
  377. package/dist/tools/serialization-tools.js +156 -0
  378. package/dist/tools/serialization-tools.js.map +1 -0
  379. package/dist/tools/sql-tools.d.ts +234 -0
  380. package/dist/tools/sql-tools.d.ts.map +1 -0
  381. package/dist/tools/sql-tools.js +1037 -0
  382. package/dist/tools/sql-tools.js.map +1 -0
  383. package/dist/tools/status-tools.d.ts +10 -0
  384. package/dist/tools/status-tools.d.ts.map +1 -0
  385. package/dist/tools/status-tools.js +32 -0
  386. package/dist/tools/status-tools.js.map +1 -0
  387. package/dist/tools/symbol-tools.d.ts +19 -0
  388. package/dist/tools/symbol-tools.d.ts.map +1 -1
  389. package/dist/tools/symbol-tools.js +78 -4
  390. package/dist/tools/symbol-tools.js.map +1 -1
  391. package/dist/tools/test-impact-tools.d.ts +29 -0
  392. package/dist/tools/test-impact-tools.d.ts.map +1 -0
  393. package/dist/tools/test-impact-tools.js +156 -0
  394. package/dist/tools/test-impact-tools.js.map +1 -0
  395. package/dist/tools/typecheck-tools.d.ts +39 -0
  396. package/dist/tools/typecheck-tools.d.ts.map +1 -0
  397. package/dist/tools/typecheck-tools.js +191 -0
  398. package/dist/tools/typecheck-tools.js.map +1 -0
  399. package/dist/tools/wiring-tools.d.ts +19 -0
  400. package/dist/tools/wiring-tools.d.ts.map +1 -0
  401. package/dist/tools/wiring-tools.js +147 -0
  402. package/dist/tools/wiring-tools.js.map +1 -0
  403. package/dist/types.d.ts +9 -1
  404. package/dist/types.d.ts.map +1 -1
  405. package/dist/utils/framework-detect.d.ts +18 -2
  406. package/dist/utils/framework-detect.d.ts.map +1 -1
  407. package/dist/utils/framework-detect.js +150 -3
  408. package/dist/utils/framework-detect.js.map +1 -1
  409. package/dist/utils/import-graph.d.ts +36 -0
  410. package/dist/utils/import-graph.d.ts.map +1 -1
  411. package/dist/utils/import-graph.js +212 -9
  412. package/dist/utils/import-graph.js.map +1 -1
  413. package/dist/utils/language-detect.d.ts +21 -0
  414. package/dist/utils/language-detect.d.ts.map +1 -0
  415. package/dist/utils/language-detect.js +183 -0
  416. package/dist/utils/language-detect.js.map +1 -0
  417. package/dist/utils/nextjs-ast-readers.d.ts +44 -0
  418. package/dist/utils/nextjs-ast-readers.d.ts.map +1 -0
  419. package/dist/utils/nextjs-ast-readers.js +341 -0
  420. package/dist/utils/nextjs-ast-readers.js.map +1 -0
  421. package/dist/utils/nextjs-audit-cache.d.ts +51 -0
  422. package/dist/utils/nextjs-audit-cache.d.ts.map +1 -0
  423. package/dist/utils/nextjs-audit-cache.js +116 -0
  424. package/dist/utils/nextjs-audit-cache.js.map +1 -0
  425. package/dist/utils/nextjs-metadata-readers.d.ts +65 -0
  426. package/dist/utils/nextjs-metadata-readers.d.ts.map +1 -0
  427. package/dist/utils/nextjs-metadata-readers.js +447 -0
  428. package/dist/utils/nextjs-metadata-readers.js.map +1 -0
  429. package/dist/utils/nextjs.d.ts +42 -0
  430. package/dist/utils/nextjs.d.ts.map +1 -0
  431. package/dist/utils/nextjs.js +284 -0
  432. package/dist/utils/nextjs.js.map +1 -0
  433. package/dist/utils/python-import-resolver.d.ts +42 -0
  434. package/dist/utils/python-import-resolver.d.ts.map +1 -0
  435. package/dist/utils/python-import-resolver.js +101 -0
  436. package/dist/utils/python-import-resolver.js.map +1 -0
  437. package/dist/utils/python-imports.d.ts +28 -0
  438. package/dist/utils/python-imports.d.ts.map +1 -0
  439. package/dist/utils/python-imports.js +117 -0
  440. package/dist/utils/python-imports.js.map +1 -0
  441. package/dist/utils/react-alias.d.ts +15 -0
  442. package/dist/utils/react-alias.d.ts.map +1 -0
  443. package/dist/utils/react-alias.js +31 -0
  444. package/dist/utils/react-alias.js.map +1 -0
  445. package/dist/utils/test-file.d.ts.map +1 -1
  446. package/dist/utils/test-file.js +7 -0
  447. package/dist/utils/test-file.js.map +1 -1
  448. package/dist/utils/walk.d.ts +22 -0
  449. package/dist/utils/walk.d.ts.map +1 -1
  450. package/dist/utils/walk.js +70 -2
  451. package/dist/utils/walk.js.map +1 -1
  452. package/package.json +3 -2
  453. package/rules/codesift.md +34 -5
  454. package/rules/codesift.mdc +34 -5
  455. package/rules/codex.md +34 -5
  456. package/rules/gemini.md +34 -5
  457. package/src/parser/languages/tree-sitter-javascript.wasm +0 -0
  458. package/src/parser/languages/tree-sitter-kotlin.wasm +0 -0
  459. package/src/parser/languages/tree-sitter-php.wasm +0 -0
  460. package/src/parser/languages/tree-sitter-php_only.wasm +0 -0
  461. package/src/parser/languages/tree-sitter-python.wasm +0 -0
@@ -1,3 +1,30 @@
1
+ /**
2
+ * Kotlin/Android annotations that mark a symbol as referenced by the runtime
3
+ * rather than by static imports. `find_dead_code` must treat these as live
4
+ * because Hilt (reflection), Compose (tooling), Room (KSP), kotlinx.serialization
5
+ * (JSON), and JUnit/Kotest (runner) all instantiate or invoke symbols outside
6
+ * the normal call graph.
7
+ */
8
+ export const KOTLIN_FRAMEWORK_ANNOTATIONS = new Set([
9
+ // Hilt / Dagger DI
10
+ "HiltViewModel", "HiltAndroidApp", "AndroidEntryPoint",
11
+ "Inject", "Module", "Provides", "Binds", "InstallIn", "Singleton",
12
+ // Jetpack Compose + Compose tooling
13
+ "Composable", "Preview", "PreviewParameter",
14
+ // kotlinx.serialization
15
+ "Serializable", "SerialName", "Transient",
16
+ // Room persistence
17
+ "Entity", "Dao", "Database", "Query", "Insert", "Update", "Delete",
18
+ "TypeConverter", "TypeConverters", "PrimaryKey", "Embedded", "Relation",
19
+ // Android framework entry points
20
+ "Keep", "JvmStatic", "JvmOverloads", "JvmName", "JvmField",
21
+ // Test runners (JUnit4/5 + Kotest)
22
+ "Test", "BeforeEach", "AfterEach", "BeforeAll", "AfterAll",
23
+ "Before", "After", "BeforeClass", "AfterClass",
24
+ "ParameterizedTest", "RepeatedTest",
25
+ // Kotlin Multiplatform
26
+ "JsExport", "ObjCName", "Throws",
27
+ ]);
1
28
  const NEXT_ROUTE_FILE = /(^|\/)app\/.*\/route\.[jt]sx?$/;
2
29
  const NEXT_APP_FILE = /(^|\/)app\/.+\.[jt]sx?$/;
3
30
  const NEXT_PAGES_FILE = /(^|\/)pages\/.+\.[jt]sx?$/;
@@ -5,6 +32,26 @@ const NEXT_MIDDLEWARE_FILE = /(^|\/)middleware\.[jt]sx?$/;
5
32
  const NEXT_ROUTE_METHODS = /^(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)$/;
6
33
  const NEXT_PAGES_DATA_FUNCTIONS = /^(getServerSideProps|getStaticProps|getStaticPaths)$/;
7
34
  const NEXT_APP_METADATA_FUNCTIONS = /^(generateMetadata|generateStaticParams)$/;
35
+ /** Next.js config exports that are framework entry points (not dead code) */
36
+ const NEXT_CONFIG_EXPORTS = /^(metadata|viewport|dynamic|revalidate|runtime|preferredRegion|maxDuration|fetchCache|dynamicParams)$/;
37
+ /** NestJS lifecycle hooks + decorator-based entry points */
38
+ const NESTJS_LIFECYCLE = /^(onModuleInit|onModuleDestroy|onApplicationBootstrap|onApplicationShutdown|beforeApplicationShutdown|handleCron|handleInterval|handleTimeout|handleEvent)$/;
39
+ const NESTJS_ENTRY_FILE = /\.(controller|resolver|gateway|guard|interceptor|pipe|filter)\.[jt]sx?$/;
40
+ const NESTJS_MAIN_FILE = /(^|\/)main\.[jt]sx?$/;
41
+ /** Astro file-based routing — pages/ directory with .astro, .ts, or .js files */
42
+ const ASTRO_PAGES_FILE = /(^|\/)src\/pages\/.+\.(astro|[jt]sx?)$/;
43
+ /** Astro special exports that the framework consumes implicitly */
44
+ const ASTRO_ENTRY_SYMBOLS = /^(getStaticPaths|prerender|GET|POST|PUT|DELETE|PATCH)$/;
45
+ /** React/Next.js app router file conventions — these are route entry points */
46
+ const REACT_ROUTE_FILE = /(^|\/)(pages|app)\/.*\.(tsx|jsx)$/;
47
+ /** Special Next.js/Remix file names that are always entry points regardless of export name */
48
+ const REACT_SPECIAL_FILE = /(^|\/)(page|layout|loading|error|not-found|global-error|default|template|head)\.(tsx|jsx)$/;
49
+ /** Remix convention: routes/ directory with file-based routing */
50
+ const REMIX_ROUTE_FILE = /(^|\/)routes\/.*\.(tsx|jsx)$/;
51
+ /** Exported for testing — matches next.config.{js,mjs,cjs,ts} at root or src/ */
52
+ export const NEXT_CONFIG_FILE = /^(src\/)?next\.config\.[mc]?[jt]s$/;
53
+ /** Exported for testing — App Router convention files */
54
+ export const NEXT_APP_CONVENTION_FILE = /(^|\/)app\/(.*\/)?(page|layout|loading|error|not-found|global-error|default|template|route)\.[jt]sx?$/;
8
55
  export function detectFrameworks(index) {
9
56
  const frameworks = new Set();
10
57
  // Sample first 200 symbols' source for framework indicators
@@ -13,14 +60,80 @@ export function detectFrameworks(index) {
13
60
  frameworks.add("nestjs");
14
61
  if (sources.includes("from 'react'") || sources.includes('from "react"') || sources.includes("useState"))
15
62
  frameworks.add("react");
16
- if (index.files.some((f) => f.path.includes("app/api/") && f.path.endsWith("route.ts")))
17
- frameworks.add("nextjs");
18
63
  if (sources.includes("express()") || sources.includes("Router()"))
19
64
  frameworks.add("express");
65
+ // Hono detection: check symbol sources for new Hono() / new OpenAPIHono() instantiation,
66
+ // or import statements (captured in some extractor flows), or hono/factory createApp
67
+ if (/new\s+(?:Hono|OpenAPIHono)\s*(?:<[^>]*>)?\s*\(/.test(sources) ||
68
+ sources.includes("from 'hono'") ||
69
+ sources.includes('from "hono"') ||
70
+ sources.includes("from '@hono/zod-openapi'") ||
71
+ sources.includes('from "@hono/zod-openapi"') ||
72
+ sources.includes("factory.createApp")) {
73
+ frameworks.add("hono");
74
+ }
75
+ if (sources.includes("from 'astro'") || sources.includes('from "astro"') || sources.includes("from 'astro:") || sources.includes('from "astro:') || index.files.some((f) => f.path.endsWith(".astro")))
76
+ frameworks.add("astro");
77
+ // Kotlin/Android detection: any .kt file is a signal. The annotation
78
+ // whitelist kicks in across all Kotlin symbols regardless of whether Hilt
79
+ // is actually in use — the cost of a false negative (flagging @HiltViewModel
80
+ // as dead code) is much higher than the cost of a false positive (allowing
81
+ // a few annotated symbols through when the project isn't Android).
82
+ if (index.files.some((f) => f.path.endsWith(".kt") || f.path.endsWith(".kts"))) {
83
+ frameworks.add("kotlin-android");
84
+ }
85
+ // Next.js detection: broadened to cover config file, pages/ dir, and App Router conventions
86
+ const hasNextConfig = index.files.some((f) => NEXT_CONFIG_FILE.test(f.path));
87
+ const hasPagesDir = index.files.some((f) => NEXT_PAGES_FILE.test(f.path) && /\.[jt]sx?$/.test(f.path));
88
+ const hasAppConvention = index.files.some((f) => NEXT_APP_CONVENTION_FILE.test(f.path));
89
+ if (hasNextConfig || hasPagesDir || hasAppConvention) {
90
+ frameworks.add("nextjs");
91
+ }
20
92
  frameworks.add("test"); // always include test patterns
21
93
  return frameworks;
22
94
  }
23
- export function isFrameworkEntryPoint(symbol, frameworks) {
95
+ export function isFrameworkEntryPoint(symbol, frameworks, honoModel) {
96
+ // Kotlin/Android: whitelisted annotations mark a symbol as runtime-referenced
97
+ // (Hilt, Compose, Room, serialization, Android entry points, JUnit).
98
+ if (frameworks.has("kotlin-android") && (symbol.file.endsWith(".kt") || symbol.file.endsWith(".kts"))) {
99
+ const decorators = symbol.decorators;
100
+ if (decorators && decorators.length > 0) {
101
+ for (const decorator of decorators) {
102
+ if (KOTLIN_FRAMEWORK_ANNOTATIONS.has(decorator))
103
+ return true;
104
+ }
105
+ }
106
+ // Fallback for symbols where the extractor didn't surface decorators yet:
107
+ // scan the first 400 chars of source for any whitelisted @Annotation.
108
+ // Cheaper than re-parsing and keeps correctness as the extractor evolves.
109
+ const head = symbol.source?.slice(0, 400);
110
+ if (head) {
111
+ for (const annotation of KOTLIN_FRAMEWORK_ANNOTATIONS) {
112
+ // Word-boundary match against "@Annotation" to avoid false matches on
113
+ // @HiltViewModelInternal or similar.
114
+ const re = new RegExp(`@${annotation}\\b`);
115
+ if (re.test(head))
116
+ return true;
117
+ }
118
+ }
119
+ }
120
+ if (frameworks.has("hono") && honoModel) {
121
+ // Symbol is in a file that the HonoExtractor reached
122
+ if (honoModel.files_used.includes(symbol.file)) {
123
+ // Handler function referenced by a route
124
+ if (honoModel.routes.some((r) => r.handler.name === symbol.name))
125
+ return true;
126
+ // Middleware referenced in any chain
127
+ if (honoModel.middleware_chains.some((mc) => mc.entries.some((e) => e.name === symbol.name)))
128
+ return true;
129
+ // Sub-app variable mounted via app.route()
130
+ if (honoModel.mounts.some((m) => m.child_var === symbol.name))
131
+ return true;
132
+ // The root Hono app variable itself
133
+ if (honoModel.app_variables[symbol.name])
134
+ return true;
135
+ }
136
+ }
24
137
  if (frameworks.has("nextjs")) {
25
138
  if (NEXT_ROUTE_FILE.test(symbol.file) && NEXT_ROUTE_METHODS.test(symbol.name))
26
139
  return true;
@@ -30,6 +143,40 @@ export function isFrameworkEntryPoint(symbol, frameworks) {
30
143
  return true;
31
144
  if (NEXT_APP_FILE.test(symbol.file) && NEXT_APP_METADATA_FUNCTIONS.test(symbol.name))
32
145
  return true;
146
+ if (NEXT_APP_FILE.test(symbol.file) && NEXT_CONFIG_EXPORTS.test(symbol.name))
147
+ return true;
148
+ }
149
+ if (frameworks.has("nestjs")) {
150
+ if (NESTJS_LIFECYCLE.test(symbol.name))
151
+ return true;
152
+ if (NESTJS_ENTRY_FILE.test(symbol.file))
153
+ return true;
154
+ if (NESTJS_MAIN_FILE.test(symbol.file) && symbol.name === "bootstrap")
155
+ return true;
156
+ }
157
+ if (frameworks.has("astro")) {
158
+ if (ASTRO_PAGES_FILE.test(symbol.file))
159
+ return true;
160
+ if (ASTRO_ENTRY_SYMBOLS.test(symbol.name))
161
+ return true;
162
+ }
163
+ // React route/layout components: any default export from a routed file
164
+ // (pages/, app/, or routes/) is an entry point — the framework renders it
165
+ // based on file path, not via explicit import. Without this, find_dead_code
166
+ // flags them as unused.
167
+ if (frameworks.has("react") || frameworks.has("nextjs")) {
168
+ if (REACT_SPECIAL_FILE.test(symbol.file))
169
+ return true;
170
+ if (REACT_ROUTE_FILE.test(symbol.file))
171
+ return true;
172
+ if (REMIX_ROUTE_FILE.test(symbol.file))
173
+ return true;
174
+ }
175
+ // RSC boundary: "use client" / "use server" directive → framework entry point
176
+ if (symbol.source && (frameworks.has("react") || frameworks.has("nextjs"))) {
177
+ const head = symbol.source.slice(0, 200);
178
+ if (/['"]use client['"]/.test(head) || /['"]use server['"]/.test(head))
179
+ return true;
33
180
  }
34
181
  return false;
35
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"framework-detect.js","sourceRoot":"","sources":["../../src/utils/framework-detect.ts"],"names":[],"mappings":"AAIA,MAAM,eAAe,GAAG,gCAAgC,CAAC;AACzD,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAChD,MAAM,eAAe,GAAG,2BAA2B,CAAC;AACpD,MAAM,oBAAoB,GAAG,4BAA4B,CAAC;AAE1D,MAAM,kBAAkB,GAAG,4CAA4C,CAAC;AACxE,MAAM,yBAAyB,GAAG,sDAAsD,CAAC;AACzF,MAAM,2BAA2B,GAAG,2CAA2C,CAAC;AAEhF,MAAM,UAAU,gBAAgB,CAAC,KAAgB;IAC/C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAa,CAAC;IACxC,4DAA4D;IAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAElF,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9F,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClH,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7F,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,+BAA+B;IAEvD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAyC,EACzC,UAA0B;IAE1B,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3F,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;YAAE,OAAO,IAAI,CAAC;QACxF,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAClG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACpG,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"framework-detect.js","sourceRoot":"","sources":["../../src/utils/framework-detect.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,9 @@ import type { CodeIndex } from "../types.js";
2
2
  export interface ImportEdge {
3
3
  from: string;
4
4
  to: string;
5
+ type_only?: boolean;
6
+ star_import?: boolean;
7
+ raw?: string;
5
8
  }
6
9
  /**
7
10
  * Extract import paths from a source string.
@@ -13,6 +16,37 @@ export declare function extractImports(source: string): string[];
13
16
  * Resolves "./foo" and "../bar" relative to the importer's directory.
14
17
  */
15
18
  export declare function resolveImportPath(importerFile: string, importPath: string): string;
19
+ /**
20
+ * Extract PHP `use` statements (FQCN imports).
21
+ * Returns fully-qualified class/namespace names without the leading backslash.
22
+ * These are NOT file paths — they require PSR-4 resolution against composer.json.
23
+ */
24
+ export declare function extractPhpUseStatements(source: string): string[];
25
+ /**
26
+ * Extract Kotlin `import` statements (fully-qualified names).
27
+ * Returns dot-separated package + class names. Wildcards (`com.example.*`) are
28
+ * preserved as-is. These are NOT file paths — they require heuristic resolution
29
+ * against the source root (usually `src/main/kotlin`, `src/commonMain/kotlin`, etc.).
30
+ */
31
+ export declare function extractKotlinImports(source: string): string[];
32
+ /**
33
+ * Heuristically resolve a Kotlin fully-qualified import to an indexed file.
34
+ * Strategy: match the last segment of the FQN (the simple class name) against
35
+ * file basenames. For `com.example.service.UserService`, tries to find a file
36
+ * whose basename (without .kt/.kts) is `UserService` AND whose path contains
37
+ * the package path `com/example/service`.
38
+ *
39
+ * Returns the matched file path or null if no match.
40
+ *
41
+ * Limitations: single-repo heuristic. Doesn't handle wildcard imports
42
+ * (`com.example.*`) or multi-module setups with complex source roots.
43
+ */
44
+ export declare function resolveKotlinImport(fqName: string, kotlinFilesByBasename: Map<string, string[]>): string | null;
45
+ /**
46
+ * Build a lookup map from Kotlin file basenames (without extension) to file paths.
47
+ * Used by resolveKotlinImport for heuristic FQN resolution.
48
+ */
49
+ export declare function buildKotlinFilesByBasename(index: CodeIndex): Map<string, string[]>;
16
50
  /**
17
51
  * Build normalized path map for matching imports to indexed files.
18
52
  */
@@ -20,6 +54,8 @@ export declare function buildNormalizedPathMap(index: CodeIndex): Map<string, st
20
54
  /**
21
55
  * Collect all import edges between files in the index.
22
56
  * Reads file source from disk to extract import statements.
57
+ * Handles JS/TS/PHP relative imports AND Kotlin fully-qualified imports
58
+ * (via heuristic basename + package-path matching).
23
59
  */
24
60
  export declare function collectImportEdges(index: CodeIndex, fileFilter?: Set<string>): Promise<ImportEdge[]>;
25
61
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"import-graph.d.ts","sourceRoot":"","sources":["../../src/utils/import-graph.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAYD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAevD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAoBlF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAU5E;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,SAAS,EAChB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,OAAO,CAAC,UAAU,EAAE,CAAC,CAgCvB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAYlF"}
1
+ {"version":3,"file":"import-graph.d.ts","sourceRoot":"","sources":["../../src/utils/import-graph.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA4BD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAevD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAoBlF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAShE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAS7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAC3C,MAAM,GAAG,IAAI,CA8Bf;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAelF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAc5E;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,SAAS,EAChB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,OAAO,CAAC,UAAU,EAAE,CAAC,CA6HvB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAYlF"}
@@ -3,6 +3,10 @@
3
3
  */
4
4
  import { readFile } from "node:fs/promises";
5
5
  import { join } from "node:path";
6
+ import { getParser } from "../parser/parser-manager.js";
7
+ import { extractPythonImports } from "./python-imports.js";
8
+ import { resolvePythonImport, detectSrcLayout } from "./python-import-resolver.js";
9
+ import { resolvePhpNamespace } from "../tools/php-tools.js";
6
10
  // Patterns for detecting import statements across common languages
7
11
  const IMPORT_PATTERNS = [
8
12
  // ES modules: import ... from '...' or import ... from "..."
@@ -11,7 +15,21 @@ const IMPORT_PATTERNS = [
11
15
  /import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
12
16
  // CommonJS: require('...')
13
17
  /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
18
+ // PHP: require/include with relative path string: require __DIR__ . '/helpers.php';
19
+ /(?:require|include)(?:_once)?\s*\(?\s*(?:__DIR__\s*\.\s*)?['"](\.\.?\/[^'"]+\.php)['"]/g,
14
20
  ];
21
+ // Patterns for extracting PHP `use` statements (FQCN imports — PSR-4 based).
22
+ // These are NOT file paths; they need PSR-4 resolution via composer.json.
23
+ // Exposed separately so the resolver tool can opt-in.
24
+ // Accepts both UpperCase (PSR-1/2 modern) and lowercase (common in older
25
+ // Yii2 apps: `use app\models\Survey`) namespaces. The FQCN must contain at
26
+ // least one backslash to exclude global/function `use` statements like
27
+ // `use Closure;` which would be false positives for the import graph.
28
+ const PHP_USE_PATTERN = /^\s*use\s+(\w+(?:\\\w+)+)(?:\s+as\s+\w+)?\s*;/gm;
29
+ // Patterns for extracting Kotlin `import` statements (fully-qualified names).
30
+ // These are NOT file paths; they need heuristic resolution against source roots.
31
+ // Matches: `import com.example.UserService`, `import com.example.*`, `import com.example.Foo as Bar`
32
+ const KOTLIN_IMPORT_PATTERN = /^\s*import\s+([\w.]+(?:\.\*)?)(?:\s+as\s+\w+)?\s*$/gm;
15
33
  /**
16
34
  * Extract import paths from a source string.
17
35
  * Returns relative paths only (skips node_modules / bare specifiers).
@@ -50,34 +68,167 @@ export function resolveImportPath(importerFile, importPath) {
50
68
  }
51
69
  }
52
70
  let resolved = parts.join("/");
53
- resolved = resolved.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/, "");
71
+ resolved = resolved.replace(/\.(astro|ts|tsx|js|jsx|mjs|cjs|php)$/, "");
54
72
  return resolved;
55
73
  }
74
+ /**
75
+ * Extract PHP `use` statements (FQCN imports).
76
+ * Returns fully-qualified class/namespace names without the leading backslash.
77
+ * These are NOT file paths — they require PSR-4 resolution against composer.json.
78
+ */
79
+ export function extractPhpUseStatements(source) {
80
+ const uses = new Set();
81
+ PHP_USE_PATTERN.lastIndex = 0;
82
+ let match;
83
+ while ((match = PHP_USE_PATTERN.exec(source)) !== null) {
84
+ const fqcn = match[1]?.replace(/^\\/, "");
85
+ if (fqcn)
86
+ uses.add(fqcn);
87
+ }
88
+ return [...uses];
89
+ }
90
+ /**
91
+ * Extract Kotlin `import` statements (fully-qualified names).
92
+ * Returns dot-separated package + class names. Wildcards (`com.example.*`) are
93
+ * preserved as-is. These are NOT file paths — they require heuristic resolution
94
+ * against the source root (usually `src/main/kotlin`, `src/commonMain/kotlin`, etc.).
95
+ */
96
+ export function extractKotlinImports(source) {
97
+ const imports = new Set();
98
+ KOTLIN_IMPORT_PATTERN.lastIndex = 0;
99
+ let match;
100
+ while ((match = KOTLIN_IMPORT_PATTERN.exec(source)) !== null) {
101
+ const fqName = match[1];
102
+ if (fqName)
103
+ imports.add(fqName);
104
+ }
105
+ return [...imports];
106
+ }
107
+ /**
108
+ * Heuristically resolve a Kotlin fully-qualified import to an indexed file.
109
+ * Strategy: match the last segment of the FQN (the simple class name) against
110
+ * file basenames. For `com.example.service.UserService`, tries to find a file
111
+ * whose basename (without .kt/.kts) is `UserService` AND whose path contains
112
+ * the package path `com/example/service`.
113
+ *
114
+ * Returns the matched file path or null if no match.
115
+ *
116
+ * Limitations: single-repo heuristic. Doesn't handle wildcard imports
117
+ * (`com.example.*`) or multi-module setups with complex source roots.
118
+ */
119
+ export function resolveKotlinImport(fqName, kotlinFilesByBasename) {
120
+ // Skip wildcard imports — can't resolve to a single file
121
+ if (fqName.endsWith(".*"))
122
+ return null;
123
+ // Skip standard library / third-party (no way to index jar files)
124
+ if (fqName.startsWith("kotlin.") || fqName.startsWith("java.") ||
125
+ fqName.startsWith("javax.") || fqName.startsWith("android.") ||
126
+ fqName.startsWith("androidx.") || fqName.startsWith("org.jetbrains.") ||
127
+ fqName.startsWith("org.junit.")) {
128
+ return null;
129
+ }
130
+ const parts = fqName.split(".");
131
+ if (parts.length < 2)
132
+ return null;
133
+ const simpleName = parts[parts.length - 1];
134
+ const packagePath = parts.slice(0, -1).join("/");
135
+ const candidates = kotlinFilesByBasename.get(simpleName);
136
+ if (!candidates)
137
+ return null;
138
+ // Prefer candidate whose path contains the package path
139
+ for (const candidate of candidates) {
140
+ if (candidate.includes(packagePath))
141
+ return candidate;
142
+ }
143
+ // Fallback: if only one candidate, return it (common in small projects)
144
+ if (candidates.length === 1)
145
+ return candidates[0] ?? null;
146
+ return null;
147
+ }
148
+ /**
149
+ * Build a lookup map from Kotlin file basenames (without extension) to file paths.
150
+ * Used by resolveKotlinImport for heuristic FQN resolution.
151
+ */
152
+ export function buildKotlinFilesByBasename(index) {
153
+ const map = new Map();
154
+ for (const file of index.files) {
155
+ if (!/\.kts?$/.test(file.path))
156
+ continue;
157
+ const basename = file.path
158
+ .slice(file.path.lastIndexOf("/") + 1)
159
+ .replace(/\.kts?$/, "");
160
+ const existing = map.get(basename);
161
+ if (existing) {
162
+ existing.push(file.path);
163
+ }
164
+ else {
165
+ map.set(basename, [file.path]);
166
+ }
167
+ }
168
+ return map;
169
+ }
56
170
  /**
57
171
  * Build normalized path map for matching imports to indexed files.
58
172
  */
59
173
  export function buildNormalizedPathMap(index) {
60
174
  const normalizedPaths = new Map();
61
175
  for (const file of index.files) {
62
- const normalized = file.path.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/, "");
176
+ const normalized = file.path.replace(/\.(astro|ts|tsx|js|jsx|mjs|cjs|php|kt|kts|py)$/, "");
63
177
  normalizedPaths.set(normalized, file.path);
64
178
  if (normalized.endsWith("/index")) {
65
179
  normalizedPaths.set(normalized.slice(0, -6), file.path);
66
180
  }
181
+ // Python package index: map `foo/__init__` → `foo`
182
+ if (normalized.endsWith("/__init__")) {
183
+ normalizedPaths.set(normalized.slice(0, -9), file.path);
184
+ }
67
185
  }
68
186
  return normalizedPaths;
69
187
  }
70
188
  /**
71
189
  * Collect all import edges between files in the index.
72
190
  * Reads file source from disk to extract import statements.
191
+ * Handles JS/TS/PHP relative imports AND Kotlin fully-qualified imports
192
+ * (via heuristic basename + package-path matching).
73
193
  */
74
194
  export async function collectImportEdges(index, fileFilter) {
75
195
  const normalizedPaths = buildNormalizedPathMap(index);
196
+ const kotlinFilesByBasename = buildKotlinFilesByBasename(index);
76
197
  const edgeSet = new Set();
77
198
  const edges = [];
199
+ // Rollback kill switch — skip Python import extraction if env var set
200
+ const pythonDisabled = process.env.CODESIFT_DISABLE_PYTHON_IMPORTS === "1";
201
+ // Python needs the full indexed file set for package resolution — built once
202
+ const indexedPyFileSet = new Set(index.files.filter((f) => f.path.endsWith(".py")).map((f) => f.path));
203
+ const pySrcLayout = indexedPyFileSet.size > 0
204
+ ? detectSrcLayout([...indexedPyFileSet])
205
+ : null;
78
206
  const files = fileFilter
79
207
  ? index.files.filter((f) => fileFilter.has(f.path))
80
208
  : index.files;
209
+ const addEdge = (from, to, extras) => {
210
+ if (to === from)
211
+ return;
212
+ const edgeKey = `${from}->${to}`;
213
+ if (edgeSet.has(edgeKey)) {
214
+ // Upgrade: runtime import overrides a prior type_only edge
215
+ if (!extras?.type_only) {
216
+ const existing = edges.find((e) => e.from === from && e.to === to);
217
+ if (existing?.type_only)
218
+ existing.type_only = false;
219
+ }
220
+ return;
221
+ }
222
+ edgeSet.add(edgeKey);
223
+ const edge = { from, to };
224
+ if (extras?.type_only)
225
+ edge.type_only = true;
226
+ if (extras?.star_import)
227
+ edge.star_import = true;
228
+ if (extras?.raw)
229
+ edge.raw = extras.raw;
230
+ edges.push(edge);
231
+ };
81
232
  for (const file of files) {
82
233
  let source;
83
234
  try {
@@ -86,17 +237,69 @@ export async function collectImportEdges(index, fileFilter) {
86
237
  catch {
87
238
  continue;
88
239
  }
240
+ // Relative-path imports (JS/TS/PHP)
89
241
  const importPaths = extractImports(source);
90
242
  for (const importPath of importPaths) {
91
243
  const resolved = resolveImportPath(file.path, importPath);
92
244
  const targetFile = normalizedPaths.get(resolved);
93
- if (!targetFile || targetFile === file.path)
94
- continue;
95
- const edgeKey = `${file.path}->${targetFile}`;
96
- if (edgeSet.has(edgeKey))
97
- continue;
98
- edgeSet.add(edgeKey);
99
- edges.push({ from: file.path, to: targetFile });
245
+ if (targetFile)
246
+ addEdge(file.path, targetFile);
247
+ }
248
+ // Kotlin fully-qualified imports (.kt/.kts files only)
249
+ if (/\.kts?$/.test(file.path)) {
250
+ const kotlinImports = extractKotlinImports(source);
251
+ for (const fqName of kotlinImports) {
252
+ const targetFile = resolveKotlinImport(fqName, kotlinFilesByBasename);
253
+ if (targetFile)
254
+ addEdge(file.path, targetFile);
255
+ }
256
+ }
257
+ // PHP cross-file edges via PSR-4 `use` statement resolution.
258
+ // Creates edges like: PostController.php → User.php when we see
259
+ // `use App\Models\User;` and composer.json maps `App\` to `src/`.
260
+ if (file.path.endsWith(".php")) {
261
+ const uses = extractPhpUseStatements(source);
262
+ for (const fqcn of uses) {
263
+ try {
264
+ const resolved = await resolvePhpNamespace(index.repo, fqcn);
265
+ if (resolved.exists && resolved.file_path) {
266
+ const candidate = resolved.file_path.replace(/^\.\//, "");
267
+ // Prefer the exact indexed path (handles prefixes like "./src/")
268
+ const targetFile = index.files.some((f) => f.path === candidate)
269
+ ? candidate
270
+ : normalizedPaths.get(candidate.replace(/\.php$/, "")) ?? null;
271
+ if (targetFile && targetFile !== file.path) {
272
+ addEdge(file.path, targetFile);
273
+ }
274
+ }
275
+ }
276
+ catch {
277
+ // Missing composer.json, malformed PSR-4, etc. — skip edge, don't crash.
278
+ }
279
+ }
280
+ }
281
+ // Python imports via tree-sitter AST + package-aware resolution
282
+ if (!pythonDisabled && file.path.endsWith(".py")) {
283
+ try {
284
+ const parser = await getParser("python");
285
+ if (parser) {
286
+ const tree = parser.parse(source);
287
+ const pyImports = extractPythonImports(tree);
288
+ for (const imp of pyImports) {
289
+ const targetFile = resolvePythonImport({ module: imp.module, level: imp.level }, file.path, indexedPyFileSet, pySrcLayout);
290
+ if (targetFile) {
291
+ addEdge(file.path, targetFile, {
292
+ type_only: imp.is_type_only,
293
+ star_import: imp.is_star,
294
+ });
295
+ }
296
+ }
297
+ }
298
+ }
299
+ catch (err) {
300
+ const message = err instanceof Error ? err.message : String(err);
301
+ console.warn(`[import-graph] python extraction failed for ${file.path}: ${message}`);
302
+ }
100
303
  }
101
304
  }
102
305
  return edges;
@@ -1 +1 @@
1
- {"version":3,"file":"import-graph.js","sourceRoot":"","sources":["../../src/utils/import-graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import-graph.js","sourceRoot":"","sources":["../../src/utils/import-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface ProjectLanguages {
2
+ python: boolean;
3
+ php: boolean;
4
+ typescript: boolean;
5
+ javascript: boolean;
6
+ kotlin: boolean;
7
+ go: boolean;
8
+ rust: boolean;
9
+ ruby: boolean;
10
+ }
11
+ /**
12
+ * Scan a directory for source file extensions, returning which languages
13
+ * are present. Short-circuits once all tracked languages are found.
14
+ */
15
+ export declare function detectProjectLanguages(root: string): Promise<ProjectLanguages>;
16
+ /**
17
+ * Synchronous variant for use during server startup where top-level await
18
+ * isn't convenient. Uses readdirSync. Caps at MAX_FILES_SCANNED.
19
+ */
20
+ export declare function detectProjectLanguagesSync(root: string): ProjectLanguages;
21
+ //# sourceMappingURL=language-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-detect.d.ts","sourceRoot":"","sources":["../../src/utils/language-detect.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAyCD;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwDpF;AAOD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CA2DzE"}