codesift-mcp 0.9.5 → 0.10.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 (1358) hide show
  1. package/README.md +62 -23
  2. package/dist/cli/commands.d.ts.map +1 -1
  3. package/dist/cli/commands.js +92 -2
  4. package/dist/cli/commands.js.map +1 -1
  5. package/dist/cli/help.d.ts +1 -1
  6. package/dist/cli/help.d.ts.map +1 -1
  7. package/dist/cli/help.js +18 -0
  8. package/dist/cli/help.js.map +1 -1
  9. package/dist/cli/hooks/input.d.ts +11 -0
  10. package/dist/cli/hooks/input.d.ts.map +1 -0
  11. package/dist/cli/hooks/input.js +111 -0
  12. package/dist/cli/hooks/input.js.map +1 -0
  13. package/dist/cli/hooks/post-tool-use.d.ts +2 -0
  14. package/dist/cli/hooks/post-tool-use.d.ts.map +1 -0
  15. package/dist/cli/hooks/post-tool-use.js +339 -0
  16. package/dist/cli/hooks/post-tool-use.js.map +1 -0
  17. package/dist/cli/hooks/pre-compact.d.ts +2 -0
  18. package/dist/cli/hooks/pre-compact.d.ts.map +1 -0
  19. package/dist/cli/hooks/pre-compact.js +41 -0
  20. package/dist/cli/hooks/pre-compact.js.map +1 -0
  21. package/dist/cli/hooks/pre-tool-use.d.ts +5 -0
  22. package/dist/cli/hooks/pre-tool-use.d.ts.map +1 -0
  23. package/dist/cli/hooks/pre-tool-use.js +215 -0
  24. package/dist/cli/hooks/pre-tool-use.js.map +1 -0
  25. package/dist/cli/hooks/session.d.ts +5 -0
  26. package/dist/cli/hooks/session.d.ts.map +1 -0
  27. package/dist/cli/hooks/session.js +188 -0
  28. package/dist/cli/hooks/session.js.map +1 -0
  29. package/dist/cli/hooks/shared.d.ts +6 -0
  30. package/dist/cli/hooks/shared.d.ts.map +1 -0
  31. package/dist/cli/hooks/shared.js +70 -0
  32. package/dist/cli/hooks/shared.js.map +1 -0
  33. package/dist/cli/hooks/wiki.d.ts +10 -0
  34. package/dist/cli/hooks/wiki.d.ts.map +1 -0
  35. package/dist/cli/hooks/wiki.js +202 -0
  36. package/dist/cli/hooks/wiki.js.map +1 -0
  37. package/dist/cli/hooks.d.ts +5 -16
  38. package/dist/cli/hooks.d.ts.map +1 -1
  39. package/dist/cli/hooks.js +5 -1132
  40. package/dist/cli/hooks.js.map +1 -1
  41. package/dist/cli/setup/claude.d.ts +4 -0
  42. package/dist/cli/setup/claude.d.ts.map +1 -0
  43. package/dist/cli/setup/claude.js +123 -0
  44. package/dist/cli/setup/claude.js.map +1 -0
  45. package/dist/cli/setup/codex.d.ts +12 -0
  46. package/dist/cli/setup/codex.d.ts.map +1 -0
  47. package/dist/cli/setup/codex.js +182 -0
  48. package/dist/cli/setup/codex.js.map +1 -0
  49. package/dist/cli/setup/cursor.d.ts +3 -0
  50. package/dist/cli/setup/cursor.d.ts.map +1 -0
  51. package/dist/cli/setup/cursor.js +6 -0
  52. package/dist/cli/setup/cursor.js.map +1 -0
  53. package/dist/cli/setup/fs.d.ts +6 -0
  54. package/dist/cli/setup/fs.d.ts.map +1 -0
  55. package/dist/cli/setup/fs.js +44 -0
  56. package/dist/cli/setup/fs.js.map +1 -0
  57. package/dist/cli/setup/gemini.d.ts +5 -0
  58. package/dist/cli/setup/gemini.d.ts.map +1 -0
  59. package/dist/cli/setup/gemini.js +46 -0
  60. package/dist/cli/setup/gemini.js.map +1 -0
  61. package/dist/cli/setup/hooks.d.ts +12 -0
  62. package/dist/cli/setup/hooks.d.ts.map +1 -0
  63. package/dist/cli/setup/hooks.js +29 -0
  64. package/dist/cli/setup/hooks.js.map +1 -0
  65. package/dist/cli/setup/mcp.d.ts +13 -0
  66. package/dist/cli/setup/mcp.d.ts.map +1 -0
  67. package/dist/cli/setup/mcp.js +104 -0
  68. package/dist/cli/setup/mcp.js.map +1 -0
  69. package/dist/cli/setup/rules.d.ts +4 -0
  70. package/dist/cli/setup/rules.d.ts.map +1 -0
  71. package/dist/cli/setup/rules.js +157 -0
  72. package/dist/cli/setup/rules.js.map +1 -0
  73. package/dist/cli/setup/types.d.ts +24 -0
  74. package/dist/cli/setup/types.d.ts.map +1 -0
  75. package/dist/cli/setup/types.js +2 -0
  76. package/dist/cli/setup/types.js.map +1 -0
  77. package/dist/cli/setup.d.ts +8 -48
  78. package/dist/cli/setup.d.ts.map +1 -1
  79. package/dist/cli/setup.js +49 -705
  80. package/dist/cli/setup.js.map +1 -1
  81. package/dist/cli/telemetry-commands.d.ts +2 -0
  82. package/dist/cli/telemetry-commands.d.ts.map +1 -0
  83. package/dist/cli/telemetry-commands.js +50 -0
  84. package/dist/cli/telemetry-commands.js.map +1 -0
  85. package/dist/config.d.ts +15 -0
  86. package/dist/config.d.ts.map +1 -1
  87. package/dist/config.js +56 -2
  88. package/dist/config.js.map +1 -1
  89. package/dist/formatter-dispatch.d.ts +53 -0
  90. package/dist/formatter-dispatch.d.ts.map +1 -0
  91. package/dist/formatter-dispatch.js +54 -0
  92. package/dist/formatter-dispatch.js.map +1 -0
  93. package/dist/formatters-analysis.d.ts +9 -0
  94. package/dist/formatters-analysis.d.ts.map +1 -0
  95. package/dist/formatters-analysis.js +166 -0
  96. package/dist/formatters-analysis.js.map +1 -0
  97. package/dist/formatters-core.d.ts +200 -0
  98. package/dist/formatters-core.d.ts.map +1 -0
  99. package/dist/formatters-core.js +206 -0
  100. package/dist/formatters-core.js.map +1 -0
  101. package/dist/formatters-graph.d.ts +124 -0
  102. package/dist/formatters-graph.d.ts.map +1 -0
  103. package/dist/formatters-graph.js +175 -0
  104. package/dist/formatters-graph.js.map +1 -0
  105. package/dist/formatters-nextjs.d.ts +22 -0
  106. package/dist/formatters-nextjs.d.ts.map +1 -0
  107. package/dist/formatters-nextjs.js +394 -0
  108. package/dist/formatters-nextjs.js.map +1 -0
  109. package/dist/formatters.d.ts +8 -349
  110. package/dist/formatters.d.ts.map +1 -1
  111. package/dist/formatters.js +10 -929
  112. package/dist/formatters.js.map +1 -1
  113. package/dist/parser/astro-template/preprocess.d.ts +12 -0
  114. package/dist/parser/astro-template/preprocess.d.ts.map +1 -0
  115. package/dist/parser/astro-template/preprocess.js +34 -0
  116. package/dist/parser/astro-template/preprocess.js.map +1 -0
  117. package/dist/parser/astro-template/resolution.d.ts +16 -0
  118. package/dist/parser/astro-template/resolution.d.ts.map +1 -0
  119. package/dist/parser/astro-template/resolution.js +58 -0
  120. package/dist/parser/astro-template/resolution.js.map +1 -0
  121. package/dist/parser/astro-template/scanner.d.ts +4 -0
  122. package/dist/parser/astro-template/scanner.d.ts.map +1 -0
  123. package/dist/parser/astro-template/scanner.js +71 -0
  124. package/dist/parser/astro-template/scanner.js.map +1 -0
  125. package/dist/parser/astro-template/state.d.ts +22 -0
  126. package/dist/parser/astro-template/state.d.ts.map +1 -0
  127. package/dist/parser/astro-template/state.js +48 -0
  128. package/dist/parser/astro-template/state.js.map +1 -0
  129. package/dist/parser/astro-template/tag-processor.d.ts +3 -0
  130. package/dist/parser/astro-template/tag-processor.d.ts.map +1 -0
  131. package/dist/parser/astro-template/tag-processor.js +63 -0
  132. package/dist/parser/astro-template/tag-processor.js.map +1 -0
  133. package/dist/parser/astro-template/types.d.ts +42 -0
  134. package/dist/parser/astro-template/types.d.ts.map +1 -0
  135. package/dist/parser/astro-template/types.js +2 -0
  136. package/dist/parser/astro-template/types.js.map +1 -0
  137. package/dist/parser/astro-template.d.ts +2 -45
  138. package/dist/parser/astro-template.d.ts.map +1 -1
  139. package/dist/parser/astro-template.js +7 -168
  140. package/dist/parser/astro-template.js.map +1 -1
  141. package/dist/parser/extractors/_shared.js +1 -1
  142. package/dist/parser/extractors/_shared.js.map +1 -1
  143. package/dist/parser/extractors/astro.js +1 -1
  144. package/dist/parser/extractors/astro.js.map +1 -1
  145. package/dist/parser/extractors/conversation.js +1 -1
  146. package/dist/parser/extractors/conversation.js.map +1 -1
  147. package/dist/parser/extractors/hono-app-discovery.d.ts +4 -0
  148. package/dist/parser/extractors/hono-app-discovery.d.ts.map +1 -0
  149. package/dist/parser/extractors/hono-app-discovery.js +169 -0
  150. package/dist/parser/extractors/hono-app-discovery.js.map +1 -0
  151. package/dist/parser/extractors/hono-ast-utils.d.ts +6 -0
  152. package/dist/parser/extractors/hono-ast-utils.d.ts.map +1 -0
  153. package/dist/parser/extractors/hono-ast-utils.js +77 -0
  154. package/dist/parser/extractors/hono-ast-utils.js.map +1 -0
  155. package/dist/parser/extractors/hono-context-extractor.d.ts +15 -0
  156. package/dist/parser/extractors/hono-context-extractor.d.ts.map +1 -0
  157. package/dist/parser/extractors/hono-context-extractor.js +191 -0
  158. package/dist/parser/extractors/hono-context-extractor.js.map +1 -0
  159. package/dist/parser/extractors/hono-middleware-extractor.d.ts +38 -0
  160. package/dist/parser/extractors/hono-middleware-extractor.d.ts.map +1 -0
  161. package/dist/parser/extractors/hono-middleware-extractor.js +480 -0
  162. package/dist/parser/extractors/hono-middleware-extractor.js.map +1 -0
  163. package/dist/parser/extractors/hono-openapi-extractor.d.ts +11 -0
  164. package/dist/parser/extractors/hono-openapi-extractor.d.ts.map +1 -0
  165. package/dist/parser/extractors/hono-openapi-extractor.js +119 -0
  166. package/dist/parser/extractors/hono-openapi-extractor.js.map +1 -0
  167. package/dist/parser/extractors/hono-route-extractor.d.ts +11 -0
  168. package/dist/parser/extractors/hono-route-extractor.d.ts.map +1 -0
  169. package/dist/parser/extractors/hono-route-extractor.js +128 -0
  170. package/dist/parser/extractors/hono-route-extractor.js.map +1 -0
  171. package/dist/parser/extractors/hono-route-utils.d.ts +11 -0
  172. package/dist/parser/extractors/hono-route-utils.d.ts.map +1 -0
  173. package/dist/parser/extractors/hono-route-utils.js +40 -0
  174. package/dist/parser/extractors/hono-route-utils.js.map +1 -0
  175. package/dist/parser/extractors/hono-runtime-extractor.d.ts +17 -0
  176. package/dist/parser/extractors/hono-runtime-extractor.d.ts.map +1 -0
  177. package/dist/parser/extractors/hono-runtime-extractor.js +141 -0
  178. package/dist/parser/extractors/hono-runtime-extractor.js.map +1 -0
  179. package/dist/parser/extractors/hono.d.ts +5 -79
  180. package/dist/parser/extractors/hono.d.ts.map +1 -1
  181. package/dist/parser/extractors/hono.js +32 -1159
  182. package/dist/parser/extractors/hono.js.map +1 -1
  183. package/dist/parser/extractors/kotlin-ast-helpers.d.ts +43 -0
  184. package/dist/parser/extractors/kotlin-ast-helpers.d.ts.map +1 -0
  185. package/dist/parser/extractors/kotlin-ast-helpers.js +187 -0
  186. package/dist/parser/extractors/kotlin-ast-helpers.js.map +1 -0
  187. package/dist/parser/extractors/kotlin-test-symbols.d.ts +21 -0
  188. package/dist/parser/extractors/kotlin-test-symbols.d.ts.map +1 -0
  189. package/dist/parser/extractors/kotlin-test-symbols.js +162 -0
  190. package/dist/parser/extractors/kotlin-test-symbols.js.map +1 -0
  191. package/dist/parser/extractors/kotlin.d.ts.map +1 -1
  192. package/dist/parser/extractors/kotlin.js +3 -334
  193. package/dist/parser/extractors/kotlin.js.map +1 -1
  194. package/dist/parser/extractors/markdown.js +1 -1
  195. package/dist/parser/extractors/markdown.js.map +1 -1
  196. package/dist/parser/extractors/prisma.js +1 -1
  197. package/dist/parser/extractors/prisma.js.map +1 -1
  198. package/dist/parser/extractors/sql-boundaries.d.ts +3 -0
  199. package/dist/parser/extractors/sql-boundaries.d.ts.map +1 -0
  200. package/dist/parser/extractors/sql-boundaries.js +19 -0
  201. package/dist/parser/extractors/sql-boundaries.js.map +1 -0
  202. package/dist/parser/extractors/sql-columns.d.ts +14 -0
  203. package/dist/parser/extractors/sql-columns.d.ts.map +1 -0
  204. package/dist/parser/extractors/sql-columns.js +59 -0
  205. package/dist/parser/extractors/sql-columns.js.map +1 -0
  206. package/dist/parser/extractors/sql-docstrings.d.ts +2 -0
  207. package/dist/parser/extractors/sql-docstrings.d.ts.map +1 -0
  208. package/dist/parser/extractors/sql-docstrings.js +45 -0
  209. package/dist/parser/extractors/sql-docstrings.js.map +1 -0
  210. package/dist/parser/extractors/sql-end-scanner.d.ts +5 -0
  211. package/dist/parser/extractors/sql-end-scanner.d.ts.map +1 -0
  212. package/dist/parser/extractors/sql-end-scanner.js +84 -0
  213. package/dist/parser/extractors/sql-end-scanner.js.map +1 -0
  214. package/dist/parser/extractors/sql-jinja.d.ts +2 -0
  215. package/dist/parser/extractors/sql-jinja.d.ts.map +1 -0
  216. package/dist/parser/extractors/sql-jinja.js +8 -0
  217. package/dist/parser/extractors/sql-jinja.js.map +1 -0
  218. package/dist/parser/extractors/sql-matcher-catalog.d.ts +9 -0
  219. package/dist/parser/extractors/sql-matcher-catalog.d.ts.map +1 -0
  220. package/dist/parser/extractors/sql-matcher-catalog.js +15 -0
  221. package/dist/parser/extractors/sql-matcher-catalog.js.map +1 -0
  222. package/dist/parser/extractors/sql-matchers.d.ts +9 -0
  223. package/dist/parser/extractors/sql-matchers.d.ts.map +1 -0
  224. package/dist/parser/extractors/sql-matchers.js +20 -0
  225. package/dist/parser/extractors/sql-matchers.js.map +1 -0
  226. package/dist/parser/extractors/sql-offsets.d.ts +2 -0
  227. package/dist/parser/extractors/sql-offsets.d.ts.map +1 -0
  228. package/dist/parser/extractors/sql-offsets.js +25 -0
  229. package/dist/parser/extractors/sql-offsets.js.map +1 -0
  230. package/dist/parser/extractors/sql-parens.d.ts +4 -0
  231. package/dist/parser/extractors/sql-parens.d.ts.map +1 -0
  232. package/dist/parser/extractors/sql-parens.js +70 -0
  233. package/dist/parser/extractors/sql-parens.js.map +1 -0
  234. package/dist/parser/extractors/sql-symbols.d.ts +11 -0
  235. package/dist/parser/extractors/sql-symbols.d.ts.map +1 -0
  236. package/dist/parser/extractors/sql-symbols.js +23 -0
  237. package/dist/parser/extractors/sql-symbols.js.map +1 -0
  238. package/dist/parser/extractors/sql.d.ts +2 -30
  239. package/dist/parser/extractors/sql.d.ts.map +1 -1
  240. package/dist/parser/extractors/sql.js +23 -496
  241. package/dist/parser/extractors/sql.js.map +1 -1
  242. package/dist/parser/extractors/typescript-cjs-nodes.d.ts +5 -0
  243. package/dist/parser/extractors/typescript-cjs-nodes.d.ts.map +1 -0
  244. package/dist/parser/extractors/typescript-cjs-nodes.js +148 -0
  245. package/dist/parser/extractors/typescript-cjs-nodes.js.map +1 -0
  246. package/dist/parser/extractors/typescript-class-nodes.d.ts +8 -0
  247. package/dist/parser/extractors/typescript-class-nodes.d.ts.map +1 -0
  248. package/dist/parser/extractors/typescript-class-nodes.js +183 -0
  249. package/dist/parser/extractors/typescript-class-nodes.js.map +1 -0
  250. package/dist/parser/extractors/typescript-declaration-nodes.d.ts +5 -0
  251. package/dist/parser/extractors/typescript-declaration-nodes.d.ts.map +1 -0
  252. package/dist/parser/extractors/typescript-declaration-nodes.js +105 -0
  253. package/dist/parser/extractors/typescript-declaration-nodes.js.map +1 -0
  254. package/dist/parser/extractors/typescript-module-nodes.d.ts +6 -0
  255. package/dist/parser/extractors/typescript-module-nodes.d.ts.map +1 -0
  256. package/dist/parser/extractors/typescript-module-nodes.js +151 -0
  257. package/dist/parser/extractors/typescript-module-nodes.js.map +1 -0
  258. package/dist/parser/extractors/typescript-react.d.ts +11 -0
  259. package/dist/parser/extractors/typescript-react.d.ts.map +1 -0
  260. package/dist/parser/extractors/typescript-react.js +101 -0
  261. package/dist/parser/extractors/typescript-react.js.map +1 -0
  262. package/dist/parser/extractors/typescript-shared.d.ts +26 -0
  263. package/dist/parser/extractors/typescript-shared.d.ts.map +1 -0
  264. package/dist/parser/extractors/typescript-shared.js +101 -0
  265. package/dist/parser/extractors/typescript-shared.js.map +1 -0
  266. package/dist/parser/extractors/typescript-test-nodes.d.ts +4 -0
  267. package/dist/parser/extractors/typescript-test-nodes.d.ts.map +1 -0
  268. package/dist/parser/extractors/typescript-test-nodes.js +112 -0
  269. package/dist/parser/extractors/typescript-test-nodes.js.map +1 -0
  270. package/dist/parser/extractors/typescript-type-nodes.d.ts +6 -0
  271. package/dist/parser/extractors/typescript-type-nodes.d.ts.map +1 -0
  272. package/dist/parser/extractors/typescript-type-nodes.js +48 -0
  273. package/dist/parser/extractors/typescript-type-nodes.js.map +1 -0
  274. package/dist/parser/extractors/typescript.d.ts.map +1 -1
  275. package/dist/parser/extractors/typescript.js +68 -1127
  276. package/dist/parser/extractors/typescript.js.map +1 -1
  277. package/dist/parser/parser-manager.d.ts.map +1 -1
  278. package/dist/parser/parser-manager.js +5 -0
  279. package/dist/parser/parser-manager.js.map +1 -1
  280. package/dist/parser/symbol-extractor.d.ts +1 -12
  281. package/dist/parser/symbol-extractor.d.ts.map +1 -1
  282. package/dist/parser/symbol-extractor.js +2 -24
  283. package/dist/parser/symbol-extractor.js.map +1 -1
  284. package/dist/parser/symbol-utils.d.ts +4 -0
  285. package/dist/parser/symbol-utils.d.ts.map +1 -0
  286. package/dist/parser/symbol-utils.js +20 -0
  287. package/dist/parser/symbol-utils.js.map +1 -0
  288. package/dist/register-tool-groups/analysis/cross-repo.d.ts +4 -0
  289. package/dist/register-tool-groups/analysis/cross-repo.d.ts.map +1 -0
  290. package/dist/register-tool-groups/analysis/cross-repo.js +108 -0
  291. package/dist/register-tool-groups/analysis/cross-repo.js.map +1 -0
  292. package/dist/register-tool-groups/analysis/review.d.ts +3 -0
  293. package/dist/register-tool-groups/analysis/review.d.ts.map +1 -0
  294. package/dist/register-tool-groups/analysis/review.js +96 -0
  295. package/dist/register-tool-groups/analysis/review.js.map +1 -0
  296. package/dist/register-tool-groups/analysis/workspace.d.ts +3 -0
  297. package/dist/register-tool-groups/analysis/workspace.d.ts.map +1 -0
  298. package/dist/register-tool-groups/analysis/workspace.js +82 -0
  299. package/dist/register-tool-groups/analysis/workspace.js.map +1 -0
  300. package/dist/register-tool-groups/analysis.d.ts +3 -0
  301. package/dist/register-tool-groups/analysis.d.ts.map +1 -0
  302. package/dist/register-tool-groups/analysis.js +541 -0
  303. package/dist/register-tool-groups/analysis.js.map +1 -0
  304. package/dist/register-tool-groups/astro.d.ts +3 -0
  305. package/dist/register-tool-groups/astro.d.ts.map +1 -0
  306. package/dist/register-tool-groups/astro.js +302 -0
  307. package/dist/register-tool-groups/astro.js.map +1 -0
  308. package/dist/register-tool-groups/core/index.d.ts +3 -0
  309. package/dist/register-tool-groups/core/index.d.ts.map +1 -0
  310. package/dist/register-tool-groups/core/index.js +96 -0
  311. package/dist/register-tool-groups/core/index.js.map +1 -0
  312. package/dist/register-tool-groups/core/meta.d.ts +3 -0
  313. package/dist/register-tool-groups/core/meta.d.ts.map +1 -0
  314. package/dist/register-tool-groups/core/meta.js +180 -0
  315. package/dist/register-tool-groups/core/meta.js.map +1 -0
  316. package/dist/register-tool-groups/core/schema.d.ts +3 -0
  317. package/dist/register-tool-groups/core/schema.d.ts.map +1 -0
  318. package/dist/register-tool-groups/core/schema.js +16 -0
  319. package/dist/register-tool-groups/core/schema.js.map +1 -0
  320. package/dist/register-tool-groups/core/search.d.ts +4 -0
  321. package/dist/register-tool-groups/core/search.d.ts.map +1 -0
  322. package/dist/register-tool-groups/core/search.js +262 -0
  323. package/dist/register-tool-groups/core/search.js.map +1 -0
  324. package/dist/register-tool-groups/core/symbols.d.ts +3 -0
  325. package/dist/register-tool-groups/core/symbols.d.ts.map +1 -0
  326. package/dist/register-tool-groups/core/symbols.js +338 -0
  327. package/dist/register-tool-groups/core/symbols.js.map +1 -0
  328. package/dist/register-tool-groups/core.d.ts +3 -0
  329. package/dist/register-tool-groups/core.d.ts.map +1 -0
  330. package/dist/register-tool-groups/core.js +12 -0
  331. package/dist/register-tool-groups/core.js.map +1 -0
  332. package/dist/register-tool-groups/deps.d.ts +10 -0
  333. package/dist/register-tool-groups/deps.d.ts.map +1 -0
  334. package/dist/register-tool-groups/deps.js +6 -0
  335. package/dist/register-tool-groups/deps.js.map +1 -0
  336. package/dist/register-tool-groups/handler-wrappers.d.ts +63 -0
  337. package/dist/register-tool-groups/handler-wrappers.d.ts.map +1 -0
  338. package/dist/register-tool-groups/handler-wrappers.js +106 -0
  339. package/dist/register-tool-groups/handler-wrappers.js.map +1 -0
  340. package/dist/register-tool-groups/hono.d.ts +3 -0
  341. package/dist/register-tool-groups/hono.d.ts.map +1 -0
  342. package/dist/register-tool-groups/hono.js +179 -0
  343. package/dist/register-tool-groups/hono.js.map +1 -0
  344. package/dist/register-tool-groups/index.d.ts +3 -0
  345. package/dist/register-tool-groups/index.d.ts.map +1 -0
  346. package/dist/register-tool-groups/index.js +28 -0
  347. package/dist/register-tool-groups/index.js.map +1 -0
  348. package/dist/register-tool-groups/kotlin.d.ts +3 -0
  349. package/dist/register-tool-groups/kotlin.d.ts.map +1 -0
  350. package/dist/register-tool-groups/kotlin.js +162 -0
  351. package/dist/register-tool-groups/kotlin.js.map +1 -0
  352. package/dist/register-tool-groups/meta.d.ts +3 -0
  353. package/dist/register-tool-groups/meta.d.ts.map +1 -0
  354. package/dist/register-tool-groups/meta.js +563 -0
  355. package/dist/register-tool-groups/meta.js.map +1 -0
  356. package/dist/register-tool-groups/nextjs.d.ts +3 -0
  357. package/dist/register-tool-groups/nextjs.d.ts.map +1 -0
  358. package/dist/register-tool-groups/nextjs.js +78 -0
  359. package/dist/register-tool-groups/nextjs.js.map +1 -0
  360. package/dist/register-tool-groups/php.d.ts +3 -0
  361. package/dist/register-tool-groups/php.d.ts.map +1 -0
  362. package/dist/register-tool-groups/php.js +312 -0
  363. package/dist/register-tool-groups/php.js.map +1 -0
  364. package/dist/register-tool-groups/python.d.ts +3 -0
  365. package/dist/register-tool-groups/python.d.ts.map +1 -0
  366. package/dist/register-tool-groups/python.js +366 -0
  367. package/dist/register-tool-groups/python.js.map +1 -0
  368. package/dist/register-tool-groups/react.d.ts +3 -0
  369. package/dist/register-tool-groups/react.d.ts.map +1 -0
  370. package/dist/register-tool-groups/react.js +119 -0
  371. package/dist/register-tool-groups/react.js.map +1 -0
  372. package/dist/register-tool-groups/shared.d.ts +156 -0
  373. package/dist/register-tool-groups/shared.d.ts.map +1 -0
  374. package/dist/register-tool-groups/shared.js +182 -0
  375. package/dist/register-tool-groups/shared.js.map +1 -0
  376. package/dist/register-tool-groups/sql.d.ts +3 -0
  377. package/dist/register-tool-groups/sql.d.ts.map +1 -0
  378. package/dist/register-tool-groups/sql.js +260 -0
  379. package/dist/register-tool-groups/sql.js.map +1 -0
  380. package/dist/register-tool-loaders.d.ts +22 -22
  381. package/dist/register-tool-loaders.d.ts.map +1 -1
  382. package/dist/register-tools/autoload.d.ts +8 -0
  383. package/dist/register-tools/autoload.d.ts.map +1 -0
  384. package/dist/register-tools/autoload.js +517 -0
  385. package/dist/register-tools/autoload.js.map +1 -0
  386. package/dist/register-tools/discovery.d.ts +55 -0
  387. package/dist/register-tools/discovery.d.ts.map +1 -0
  388. package/dist/register-tools/discovery.js +206 -0
  389. package/dist/register-tools/discovery.js.map +1 -0
  390. package/dist/register-tools/runtime.d.ts +89 -0
  391. package/dist/register-tools/runtime.d.ts.map +1 -0
  392. package/dist/register-tools/runtime.js +491 -0
  393. package/dist/register-tools/runtime.js.map +1 -0
  394. package/dist/register-tools.d.ts +5 -172
  395. package/dist/register-tools.d.ts.map +1 -1
  396. package/dist/register-tools.js +27 -4878
  397. package/dist/register-tools.js.map +1 -1
  398. package/dist/search/bm25.js +1 -1
  399. package/dist/search/bm25.js.map +1 -1
  400. package/dist/search/tool-embedding-cache.d.ts +4 -0
  401. package/dist/search/tool-embedding-cache.d.ts.map +1 -0
  402. package/dist/search/tool-embedding-cache.js +44 -0
  403. package/dist/search/tool-embedding-cache.js.map +1 -0
  404. package/dist/search/tool-embedding-storage.d.ts +8 -0
  405. package/dist/search/tool-embedding-storage.d.ts.map +1 -0
  406. package/dist/search/tool-embedding-storage.js +56 -0
  407. package/dist/search/tool-embedding-storage.js.map +1 -0
  408. package/dist/search/tool-ranker-bm25.d.ts +6 -0
  409. package/dist/search/tool-ranker-bm25.d.ts.map +1 -0
  410. package/dist/search/tool-ranker-bm25.js +40 -0
  411. package/dist/search/tool-ranker-bm25.js.map +1 -0
  412. package/dist/search/tool-ranker-orchestrator.d.ts +3 -0
  413. package/dist/search/tool-ranker-orchestrator.d.ts.map +1 -0
  414. package/dist/search/tool-ranker-orchestrator.js +49 -0
  415. package/dist/search/tool-ranker-orchestrator.js.map +1 -0
  416. package/dist/search/tool-ranker-reasoning.d.ts +4 -0
  417. package/dist/search/tool-ranker-reasoning.d.ts.map +1 -0
  418. package/dist/search/tool-ranker-reasoning.js +35 -0
  419. package/dist/search/tool-ranker-reasoning.js.map +1 -0
  420. package/dist/search/tool-ranker-signal-math.d.ts +6 -0
  421. package/dist/search/tool-ranker-signal-math.d.ts.map +1 -0
  422. package/dist/search/tool-ranker-signal-math.js +51 -0
  423. package/dist/search/tool-ranker-signal-math.js.map +1 -0
  424. package/dist/search/tool-ranker-signals.d.ts +20 -0
  425. package/dist/search/tool-ranker-signals.d.ts.map +1 -0
  426. package/dist/search/tool-ranker-signals.js +50 -0
  427. package/dist/search/tool-ranker-signals.js.map +1 -0
  428. package/dist/search/tool-ranker-types.d.ts +26 -0
  429. package/dist/search/tool-ranker-types.d.ts.map +1 -0
  430. package/dist/search/tool-ranker-types.js +2 -0
  431. package/dist/search/tool-ranker-types.js.map +1 -0
  432. package/dist/search/tool-ranker.d.ts +6 -89
  433. package/dist/search/tool-ranker.d.ts.map +1 -1
  434. package/dist/search/tool-ranker.js +5 -419
  435. package/dist/search/tool-ranker.js.map +1 -1
  436. package/dist/server-helpers/repo-resolution.d.ts +45 -0
  437. package/dist/server-helpers/repo-resolution.d.ts.map +1 -0
  438. package/dist/server-helpers/repo-resolution.js +113 -0
  439. package/dist/server-helpers/repo-resolution.js.map +1 -0
  440. package/dist/server-helpers/response-hints.d.ts +9 -0
  441. package/dist/server-helpers/response-hints.d.ts.map +1 -0
  442. package/dist/server-helpers/response-hints.js +225 -0
  443. package/dist/server-helpers/response-hints.js.map +1 -0
  444. package/dist/server-helpers.d.ts +14 -35
  445. package/dist/server-helpers.d.ts.map +1 -1
  446. package/dist/server-helpers.js +62 -322
  447. package/dist/server-helpers.js.map +1 -1
  448. package/dist/server.d.ts.map +1 -1
  449. package/dist/server.js +45 -0
  450. package/dist/server.js.map +1 -1
  451. package/dist/storage/_shared.d.ts +9 -0
  452. package/dist/storage/_shared.d.ts.map +1 -1
  453. package/dist/storage/_shared.js +24 -0
  454. package/dist/storage/_shared.js.map +1 -1
  455. package/dist/storage/telemetry/aggregator.d.ts +52 -0
  456. package/dist/storage/telemetry/aggregator.d.ts.map +1 -0
  457. package/dist/storage/telemetry/aggregator.js +188 -0
  458. package/dist/storage/telemetry/aggregator.js.map +1 -0
  459. package/dist/storage/telemetry/anon-id.d.ts +11 -0
  460. package/dist/storage/telemetry/anon-id.d.ts.map +1 -0
  461. package/dist/storage/telemetry/anon-id.js +62 -0
  462. package/dist/storage/telemetry/anon-id.js.map +1 -0
  463. package/dist/storage/telemetry/config.d.ts +37 -0
  464. package/dist/storage/telemetry/config.d.ts.map +1 -0
  465. package/dist/storage/telemetry/config.js +130 -0
  466. package/dist/storage/telemetry/config.js.map +1 -0
  467. package/dist/storage/telemetry/env-profile.d.ts +19 -0
  468. package/dist/storage/telemetry/env-profile.d.ts.map +1 -0
  469. package/dist/storage/telemetry/env-profile.js +67 -0
  470. package/dist/storage/telemetry/env-profile.js.map +1 -0
  471. package/dist/storage/telemetry/payload.d.ts +8 -0
  472. package/dist/storage/telemetry/payload.d.ts.map +1 -0
  473. package/dist/storage/telemetry/payload.js +22 -0
  474. package/dist/storage/telemetry/payload.js.map +1 -0
  475. package/dist/storage/telemetry/sanitizer.d.ts +48 -0
  476. package/dist/storage/telemetry/sanitizer.d.ts.map +1 -0
  477. package/dist/storage/telemetry/sanitizer.js +82 -0
  478. package/dist/storage/telemetry/sanitizer.js.map +1 -0
  479. package/dist/storage/telemetry/uploader.d.ts +11 -0
  480. package/dist/storage/telemetry/uploader.d.ts.map +1 -0
  481. package/dist/storage/telemetry/uploader.js +140 -0
  482. package/dist/storage/telemetry/uploader.js.map +1 -0
  483. package/dist/storage/usage-tracker.d.ts +13 -0
  484. package/dist/storage/usage-tracker.d.ts.map +1 -1
  485. package/dist/storage/usage-tracker.js +33 -0
  486. package/dist/storage/usage-tracker.js.map +1 -1
  487. package/dist/tools/astro-actions/ast.d.ts +14 -0
  488. package/dist/tools/astro-actions/ast.d.ts.map +1 -0
  489. package/dist/tools/astro-actions/ast.js +75 -0
  490. package/dist/tools/astro-actions/ast.js.map +1 -0
  491. package/dist/tools/astro-actions/audit.d.ts +5 -0
  492. package/dist/tools/astro-actions/audit.d.ts.map +1 -0
  493. package/dist/tools/astro-actions/audit.js +102 -0
  494. package/dist/tools/astro-actions/audit.js.map +1 -0
  495. package/dist/tools/astro-actions/callers.d.ts +9 -0
  496. package/dist/tools/astro-actions/callers.d.ts.map +1 -0
  497. package/dist/tools/astro-actions/callers.js +84 -0
  498. package/dist/tools/astro-actions/callers.js.map +1 -0
  499. package/dist/tools/astro-actions/parser.d.ts +3 -0
  500. package/dist/tools/astro-actions/parser.d.ts.map +1 -0
  501. package/dist/tools/astro-actions/parser.js +156 -0
  502. package/dist/tools/astro-actions/parser.js.map +1 -0
  503. package/dist/tools/astro-actions/types.d.ts +58 -0
  504. package/dist/tools/astro-actions/types.d.ts.map +1 -0
  505. package/dist/tools/astro-actions/types.js +2 -0
  506. package/dist/tools/astro-actions/types.js.map +1 -0
  507. package/dist/tools/astro-actions/zod-ast.d.ts +7 -0
  508. package/dist/tools/astro-actions/zod-ast.d.ts.map +1 -0
  509. package/dist/tools/astro-actions/zod-ast.js +51 -0
  510. package/dist/tools/astro-actions/zod-ast.js.map +1 -0
  511. package/dist/tools/astro-actions.d.ts +6 -46
  512. package/dist/tools/astro-actions.d.ts.map +1 -1
  513. package/dist/tools/astro-actions.js +6 -545
  514. package/dist/tools/astro-actions.js.map +1 -1
  515. package/dist/tools/astro-content-collections/diagnostics.d.ts +3 -0
  516. package/dist/tools/astro-content-collections/diagnostics.d.ts.map +1 -0
  517. package/dist/tools/astro-content-collections/diagnostics.js +277 -0
  518. package/dist/tools/astro-content-collections/diagnostics.js.map +1 -0
  519. package/dist/tools/astro-content-collections/discovery.d.ts +6 -0
  520. package/dist/tools/astro-content-collections/discovery.d.ts.map +1 -0
  521. package/dist/tools/astro-content-collections/discovery.js +152 -0
  522. package/dist/tools/astro-content-collections/discovery.js.map +1 -0
  523. package/dist/tools/astro-content-collections/schema.d.ts +15 -0
  524. package/dist/tools/astro-content-collections/schema.d.ts.map +1 -0
  525. package/dist/tools/astro-content-collections/schema.js +119 -0
  526. package/dist/tools/astro-content-collections/schema.js.map +1 -0
  527. package/dist/tools/astro-content-collections/types.d.ts +61 -0
  528. package/dist/tools/astro-content-collections/types.d.ts.map +1 -0
  529. package/dist/tools/astro-content-collections/types.js +2 -0
  530. package/dist/tools/astro-content-collections/types.js.map +1 -0
  531. package/dist/tools/astro-content-collections.d.ts +5 -40
  532. package/dist/tools/astro-content-collections.d.ts.map +1 -1
  533. package/dist/tools/astro-content-collections.js +42 -449
  534. package/dist/tools/astro-content-collections.js.map +1 -1
  535. package/dist/tools/astro-routes.js +1 -1
  536. package/dist/tools/astro-routes.js.map +1 -1
  537. package/dist/tools/complexity-tools.d.ts +6 -0
  538. package/dist/tools/complexity-tools.d.ts.map +1 -1
  539. package/dist/tools/complexity-tools.js +26 -0
  540. package/dist/tools/complexity-tools.js.map +1 -1
  541. package/dist/tools/context-levels/l0.d.ts +4 -0
  542. package/dist/tools/context-levels/l0.d.ts.map +1 -0
  543. package/dist/tools/context-levels/l0.js +17 -0
  544. package/dist/tools/context-levels/l0.js.map +1 -0
  545. package/dist/tools/context-levels/l1.d.ts +4 -0
  546. package/dist/tools/context-levels/l1.d.ts.map +1 -0
  547. package/dist/tools/context-levels/l1.js +26 -0
  548. package/dist/tools/context-levels/l1.js.map +1 -0
  549. package/dist/tools/context-levels/l2.d.ts +4 -0
  550. package/dist/tools/context-levels/l2.d.ts.map +1 -0
  551. package/dist/tools/context-levels/l2.js +36 -0
  552. package/dist/tools/context-levels/l2.js.map +1 -0
  553. package/dist/tools/context-levels/l3.d.ts +4 -0
  554. package/dist/tools/context-levels/l3.d.ts.map +1 -0
  555. package/dist/tools/context-levels/l3.js +30 -0
  556. package/dist/tools/context-levels/l3.js.map +1 -0
  557. package/dist/tools/context-levels/shared.d.ts +2 -0
  558. package/dist/tools/context-levels/shared.d.ts.map +1 -0
  559. package/dist/tools/context-levels/shared.js +4 -0
  560. package/dist/tools/context-levels/shared.js.map +1 -0
  561. package/dist/tools/context-levels/types.d.ts +34 -0
  562. package/dist/tools/context-levels/types.d.ts.map +1 -0
  563. package/dist/tools/context-levels/types.js +2 -0
  564. package/dist/tools/context-levels/types.js.map +1 -0
  565. package/dist/tools/context-tools.d.ts +2 -34
  566. package/dist/tools/context-tools.d.ts.map +1 -1
  567. package/dist/tools/context-tools.js +11 -127
  568. package/dist/tools/context-tools.js.map +1 -1
  569. package/dist/tools/conversation-cache.d.ts +6 -0
  570. package/dist/tools/conversation-cache.d.ts.map +1 -0
  571. package/dist/tools/conversation-cache.js +29 -0
  572. package/dist/tools/conversation-cache.js.map +1 -0
  573. package/dist/tools/conversation-index-tools.d.ts +39 -0
  574. package/dist/tools/conversation-index-tools.d.ts.map +1 -0
  575. package/dist/tools/conversation-index-tools.js +136 -0
  576. package/dist/tools/conversation-index-tools.js.map +1 -0
  577. package/dist/tools/conversation-paths.d.ts +4 -0
  578. package/dist/tools/conversation-paths.d.ts.map +1 -0
  579. package/dist/tools/conversation-paths.js +15 -0
  580. package/dist/tools/conversation-paths.js.map +1 -0
  581. package/dist/tools/conversation-search-tools.d.ts +52 -0
  582. package/dist/tools/conversation-search-tools.d.ts.map +1 -0
  583. package/dist/tools/conversation-search-tools.js +229 -0
  584. package/dist/tools/conversation-search-tools.js.map +1 -0
  585. package/dist/tools/conversation-tools.d.ts +6 -112
  586. package/dist/tools/conversation-tools.d.ts.map +1 -1
  587. package/dist/tools/conversation-tools.js +4 -425
  588. package/dist/tools/conversation-tools.js.map +1 -1
  589. package/dist/tools/cross-repo-outbound-lexer/call-detectors.d.ts +5 -0
  590. package/dist/tools/cross-repo-outbound-lexer/call-detectors.d.ts.map +1 -0
  591. package/dist/tools/cross-repo-outbound-lexer/call-detectors.js +76 -0
  592. package/dist/tools/cross-repo-outbound-lexer/call-detectors.js.map +1 -0
  593. package/dist/tools/cross-repo-outbound-lexer/context.d.ts +18 -0
  594. package/dist/tools/cross-repo-outbound-lexer/context.d.ts.map +1 -0
  595. package/dist/tools/cross-repo-outbound-lexer/context.js +33 -0
  596. package/dist/tools/cross-repo-outbound-lexer/context.js.map +1 -0
  597. package/dist/tools/cross-repo-outbound-lexer/literal-readers.d.ts +6 -0
  598. package/dist/tools/cross-repo-outbound-lexer/literal-readers.d.ts.map +1 -0
  599. package/dist/tools/cross-repo-outbound-lexer/literal-readers.js +65 -0
  600. package/dist/tools/cross-repo-outbound-lexer/literal-readers.js.map +1 -0
  601. package/dist/tools/cross-repo-outbound-lexer/non-code-states.d.ts +3 -0
  602. package/dist/tools/cross-repo-outbound-lexer/non-code-states.d.ts.map +1 -0
  603. package/dist/tools/cross-repo-outbound-lexer/non-code-states.js +103 -0
  604. package/dist/tools/cross-repo-outbound-lexer/non-code-states.js.map +1 -0
  605. package/dist/tools/cross-repo-outbound-lexer/template-reader.d.ts +3 -0
  606. package/dist/tools/cross-repo-outbound-lexer/template-reader.d.ts.map +1 -0
  607. package/dist/tools/cross-repo-outbound-lexer/template-reader.js +82 -0
  608. package/dist/tools/cross-repo-outbound-lexer/template-reader.js.map +1 -0
  609. package/dist/tools/cross-repo-outbound-lexer/types.d.ts +18 -0
  610. package/dist/tools/cross-repo-outbound-lexer/types.d.ts.map +1 -0
  611. package/dist/tools/cross-repo-outbound-lexer/types.js +2 -0
  612. package/dist/tools/cross-repo-outbound-lexer/types.js.map +1 -0
  613. package/dist/tools/cross-repo-outbound-lexer.d.ts +5 -31
  614. package/dist/tools/cross-repo-outbound-lexer.d.ts.map +1 -1
  615. package/dist/tools/cross-repo-outbound-lexer.js +75 -575
  616. package/dist/tools/cross-repo-outbound-lexer.js.map +1 -1
  617. package/dist/tools/dependency-audit-freshness-tools.d.ts +3 -0
  618. package/dist/tools/dependency-audit-freshness-tools.d.ts.map +1 -0
  619. package/dist/tools/dependency-audit-freshness-tools.js +62 -0
  620. package/dist/tools/dependency-audit-freshness-tools.js.map +1 -0
  621. package/dist/tools/dependency-audit-license-tools.d.ts +5 -0
  622. package/dist/tools/dependency-audit-license-tools.d.ts.map +1 -0
  623. package/dist/tools/dependency-audit-license-tools.js +75 -0
  624. package/dist/tools/dependency-audit-license-tools.js.map +1 -0
  625. package/dist/tools/dependency-audit-lockfile-tools.d.ts +3 -0
  626. package/dist/tools/dependency-audit-lockfile-tools.d.ts.map +1 -0
  627. package/dist/tools/dependency-audit-lockfile-tools.js +147 -0
  628. package/dist/tools/dependency-audit-lockfile-tools.js.map +1 -0
  629. package/dist/tools/dependency-audit-tools.d.ts +2 -54
  630. package/dist/tools/dependency-audit-tools.d.ts.map +1 -1
  631. package/dist/tools/dependency-audit-tools.js +69 -484
  632. package/dist/tools/dependency-audit-tools.js.map +1 -1
  633. package/dist/tools/dependency-audit-types.d.ts +65 -0
  634. package/dist/tools/dependency-audit-types.d.ts.map +1 -0
  635. package/dist/tools/dependency-audit-types.js +19 -0
  636. package/dist/tools/dependency-audit-types.js.map +1 -0
  637. package/dist/tools/dependency-audit-vulnerability-tools.d.ts +4 -0
  638. package/dist/tools/dependency-audit-vulnerability-tools.d.ts.map +1 -0
  639. package/dist/tools/dependency-audit-vulnerability-tools.js +103 -0
  640. package/dist/tools/dependency-audit-vulnerability-tools.js.map +1 -0
  641. package/dist/tools/diff-tools.d.ts.map +1 -1
  642. package/dist/tools/diff-tools.js +5 -7
  643. package/dist/tools/diff-tools.js.map +1 -1
  644. package/dist/tools/impact-tools.d.ts.map +1 -1
  645. package/dist/tools/impact-tools.js +5 -4
  646. package/dist/tools/impact-tools.js.map +1 -1
  647. package/dist/tools/index-shared.d.ts +17 -0
  648. package/dist/tools/index-shared.d.ts.map +1 -0
  649. package/dist/tools/index-shared.js +18 -0
  650. package/dist/tools/index-shared.js.map +1 -0
  651. package/dist/tools/index-tools/file-indexer.d.ts +27 -0
  652. package/dist/tools/index-tools/file-indexer.d.ts.map +1 -0
  653. package/dist/tools/index-tools/file-indexer.js +223 -0
  654. package/dist/tools/index-tools/file-indexer.js.map +1 -0
  655. package/dist/tools/index-tools/folder-indexer.d.ts +21 -0
  656. package/dist/tools/index-tools/folder-indexer.d.ts.map +1 -0
  657. package/dist/tools/index-tools/folder-indexer.js +399 -0
  658. package/dist/tools/index-tools/folder-indexer.js.map +1 -0
  659. package/dist/tools/index-tools/folder-merge.d.ts +23 -0
  660. package/dist/tools/index-tools/folder-merge.d.ts.map +1 -0
  661. package/dist/tools/index-tools/folder-merge.js +205 -0
  662. package/dist/tools/index-tools/folder-merge.js.map +1 -0
  663. package/dist/tools/index-tools/parse.d.ts +35 -0
  664. package/dist/tools/index-tools/parse.d.ts.map +1 -0
  665. package/dist/tools/index-tools/parse.js +262 -0
  666. package/dist/tools/index-tools/parse.js.map +1 -0
  667. package/dist/tools/index-tools/registry.d.ts +40 -0
  668. package/dist/tools/index-tools/registry.d.ts.map +1 -0
  669. package/dist/tools/index-tools/registry.js +258 -0
  670. package/dist/tools/index-tools/registry.js.map +1 -0
  671. package/dist/tools/index-tools/snapshots.d.ts +51 -0
  672. package/dist/tools/index-tools/snapshots.d.ts.map +1 -0
  673. package/dist/tools/index-tools/snapshots.js +223 -0
  674. package/dist/tools/index-tools/snapshots.js.map +1 -0
  675. package/dist/tools/index-tools/state.d.ts +8 -0
  676. package/dist/tools/index-tools/state.d.ts.map +1 -0
  677. package/dist/tools/index-tools/state.js +6 -0
  678. package/dist/tools/index-tools/state.js.map +1 -0
  679. package/dist/tools/index-tools/types.d.ts +20 -0
  680. package/dist/tools/index-tools/types.d.ts.map +1 -0
  681. package/dist/tools/index-tools/types.js +2 -0
  682. package/dist/tools/index-tools/types.js.map +1 -0
  683. package/dist/tools/index-tools/watcher.d.ts +10 -0
  684. package/dist/tools/index-tools/watcher.d.ts.map +1 -0
  685. package/dist/tools/index-tools/watcher.js +130 -0
  686. package/dist/tools/index-tools/watcher.js.map +1 -0
  687. package/dist/tools/index-tools.d.ts +16 -152
  688. package/dist/tools/index-tools.d.ts.map +1 -1
  689. package/dist/tools/index-tools.js +12 -1674
  690. package/dist/tools/index-tools.js.map +1 -1
  691. package/dist/tools/kotlin-extension-tools.d.ts +16 -0
  692. package/dist/tools/kotlin-extension-tools.d.ts.map +1 -0
  693. package/dist/tools/kotlin-extension-tools.js +31 -0
  694. package/dist/tools/kotlin-extension-tools.js.map +1 -0
  695. package/dist/tools/kotlin-flow-tools.d.ts +12 -0
  696. package/dist/tools/kotlin-flow-tools.d.ts.map +1 -0
  697. package/dist/tools/kotlin-flow-tools.js +72 -0
  698. package/dist/tools/kotlin-flow-tools.js.map +1 -0
  699. package/dist/tools/kotlin-kmp-tools.d.ts +29 -0
  700. package/dist/tools/kotlin-kmp-tools.d.ts.map +1 -0
  701. package/dist/tools/kotlin-kmp-tools.js +87 -0
  702. package/dist/tools/kotlin-kmp-tools.js.map +1 -0
  703. package/dist/tools/kotlin-sealed-tools.d.ts +27 -0
  704. package/dist/tools/kotlin-sealed-tools.d.ts.map +1 -0
  705. package/dist/tools/kotlin-sealed-tools.js +130 -0
  706. package/dist/tools/kotlin-sealed-tools.js.map +1 -0
  707. package/dist/tools/kotlin-suspend-tools.d.ts +24 -0
  708. package/dist/tools/kotlin-suspend-tools.d.ts.map +1 -0
  709. package/dist/tools/kotlin-suspend-tools.js +161 -0
  710. package/dist/tools/kotlin-suspend-tools.js.map +1 -0
  711. package/dist/tools/kotlin-tools.d.ts +6 -141
  712. package/dist/tools/kotlin-tools.d.ts.map +1 -1
  713. package/dist/tools/kotlin-tools.js +6 -571
  714. package/dist/tools/kotlin-tools.js.map +1 -1
  715. package/dist/tools/nest-audit-tools.d.ts +43 -0
  716. package/dist/tools/nest-audit-tools.d.ts.map +1 -0
  717. package/dist/tools/nest-audit-tools.js +232 -0
  718. package/dist/tools/nest-audit-tools.js.map +1 -0
  719. package/dist/tools/nest-di-tools.d.ts +32 -0
  720. package/dist/tools/nest-di-tools.d.ts.map +1 -0
  721. package/dist/tools/nest-di-tools.js +161 -0
  722. package/dist/tools/nest-di-tools.js.map +1 -0
  723. package/dist/tools/nest-guard-tools.d.ts +34 -0
  724. package/dist/tools/nest-guard-tools.d.ts.map +1 -0
  725. package/dist/tools/nest-guard-tools.js +240 -0
  726. package/dist/tools/nest-guard-tools.js.map +1 -0
  727. package/dist/tools/nest-lifecycle-tools.d.ts +16 -0
  728. package/dist/tools/nest-lifecycle-tools.d.ts.map +1 -0
  729. package/dist/tools/nest-lifecycle-tools.js +54 -0
  730. package/dist/tools/nest-lifecycle-tools.js.map +1 -0
  731. package/dist/tools/nest-module-tools.d.ts +28 -0
  732. package/dist/tools/nest-module-tools.d.ts.map +1 -0
  733. package/dist/tools/nest-module-tools.js +86 -0
  734. package/dist/tools/nest-module-tools.js.map +1 -0
  735. package/dist/tools/nest-pipeline-tools.d.ts +32 -0
  736. package/dist/tools/nest-pipeline-tools.d.ts.map +1 -0
  737. package/dist/tools/nest-pipeline-tools.js +122 -0
  738. package/dist/tools/nest-pipeline-tools.js.map +1 -0
  739. package/dist/tools/nest-route-tools.d.ts +43 -0
  740. package/dist/tools/nest-route-tools.d.ts.map +1 -0
  741. package/dist/tools/nest-route-tools.js +261 -0
  742. package/dist/tools/nest-route-tools.js.map +1 -0
  743. package/dist/tools/nest-shared-tools.d.ts +13 -0
  744. package/dist/tools/nest-shared-tools.d.ts.map +1 -0
  745. package/dist/tools/nest-shared-tools.js +36 -0
  746. package/dist/tools/nest-shared-tools.js.map +1 -0
  747. package/dist/tools/nest-tools.d.ts +18 -195
  748. package/dist/tools/nest-tools.d.ts.map +1 -1
  749. package/dist/tools/nest-tools.js +11 -1140
  750. package/dist/tools/nest-tools.js.map +1 -1
  751. package/dist/tools/pattern-registry.d.ts +4 -0
  752. package/dist/tools/pattern-registry.d.ts.map +1 -0
  753. package/dist/tools/pattern-registry.js +3 -0
  754. package/dist/tools/pattern-registry.js.map +1 -0
  755. package/dist/tools/pattern-tools.d.ts +5 -46
  756. package/dist/tools/pattern-tools.d.ts.map +1 -1
  757. package/dist/tools/pattern-tools.js +4 -1102
  758. package/dist/tools/pattern-tools.js.map +1 -1
  759. package/dist/tools/patterns/adapters/astro.d.ts +3 -0
  760. package/dist/tools/patterns/adapters/astro.d.ts.map +1 -0
  761. package/dist/tools/patterns/adapters/astro.js +56 -0
  762. package/dist/tools/patterns/adapters/astro.js.map +1 -0
  763. package/dist/tools/patterns/adapters/common.d.ts +3 -0
  764. package/dist/tools/patterns/adapters/common.d.ts.map +1 -0
  765. package/dist/tools/patterns/adapters/common.js +38 -0
  766. package/dist/tools/patterns/adapters/common.js.map +1 -0
  767. package/dist/tools/patterns/adapters/database.d.ts +3 -0
  768. package/dist/tools/patterns/adapters/database.d.ts.map +1 -0
  769. package/dist/tools/patterns/adapters/database.js +32 -0
  770. package/dist/tools/patterns/adapters/database.js.map +1 -0
  771. package/dist/tools/patterns/adapters/hono.d.ts +3 -0
  772. package/dist/tools/patterns/adapters/hono.d.ts.map +1 -0
  773. package/dist/tools/patterns/adapters/hono.js +32 -0
  774. package/dist/tools/patterns/adapters/hono.js.map +1 -0
  775. package/dist/tools/patterns/adapters/kotlin.d.ts +3 -0
  776. package/dist/tools/patterns/adapters/kotlin.d.ts.map +1 -0
  777. package/dist/tools/patterns/adapters/kotlin.js +50 -0
  778. package/dist/tools/patterns/adapters/kotlin.js.map +1 -0
  779. package/dist/tools/patterns/adapters/nest.d.ts +3 -0
  780. package/dist/tools/patterns/adapters/nest.d.ts.map +1 -0
  781. package/dist/tools/patterns/adapters/nest.js +122 -0
  782. package/dist/tools/patterns/adapters/nest.js.map +1 -0
  783. package/dist/tools/patterns/adapters/nextjs.d.ts +4 -0
  784. package/dist/tools/patterns/adapters/nextjs.d.ts.map +1 -0
  785. package/dist/tools/patterns/adapters/nextjs.js +59 -0
  786. package/dist/tools/patterns/adapters/nextjs.js.map +1 -0
  787. package/dist/tools/patterns/adapters/php.d.ts +3 -0
  788. package/dist/tools/patterns/adapters/php.d.ts.map +1 -0
  789. package/dist/tools/patterns/adapters/php.js +157 -0
  790. package/dist/tools/patterns/adapters/php.js.map +1 -0
  791. package/dist/tools/patterns/adapters/python.d.ts +3 -0
  792. package/dist/tools/patterns/adapters/python.d.ts.map +1 -0
  793. package/dist/tools/patterns/adapters/python.js +72 -0
  794. package/dist/tools/patterns/adapters/python.js.map +1 -0
  795. package/dist/tools/patterns/adapters/react.d.ts +4 -0
  796. package/dist/tools/patterns/adapters/react.d.ts.map +1 -0
  797. package/dist/tools/patterns/adapters/react.js +345 -0
  798. package/dist/tools/patterns/adapters/react.js.map +1 -0
  799. package/dist/tools/patterns/catalog.d.ts +8 -0
  800. package/dist/tools/patterns/catalog.d.ts.map +1 -0
  801. package/dist/tools/patterns/catalog.js +30 -0
  802. package/dist/tools/patterns/catalog.js.map +1 -0
  803. package/dist/tools/patterns/execution.d.ts +38 -0
  804. package/dist/tools/patterns/execution.d.ts.map +1 -0
  805. package/dist/tools/patterns/execution.js +298 -0
  806. package/dist/tools/patterns/execution.js.map +1 -0
  807. package/dist/tools/patterns/types.d.ts +13 -0
  808. package/dist/tools/patterns/types.d.ts.map +1 -0
  809. package/dist/tools/patterns/types.js +2 -0
  810. package/dist/tools/patterns/types.js.map +1 -0
  811. package/dist/tools/pg-drift-compare.d.ts +3 -0
  812. package/dist/tools/pg-drift-compare.d.ts.map +1 -0
  813. package/dist/tools/pg-drift-compare.js +30 -0
  814. package/dist/tools/pg-drift-compare.js.map +1 -0
  815. package/dist/tools/pg-drift-schema.d.ts +5 -0
  816. package/dist/tools/pg-drift-schema.d.ts.map +1 -0
  817. package/dist/tools/pg-drift-schema.js +28 -0
  818. package/dist/tools/pg-drift-schema.js.map +1 -0
  819. package/dist/tools/pg-drift-types.d.ts +25 -0
  820. package/dist/tools/pg-drift-types.d.ts.map +1 -0
  821. package/dist/tools/pg-drift-types.js +2 -0
  822. package/dist/tools/pg-drift-types.js.map +1 -0
  823. package/dist/tools/pg-drift.d.ts +5 -0
  824. package/dist/tools/pg-drift.d.ts.map +1 -0
  825. package/dist/tools/pg-drift.js +30 -0
  826. package/dist/tools/pg-drift.js.map +1 -0
  827. package/dist/tools/pg-introspect-formatters.d.ts +7 -0
  828. package/dist/tools/pg-introspect-formatters.d.ts.map +1 -0
  829. package/dist/tools/pg-introspect-formatters.js +66 -0
  830. package/dist/tools/pg-introspect-formatters.js.map +1 -0
  831. package/dist/tools/pg-introspect-tools.d.ts +5 -146
  832. package/dist/tools/pg-introspect-tools.d.ts.map +1 -1
  833. package/dist/tools/pg-introspect-tools.js +3 -395
  834. package/dist/tools/pg-introspect-tools.js.map +1 -1
  835. package/dist/tools/pg-introspection.d.ts +90 -0
  836. package/dist/tools/pg-introspection.d.ts.map +1 -0
  837. package/dist/tools/pg-introspection.js +288 -0
  838. package/dist/tools/pg-introspection.js.map +1 -0
  839. package/dist/tools/php-active-record-tools.d.ts +22 -0
  840. package/dist/tools/php-active-record-tools.d.ts.map +1 -0
  841. package/dist/tools/php-active-record-tools.js +165 -0
  842. package/dist/tools/php-active-record-tools.js.map +1 -0
  843. package/dist/tools/php-event-tools.d.ts +21 -0
  844. package/dist/tools/php-event-tools.d.ts.map +1 -0
  845. package/dist/tools/php-event-tools.js +205 -0
  846. package/dist/tools/php-event-tools.js.map +1 -0
  847. package/dist/tools/php-god-model-tools.d.ts +34 -0
  848. package/dist/tools/php-god-model-tools.d.ts.map +1 -0
  849. package/dist/tools/php-god-model-tools.js +88 -0
  850. package/dist/tools/php-god-model-tools.js.map +1 -0
  851. package/dist/tools/php-import-utils.d.ts +10 -0
  852. package/dist/tools/php-import-utils.d.ts.map +1 -0
  853. package/dist/tools/php-import-utils.js +71 -0
  854. package/dist/tools/php-import-utils.js.map +1 -0
  855. package/dist/tools/php-namespace-tools.d.ts +10 -0
  856. package/dist/tools/php-namespace-tools.d.ts.map +1 -0
  857. package/dist/tools/php-namespace-tools.js +98 -0
  858. package/dist/tools/php-namespace-tools.js.map +1 -0
  859. package/dist/tools/php-nplus1-tools.d.ts +27 -0
  860. package/dist/tools/php-nplus1-tools.d.ts.map +1 -0
  861. package/dist/tools/php-nplus1-tools.js +191 -0
  862. package/dist/tools/php-nplus1-tools.js.map +1 -0
  863. package/dist/tools/php-project-audit-tools.d.ts +31 -0
  864. package/dist/tools/php-project-audit-tools.d.ts.map +1 -0
  865. package/dist/tools/php-project-audit-tools.js +173 -0
  866. package/dist/tools/php-project-audit-tools.js.map +1 -0
  867. package/dist/tools/php-security-tools.d.ts +24 -0
  868. package/dist/tools/php-security-tools.d.ts.map +1 -0
  869. package/dist/tools/php-security-tools.js +172 -0
  870. package/dist/tools/php-security-tools.js.map +1 -0
  871. package/dist/tools/php-service-tools.d.ts +25 -0
  872. package/dist/tools/php-service-tools.d.ts.map +1 -0
  873. package/dist/tools/php-service-tools.js +326 -0
  874. package/dist/tools/php-service-tools.js.map +1 -0
  875. package/dist/tools/php-tools.d.ts +21 -255
  876. package/dist/tools/php-tools.d.ts.map +1 -1
  877. package/dist/tools/php-tools.js +12 -1423
  878. package/dist/tools/php-tools.js.map +1 -1
  879. package/dist/tools/php-view-tools.d.ts +76 -0
  880. package/dist/tools/php-view-tools.d.ts.map +1 -0
  881. package/dist/tools/php-view-tools.js +413 -0
  882. package/dist/tools/php-view-tools.js.map +1 -0
  883. package/dist/tools/plan-turn/formatter.d.ts +3 -0
  884. package/dist/tools/plan-turn/formatter.d.ts.map +1 -0
  885. package/dist/tools/plan-turn/formatter.js +88 -0
  886. package/dist/tools/plan-turn/formatter.js.map +1 -0
  887. package/dist/tools/plan-turn/framework-context.d.ts +5 -0
  888. package/dist/tools/plan-turn/framework-context.d.ts.map +1 -0
  889. package/dist/tools/plan-turn/framework-context.js +68 -0
  890. package/dist/tools/plan-turn/framework-context.js.map +1 -0
  891. package/dist/tools/plan-turn/framework-data.d.ts +5 -0
  892. package/dist/tools/plan-turn/framework-data.d.ts.map +1 -0
  893. package/dist/tools/plan-turn/framework-data.js +48 -0
  894. package/dist/tools/plan-turn/framework-data.js.map +1 -0
  895. package/dist/tools/plan-turn/orchestrator.d.ts +4 -0
  896. package/dist/tools/plan-turn/orchestrator.d.ts.map +1 -0
  897. package/dist/tools/plan-turn/orchestrator.js +262 -0
  898. package/dist/tools/plan-turn/orchestrator.js.map +1 -0
  899. package/dist/tools/plan-turn/query-parser.d.ts +6 -0
  900. package/dist/tools/plan-turn/query-parser.d.ts.map +1 -0
  901. package/dist/tools/plan-turn/query-parser.js +60 -0
  902. package/dist/tools/plan-turn/query-parser.js.map +1 -0
  903. package/dist/tools/plan-turn/recommendations.d.ts +11 -0
  904. package/dist/tools/plan-turn/recommendations.d.ts.map +1 -0
  905. package/dist/tools/plan-turn/recommendations.js +93 -0
  906. package/dist/tools/plan-turn/recommendations.js.map +1 -0
  907. package/dist/tools/plan-turn/stale-index.d.ts +4 -0
  908. package/dist/tools/plan-turn/stale-index.d.ts.map +1 -0
  909. package/dist/tools/plan-turn/stale-index.js +17 -0
  910. package/dist/tools/plan-turn/stale-index.js.map +1 -0
  911. package/dist/tools/plan-turn/types.d.ts +61 -0
  912. package/dist/tools/plan-turn/types.d.ts.map +1 -0
  913. package/dist/tools/plan-turn/types.js +2 -0
  914. package/dist/tools/plan-turn/types.js.map +1 -0
  915. package/dist/tools/plan-turn-tools.d.ts +8 -111
  916. package/dist/tools/plan-turn-tools.d.ts.map +1 -1
  917. package/dist/tools/plan-turn-tools.js +6 -696
  918. package/dist/tools/plan-turn-tools.js.map +1 -1
  919. package/dist/tools/project-profile-express.d.ts +3 -0
  920. package/dist/tools/project-profile-express.d.ts.map +1 -0
  921. package/dist/tools/project-profile-express.js +46 -0
  922. package/dist/tools/project-profile-express.js.map +1 -0
  923. package/dist/tools/project-profile-extractors.d.ts +9 -0
  924. package/dist/tools/project-profile-extractors.d.ts.map +1 -0
  925. package/dist/tools/project-profile-extractors.js +312 -0
  926. package/dist/tools/project-profile-extractors.js.map +1 -0
  927. package/dist/tools/project-profile-fs.d.ts +3 -0
  928. package/dist/tools/project-profile-fs.d.ts.map +1 -0
  929. package/dist/tools/project-profile-fs.js +19 -0
  930. package/dist/tools/project-profile-fs.js.map +1 -0
  931. package/dist/tools/project-profile-hono.d.ts +13 -0
  932. package/dist/tools/project-profile-hono.d.ts.map +1 -0
  933. package/dist/tools/project-profile-hono.js +110 -0
  934. package/dist/tools/project-profile-hono.js.map +1 -0
  935. package/dist/tools/project-profile-imports.d.ts +6 -0
  936. package/dist/tools/project-profile-imports.d.ts.map +1 -0
  937. package/dist/tools/project-profile-imports.js +95 -0
  938. package/dist/tools/project-profile-imports.js.map +1 -0
  939. package/dist/tools/project-profile-nest.d.ts +8 -0
  940. package/dist/tools/project-profile-nest.d.ts.map +1 -0
  941. package/dist/tools/project-profile-nest.js +352 -0
  942. package/dist/tools/project-profile-nest.js.map +1 -0
  943. package/dist/tools/project-profile-next.d.ts +5 -0
  944. package/dist/tools/project-profile-next.d.ts.map +1 -0
  945. package/dist/tools/project-profile-next.js +92 -0
  946. package/dist/tools/project-profile-next.js.map +1 -0
  947. package/dist/tools/project-profile-persistence.d.ts +3 -0
  948. package/dist/tools/project-profile-persistence.d.ts.map +1 -0
  949. package/dist/tools/project-profile-persistence.js +19 -0
  950. package/dist/tools/project-profile-persistence.js.map +1 -0
  951. package/dist/tools/project-profile-php.d.ts +8 -0
  952. package/dist/tools/project-profile-php.d.ts.map +1 -0
  953. package/dist/tools/project-profile-php.js +76 -0
  954. package/dist/tools/project-profile-php.js.map +1 -0
  955. package/dist/tools/project-profile-python.d.ts +5 -0
  956. package/dist/tools/project-profile-python.d.ts.map +1 -0
  957. package/dist/tools/project-profile-python.js +51 -0
  958. package/dist/tools/project-profile-python.js.map +1 -0
  959. package/dist/tools/project-profile-react.d.ts +6 -0
  960. package/dist/tools/project-profile-react.d.ts.map +1 -0
  961. package/dist/tools/project-profile-react.js +106 -0
  962. package/dist/tools/project-profile-react.js.map +1 -0
  963. package/dist/tools/project-profile-stack.d.ts +3 -0
  964. package/dist/tools/project-profile-stack.d.ts.map +1 -0
  965. package/dist/tools/project-profile-stack.js +354 -0
  966. package/dist/tools/project-profile-stack.js.map +1 -0
  967. package/dist/tools/project-profile-summary.d.ts +30 -0
  968. package/dist/tools/project-profile-summary.d.ts.map +1 -0
  969. package/dist/tools/project-profile-summary.js +112 -0
  970. package/dist/tools/project-profile-summary.js.map +1 -0
  971. package/dist/tools/project-profile-types.d.ts +315 -0
  972. package/dist/tools/project-profile-types.d.ts.map +1 -0
  973. package/dist/tools/project-profile-types.js +2 -0
  974. package/dist/tools/project-profile-types.js.map +1 -0
  975. package/dist/tools/project-tools.d.ts +20 -383
  976. package/dist/tools/project-tools.d.ts.map +1 -1
  977. package/dist/tools/project-tools.js +37 -1621
  978. package/dist/tools/project-tools.js.map +1 -1
  979. package/dist/tools/python-audit/aggregate.d.ts +3 -0
  980. package/dist/tools/python-audit/aggregate.d.ts.map +1 -0
  981. package/dist/tools/python-audit/aggregate.js +103 -0
  982. package/dist/tools/python-audit/aggregate.js.map +1 -0
  983. package/dist/tools/python-audit/checks/anti-patterns.d.ts +6 -0
  984. package/dist/tools/python-audit/checks/anti-patterns.d.ts.map +1 -0
  985. package/dist/tools/python-audit/checks/anti-patterns.js +14 -0
  986. package/dist/tools/python-audit/checks/anti-patterns.js.map +1 -0
  987. package/dist/tools/python-audit/checks/celery.d.ts +2 -0
  988. package/dist/tools/python-audit/checks/celery.d.ts.map +1 -0
  989. package/dist/tools/python-audit/checks/celery.js +5 -0
  990. package/dist/tools/python-audit/checks/celery.js.map +1 -0
  991. package/dist/tools/python-audit/checks/circular-imports.d.ts +2 -0
  992. package/dist/tools/python-audit/checks/circular-imports.d.ts.map +1 -0
  993. package/dist/tools/python-audit/checks/circular-imports.js +5 -0
  994. package/dist/tools/python-audit/checks/circular-imports.js.map +1 -0
  995. package/dist/tools/python-audit/checks/dead-code.d.ts +2 -0
  996. package/dist/tools/python-audit/checks/dead-code.d.ts.map +1 -0
  997. package/dist/tools/python-audit/checks/dead-code.js +5 -0
  998. package/dist/tools/python-audit/checks/dead-code.js.map +1 -0
  999. package/dist/tools/python-audit/checks/dependencies.d.ts +2 -0
  1000. package/dist/tools/python-audit/checks/dependencies.d.ts.map +1 -0
  1001. package/dist/tools/python-audit/checks/dependencies.js +5 -0
  1002. package/dist/tools/python-audit/checks/dependencies.js.map +1 -0
  1003. package/dist/tools/python-audit/checks/django-settings.d.ts +2 -0
  1004. package/dist/tools/python-audit/checks/django-settings.d.ts.map +1 -0
  1005. package/dist/tools/python-audit/checks/django-settings.js +5 -0
  1006. package/dist/tools/python-audit/checks/django-settings.js.map +1 -0
  1007. package/dist/tools/python-audit/checks/framework-wiring.d.ts +2 -0
  1008. package/dist/tools/python-audit/checks/framework-wiring.d.ts.map +1 -0
  1009. package/dist/tools/python-audit/checks/framework-wiring.js +5 -0
  1010. package/dist/tools/python-audit/checks/framework-wiring.js.map +1 -0
  1011. package/dist/tools/python-audit/checks/pytest-fixtures.d.ts +2 -0
  1012. package/dist/tools/python-audit/checks/pytest-fixtures.d.ts.map +1 -0
  1013. package/dist/tools/python-audit/checks/pytest-fixtures.js +5 -0
  1014. package/dist/tools/python-audit/checks/pytest-fixtures.js.map +1 -0
  1015. package/dist/tools/python-audit/runner.d.ts +5 -0
  1016. package/dist/tools/python-audit/runner.d.ts.map +1 -0
  1017. package/dist/tools/python-audit/runner.js +18 -0
  1018. package/dist/tools/python-audit/runner.js.map +1 -0
  1019. package/dist/tools/python-audit/types.d.ts +43 -0
  1020. package/dist/tools/python-audit/types.d.ts.map +1 -0
  1021. package/dist/tools/python-audit/types.js +2 -0
  1022. package/dist/tools/python-audit/types.js.map +1 -0
  1023. package/dist/tools/python-audit.d.ts +3 -39
  1024. package/dist/tools/python-audit.d.ts.map +1 -1
  1025. package/dist/tools/python-audit.js +34 -233
  1026. package/dist/tools/python-audit.js.map +1 -1
  1027. package/dist/tools/react-compiler-tools.d.ts +37 -0
  1028. package/dist/tools/react-compiler-tools.d.ts.map +1 -0
  1029. package/dist/tools/react-compiler-tools.js +104 -0
  1030. package/dist/tools/react-compiler-tools.js.map +1 -0
  1031. package/dist/tools/react-component-tree-tools.d.ts +58 -0
  1032. package/dist/tools/react-component-tree-tools.d.ts.map +1 -0
  1033. package/dist/tools/react-component-tree-tools.js +292 -0
  1034. package/dist/tools/react-component-tree-tools.js.map +1 -0
  1035. package/dist/tools/react-context-tools.d.ts +41 -0
  1036. package/dist/tools/react-context-tools.d.ts.map +1 -0
  1037. package/dist/tools/react-context-tools.js +76 -0
  1038. package/dist/tools/react-context-tools.js.map +1 -0
  1039. package/dist/tools/react-hooks-tools.d.ts +58 -0
  1040. package/dist/tools/react-hooks-tools.d.ts.map +1 -0
  1041. package/dist/tools/react-hooks-tools.js +144 -0
  1042. package/dist/tools/react-hooks-tools.js.map +1 -0
  1043. package/dist/tools/react-quickstart-tools.d.ts +59 -0
  1044. package/dist/tools/react-quickstart-tools.d.ts.map +1 -0
  1045. package/dist/tools/react-quickstart-tools.js +164 -0
  1046. package/dist/tools/react-quickstart-tools.js.map +1 -0
  1047. package/dist/tools/react-render-tools.d.ts +75 -0
  1048. package/dist/tools/react-render-tools.d.ts.map +1 -0
  1049. package/dist/tools/react-render-tools.js +234 -0
  1050. package/dist/tools/react-render-tools.js.map +1 -0
  1051. package/dist/tools/react-shared-tools.d.ts +5 -0
  1052. package/dist/tools/react-shared-tools.d.ts.map +1 -0
  1053. package/dist/tools/react-shared-tools.js +12 -0
  1054. package/dist/tools/react-shared-tools.js.map +1 -0
  1055. package/dist/tools/react-suspense-tools.d.ts +29 -0
  1056. package/dist/tools/react-suspense-tools.d.ts.map +1 -0
  1057. package/dist/tools/react-suspense-tools.js +269 -0
  1058. package/dist/tools/react-suspense-tools.js.map +1 -0
  1059. package/dist/tools/react-tools.d.ts +19 -340
  1060. package/dist/tools/react-tools.d.ts.map +1 -1
  1061. package/dist/tools/react-tools.js +10 -1263
  1062. package/dist/tools/react-tools.js.map +1 -1
  1063. package/dist/tools/review-diff/check-runner.d.ts +5 -0
  1064. package/dist/tools/review-diff/check-runner.d.ts.map +1 -0
  1065. package/dist/tools/review-diff/check-runner.js +26 -0
  1066. package/dist/tools/review-diff/check-runner.js.map +1 -0
  1067. package/dist/tools/review-diff/checks/astro-hydration.d.ts +8 -0
  1068. package/dist/tools/review-diff/checks/astro-hydration.d.ts.map +1 -0
  1069. package/dist/tools/review-diff/checks/astro-hydration.js +54 -0
  1070. package/dist/tools/review-diff/checks/astro-hydration.js.map +1 -0
  1071. package/dist/tools/review-diff/checks/blast-radius.d.ts +7 -0
  1072. package/dist/tools/review-diff/checks/blast-radius.d.ts.map +1 -0
  1073. package/dist/tools/review-diff/checks/blast-radius.js +39 -0
  1074. package/dist/tools/review-diff/checks/blast-radius.js.map +1 -0
  1075. package/dist/tools/review-diff/checks/breaking.d.ts +13 -0
  1076. package/dist/tools/review-diff/checks/breaking.d.ts.map +1 -0
  1077. package/dist/tools/review-diff/checks/breaking.js +115 -0
  1078. package/dist/tools/review-diff/checks/breaking.js.map +1 -0
  1079. package/dist/tools/review-diff/checks/bug-patterns.d.ts +8 -0
  1080. package/dist/tools/review-diff/checks/bug-patterns.d.ts.map +1 -0
  1081. package/dist/tools/review-diff/checks/bug-patterns.js +130 -0
  1082. package/dist/tools/review-diff/checks/bug-patterns.js.map +1 -0
  1083. package/dist/tools/review-diff/checks/complexity.d.ts +8 -0
  1084. package/dist/tools/review-diff/checks/complexity.d.ts.map +1 -0
  1085. package/dist/tools/review-diff/checks/complexity.js +41 -0
  1086. package/dist/tools/review-diff/checks/complexity.js.map +1 -0
  1087. package/dist/tools/review-diff/checks/coupling.d.ts +7 -0
  1088. package/dist/tools/review-diff/checks/coupling.d.ts.map +1 -0
  1089. package/dist/tools/review-diff/checks/coupling.js +52 -0
  1090. package/dist/tools/review-diff/checks/coupling.js.map +1 -0
  1091. package/dist/tools/review-diff/checks/dead-code.d.ts +7 -0
  1092. package/dist/tools/review-diff/checks/dead-code.d.ts.map +1 -0
  1093. package/dist/tools/review-diff/checks/dead-code.js +39 -0
  1094. package/dist/tools/review-diff/checks/dead-code.js.map +1 -0
  1095. package/dist/tools/review-diff/checks/hotspots.d.ts +8 -0
  1096. package/dist/tools/review-diff/checks/hotspots.d.ts.map +1 -0
  1097. package/dist/tools/review-diff/checks/hotspots.js +39 -0
  1098. package/dist/tools/review-diff/checks/hotspots.js.map +1 -0
  1099. package/dist/tools/review-diff/checks/secrets.d.ts +7 -0
  1100. package/dist/tools/review-diff/checks/secrets.d.ts.map +1 -0
  1101. package/dist/tools/review-diff/checks/secrets.js +38 -0
  1102. package/dist/tools/review-diff/checks/secrets.js.map +1 -0
  1103. package/dist/tools/review-diff/checks/test-gaps.d.ts +16 -0
  1104. package/dist/tools/review-diff/checks/test-gaps.d.ts.map +1 -0
  1105. package/dist/tools/review-diff/checks/test-gaps.js +77 -0
  1106. package/dist/tools/review-diff/checks/test-gaps.js.map +1 -0
  1107. package/dist/tools/review-diff/constants.d.ts +6 -0
  1108. package/dist/tools/review-diff/constants.d.ts.map +1 -0
  1109. package/dist/tools/review-diff/constants.js +16 -0
  1110. package/dist/tools/review-diff/constants.js.map +1 -0
  1111. package/dist/tools/review-diff/file-pattern.d.ts +2 -0
  1112. package/dist/tools/review-diff/file-pattern.d.ts.map +1 -0
  1113. package/dist/tools/review-diff/file-pattern.js +9 -0
  1114. package/dist/tools/review-diff/file-pattern.js.map +1 -0
  1115. package/dist/tools/review-diff/orchestrator.d.ts +3 -0
  1116. package/dist/tools/review-diff/orchestrator.d.ts.map +1 -0
  1117. package/dist/tools/review-diff/orchestrator.js +173 -0
  1118. package/dist/tools/review-diff/orchestrator.js.map +1 -0
  1119. package/dist/tools/review-diff/scoring.d.ts +31 -0
  1120. package/dist/tools/review-diff/scoring.d.ts.map +1 -0
  1121. package/dist/tools/review-diff/scoring.js +82 -0
  1122. package/dist/tools/review-diff/scoring.js.map +1 -0
  1123. package/dist/tools/review-diff/timeout.d.ts +5 -0
  1124. package/dist/tools/review-diff/timeout.d.ts.map +1 -0
  1125. package/dist/tools/review-diff/timeout.js +14 -0
  1126. package/dist/tools/review-diff/timeout.js.map +1 -0
  1127. package/dist/tools/review-diff/types.d.ts +56 -0
  1128. package/dist/tools/review-diff/types.d.ts.map +1 -0
  1129. package/dist/tools/review-diff/types.js +2 -0
  1130. package/dist/tools/review-diff/types.js.map +1 -0
  1131. package/dist/tools/review-diff-tools.d.ts +19 -147
  1132. package/dist/tools/review-diff-tools.d.ts.map +1 -1
  1133. package/dist/tools/review-diff-tools.js +18 -941
  1134. package/dist/tools/review-diff-tools.js.map +1 -1
  1135. package/dist/tools/route-shared.d.ts +6 -0
  1136. package/dist/tools/route-shared.d.ts.map +1 -0
  1137. package/dist/tools/route-shared.js +37 -0
  1138. package/dist/tools/route-shared.js.map +1 -0
  1139. package/dist/tools/route-tools.d.ts +1 -7
  1140. package/dist/tools/route-tools.d.ts.map +1 -1
  1141. package/dist/tools/route-tools.js +2 -22
  1142. package/dist/tools/route-tools.js.map +1 -1
  1143. package/dist/tools/search-tools/constants.d.ts +33 -0
  1144. package/dist/tools/search-tools/constants.d.ts.map +1 -0
  1145. package/dist/tools/search-tools/constants.js +54 -0
  1146. package/dist/tools/search-tools/constants.js.map +1 -0
  1147. package/dist/tools/search-tools/ripgrep.d.ts +13 -0
  1148. package/dist/tools/search-tools/ripgrep.d.ts.map +1 -0
  1149. package/dist/tools/search-tools/ripgrep.js +138 -0
  1150. package/dist/tools/search-tools/ripgrep.js.map +1 -0
  1151. package/dist/tools/search-tools/semantic-search.d.ts +9 -0
  1152. package/dist/tools/search-tools/semantic-search.d.ts.map +1 -0
  1153. package/dist/tools/search-tools/semantic-search.js +19 -0
  1154. package/dist/tools/search-tools/semantic-search.js.map +1 -0
  1155. package/dist/tools/search-tools/symbol-search.d.ts +4 -0
  1156. package/dist/tools/search-tools/symbol-search.d.ts.map +1 -0
  1157. package/dist/tools/search-tools/symbol-search.js +146 -0
  1158. package/dist/tools/search-tools/symbol-search.js.map +1 -0
  1159. package/dist/tools/search-tools/text-search.d.ts +10 -0
  1160. package/dist/tools/search-tools/text-search.d.ts.map +1 -0
  1161. package/dist/tools/search-tools/text-search.js +260 -0
  1162. package/dist/tools/search-tools/text-search.js.map +1 -0
  1163. package/dist/tools/search-tools/types.d.ts +28 -0
  1164. package/dist/tools/search-tools/types.d.ts.map +1 -0
  1165. package/dist/tools/search-tools/types.js +2 -0
  1166. package/dist/tools/search-tools/types.js.map +1 -0
  1167. package/dist/tools/search-tools/zero-hit.d.ts +3 -0
  1168. package/dist/tools/search-tools/zero-hit.d.ts.map +1 -0
  1169. package/dist/tools/search-tools/zero-hit.js +92 -0
  1170. package/dist/tools/search-tools/zero-hit.js.map +1 -0
  1171. package/dist/tools/search-tools.d.ts +5 -64
  1172. package/dist/tools/search-tools.d.ts.map +1 -1
  1173. package/dist/tools/search-tools.js +4 -770
  1174. package/dist/tools/search-tools.js.map +1 -1
  1175. package/dist/tools/secret-detectors.d.ts +12 -0
  1176. package/dist/tools/secret-detectors.d.ts.map +1 -0
  1177. package/dist/tools/secret-detectors.js +86 -0
  1178. package/dist/tools/secret-detectors.js.map +1 -0
  1179. package/dist/tools/secret-file-scanner.d.ts +7 -0
  1180. package/dist/tools/secret-file-scanner.d.ts.map +1 -0
  1181. package/dist/tools/secret-file-scanner.js +52 -0
  1182. package/dist/tools/secret-file-scanner.js.map +1 -0
  1183. package/dist/tools/secret-scan-cache.d.ts +6 -0
  1184. package/dist/tools/secret-scan-cache.d.ts.map +1 -0
  1185. package/dist/tools/secret-scan-cache.js +14 -0
  1186. package/dist/tools/secret-scan-cache.js.map +1 -0
  1187. package/dist/tools/secret-scan-shared.d.ts +5 -0
  1188. package/dist/tools/secret-scan-shared.d.ts.map +1 -0
  1189. package/dist/tools/secret-scan-shared.js +4 -0
  1190. package/dist/tools/secret-scan-shared.js.map +1 -0
  1191. package/dist/tools/secret-scan-types.d.ts +21 -0
  1192. package/dist/tools/secret-scan-types.d.ts.map +1 -0
  1193. package/dist/tools/secret-scan-types.js +2 -0
  1194. package/dist/tools/secret-scan-types.js.map +1 -0
  1195. package/dist/tools/secret-tools.d.ts +3 -75
  1196. package/dist/tools/secret-tools.d.ts.map +1 -1
  1197. package/dist/tools/secret-tools.js +4 -316
  1198. package/dist/tools/secret-tools.js.map +1 -1
  1199. package/dist/tools/sql-audit-tools.d.ts +42 -0
  1200. package/dist/tools/sql-audit-tools.d.ts.map +1 -0
  1201. package/dist/tools/sql-audit-tools.js +130 -0
  1202. package/dist/tools/sql-audit-tools.js.map +1 -0
  1203. package/dist/tools/sql-column-tools.d.ts +28 -0
  1204. package/dist/tools/sql-column-tools.d.ts.map +1 -0
  1205. package/dist/tools/sql-column-tools.js +58 -0
  1206. package/dist/tools/sql-column-tools.js.map +1 -0
  1207. package/dist/tools/sql-complexity-tools.d.ts +22 -0
  1208. package/dist/tools/sql-complexity-tools.d.ts.map +1 -0
  1209. package/dist/tools/sql-complexity-tools.js +60 -0
  1210. package/dist/tools/sql-complexity-tools.js.map +1 -0
  1211. package/dist/tools/sql-dml-safety-tools.d.ts +26 -0
  1212. package/dist/tools/sql-dml-safety-tools.d.ts.map +1 -0
  1213. package/dist/tools/sql-dml-safety-tools.js +104 -0
  1214. package/dist/tools/sql-dml-safety-tools.js.map +1 -0
  1215. package/dist/tools/sql-drift-tools.d.ts +39 -0
  1216. package/dist/tools/sql-drift-tools.d.ts.map +1 -0
  1217. package/dist/tools/sql-drift-tools.js +238 -0
  1218. package/dist/tools/sql-drift-tools.js.map +1 -0
  1219. package/dist/tools/sql-lint-schema-tools.d.ts +28 -0
  1220. package/dist/tools/sql-lint-schema-tools.d.ts.map +1 -0
  1221. package/dist/tools/sql-lint-schema-tools.js +96 -0
  1222. package/dist/tools/sql-lint-schema-tools.js.map +1 -0
  1223. package/dist/tools/sql-migration-diff-tools.d.ts +24 -0
  1224. package/dist/tools/sql-migration-diff-tools.d.ts.map +1 -0
  1225. package/dist/tools/sql-migration-diff-tools.js +120 -0
  1226. package/dist/tools/sql-migration-diff-tools.js.map +1 -0
  1227. package/dist/tools/sql-orphan-table-tools.d.ts +20 -0
  1228. package/dist/tools/sql-orphan-table-tools.d.ts.map +1 -0
  1229. package/dist/tools/sql-orphan-table-tools.js +70 -0
  1230. package/dist/tools/sql-orphan-table-tools.js.map +1 -0
  1231. package/dist/tools/sql-query-tools.d.ts +32 -0
  1232. package/dist/tools/sql-query-tools.d.ts.map +1 -0
  1233. package/dist/tools/sql-query-tools.js +130 -0
  1234. package/dist/tools/sql-query-tools.js.map +1 -0
  1235. package/dist/tools/sql-schema-tools.d.ts +47 -0
  1236. package/dist/tools/sql-schema-tools.d.ts.map +1 -0
  1237. package/dist/tools/sql-schema-tools.js +202 -0
  1238. package/dist/tools/sql-schema-tools.js.map +1 -0
  1239. package/dist/tools/sql-shared-tools.d.ts +6 -0
  1240. package/dist/tools/sql-shared-tools.d.ts.map +1 -0
  1241. package/dist/tools/sql-shared-tools.js +59 -0
  1242. package/dist/tools/sql-shared-tools.js.map +1 -0
  1243. package/dist/tools/sql-tools.d.ts +25 -296
  1244. package/dist/tools/sql-tools.d.ts.map +1 -1
  1245. package/dist/tools/sql-tools.js +15 -1232
  1246. package/dist/tools/sql-tools.js.map +1 -1
  1247. package/dist/tools/status-tools.js +1 -1
  1248. package/dist/tools/status-tools.js.map +1 -1
  1249. package/dist/tools/workspace-tools.d.ts +1 -1
  1250. package/dist/tools/yii3-migration-categories-application.d.ts +4 -0
  1251. package/dist/tools/yii3-migration-categories-application.d.ts.map +1 -0
  1252. package/dist/tools/yii3-migration-categories-application.js +56 -0
  1253. package/dist/tools/yii3-migration-categories-application.js.map +1 -0
  1254. package/dist/tools/yii3-migration-categories-infrastructure.d.ts +4 -0
  1255. package/dist/tools/yii3-migration-categories-infrastructure.d.ts.map +1 -0
  1256. package/dist/tools/yii3-migration-categories-infrastructure.js +67 -0
  1257. package/dist/tools/yii3-migration-categories-infrastructure.js.map +1 -0
  1258. package/dist/tools/yii3-migration-categories-model-view.d.ts +4 -0
  1259. package/dist/tools/yii3-migration-categories-model-view.d.ts.map +1 -0
  1260. package/dist/tools/yii3-migration-categories-model-view.js +59 -0
  1261. package/dist/tools/yii3-migration-categories-model-view.js.map +1 -0
  1262. package/dist/tools/yii3-migration-categories-runtime.d.ts +4 -0
  1263. package/dist/tools/yii3-migration-categories-runtime.d.ts.map +1 -0
  1264. package/dist/tools/yii3-migration-categories-runtime.js +49 -0
  1265. package/dist/tools/yii3-migration-categories-runtime.js.map +1 -0
  1266. package/dist/tools/yii3-migration-categories.d.ts +5 -0
  1267. package/dist/tools/yii3-migration-categories.d.ts.map +1 -0
  1268. package/dist/tools/yii3-migration-categories.js +18 -0
  1269. package/dist/tools/yii3-migration-categories.js.map +1 -0
  1270. package/dist/tools/yii3-migration-report.d.ts +4 -0
  1271. package/dist/tools/yii3-migration-report.d.ts.map +1 -0
  1272. package/dist/tools/yii3-migration-report.js +88 -0
  1273. package/dist/tools/yii3-migration-report.js.map +1 -0
  1274. package/dist/tools/yii3-migration-scanner.d.ts +28 -0
  1275. package/dist/tools/yii3-migration-scanner.d.ts.map +1 -0
  1276. package/dist/tools/yii3-migration-scanner.js +87 -0
  1277. package/dist/tools/yii3-migration-scanner.js.map +1 -0
  1278. package/dist/tools/yii3-migration-tools.d.ts +4 -73
  1279. package/dist/tools/yii3-migration-tools.d.ts.map +1 -1
  1280. package/dist/tools/yii3-migration-tools.js +5 -433
  1281. package/dist/tools/yii3-migration-tools.js.map +1 -1
  1282. package/dist/tools/yii3-migration-types.d.ts +50 -0
  1283. package/dist/tools/yii3-migration-types.d.ts.map +1 -0
  1284. package/dist/tools/yii3-migration-types.js +3 -0
  1285. package/dist/tools/yii3-migration-types.js.map +1 -0
  1286. package/dist/utils/edge-provenance.d.ts +55 -0
  1287. package/dist/utils/edge-provenance.d.ts.map +1 -0
  1288. package/dist/utils/edge-provenance.js +53 -0
  1289. package/dist/utils/edge-provenance.js.map +1 -0
  1290. package/dist/utils/git-validation.d.ts +24 -0
  1291. package/dist/utils/git-validation.d.ts.map +1 -1
  1292. package/dist/utils/git-validation.js +30 -0
  1293. package/dist/utils/git-validation.js.map +1 -1
  1294. package/dist/utils/overlay-cache.d.ts +38 -0
  1295. package/dist/utils/overlay-cache.d.ts.map +1 -0
  1296. package/dist/utils/overlay-cache.js +73 -0
  1297. package/dist/utils/overlay-cache.js.map +1 -0
  1298. package/dist/utils/source-stripper/code-handler.d.ts +3 -0
  1299. package/dist/utils/source-stripper/code-handler.d.ts.map +1 -0
  1300. package/dist/utils/source-stripper/code-handler.js +79 -0
  1301. package/dist/utils/source-stripper/code-handler.js.map +1 -0
  1302. package/dist/utils/source-stripper/comment-handler.d.ts +4 -0
  1303. package/dist/utils/source-stripper/comment-handler.d.ts.map +1 -0
  1304. package/dist/utils/source-stripper/comment-handler.js +24 -0
  1305. package/dist/utils/source-stripper/comment-handler.js.map +1 -0
  1306. package/dist/utils/source-stripper/machine.d.ts +2 -0
  1307. package/dist/utils/source-stripper/machine.d.ts.map +1 -0
  1308. package/dist/utils/source-stripper/machine.js +34 -0
  1309. package/dist/utils/source-stripper/machine.js.map +1 -0
  1310. package/dist/utils/source-stripper/regex-handler.d.ts +3 -0
  1311. package/dist/utils/source-stripper/regex-handler.d.ts.map +1 -0
  1312. package/dist/utils/source-stripper/regex-handler.js +44 -0
  1313. package/dist/utils/source-stripper/regex-handler.js.map +1 -0
  1314. package/dist/utils/source-stripper/state.d.ts +4 -0
  1315. package/dist/utils/source-stripper/state.d.ts.map +1 -0
  1316. package/dist/utils/source-stripper/state.js +20 -0
  1317. package/dist/utils/source-stripper/state.js.map +1 -0
  1318. package/dist/utils/source-stripper/string-handler.d.ts +3 -0
  1319. package/dist/utils/source-stripper/string-handler.d.ts.map +1 -0
  1320. package/dist/utils/source-stripper/string-handler.js +19 -0
  1321. package/dist/utils/source-stripper/string-handler.js.map +1 -0
  1322. package/dist/utils/source-stripper/template-handler.d.ts +4 -0
  1323. package/dist/utils/source-stripper/template-handler.d.ts.map +1 -0
  1324. package/dist/utils/source-stripper/template-handler.js +40 -0
  1325. package/dist/utils/source-stripper/template-handler.js.map +1 -0
  1326. package/dist/utils/source-stripper/types.d.ts +17 -0
  1327. package/dist/utils/source-stripper/types.d.ts.map +1 -0
  1328. package/dist/utils/source-stripper/types.js +4 -0
  1329. package/dist/utils/source-stripper/types.js.map +1 -0
  1330. package/dist/utils/source-stripper.d.ts +0 -21
  1331. package/dist/utils/source-stripper.d.ts.map +1 -1
  1332. package/dist/utils/source-stripper.js +6 -234
  1333. package/dist/utils/source-stripper.js.map +1 -1
  1334. package/dist/utils/walk/errors.d.ts +4 -0
  1335. package/dist/utils/walk/errors.d.ts.map +1 -0
  1336. package/dist/utils/walk/errors.js +18 -0
  1337. package/dist/utils/walk/errors.js.map +1 -0
  1338. package/dist/utils/walk/filters.d.ts +11 -0
  1339. package/dist/utils/walk/filters.d.ts.map +1 -0
  1340. package/dist/utils/walk/filters.js +53 -0
  1341. package/dist/utils/walk/filters.js.map +1 -0
  1342. package/dist/utils/walk/limits.d.ts +10 -0
  1343. package/dist/utils/walk/limits.d.ts.map +1 -0
  1344. package/dist/utils/walk/limits.js +22 -0
  1345. package/dist/utils/walk/limits.js.map +1 -0
  1346. package/dist/utils/walk/traversal.d.ts +9 -0
  1347. package/dist/utils/walk/traversal.d.ts.map +1 -0
  1348. package/dist/utils/walk/traversal.js +38 -0
  1349. package/dist/utils/walk/traversal.js.map +1 -0
  1350. package/dist/utils/walk/types.d.ts +18 -0
  1351. package/dist/utils/walk/types.d.ts.map +1 -0
  1352. package/dist/utils/walk/types.js +2 -0
  1353. package/dist/utils/walk/types.js.map +1 -0
  1354. package/dist/utils/walk.d.ts +4 -65
  1355. package/dist/utils/walk.d.ts.map +1 -1
  1356. package/dist/utils/walk.js +23 -151
  1357. package/dist/utils/walk.js.map +1 -1
  1358. package/package.json +6 -5
