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,572 @@
1
+ /**
2
+ * Kotlin-specific analysis tools.
3
+ *
4
+ * find_extension_functions — discover all extension functions for a receiver type
5
+ * analyze_sealed_hierarchy — find subtypes and missing when() branches
6
+ * trace_suspend_chain — suspend call chain + dispatcher + blocking anti-patterns
7
+ * analyze_kmp_declarations — match expect/actual across KMP source sets
8
+ */
9
+ import { getCodeIndex } from "./index-tools.js";
10
+ /**
11
+ * Find all extension functions defined for a given receiver type.
12
+ * Scans Kotlin symbol signatures for the `ReceiverType.` prefix pattern.
13
+ */
14
+ export async function findExtensionFunctions(repo, receiverType, options) {
15
+ const index = await getCodeIndex(repo);
16
+ if (!index) {
17
+ throw new Error(`Repository "${repo}" not found. Index it first with index_folder.`);
18
+ }
19
+ const pattern = `${receiverType}.`;
20
+ const extensions = [];
21
+ for (const sym of index.symbols) {
22
+ if (sym.kind !== "function")
23
+ continue;
24
+ if (!sym.signature)
25
+ continue;
26
+ if (options?.file_pattern && !sym.file.includes(options.file_pattern))
27
+ continue;
28
+ // Match receiver type in signature — look for "ReceiverType." prefix
29
+ // Signatures look like: "String.(param: Int): Boolean" or "suspend List<T>.(x: T): T"
30
+ // Strip leading "suspend " for matching
31
+ const sig = sym.signature.replace(/^suspend\s+/, "");
32
+ // Check for exact type match or generic match (e.g., "List<T>." matches "List")
33
+ if (sig.startsWith(pattern) || sig.startsWith(`${receiverType}<`)) {
34
+ extensions.push({
35
+ name: sym.name,
36
+ file: sym.file,
37
+ start_line: sym.start_line,
38
+ ...(sym.signature ? { signature: sym.signature } : {}),
39
+ ...(sym.docstring ? { docstring: sym.docstring } : {}),
40
+ });
41
+ }
42
+ }
43
+ // Sort by file then line for stable output
44
+ extensions.sort((a, b) => a.file.localeCompare(b.file) || a.start_line - b.start_line);
45
+ return {
46
+ receiver_type: receiverType,
47
+ extensions,
48
+ total: extensions.length,
49
+ };
50
+ }
51
+ /**
52
+ * Analyze a sealed class/interface hierarchy.
53
+ * Finds all subtypes and checks when() blocks for exhaustiveness.
54
+ */
55
+ export async function analyzeSealedHierarchy(repo, sealedClassName) {
56
+ const index = await getCodeIndex(repo);
57
+ if (!index) {
58
+ throw new Error(`Repository "${repo}" not found. Index it first with index_folder.`);
59
+ }
60
+ // Find the sealed class/interface
61
+ const sealedSym = index.symbols.find((s) => s.name === sealedClassName &&
62
+ (s.kind === "class" || s.kind === "interface") &&
63
+ s.source?.includes("sealed"));
64
+ if (!sealedSym) {
65
+ throw new Error(`Sealed class/interface "${sealedClassName}" not found. Ensure the file is indexed.`);
66
+ }
67
+ // Find subtypes — classes whose source contains `: SealedName` or `: SealedName()`
68
+ // as a delegation specifier (supertype)
69
+ const subtypePattern = new RegExp(`:\\s*(?:[\\w<>,\\s]+,\\s*)?${sealedClassName}\\s*[({,)]|:\\s*${sealedClassName}\\s*$`);
70
+ const subtypes = [];
71
+ for (const sym of index.symbols) {
72
+ if (sym.kind !== "class" && sym.kind !== "interface")
73
+ continue;
74
+ if (sym.name === sealedClassName)
75
+ continue;
76
+ if (!sym.source)
77
+ continue;
78
+ if (subtypePattern.test(sym.source)) {
79
+ subtypes.push({
80
+ name: sym.name,
81
+ file: sym.file,
82
+ start_line: sym.start_line,
83
+ kind: sym.kind,
84
+ });
85
+ }
86
+ }
87
+ const subtypeNames = new Set(subtypes.map((s) => s.name));
88
+ // Find when() blocks that reference the sealed class
89
+ // Search for `when (expr)` patterns in Kotlin files where expr involves the sealed type
90
+ const whenBlocks = [];
91
+ const { readFile } = await import("node:fs/promises");
92
+ const { join } = await import("node:path");
93
+ const kotlinFiles = index.files.filter((f) => /\.kts?$/.test(f.path));
94
+ for (const file of kotlinFiles) {
95
+ let source;
96
+ try {
97
+ source = await readFile(join(index.root, file.path), "utf-8");
98
+ }
99
+ catch {
100
+ continue;
101
+ }
102
+ // Find when blocks — look for `when (` or `when {` patterns
103
+ const whenPattern = /\bwhen\s*\([^)]*\)\s*\{/g;
104
+ let match;
105
+ while ((match = whenPattern.exec(source)) !== null) {
106
+ // Check if this when block references any of the subtypes
107
+ // Extract the block content (approximate — find matching closing brace)
108
+ const blockStart = match.index + match[0].length;
109
+ let depth = 1;
110
+ let blockEnd = blockStart;
111
+ for (let i = blockStart; i < source.length && depth > 0; i++) {
112
+ if (source[i] === "{")
113
+ depth++;
114
+ else if (source[i] === "}")
115
+ depth--;
116
+ blockEnd = i;
117
+ }
118
+ const blockContent = source.slice(match.index, blockEnd + 1);
119
+ // Check if this when block references our sealed class subtypes
120
+ const branchesFound = [];
121
+ for (const subName of subtypeNames) {
122
+ // Match: `is SubName ->` or `SubName ->` or `is SubName,`
123
+ const branchRe = new RegExp(`\\b(?:is\\s+)?${subName}\\b`);
124
+ if (branchRe.test(blockContent)) {
125
+ branchesFound.push(subName);
126
+ }
127
+ }
128
+ // Only report when blocks that reference at least one subtype
129
+ if (branchesFound.length === 0)
130
+ continue;
131
+ const branchesMissing = [...subtypeNames].filter((n) => !branchesFound.includes(n));
132
+ const lineNum = source.slice(0, match.index).split("\n").length;
133
+ whenBlocks.push({
134
+ file: file.path,
135
+ line: lineNum,
136
+ branches_found: branchesFound.sort(),
137
+ branches_missing: branchesMissing.sort(),
138
+ is_exhaustive: branchesMissing.length === 0,
139
+ });
140
+ }
141
+ }
142
+ return {
143
+ sealed_class: {
144
+ name: sealedSym.name,
145
+ file: sealedSym.file,
146
+ start_line: sealedSym.start_line,
147
+ kind: sealedSym.kind,
148
+ },
149
+ subtypes,
150
+ when_blocks: whenBlocks,
151
+ total_subtypes: subtypes.length,
152
+ total_when_blocks: whenBlocks.length,
153
+ all_exhaustive: whenBlocks.length > 0 && whenBlocks.every((w) => w.is_exhaustive),
154
+ };
155
+ }
156
+ /**
157
+ * Normalize a dispatcher expression captured from `withContext(<arg>)` into
158
+ * one of the canonical bucket names: "IO", "Main", "Default", "Unconfined",
159
+ * or a raw string for unrecognized custom dispatchers.
160
+ *
161
+ * Handles three real-world forms, matching the most common Android Kotlin
162
+ * patterns:
163
+ *
164
+ * Dispatchers.IO → "IO" (static, kotlinx.coroutines canonical)
165
+ * dispatchers.io → "IO" (DI-injected provider, Google-recommended)
166
+ * ioDispatcher → "IO" (injected by parameter convention)
167
+ * mainDispatcher → "Main"
168
+ * defaultDispatcher → "Default"
169
+ *
170
+ * Returns null for expressions that don't look like a dispatcher at all
171
+ * (e.g. `coroutineContext` or a plain variable that isn't dispatcher-named),
172
+ * so they don't clutter the transitions report with false positives.
173
+ */
174
+ function classifyDispatcherExpression(expr) {
175
+ // 1. Static Dispatchers.X (any case on the suffix — canonical is PascalCase)
176
+ const staticMatch = /^Dispatchers\.(\w+)$/.exec(expr);
177
+ if (staticMatch)
178
+ return canonicalizeDispatcherName(staticMatch[1]);
179
+ // 2. Injected provider field — `<identifier>.<bucket>` where identifier is
180
+ // lowercase (e.g. dispatchers.io, coroutineDispatchers.main). We only
181
+ // accept recognized bucket suffixes so plain `foo.bar` isn't misreported.
182
+ const fieldMatch = /^[a-z]\w*\.(io|main|default|unconfined)$/i.exec(expr);
183
+ if (fieldMatch)
184
+ return canonicalizeDispatcherName(fieldMatch[1]);
185
+ // 3. Naming convention — `<bucket>Dispatcher` as a bare parameter.
186
+ const conventionMatch = /^(io|main|default|unconfined)Dispatcher$/i.exec(expr);
187
+ if (conventionMatch)
188
+ return canonicalizeDispatcherName(conventionMatch[1]);
189
+ return null;
190
+ }
191
+ function canonicalizeDispatcherName(raw) {
192
+ const lower = raw.toLowerCase();
193
+ if (lower === "io")
194
+ return "IO";
195
+ if (lower === "main" || lower === "mainimmediate")
196
+ return "Main";
197
+ if (lower === "default")
198
+ return "Default";
199
+ if (lower === "unconfined")
200
+ return "Unconfined";
201
+ // Preserve the original capitalization for anything we don't recognize.
202
+ return raw;
203
+ }
204
+ /**
205
+ * Determines whether a symbol is a suspend function. Checks the signature
206
+ * prefix first (populated by the Kotlin extractor for extension funcs) then
207
+ * falls back to scanning the source head for the `suspend` modifier keyword.
208
+ */
209
+ function isSuspendFunction(sym) {
210
+ if (sym.kind !== "function" && sym.kind !== "method")
211
+ return false;
212
+ if (sym.signature?.startsWith("suspend"))
213
+ return true;
214
+ const head = sym.source?.slice(0, 200);
215
+ if (!head)
216
+ return false;
217
+ return /\bsuspend\s+fun\b/.test(head);
218
+ }
219
+ /**
220
+ * Scan a suspend function's source for common Kotlin coroutine anti-patterns.
221
+ * Returns an array of warnings (one per finding) plus the dispatcher
222
+ * transitions observed in the same pass.
223
+ */
224
+ function analyzeSuspendBody(sym) {
225
+ const warnings = [];
226
+ const transitions = [];
227
+ const source = sym.source ?? "";
228
+ const fnName = sym.name;
229
+ // Dispatcher transitions. We match any `withContext(<arg>)` and then
230
+ // classify the argument into one of Kotlin's canonical dispatcher buckets.
231
+ // This covers three real-world patterns:
232
+ //
233
+ // 1. Static: withContext(Dispatchers.IO)
234
+ // 2. DI provider: withContext(dispatchers.io) — injected CoroutineDispatchers
235
+ // 3. Convention: withContext(ioDispatcher) / withContext(mainDispatcher)
236
+ //
237
+ // Pattern 2/3 are the Google-recommended testable forms and appear in most
238
+ // production Android Kotlin code. Restricting to `Dispatchers.X` would miss
239
+ // the majority of real-world usage.
240
+ const dispatcherRe = /withContext\s*\(\s*([A-Za-z_][\w.]*)\s*[,)]/g;
241
+ let m;
242
+ while ((m = dispatcherRe.exec(source)) !== null) {
243
+ const arg = m[1];
244
+ const kind = classifyDispatcherExpression(arg);
245
+ if (!kind)
246
+ continue; // Not a recognizable dispatcher expression.
247
+ const lineOffset = source.slice(0, m.index).split("\n").length - 1;
248
+ transitions.push({
249
+ function: fnName,
250
+ dispatcher: kind,
251
+ line: sym.start_line + lineOffset,
252
+ });
253
+ }
254
+ // Anti-pattern 1: runBlocking inside a suspend function.
255
+ const runBlockingMatch = /\brunBlocking\s*[\{(]/.exec(source);
256
+ if (runBlockingMatch) {
257
+ const lineOffset = source.slice(0, runBlockingMatch.index).split("\n").length - 1;
258
+ warnings.push({
259
+ function: fnName,
260
+ file: sym.file,
261
+ line: sym.start_line + lineOffset,
262
+ message: "runBlocking inside a suspend function — deadlock risk on caller's dispatcher",
263
+ severity: "critical",
264
+ });
265
+ }
266
+ // Anti-pattern 2: Thread.sleep() blocks the coroutine thread.
267
+ const threadSleepMatch = /\bThread\.sleep\s*\(/.exec(source);
268
+ if (threadSleepMatch) {
269
+ const lineOffset = source.slice(0, threadSleepMatch.index).split("\n").length - 1;
270
+ warnings.push({
271
+ function: fnName,
272
+ file: sym.file,
273
+ line: sym.start_line + lineOffset,
274
+ message: "Thread.sleep() in suspend function — blocks dispatcher thread, use delay() instead",
275
+ severity: "critical",
276
+ });
277
+ }
278
+ // Anti-pattern 3: while(true) loop without ensureActive()/isActive check
279
+ // means the coroutine can't be cancelled.
280
+ const whileTrueMatch = /\bwhile\s*\(\s*true\s*\)\s*\{([\s\S]*?)\}/.exec(source);
281
+ if (whileTrueMatch) {
282
+ const body = whileTrueMatch[1] ?? "";
283
+ const hasCancellationCheck = /\bensureActive\s*\(/.test(body) ||
284
+ /\bisActive\b/.test(body) ||
285
+ /\bcoroutineContext\.isActive\b/.test(body);
286
+ if (!hasCancellationCheck) {
287
+ const lineOffset = source.slice(0, whileTrueMatch.index).split("\n").length - 1;
288
+ warnings.push({
289
+ function: fnName,
290
+ file: sym.file,
291
+ line: sym.start_line + lineOffset,
292
+ message: "while(true) loop without ensureActive()/isActive — loop is not cancellable, coroutine will leak",
293
+ severity: "warning",
294
+ });
295
+ }
296
+ }
297
+ return { warnings, transitions };
298
+ }
299
+ /**
300
+ * Trace the suspend function call chain starting from `functionName`. Walks
301
+ * out up to `depth` levels through callees (identified by text scan of the
302
+ * source), filtering to suspend-only nodes. Emits dispatcher transitions and
303
+ * coroutine anti-pattern warnings for each visited function.
304
+ *
305
+ * Walk strategy: we look up each callee name in the symbol index. When a
306
+ * function body contains `otherFn(`, we recurse into the symbol named
307
+ * `otherFn` if it exists and is a suspend function. This is intentionally
308
+ * lexical (not call-graph) — accurate enough for typical coroutine code and
309
+ * avoids a full graph build.
310
+ */
311
+ export async function traceSuspendChain(repo, functionName, options) {
312
+ const index = await getCodeIndex(repo);
313
+ if (!index) {
314
+ throw new Error(`Repository "${repo}" not found. Index it first with index_folder.`);
315
+ }
316
+ const maxDepth = options?.depth ?? 3;
317
+ const root = index.symbols.find((s) => s.name === functionName && (s.kind === "function" || s.kind === "method"));
318
+ if (!root) {
319
+ throw new Error(`Suspend function "${functionName}" not found.`);
320
+ }
321
+ if (!isSuspendFunction(root)) {
322
+ throw new Error(`"${functionName}" is not a suspend function.`);
323
+ }
324
+ // Pre-index suspend functions by name for O(1) callee lookup.
325
+ const suspendByName = new Map();
326
+ for (const sym of index.symbols) {
327
+ if (isSuspendFunction(sym))
328
+ suspendByName.set(sym.name, sym);
329
+ }
330
+ const chain = [];
331
+ const visited = new Set();
332
+ const allWarnings = [];
333
+ const allTransitions = [];
334
+ function walk(sym, level) {
335
+ if (visited.has(sym.id) || level > maxDepth)
336
+ return;
337
+ visited.add(sym.id);
338
+ chain.push(sym.name);
339
+ const { warnings, transitions } = analyzeSuspendBody(sym);
340
+ allWarnings.push(...warnings);
341
+ allTransitions.push(...transitions);
342
+ if (level === maxDepth)
343
+ return;
344
+ // Lexical callee discovery: find identifiers followed by ( in the body
345
+ // and follow them if they map to a known suspend function.
346
+ const source = sym.source ?? "";
347
+ const callRe = /\b([a-z]\w*)\s*\(/g;
348
+ const calleesSeen = new Set();
349
+ let m;
350
+ while ((m = callRe.exec(source)) !== null) {
351
+ const name = m[1];
352
+ if (name === sym.name || calleesSeen.has(name))
353
+ continue;
354
+ calleesSeen.add(name);
355
+ const callee = suspendByName.get(name);
356
+ if (callee && callee.id !== sym.id)
357
+ walk(callee, level + 1);
358
+ }
359
+ }
360
+ walk(root, 0);
361
+ return {
362
+ root: root.name,
363
+ chain,
364
+ dispatcher_transitions: allTransitions,
365
+ warnings: allWarnings,
366
+ depth: maxDepth,
367
+ };
368
+ }
369
+ /**
370
+ * Parse the source set segment from a KMP-layout file path. Returns the
371
+ * source set name (e.g. "commonMain", "androidMain") or null when the file
372
+ * isn't under a recognized `src/<name>Main/kotlin/` layout.
373
+ */
374
+ function parseSourceSet(filePath) {
375
+ const match = /src\/(\w+Main)\/kotlin\//.exec(filePath);
376
+ return match?.[1] ?? null;
377
+ }
378
+ /**
379
+ * Analyze KMP expect/actual declarations across source sets. Groups symbols
380
+ * tagged with `meta.kmp_modifier` by simple name, splits them into expects
381
+ * and actuals, and reports three verdicts per declaration:
382
+ *
383
+ * - matched: commonMain expect + at least one platform actual
384
+ * - missing_actuals: commonMain expect but one or more platform source
385
+ * sets (discovered from the index files list) have no
386
+ * corresponding `actual`
387
+ * - orphan_actuals: actual without any commonMain expect
388
+ */
389
+ export async function analyzeKmpDeclarations(repo) {
390
+ const index = await getCodeIndex(repo);
391
+ if (!index) {
392
+ throw new Error(`Repository "${repo}" not found. Index it first with index_folder.`);
393
+ }
394
+ // Discover all source sets present in the repo (from file paths) so we can
395
+ // compute missing_actuals against the ones that actually exist. Fallback
396
+ // list covers the common KMP targets when source sets can't be detected
397
+ // from the files array.
398
+ const sourceSetsInRepo = new Set();
399
+ for (const file of index.files) {
400
+ const sourceSet = parseSourceSet(file.path);
401
+ if (sourceSet)
402
+ sourceSetsInRepo.add(sourceSet);
403
+ }
404
+ // Drop commonMain from the "platforms to check" list — commonMain holds
405
+ // expects, not actuals.
406
+ const platformSourceSets = [...sourceSetsInRepo].filter((s) => s !== "commonMain");
407
+ const groups = new Map();
408
+ for (const sym of index.symbols) {
409
+ const kmp = sym.meta?.["kmp_modifier"];
410
+ if (kmp !== "expect" && kmp !== "actual")
411
+ continue;
412
+ const sourceSet = parseSourceSet(sym.file);
413
+ if (!sourceSet)
414
+ continue;
415
+ const key = `${sym.kind}::${sym.name}`;
416
+ let group = groups.get(key);
417
+ if (!group) {
418
+ group = { expects: [], actuals: [] };
419
+ groups.set(key, group);
420
+ }
421
+ if (kmp === "expect") {
422
+ group.expects.push({ sym, sourceSet });
423
+ }
424
+ else {
425
+ group.actuals.push({ sym, sourceSet });
426
+ }
427
+ }
428
+ const matched = [];
429
+ const missingActuals = [];
430
+ const orphanActuals = [];
431
+ let fullyMatched = 0;
432
+ for (const group of groups.values()) {
433
+ if (group.expects.length === 0) {
434
+ // All entries are actuals with no expect → orphans.
435
+ for (const { sym, sourceSet } of group.actuals) {
436
+ orphanActuals.push({
437
+ name: sym.name,
438
+ kind: sym.kind,
439
+ source_set: sourceSet,
440
+ file: sym.file,
441
+ });
442
+ }
443
+ continue;
444
+ }
445
+ // A group has an expect. Walk each expect (usually just one from
446
+ // commonMain) and check actuals.
447
+ for (const expectEntry of group.expects) {
448
+ const actualSets = group.actuals.map((a) => a.sourceSet);
449
+ const missingFrom = platformSourceSets.filter((s) => !actualSets.includes(s));
450
+ if (missingFrom.length === 0 && actualSets.length > 0) {
451
+ fullyMatched++;
452
+ }
453
+ if (actualSets.length > 0) {
454
+ matched.push({
455
+ name: expectEntry.sym.name,
456
+ kind: expectEntry.sym.kind,
457
+ expect_source_set: expectEntry.sourceSet,
458
+ actual_source_sets: actualSets,
459
+ });
460
+ }
461
+ if (missingFrom.length > 0) {
462
+ missingActuals.push({
463
+ name: expectEntry.sym.name,
464
+ kind: expectEntry.sym.kind,
465
+ source_set: expectEntry.sourceSet,
466
+ missing_from: missingFrom,
467
+ });
468
+ }
469
+ }
470
+ }
471
+ return {
472
+ total_expects: [...groups.values()].reduce((n, g) => n + g.expects.length, 0),
473
+ fully_matched: fullyMatched,
474
+ source_sets_detected: [...sourceSetsInRepo].sort(),
475
+ matched,
476
+ missing_actuals: missingActuals,
477
+ orphan_actuals: orphanActuals,
478
+ };
479
+ }
480
+ /**
481
+ * Known Kotlin Flow operators — used to detect and classify operator chains.
482
+ * Categorized into transform, filter, combine, terminal, and lifecycle
483
+ * so downstream tools can reason about the chain semantics.
484
+ */
485
+ const FLOW_OPERATORS = new Set([
486
+ // transform
487
+ "map", "mapNotNull", "mapLatest", "transform", "transformLatest",
488
+ "flatMapConcat", "flatMapMerge", "flatMapLatest",
489
+ // filter
490
+ "filter", "filterNotNull", "filterNot", "filterIsInstance",
491
+ "distinctUntilChanged", "distinctUntilChangedBy", "debounce", "sample",
492
+ "take", "takeWhile", "drop", "dropWhile",
493
+ // combine / merge
494
+ "combine", "zip", "merge", "onStart", "onEmpty",
495
+ // lifecycle / side-effect
496
+ "onEach", "onCompletion", "catch", "retry", "retryWhen",
497
+ "flowOn", "buffer", "conflate", "cancellable",
498
+ // terminal
499
+ "collect", "collectLatest", "first", "firstOrNull", "single",
500
+ "singleOrNull", "toList", "toSet", "fold", "reduce", "count",
501
+ // conversion
502
+ "stateIn", "shareIn", "asLiveData", "asFlow",
503
+ ]);
504
+ const FLOW_TERMINAL_OPS = new Set([
505
+ "collect", "collectLatest", "first", "firstOrNull", "single",
506
+ "singleOrNull", "toList", "toSet", "fold", "reduce", "count",
507
+ ]);
508
+ /**
509
+ * Trace a Kotlin Flow operator chain from a function or property. Scans the
510
+ * symbol source for `.operator(` calls matching known Flow operators, reports
511
+ * the ordered chain, and flags common issues:
512
+ *
513
+ * - `.collect` without `.catch` — unhandled exception in flow
514
+ * - `.stateIn(initialValue=...)` without a scope parameter — missing
515
+ * lifecycle binding (requires `viewModelScope` or `lifecycleScope`)
516
+ *
517
+ * The function name can be either a function returning Flow<T> or a property
518
+ * initialized with a Flow chain.
519
+ */
520
+ export async function traceFlowChain(repo, symbolName) {
521
+ const index = await getCodeIndex(repo);
522
+ if (!index) {
523
+ throw new Error(`Repository "${repo}" not found. Index it first with index_folder.`);
524
+ }
525
+ const sym = index.symbols.find((s) => s.name === symbolName);
526
+ if (!sym) {
527
+ throw new Error(`Symbol "${symbolName}" not found.`);
528
+ }
529
+ const source = sym.source ?? "";
530
+ // Detect Flow operators — `.operatorName(` or `.operatorName {`
531
+ const operatorRe = /\.(\w+)\s*[({]/g;
532
+ const operators = [];
533
+ let m;
534
+ while ((m = operatorRe.exec(source)) !== null) {
535
+ const op = m[1];
536
+ if (FLOW_OPERATORS.has(op))
537
+ operators.push(op);
538
+ }
539
+ if (operators.length === 0) {
540
+ throw new Error(`"${symbolName}" has no Flow operator chain detected.`);
541
+ }
542
+ const hasTerminal = operators.some((op) => FLOW_TERMINAL_OPS.has(op));
543
+ const hasCatch = operators.includes("catch");
544
+ const hasCollect = operators.includes("collect") || operators.includes("collectLatest");
545
+ const hasStateIn = operators.includes("stateIn");
546
+ const warnings = [];
547
+ // Warn 1: collect without catch — unhandled exception in the flow.
548
+ if (hasCollect && !hasCatch) {
549
+ warnings.push(`.collect without .catch — exceptions in the upstream flow propagate to the collector and crash the coroutine`);
550
+ }
551
+ // Warn 2: stateIn without scope (approximate: check if "scope" or
552
+ // "viewModelScope" or "lifecycleScope" appears near stateIn).
553
+ if (hasStateIn) {
554
+ const stateInIdx = source.indexOf(".stateIn(");
555
+ if (stateInIdx !== -1) {
556
+ const stateInContext = source.slice(stateInIdx, stateInIdx + 200);
557
+ if (!/\bscope\b|\bviewModelScope\b|\blifecycleScope\b|\bcoroutineScope\b/i.test(stateInContext)) {
558
+ warnings.push(`.stateIn without a lifecycle scope parameter — the StateFlow will never complete, causing a memory leak unless bound to viewModelScope/lifecycleScope`);
559
+ }
560
+ }
561
+ }
562
+ return {
563
+ root: sym.name,
564
+ file: sym.file,
565
+ start_line: sym.start_line,
566
+ operators,
567
+ operator_count: operators.length,
568
+ has_terminal: hasTerminal,
569
+ warnings,
570
+ };
571
+ }
572
+ //# sourceMappingURL=kotlin-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kotlin-tools.js","sourceRoot":"","sources":["../../src/tools/kotlin-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Legacy regex-based Hono convention extractor.
3
+ * Preserved as a kill-switch fallback (CODESIFT_LEGACY_HONO=1) during
4
+ * the migration to the tree-sitter AST extractor.
5
+ *
6
+ * This file is a verbatim copy of the original regex functions from
7
+ * project-tools.ts as of 2026-04-10 (pre-AST migration).
8
+ *
9
+ * DO NOT MODIFY — this is the frozen legacy implementation.
10
+ * Delete after 2-week migration window per spec rollback strategy.
11
+ */
12
+ import type { Conventions } from "./project-tools.js";
13
+ export declare function legacyExtractHonoConventions(source: string, filePath: string): Conventions;
14
+ //# sourceMappingURL=legacy-hono-conventions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-hono-conventions.d.ts","sourceRoot":"","sources":["../../src/tools/legacy-hono-conventions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAoD,MAAM,oBAAoB,CAAC;AA4DxG,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAyE1F"}