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,460 @@
1
+ /**
2
+ * Next.js component classifier: AST-based Server/Client component detection.
3
+ *
4
+ * Uses a two-stage directive detection strategy:
5
+ * 1. Fast-reject: scan first 512 bytes for "use client"/"use server" substring
6
+ * 2. AST confirm: verify directive is `Program.body[0]` ExpressionStatement
7
+ *
8
+ * Then walks the AST for client-component signals (hooks, JSX event handlers,
9
+ * browser globals, `next/dynamic({ ssr: false })`) and classifies each file
10
+ * per the 8-row decision table.
11
+ */
12
+ import { readFile } from "node:fs/promises";
13
+ import { relative, join } from "node:path";
14
+ import { cachedParseFile as parseFile } from "../utils/nextjs-audit-cache.js";
15
+ import { scanDirective, discoverWorkspaces } from "../utils/nextjs.js";
16
+ import { cachedWalkDirectory as walkDirectory } from "../utils/nextjs-audit-cache.js";
17
+ import { getCodeIndex } from "./index-tools.js";
18
+ // ---------------------------------------------------------------------------
19
+ // Constants
20
+ // ---------------------------------------------------------------------------
21
+ export const MAX_FILE_SIZE_BYTES = 2_097_152; // 2 MB hard cap per file
22
+ export const DEFAULT_MAX_FILES = 2000;
23
+ export const PARSE_CONCURRENCY = 10;
24
+ /** Hooks that are server-safe (or SSR-safe) and don't imply client component. */
25
+ export const CLIENT_HOOKS_EXCLUDE = new Set(["useId"]);
26
+ /** JSX event attributes that imply client component. */
27
+ export const EVENT_HANDLER_ATTRS = new Set([
28
+ "onClick", "onChange", "onSubmit", "onInput", "onFocus", "onBlur",
29
+ "onKeyDown", "onKeyUp", "onKeyPress",
30
+ "onMouseDown", "onMouseUp", "onMouseMove", "onMouseEnter", "onMouseLeave", "onMouseOver", "onMouseOut",
31
+ "onTouchStart", "onTouchEnd", "onTouchMove",
32
+ "onDrag", "onDrop", "onDragOver", "onDragEnd", "onDragStart", "onDragLeave", "onDragEnter",
33
+ "onScroll", "onWheel",
34
+ "onAnimationStart", "onAnimationEnd", "onTransitionEnd",
35
+ "onLoad", "onError",
36
+ "onCopy", "onCut", "onPaste",
37
+ ]);
38
+ /** Browser-only globals (detected in MemberExpressions like `window.foo`). */
39
+ export const BROWSER_GLOBALS = new Set([
40
+ "window", "document", "localStorage", "sessionStorage",
41
+ "navigator", "location", "history",
42
+ ]);
43
+ // ---------------------------------------------------------------------------
44
+ // Classification decision table
45
+ // ---------------------------------------------------------------------------
46
+ /**
47
+ * Pure decision table for component classification. No I/O, no AST access.
48
+ *
49
+ * Rules (in priority order):
50
+ * - directive === "use client":
51
+ * has any signal -> client_explicit
52
+ * no signals -> client_explicit + violation "unnecessary_use_client"
53
+ * - directive === "use server" -> server
54
+ * - directive === null:
55
+ * has any signal -> client_inferred
56
+ * no signals -> server
57
+ */
58
+ export function applyClassificationTable(directive, signals) {
59
+ const hasAnySignal = signals.hooks.length > 0 ||
60
+ signals.event_handlers.length > 0 ||
61
+ signals.browser_globals.length > 0 ||
62
+ signals.dynamic_ssr_false;
63
+ if (directive === "use client") {
64
+ return {
65
+ classification: "client_explicit",
66
+ violations: hasAnySignal ? [] : ["unnecessary_use_client"],
67
+ };
68
+ }
69
+ if (directive === "use server") {
70
+ return { classification: "server", violations: [] };
71
+ }
72
+ // directive === null
73
+ return {
74
+ classification: hasAnySignal ? "client_inferred" : "server",
75
+ violations: [],
76
+ };
77
+ }
78
+ // ---------------------------------------------------------------------------
79
+ // Signal detection (hooks, JSX event handlers, browser globals, next/dynamic)
80
+ // ---------------------------------------------------------------------------
81
+ const HOOK_NAME_RE = /^use[A-Z]\w*$/;
82
+ /**
83
+ * Walk the AST to collect client-component signals:
84
+ * - hooks — call_expression whose callee identifier matches /^use[A-Z]/
85
+ * - events — jsx_attribute property_identifier in EVENT_HANDLER_ATTRS
86
+ * - globals — member_expression object identifier in BROWSER_GLOBALS
87
+ * - next/dynamic({ ssr: false }) — import from "next/dynamic" + call with ssr:false
88
+ */
89
+ export function detectSignals(tree, _source) {
90
+ const hooks = new Set();
91
+ const event_handlers = new Set();
92
+ const browser_globals = new Set();
93
+ let dynamic_ssr_false = false;
94
+ const root = tree.rootNode;
95
+ // Hooks: call_expression with identifier callee matching /^use[A-Z]/
96
+ for (const call of root.descendantsOfType("call_expression")) {
97
+ const fn = call.childForFieldName("function") ?? call.namedChild(0);
98
+ if (fn?.type === "identifier") {
99
+ const name = fn.text;
100
+ if (HOOK_NAME_RE.test(name) && !CLIENT_HOOKS_EXCLUDE.has(name)) {
101
+ hooks.add(name);
102
+ }
103
+ }
104
+ }
105
+ // JSX event handlers
106
+ for (const attr of root.descendantsOfType("jsx_attribute")) {
107
+ const nameNode = attr.namedChild(0);
108
+ if (nameNode?.type === "property_identifier" || nameNode?.type === "identifier") {
109
+ const name = nameNode.text;
110
+ if (EVENT_HANDLER_ATTRS.has(name)) {
111
+ event_handlers.add(name);
112
+ }
113
+ }
114
+ }
115
+ // Browser globals via member_expression (e.g. window.location)
116
+ for (const mem of root.descendantsOfType("member_expression")) {
117
+ const obj = mem.childForFieldName("object") ?? mem.namedChild(0);
118
+ if (obj?.type === "identifier" && BROWSER_GLOBALS.has(obj.text)) {
119
+ browser_globals.add(obj.text);
120
+ }
121
+ }
122
+ // next/dynamic with { ssr: false }
123
+ // Only trust if there's an import from "next/dynamic". We then look for any
124
+ // call expression with second argument containing { ssr: false }.
125
+ const importsNextDynamic = root
126
+ .descendantsOfType("import_statement")
127
+ .some((imp) => {
128
+ // The module source is a direct string child of import_statement
129
+ for (const child of imp.namedChildren) {
130
+ if (child.type === "string") {
131
+ const frag = child.namedChild(0);
132
+ const text = frag?.type === "string_fragment" ? frag.text : child.text.slice(1, -1);
133
+ if (text === "next/dynamic")
134
+ return true;
135
+ }
136
+ }
137
+ return false;
138
+ });
139
+ if (importsNextDynamic) {
140
+ for (const call of root.descendantsOfType("call_expression")) {
141
+ const fn = call.childForFieldName("function") ?? call.namedChild(0);
142
+ if (fn?.type !== "identifier" || fn.text !== "dynamic")
143
+ continue;
144
+ const args = call.childForFieldName("arguments") ?? call.namedChild(1);
145
+ if (!args)
146
+ continue;
147
+ // Find the second argument (an object with ssr: false)
148
+ const argChildren = args.namedChildren;
149
+ if (argChildren.length < 2)
150
+ continue;
151
+ const opts = argChildren[1];
152
+ if (!opts || opts.type !== "object")
153
+ continue;
154
+ // Iterate pairs that are direct named children of the options object.
155
+ for (const pair of opts.namedChildren) {
156
+ if (pair.type !== "pair")
157
+ continue;
158
+ const key = pair.childForFieldName("key") ?? pair.namedChild(0);
159
+ if (!key)
160
+ continue;
161
+ const keyText = key.type === "property_identifier" || key.type === "identifier"
162
+ ? key.text
163
+ : key.type === "string"
164
+ ? key.text.slice(1, -1)
165
+ : null;
166
+ if (keyText !== "ssr")
167
+ continue;
168
+ const value = pair.childForFieldName("value") ?? pair.namedChild(1);
169
+ if (value?.type === "false") {
170
+ dynamic_ssr_false = true;
171
+ break;
172
+ }
173
+ }
174
+ }
175
+ }
176
+ return {
177
+ hooks: [...hooks],
178
+ event_handlers: [...event_handlers],
179
+ browser_globals: [...browser_globals],
180
+ dynamic_ssr_false,
181
+ };
182
+ }
183
+ // ---------------------------------------------------------------------------
184
+ // Two-stage directive detection
185
+ // ---------------------------------------------------------------------------
186
+ /**
187
+ * Confirm a file-level directive by inspecting `Program.body[0]`.
188
+ *
189
+ * Tree-sitter's tsx/typescript grammars expose top-level directive strings as
190
+ * an `expression_statement` whose first named child is a `string` literal
191
+ * (a `"use client"` or `"use server"` token). Any other shape — including a
192
+ * nested block, inline comment, or non-first statement — must return `null`.
193
+ */
194
+ export function confirmDirectiveFromTree(tree) {
195
+ const root = tree.rootNode;
196
+ const first = root.namedChildren[0];
197
+ if (!first)
198
+ return null;
199
+ if (first.type !== "expression_statement")
200
+ return null;
201
+ const exprChild = first.namedChildren[0];
202
+ if (!exprChild)
203
+ return null;
204
+ if (exprChild.type !== "string")
205
+ return null;
206
+ // tree-sitter `string` nodes have fragment children containing the text
207
+ // between the quotes. Strip the surrounding quotes via .text and compare.
208
+ const raw = exprChild.text;
209
+ if (raw.length < 3)
210
+ return null;
211
+ const inner = raw.slice(1, -1);
212
+ if (inner === "use client")
213
+ return "use client";
214
+ if (inner === "use server")
215
+ return "use server";
216
+ return null;
217
+ }
218
+ /**
219
+ * Classify a single file. Returns a partial entry with the directive field
220
+ * populated. Signal detection + final classification are added by the
221
+ * orchestrator (Task 23) via `detectSignals` (Task 21) and
222
+ * `applyClassificationTable` (Task 22).
223
+ */
224
+ export async function classifyFile(filePath, repoRoot) {
225
+ const relPath = relative(repoRoot, filePath);
226
+ const emptySignals = {
227
+ hooks: [],
228
+ event_handlers: [],
229
+ browser_globals: [],
230
+ dynamic_ssr_false: false,
231
+ };
232
+ // Stage 1: fast-reject via 512-byte window
233
+ const stage1 = await scanDirective(filePath);
234
+ // Stage 2: parse file via tree-sitter
235
+ let source;
236
+ try {
237
+ source = await readFile(filePath, "utf8");
238
+ }
239
+ catch {
240
+ return {
241
+ path: relPath,
242
+ classification: "ambiguous",
243
+ directive: null,
244
+ signals: emptySignals,
245
+ violations: [],
246
+ };
247
+ }
248
+ const tree = await parseFile(filePath, source);
249
+ if (!tree) {
250
+ return {
251
+ path: relPath,
252
+ classification: "ambiguous",
253
+ directive: null,
254
+ signals: emptySignals,
255
+ violations: [],
256
+ };
257
+ }
258
+ // Stage 3: confirm directive via AST (only if stage 1 matched)
259
+ let directive = null;
260
+ if (stage1 !== null) {
261
+ directive = confirmDirectiveFromTree(tree);
262
+ }
263
+ // Note: signal detection and final classification are layered in by
264
+ // Tasks 21-23. For now we return a stub classification — the orchestrator
265
+ // rebuilds this via detectSignals + applyClassificationTable.
266
+ return {
267
+ path: relPath,
268
+ classification: directive === "use client" ? "client_explicit" : "server",
269
+ directive,
270
+ signals: emptySignals,
271
+ violations: [],
272
+ };
273
+ }
274
+ // ---------------------------------------------------------------------------
275
+ // Orchestrator (stub for Task 19)
276
+ // ---------------------------------------------------------------------------
277
+ /** Extensions we consider candidates for classification. */
278
+ const COMPONENT_EXTS = new Set([".tsx", ".jsx"]);
279
+ /**
280
+ * Analyze a Next.js repository for Server/Client component classification.
281
+ *
282
+ * Flow:
283
+ * 1. Kill switch check (`CODESIFT_DISABLE_TOOLS`)
284
+ * 2. Resolve project root via `getCodeIndex(repo).root`
285
+ * 3. Determine workspaces: explicit `workspace` param, `discoverWorkspaces()`,
286
+ * or single root.
287
+ * 4. For each workspace, walk `app/` for `.tsx`/`.jsx` files.
288
+ * 5. Process in batches of `PARSE_CONCURRENCY` — for each file:
289
+ * a. `classifyFile` for directive
290
+ * b. `detectSignals` on the parsed tree (re-parses — acceptable for v1)
291
+ * c. `applyClassificationTable` to finalize classification + violations
292
+ * 6. Aggregate counts; honor `max_files`.
293
+ */
294
+ export async function analyzeNextjsComponents(repo, options) {
295
+ if (process.env.CODESIFT_DISABLE_TOOLS?.includes("analyze_nextjs_components")) {
296
+ throw new Error("analyze_nextjs_components is disabled via CODESIFT_DISABLE_TOOLS");
297
+ }
298
+ const index = await getCodeIndex(repo);
299
+ if (!index) {
300
+ throw new Error(`Repository not found: ${repo}. Run index_folder first.`);
301
+ }
302
+ const projectRoot = index.root;
303
+ // Resolve workspaces
304
+ let workspaces;
305
+ if (options?.workspace) {
306
+ workspaces = [join(projectRoot, options.workspace)];
307
+ }
308
+ else {
309
+ const discovered = await discoverWorkspaces(projectRoot);
310
+ workspaces = discovered.length > 0
311
+ ? discovered.map((w) => w.root)
312
+ : [projectRoot];
313
+ }
314
+ const maxFiles = options?.max_files ?? DEFAULT_MAX_FILES;
315
+ const files = [];
316
+ const parse_failures = [];
317
+ const scan_errors = [];
318
+ const workspaces_scanned = [];
319
+ let truncated = false;
320
+ let truncated_at;
321
+ for (const workspace of workspaces) {
322
+ workspaces_scanned.push(workspace);
323
+ // Walk app/ and src/app/ subtrees
324
+ const candidates = [];
325
+ for (const appDir of ["app", "src/app"]) {
326
+ const fullAppDir = join(workspace, appDir);
327
+ try {
328
+ const walked = await walkDirectory(fullAppDir, {
329
+ followSymlinks: true,
330
+ fileFilter: (ext) => COMPONENT_EXTS.has(ext),
331
+ maxFileSize: MAX_FILE_SIZE_BYTES,
332
+ });
333
+ candidates.push(...walked);
334
+ }
335
+ catch (err) {
336
+ scan_errors.push(`${fullAppDir}: ${err instanceof Error ? err.message : String(err)}`);
337
+ }
338
+ }
339
+ // Apply max_files cap across all workspaces
340
+ const remaining = maxFiles - files.length;
341
+ const toProcess = candidates.slice(0, Math.max(0, remaining));
342
+ if (candidates.length > remaining) {
343
+ truncated = true;
344
+ truncated_at = maxFiles;
345
+ }
346
+ // Batch process with concurrency
347
+ for (let i = 0; i < toProcess.length; i += PARSE_CONCURRENCY) {
348
+ const chunk = toProcess.slice(i, i + PARSE_CONCURRENCY);
349
+ const entries = await Promise.all(chunk.map(async (filePath) => {
350
+ try {
351
+ return await classifyAndDetect(filePath, projectRoot);
352
+ }
353
+ catch (err) {
354
+ const rel = relative(projectRoot, filePath);
355
+ parse_failures.push(`${rel}: ${err instanceof Error ? err.message : String(err)}`);
356
+ return null;
357
+ }
358
+ }));
359
+ for (const entry of entries) {
360
+ if (entry === null)
361
+ continue;
362
+ if (entry.classification === "ambiguous") {
363
+ parse_failures.push(entry.path);
364
+ }
365
+ files.push(entry);
366
+ }
367
+ }
368
+ }
369
+ // Aggregate counts
370
+ const counts = {
371
+ total: files.length,
372
+ server: 0,
373
+ client_explicit: 0,
374
+ client_inferred: 0,
375
+ ambiguous: 0,
376
+ unnecessary_use_client: 0,
377
+ };
378
+ for (const f of files) {
379
+ counts[f.classification]++;
380
+ if (f.violations.includes("unnecessary_use_client")) {
381
+ counts.unnecessary_use_client++;
382
+ }
383
+ }
384
+ const result = {
385
+ files,
386
+ counts,
387
+ parse_failures,
388
+ scan_errors,
389
+ truncated,
390
+ workspaces_scanned,
391
+ limitations: ["no transitive client boundary detection via barrel files"],
392
+ };
393
+ if (truncated_at !== undefined) {
394
+ result.truncated_at = truncated_at;
395
+ }
396
+ return result;
397
+ }
398
+ /**
399
+ * Run classifyFile, then (if we got a usable tree) re-parse for signals and
400
+ * run the classification table. Factored out to keep the orchestrator clean.
401
+ */
402
+ async function classifyAndDetect(filePath, repoRoot) {
403
+ const relPath = relative(repoRoot, filePath);
404
+ const emptySig = {
405
+ hooks: [],
406
+ event_handlers: [],
407
+ browser_globals: [],
408
+ dynamic_ssr_false: false,
409
+ };
410
+ const directive = await scanDirective(filePath);
411
+ let source;
412
+ try {
413
+ source = await readFile(filePath, "utf8");
414
+ }
415
+ catch {
416
+ return {
417
+ path: relPath,
418
+ classification: "ambiguous",
419
+ directive: null,
420
+ signals: emptySig,
421
+ violations: [],
422
+ };
423
+ }
424
+ const tree = await parseFile(filePath, source);
425
+ if (!tree) {
426
+ return {
427
+ path: relPath,
428
+ classification: "ambiguous",
429
+ directive: null,
430
+ signals: emptySig,
431
+ violations: [],
432
+ };
433
+ }
434
+ // Confirm directive via AST
435
+ const confirmedDirective = directive !== null
436
+ ? confirmDirectiveFromTree(tree)
437
+ : null;
438
+ const signals = detectSignals(tree, source);
439
+ const { classification, violations } = applyClassificationTable(confirmedDirective, signals);
440
+ // Q1 — populate actionable suggested_fix for remediable states.
441
+ let suggested_fix;
442
+ if (violations.includes("unnecessary_use_client")) {
443
+ suggested_fix = "Remove 'use client' directive (no client signals detected)";
444
+ }
445
+ else if (classification === "client_inferred") {
446
+ suggested_fix = "Add 'use client' directive at top of file";
447
+ }
448
+ const entry = {
449
+ path: relPath,
450
+ classification,
451
+ directive: confirmedDirective,
452
+ signals,
453
+ violations,
454
+ };
455
+ if (suggested_fix !== undefined) {
456
+ entry.suggested_fix = suggested_fix;
457
+ }
458
+ return entry;
459
+ }
460
+ //# sourceMappingURL=nextjs-component-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs-component-tools.js","sourceRoot":"","sources":["../../src/tools/nextjs-component-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Next.js data flow analyzer (T6).
3
+ *
4
+ * Walks `app/**\/page.{tsx,jsx}` files for `fetch()`, `cookies()`, `headers()`
5
+ * calls (via the shared `extractFetchCalls` helper) and classifies fetch
6
+ * patterns as waterfall vs parallel, plus cache strategy. Returns per-page
7
+ * data flow entries with aggregate counts.
8
+ */
9
+ import { type FetchCall } from "../utils/nextjs.js";
10
+ export type CacheStrategy = "cached" | "no-cache" | "default" | string;
11
+ export interface FetchAnalysis {
12
+ fetches: FetchCall[];
13
+ waterfall_pairs: Array<{
14
+ first: number;
15
+ second: number;
16
+ }>;
17
+ }
18
+ export interface DataFlowEntry {
19
+ url_path: string;
20
+ file: string;
21
+ fetches: FetchCall[];
22
+ waterfall_count: number;
23
+ cache_distribution: Record<string, number>;
24
+ }
25
+ export interface NextjsDataFlowResult {
26
+ entries: DataFlowEntry[];
27
+ total_pages: number;
28
+ total_waterfalls: number;
29
+ cache_summary: Record<string, number>;
30
+ workspaces_scanned: string[];
31
+ parse_failures: string[];
32
+ scan_errors: string[];
33
+ limitations: string[];
34
+ }
35
+ export interface NextjsDataFlowOptions {
36
+ workspace?: string | undefined;
37
+ url_path?: string | undefined;
38
+ }
39
+ export declare function classifyFetches(fetches: FetchCall[]): FetchAnalysis;
40
+ export declare function classifyCacheStrategy(fetch: FetchCall): CacheStrategy;
41
+ export declare function nextjsDataFlow(repo: string, options?: NextjsDataFlowOptions): Promise<NextjsDataFlowResult>;
42
+ //# sourceMappingURL=nextjs-data-flow-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs-data-flow-tools.d.ts","sourceRoot":"","sources":["../../src/tools/nextjs-data-flow-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AAS5B,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,eAAe,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAMD,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAanE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,CAQrE;AAWD,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CA4G/B"}