@@ -1,1267 +1,14 @@
1
1
  /**
2
2
  * React-specific code intelligence tools.
3
3
  *
4
- * - traceComponentTree: BFS component composition tree (which components
5
- * render which, via JSX usage)
6
- * - analyzeHooks: hook inventory + Rule of Hooks violation detection
7
- * - analyzeRenders: static re-render risk analysis (inline props, missing memo)
8
- */
9
- import { getCodeIndex } from "./index-tools.js";
10
- import { isTestFileStrict as isTestFile } from "../utils/test-file.js";
11
- import { resolveAlias } from "../utils/react-alias.js";
12
- export { buildJsxAdjacency, buildComponentTree, extractJsxComponents, extractHookCalls, extractHookNames, findRuleOfHooksViolations, findRenderRisks, buildReverseAdjacency, computePropChainDepth };
13
- // Tier 7 helpers exported above at definition site (findSuspenseAncestor, findLazyComponentsWithoutSuspense)
14
- // formatRendersMarkdown and buildContextGraph are exported inline at definition site below
15
- // ── Limits (mirror graph-tools.ts) ──────────────────────────
16
- const MAX_TREE_NODES = 500;
17
- const MAX_CHILDREN_PER_NODE = 20;
18
- const DEFAULT_DEPTH = 3;
19
- // ── React stdlib hooks (used as denylist in tracing and inventory) ──
20
- export const REACT_STDLIB_HOOKS = new Set([
21
- "useState", "useEffect", "useCallback", "useMemo", "useRef",
22
- "useContext", "useReducer", "useLayoutEffect", "useImperativeHandle",
23
- "useDebugValue", "useDeferredValue", "useTransition", "useId",
24
- "useSyncExternalStore", "useInsertionEffect", "useOptimistic",
25
- "useFormState", "useFormStatus", "use",
26
- ]);
27
- /**
28
- * Extract PascalCase JSX element names from source code.
29
- * Returns the set of component names used via `<ComponentName ...>` or `<ComponentName/>`.
30
- * HTML elements (lowercase) are skipped.
31
- */
32
- function extractJsxComponents(source) {
33
- const names = new Set();
34
- const pattern = /<([A-Z][a-zA-Z0-9_$]*)\b/g;
35
- let m;
36
- while ((m = pattern.exec(source)) !== null) {
37
- names.add(m[1]);
38
- }
39
- return names;
40
- }
41
- /**
42
- * Build component → rendered-components adjacency from the index.
43
- * Only considers symbols with kind "component" (requires Wave 1 extractor).
44
- */
45
- function buildJsxAdjacency(symbols) {
46
- const children = new Map();
47
- // name → component symbols lookup (may have multiple definitions with same name)
48
- const nameToComponents = new Map();
49
- // file → component symbols lookup (used by alias-resolved imports)
50
- const fileToComponents = new Map();
51
- for (const sym of symbols) {
52
- if (sym.kind !== "component")
53
- continue;
54
- const existing = nameToComponents.get(sym.name);
55
- if (existing)
56
- existing.push(sym);
57
- else
58
- nameToComponents.set(sym.name, [sym]);
59
- const fileExisting = fileToComponents.get(sym.file);
60
- if (fileExisting)
61
- fileExisting.push(sym);
62
- else
63
- fileToComponents.set(sym.file, [sym]);
64
- }
65
- // Build a synthetic files list for resolveAlias() — needs only `path` field.
66
- const filesList = [...fileToComponents.keys()].map((path) => ({ path }));
67
- for (const sym of symbols) {
68
- if (sym.kind !== "component" || !sym.source)
69
- continue;
70
- const rendered = extractJsxComponents(sym.source);
71
- const childList = [];
72
- // Parse alias imports in this component's source for fallback resolution
73
- // (Tier 4 — Item 8 wired into trace_component_tree).
74
- // Pattern: import { X, Y as Z } from "@/components/Button"
75
- // Pattern: import Default from "@/components/Foo"
76
- const aliasImports = new Map(); // localName → resolved file
77
- const importRe = /import\s+(?:(\w+)|(?:\{([^}]+)\}))(?:\s*,\s*(?:(\w+)|(?:\{([^}]+)\})))?\s+from\s+["'](@\/[^"']+)["']/g;
78
- let im;
79
- while ((im = importRe.exec(sym.source)) !== null) {
80
- const aliasPath = im[5];
81
- const resolved = resolveAlias(aliasPath, filesList);
82
- if (!resolved)
83
- continue;
84
- // default import
85
- if (im[1])
86
- aliasImports.set(im[1], resolved);
87
- if (im[3])
88
- aliasImports.set(im[3], resolved);
89
- // named imports {A, B as C}
90
- const namedGroup = im[2] ?? im[4];
91
- if (namedGroup) {
92
- for (const part of namedGroup.split(",")) {
93
- const trimmed = part.trim();
94
- // Handle "X as Y" → local name is Y
95
- const asMatch = trimmed.match(/^(\w+)\s+as\s+(\w+)$/);
96
- const localName = asMatch ? asMatch[2] : trimmed.replace(/\s.*$/, "");
97
- if (localName)
98
- aliasImports.set(localName, resolved);
99
- }
100
- }
101
- }
102
- for (const name of rendered) {
103
- if (name === sym.name)
104
- continue; // skip self-reference
105
- const targets = nameToComponents.get(name);
106
- if (targets) {
107
- for (const target of targets) {
108
- if (target.id !== sym.id)
109
- childList.push(target);
110
- }
111
- continue;
112
- }
113
- // Fallback: alias-resolved import lookup
114
- const aliasTargetFile = aliasImports.get(name);
115
- if (aliasTargetFile) {
116
- const fileTargets = fileToComponents.get(aliasTargetFile) ?? [];
117
- for (const target of fileTargets) {
118
- if (target.id !== sym.id)
119
- childList.push(target);
120
- }
121
- }
122
- }
123
- if (childList.length > 0)
124
- children.set(sym.id, childList);
125
- }
126
- return { children };
127
- }
128
- // ─────────────────────────────────────────────────────────────
129
- // Tier 5 — prop_chain_depth metric helpers
130
- // ─────────────────────────────────────────────────────────────
131
- /**
132
- * Invert JsxAdjacency to a reverse adjacency: child id → sorted list of parent ids.
133
- *
134
- * Used by computePropChainDepth to walk UP the render tree (from a leaf back toward
135
- * roots) and measure render-tree depth. Sorts each parent list alphabetically for
136
- * deterministic output on cyclic graphs.
137
- */
138
- function buildReverseAdjacency(adjacency) {
139
- const parents = new Map();
140
- for (const [parentId, children] of adjacency.children) {
141
- for (const child of children) {
142
- const list = parents.get(child.id) ?? [];
143
- list.push(parentId);
144
- parents.set(child.id, list);
145
- }
146
- }
147
- // Sort each parent list alphabetically for determinism on cyclic graphs
148
- for (const [k, v] of parents)
149
- parents.set(k, [...v].sort());
150
- return parents;
151
- }
152
- /**
153
- * Compute the longest path (in edges) from componentId UP to the deepest root in
154
- * the reverse JSX adjacency. This is render-tree depth — NOT prop-flow depth.
155
- *
156
- * Iterative implementation using an explicit 2-phase ("enter"/"exit") stack to
157
- * avoid recursive blowup on deep linear chains (V8 stack ~10-15K frames).
158
- *
159
- * Uses shared `memo` and `inProgress` across all calls in one analyzeRenders run
160
- * to amortize cost to O(V+E) total.
161
- */
162
- function computePropChainDepth(componentId, reverseAdjacency, memo, inProgress) {
163
- if (memo.has(componentId))
164
- return memo.get(componentId);
165
- if (inProgress.has(componentId))
166
- return 0;
167
- const stack = [{ node: componentId, phase: "enter" }];
168
- while (stack.length > 0) {
169
- const f = stack[stack.length - 1];
170
- if (f.phase === "enter") {
171
- if (memo.has(f.node)) {
172
- stack.pop();
173
- continue;
174
- }
175
- if (inProgress.has(f.node)) {
176
- stack.pop();
177
- continue;
178
- }
179
- inProgress.add(f.node);
180
- f.phase = "exit";
181
- for (const p of reverseAdjacency.get(f.node) ?? []) {
182
- if (!memo.has(p) && !inProgress.has(p)) {
183
- stack.push({ node: p, phase: "enter" });
184
- }
185
- }
186
- }
187
- else {
188
- // exit phase — exclude back-edges (parents still in inProgress closing a
189
- // cycle) so a strongly-connected component with no real root reports
190
- // depth 0 instead of inflating linearly with cycle-traversal order.
191
- const parents = reverseAdjacency.get(f.node) ?? [];
192
- let maxParentDepth = -1;
193
- let nonCyclicParents = 0;
194
- for (const p of parents) {
195
- if (inProgress.has(p))
196
- continue; // back-edge — exclude from depth
197
- nonCyclicParents++;
198
- const d = memo.get(p) ?? 0;
199
- if (d > maxParentDepth)
200
- maxParentDepth = d;
201
- }
202
- const depth = nonCyclicParents === 0 ? 0 : maxParentDepth + 1;
203
- memo.set(f.node, depth);
204
- inProgress.delete(f.node);
205
- stack.pop();
206
- }
207
- }
208
- return memo.get(componentId);
209
- }
210
- // ─────────────────────────────────────────────────────────────
211
- // Tier 7 — Cross-file Suspense ancestor detection
212
- // ─────────────────────────────────────────────────────────────
213
- /**
214
- * Strip line comments, block comments, and string literals from source before
215
- * scanning for JSX tokens. Tier 7 R-1 fix — prevents `<Suspense>` mentions in
216
- * comments/JSDoc/string literals from spoofing the ancestor check.
217
- *
218
- * Strategy: replace each construct with whitespace of equal length so line/col
219
- * positions remain stable for any downstream regex. Order matters:
220
- * 1. Block comments first (greedy until `* /`)
221
- * 2. Line comments (until newline)
222
- * 3. Template literals (handle ${} expressions opaquely — strip whole literal)
223
- * 4. Single-quoted strings
224
- * 5. Double-quoted strings
225
- *
226
- * This is a heuristic stripper, not a full lexer; it suffices for boundary
227
- * detection on idiomatic source. Pathological inputs (comment-like text inside
228
- * unclosed strings) are not the target.
229
- */
230
- function stripCommentsAndStrings(source) {
231
- // Single-pass state machine — adversarial review flagged regex layering as
232
- // unreliable when `//` appears inside string literals (would be consumed as
233
- // a comment first). State machine processes character-by-character so a
234
- // `//` inside `"..."` correctly stays inside the string.
235
- const out = [];
236
- let i = 0;
237
- const n = source.length;
238
- let state = "code";
239
- // Track previous non-whitespace char to detect when `/` starts a regex literal.
240
- // After expression-terminating tokens (`)`, `]`, identifier, number, string),
241
- // `/` means division. After expression-starting context (`=`, `(`, `,`, `;`,
242
- // `!`, `&`, `|`, `?`, `:`, `{`, `return`, etc.), `/` starts a regex.
243
- // Heuristic: track last non-space code-state char.
244
- let lastCodeChar = "";
245
- function isRegexContext(prev) {
246
- // Conservative: `/` is a regex when preceded by an operator/separator.
247
- if (prev === "")
248
- return true;
249
- return /[=(,;!&|?:{[<>+\-*%^~]/.test(prev);
250
- }
251
- while (i < n) {
252
- const c = source[i];
253
- const next = i + 1 < n ? source[i + 1] : "";
254
- if (state === "code") {
255
- if (c === "/" && next === "/") {
256
- state = "lineComment";
257
- out.push(" ", " ");
258
- i += 2;
259
- continue;
260
- }
261
- if (c === "/" && next === "*") {
262
- state = "blockComment";
263
- out.push(" ", " ");
264
- i += 2;
265
- continue;
266
- }
267
- if (c === "/" && isRegexContext(lastCodeChar)) {
268
- state = "regex";
269
- out.push(" ");
270
- i++;
271
- continue;
272
- }
273
- if (c === "'") {
274
- state = "single";
275
- out.push(" ");
276
- i++;
277
- lastCodeChar = c;
278
- continue;
279
- }
280
- if (c === '"') {
281
- state = "double";
282
- out.push(" ");
283
- i++;
284
- lastCodeChar = c;
285
- continue;
286
- }
287
- if (c === "`") {
288
- state = "template";
289
- out.push(" ");
290
- i++;
291
- lastCodeChar = c;
292
- continue;
293
- }
294
- out.push(c);
295
- if (!/\s/.test(c))
296
- lastCodeChar = c;
297
- i++;
298
- continue;
299
- }
300
- if (state === "lineComment") {
301
- if (c === "\n") {
302
- state = "code";
303
- out.push("\n");
304
- i++;
305
- continue;
306
- }
307
- out.push(" ");
308
- i++;
309
- continue;
310
- }
311
- if (state === "blockComment") {
312
- if (c === "*" && next === "/") {
313
- state = "code";
314
- out.push(" ", " ");
315
- i += 2;
316
- continue;
317
- }
318
- out.push(c === "\n" ? "\n" : " ");
319
- i++;
320
- continue;
321
- }
322
- if (state === "regex") {
323
- // Inside /pattern/flags. Closer is unescaped `/`. Char classes [...] disable / closing.
324
- if (c === "\\" && next) {
325
- out.push(" ", " ");
326
- i += 2;
327
- continue;
328
- }
329
- if (c === "[") {
330
- // skip char class
331
- out.push(" ");
332
- i++;
333
- while (i < n && source[i] !== "]") {
334
- if (source[i] === "\\" && i + 1 < n) {
335
- out.push(" ", " ");
336
- i += 2;
337
- continue;
338
- }
339
- out.push(source[i] === "\n" ? "\n" : " ");
340
- i++;
341
- }
342
- if (i < n) {
343
- out.push(" ");
344
- i++;
345
- }
346
- continue;
347
- }
348
- if (c === "/") {
349
- state = "code";
350
- out.push(" ");
351
- i++;
352
- lastCodeChar = "/";
353
- continue;
354
- }
355
- out.push(c === "\n" ? "\n" : " ");
356
- i++;
357
- continue;
358
- }
359
- if (state === "single" || state === "double" || state === "template") {
360
- const closer = state === "single" ? "'" : state === "double" ? '"' : "`";
361
- if (c === "\\" && next) {
362
- out.push(" ", " ");
363
- i += 2;
364
- continue; // skip escaped char
365
- }
366
- if (c === closer) {
367
- state = "code";
368
- out.push(" ");
369
- i++;
370
- continue;
371
- }
372
- out.push(c === "\n" ? "\n" : " ");
373
- i++;
374
- continue;
375
- }
376
- }
377
- return out.join("");
378
- }
379
- /**
380
- * Check whether source contains `<Suspense>` or `<React.Suspense>` JSX.
381
- * Tier 7 R-1 fix: strips comments + string literals first, so JSDoc snippets
382
- * and string-embedded `<Suspense>` text no longer spoof the check.
383
- */
384
- function hasSuspenseInSource(source) {
385
- return /<(?:React\.)?Suspense\b/.test(stripCommentsAndStrings(source));
386
- }
387
- /**
388
- * Walk UP the JSX render tree from a component, looking for any ancestor whose
389
- * source contains a Suspense boundary. Returns the first ancestor found, or
390
- * null if no Suspense exists anywhere in the upward chain.
391
- *
392
- * Tier 7 — closes the cross-file FP in `react-lazy-no-suspense-same-file` regex
393
- * (Tier 6 limitation). Reuses `buildReverseAdjacency` infrastructure from Tier 5.
394
- * Cycle-safe via visited set (BFS on potentially cyclic graph).
395
- */
396
- export function findSuspenseAncestor(componentId, reverseAdjacency, symbolsById) {
397
- // Tier 7 fix (gemini Run finding): visited.add() at push-time (not pop-time)
398
- // prevents O(E) duplicate queue pushes on densely-connected component graphs.
399
- const visited = new Set([componentId]);
400
- const queue = [];
401
- for (const p of reverseAdjacency.get(componentId) ?? []) {
402
- if (!visited.has(p)) {
403
- visited.add(p);
404
- queue.push(p);
405
- }
406
- }
407
- let head = 0;
408
- while (head < queue.length) {
409
- const parentId = queue[head++];
410
- const sym = symbolsById.get(parentId);
411
- if (sym?.source && hasSuspenseInSource(sym.source)) {
412
- return { name: sym.name, file: sym.file };
413
- }
414
- for (const gp of reverseAdjacency.get(parentId) ?? []) {
415
- if (!visited.has(gp)) {
416
- visited.add(gp);
417
- queue.push(gp);
418
- }
419
- }
420
- }
421
- return null;
422
- }
423
- export function findLazyComponentsWithoutSuspense(symbols) {
424
- const components = symbols.filter((s) => s.kind === "component");
425
- const adjacency = buildJsxAdjacency(components);
426
- const reverseAdj = buildReverseAdjacency(adjacency);
427
- const symbolsById = new Map();
428
- for (const s of components)
429
- symbolsById.set(s.id, s);
430
- // Tier 7 fix (cursor-agent finding): word-boundary before `lazy` to avoid matching
431
- // arbitrary `.lazy(` callable chains (e.g., `obj.lazy(`). Match either `React.lazy(`
432
- // OR bare `lazy(` (named-import form), with `\b` to anchor identifier start.
433
- const lazyRe = /\b(?:React\.lazy|lazy)\s*\(/;
434
- // Tier 7 R-4 fix: scan ALL symbols (not just kind="component") for lazy() usage.
435
- // Module-scope assignments like `const X = lazy(() => import('./X'))` often live
436
- // outside any component body. For non-component symbols, attribute the issue to
437
- // the file's nearest component (or to the symbol itself if no component shares
438
- // the file). Same-file Suspense check still applies — looks at the OWNING
439
- // component's source for ancestor walking.
440
- const lazyDeclByFile = new Map();
441
- for (const sym of symbols) {
442
- if (!sym.source || !lazyRe.test(stripCommentsAndStrings(sym.source)))
443
- continue;
444
- // Skip if this symbol's source already declares Suspense (same-file safety).
445
- if (hasSuspenseInSource(sym.source))
446
- continue;
447
- // Adversarial Run 4 finding: arbitrary `components.find(c.file === sym.file)`
448
- // could attach to wrong component. Fix: require ALL same-file components to
449
- // satisfy Suspense rule. Conservative — false-NEGATIVE bias (one wrapped sibling
450
- // in a multi-component file suppresses warning even if another consumer is unsafe).
451
- // KNOWN LIMIT (Tier 8): true fix requires graph traversal — find which component
452
- // actually RENDERS the lazy binding (via JSX `<Heavy/>` reference search), not
453
- // just file co-location. Tier 8 brainstorm scope.
454
- const sameFileComponents = components.filter((c) => c.file === sym.file);
455
- if (sameFileComponents.length === 0) {
456
- // No component context available — flag the lazy declaration directly.
457
- const key = sym.file;
458
- if (!lazyDeclByFile.has(key)) {
459
- lazyDeclByFile.set(key, { name: sym.name, file: sym.file, start_line: sym.start_line });
460
- }
461
- continue;
462
- }
463
- const anySafe = sameFileComponents.some((c) => {
464
- if (hasSuspenseInSource(c.source ?? ""))
465
- return true;
466
- return findSuspenseAncestor(c.id, reverseAdj, symbolsById) !== null;
467
- });
468
- if (!anySafe) {
469
- const key = sym.file;
470
- if (!lazyDeclByFile.has(key)) {
471
- lazyDeclByFile.set(key, { name: sym.name, file: sym.file, start_line: sym.start_line });
472
- }
473
- }
474
- }
475
- return [...lazyDeclByFile.values()];
476
- }
477
- /**
478
- * BFS the component composition tree from a root component.
479
- * Returns a CallNode tree of rendered components up to maxDepth.
480
- */
481
- function buildComponentTree(root, adjacency, maxDepth) {
482
- const visited = new Set([root.id]);
483
- let totalNodes = 1;
484
- function expand(symbol, depth) {
485
- if (depth >= maxDepth || totalNodes >= MAX_TREE_NODES) {
486
- return { symbol, children: [] };
487
- }
488
- const kids = adjacency.children.get(symbol.id) ?? [];
489
- const out = [];
490
- for (const kid of kids) {
491
- if (totalNodes >= MAX_TREE_NODES)
492
- break;
493
- if (out.length >= MAX_CHILDREN_PER_NODE)
494
- break;
495
- if (visited.has(kid.id))
496
- continue;
497
- visited.add(kid.id);
498
- totalNodes++;
499
- out.push(expand(kid, depth + 1));
500
- }
501
- return { symbol, children: out };
502
- }
503
- return expand(root, 0);
504
- }
505
- function stripSource(sym) {
506
- const { source: _, repo: _r, tokens: _t, start_col: _sc, end_col: _ec, id, ...rest } = sym;
507
- const shortId = id.includes(":") ? id.slice(id.indexOf(":") + 1) : id;
508
- return { ...rest, id: shortId };
509
- }
510
- function stripTreeSource(node) {
511
- return {
512
- symbol: stripSource(node.symbol),
513
- children: node.children.map(stripTreeSource),
514
- };
515
- }
516
- function treeToMermaid(tree, rootName) {
517
- const lines = ["graph TD"];
518
- const visited = new Set();
519
- function nodeId(sym) {
520
- return sym.id.replace(/[^a-zA-Z0-9_]/g, "_");
521
- }
522
- function nodeLabel(sym) {
523
- const shortFile = sym.file.split("/").pop() ?? sym.file;
524
- return `${sym.name}<br/><small>${shortFile}:${sym.start_line}</small>`;
525
- }
526
- function walk(node, parentId) {
527
- const id = nodeId(node.symbol);
528
- if (!visited.has(id)) {
529
- visited.add(id);
530
- lines.push(` ${id}["${nodeLabel(node.symbol)}"]`);
531
- }
532
- if (parentId) {
533
- lines.push(` ${parentId} --> ${id}`);
534
- }
535
- for (const child of node.children) {
536
- walk(child, id);
537
- }
538
- }
539
- walk(tree);
540
- lines.push(` %% root: ${rootName}`);
541
- return lines.join("\n");
542
- }
543
- /**
544
- * Trace the React component composition tree from a root component.
545
- * Returns a tree of JSX children (which components the root renders,
546
- * and recursively their children).
547
- */
548
- export async function traceComponentTree(repo, rootComponent, options) {
549
- const index = await getCodeIndex(repo);
550
- if (!index) {
551
- throw new Error(`Repository not found: ${repo}`);
552
- }
553
- const maxDepth = options?.depth ?? DEFAULT_DEPTH;
554
- const outputFormat = options?.output_format ?? "json";
555
- const includeSource = options?.include_source ?? false;
556
- const includeTests = options?.include_tests ?? false;
557
- const symbols = includeTests
558
- ? index.symbols
559
- : index.symbols.filter((s) => !isTestFile(s.file));
560
- // Find root component
561
- const candidates = symbols.filter((s) => s.name === rootComponent && s.kind === "component");
562
- const target = candidates[0];
563
- if (!target) {
564
- throw new Error(`Component "${rootComponent}" not found in repository "${repo}". ` +
565
- `Make sure it has kind: "component" — index may need refresh.`);
566
- }
567
- const adjacency = buildJsxAdjacency(symbols);
568
- const tree = buildComponentTree(target, adjacency, maxDepth);
569
- if (outputFormat === "mermaid") {
570
- return { mermaid: treeToMermaid(tree, rootComponent), root: rootComponent, depth: maxDepth };
571
- }
572
- return includeSource ? tree : stripTreeSource(tree);
573
- }
574
- /**
575
- * Scan a component/hook source for Rule of Hooks violations.
576
- * Detects: hook inside if/for/while/switch, hook after early return.
577
- * Returns a list of human-readable violation descriptions.
578
- */
579
- function findRuleOfHooksViolations(source) {
580
- const violations = [];
581
- // Heuristic: hook call inside if/for/while/switch block
582
- const conditionalHook = /\b(if|for|while|switch)\s*\([^)]*\)\s*\{[^}]*\b(use[A-Z]\w*)\s*\(/;
583
- const condMatch = conditionalHook.exec(source);
584
- if (condMatch) {
585
- violations.push(`Hook "${condMatch[2]}" called inside ${condMatch[1]} block — violates Rule of Hooks`);
586
- }
587
- // Heuristic: hook after early return
588
- const earlyReturnHook = /\breturn\s+[^;{]*;\s*\n[\s\S]*?\b(use[A-Z]\w*)\s*\(/;
589
- const earlyMatch = earlyReturnHook.exec(source);
590
- if (earlyMatch) {
591
- violations.push(`Hook "${earlyMatch[1]}" called after early return — violates Rule of Hooks`);
592
- }
593
- return violations;
594
- }
595
- /**
596
- * Extract unique hook names from source (no line numbers, no cap).
597
- * Use when you only need the set of hooks — e.g. React context bundle.
598
- */
599
- function extractHookNames(source) {
600
- const names = new Set();
601
- const pattern = /\b(use[A-Z]\w*)\s*\(/g;
602
- let m;
603
- while ((m = pattern.exec(source)) !== null) {
604
- names.add(m[1]);
605
- }
606
- return names;
607
- }
608
- /**
609
- * Extract hook calls from source with their relative line number.
610
- */
611
- function extractHookCalls(source) {
612
- const calls = [];
613
- const lines = source.split("\n");
614
- const pattern = /\b(use[A-Z]\w*)\s*\(/;
615
- for (let i = 0; i < lines.length && calls.length < 20; i++) {
616
- const line = lines[i];
617
- const m = pattern.exec(line);
618
- if (m) {
619
- calls.push({
620
- name: m[1],
621
- line: i + 1,
622
- is_stdlib: REACT_STDLIB_HOOKS.has(m[1]),
623
- context: line.trim().slice(0, 160),
624
- });
625
- }
626
- }
627
- return calls;
628
- }
629
- /**
630
- * Analyze hook usage across components and custom hooks in a repo.
631
- *
632
- * Returns:
633
- * - per-symbol inventory (hooks called, violations)
634
- * - codebase-wide hook usage summary
635
- * - Rule of Hooks violation count
636
- */
637
- export async function analyzeHooks(repo, options) {
638
- const index = await getCodeIndex(repo);
639
- if (!index) {
640
- throw new Error(`Repository not found: ${repo}`);
641
- }
642
- const componentName = options?.component_name;
643
- const filePattern = options?.file_pattern;
644
- const includeTests = options?.include_tests ?? false;
645
- const maxEntries = options?.max_entries ?? 100;
646
- // Filter symbols to components and hooks
647
- let symbols = index.symbols.filter((s) => s.kind === "component" || s.kind === "hook");
648
- if (!includeTests)
649
- symbols = symbols.filter((s) => !isTestFile(s.file));
650
- if (componentName)
651
- symbols = symbols.filter((s) => s.name === componentName);
652
- if (filePattern)
653
- symbols = symbols.filter((s) => s.file.includes(filePattern));
654
- const entries = [];
655
- const globalHookCount = new Map();
656
- let totalComponents = 0;
657
- let totalHooks = 0;
658
- let violationsCount = 0;
659
- for (const sym of symbols) {
660
- if (!sym.source)
661
- continue;
662
- const hookCalls = extractHookCalls(sym.source);
663
- const violations = findRuleOfHooksViolations(sym.source);
664
- if (sym.kind === "component")
665
- totalComponents++;
666
- else if (sym.kind === "hook")
667
- totalHooks++;
668
- // Skip empty entries (no hooks, no violations)
669
- if (hookCalls.length === 0 && violations.length === 0)
670
- continue;
671
- violationsCount += violations.length;
672
- for (const call of hookCalls) {
673
- globalHookCount.set(call.name, (globalHookCount.get(call.name) ?? 0) + 1);
674
- }
675
- entries.push({
676
- name: sym.name,
677
- kind: sym.kind,
678
- file: sym.file,
679
- start_line: sym.start_line,
680
- hook_count: hookCalls.length,
681
- hooks: hookCalls,
682
- violations,
683
- });
684
- if (entries.length >= maxEntries)
685
- break;
686
- }
687
- // Sort entries: violations first, then by hook_count descending
688
- entries.sort((a, b) => {
689
- const vdiff = b.violations.length - a.violations.length;
690
- if (vdiff !== 0)
691
- return vdiff;
692
- return b.hook_count - a.hook_count;
693
- });
694
- const hook_usage = [...globalHookCount.entries()]
695
- .sort((a, b) => b[1] - a[1])
696
- .slice(0, 20)
697
- .map(([name, count]) => ({
698
- name,
699
- count,
700
- is_stdlib: REACT_STDLIB_HOOKS.has(name),
701
- }));
702
- return {
703
- entries,
704
- total_components: totalComponents,
705
- total_custom_hooks: totalHooks,
706
- hook_usage,
707
- violations_count: violationsCount,
708
- };
709
- }
710
- /** Patterns for inline prop creation in JSX — each creates a new reference every render */
711
- const INLINE_OBJECT_RE = /\b\w+\s*=\s*\{\s*\{/g; // prop={{ ... }}
712
- const INLINE_ARRAY_RE = /\b\w+\s*=\s*\{\s*\[/g; // prop={[ ... ]}
713
- const INLINE_FN_RE = /\bon[A-Z]\w*\s*=\s*\{\s*(?:\([^)]*\)|[a-z_$][\w$]*)\s*=>/g; // onX={() => ...}
714
- /** Default prop values that create new references: = [] or = {} in params */
715
- const UNSTABLE_DEFAULT_RE = /(?:[:,]\s*)(\w+)\s*=\s*(\[\s*\]|\{\s*\})/g;
716
- /**
717
- * Analyze a single component source for re-render risks.
718
- */
719
- function findRenderRisks(source) {
720
- const risks = [];
721
- const lines = source.split("\n");
722
- for (let i = 0; i < lines.length && risks.length < 20; i++) {
723
- const line = lines[i];
724
- const lineNum = i + 1;
725
- const trimmed = line.trim();
726
- // Skip comments
727
- if (trimmed.startsWith("//") || trimmed.startsWith("*"))
728
- continue;
729
- // Inline object prop: prop={{ key: val }}
730
- if (INLINE_OBJECT_RE.test(line)) {
731
- INLINE_OBJECT_RE.lastIndex = 0;
732
- risks.push({
733
- type: "inline-object",
734
- line: lineNum,
735
- context: trimmed.slice(0, 120),
736
- suggestion: "Extract to a const or useMemo — object literal creates new reference every render",
737
- });
738
- }
739
- // Inline array prop: prop={[1, 2, 3]}
740
- if (INLINE_ARRAY_RE.test(line)) {
741
- INLINE_ARRAY_RE.lastIndex = 0;
742
- risks.push({
743
- type: "inline-array",
744
- line: lineNum,
745
- context: trimmed.slice(0, 120),
746
- suggestion: "Extract to a const or useMemo — array literal creates new reference every render",
747
- });
748
- }
749
- // Inline function in event handler: onClick={() => ...}
750
- if (INLINE_FN_RE.test(line)) {
751
- INLINE_FN_RE.lastIndex = 0;
752
- risks.push({
753
- type: "inline-function",
754
- line: lineNum,
755
- context: trimmed.slice(0, 120),
756
- suggestion: "Extract to useCallback or a named handler — arrow function creates new reference every render",
757
- });
758
- }
759
- // Unstable default value: { items = [], config = {} }
760
- UNSTABLE_DEFAULT_RE.lastIndex = 0;
761
- let dm;
762
- while ((dm = UNSTABLE_DEFAULT_RE.exec(line)) !== null && risks.length < 20) {
763
- risks.push({
764
- type: "unstable-default",
765
- line: lineNum,
766
- context: trimmed.slice(0, 120),
767
- suggestion: `Default value \`${dm[1]} = ${dm[2]}\` creates new reference every render — hoist to module const`,
768
- });
769
- }
770
- }
771
- return risks;
772
- }
773
- /**
774
- * Format an AnalyzeRendersResult as human-readable Markdown.
775
- * Used by analyzeRenders when format="markdown" is requested.
776
- */
777
- export function formatRendersMarkdown(result) {
778
- const lines = [];
779
- lines.push("# Render Analysis");
780
- lines.push("");
781
- lines.push(`Total components: ${result.total_components} | High risk: ${result.high_risk_count}`);
782
- lines.push("");
783
- lines.push("## Summary");
784
- lines.push(`- inline_objects: ${result.summary.inline_objects}`);
785
- lines.push(`- inline_arrays: ${result.summary.inline_arrays}`);
786
- lines.push(`- inline_functions: ${result.summary.inline_functions}`);
787
- lines.push(`- unstable_defaults: ${result.summary.unstable_defaults}`);
788
- lines.push(`- missing_memo: ${result.summary.missing_memo}`);
789
- lines.push("");
790
- lines.push("## Entries");
791
- lines.push("");
792
- lines.push("| Component | File | Risk | Issues | Children | Chain | Memo |");
793
- lines.push("|-----------|------|------|--------|----------|-------|------|");
794
- for (const e of result.entries) {
795
- const file = e.file.length > 40 ? "…" + e.file.slice(-39) : e.file;
796
- const chain = e.jsx_render_depth === null ? "—" : String(e.jsx_render_depth);
797
- lines.push(`| ${e.name} | ${file}:${e.start_line} | ${e.risk_level} | ${e.risk_count} | ${e.children_count} | ${chain} | ${e.is_memoized ? "✓" : "✗"} |`);
798
- }
799
- return lines.join("\n");
800
- }
801
- /**
802
- * Analyze re-render risk across React components in a repo.
803
- *
804
- * Detects:
805
- * - Inline object/array/function props in JSX (new reference every render)
806
- * - Unstable default parameter values ([] or {} in component params)
807
- * - Components not wrapped in React.memo that render children (missing-memo)
808
- *
809
- * Returns per-component risk assessment with actionable suggestions.
810
- */
811
- export async function analyzeRenders(repo, options) {
812
- const index = await getCodeIndex(repo);
813
- if (!index) {
814
- throw new Error(`Repository not found: ${repo}`);
815
- }
816
- const componentName = options?.component_name;
817
- const filePattern = options?.file_pattern;
818
- const includeTests = options?.include_tests ?? false;
819
- const maxEntries = options?.max_entries ?? 100;
820
- let components = index.symbols.filter((s) => s.kind === "component");
821
- if (!includeTests)
822
- components = components.filter((s) => !isTestFile(s.file));
823
- if (componentName)
824
- components = components.filter((s) => s.name === componentName);
825
- if (filePattern)
826
- components = components.filter((s) => s.file.includes(filePattern));
827
- // Tier 5 — extractor-failure: only when we have indexed JSX files but zero
828
- // component symbols while other symbols exist — likely classification/extractor
829
- // issues. Pure `.ts`/non-JSX indexes are not flagged (avoids false positives on
830
- // headless/util libraries).
831
- const hasJsxIndexedFiles = index.files.some((f) => f.path.endsWith(".tsx") || f.path.endsWith(".jsx"));
832
- const extractorFailure = components.length === 0 &&
833
- index.symbols.length > 0 &&
834
- hasJsxIndexedFiles;
835
- // Tier 5 — sort components alphabetically by id ?? name BEFORE building adjacency
836
- // for deterministic cycle handling.
837
- const sortedComponents = [...components].sort((a, b) => (a.id ?? a.name).localeCompare(b.id ?? b.name));
838
- // Build reverse adjacency once, share memo across all per-component calls (O(V+E) total).
839
- const adjacency = buildJsxAdjacency(sortedComponents);
840
- const reverseAdj = buildReverseAdjacency(adjacency);
841
- const memo = new Map();
842
- const inProgress = new Set();
843
- const entries = [];
844
- const summary = { inline_objects: 0, inline_arrays: 0, inline_functions: 0, unstable_defaults: 0, missing_memo: 0 };
845
- let highRiskCount = 0;
846
- for (const sym of sortedComponents) {
847
- if (entries.length >= maxEntries)
848
- break;
849
- if (!sym.source)
850
- continue;
851
- const isMemoized = /\b(?:React\.)?memo\s*\(/.test(sym.source);
852
- const risks = findRenderRisks(sym.source);
853
- // Count children rendered (PascalCase JSX elements)
854
- const childrenSet = new Set();
855
- const jsxPattern = /<([A-Z][a-zA-Z0-9_$]*)\b/g;
856
- let jm;
857
- while ((jm = jsxPattern.exec(sym.source)) !== null) {
858
- if (jm[1] !== sym.name)
859
- childrenSet.add(jm[1]);
860
- }
861
- // Check missing-memo: component renders children and is not memoized
862
- if (!isMemoized && childrenSet.size > 0 && risks.length > 0) {
863
- risks.push({
864
- type: "missing-memo",
865
- line: 1,
866
- context: `${sym.name} renders ${childrenSet.size} child component(s) and has ${risks.length} inline props`,
867
- suggestion: "Wrap in React.memo() — parent re-renders will propagate to children via new prop references",
868
- });
869
- summary.missing_memo++;
870
- }
871
- // Aggregate summary counts
872
- for (const r of risks) {
873
- if (r.type === "inline-object")
874
- summary.inline_objects++;
875
- else if (r.type === "inline-array")
876
- summary.inline_arrays++;
877
- else if (r.type === "inline-function")
878
- summary.inline_functions++;
879
- else if (r.type === "unstable-default")
880
- summary.unstable_defaults++;
881
- }
882
- // Risk level classification — factors children_count to amplify components
883
- // that propagate prop instability to many children (Bug #4 fix).
884
- const riskLevel = ((risks.length >= 3 && childrenSet.size >= 3) || risks.length >= 5) ? "high" :
885
- (risks.length >= 2 || (risks.length >= 1 && childrenSet.size >= 1)) ? "medium" : "low";
886
- if (riskLevel === "high")
887
- highRiskCount++;
888
- // Tier 5 — render-tree depth (longest acyclic path from this component up to a root).
889
- // `reverseAdj` is keyed by `sym.id` exclusively (see line 130), so any fallback to
890
- // sym.name would silently look up a non-existent key. CodeSymbol.id is required by
891
- // the type contract — dropping the prior `?? sym.name` fallback that masked unset id.
892
- const depth = computePropChainDepth(sym.id, reverseAdj, memo, inProgress);
893
- // Tier 5 — suggestion text with explicit "NOT prop-drilling depth" disclaimer
894
- // when depth >= 3 (AC 8: prevents the metric from being silently relabeled
895
- // as semantic prop-flow depth, which is Tier 6 scope).
896
- const suggestion = depth >= 3
897
- ? `Component is rendered ${depth} edges deep in the JSX render tree. NOT prop-drilling depth — this metric measures render-tree depth only, without tracing which props are consumed vs passed through. Use as a hint to investigate; combine with manual review or trace_component_tree to confirm whether props are actually being drilled. Semantic prop-flow tracking is Tier 6 scope.`
898
- : undefined;
899
- // Only include components with risks or if specifically queried
900
- if (risks.length > 0 || componentName) {
901
- entries.push({
902
- name: sym.name,
903
- file: sym.file,
904
- start_line: sym.start_line,
905
- is_memoized: isMemoized,
906
- risk_count: risks.length,
907
- risk_level: riskLevel,
908
- risks,
909
- children_count: childrenSet.size,
910
- jsx_render_depth: extractorFailure ? null : depth,
911
- prop_chain_depth: extractorFailure ? null : depth,
912
- ...(suggestion ? { suggestion } : {}),
913
- });
914
- }
915
- }
916
- // Sort: high risk first, then by risk_count descending
917
- entries.sort((a, b) => {
918
- const levelOrder = { high: 3, medium: 2, low: 1 };
919
- const ld = levelOrder[b.risk_level] - levelOrder[a.risk_level];
920
- if (ld !== 0)
921
- return ld;
922
- return b.risk_count - a.risk_count;
923
- });
924
- const jsonResult = {
925
- entries,
926
- total_components: components.length,
927
- high_risk_count: highRiskCount,
928
- summary,
929
- ...(extractorFailure ? { metadata: { skipped: "extractor-failure" } } : {}),
930
- };
931
- if (options?.format === "markdown") {
932
- return formatRendersMarkdown(jsonResult);
933
- }
934
- return jsonResult;
935
- }
936
- const MAX_CONTEXT_SYMBOLS = 500;
937
- /**
938
- * Build a graph of React Context flows: createContext → Provider → useContext consumers.
939
- *
940
- * Single-pass scan over all symbols (capped at 500). No cycle detection — relies
941
- * on visited set keyed by context name to prevent re-processing.
942
- *
943
- * Detection patterns:
944
- * - createContext call: `const X = createContext(...)` or `const X = React.createContext(...)`
945
- * - Provider usage: `<X.Provider value={...}>` (anywhere in any source)
946
- * - Consumer usage: `useContext(X)` (anywhere in any source)
947
- *
948
- * Phase 2 features (not implemented here):
949
- * - Cycle detection in provider chains
950
- * - Re-render impact analysis ("which consumers re-render when X changes")
951
- * - Context value type tracking
952
- */
953
- export function buildContextGraph(symbols) {
954
- const contexts = new Map();
955
- const createPattern = /\bconst\s+(\w+)\s*(?::[^=]+)?\s*=\s*(?:React\.)?createContext\b/g;
956
- // Pass 1: Find context definitions
957
- let scanned = 0;
958
- for (const sym of symbols) {
959
- if (scanned >= MAX_CONTEXT_SYMBOLS)
960
- break;
961
- if (!sym.source)
962
- continue;
963
- scanned++;
964
- let m;
965
- createPattern.lastIndex = 0;
966
- while ((m = createPattern.exec(sym.source)) !== null) {
967
- const name = m[1];
968
- if (contexts.has(name))
969
- continue; // visited — skip duplicate definition
970
- // Compute line offset within symbol source
971
- const linesBefore = sym.source.slice(0, m.index).split("\n").length;
972
- contexts.set(name, {
973
- name,
974
- created_in: { file: sym.file, line: sym.start_line + linesBefore - 1 },
975
- providers: [],
976
- consumers: [],
977
- });
978
- }
979
- }
980
- if (contexts.size === 0)
981
- return { contexts: [] };
982
- // Pass 2: Find providers and consumers
983
- scanned = 0;
984
- for (const sym of symbols) {
985
- if (scanned >= MAX_CONTEXT_SYMBOLS)
986
- break;
987
- if (!sym.source)
988
- continue;
989
- if (sym.kind !== "component" && sym.kind !== "hook")
990
- continue;
991
- scanned++;
992
- for (const [ctxName, info] of contexts) {
993
- // Provider: <X.Provider
994
- const providerRe = new RegExp(`<${ctxName}\\.Provider\\b`);
995
- if (providerRe.test(sym.source)) {
996
- info.providers.push({ file: sym.file, line: sym.start_line });
997
- }
998
- // Consumer: useContext(X)
999
- const consumerRe = new RegExp(`useContext\\s*\\(\\s*${ctxName}\\b`);
1000
- if (consumerRe.test(sym.source)) {
1001
- info.consumers.push({
1002
- file: sym.file,
1003
- component: sym.name,
1004
- line: sym.start_line,
1005
- });
1006
- }
1007
- }
1008
- }
1009
- return { contexts: [...contexts.values()] };
1010
- }
1011
- // ─────────────────────────────────────────────────────────────
1012
- // audit_compiler_readiness — React Compiler adoption readiness
1013
- // ─────────────────────────────────────────────────────────────
1014
- const COMPILER_PATTERNS = [
1015
- "compiler-side-effect-in-render",
1016
- "compiler-ref-read-in-render",
1017
- "compiler-prop-mutation",
1018
- "compiler-state-mutation",
1019
- "compiler-try-catch-bailout",
1020
- "compiler-redundant-memo",
1021
- "compiler-redundant-usecallback",
1022
- ];
1023
- /**
1024
- * Audit a React codebase for React Compiler (v1.0) adoption readiness.
1025
- *
1026
- * Scans all components for patterns that cause the compiler to silently
1027
- * bail out of auto-memoization. Returns a readiness score (0-100) with
1028
- * prioritized fix list.
1029
- *
1030
- * No competitor offers codebase-wide compiler readiness analysis.
1031
- */
1032
- export async function auditCompilerReadiness(repo, options) {
1033
- const { searchPatterns } = await import("./pattern-tools.js");
1034
- const index = await getCodeIndex(repo);
1035
- if (!index)
1036
- throw new Error(`Repository not found: ${repo}`);
1037
- const includeTests = options?.include_tests ?? false;
1038
- const filePattern = options?.file_pattern;
1039
- // Count total components
1040
- let components = index.symbols.filter((s) => s.kind === "component");
1041
- if (!includeTests)
1042
- components = components.filter((s) => !isTestFile(s.file));
1043
- if (filePattern)
1044
- components = components.filter((s) => s.file.includes(filePattern));
1045
- const totalComponents = components.length;
1046
- // Run all compiler patterns in parallel
1047
- const patternResults = await Promise.all(COMPILER_PATTERNS.map(async (pattern) => {
1048
- try {
1049
- const result = await searchPatterns(repo, pattern, {
1050
- file_pattern: filePattern,
1051
- include_tests: includeTests,
1052
- max_results: 200,
1053
- });
1054
- return { pattern, matches: result.matches, description: result.pattern };
1055
- }
1056
- catch {
1057
- return { pattern, matches: [], description: pattern };
1058
- }
1059
- }));
1060
- // Aggregate: which components have bailout issues
1061
- const componentIssues = new Map(); // "name@file" → issue count
1062
- let redundantMemoization = 0;
1063
- const issues = [];
1064
- for (const { pattern, matches, description } of patternResults) {
1065
- if (matches.length === 0)
1066
- continue;
1067
- const isRedundant = pattern === "compiler-redundant-memo" || pattern === "compiler-redundant-usecallback";
1068
- if (isRedundant) {
1069
- redundantMemoization += matches.length;
1070
- }
1071
- issues.push({
1072
- pattern,
1073
- count: matches.length,
1074
- description: description.split(": ").slice(1).join(": ") || description,
1075
- });
1076
- for (const m of matches) {
1077
- if (!isRedundant) {
1078
- const key = `${m.name}@${m.file}`;
1079
- componentIssues.set(key, (componentIssues.get(key) ?? 0) + 1);
1080
- }
1081
- }
1082
- }
1083
- // Sort issues by count descending
1084
- issues.sort((a, b) => b.count - a.count);
1085
- // Top bailout components
1086
- const top_bailout_components = [...componentIssues.entries()]
1087
- .sort((a, b) => b[1] - a[1])
1088
- .slice(0, 10)
1089
- .map(([key, count]) => {
1090
- const [name, file] = key.split("@");
1091
- return { name: name, file: file, issues: count };
1092
- });
1093
- const bailoutCount = componentIssues.size;
1094
- const compatibleCount = Math.max(0, totalComponents - bailoutCount);
1095
- // Readiness score: percentage of components without bailout issues
1096
- const readiness_score = totalComponents > 0
1097
- ? Math.round((compatibleCount / totalComponents) * 100)
1098
- : 100; // empty repo = ready
1099
- return {
1100
- readiness_score,
1101
- total_components: totalComponents,
1102
- compatible_components: compatibleCount,
1103
- bailout_components: bailoutCount,
1104
- redundant_memoization: redundantMemoization,
1105
- issues,
1106
- top_bailout_components,
1107
- };
1108
- }
1109
- /**
1110
- * Day-1 onboarding composite for React projects. Single call that runs:
1111
- * - Component/hook inventory
1112
- * - Stack detection (state mgmt, routing, UI lib, form lib, build tool)
1113
- * - Critical pattern scan (XSS, Rule of Hooks, memory leaks)
1114
- * - Top hook usage summary
1115
- * - Suggested follow-up queries
1116
- *
1117
- * Meant to be the first tool a React developer runs on an unfamiliar codebase.
1118
- * Replaces 5-6 manual tool calls with one structured report.
1119
- */
1120
- export async function reactQuickstart(repo) {
1121
- const { searchPatterns } = await import("./pattern-tools.js");
1122
- const { analyzeProject } = await import("./project-tools.js");
1123
- const index = await getCodeIndex(repo);
1124
- if (!index)
1125
- throw new Error(`Repository not found: ${repo}`);
1126
- // Inventory
1127
- const components = index.symbols.filter((s) => s.kind === "component" && !isTestFile(s.file));
1128
- const hooks = index.symbols.filter((s) => s.kind === "hook" && !isTestFile(s.file));
1129
- // Find likely root component: prefer App > Root > Main > Layout > Page
1130
- const rootNames = ["App", "Root", "Main", "Layout", "Page"];
1131
- const likelyRoot = components.find((c) => rootNames.includes(c.name))?.name
1132
- ?? components[0]?.name
1133
- ?? null;
1134
- // Stack detection via analyze_project
1135
- let stack = {
1136
- state_management: null,
1137
- routing: null,
1138
- ui_library: null,
1139
- form_library: null,
1140
- build_tool: null,
1141
- };
1142
- try {
1143
- const proj = await analyzeProject(repo, { force: false });
1144
- const rc = proj?.conventions?.react_conventions;
1145
- const si = proj?.stack;
1146
- if (rc) {
1147
- stack = {
1148
- state_management: rc.state_management ?? null,
1149
- routing: rc.routing ?? null,
1150
- ui_library: rc.ui_library ?? null,
1151
- form_library: rc.form_library ?? null,
1152
- build_tool: si?.build_tool ?? null,
1153
- };
1154
- }
1155
- else if (si) {
1156
- stack.build_tool = si.build_tool ?? null;
1157
- }
1158
- }
1159
- catch {
1160
- // analyze_project may fail on non-React repos — fall through
1161
- }
1162
- // Critical pattern scans — run in parallel.
1163
- // Tier 5: scan list expanded with new patterns, results routed to severity-based buckets.
1164
- const scanList = [
1165
- { name: "dangerously-set-html", severity: "critical" },
1166
- { name: "hook-in-condition", severity: "critical" },
1167
- { name: "conditional-render-hook", severity: "critical" },
1168
- { name: "useEffect-missing-cleanup", severity: "warning" },
1169
- { name: "useEffect-setstate-loop", severity: "critical" },
1170
- { name: "rsc-non-serializable-prop", severity: "warning" },
1171
- // Tier 5 — warning bucket
1172
- { name: "derived-state", severity: "warning" },
1173
- { name: "stale-closure-setstate", severity: "warning" },
1174
- { name: "context-provider-value-inline", severity: "warning" },
1175
- // Tier 5 — warning (tabnabbing): surfaced in critical_issues with legacy warnings
1176
- { name: "jsx-no-target-blank", severity: "warning" },
1177
- { name: "button-no-type", severity: "style" },
1178
- // Tier 6 — extending Tier 5 coverage
1179
- { name: "derived-state-reducer", severity: "warning" },
1180
- { name: "derived-state-custom-setter", severity: "warning" },
1181
- { name: "stale-closure-toggle", severity: "warning" },
1182
- { name: "stale-closure-broken-functional", severity: "warning" },
1183
- { name: "context-provider-value-via-variable", severity: "warning" },
1184
- { name: "context-provider-value-inline-destructured", severity: "warning" },
1185
- { name: "react-lazy-no-suspense-same-file", severity: "style" },
1186
- { name: "rsc-non-serializable-prop-deep", severity: "critical" },
1187
- { name: "error-boundary-incomplete", severity: "warning" },
1188
- ];
1189
- const scanResults = await Promise.all(scanList.map(async ({ name, severity }) => {
1190
- try {
1191
- const result = await searchPatterns(repo, name, { max_results: 20 });
1192
- return { pattern: name, count: result.matches.length, severity };
1193
- }
1194
- catch {
1195
- return { pattern: name, count: 0, severity };
1196
- }
1197
- }));
1198
- // Severity-aware bucketing — cap each at 10 entries.
1199
- const hits = scanResults.filter((r) => r.count > 0);
1200
- const critical_issues = hits
1201
- .filter((r) => r.severity === "critical")
1202
- .slice(0, 10);
1203
- // Legacy: pre-Tier-5 patterns marked "warning" stay in critical_issues for backward compat;
1204
- // Tier 5 warnings (derived-state, stale-closure, context-provider) go to dedicated bucket.
1205
- const tier5WarningPatterns = new Set([
1206
- // Tier 5
1207
- "derived-state", "stale-closure-setstate", "context-provider-value-inline",
1208
- // Tier 6 — same warning bucket
1209
- "derived-state-reducer", "derived-state-custom-setter",
1210
- "stale-closure-toggle", "stale-closure-broken-functional",
1211
- "context-provider-value-via-variable", "context-provider-value-inline-destructured",
1212
- "error-boundary-incomplete",
1213
- ]);
1214
- for (const r of hits) {
1215
- if (r.severity === "warning" && !tier5WarningPatterns.has(r.pattern) && critical_issues.length < 10) {
1216
- critical_issues.push({ pattern: r.pattern, count: r.count, severity: "warning" });
1217
- }
1218
- }
1219
- const warnings = hits
1220
- .filter((r) => r.severity === "warning" && tier5WarningPatterns.has(r.pattern))
1221
- .slice(0, 10);
1222
- const style_issues = hits
1223
- .filter((r) => r.severity === "style")
1224
- .slice(0, 10);
1225
- // Top hooks used across components
1226
- const hookCounts = new Map();
1227
- for (const c of components) {
1228
- if (!c.source)
1229
- continue;
1230
- const matches = c.source.matchAll(/\b(use[A-Z]\w*)\s*\(/g);
1231
- for (const m of matches) {
1232
- const name = m[1];
1233
- hookCounts.set(name, (hookCounts.get(name) ?? 0) + 1);
1234
- }
1235
- }
1236
- const top_hooks = [...hookCounts.entries()]
1237
- .sort((a, b) => b[1] - a[1])
1238
- .slice(0, 5)
1239
- .map(([name, count]) => ({ name, count }));
1240
- // Suggested next queries
1241
- const suggested_queries = [];
1242
- if (likelyRoot) {
1243
- suggested_queries.push(`trace_component_tree("${likelyRoot}") // explore render hierarchy`);
1244
- }
1245
- suggested_queries.push(`analyze_renders() // find re-render risks`);
1246
- suggested_queries.push(`analyze_hooks() // Rule of Hooks + hook inventory`);
1247
- if (components.length >= 10) {
1248
- suggested_queries.push(`audit_compiler_readiness() // React Compiler adoption check`);
1249
- }
1250
- if (critical_issues.some((i) => i.severity === "critical")) {
1251
- suggested_queries.push(`search_patterns("dangerously-set-html") // investigate XSS risks`);
1252
- }
1253
- return {
1254
- overview: {
1255
- total_components: components.length,
1256
- total_custom_hooks: hooks.length,
1257
- likely_root_component: likelyRoot,
1258
- stack,
1259
- },
1260
- critical_issues,
1261
- warnings,
1262
- style_issues,
1263
- top_hooks,
1264
- suggested_queries,
1265
- };
1266
- }
4
+ * Compatibility facade: implementation lives in per-capability modules.
5
+ */
6
+ export { REACT_STDLIB_HOOKS } from "./react-shared-tools.js";
7
+ export { buildJsxAdjacency, buildComponentTree, extractJsxComponents, buildReverseAdjacency, computePropChainDepth, traceComponentTree, } from "./react-component-tree-tools.js";
8
+ export { findSuspenseAncestor, findLazyComponentsWithoutSuspense, } from "./react-suspense-tools.js";
9
+ export { extractHookCalls, extractHookNames, findRuleOfHooksViolations, analyzeHooks, } from "./react-hooks-tools.js";
10
+ export { findRenderRisks, formatRendersMarkdown, analyzeRenders, } from "./react-render-tools.js";
11
+ export { buildContextGraph } from "./react-context-tools.js";
12
+ export { auditCompilerReadiness } from "./react-compiler-tools.js";
13
+ export { reactQuickstart } from "./react-quickstart-tools.js";
1267
14
  //# sourceMappingURL=react-tools.js.map