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
@@ -0,0 +1,15 @@
1
+ /**
2
+ * React/Vite/Next.js path alias resolver — heuristic.
3
+ *
4
+ * Resolves `@/components/Foo` to a real file path within the repo without
5
+ * parsing tsconfig.json. Tries common conventions: src/, lib/, then root.
6
+ *
7
+ * Returns null for non-aliased imports (anything not starting with "@/").
8
+ *
9
+ * Used by trace_component_tree and React-aware analysis to bridge the gap
10
+ * between import statements and actual file locations.
11
+ */
12
+ export declare function resolveAlias(importPath: string, files: {
13
+ path: string;
14
+ }[]): string | null;
15
+ //# sourceMappingURL=react-alias.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-alias.d.ts","sourceRoot":"","sources":["../../src/utils/react-alias.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACxB,MAAM,GAAG,IAAI,CAkBf"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * React/Vite/Next.js path alias resolver — heuristic.
3
+ *
4
+ * Resolves `@/components/Foo` to a real file path within the repo without
5
+ * parsing tsconfig.json. Tries common conventions: src/, lib/, then root.
6
+ *
7
+ * Returns null for non-aliased imports (anything not starting with "@/").
8
+ *
9
+ * Used by trace_component_tree and React-aware analysis to bridge the gap
10
+ * between import statements and actual file locations.
11
+ */
12
+ const TS_EXTENSIONS = [".tsx", ".jsx", ".ts", ".js", "/index.tsx", "/index.jsx", "/index.ts", "/index.js"];
13
+ const ROOT_CANDIDATES = ["src", "lib"];
14
+ export function resolveAlias(importPath, files) {
15
+ if (!importPath.startsWith("@/"))
16
+ return null;
17
+ const rest = importPath.slice(2);
18
+ // Try src/, lib/, then root (no prefix)
19
+ const bases = [...ROOT_CANDIDATES.map((r) => `${r}/${rest}`), rest];
20
+ // Build a Set for O(1) lookup — files list can be large
21
+ const fileSet = new Set(files.map((f) => f.path));
22
+ for (const base of bases) {
23
+ for (const ext of TS_EXTENSIONS) {
24
+ const target = base + ext;
25
+ if (fileSet.has(target))
26
+ return target;
27
+ }
28
+ }
29
+ return null;
30
+ }
31
+ //# sourceMappingURL=react-alias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-alias.js","sourceRoot":"","sources":["../../src/utils/react-alias.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAC3G,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEvC,MAAM,UAAU,YAAY,CAC1B,UAAkB,EAClB,KAAyB;IAEzB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjC,wCAAwC;IACxC,MAAM,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAEpE,wDAAwD;IACxD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAElD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC;YAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"test-file.d.ts","sourceRoot":"","sources":["../../src/utils/test-file.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D"}
1
+ {"version":3,"file":"test-file.d.ts","sourceRoot":"","sources":["../../src/utils/test-file.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D"}
@@ -1,6 +1,7 @@
1
1
  /** Test file patterns — shared between BM25 scoring and call graph filtering */
2
2
  const TEST_FILE_PATTERNS = [
3
3
  ".test.", ".spec.", "__tests__/", "test/mocks", "test-utils", "test-helpers",
4
+ "Test.kt", "Tests.kt", "Spec.kt",
4
5
  ];
5
6
  /** Regex-based test file patterns for stricter matching (e.g., call graph filtering) */
6
7
  const TEST_FILE_REGEX_PATTERNS = [
@@ -10,6 +11,12 @@ const TEST_FILE_REGEX_PATTERNS = [
10
11
  /\/__tests__\//,
11
12
  /\/test\//,
12
13
  /\/tests\//,
14
+ // Kotlin test conventions
15
+ /Test\.kts?$/, // UserTest.kt, LoginTest.kts
16
+ /Tests\.kts?$/, // UserTests.kt
17
+ /Spec\.kts?$/, // Kotest: UserSpec.kt
18
+ /\/androidTest\//, // Android instrumented tests
19
+ /\/commonTest\//, // Kotlin Multiplatform common tests
13
20
  ];
14
21
  /**
15
22
  * Check if a file path looks like a test file using substring matching.
@@ -1 +1 @@
1
- {"version":3,"file":"test-file.js","sourceRoot":"","sources":["../../src/utils/test-file.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,kBAAkB,GAAG;IACzB,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc;CAC7E,CAAC;AAEF,wFAAwF;AACxF,MAAM,wBAAwB,GAAG;IAC/B,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,eAAe;IACf,UAAU;IACV,WAAW;CACZ,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"test-file.js","sourceRoot":"","sources":["../../src/utils/test-file.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,kBAAkB,GAAG;IACzB,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc;IAC5E,SAAS,EAAE,UAAU,EAAE,SAAS;CACjC,CAAC;AAEF,wFAAwF;AACxF,MAAM,wBAAwB,GAAG;IAC/B,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,eAAe;IACf,UAAU;IACV,WAAW;IACX,0BAA0B;IAC1B,aAAa,EAAY,6BAA6B;IACtD,cAAc,EAAW,eAAe;IACxC,aAAa,EAAY,sBAAsB;IAC/C,iBAAiB,EAAQ,6BAA6B;IACtD,gBAAgB,EAAS,oCAAoC;CAC9D,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChE,CAAC"}
@@ -8,6 +8,16 @@ export declare const IGNORE_DIRS: Set<string>;
8
8
  * e.g., "node_modules" -> "**\/node_modules/**"
9
9
  */
10
10
  export declare function toIgnorePatterns(): string[];
11
+ /**
12
+ * Backup and editor-generated files to exclude by default.
13
+ * These patterns commonly appear in working directories and cause:
14
+ * - Index duplication (e.g. Mobi2 had Survey.php + Survey copy.php)
15
+ * - False references pointing at backup files
16
+ * - Wasted parser time on abandoned code
17
+ *
18
+ * Disabled with env var CODESIFT_INCLUDE_BACKUPS=1.
19
+ */
20
+ export declare const BACKUP_FILE_PATTERNS: RegExp[];
11
21
  export interface WalkOptions {
12
22
  /**
13
23
  * When provided, only files whose relative path starts with one of these
@@ -36,6 +46,18 @@ export interface WalkOptions {
36
46
  * When `false` (default) the returned paths are absolute.
37
47
  */
38
48
  relative?: boolean | undefined;
49
+ /**
50
+ * When `true`, follow symlinks and walk their targets.
51
+ * Cycle detection via inode tracking prevents infinite loops.
52
+ * Defaults to `false`.
53
+ */
54
+ followSymlinks?: boolean | undefined;
55
+ /**
56
+ * Glob patterns to exclude (like .gitignore syntax).
57
+ * Matched against relative paths using picomatch.
58
+ * Example: ["dist/**", "*.generated.ts"]
59
+ */
60
+ excludePatterns?: string[] | undefined;
39
61
  }
40
62
  /**
41
63
  * Walk a directory tree collecting files.
@@ -1 +1 @@
1
- {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,WAAW,aAMtB,CAAC;AAEH;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAID,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAEpC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAEnE;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgEnB"}
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,eAAO,MAAM,WAAW,aAMtB,CAAC;AAEH;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,EAQxC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAEpC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAEnE;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAE/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAErC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACxC;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiHnB"}
@@ -1,5 +1,6 @@
1
1
  import { readdir, stat } from "node:fs/promises";
2
2
  import { join, relative, extname } from "node:path";
3
+ import picomatch from "picomatch";
3
4
  /**
4
5
  * Directories to skip during filesystem walks.
5
6
  * Shared by index-tools, search-tools, and (via toIgnorePatterns) watcher.
@@ -19,6 +20,24 @@ export function toIgnorePatterns() {
19
20
  return [...IGNORE_DIRS].map((dir) => `**/${dir}/**`);
20
21
  }
21
22
  const DEFAULT_MAX_FILE_SIZE = 1_000_000; // 1MB
23
+ /**
24
+ * Backup and editor-generated files to exclude by default.
25
+ * These patterns commonly appear in working directories and cause:
26
+ * - Index duplication (e.g. Mobi2 had Survey.php + Survey copy.php)
27
+ * - False references pointing at backup files
28
+ * - Wasted parser time on abandoned code
29
+ *
30
+ * Disabled with env var CODESIFT_INCLUDE_BACKUPS=1.
31
+ */
32
+ export const BACKUP_FILE_PATTERNS = [
33
+ /copy\.php$/i, // macOS Finder "Duplicate" output
34
+ /\.bak$/i, // generic backup
35
+ /\.orig$/i, // merge conflict leftover
36
+ /~$/, // emacs/joe backup
37
+ /\.swp$/i, // vim swap
38
+ /\.swo$/i, // vim swap
39
+ /\.DS_Store$/, // macOS finder metadata
40
+ ];
22
41
  /**
23
42
  * Walk a directory tree collecting files.
24
43
  * Skips directories listed in IGNORE_DIRS and hidden directories (dot-prefixed).
@@ -30,7 +49,20 @@ export async function walkDirectory(rootPath, options) {
30
49
  const fileFilter = options?.fileFilter;
31
50
  const includePaths = options?.includePaths;
32
51
  const useRelative = options?.relative ?? false;
52
+ const followSymlinks = options?.followSymlinks ?? false;
53
+ const visitedInodes = new Set();
33
54
  let limitReached = false;
55
+ // Compile exclude patterns once (picomatch)
56
+ let isExcluded = null;
57
+ if (options?.excludePatterns && options.excludePatterns.length > 0) {
58
+ try {
59
+ isExcluded = picomatch(options.excludePatterns, { dot: true });
60
+ }
61
+ catch {
62
+ // Malformed patterns — warn and skip filtering
63
+ console.warn("[codesift] walkDirectory: invalid excludePatterns, ignoring");
64
+ }
65
+ }
34
66
  async function walk(dirPath) {
35
67
  if (limitReached)
36
68
  return;
@@ -45,14 +77,44 @@ export async function walkDirectory(rootPath, options) {
45
77
  if (limitReached)
46
78
  return;
47
79
  const fullPath = join(dirPath, entry.name);
48
- if (entry.isDirectory()) {
80
+ const isSymlink = entry.isSymbolicLink();
81
+ let isDir = entry.isDirectory();
82
+ let isFile = entry.isFile();
83
+ // Resolve symlinks when followSymlinks is enabled
84
+ if (isSymlink && followSymlinks) {
85
+ try {
86
+ const resolved = await stat(fullPath);
87
+ const ino = resolved.ino;
88
+ if (visitedInodes.has(ino)) {
89
+ // Cycle detected — skip
90
+ continue;
91
+ }
92
+ visitedInodes.add(ino);
93
+ isDir = resolved.isDirectory();
94
+ isFile = resolved.isFile();
95
+ }
96
+ catch {
97
+ // Broken symlink — skip silently
98
+ continue;
99
+ }
100
+ }
101
+ else if (isSymlink) {
102
+ // Not following symlinks — skip
103
+ continue;
104
+ }
105
+ if (isDir) {
49
106
  if (IGNORE_DIRS.has(entry.name) || entry.name.startsWith(".")) {
50
107
  continue;
51
108
  }
52
109
  await walk(fullPath);
53
110
  }
54
- else if (entry.isFile()) {
111
+ else if (isFile) {
55
112
  const ext = extname(entry.name);
113
+ // Exclude backup / editor-generated files unless env var opts out.
114
+ // Checked before file filter so the noise never reaches the caller.
115
+ if (process.env.CODESIFT_INCLUDE_BACKUPS !== "1" &&
116
+ BACKUP_FILE_PATTERNS.some((re) => re.test(entry.name)))
117
+ continue;
56
118
  // Apply caller's file filter (e.g. language check, binary exclusion)
57
119
  if (fileFilter && !fileFilter(ext, entry.name))
58
120
  continue;
@@ -63,6 +125,12 @@ export async function walkDirectory(rootPath, options) {
63
125
  if (!matches)
64
126
  continue;
65
127
  }
128
+ // Apply exclude patterns
129
+ if (isExcluded) {
130
+ const relPath = relative(rootPath, fullPath);
131
+ if (isExcluded(relPath))
132
+ continue;
133
+ }
66
134
  // Skip files that are too large
67
135
  try {
68
136
  const fileStat = await stat(fullPath);
@@ -1 +1 @@
1
- {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "codesift-mcp",
3
- "version": "0.2.18",
4
- "description": "MCP server for code intelligence — 66 tools for symbol search, call graph, semantic search, route tracing, community detection, LSP bridge, secret detection, and conversation search",
3
+ "version": "0.4.0",
4
+ "description": "MCP server for code intelligence — 106 tools for symbol search, call graph, semantic search, route tracing, community detection, LSP bridge, secret detection, conversation search, and Hono framework intelligence",
5
5
  "license": "BSL-1.1",
6
6
  "author": "Greg Laskowski",
7
7
  "type": "module",
@@ -31,6 +31,7 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@modelcontextprotocol/sdk": "^1.0.0",
34
+ "@mrleebo/prisma-ast": "^0.15.0",
34
35
  "@sanity-labs/secret-scan": "^1.1.0",
35
36
  "chokidar": "^4.0.0",
36
37
  "ignore": "^6.0.0",
package/rules/codesift.md CHANGED
@@ -21,15 +21,15 @@ The `repo` param is optional — it auto-resolves from CWD. Just call CodeSift t
21
21
 
22
22
  ## Tool Discovery
23
23
 
24
- **66 MCP tools total** (14 core + 52 discoverable).
24
+ **160 MCP tools total** (47 core visible + 113 discoverable).
25
25
 
26
- Only 14 core tools appear in ListTools. Hidden tools are discovered on demand:
26
+ 47 core tools appear in ListTools. The remaining 113 niche tools are discovered on demand:
27
27
 
28
- - `discover_tools(query="dead code")` — keyword search across all 66 tools
28
+ - `discover_tools(query="dead code")` — keyword search across all 148 tools
29
29
  - `describe_tools(names=["find_dead_code"])` — get full parameter schema
30
30
  - `describe_tools(names=["find_dead_code"], reveal=true)` — also reveal in ListTools
31
31
 
32
- Core tools always visible: `search_text`, `codebase_retrieval`, `get_file_outline`, `search_symbols`, `list_repos`, `get_file_tree`, `index_file`, `get_symbol`, `index_conversations`, `search_patterns`, `index_folder`, `discover_tools`, `get_session_snapshot`, `describe_tools`.
32
+ Core tools (46) always visible includes search, symbols, context, analysis, architecture, conversations, and meta tools. Use `discover_tools` for niche tools like `classify_roles`, `find_unused_imports`, `rename_symbol`, `ast_query`, `find_perf_hotspots`, `fan_in_fan_out`, `architecture_summary`, `explain_query`, etc.
33
33
 
34
34
  ## Tool Mapping
35
35
 
@@ -73,6 +73,26 @@ Use this table to pick the right tool for each task:
73
73
  | index conversations | `index_conversations` |
74
74
  | structural diff | `diff_outline(since=)` |
75
75
  | what changed | `changed_symbols(since=)` |
76
+ | React component tree | `trace_component_tree` |
77
+ | React hook analysis | `analyze_hooks` |
78
+ | React re-render analysis | `analyze_renders` |
79
+ | React context graph | `analyze_context_graph` |
80
+ | find components | `search_symbols(kind="component")` |
81
+ | find hooks | `search_symbols(kind="hook")` |
82
+ | Astro islands/hydration | `astro_analyze_islands` |
83
+ | Astro hydration audit | `astro_hydration_audit` |
84
+ | Astro route map | `astro_route_map` |
85
+ | Astro config analysis | `astro_config_analyze` |
86
+ | Next.js full audit | `framework_audit` |
87
+ | route map + rendering | `nextjs_route_map` |
88
+ | SEO / metadata gaps | `nextjs_metadata_audit` |
89
+ | server actions security | `nextjs_audit_server_actions` |
90
+ | API contract extraction | `nextjs_api_contract` |
91
+ | client boundary / bundle | `nextjs_boundary_analyzer` |
92
+ | broken internal links | `nextjs_link_integrity` |
93
+ | data fetch waterfalls | `nextjs_data_flow` |
94
+ | middleware coverage gaps | `nextjs_middleware_coverage` |
95
+ | server vs client classify | `analyze_nextjs_components` |
76
96
 
77
97
  ## When to Use (Situational Triggers)
78
98
 
@@ -103,6 +123,14 @@ Use this table to pick the right tool for each task:
103
123
  | security audit | `scan_secrets(min_confidence="high")` |
104
124
  | code audit | `search_patterns("empty-catch")` |
105
125
  | past decisions | `find_conversations_for_symbol` |
126
+ | React codebase | `trace_component_tree("App")` + `analyze_hooks` |
127
+ | React anti-patterns | `search_patterns("hook-in-condition")` |
128
+ | React call graph (clean) | `trace_call_chain(filter_react_hooks=true)` |
129
+ | new Next.js project (first look) | `framework_audit` |
130
+ | SEO audit / metadata review | `nextjs_metadata_audit` |
131
+ | security review (Next.js) | `nextjs_audit_server_actions` |
132
+ | rendering strategy check | `nextjs_route_map` |
133
+ | bundle size concerns | `nextjs_boundary_analyzer` |
106
134
 
107
135
  ## Key Parameters
108
136
 
@@ -110,7 +138,7 @@ Use this table to pick the right tool for each task:
110
138
  - `detail_level="compact"` — locations only (~15 tok/result vs ~150 default)
111
139
  - `token_budget=N` — cap output instead of guessing `top_k`
112
140
  - `file_pattern=` — always pass when scope is known (e.g. `"*.ts"`, `"src/tools/"`)
113
- - `kind=` — filter by type: `function`, `class`, `type`, `interface`
141
+ - `kind=` — filter by type: `function`, `class`, `type`, `interface`, `component`, `hook`
114
142
  - `include_source=true` — include source code in results
115
143
 
116
144
  ### search_text
@@ -147,6 +175,7 @@ The server appends hint codes to responses to guide tool usage. Act on them imme
147
175
  | `H7` | `get_symbol` after `search_symbols` | Use `get_context_bundle` |
148
176
  | `H8(n)` | n× `get_symbol` calls | Use `assemble_context(level='L1')` |
149
177
  | `H9` | Question-word text query | Use semantic search |
178
+ | `H10` | 50+ tool calls this session | Call `get_session_snapshot` to preserve context before compaction |
150
179
 
151
180
  ## ALWAYS
152
181
 
@@ -15,15 +15,15 @@ For multi-repo sessions, call `list_repos()` to discover available repos.
15
15
 
16
16
  ## Tool Discovery
17
17
 
18
- **66 MCP tools total** (14 core + 52 discoverable).
18
+ **160 MCP tools total** (47 core visible + 113 discoverable).
19
19
 
20
- Only 14 core tools appear in ListTools. Hidden tools are discovered on demand:
20
+ 47 core tools appear in ListTools. The remaining 113 niche tools are discovered on demand:
21
21
 
22
- - `discover_tools(query="dead code")` — keyword search across all 66 tools
22
+ - `discover_tools(query="dead code")` — keyword search across all 148 tools
23
23
  - `describe_tools(names=["find_dead_code"])` — get full parameter schema
24
24
  - `describe_tools(names=["find_dead_code"], reveal=true)` — also reveal in ListTools
25
25
 
26
- Core tools always visible: `search_text`, `codebase_retrieval`, `get_file_outline`, `search_symbols`, `list_repos`, `get_file_tree`, `index_file`, `get_symbol`, `index_conversations`, `search_patterns`, `index_folder`, `discover_tools`, `get_session_snapshot`, `describe_tools`.
26
+ Core tools (46) always visible includes search, symbols, context, analysis, architecture, conversations, and meta tools. Use `discover_tools` for niche tools like `classify_roles`, `find_unused_imports`, `rename_symbol`, `ast_query`, etc.
27
27
 
28
28
  ## Tool Mapping
29
29
 
@@ -67,6 +67,26 @@ Use this table to pick the right tool for each task:
67
67
  | index conversations | `index_conversations` |
68
68
  | structural diff | `diff_outline(since=)` |
69
69
  | what changed | `changed_symbols(since=)` |
70
+ | React component tree | `trace_component_tree` |
71
+ | React hook analysis | `analyze_hooks` |
72
+ | React re-render analysis | `analyze_renders` |
73
+ | React context graph | `analyze_context_graph` |
74
+ | find components | `search_symbols(kind="component")` |
75
+ | find hooks | `search_symbols(kind="hook")` |
76
+ | Astro islands/hydration | `astro_analyze_islands` |
77
+ | Astro hydration audit | `astro_hydration_audit` |
78
+ | Astro route map | `astro_route_map` |
79
+ | Astro config analysis | `astro_config_analyze` |
80
+ | Next.js full audit | `framework_audit` |
81
+ | route map + rendering | `nextjs_route_map` |
82
+ | SEO / metadata gaps | `nextjs_metadata_audit` |
83
+ | server actions security | `nextjs_audit_server_actions` |
84
+ | API contract extraction | `nextjs_api_contract` |
85
+ | client boundary / bundle | `nextjs_boundary_analyzer` |
86
+ | broken internal links | `nextjs_link_integrity` |
87
+ | data fetch waterfalls | `nextjs_data_flow` |
88
+ | middleware coverage gaps | `nextjs_middleware_coverage` |
89
+ | server vs client classify | `analyze_nextjs_components` |
70
90
 
71
91
  ## When to Use (Situational Triggers)
72
92
 
@@ -97,6 +117,14 @@ Use this table to pick the right tool for each task:
97
117
  | security audit | `scan_secrets(min_confidence="high")` |
98
118
  | code audit | `search_patterns("empty-catch")` |
99
119
  | past decisions | `find_conversations_for_symbol` |
120
+ | React codebase | `trace_component_tree("App")` + `analyze_hooks` |
121
+ | React anti-patterns | `search_patterns("hook-in-condition")` |
122
+ | React call graph (clean) | `trace_call_chain(filter_react_hooks=true)` |
123
+ | new Next.js project (first look) | `framework_audit` |
124
+ | SEO audit / metadata review | `nextjs_metadata_audit` |
125
+ | security review (Next.js) | `nextjs_audit_server_actions` |
126
+ | rendering strategy check | `nextjs_route_map` |
127
+ | bundle size concerns | `nextjs_boundary_analyzer` |
100
128
 
101
129
  ## Key Parameters
102
130
 
@@ -104,7 +132,7 @@ Use this table to pick the right tool for each task:
104
132
  - `detail_level="compact"` — locations only (~15 tok/result vs ~150 default)
105
133
  - `token_budget=N` — cap output instead of guessing `top_k`
106
134
  - `file_pattern=` — always pass when scope is known (e.g. `"*.ts"`, `"src/tools/"`)
107
- - `kind=` — filter by type: `function`, `class`, `type`, `interface`
135
+ - `kind=` — filter by type: `function`, `class`, `type`, `interface`, `component`, `hook`
108
136
  - `include_source=true` — include source code in results
109
137
 
110
138
  ### search_text
@@ -141,6 +169,7 @@ The server appends hint codes to responses to guide tool usage. Act on them imme
141
169
  | `H7` | `get_symbol` after `search_symbols` | Use `get_context_bundle` |
142
170
  | `H8(n)` | n× `get_symbol` calls | Use `assemble_context(level='L1')` |
143
171
  | `H9` | Question-word text query | Use semantic search |
172
+ | `H10` | 50+ tool calls this session | Call `get_session_snapshot` to preserve context before compaction |
144
173
 
145
174
  ## ALWAYS
146
175
 
package/rules/codex.md CHANGED
@@ -10,15 +10,15 @@ For multi-repo sessions, call `list_repos()` to discover available repos.
10
10
 
11
11
  ## Tool Discovery
12
12
 
13
- **66 MCP tools total** (14 core + 52 discoverable).
13
+ **160 MCP tools total** (47 core visible + 113 discoverable).
14
14
 
15
- Only 14 core tools appear in ListTools. Hidden tools are discovered on demand:
15
+ 47 core tools appear in ListTools. The remaining 113 niche tools are discovered on demand:
16
16
 
17
- - `discover_tools(query="dead code")` — keyword search across all 66 tools
17
+ - `discover_tools(query="dead code")` — keyword search across all 148 tools
18
18
  - `describe_tools(names=["find_dead_code"])` — get full parameter schema
19
19
  - `describe_tools(names=["find_dead_code"], reveal=true)` — also reveal in ListTools
20
20
 
21
- Core tools always visible: `search_text`, `codebase_retrieval`, `get_file_outline`, `search_symbols`, `list_repos`, `get_file_tree`, `index_file`, `get_symbol`, `index_conversations`, `search_patterns`, `index_folder`, `discover_tools`, `get_session_snapshot`, `describe_tools`.
21
+ Core tools (46) always visible includes search, symbols, context, analysis, architecture, conversations, and meta tools. Use `discover_tools` for niche tools like `classify_roles`, `find_unused_imports`, `rename_symbol`, `ast_query`, etc.
22
22
 
23
23
  ## Tool Mapping
24
24
 
@@ -62,6 +62,26 @@ Use this table to pick the right tool for each task:
62
62
  | index conversations | `index_conversations` |
63
63
  | structural diff | `diff_outline(since=)` |
64
64
  | what changed | `changed_symbols(since=)` |
65
+ | React component tree | `trace_component_tree` |
66
+ | React hook analysis | `analyze_hooks` |
67
+ | React re-render analysis | `analyze_renders` |
68
+ | React context graph | `analyze_context_graph` |
69
+ | find components | `search_symbols(kind="component")` |
70
+ | find hooks | `search_symbols(kind="hook")` |
71
+ | Astro islands/hydration | `astro_analyze_islands` |
72
+ | Astro hydration audit | `astro_hydration_audit` |
73
+ | Astro route map | `astro_route_map` |
74
+ | Astro config analysis | `astro_config_analyze` |
75
+ | Next.js full audit | `framework_audit` |
76
+ | route map + rendering | `nextjs_route_map` |
77
+ | SEO / metadata gaps | `nextjs_metadata_audit` |
78
+ | server actions security | `nextjs_audit_server_actions` |
79
+ | API contract extraction | `nextjs_api_contract` |
80
+ | client boundary / bundle | `nextjs_boundary_analyzer` |
81
+ | broken internal links | `nextjs_link_integrity` |
82
+ | data fetch waterfalls | `nextjs_data_flow` |
83
+ | middleware coverage gaps | `nextjs_middleware_coverage` |
84
+ | server vs client classify | `analyze_nextjs_components` |
65
85
 
66
86
  ## When to Use (Situational Triggers)
67
87
 
@@ -92,6 +112,14 @@ Use this table to pick the right tool for each task:
92
112
  | security audit | `scan_secrets(min_confidence="high")` |
93
113
  | code audit | `search_patterns("empty-catch")` |
94
114
  | past decisions | `find_conversations_for_symbol` |
115
+ | React codebase | `trace_component_tree("App")` + `analyze_hooks` |
116
+ | React anti-patterns | `search_patterns("hook-in-condition")` |
117
+ | React call graph (clean) | `trace_call_chain(filter_react_hooks=true)` |
118
+ | new Next.js project (first look) | `framework_audit` |
119
+ | SEO audit / metadata review | `nextjs_metadata_audit` |
120
+ | security review (Next.js) | `nextjs_audit_server_actions` |
121
+ | rendering strategy check | `nextjs_route_map` |
122
+ | bundle size concerns | `nextjs_boundary_analyzer` |
95
123
 
96
124
  ## Key Parameters
97
125
 
@@ -99,7 +127,7 @@ Use this table to pick the right tool for each task:
99
127
  - `detail_level="compact"` — locations only (~15 tok/result vs ~150 default)
100
128
  - `token_budget=N` — cap output instead of guessing `top_k`
101
129
  - `file_pattern=` — always pass when scope is known (e.g. `"*.ts"`, `"src/tools/"`)
102
- - `kind=` — filter by type: `function`, `class`, `type`, `interface`
130
+ - `kind=` — filter by type: `function`, `class`, `type`, `interface`, `component`, `hook`
103
131
  - `include_source=true` — include source code in results
104
132
 
105
133
  ### search_text
@@ -136,6 +164,7 @@ The server appends hint codes to responses to guide tool usage. Act on them imme
136
164
  | `H7` | `get_symbol` after `search_symbols` | Use `get_context_bundle` |
137
165
  | `H8(n)` | n× `get_symbol` calls | Use `assemble_context(level='L1')` |
138
166
  | `H9` | Question-word text query | Use semantic search |
167
+ | `H10` | 50+ tool calls this session | Call `get_session_snapshot` to preserve context before compaction |
139
168
 
140
169
  ## ALWAYS
141
170
 
package/rules/gemini.md CHANGED
@@ -10,15 +10,15 @@ For multi-repo sessions, call `list_repos()` to discover available repos.
10
10
 
11
11
  ## Tool Discovery
12
12
 
13
- **66 MCP tools total** (14 core + 52 discoverable).
13
+ **160 MCP tools total** (47 core visible + 113 discoverable).
14
14
 
15
- Only 14 core tools appear in ListTools. Hidden tools are discovered on demand:
15
+ 47 core tools appear in ListTools. The remaining 113 niche tools are discovered on demand:
16
16
 
17
- - `discover_tools(query="dead code")` — keyword search across all 66 tools
17
+ - `discover_tools(query="dead code")` — keyword search across all 157 tools
18
18
  - `describe_tools(names=["find_dead_code"])` — get full parameter schema
19
19
  - `describe_tools(names=["find_dead_code"], reveal=true)` — also reveal in ListTools
20
20
 
21
- Core tools always visible: `search_text`, `codebase_retrieval`, `get_file_outline`, `search_symbols`, `list_repos`, `get_file_tree`, `index_file`, `get_symbol`, `index_conversations`, `search_patterns`, `index_folder`, `discover_tools`, `get_session_snapshot`, `describe_tools`.
21
+ Core tools (46) always visible includes search, symbols, context, analysis, architecture, conversations, and meta tools. Use `discover_tools` for niche tools like `classify_roles`, `find_unused_imports`, `rename_symbol`, `ast_query`, etc.
22
22
 
23
23
  ## Tool Mapping
24
24
 
@@ -62,6 +62,26 @@ Use this table to pick the right tool for each task:
62
62
  | index conversations | `index_conversations` |
63
63
  | structural diff | `diff_outline(since=)` |
64
64
  | what changed | `changed_symbols(since=)` |
65
+ | React component tree | `trace_component_tree` |
66
+ | React hook analysis | `analyze_hooks` |
67
+ | React re-render analysis | `analyze_renders` |
68
+ | React context graph | `analyze_context_graph` |
69
+ | find components | `search_symbols(kind="component")` |
70
+ | find hooks | `search_symbols(kind="hook")` |
71
+ | Astro islands/hydration | `astro_analyze_islands` |
72
+ | Astro hydration audit | `astro_hydration_audit` |
73
+ | Astro route map | `astro_route_map` |
74
+ | Astro config analysis | `astro_config_analyze` |
75
+ | Next.js full audit | `framework_audit` |
76
+ | route map + rendering | `nextjs_route_map` |
77
+ | SEO / metadata gaps | `nextjs_metadata_audit` |
78
+ | server actions security | `nextjs_audit_server_actions` |
79
+ | API contract extraction | `nextjs_api_contract` |
80
+ | client boundary / bundle | `nextjs_boundary_analyzer` |
81
+ | broken internal links | `nextjs_link_integrity` |
82
+ | data fetch waterfalls | `nextjs_data_flow` |
83
+ | middleware coverage gaps | `nextjs_middleware_coverage` |
84
+ | server vs client classify | `analyze_nextjs_components` |
65
85
 
66
86
  ## When to Use (Situational Triggers)
67
87
 
@@ -92,6 +112,14 @@ Use this table to pick the right tool for each task:
92
112
  | security audit | `scan_secrets(min_confidence="high")` |
93
113
  | code audit | `search_patterns("empty-catch")` |
94
114
  | past decisions | `find_conversations_for_symbol` |
115
+ | React codebase | `trace_component_tree("App")` + `analyze_hooks` |
116
+ | React anti-patterns | `search_patterns("hook-in-condition")` |
117
+ | React call graph (clean) | `trace_call_chain(filter_react_hooks=true)` |
118
+ | new Next.js project (first look) | `framework_audit` |
119
+ | SEO audit / metadata review | `nextjs_metadata_audit` |
120
+ | security review (Next.js) | `nextjs_audit_server_actions` |
121
+ | rendering strategy check | `nextjs_route_map` |
122
+ | bundle size concerns | `nextjs_boundary_analyzer` |
95
123
 
96
124
  ## Key Parameters
97
125
 
@@ -99,7 +127,7 @@ Use this table to pick the right tool for each task:
99
127
  - `detail_level="compact"` — locations only (~15 tok/result vs ~150 default)
100
128
  - `token_budget=N` — cap output instead of guessing `top_k`
101
129
  - `file_pattern=` — always pass when scope is known (e.g. `"*.ts"`, `"src/tools/"`)
102
- - `kind=` — filter by type: `function`, `class`, `type`, `interface`
130
+ - `kind=` — filter by type: `function`, `class`, `type`, `interface`, `component`, `hook`
103
131
  - `include_source=true` — include source code in results
104
132
 
105
133
  ### search_text
@@ -136,6 +164,7 @@ The server appends hint codes to responses to guide tool usage. Act on them imme
136
164
  | `H7` | `get_symbol` after `search_symbols` | Use `get_context_bundle` |
137
165
  | `H8(n)` | n× `get_symbol` calls | Use `assemble_context(level='L1')` |
138
166
  | `H9` | Question-word text query | Use semantic search |
167
+ | `H10` | 50+ tool calls this session | Call `get_session_snapshot` to preserve context before compaction |
139
168
 
140
169
  ## ALWAYS
141
170