codesift-mcp 0.9.5 → 0.9.10

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 (1313) hide show
  1. package/README.md +39 -23
  2. package/dist/cli/commands.d.ts.map +1 -1
  3. package/dist/cli/commands.js +88 -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/config.d.ts +15 -0
  82. package/dist/config.d.ts.map +1 -1
  83. package/dist/config.js +56 -2
  84. package/dist/config.js.map +1 -1
  85. package/dist/formatter-dispatch.d.ts +53 -0
  86. package/dist/formatter-dispatch.d.ts.map +1 -0
  87. package/dist/formatter-dispatch.js +54 -0
  88. package/dist/formatter-dispatch.js.map +1 -0
  89. package/dist/formatters-analysis.d.ts +9 -0
  90. package/dist/formatters-analysis.d.ts.map +1 -0
  91. package/dist/formatters-analysis.js +166 -0
  92. package/dist/formatters-analysis.js.map +1 -0
  93. package/dist/formatters-core.d.ts +200 -0
  94. package/dist/formatters-core.d.ts.map +1 -0
  95. package/dist/formatters-core.js +206 -0
  96. package/dist/formatters-core.js.map +1 -0
  97. package/dist/formatters-graph.d.ts +124 -0
  98. package/dist/formatters-graph.d.ts.map +1 -0
  99. package/dist/formatters-graph.js +175 -0
  100. package/dist/formatters-graph.js.map +1 -0
  101. package/dist/formatters-nextjs.d.ts +22 -0
  102. package/dist/formatters-nextjs.d.ts.map +1 -0
  103. package/dist/formatters-nextjs.js +394 -0
  104. package/dist/formatters-nextjs.js.map +1 -0
  105. package/dist/formatters.d.ts +8 -349
  106. package/dist/formatters.d.ts.map +1 -1
  107. package/dist/formatters.js +10 -929
  108. package/dist/formatters.js.map +1 -1
  109. package/dist/parser/astro-template/preprocess.d.ts +12 -0
  110. package/dist/parser/astro-template/preprocess.d.ts.map +1 -0
  111. package/dist/parser/astro-template/preprocess.js +34 -0
  112. package/dist/parser/astro-template/preprocess.js.map +1 -0
  113. package/dist/parser/astro-template/resolution.d.ts +16 -0
  114. package/dist/parser/astro-template/resolution.d.ts.map +1 -0
  115. package/dist/parser/astro-template/resolution.js +58 -0
  116. package/dist/parser/astro-template/resolution.js.map +1 -0
  117. package/dist/parser/astro-template/scanner.d.ts +4 -0
  118. package/dist/parser/astro-template/scanner.d.ts.map +1 -0
  119. package/dist/parser/astro-template/scanner.js +71 -0
  120. package/dist/parser/astro-template/scanner.js.map +1 -0
  121. package/dist/parser/astro-template/state.d.ts +22 -0
  122. package/dist/parser/astro-template/state.d.ts.map +1 -0
  123. package/dist/parser/astro-template/state.js +48 -0
  124. package/dist/parser/astro-template/state.js.map +1 -0
  125. package/dist/parser/astro-template/tag-processor.d.ts +3 -0
  126. package/dist/parser/astro-template/tag-processor.d.ts.map +1 -0
  127. package/dist/parser/astro-template/tag-processor.js +63 -0
  128. package/dist/parser/astro-template/tag-processor.js.map +1 -0
  129. package/dist/parser/astro-template/types.d.ts +42 -0
  130. package/dist/parser/astro-template/types.d.ts.map +1 -0
  131. package/dist/parser/astro-template/types.js +2 -0
  132. package/dist/parser/astro-template/types.js.map +1 -0
  133. package/dist/parser/astro-template.d.ts +2 -45
  134. package/dist/parser/astro-template.d.ts.map +1 -1
  135. package/dist/parser/astro-template.js +7 -168
  136. package/dist/parser/astro-template.js.map +1 -1
  137. package/dist/parser/extractors/_shared.js +1 -1
  138. package/dist/parser/extractors/_shared.js.map +1 -1
  139. package/dist/parser/extractors/astro.js +1 -1
  140. package/dist/parser/extractors/astro.js.map +1 -1
  141. package/dist/parser/extractors/conversation.js +1 -1
  142. package/dist/parser/extractors/conversation.js.map +1 -1
  143. package/dist/parser/extractors/hono-app-discovery.d.ts +4 -0
  144. package/dist/parser/extractors/hono-app-discovery.d.ts.map +1 -0
  145. package/dist/parser/extractors/hono-app-discovery.js +169 -0
  146. package/dist/parser/extractors/hono-app-discovery.js.map +1 -0
  147. package/dist/parser/extractors/hono-ast-utils.d.ts +6 -0
  148. package/dist/parser/extractors/hono-ast-utils.d.ts.map +1 -0
  149. package/dist/parser/extractors/hono-ast-utils.js +77 -0
  150. package/dist/parser/extractors/hono-ast-utils.js.map +1 -0
  151. package/dist/parser/extractors/hono-context-extractor.d.ts +15 -0
  152. package/dist/parser/extractors/hono-context-extractor.d.ts.map +1 -0
  153. package/dist/parser/extractors/hono-context-extractor.js +191 -0
  154. package/dist/parser/extractors/hono-context-extractor.js.map +1 -0
  155. package/dist/parser/extractors/hono-middleware-extractor.d.ts +38 -0
  156. package/dist/parser/extractors/hono-middleware-extractor.d.ts.map +1 -0
  157. package/dist/parser/extractors/hono-middleware-extractor.js +480 -0
  158. package/dist/parser/extractors/hono-middleware-extractor.js.map +1 -0
  159. package/dist/parser/extractors/hono-openapi-extractor.d.ts +11 -0
  160. package/dist/parser/extractors/hono-openapi-extractor.d.ts.map +1 -0
  161. package/dist/parser/extractors/hono-openapi-extractor.js +119 -0
  162. package/dist/parser/extractors/hono-openapi-extractor.js.map +1 -0
  163. package/dist/parser/extractors/hono-route-extractor.d.ts +11 -0
  164. package/dist/parser/extractors/hono-route-extractor.d.ts.map +1 -0
  165. package/dist/parser/extractors/hono-route-extractor.js +128 -0
  166. package/dist/parser/extractors/hono-route-extractor.js.map +1 -0
  167. package/dist/parser/extractors/hono-route-utils.d.ts +11 -0
  168. package/dist/parser/extractors/hono-route-utils.d.ts.map +1 -0
  169. package/dist/parser/extractors/hono-route-utils.js +40 -0
  170. package/dist/parser/extractors/hono-route-utils.js.map +1 -0
  171. package/dist/parser/extractors/hono-runtime-extractor.d.ts +17 -0
  172. package/dist/parser/extractors/hono-runtime-extractor.d.ts.map +1 -0
  173. package/dist/parser/extractors/hono-runtime-extractor.js +141 -0
  174. package/dist/parser/extractors/hono-runtime-extractor.js.map +1 -0
  175. package/dist/parser/extractors/hono.d.ts +5 -79
  176. package/dist/parser/extractors/hono.d.ts.map +1 -1
  177. package/dist/parser/extractors/hono.js +32 -1159
  178. package/dist/parser/extractors/hono.js.map +1 -1
  179. package/dist/parser/extractors/kotlin-ast-helpers.d.ts +43 -0
  180. package/dist/parser/extractors/kotlin-ast-helpers.d.ts.map +1 -0
  181. package/dist/parser/extractors/kotlin-ast-helpers.js +187 -0
  182. package/dist/parser/extractors/kotlin-ast-helpers.js.map +1 -0
  183. package/dist/parser/extractors/kotlin-test-symbols.d.ts +21 -0
  184. package/dist/parser/extractors/kotlin-test-symbols.d.ts.map +1 -0
  185. package/dist/parser/extractors/kotlin-test-symbols.js +162 -0
  186. package/dist/parser/extractors/kotlin-test-symbols.js.map +1 -0
  187. package/dist/parser/extractors/kotlin.d.ts.map +1 -1
  188. package/dist/parser/extractors/kotlin.js +3 -334
  189. package/dist/parser/extractors/kotlin.js.map +1 -1
  190. package/dist/parser/extractors/markdown.js +1 -1
  191. package/dist/parser/extractors/markdown.js.map +1 -1
  192. package/dist/parser/extractors/prisma.js +1 -1
  193. package/dist/parser/extractors/prisma.js.map +1 -1
  194. package/dist/parser/extractors/sql-boundaries.d.ts +3 -0
  195. package/dist/parser/extractors/sql-boundaries.d.ts.map +1 -0
  196. package/dist/parser/extractors/sql-boundaries.js +19 -0
  197. package/dist/parser/extractors/sql-boundaries.js.map +1 -0
  198. package/dist/parser/extractors/sql-columns.d.ts +14 -0
  199. package/dist/parser/extractors/sql-columns.d.ts.map +1 -0
  200. package/dist/parser/extractors/sql-columns.js +59 -0
  201. package/dist/parser/extractors/sql-columns.js.map +1 -0
  202. package/dist/parser/extractors/sql-docstrings.d.ts +2 -0
  203. package/dist/parser/extractors/sql-docstrings.d.ts.map +1 -0
  204. package/dist/parser/extractors/sql-docstrings.js +45 -0
  205. package/dist/parser/extractors/sql-docstrings.js.map +1 -0
  206. package/dist/parser/extractors/sql-end-scanner.d.ts +5 -0
  207. package/dist/parser/extractors/sql-end-scanner.d.ts.map +1 -0
  208. package/dist/parser/extractors/sql-end-scanner.js +84 -0
  209. package/dist/parser/extractors/sql-end-scanner.js.map +1 -0
  210. package/dist/parser/extractors/sql-jinja.d.ts +2 -0
  211. package/dist/parser/extractors/sql-jinja.d.ts.map +1 -0
  212. package/dist/parser/extractors/sql-jinja.js +8 -0
  213. package/dist/parser/extractors/sql-jinja.js.map +1 -0
  214. package/dist/parser/extractors/sql-matcher-catalog.d.ts +9 -0
  215. package/dist/parser/extractors/sql-matcher-catalog.d.ts.map +1 -0
  216. package/dist/parser/extractors/sql-matcher-catalog.js +15 -0
  217. package/dist/parser/extractors/sql-matcher-catalog.js.map +1 -0
  218. package/dist/parser/extractors/sql-matchers.d.ts +9 -0
  219. package/dist/parser/extractors/sql-matchers.d.ts.map +1 -0
  220. package/dist/parser/extractors/sql-matchers.js +20 -0
  221. package/dist/parser/extractors/sql-matchers.js.map +1 -0
  222. package/dist/parser/extractors/sql-offsets.d.ts +2 -0
  223. package/dist/parser/extractors/sql-offsets.d.ts.map +1 -0
  224. package/dist/parser/extractors/sql-offsets.js +25 -0
  225. package/dist/parser/extractors/sql-offsets.js.map +1 -0
  226. package/dist/parser/extractors/sql-parens.d.ts +4 -0
  227. package/dist/parser/extractors/sql-parens.d.ts.map +1 -0
  228. package/dist/parser/extractors/sql-parens.js +70 -0
  229. package/dist/parser/extractors/sql-parens.js.map +1 -0
  230. package/dist/parser/extractors/sql-symbols.d.ts +11 -0
  231. package/dist/parser/extractors/sql-symbols.d.ts.map +1 -0
  232. package/dist/parser/extractors/sql-symbols.js +23 -0
  233. package/dist/parser/extractors/sql-symbols.js.map +1 -0
  234. package/dist/parser/extractors/sql.d.ts +2 -30
  235. package/dist/parser/extractors/sql.d.ts.map +1 -1
  236. package/dist/parser/extractors/sql.js +23 -496
  237. package/dist/parser/extractors/sql.js.map +1 -1
  238. package/dist/parser/extractors/typescript-cjs-nodes.d.ts +5 -0
  239. package/dist/parser/extractors/typescript-cjs-nodes.d.ts.map +1 -0
  240. package/dist/parser/extractors/typescript-cjs-nodes.js +148 -0
  241. package/dist/parser/extractors/typescript-cjs-nodes.js.map +1 -0
  242. package/dist/parser/extractors/typescript-class-nodes.d.ts +8 -0
  243. package/dist/parser/extractors/typescript-class-nodes.d.ts.map +1 -0
  244. package/dist/parser/extractors/typescript-class-nodes.js +183 -0
  245. package/dist/parser/extractors/typescript-class-nodes.js.map +1 -0
  246. package/dist/parser/extractors/typescript-declaration-nodes.d.ts +5 -0
  247. package/dist/parser/extractors/typescript-declaration-nodes.d.ts.map +1 -0
  248. package/dist/parser/extractors/typescript-declaration-nodes.js +105 -0
  249. package/dist/parser/extractors/typescript-declaration-nodes.js.map +1 -0
  250. package/dist/parser/extractors/typescript-module-nodes.d.ts +6 -0
  251. package/dist/parser/extractors/typescript-module-nodes.d.ts.map +1 -0
  252. package/dist/parser/extractors/typescript-module-nodes.js +151 -0
  253. package/dist/parser/extractors/typescript-module-nodes.js.map +1 -0
  254. package/dist/parser/extractors/typescript-react.d.ts +11 -0
  255. package/dist/parser/extractors/typescript-react.d.ts.map +1 -0
  256. package/dist/parser/extractors/typescript-react.js +101 -0
  257. package/dist/parser/extractors/typescript-react.js.map +1 -0
  258. package/dist/parser/extractors/typescript-shared.d.ts +26 -0
  259. package/dist/parser/extractors/typescript-shared.d.ts.map +1 -0
  260. package/dist/parser/extractors/typescript-shared.js +101 -0
  261. package/dist/parser/extractors/typescript-shared.js.map +1 -0
  262. package/dist/parser/extractors/typescript-test-nodes.d.ts +4 -0
  263. package/dist/parser/extractors/typescript-test-nodes.d.ts.map +1 -0
  264. package/dist/parser/extractors/typescript-test-nodes.js +112 -0
  265. package/dist/parser/extractors/typescript-test-nodes.js.map +1 -0
  266. package/dist/parser/extractors/typescript-type-nodes.d.ts +6 -0
  267. package/dist/parser/extractors/typescript-type-nodes.d.ts.map +1 -0
  268. package/dist/parser/extractors/typescript-type-nodes.js +48 -0
  269. package/dist/parser/extractors/typescript-type-nodes.js.map +1 -0
  270. package/dist/parser/extractors/typescript.d.ts.map +1 -1
  271. package/dist/parser/extractors/typescript.js +68 -1127
  272. package/dist/parser/extractors/typescript.js.map +1 -1
  273. package/dist/parser/parser-manager.d.ts.map +1 -1
  274. package/dist/parser/parser-manager.js +5 -0
  275. package/dist/parser/parser-manager.js.map +1 -1
  276. package/dist/parser/symbol-extractor.d.ts +1 -12
  277. package/dist/parser/symbol-extractor.d.ts.map +1 -1
  278. package/dist/parser/symbol-extractor.js +2 -24
  279. package/dist/parser/symbol-extractor.js.map +1 -1
  280. package/dist/parser/symbol-utils.d.ts +4 -0
  281. package/dist/parser/symbol-utils.d.ts.map +1 -0
  282. package/dist/parser/symbol-utils.js +20 -0
  283. package/dist/parser/symbol-utils.js.map +1 -0
  284. package/dist/register-tool-groups/analysis/cross-repo.d.ts +4 -0
  285. package/dist/register-tool-groups/analysis/cross-repo.d.ts.map +1 -0
  286. package/dist/register-tool-groups/analysis/cross-repo.js +108 -0
  287. package/dist/register-tool-groups/analysis/cross-repo.js.map +1 -0
  288. package/dist/register-tool-groups/analysis/review.d.ts +3 -0
  289. package/dist/register-tool-groups/analysis/review.d.ts.map +1 -0
  290. package/dist/register-tool-groups/analysis/review.js +96 -0
  291. package/dist/register-tool-groups/analysis/review.js.map +1 -0
  292. package/dist/register-tool-groups/analysis/workspace.d.ts +3 -0
  293. package/dist/register-tool-groups/analysis/workspace.d.ts.map +1 -0
  294. package/dist/register-tool-groups/analysis/workspace.js +82 -0
  295. package/dist/register-tool-groups/analysis/workspace.js.map +1 -0
  296. package/dist/register-tool-groups/analysis.d.ts +3 -0
  297. package/dist/register-tool-groups/analysis.d.ts.map +1 -0
  298. package/dist/register-tool-groups/analysis.js +541 -0
  299. package/dist/register-tool-groups/analysis.js.map +1 -0
  300. package/dist/register-tool-groups/astro.d.ts +3 -0
  301. package/dist/register-tool-groups/astro.d.ts.map +1 -0
  302. package/dist/register-tool-groups/astro.js +302 -0
  303. package/dist/register-tool-groups/astro.js.map +1 -0
  304. package/dist/register-tool-groups/core/index.d.ts +3 -0
  305. package/dist/register-tool-groups/core/index.d.ts.map +1 -0
  306. package/dist/register-tool-groups/core/index.js +96 -0
  307. package/dist/register-tool-groups/core/index.js.map +1 -0
  308. package/dist/register-tool-groups/core/meta.d.ts +3 -0
  309. package/dist/register-tool-groups/core/meta.d.ts.map +1 -0
  310. package/dist/register-tool-groups/core/meta.js +180 -0
  311. package/dist/register-tool-groups/core/meta.js.map +1 -0
  312. package/dist/register-tool-groups/core/schema.d.ts +3 -0
  313. package/dist/register-tool-groups/core/schema.d.ts.map +1 -0
  314. package/dist/register-tool-groups/core/schema.js +16 -0
  315. package/dist/register-tool-groups/core/schema.js.map +1 -0
  316. package/dist/register-tool-groups/core/search.d.ts +4 -0
  317. package/dist/register-tool-groups/core/search.d.ts.map +1 -0
  318. package/dist/register-tool-groups/core/search.js +262 -0
  319. package/dist/register-tool-groups/core/search.js.map +1 -0
  320. package/dist/register-tool-groups/core/symbols.d.ts +3 -0
  321. package/dist/register-tool-groups/core/symbols.d.ts.map +1 -0
  322. package/dist/register-tool-groups/core/symbols.js +338 -0
  323. package/dist/register-tool-groups/core/symbols.js.map +1 -0
  324. package/dist/register-tool-groups/core.d.ts +3 -0
  325. package/dist/register-tool-groups/core.d.ts.map +1 -0
  326. package/dist/register-tool-groups/core.js +12 -0
  327. package/dist/register-tool-groups/core.js.map +1 -0
  328. package/dist/register-tool-groups/deps.d.ts +10 -0
  329. package/dist/register-tool-groups/deps.d.ts.map +1 -0
  330. package/dist/register-tool-groups/deps.js +6 -0
  331. package/dist/register-tool-groups/deps.js.map +1 -0
  332. package/dist/register-tool-groups/handler-wrappers.d.ts +63 -0
  333. package/dist/register-tool-groups/handler-wrappers.d.ts.map +1 -0
  334. package/dist/register-tool-groups/handler-wrappers.js +106 -0
  335. package/dist/register-tool-groups/handler-wrappers.js.map +1 -0
  336. package/dist/register-tool-groups/hono.d.ts +3 -0
  337. package/dist/register-tool-groups/hono.d.ts.map +1 -0
  338. package/dist/register-tool-groups/hono.js +179 -0
  339. package/dist/register-tool-groups/hono.js.map +1 -0
  340. package/dist/register-tool-groups/index.d.ts +3 -0
  341. package/dist/register-tool-groups/index.d.ts.map +1 -0
  342. package/dist/register-tool-groups/index.js +28 -0
  343. package/dist/register-tool-groups/index.js.map +1 -0
  344. package/dist/register-tool-groups/kotlin.d.ts +3 -0
  345. package/dist/register-tool-groups/kotlin.d.ts.map +1 -0
  346. package/dist/register-tool-groups/kotlin.js +162 -0
  347. package/dist/register-tool-groups/kotlin.js.map +1 -0
  348. package/dist/register-tool-groups/meta.d.ts +3 -0
  349. package/dist/register-tool-groups/meta.d.ts.map +1 -0
  350. package/dist/register-tool-groups/meta.js +563 -0
  351. package/dist/register-tool-groups/meta.js.map +1 -0
  352. package/dist/register-tool-groups/nextjs.d.ts +3 -0
  353. package/dist/register-tool-groups/nextjs.d.ts.map +1 -0
  354. package/dist/register-tool-groups/nextjs.js +78 -0
  355. package/dist/register-tool-groups/nextjs.js.map +1 -0
  356. package/dist/register-tool-groups/php.d.ts +3 -0
  357. package/dist/register-tool-groups/php.d.ts.map +1 -0
  358. package/dist/register-tool-groups/php.js +312 -0
  359. package/dist/register-tool-groups/php.js.map +1 -0
  360. package/dist/register-tool-groups/python.d.ts +3 -0
  361. package/dist/register-tool-groups/python.d.ts.map +1 -0
  362. package/dist/register-tool-groups/python.js +366 -0
  363. package/dist/register-tool-groups/python.js.map +1 -0
  364. package/dist/register-tool-groups/react.d.ts +3 -0
  365. package/dist/register-tool-groups/react.d.ts.map +1 -0
  366. package/dist/register-tool-groups/react.js +119 -0
  367. package/dist/register-tool-groups/react.js.map +1 -0
  368. package/dist/register-tool-groups/shared.d.ts +156 -0
  369. package/dist/register-tool-groups/shared.d.ts.map +1 -0
  370. package/dist/register-tool-groups/shared.js +182 -0
  371. package/dist/register-tool-groups/shared.js.map +1 -0
  372. package/dist/register-tool-groups/sql.d.ts +3 -0
  373. package/dist/register-tool-groups/sql.d.ts.map +1 -0
  374. package/dist/register-tool-groups/sql.js +260 -0
  375. package/dist/register-tool-groups/sql.js.map +1 -0
  376. package/dist/register-tool-loaders.d.ts +22 -22
  377. package/dist/register-tool-loaders.d.ts.map +1 -1
  378. package/dist/register-tools/autoload.d.ts +8 -0
  379. package/dist/register-tools/autoload.d.ts.map +1 -0
  380. package/dist/register-tools/autoload.js +517 -0
  381. package/dist/register-tools/autoload.js.map +1 -0
  382. package/dist/register-tools/discovery.d.ts +55 -0
  383. package/dist/register-tools/discovery.d.ts.map +1 -0
  384. package/dist/register-tools/discovery.js +206 -0
  385. package/dist/register-tools/discovery.js.map +1 -0
  386. package/dist/register-tools/runtime.d.ts +89 -0
  387. package/dist/register-tools/runtime.d.ts.map +1 -0
  388. package/dist/register-tools/runtime.js +491 -0
  389. package/dist/register-tools/runtime.js.map +1 -0
  390. package/dist/register-tools.d.ts +5 -172
  391. package/dist/register-tools.d.ts.map +1 -1
  392. package/dist/register-tools.js +27 -4878
  393. package/dist/register-tools.js.map +1 -1
  394. package/dist/search/bm25.js +1 -1
  395. package/dist/search/bm25.js.map +1 -1
  396. package/dist/search/tool-embedding-cache.d.ts +4 -0
  397. package/dist/search/tool-embedding-cache.d.ts.map +1 -0
  398. package/dist/search/tool-embedding-cache.js +44 -0
  399. package/dist/search/tool-embedding-cache.js.map +1 -0
  400. package/dist/search/tool-embedding-storage.d.ts +8 -0
  401. package/dist/search/tool-embedding-storage.d.ts.map +1 -0
  402. package/dist/search/tool-embedding-storage.js +56 -0
  403. package/dist/search/tool-embedding-storage.js.map +1 -0
  404. package/dist/search/tool-ranker-bm25.d.ts +6 -0
  405. package/dist/search/tool-ranker-bm25.d.ts.map +1 -0
  406. package/dist/search/tool-ranker-bm25.js +40 -0
  407. package/dist/search/tool-ranker-bm25.js.map +1 -0
  408. package/dist/search/tool-ranker-orchestrator.d.ts +3 -0
  409. package/dist/search/tool-ranker-orchestrator.d.ts.map +1 -0
  410. package/dist/search/tool-ranker-orchestrator.js +49 -0
  411. package/dist/search/tool-ranker-orchestrator.js.map +1 -0
  412. package/dist/search/tool-ranker-reasoning.d.ts +4 -0
  413. package/dist/search/tool-ranker-reasoning.d.ts.map +1 -0
  414. package/dist/search/tool-ranker-reasoning.js +35 -0
  415. package/dist/search/tool-ranker-reasoning.js.map +1 -0
  416. package/dist/search/tool-ranker-signal-math.d.ts +6 -0
  417. package/dist/search/tool-ranker-signal-math.d.ts.map +1 -0
  418. package/dist/search/tool-ranker-signal-math.js +51 -0
  419. package/dist/search/tool-ranker-signal-math.js.map +1 -0
  420. package/dist/search/tool-ranker-signals.d.ts +20 -0
  421. package/dist/search/tool-ranker-signals.d.ts.map +1 -0
  422. package/dist/search/tool-ranker-signals.js +50 -0
  423. package/dist/search/tool-ranker-signals.js.map +1 -0
  424. package/dist/search/tool-ranker-types.d.ts +26 -0
  425. package/dist/search/tool-ranker-types.d.ts.map +1 -0
  426. package/dist/search/tool-ranker-types.js +2 -0
  427. package/dist/search/tool-ranker-types.js.map +1 -0
  428. package/dist/search/tool-ranker.d.ts +6 -89
  429. package/dist/search/tool-ranker.d.ts.map +1 -1
  430. package/dist/search/tool-ranker.js +5 -419
  431. package/dist/search/tool-ranker.js.map +1 -1
  432. package/dist/server-helpers/repo-resolution.d.ts +45 -0
  433. package/dist/server-helpers/repo-resolution.d.ts.map +1 -0
  434. package/dist/server-helpers/repo-resolution.js +113 -0
  435. package/dist/server-helpers/repo-resolution.js.map +1 -0
  436. package/dist/server-helpers/response-hints.d.ts +9 -0
  437. package/dist/server-helpers/response-hints.d.ts.map +1 -0
  438. package/dist/server-helpers/response-hints.js +225 -0
  439. package/dist/server-helpers/response-hints.js.map +1 -0
  440. package/dist/server-helpers.d.ts +14 -35
  441. package/dist/server-helpers.d.ts.map +1 -1
  442. package/dist/server-helpers.js +53 -320
  443. package/dist/server-helpers.js.map +1 -1
  444. package/dist/server.d.ts.map +1 -1
  445. package/dist/server.js +39 -0
  446. package/dist/server.js.map +1 -1
  447. package/dist/storage/usage-tracker.d.ts.map +1 -1
  448. package/dist/storage/usage-tracker.js +12 -0
  449. package/dist/storage/usage-tracker.js.map +1 -1
  450. package/dist/tools/astro-actions/ast.d.ts +14 -0
  451. package/dist/tools/astro-actions/ast.d.ts.map +1 -0
  452. package/dist/tools/astro-actions/ast.js +75 -0
  453. package/dist/tools/astro-actions/ast.js.map +1 -0
  454. package/dist/tools/astro-actions/audit.d.ts +5 -0
  455. package/dist/tools/astro-actions/audit.d.ts.map +1 -0
  456. package/dist/tools/astro-actions/audit.js +102 -0
  457. package/dist/tools/astro-actions/audit.js.map +1 -0
  458. package/dist/tools/astro-actions/callers.d.ts +9 -0
  459. package/dist/tools/astro-actions/callers.d.ts.map +1 -0
  460. package/dist/tools/astro-actions/callers.js +84 -0
  461. package/dist/tools/astro-actions/callers.js.map +1 -0
  462. package/dist/tools/astro-actions/parser.d.ts +3 -0
  463. package/dist/tools/astro-actions/parser.d.ts.map +1 -0
  464. package/dist/tools/astro-actions/parser.js +156 -0
  465. package/dist/tools/astro-actions/parser.js.map +1 -0
  466. package/dist/tools/astro-actions/types.d.ts +58 -0
  467. package/dist/tools/astro-actions/types.d.ts.map +1 -0
  468. package/dist/tools/astro-actions/types.js +2 -0
  469. package/dist/tools/astro-actions/types.js.map +1 -0
  470. package/dist/tools/astro-actions/zod-ast.d.ts +7 -0
  471. package/dist/tools/astro-actions/zod-ast.d.ts.map +1 -0
  472. package/dist/tools/astro-actions/zod-ast.js +51 -0
  473. package/dist/tools/astro-actions/zod-ast.js.map +1 -0
  474. package/dist/tools/astro-actions.d.ts +6 -46
  475. package/dist/tools/astro-actions.d.ts.map +1 -1
  476. package/dist/tools/astro-actions.js +6 -545
  477. package/dist/tools/astro-actions.js.map +1 -1
  478. package/dist/tools/astro-content-collections/diagnostics.d.ts +3 -0
  479. package/dist/tools/astro-content-collections/diagnostics.d.ts.map +1 -0
  480. package/dist/tools/astro-content-collections/diagnostics.js +277 -0
  481. package/dist/tools/astro-content-collections/diagnostics.js.map +1 -0
  482. package/dist/tools/astro-content-collections/discovery.d.ts +6 -0
  483. package/dist/tools/astro-content-collections/discovery.d.ts.map +1 -0
  484. package/dist/tools/astro-content-collections/discovery.js +152 -0
  485. package/dist/tools/astro-content-collections/discovery.js.map +1 -0
  486. package/dist/tools/astro-content-collections/schema.d.ts +15 -0
  487. package/dist/tools/astro-content-collections/schema.d.ts.map +1 -0
  488. package/dist/tools/astro-content-collections/schema.js +119 -0
  489. package/dist/tools/astro-content-collections/schema.js.map +1 -0
  490. package/dist/tools/astro-content-collections/types.d.ts +61 -0
  491. package/dist/tools/astro-content-collections/types.d.ts.map +1 -0
  492. package/dist/tools/astro-content-collections/types.js +2 -0
  493. package/dist/tools/astro-content-collections/types.js.map +1 -0
  494. package/dist/tools/astro-content-collections.d.ts +5 -40
  495. package/dist/tools/astro-content-collections.d.ts.map +1 -1
  496. package/dist/tools/astro-content-collections.js +42 -449
  497. package/dist/tools/astro-content-collections.js.map +1 -1
  498. package/dist/tools/astro-routes.js +1 -1
  499. package/dist/tools/astro-routes.js.map +1 -1
  500. package/dist/tools/complexity-tools.d.ts +6 -0
  501. package/dist/tools/complexity-tools.d.ts.map +1 -1
  502. package/dist/tools/complexity-tools.js +26 -0
  503. package/dist/tools/complexity-tools.js.map +1 -1
  504. package/dist/tools/context-levels/l0.d.ts +4 -0
  505. package/dist/tools/context-levels/l0.d.ts.map +1 -0
  506. package/dist/tools/context-levels/l0.js +17 -0
  507. package/dist/tools/context-levels/l0.js.map +1 -0
  508. package/dist/tools/context-levels/l1.d.ts +4 -0
  509. package/dist/tools/context-levels/l1.d.ts.map +1 -0
  510. package/dist/tools/context-levels/l1.js +26 -0
  511. package/dist/tools/context-levels/l1.js.map +1 -0
  512. package/dist/tools/context-levels/l2.d.ts +4 -0
  513. package/dist/tools/context-levels/l2.d.ts.map +1 -0
  514. package/dist/tools/context-levels/l2.js +36 -0
  515. package/dist/tools/context-levels/l2.js.map +1 -0
  516. package/dist/tools/context-levels/l3.d.ts +4 -0
  517. package/dist/tools/context-levels/l3.d.ts.map +1 -0
  518. package/dist/tools/context-levels/l3.js +30 -0
  519. package/dist/tools/context-levels/l3.js.map +1 -0
  520. package/dist/tools/context-levels/shared.d.ts +2 -0
  521. package/dist/tools/context-levels/shared.d.ts.map +1 -0
  522. package/dist/tools/context-levels/shared.js +4 -0
  523. package/dist/tools/context-levels/shared.js.map +1 -0
  524. package/dist/tools/context-levels/types.d.ts +34 -0
  525. package/dist/tools/context-levels/types.d.ts.map +1 -0
  526. package/dist/tools/context-levels/types.js +2 -0
  527. package/dist/tools/context-levels/types.js.map +1 -0
  528. package/dist/tools/context-tools.d.ts +2 -34
  529. package/dist/tools/context-tools.d.ts.map +1 -1
  530. package/dist/tools/context-tools.js +11 -127
  531. package/dist/tools/context-tools.js.map +1 -1
  532. package/dist/tools/conversation-cache.d.ts +6 -0
  533. package/dist/tools/conversation-cache.d.ts.map +1 -0
  534. package/dist/tools/conversation-cache.js +29 -0
  535. package/dist/tools/conversation-cache.js.map +1 -0
  536. package/dist/tools/conversation-index-tools.d.ts +39 -0
  537. package/dist/tools/conversation-index-tools.d.ts.map +1 -0
  538. package/dist/tools/conversation-index-tools.js +136 -0
  539. package/dist/tools/conversation-index-tools.js.map +1 -0
  540. package/dist/tools/conversation-paths.d.ts +4 -0
  541. package/dist/tools/conversation-paths.d.ts.map +1 -0
  542. package/dist/tools/conversation-paths.js +15 -0
  543. package/dist/tools/conversation-paths.js.map +1 -0
  544. package/dist/tools/conversation-search-tools.d.ts +52 -0
  545. package/dist/tools/conversation-search-tools.d.ts.map +1 -0
  546. package/dist/tools/conversation-search-tools.js +229 -0
  547. package/dist/tools/conversation-search-tools.js.map +1 -0
  548. package/dist/tools/conversation-tools.d.ts +6 -112
  549. package/dist/tools/conversation-tools.d.ts.map +1 -1
  550. package/dist/tools/conversation-tools.js +4 -425
  551. package/dist/tools/conversation-tools.js.map +1 -1
  552. package/dist/tools/cross-repo-outbound-lexer/call-detectors.d.ts +5 -0
  553. package/dist/tools/cross-repo-outbound-lexer/call-detectors.d.ts.map +1 -0
  554. package/dist/tools/cross-repo-outbound-lexer/call-detectors.js +76 -0
  555. package/dist/tools/cross-repo-outbound-lexer/call-detectors.js.map +1 -0
  556. package/dist/tools/cross-repo-outbound-lexer/context.d.ts +18 -0
  557. package/dist/tools/cross-repo-outbound-lexer/context.d.ts.map +1 -0
  558. package/dist/tools/cross-repo-outbound-lexer/context.js +33 -0
  559. package/dist/tools/cross-repo-outbound-lexer/context.js.map +1 -0
  560. package/dist/tools/cross-repo-outbound-lexer/literal-readers.d.ts +6 -0
  561. package/dist/tools/cross-repo-outbound-lexer/literal-readers.d.ts.map +1 -0
  562. package/dist/tools/cross-repo-outbound-lexer/literal-readers.js +65 -0
  563. package/dist/tools/cross-repo-outbound-lexer/literal-readers.js.map +1 -0
  564. package/dist/tools/cross-repo-outbound-lexer/non-code-states.d.ts +3 -0
  565. package/dist/tools/cross-repo-outbound-lexer/non-code-states.d.ts.map +1 -0
  566. package/dist/tools/cross-repo-outbound-lexer/non-code-states.js +103 -0
  567. package/dist/tools/cross-repo-outbound-lexer/non-code-states.js.map +1 -0
  568. package/dist/tools/cross-repo-outbound-lexer/template-reader.d.ts +3 -0
  569. package/dist/tools/cross-repo-outbound-lexer/template-reader.d.ts.map +1 -0
  570. package/dist/tools/cross-repo-outbound-lexer/template-reader.js +82 -0
  571. package/dist/tools/cross-repo-outbound-lexer/template-reader.js.map +1 -0
  572. package/dist/tools/cross-repo-outbound-lexer/types.d.ts +18 -0
  573. package/dist/tools/cross-repo-outbound-lexer/types.d.ts.map +1 -0
  574. package/dist/tools/cross-repo-outbound-lexer/types.js +2 -0
  575. package/dist/tools/cross-repo-outbound-lexer/types.js.map +1 -0
  576. package/dist/tools/cross-repo-outbound-lexer.d.ts +5 -31
  577. package/dist/tools/cross-repo-outbound-lexer.d.ts.map +1 -1
  578. package/dist/tools/cross-repo-outbound-lexer.js +75 -575
  579. package/dist/tools/cross-repo-outbound-lexer.js.map +1 -1
  580. package/dist/tools/dependency-audit-freshness-tools.d.ts +3 -0
  581. package/dist/tools/dependency-audit-freshness-tools.d.ts.map +1 -0
  582. package/dist/tools/dependency-audit-freshness-tools.js +62 -0
  583. package/dist/tools/dependency-audit-freshness-tools.js.map +1 -0
  584. package/dist/tools/dependency-audit-license-tools.d.ts +5 -0
  585. package/dist/tools/dependency-audit-license-tools.d.ts.map +1 -0
  586. package/dist/tools/dependency-audit-license-tools.js +75 -0
  587. package/dist/tools/dependency-audit-license-tools.js.map +1 -0
  588. package/dist/tools/dependency-audit-lockfile-tools.d.ts +3 -0
  589. package/dist/tools/dependency-audit-lockfile-tools.d.ts.map +1 -0
  590. package/dist/tools/dependency-audit-lockfile-tools.js +147 -0
  591. package/dist/tools/dependency-audit-lockfile-tools.js.map +1 -0
  592. package/dist/tools/dependency-audit-tools.d.ts +2 -54
  593. package/dist/tools/dependency-audit-tools.d.ts.map +1 -1
  594. package/dist/tools/dependency-audit-tools.js +69 -484
  595. package/dist/tools/dependency-audit-tools.js.map +1 -1
  596. package/dist/tools/dependency-audit-types.d.ts +65 -0
  597. package/dist/tools/dependency-audit-types.d.ts.map +1 -0
  598. package/dist/tools/dependency-audit-types.js +19 -0
  599. package/dist/tools/dependency-audit-types.js.map +1 -0
  600. package/dist/tools/dependency-audit-vulnerability-tools.d.ts +4 -0
  601. package/dist/tools/dependency-audit-vulnerability-tools.d.ts.map +1 -0
  602. package/dist/tools/dependency-audit-vulnerability-tools.js +103 -0
  603. package/dist/tools/dependency-audit-vulnerability-tools.js.map +1 -0
  604. package/dist/tools/diff-tools.d.ts.map +1 -1
  605. package/dist/tools/diff-tools.js +5 -7
  606. package/dist/tools/diff-tools.js.map +1 -1
  607. package/dist/tools/impact-tools.d.ts.map +1 -1
  608. package/dist/tools/impact-tools.js +5 -4
  609. package/dist/tools/impact-tools.js.map +1 -1
  610. package/dist/tools/index-shared.d.ts +17 -0
  611. package/dist/tools/index-shared.d.ts.map +1 -0
  612. package/dist/tools/index-shared.js +18 -0
  613. package/dist/tools/index-shared.js.map +1 -0
  614. package/dist/tools/index-tools/file-indexer.d.ts +27 -0
  615. package/dist/tools/index-tools/file-indexer.d.ts.map +1 -0
  616. package/dist/tools/index-tools/file-indexer.js +223 -0
  617. package/dist/tools/index-tools/file-indexer.js.map +1 -0
  618. package/dist/tools/index-tools/folder-indexer.d.ts +21 -0
  619. package/dist/tools/index-tools/folder-indexer.d.ts.map +1 -0
  620. package/dist/tools/index-tools/folder-indexer.js +399 -0
  621. package/dist/tools/index-tools/folder-indexer.js.map +1 -0
  622. package/dist/tools/index-tools/folder-merge.d.ts +23 -0
  623. package/dist/tools/index-tools/folder-merge.d.ts.map +1 -0
  624. package/dist/tools/index-tools/folder-merge.js +205 -0
  625. package/dist/tools/index-tools/folder-merge.js.map +1 -0
  626. package/dist/tools/index-tools/parse.d.ts +35 -0
  627. package/dist/tools/index-tools/parse.d.ts.map +1 -0
  628. package/dist/tools/index-tools/parse.js +262 -0
  629. package/dist/tools/index-tools/parse.js.map +1 -0
  630. package/dist/tools/index-tools/registry.d.ts +40 -0
  631. package/dist/tools/index-tools/registry.d.ts.map +1 -0
  632. package/dist/tools/index-tools/registry.js +258 -0
  633. package/dist/tools/index-tools/registry.js.map +1 -0
  634. package/dist/tools/index-tools/snapshots.d.ts +51 -0
  635. package/dist/tools/index-tools/snapshots.d.ts.map +1 -0
  636. package/dist/tools/index-tools/snapshots.js +223 -0
  637. package/dist/tools/index-tools/snapshots.js.map +1 -0
  638. package/dist/tools/index-tools/state.d.ts +8 -0
  639. package/dist/tools/index-tools/state.d.ts.map +1 -0
  640. package/dist/tools/index-tools/state.js +6 -0
  641. package/dist/tools/index-tools/state.js.map +1 -0
  642. package/dist/tools/index-tools/types.d.ts +20 -0
  643. package/dist/tools/index-tools/types.d.ts.map +1 -0
  644. package/dist/tools/index-tools/types.js +2 -0
  645. package/dist/tools/index-tools/types.js.map +1 -0
  646. package/dist/tools/index-tools/watcher.d.ts +10 -0
  647. package/dist/tools/index-tools/watcher.d.ts.map +1 -0
  648. package/dist/tools/index-tools/watcher.js +130 -0
  649. package/dist/tools/index-tools/watcher.js.map +1 -0
  650. package/dist/tools/index-tools.d.ts +16 -152
  651. package/dist/tools/index-tools.d.ts.map +1 -1
  652. package/dist/tools/index-tools.js +12 -1674
  653. package/dist/tools/index-tools.js.map +1 -1
  654. package/dist/tools/kotlin-extension-tools.d.ts +16 -0
  655. package/dist/tools/kotlin-extension-tools.d.ts.map +1 -0
  656. package/dist/tools/kotlin-extension-tools.js +31 -0
  657. package/dist/tools/kotlin-extension-tools.js.map +1 -0
  658. package/dist/tools/kotlin-flow-tools.d.ts +12 -0
  659. package/dist/tools/kotlin-flow-tools.d.ts.map +1 -0
  660. package/dist/tools/kotlin-flow-tools.js +72 -0
  661. package/dist/tools/kotlin-flow-tools.js.map +1 -0
  662. package/dist/tools/kotlin-kmp-tools.d.ts +29 -0
  663. package/dist/tools/kotlin-kmp-tools.d.ts.map +1 -0
  664. package/dist/tools/kotlin-kmp-tools.js +87 -0
  665. package/dist/tools/kotlin-kmp-tools.js.map +1 -0
  666. package/dist/tools/kotlin-sealed-tools.d.ts +27 -0
  667. package/dist/tools/kotlin-sealed-tools.d.ts.map +1 -0
  668. package/dist/tools/kotlin-sealed-tools.js +130 -0
  669. package/dist/tools/kotlin-sealed-tools.js.map +1 -0
  670. package/dist/tools/kotlin-suspend-tools.d.ts +24 -0
  671. package/dist/tools/kotlin-suspend-tools.d.ts.map +1 -0
  672. package/dist/tools/kotlin-suspend-tools.js +161 -0
  673. package/dist/tools/kotlin-suspend-tools.js.map +1 -0
  674. package/dist/tools/kotlin-tools.d.ts +6 -141
  675. package/dist/tools/kotlin-tools.d.ts.map +1 -1
  676. package/dist/tools/kotlin-tools.js +6 -571
  677. package/dist/tools/kotlin-tools.js.map +1 -1
  678. package/dist/tools/nest-audit-tools.d.ts +43 -0
  679. package/dist/tools/nest-audit-tools.d.ts.map +1 -0
  680. package/dist/tools/nest-audit-tools.js +232 -0
  681. package/dist/tools/nest-audit-tools.js.map +1 -0
  682. package/dist/tools/nest-di-tools.d.ts +32 -0
  683. package/dist/tools/nest-di-tools.d.ts.map +1 -0
  684. package/dist/tools/nest-di-tools.js +161 -0
  685. package/dist/tools/nest-di-tools.js.map +1 -0
  686. package/dist/tools/nest-guard-tools.d.ts +34 -0
  687. package/dist/tools/nest-guard-tools.d.ts.map +1 -0
  688. package/dist/tools/nest-guard-tools.js +240 -0
  689. package/dist/tools/nest-guard-tools.js.map +1 -0
  690. package/dist/tools/nest-lifecycle-tools.d.ts +16 -0
  691. package/dist/tools/nest-lifecycle-tools.d.ts.map +1 -0
  692. package/dist/tools/nest-lifecycle-tools.js +54 -0
  693. package/dist/tools/nest-lifecycle-tools.js.map +1 -0
  694. package/dist/tools/nest-module-tools.d.ts +28 -0
  695. package/dist/tools/nest-module-tools.d.ts.map +1 -0
  696. package/dist/tools/nest-module-tools.js +86 -0
  697. package/dist/tools/nest-module-tools.js.map +1 -0
  698. package/dist/tools/nest-pipeline-tools.d.ts +32 -0
  699. package/dist/tools/nest-pipeline-tools.d.ts.map +1 -0
  700. package/dist/tools/nest-pipeline-tools.js +122 -0
  701. package/dist/tools/nest-pipeline-tools.js.map +1 -0
  702. package/dist/tools/nest-route-tools.d.ts +43 -0
  703. package/dist/tools/nest-route-tools.d.ts.map +1 -0
  704. package/dist/tools/nest-route-tools.js +261 -0
  705. package/dist/tools/nest-route-tools.js.map +1 -0
  706. package/dist/tools/nest-shared-tools.d.ts +13 -0
  707. package/dist/tools/nest-shared-tools.d.ts.map +1 -0
  708. package/dist/tools/nest-shared-tools.js +36 -0
  709. package/dist/tools/nest-shared-tools.js.map +1 -0
  710. package/dist/tools/nest-tools.d.ts +18 -195
  711. package/dist/tools/nest-tools.d.ts.map +1 -1
  712. package/dist/tools/nest-tools.js +11 -1140
  713. package/dist/tools/nest-tools.js.map +1 -1
  714. package/dist/tools/pattern-registry.d.ts +4 -0
  715. package/dist/tools/pattern-registry.d.ts.map +1 -0
  716. package/dist/tools/pattern-registry.js +3 -0
  717. package/dist/tools/pattern-registry.js.map +1 -0
  718. package/dist/tools/pattern-tools.d.ts +5 -46
  719. package/dist/tools/pattern-tools.d.ts.map +1 -1
  720. package/dist/tools/pattern-tools.js +4 -1102
  721. package/dist/tools/pattern-tools.js.map +1 -1
  722. package/dist/tools/patterns/adapters/astro.d.ts +3 -0
  723. package/dist/tools/patterns/adapters/astro.d.ts.map +1 -0
  724. package/dist/tools/patterns/adapters/astro.js +56 -0
  725. package/dist/tools/patterns/adapters/astro.js.map +1 -0
  726. package/dist/tools/patterns/adapters/common.d.ts +3 -0
  727. package/dist/tools/patterns/adapters/common.d.ts.map +1 -0
  728. package/dist/tools/patterns/adapters/common.js +38 -0
  729. package/dist/tools/patterns/adapters/common.js.map +1 -0
  730. package/dist/tools/patterns/adapters/database.d.ts +3 -0
  731. package/dist/tools/patterns/adapters/database.d.ts.map +1 -0
  732. package/dist/tools/patterns/adapters/database.js +32 -0
  733. package/dist/tools/patterns/adapters/database.js.map +1 -0
  734. package/dist/tools/patterns/adapters/hono.d.ts +3 -0
  735. package/dist/tools/patterns/adapters/hono.d.ts.map +1 -0
  736. package/dist/tools/patterns/adapters/hono.js +32 -0
  737. package/dist/tools/patterns/adapters/hono.js.map +1 -0
  738. package/dist/tools/patterns/adapters/kotlin.d.ts +3 -0
  739. package/dist/tools/patterns/adapters/kotlin.d.ts.map +1 -0
  740. package/dist/tools/patterns/adapters/kotlin.js +50 -0
  741. package/dist/tools/patterns/adapters/kotlin.js.map +1 -0
  742. package/dist/tools/patterns/adapters/nest.d.ts +3 -0
  743. package/dist/tools/patterns/adapters/nest.d.ts.map +1 -0
  744. package/dist/tools/patterns/adapters/nest.js +122 -0
  745. package/dist/tools/patterns/adapters/nest.js.map +1 -0
  746. package/dist/tools/patterns/adapters/nextjs.d.ts +4 -0
  747. package/dist/tools/patterns/adapters/nextjs.d.ts.map +1 -0
  748. package/dist/tools/patterns/adapters/nextjs.js +59 -0
  749. package/dist/tools/patterns/adapters/nextjs.js.map +1 -0
  750. package/dist/tools/patterns/adapters/php.d.ts +3 -0
  751. package/dist/tools/patterns/adapters/php.d.ts.map +1 -0
  752. package/dist/tools/patterns/adapters/php.js +157 -0
  753. package/dist/tools/patterns/adapters/php.js.map +1 -0
  754. package/dist/tools/patterns/adapters/python.d.ts +3 -0
  755. package/dist/tools/patterns/adapters/python.d.ts.map +1 -0
  756. package/dist/tools/patterns/adapters/python.js +72 -0
  757. package/dist/tools/patterns/adapters/python.js.map +1 -0
  758. package/dist/tools/patterns/adapters/react.d.ts +4 -0
  759. package/dist/tools/patterns/adapters/react.d.ts.map +1 -0
  760. package/dist/tools/patterns/adapters/react.js +345 -0
  761. package/dist/tools/patterns/adapters/react.js.map +1 -0
  762. package/dist/tools/patterns/catalog.d.ts +8 -0
  763. package/dist/tools/patterns/catalog.d.ts.map +1 -0
  764. package/dist/tools/patterns/catalog.js +30 -0
  765. package/dist/tools/patterns/catalog.js.map +1 -0
  766. package/dist/tools/patterns/execution.d.ts +38 -0
  767. package/dist/tools/patterns/execution.d.ts.map +1 -0
  768. package/dist/tools/patterns/execution.js +298 -0
  769. package/dist/tools/patterns/execution.js.map +1 -0
  770. package/dist/tools/patterns/types.d.ts +13 -0
  771. package/dist/tools/patterns/types.d.ts.map +1 -0
  772. package/dist/tools/patterns/types.js +2 -0
  773. package/dist/tools/patterns/types.js.map +1 -0
  774. package/dist/tools/pg-drift-compare.d.ts +3 -0
  775. package/dist/tools/pg-drift-compare.d.ts.map +1 -0
  776. package/dist/tools/pg-drift-compare.js +30 -0
  777. package/dist/tools/pg-drift-compare.js.map +1 -0
  778. package/dist/tools/pg-drift-schema.d.ts +5 -0
  779. package/dist/tools/pg-drift-schema.d.ts.map +1 -0
  780. package/dist/tools/pg-drift-schema.js +28 -0
  781. package/dist/tools/pg-drift-schema.js.map +1 -0
  782. package/dist/tools/pg-drift-types.d.ts +25 -0
  783. package/dist/tools/pg-drift-types.d.ts.map +1 -0
  784. package/dist/tools/pg-drift-types.js +2 -0
  785. package/dist/tools/pg-drift-types.js.map +1 -0
  786. package/dist/tools/pg-drift.d.ts +5 -0
  787. package/dist/tools/pg-drift.d.ts.map +1 -0
  788. package/dist/tools/pg-drift.js +30 -0
  789. package/dist/tools/pg-drift.js.map +1 -0
  790. package/dist/tools/pg-introspect-formatters.d.ts +7 -0
  791. package/dist/tools/pg-introspect-formatters.d.ts.map +1 -0
  792. package/dist/tools/pg-introspect-formatters.js +66 -0
  793. package/dist/tools/pg-introspect-formatters.js.map +1 -0
  794. package/dist/tools/pg-introspect-tools.d.ts +5 -146
  795. package/dist/tools/pg-introspect-tools.d.ts.map +1 -1
  796. package/dist/tools/pg-introspect-tools.js +3 -395
  797. package/dist/tools/pg-introspect-tools.js.map +1 -1
  798. package/dist/tools/pg-introspection.d.ts +90 -0
  799. package/dist/tools/pg-introspection.d.ts.map +1 -0
  800. package/dist/tools/pg-introspection.js +288 -0
  801. package/dist/tools/pg-introspection.js.map +1 -0
  802. package/dist/tools/php-active-record-tools.d.ts +22 -0
  803. package/dist/tools/php-active-record-tools.d.ts.map +1 -0
  804. package/dist/tools/php-active-record-tools.js +165 -0
  805. package/dist/tools/php-active-record-tools.js.map +1 -0
  806. package/dist/tools/php-event-tools.d.ts +21 -0
  807. package/dist/tools/php-event-tools.d.ts.map +1 -0
  808. package/dist/tools/php-event-tools.js +205 -0
  809. package/dist/tools/php-event-tools.js.map +1 -0
  810. package/dist/tools/php-god-model-tools.d.ts +34 -0
  811. package/dist/tools/php-god-model-tools.d.ts.map +1 -0
  812. package/dist/tools/php-god-model-tools.js +88 -0
  813. package/dist/tools/php-god-model-tools.js.map +1 -0
  814. package/dist/tools/php-import-utils.d.ts +10 -0
  815. package/dist/tools/php-import-utils.d.ts.map +1 -0
  816. package/dist/tools/php-import-utils.js +71 -0
  817. package/dist/tools/php-import-utils.js.map +1 -0
  818. package/dist/tools/php-namespace-tools.d.ts +10 -0
  819. package/dist/tools/php-namespace-tools.d.ts.map +1 -0
  820. package/dist/tools/php-namespace-tools.js +98 -0
  821. package/dist/tools/php-namespace-tools.js.map +1 -0
  822. package/dist/tools/php-nplus1-tools.d.ts +27 -0
  823. package/dist/tools/php-nplus1-tools.d.ts.map +1 -0
  824. package/dist/tools/php-nplus1-tools.js +191 -0
  825. package/dist/tools/php-nplus1-tools.js.map +1 -0
  826. package/dist/tools/php-project-audit-tools.d.ts +31 -0
  827. package/dist/tools/php-project-audit-tools.d.ts.map +1 -0
  828. package/dist/tools/php-project-audit-tools.js +173 -0
  829. package/dist/tools/php-project-audit-tools.js.map +1 -0
  830. package/dist/tools/php-security-tools.d.ts +24 -0
  831. package/dist/tools/php-security-tools.d.ts.map +1 -0
  832. package/dist/tools/php-security-tools.js +172 -0
  833. package/dist/tools/php-security-tools.js.map +1 -0
  834. package/dist/tools/php-service-tools.d.ts +25 -0
  835. package/dist/tools/php-service-tools.d.ts.map +1 -0
  836. package/dist/tools/php-service-tools.js +326 -0
  837. package/dist/tools/php-service-tools.js.map +1 -0
  838. package/dist/tools/php-tools.d.ts +21 -255
  839. package/dist/tools/php-tools.d.ts.map +1 -1
  840. package/dist/tools/php-tools.js +12 -1423
  841. package/dist/tools/php-tools.js.map +1 -1
  842. package/dist/tools/php-view-tools.d.ts +76 -0
  843. package/dist/tools/php-view-tools.d.ts.map +1 -0
  844. package/dist/tools/php-view-tools.js +413 -0
  845. package/dist/tools/php-view-tools.js.map +1 -0
  846. package/dist/tools/plan-turn/formatter.d.ts +3 -0
  847. package/dist/tools/plan-turn/formatter.d.ts.map +1 -0
  848. package/dist/tools/plan-turn/formatter.js +88 -0
  849. package/dist/tools/plan-turn/formatter.js.map +1 -0
  850. package/dist/tools/plan-turn/framework-context.d.ts +5 -0
  851. package/dist/tools/plan-turn/framework-context.d.ts.map +1 -0
  852. package/dist/tools/plan-turn/framework-context.js +68 -0
  853. package/dist/tools/plan-turn/framework-context.js.map +1 -0
  854. package/dist/tools/plan-turn/framework-data.d.ts +5 -0
  855. package/dist/tools/plan-turn/framework-data.d.ts.map +1 -0
  856. package/dist/tools/plan-turn/framework-data.js +48 -0
  857. package/dist/tools/plan-turn/framework-data.js.map +1 -0
  858. package/dist/tools/plan-turn/orchestrator.d.ts +4 -0
  859. package/dist/tools/plan-turn/orchestrator.d.ts.map +1 -0
  860. package/dist/tools/plan-turn/orchestrator.js +262 -0
  861. package/dist/tools/plan-turn/orchestrator.js.map +1 -0
  862. package/dist/tools/plan-turn/query-parser.d.ts +6 -0
  863. package/dist/tools/plan-turn/query-parser.d.ts.map +1 -0
  864. package/dist/tools/plan-turn/query-parser.js +60 -0
  865. package/dist/tools/plan-turn/query-parser.js.map +1 -0
  866. package/dist/tools/plan-turn/recommendations.d.ts +11 -0
  867. package/dist/tools/plan-turn/recommendations.d.ts.map +1 -0
  868. package/dist/tools/plan-turn/recommendations.js +93 -0
  869. package/dist/tools/plan-turn/recommendations.js.map +1 -0
  870. package/dist/tools/plan-turn/stale-index.d.ts +4 -0
  871. package/dist/tools/plan-turn/stale-index.d.ts.map +1 -0
  872. package/dist/tools/plan-turn/stale-index.js +17 -0
  873. package/dist/tools/plan-turn/stale-index.js.map +1 -0
  874. package/dist/tools/plan-turn/types.d.ts +61 -0
  875. package/dist/tools/plan-turn/types.d.ts.map +1 -0
  876. package/dist/tools/plan-turn/types.js +2 -0
  877. package/dist/tools/plan-turn/types.js.map +1 -0
  878. package/dist/tools/plan-turn-tools.d.ts +8 -111
  879. package/dist/tools/plan-turn-tools.d.ts.map +1 -1
  880. package/dist/tools/plan-turn-tools.js +6 -696
  881. package/dist/tools/plan-turn-tools.js.map +1 -1
  882. package/dist/tools/project-profile-express.d.ts +3 -0
  883. package/dist/tools/project-profile-express.d.ts.map +1 -0
  884. package/dist/tools/project-profile-express.js +46 -0
  885. package/dist/tools/project-profile-express.js.map +1 -0
  886. package/dist/tools/project-profile-extractors.d.ts +9 -0
  887. package/dist/tools/project-profile-extractors.d.ts.map +1 -0
  888. package/dist/tools/project-profile-extractors.js +312 -0
  889. package/dist/tools/project-profile-extractors.js.map +1 -0
  890. package/dist/tools/project-profile-fs.d.ts +3 -0
  891. package/dist/tools/project-profile-fs.d.ts.map +1 -0
  892. package/dist/tools/project-profile-fs.js +19 -0
  893. package/dist/tools/project-profile-fs.js.map +1 -0
  894. package/dist/tools/project-profile-hono.d.ts +13 -0
  895. package/dist/tools/project-profile-hono.d.ts.map +1 -0
  896. package/dist/tools/project-profile-hono.js +110 -0
  897. package/dist/tools/project-profile-hono.js.map +1 -0
  898. package/dist/tools/project-profile-imports.d.ts +6 -0
  899. package/dist/tools/project-profile-imports.d.ts.map +1 -0
  900. package/dist/tools/project-profile-imports.js +95 -0
  901. package/dist/tools/project-profile-imports.js.map +1 -0
  902. package/dist/tools/project-profile-nest.d.ts +8 -0
  903. package/dist/tools/project-profile-nest.d.ts.map +1 -0
  904. package/dist/tools/project-profile-nest.js +352 -0
  905. package/dist/tools/project-profile-nest.js.map +1 -0
  906. package/dist/tools/project-profile-next.d.ts +5 -0
  907. package/dist/tools/project-profile-next.d.ts.map +1 -0
  908. package/dist/tools/project-profile-next.js +92 -0
  909. package/dist/tools/project-profile-next.js.map +1 -0
  910. package/dist/tools/project-profile-persistence.d.ts +3 -0
  911. package/dist/tools/project-profile-persistence.d.ts.map +1 -0
  912. package/dist/tools/project-profile-persistence.js +19 -0
  913. package/dist/tools/project-profile-persistence.js.map +1 -0
  914. package/dist/tools/project-profile-php.d.ts +8 -0
  915. package/dist/tools/project-profile-php.d.ts.map +1 -0
  916. package/dist/tools/project-profile-php.js +76 -0
  917. package/dist/tools/project-profile-php.js.map +1 -0
  918. package/dist/tools/project-profile-python.d.ts +5 -0
  919. package/dist/tools/project-profile-python.d.ts.map +1 -0
  920. package/dist/tools/project-profile-python.js +51 -0
  921. package/dist/tools/project-profile-python.js.map +1 -0
  922. package/dist/tools/project-profile-react.d.ts +6 -0
  923. package/dist/tools/project-profile-react.d.ts.map +1 -0
  924. package/dist/tools/project-profile-react.js +106 -0
  925. package/dist/tools/project-profile-react.js.map +1 -0
  926. package/dist/tools/project-profile-stack.d.ts +3 -0
  927. package/dist/tools/project-profile-stack.d.ts.map +1 -0
  928. package/dist/tools/project-profile-stack.js +354 -0
  929. package/dist/tools/project-profile-stack.js.map +1 -0
  930. package/dist/tools/project-profile-summary.d.ts +30 -0
  931. package/dist/tools/project-profile-summary.d.ts.map +1 -0
  932. package/dist/tools/project-profile-summary.js +112 -0
  933. package/dist/tools/project-profile-summary.js.map +1 -0
  934. package/dist/tools/project-profile-types.d.ts +315 -0
  935. package/dist/tools/project-profile-types.d.ts.map +1 -0
  936. package/dist/tools/project-profile-types.js +2 -0
  937. package/dist/tools/project-profile-types.js.map +1 -0
  938. package/dist/tools/project-tools.d.ts +17 -383
  939. package/dist/tools/project-tools.d.ts.map +1 -1
  940. package/dist/tools/project-tools.js +35 -1621
  941. package/dist/tools/project-tools.js.map +1 -1
  942. package/dist/tools/python-audit/aggregate.d.ts +3 -0
  943. package/dist/tools/python-audit/aggregate.d.ts.map +1 -0
  944. package/dist/tools/python-audit/aggregate.js +103 -0
  945. package/dist/tools/python-audit/aggregate.js.map +1 -0
  946. package/dist/tools/python-audit/checks/anti-patterns.d.ts +6 -0
  947. package/dist/tools/python-audit/checks/anti-patterns.d.ts.map +1 -0
  948. package/dist/tools/python-audit/checks/anti-patterns.js +14 -0
  949. package/dist/tools/python-audit/checks/anti-patterns.js.map +1 -0
  950. package/dist/tools/python-audit/checks/celery.d.ts +2 -0
  951. package/dist/tools/python-audit/checks/celery.d.ts.map +1 -0
  952. package/dist/tools/python-audit/checks/celery.js +5 -0
  953. package/dist/tools/python-audit/checks/celery.js.map +1 -0
  954. package/dist/tools/python-audit/checks/circular-imports.d.ts +2 -0
  955. package/dist/tools/python-audit/checks/circular-imports.d.ts.map +1 -0
  956. package/dist/tools/python-audit/checks/circular-imports.js +5 -0
  957. package/dist/tools/python-audit/checks/circular-imports.js.map +1 -0
  958. package/dist/tools/python-audit/checks/dead-code.d.ts +2 -0
  959. package/dist/tools/python-audit/checks/dead-code.d.ts.map +1 -0
  960. package/dist/tools/python-audit/checks/dead-code.js +5 -0
  961. package/dist/tools/python-audit/checks/dead-code.js.map +1 -0
  962. package/dist/tools/python-audit/checks/dependencies.d.ts +2 -0
  963. package/dist/tools/python-audit/checks/dependencies.d.ts.map +1 -0
  964. package/dist/tools/python-audit/checks/dependencies.js +5 -0
  965. package/dist/tools/python-audit/checks/dependencies.js.map +1 -0
  966. package/dist/tools/python-audit/checks/django-settings.d.ts +2 -0
  967. package/dist/tools/python-audit/checks/django-settings.d.ts.map +1 -0
  968. package/dist/tools/python-audit/checks/django-settings.js +5 -0
  969. package/dist/tools/python-audit/checks/django-settings.js.map +1 -0
  970. package/dist/tools/python-audit/checks/framework-wiring.d.ts +2 -0
  971. package/dist/tools/python-audit/checks/framework-wiring.d.ts.map +1 -0
  972. package/dist/tools/python-audit/checks/framework-wiring.js +5 -0
  973. package/dist/tools/python-audit/checks/framework-wiring.js.map +1 -0
  974. package/dist/tools/python-audit/checks/pytest-fixtures.d.ts +2 -0
  975. package/dist/tools/python-audit/checks/pytest-fixtures.d.ts.map +1 -0
  976. package/dist/tools/python-audit/checks/pytest-fixtures.js +5 -0
  977. package/dist/tools/python-audit/checks/pytest-fixtures.js.map +1 -0
  978. package/dist/tools/python-audit/runner.d.ts +5 -0
  979. package/dist/tools/python-audit/runner.d.ts.map +1 -0
  980. package/dist/tools/python-audit/runner.js +18 -0
  981. package/dist/tools/python-audit/runner.js.map +1 -0
  982. package/dist/tools/python-audit/types.d.ts +43 -0
  983. package/dist/tools/python-audit/types.d.ts.map +1 -0
  984. package/dist/tools/python-audit/types.js +2 -0
  985. package/dist/tools/python-audit/types.js.map +1 -0
  986. package/dist/tools/python-audit.d.ts +3 -39
  987. package/dist/tools/python-audit.d.ts.map +1 -1
  988. package/dist/tools/python-audit.js +34 -233
  989. package/dist/tools/python-audit.js.map +1 -1
  990. package/dist/tools/react-compiler-tools.d.ts +37 -0
  991. package/dist/tools/react-compiler-tools.d.ts.map +1 -0
  992. package/dist/tools/react-compiler-tools.js +104 -0
  993. package/dist/tools/react-compiler-tools.js.map +1 -0
  994. package/dist/tools/react-component-tree-tools.d.ts +58 -0
  995. package/dist/tools/react-component-tree-tools.d.ts.map +1 -0
  996. package/dist/tools/react-component-tree-tools.js +292 -0
  997. package/dist/tools/react-component-tree-tools.js.map +1 -0
  998. package/dist/tools/react-context-tools.d.ts +41 -0
  999. package/dist/tools/react-context-tools.d.ts.map +1 -0
  1000. package/dist/tools/react-context-tools.js +76 -0
  1001. package/dist/tools/react-context-tools.js.map +1 -0
  1002. package/dist/tools/react-hooks-tools.d.ts +58 -0
  1003. package/dist/tools/react-hooks-tools.d.ts.map +1 -0
  1004. package/dist/tools/react-hooks-tools.js +144 -0
  1005. package/dist/tools/react-hooks-tools.js.map +1 -0
  1006. package/dist/tools/react-quickstart-tools.d.ts +59 -0
  1007. package/dist/tools/react-quickstart-tools.d.ts.map +1 -0
  1008. package/dist/tools/react-quickstart-tools.js +164 -0
  1009. package/dist/tools/react-quickstart-tools.js.map +1 -0
  1010. package/dist/tools/react-render-tools.d.ts +75 -0
  1011. package/dist/tools/react-render-tools.d.ts.map +1 -0
  1012. package/dist/tools/react-render-tools.js +234 -0
  1013. package/dist/tools/react-render-tools.js.map +1 -0
  1014. package/dist/tools/react-shared-tools.d.ts +5 -0
  1015. package/dist/tools/react-shared-tools.d.ts.map +1 -0
  1016. package/dist/tools/react-shared-tools.js +12 -0
  1017. package/dist/tools/react-shared-tools.js.map +1 -0
  1018. package/dist/tools/react-suspense-tools.d.ts +29 -0
  1019. package/dist/tools/react-suspense-tools.d.ts.map +1 -0
  1020. package/dist/tools/react-suspense-tools.js +269 -0
  1021. package/dist/tools/react-suspense-tools.js.map +1 -0
  1022. package/dist/tools/react-tools.d.ts +19 -340
  1023. package/dist/tools/react-tools.d.ts.map +1 -1
  1024. package/dist/tools/react-tools.js +10 -1263
  1025. package/dist/tools/react-tools.js.map +1 -1
  1026. package/dist/tools/review-diff/check-runner.d.ts +5 -0
  1027. package/dist/tools/review-diff/check-runner.d.ts.map +1 -0
  1028. package/dist/tools/review-diff/check-runner.js +26 -0
  1029. package/dist/tools/review-diff/check-runner.js.map +1 -0
  1030. package/dist/tools/review-diff/checks/astro-hydration.d.ts +8 -0
  1031. package/dist/tools/review-diff/checks/astro-hydration.d.ts.map +1 -0
  1032. package/dist/tools/review-diff/checks/astro-hydration.js +54 -0
  1033. package/dist/tools/review-diff/checks/astro-hydration.js.map +1 -0
  1034. package/dist/tools/review-diff/checks/blast-radius.d.ts +7 -0
  1035. package/dist/tools/review-diff/checks/blast-radius.d.ts.map +1 -0
  1036. package/dist/tools/review-diff/checks/blast-radius.js +39 -0
  1037. package/dist/tools/review-diff/checks/blast-radius.js.map +1 -0
  1038. package/dist/tools/review-diff/checks/breaking.d.ts +13 -0
  1039. package/dist/tools/review-diff/checks/breaking.d.ts.map +1 -0
  1040. package/dist/tools/review-diff/checks/breaking.js +115 -0
  1041. package/dist/tools/review-diff/checks/breaking.js.map +1 -0
  1042. package/dist/tools/review-diff/checks/bug-patterns.d.ts +8 -0
  1043. package/dist/tools/review-diff/checks/bug-patterns.d.ts.map +1 -0
  1044. package/dist/tools/review-diff/checks/bug-patterns.js +130 -0
  1045. package/dist/tools/review-diff/checks/bug-patterns.js.map +1 -0
  1046. package/dist/tools/review-diff/checks/complexity.d.ts +8 -0
  1047. package/dist/tools/review-diff/checks/complexity.d.ts.map +1 -0
  1048. package/dist/tools/review-diff/checks/complexity.js +41 -0
  1049. package/dist/tools/review-diff/checks/complexity.js.map +1 -0
  1050. package/dist/tools/review-diff/checks/coupling.d.ts +7 -0
  1051. package/dist/tools/review-diff/checks/coupling.d.ts.map +1 -0
  1052. package/dist/tools/review-diff/checks/coupling.js +52 -0
  1053. package/dist/tools/review-diff/checks/coupling.js.map +1 -0
  1054. package/dist/tools/review-diff/checks/dead-code.d.ts +7 -0
  1055. package/dist/tools/review-diff/checks/dead-code.d.ts.map +1 -0
  1056. package/dist/tools/review-diff/checks/dead-code.js +39 -0
  1057. package/dist/tools/review-diff/checks/dead-code.js.map +1 -0
  1058. package/dist/tools/review-diff/checks/hotspots.d.ts +8 -0
  1059. package/dist/tools/review-diff/checks/hotspots.d.ts.map +1 -0
  1060. package/dist/tools/review-diff/checks/hotspots.js +39 -0
  1061. package/dist/tools/review-diff/checks/hotspots.js.map +1 -0
  1062. package/dist/tools/review-diff/checks/secrets.d.ts +7 -0
  1063. package/dist/tools/review-diff/checks/secrets.d.ts.map +1 -0
  1064. package/dist/tools/review-diff/checks/secrets.js +38 -0
  1065. package/dist/tools/review-diff/checks/secrets.js.map +1 -0
  1066. package/dist/tools/review-diff/checks/test-gaps.d.ts +16 -0
  1067. package/dist/tools/review-diff/checks/test-gaps.d.ts.map +1 -0
  1068. package/dist/tools/review-diff/checks/test-gaps.js +77 -0
  1069. package/dist/tools/review-diff/checks/test-gaps.js.map +1 -0
  1070. package/dist/tools/review-diff/constants.d.ts +6 -0
  1071. package/dist/tools/review-diff/constants.d.ts.map +1 -0
  1072. package/dist/tools/review-diff/constants.js +16 -0
  1073. package/dist/tools/review-diff/constants.js.map +1 -0
  1074. package/dist/tools/review-diff/file-pattern.d.ts +2 -0
  1075. package/dist/tools/review-diff/file-pattern.d.ts.map +1 -0
  1076. package/dist/tools/review-diff/file-pattern.js +9 -0
  1077. package/dist/tools/review-diff/file-pattern.js.map +1 -0
  1078. package/dist/tools/review-diff/orchestrator.d.ts +3 -0
  1079. package/dist/tools/review-diff/orchestrator.d.ts.map +1 -0
  1080. package/dist/tools/review-diff/orchestrator.js +173 -0
  1081. package/dist/tools/review-diff/orchestrator.js.map +1 -0
  1082. package/dist/tools/review-diff/scoring.d.ts +31 -0
  1083. package/dist/tools/review-diff/scoring.d.ts.map +1 -0
  1084. package/dist/tools/review-diff/scoring.js +82 -0
  1085. package/dist/tools/review-diff/scoring.js.map +1 -0
  1086. package/dist/tools/review-diff/timeout.d.ts +5 -0
  1087. package/dist/tools/review-diff/timeout.d.ts.map +1 -0
  1088. package/dist/tools/review-diff/timeout.js +14 -0
  1089. package/dist/tools/review-diff/timeout.js.map +1 -0
  1090. package/dist/tools/review-diff/types.d.ts +56 -0
  1091. package/dist/tools/review-diff/types.d.ts.map +1 -0
  1092. package/dist/tools/review-diff/types.js +2 -0
  1093. package/dist/tools/review-diff/types.js.map +1 -0
  1094. package/dist/tools/review-diff-tools.d.ts +19 -147
  1095. package/dist/tools/review-diff-tools.d.ts.map +1 -1
  1096. package/dist/tools/review-diff-tools.js +18 -941
  1097. package/dist/tools/review-diff-tools.js.map +1 -1
  1098. package/dist/tools/route-shared.d.ts +6 -0
  1099. package/dist/tools/route-shared.d.ts.map +1 -0
  1100. package/dist/tools/route-shared.js +37 -0
  1101. package/dist/tools/route-shared.js.map +1 -0
  1102. package/dist/tools/route-tools.d.ts +1 -7
  1103. package/dist/tools/route-tools.d.ts.map +1 -1
  1104. package/dist/tools/route-tools.js +2 -22
  1105. package/dist/tools/route-tools.js.map +1 -1
  1106. package/dist/tools/search-tools/constants.d.ts +33 -0
  1107. package/dist/tools/search-tools/constants.d.ts.map +1 -0
  1108. package/dist/tools/search-tools/constants.js +54 -0
  1109. package/dist/tools/search-tools/constants.js.map +1 -0
  1110. package/dist/tools/search-tools/ripgrep.d.ts +13 -0
  1111. package/dist/tools/search-tools/ripgrep.d.ts.map +1 -0
  1112. package/dist/tools/search-tools/ripgrep.js +138 -0
  1113. package/dist/tools/search-tools/ripgrep.js.map +1 -0
  1114. package/dist/tools/search-tools/semantic-search.d.ts +9 -0
  1115. package/dist/tools/search-tools/semantic-search.d.ts.map +1 -0
  1116. package/dist/tools/search-tools/semantic-search.js +19 -0
  1117. package/dist/tools/search-tools/semantic-search.js.map +1 -0
  1118. package/dist/tools/search-tools/symbol-search.d.ts +4 -0
  1119. package/dist/tools/search-tools/symbol-search.d.ts.map +1 -0
  1120. package/dist/tools/search-tools/symbol-search.js +146 -0
  1121. package/dist/tools/search-tools/symbol-search.js.map +1 -0
  1122. package/dist/tools/search-tools/text-search.d.ts +10 -0
  1123. package/dist/tools/search-tools/text-search.d.ts.map +1 -0
  1124. package/dist/tools/search-tools/text-search.js +260 -0
  1125. package/dist/tools/search-tools/text-search.js.map +1 -0
  1126. package/dist/tools/search-tools/types.d.ts +28 -0
  1127. package/dist/tools/search-tools/types.d.ts.map +1 -0
  1128. package/dist/tools/search-tools/types.js +2 -0
  1129. package/dist/tools/search-tools/types.js.map +1 -0
  1130. package/dist/tools/search-tools/zero-hit.d.ts +3 -0
  1131. package/dist/tools/search-tools/zero-hit.d.ts.map +1 -0
  1132. package/dist/tools/search-tools/zero-hit.js +92 -0
  1133. package/dist/tools/search-tools/zero-hit.js.map +1 -0
  1134. package/dist/tools/search-tools.d.ts +5 -64
  1135. package/dist/tools/search-tools.d.ts.map +1 -1
  1136. package/dist/tools/search-tools.js +4 -770
  1137. package/dist/tools/search-tools.js.map +1 -1
  1138. package/dist/tools/secret-detectors.d.ts +12 -0
  1139. package/dist/tools/secret-detectors.d.ts.map +1 -0
  1140. package/dist/tools/secret-detectors.js +86 -0
  1141. package/dist/tools/secret-detectors.js.map +1 -0
  1142. package/dist/tools/secret-file-scanner.d.ts +7 -0
  1143. package/dist/tools/secret-file-scanner.d.ts.map +1 -0
  1144. package/dist/tools/secret-file-scanner.js +52 -0
  1145. package/dist/tools/secret-file-scanner.js.map +1 -0
  1146. package/dist/tools/secret-scan-cache.d.ts +6 -0
  1147. package/dist/tools/secret-scan-cache.d.ts.map +1 -0
  1148. package/dist/tools/secret-scan-cache.js +14 -0
  1149. package/dist/tools/secret-scan-cache.js.map +1 -0
  1150. package/dist/tools/secret-scan-shared.d.ts +5 -0
  1151. package/dist/tools/secret-scan-shared.d.ts.map +1 -0
  1152. package/dist/tools/secret-scan-shared.js +4 -0
  1153. package/dist/tools/secret-scan-shared.js.map +1 -0
  1154. package/dist/tools/secret-scan-types.d.ts +21 -0
  1155. package/dist/tools/secret-scan-types.d.ts.map +1 -0
  1156. package/dist/tools/secret-scan-types.js +2 -0
  1157. package/dist/tools/secret-scan-types.js.map +1 -0
  1158. package/dist/tools/secret-tools.d.ts +3 -75
  1159. package/dist/tools/secret-tools.d.ts.map +1 -1
  1160. package/dist/tools/secret-tools.js +4 -316
  1161. package/dist/tools/secret-tools.js.map +1 -1
  1162. package/dist/tools/sql-audit-tools.d.ts +42 -0
  1163. package/dist/tools/sql-audit-tools.d.ts.map +1 -0
  1164. package/dist/tools/sql-audit-tools.js +130 -0
  1165. package/dist/tools/sql-audit-tools.js.map +1 -0
  1166. package/dist/tools/sql-column-tools.d.ts +28 -0
  1167. package/dist/tools/sql-column-tools.d.ts.map +1 -0
  1168. package/dist/tools/sql-column-tools.js +58 -0
  1169. package/dist/tools/sql-column-tools.js.map +1 -0
  1170. package/dist/tools/sql-complexity-tools.d.ts +22 -0
  1171. package/dist/tools/sql-complexity-tools.d.ts.map +1 -0
  1172. package/dist/tools/sql-complexity-tools.js +60 -0
  1173. package/dist/tools/sql-complexity-tools.js.map +1 -0
  1174. package/dist/tools/sql-dml-safety-tools.d.ts +26 -0
  1175. package/dist/tools/sql-dml-safety-tools.d.ts.map +1 -0
  1176. package/dist/tools/sql-dml-safety-tools.js +104 -0
  1177. package/dist/tools/sql-dml-safety-tools.js.map +1 -0
  1178. package/dist/tools/sql-drift-tools.d.ts +39 -0
  1179. package/dist/tools/sql-drift-tools.d.ts.map +1 -0
  1180. package/dist/tools/sql-drift-tools.js +238 -0
  1181. package/dist/tools/sql-drift-tools.js.map +1 -0
  1182. package/dist/tools/sql-lint-schema-tools.d.ts +28 -0
  1183. package/dist/tools/sql-lint-schema-tools.d.ts.map +1 -0
  1184. package/dist/tools/sql-lint-schema-tools.js +96 -0
  1185. package/dist/tools/sql-lint-schema-tools.js.map +1 -0
  1186. package/dist/tools/sql-migration-diff-tools.d.ts +24 -0
  1187. package/dist/tools/sql-migration-diff-tools.d.ts.map +1 -0
  1188. package/dist/tools/sql-migration-diff-tools.js +120 -0
  1189. package/dist/tools/sql-migration-diff-tools.js.map +1 -0
  1190. package/dist/tools/sql-orphan-table-tools.d.ts +20 -0
  1191. package/dist/tools/sql-orphan-table-tools.d.ts.map +1 -0
  1192. package/dist/tools/sql-orphan-table-tools.js +70 -0
  1193. package/dist/tools/sql-orphan-table-tools.js.map +1 -0
  1194. package/dist/tools/sql-query-tools.d.ts +32 -0
  1195. package/dist/tools/sql-query-tools.d.ts.map +1 -0
  1196. package/dist/tools/sql-query-tools.js +130 -0
  1197. package/dist/tools/sql-query-tools.js.map +1 -0
  1198. package/dist/tools/sql-schema-tools.d.ts +47 -0
  1199. package/dist/tools/sql-schema-tools.d.ts.map +1 -0
  1200. package/dist/tools/sql-schema-tools.js +202 -0
  1201. package/dist/tools/sql-schema-tools.js.map +1 -0
  1202. package/dist/tools/sql-shared-tools.d.ts +6 -0
  1203. package/dist/tools/sql-shared-tools.d.ts.map +1 -0
  1204. package/dist/tools/sql-shared-tools.js +59 -0
  1205. package/dist/tools/sql-shared-tools.js.map +1 -0
  1206. package/dist/tools/sql-tools.d.ts +25 -296
  1207. package/dist/tools/sql-tools.d.ts.map +1 -1
  1208. package/dist/tools/sql-tools.js +15 -1232
  1209. package/dist/tools/sql-tools.js.map +1 -1
  1210. package/dist/tools/status-tools.js +1 -1
  1211. package/dist/tools/status-tools.js.map +1 -1
  1212. package/dist/tools/workspace-tools.d.ts +1 -1
  1213. package/dist/tools/yii3-migration-categories-application.d.ts +4 -0
  1214. package/dist/tools/yii3-migration-categories-application.d.ts.map +1 -0
  1215. package/dist/tools/yii3-migration-categories-application.js +56 -0
  1216. package/dist/tools/yii3-migration-categories-application.js.map +1 -0
  1217. package/dist/tools/yii3-migration-categories-infrastructure.d.ts +4 -0
  1218. package/dist/tools/yii3-migration-categories-infrastructure.d.ts.map +1 -0
  1219. package/dist/tools/yii3-migration-categories-infrastructure.js +67 -0
  1220. package/dist/tools/yii3-migration-categories-infrastructure.js.map +1 -0
  1221. package/dist/tools/yii3-migration-categories-model-view.d.ts +4 -0
  1222. package/dist/tools/yii3-migration-categories-model-view.d.ts.map +1 -0
  1223. package/dist/tools/yii3-migration-categories-model-view.js +59 -0
  1224. package/dist/tools/yii3-migration-categories-model-view.js.map +1 -0
  1225. package/dist/tools/yii3-migration-categories-runtime.d.ts +4 -0
  1226. package/dist/tools/yii3-migration-categories-runtime.d.ts.map +1 -0
  1227. package/dist/tools/yii3-migration-categories-runtime.js +49 -0
  1228. package/dist/tools/yii3-migration-categories-runtime.js.map +1 -0
  1229. package/dist/tools/yii3-migration-categories.d.ts +5 -0
  1230. package/dist/tools/yii3-migration-categories.d.ts.map +1 -0
  1231. package/dist/tools/yii3-migration-categories.js +18 -0
  1232. package/dist/tools/yii3-migration-categories.js.map +1 -0
  1233. package/dist/tools/yii3-migration-report.d.ts +4 -0
  1234. package/dist/tools/yii3-migration-report.d.ts.map +1 -0
  1235. package/dist/tools/yii3-migration-report.js +88 -0
  1236. package/dist/tools/yii3-migration-report.js.map +1 -0
  1237. package/dist/tools/yii3-migration-scanner.d.ts +28 -0
  1238. package/dist/tools/yii3-migration-scanner.d.ts.map +1 -0
  1239. package/dist/tools/yii3-migration-scanner.js +87 -0
  1240. package/dist/tools/yii3-migration-scanner.js.map +1 -0
  1241. package/dist/tools/yii3-migration-tools.d.ts +4 -73
  1242. package/dist/tools/yii3-migration-tools.d.ts.map +1 -1
  1243. package/dist/tools/yii3-migration-tools.js +5 -433
  1244. package/dist/tools/yii3-migration-tools.js.map +1 -1
  1245. package/dist/tools/yii3-migration-types.d.ts +50 -0
  1246. package/dist/tools/yii3-migration-types.d.ts.map +1 -0
  1247. package/dist/tools/yii3-migration-types.js +3 -0
  1248. package/dist/tools/yii3-migration-types.js.map +1 -0
  1249. package/dist/utils/git-validation.d.ts +24 -0
  1250. package/dist/utils/git-validation.d.ts.map +1 -1
  1251. package/dist/utils/git-validation.js +30 -0
  1252. package/dist/utils/git-validation.js.map +1 -1
  1253. package/dist/utils/source-stripper/code-handler.d.ts +3 -0
  1254. package/dist/utils/source-stripper/code-handler.d.ts.map +1 -0
  1255. package/dist/utils/source-stripper/code-handler.js +79 -0
  1256. package/dist/utils/source-stripper/code-handler.js.map +1 -0
  1257. package/dist/utils/source-stripper/comment-handler.d.ts +4 -0
  1258. package/dist/utils/source-stripper/comment-handler.d.ts.map +1 -0
  1259. package/dist/utils/source-stripper/comment-handler.js +24 -0
  1260. package/dist/utils/source-stripper/comment-handler.js.map +1 -0
  1261. package/dist/utils/source-stripper/machine.d.ts +2 -0
  1262. package/dist/utils/source-stripper/machine.d.ts.map +1 -0
  1263. package/dist/utils/source-stripper/machine.js +34 -0
  1264. package/dist/utils/source-stripper/machine.js.map +1 -0
  1265. package/dist/utils/source-stripper/regex-handler.d.ts +3 -0
  1266. package/dist/utils/source-stripper/regex-handler.d.ts.map +1 -0
  1267. package/dist/utils/source-stripper/regex-handler.js +44 -0
  1268. package/dist/utils/source-stripper/regex-handler.js.map +1 -0
  1269. package/dist/utils/source-stripper/state.d.ts +4 -0
  1270. package/dist/utils/source-stripper/state.d.ts.map +1 -0
  1271. package/dist/utils/source-stripper/state.js +20 -0
  1272. package/dist/utils/source-stripper/state.js.map +1 -0
  1273. package/dist/utils/source-stripper/string-handler.d.ts +3 -0
  1274. package/dist/utils/source-stripper/string-handler.d.ts.map +1 -0
  1275. package/dist/utils/source-stripper/string-handler.js +19 -0
  1276. package/dist/utils/source-stripper/string-handler.js.map +1 -0
  1277. package/dist/utils/source-stripper/template-handler.d.ts +4 -0
  1278. package/dist/utils/source-stripper/template-handler.d.ts.map +1 -0
  1279. package/dist/utils/source-stripper/template-handler.js +40 -0
  1280. package/dist/utils/source-stripper/template-handler.js.map +1 -0
  1281. package/dist/utils/source-stripper/types.d.ts +17 -0
  1282. package/dist/utils/source-stripper/types.d.ts.map +1 -0
  1283. package/dist/utils/source-stripper/types.js +4 -0
  1284. package/dist/utils/source-stripper/types.js.map +1 -0
  1285. package/dist/utils/source-stripper.d.ts +0 -21
  1286. package/dist/utils/source-stripper.d.ts.map +1 -1
  1287. package/dist/utils/source-stripper.js +6 -234
  1288. package/dist/utils/source-stripper.js.map +1 -1
  1289. package/dist/utils/walk/errors.d.ts +4 -0
  1290. package/dist/utils/walk/errors.d.ts.map +1 -0
  1291. package/dist/utils/walk/errors.js +18 -0
  1292. package/dist/utils/walk/errors.js.map +1 -0
  1293. package/dist/utils/walk/filters.d.ts +11 -0
  1294. package/dist/utils/walk/filters.d.ts.map +1 -0
  1295. package/dist/utils/walk/filters.js +53 -0
  1296. package/dist/utils/walk/filters.js.map +1 -0
  1297. package/dist/utils/walk/limits.d.ts +10 -0
  1298. package/dist/utils/walk/limits.d.ts.map +1 -0
  1299. package/dist/utils/walk/limits.js +22 -0
  1300. package/dist/utils/walk/limits.js.map +1 -0
  1301. package/dist/utils/walk/traversal.d.ts +9 -0
  1302. package/dist/utils/walk/traversal.d.ts.map +1 -0
  1303. package/dist/utils/walk/traversal.js +38 -0
  1304. package/dist/utils/walk/traversal.js.map +1 -0
  1305. package/dist/utils/walk/types.d.ts +18 -0
  1306. package/dist/utils/walk/types.d.ts.map +1 -0
  1307. package/dist/utils/walk/types.js +2 -0
  1308. package/dist/utils/walk/types.js.map +1 -0
  1309. package/dist/utils/walk.d.ts +4 -65
  1310. package/dist/utils/walk.d.ts.map +1 -1
  1311. package/dist/utils/walk.js +23 -151
  1312. package/dist/utils/walk.js.map +1 -1
  1313. package/package.json +6 -5
@@ -1,1235 +1,18 @@
1
1
  /**
2
- * SQL analysis tools — analyze_schema and trace_query.
3
- * Hidden/discoverable: not in CORE_TOOL_NAMES.
4
- */
5
- import { getCodeIndex } from "./index-tools.js";
6
- import { searchText } from "./search-tools.js";
7
- /**
8
- * Infer SQL dialect from schema source fingerprints.
9
- *
10
- * Signals (in priority order):
11
- * - mysql: ENGINE=InnoDB / ENGINE=MyISAM / AUTO_INCREMENT / utf8mb4 / backtick idents
12
- * - postgres: SERIAL / BIGSERIAL / JSONB / RETURNING / USING gist / CITEXT
13
- * - sqlite: AUTOINCREMENT (one word) / WITHOUT ROWID / sqlite_master
14
- * - mssql: NVARCHAR / IDENTITY(\d, \d) / GO\n batch separator / [bracket] idents
15
- *
16
- * Returns "unknown" if no signal fires (e.g. dialect-neutral CREATE TABLE).
17
- * Exported for unit-test independence and for callers that want a quick check
18
- * without going through {@link analyzeSchema}.
19
- */
20
- export function detectSqlDialect(source) {
21
- if (!source)
22
- return "unknown";
23
- // MySQL signals are the most specific — score first.
24
- if (/\bENGINE\s*=\s*(?:InnoDB|MyISAM|MEMORY|Aria)\b/i.test(source) ||
25
- /\bAUTO_INCREMENT\b/i.test(source) ||
26
- /\butf8mb4\b/i.test(source))
27
- return "mysql";
28
- // Postgres: SERIAL / JSONB / RETURNING are unmistakable.
29
- if (/\b(?:BIG)?SERIAL\b/i.test(source) ||
30
- /\bJSONB\b/i.test(source) ||
31
- /\bCITEXT\b/i.test(source) ||
32
- /\bRETURNING\b/i.test(source))
33
- return "postgres";
34
- // SQLite: AUTOINCREMENT (no underscore) / WITHOUT ROWID.
35
- if (/\bAUTOINCREMENT\b/i.test(source) ||
36
- /\bWITHOUT\s+ROWID\b/i.test(source))
37
- return "sqlite";
38
- // MS SQL Server: NVARCHAR / IDENTITY(seed, step) / square-bracket idents.
39
- if (/\bNVARCHAR\b/i.test(source) ||
40
- /\bIDENTITY\s*\(\s*\d+\s*,\s*\d+\s*\)/i.test(source))
41
- return "mssql";
42
- return "unknown";
43
- }
44
- // REFERENCES clause — supports unquoted, "double-quoted" (Postgres),
45
- // `backtick` (MySQL), and [bracket] (SQL Server) identifiers. Schema-qualified
46
- // names ("schema.table") are accepted; we keep only the table portion.
47
- // Capture layout:
48
- // 1: schema "..", 2: schema `..`, 3: schema [..], 4: schema unquoted
49
- // 5: table "..", 6: table `..`, 7: table [..], 8: table unquoted
50
- // 9: column "..",10: column `..`,11: column [..],12: column unquoted
51
- const FK_RE = /REFERENCES\s+(?:(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|(\w+))\s*\.\s*)?(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|(\w+))\s*\(\s*(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|(\w+))\s*\)/gi;
52
- export async function analyzeSchema(repo, options) {
53
- const index = await getCodeIndex(repo);
54
- if (!index) {
55
- throw new Error(`Repository "${repo}" not found. Run index_folder first.`);
56
- }
57
- const includeColumns = options?.include_columns ?? true;
58
- const filePattern = options?.file_pattern;
59
- // Collect tables and views from index
60
- const tables = [];
61
- const views = [];
62
- const warnings = [];
63
- const tableSymbols = index.symbols.filter((s) => (s.kind === "table" || s.kind === "view") &&
64
- (!filePattern || s.file.includes(filePattern)));
65
- if (tableSymbols.length === 0) {
66
- warnings.push("No SQL files indexed in this repository.");
67
- return { tables, views, relationships: [], warnings, detected_dialect: "unknown" };
68
- }
69
- // Check for duplicate table names
70
- const nameCounts = new Map();
71
- for (const sym of tableSymbols) {
72
- nameCounts.set(sym.name, (nameCounts.get(sym.name) ?? 0) + 1);
73
- }
74
- for (const [name, count] of nameCounts) {
75
- if (count > 1) {
76
- warnings.push(`Duplicate table/view name "${name}" found in ${count} files.`);
77
- }
78
- }
79
- for (const sym of tableSymbols) {
80
- if (sym.kind === "view") {
81
- views.push({ name: sym.name, file: sym.file, line: sym.start_line });
82
- continue;
83
- }
84
- const columns = [];
85
- if (includeColumns) {
86
- const fields = index.symbols.filter((f) => f.kind === "field" && f.parent === sym.id);
87
- for (const f of fields) {
88
- columns.push({ name: f.name, type: f.signature ?? "unknown" });
89
- }
90
- }
91
- tables.push({
92
- name: sym.name,
93
- file: sym.file,
94
- line: sym.start_line,
95
- columns,
96
- });
97
- }
98
- // Extract FK relationships from column signatures + table-level constraints
99
- const relationships = [];
100
- for (const table of tables) {
101
- // Column-level REFERENCES
102
- for (const col of table.columns) {
103
- FK_RE.lastIndex = 0;
104
- const m = FK_RE.exec(col.type);
105
- if (m) {
106
- // Prefer table groups (5..8); fall back to schema groups (1..4) on weird inputs.
107
- const toTable = m[5] ?? m[6] ?? m[7] ?? m[8] ?? m[1] ?? m[2] ?? m[3] ?? m[4] ?? "";
108
- const toCol = m[9] ?? m[10] ?? m[11] ?? m[12] ?? "id";
109
- let relType = "fk";
110
- if (toTable === table.name) {
111
- relType = "self_reference";
112
- }
113
- relationships.push({
114
- from_table: table.name,
115
- from_column: col.name,
116
- to_table: toTable,
117
- to_column: toCol,
118
- type: relType,
119
- });
120
- }
121
- }
122
- // Table-level FOREIGN KEY constraints: scan full table source
123
- const tableSym = index.symbols.find((s) => s.kind === "table" && s.name === table.name);
124
- if (tableSym?.source) {
125
- // Table-level FOREIGN KEY constraint — same identifier shapes as FK_RE.
126
- // Capture layout:
127
- // 1..4: from-column "..", `..`, [..], unquoted
128
- // 5..8: schema-qualified prefix (any quoting) — discarded
129
- // 9..12: target table
130
- // 13..16: target column
131
- const tableFkRe = /FOREIGN\s+KEY\s*\(\s*(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|(\w+))\s*\)\s*REFERENCES\s+(?:(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|(\w+))\s*\.\s*)?(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|(\w+))\s*\(\s*(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|(\w+))\s*\)/gi;
132
- let fkm;
133
- while ((fkm = tableFkRe.exec(tableSym.source)) !== null) {
134
- const fromCol = fkm[1] ?? fkm[2] ?? fkm[3] ?? fkm[4] ?? "";
135
- const toTable = fkm[9] ?? fkm[10] ?? fkm[11] ?? fkm[12] ?? "";
136
- const toCol = fkm[13] ?? fkm[14] ?? fkm[15] ?? fkm[16] ?? "id";
137
- // Avoid duplicates (column-level already caught this FK)
138
- if (relationships.some((r) => r.from_table === table.name && r.from_column === fromCol && r.to_table === toTable))
139
- continue;
140
- relationships.push({
141
- from_table: table.name,
142
- from_column: fromCol,
143
- to_table: toTable,
144
- to_column: toCol,
145
- type: toTable === table.name ? "self_reference" : "fk",
146
- });
147
- }
148
- }
149
- }
150
- // Detect circular references
151
- detectCircularRefs(relationships, warnings);
152
- // Resolve dialect: explicit > auto-detect from concatenated table sources.
153
- // Concatenation is bounded by tableSymbols (already filtered by file_pattern),
154
- // so the cost stays linear in the analyzed schema.
155
- let detected_dialect;
156
- const explicit = options?.dialect;
157
- if (explicit && explicit !== "auto") {
158
- detected_dialect = explicit;
159
- }
160
- else {
161
- let probe = "";
162
- for (const sym of tableSymbols) {
163
- if (sym.source)
164
- probe += sym.source + "\n";
165
- if (probe.length > 32_000)
166
- break; // 32 KB cap — enough fingerprint surface
167
- }
168
- detected_dialect = detectSqlDialect(probe);
169
- }
170
- const result = {
171
- tables,
172
- views,
173
- relationships,
174
- warnings,
175
- detected_dialect,
176
- };
177
- if (options?.output_format === "mermaid") {
178
- result.mermaid = generateMermaid(tables, relationships);
179
- }
180
- return result;
181
- }
182
- function detectCircularRefs(relationships, warnings) {
183
- // Build adjacency map
184
- const adj = new Map();
185
- for (const rel of relationships) {
186
- if (rel.type === "self_reference")
187
- continue;
188
- if (!adj.has(rel.from_table))
189
- adj.set(rel.from_table, new Set());
190
- adj.get(rel.from_table).add(rel.to_table);
191
- }
192
- // DFS cycle detection with visited set
193
- const visited = new Set();
194
- const inStack = new Set();
195
- function dfs(node) {
196
- if (inStack.has(node)) {
197
- warnings.push(`Circular FK reference detected involving "${node}".`);
198
- return;
199
- }
200
- if (visited.has(node))
201
- return;
202
- visited.add(node);
203
- inStack.add(node);
204
- for (const neighbor of adj.get(node) ?? []) {
205
- dfs(neighbor);
206
- }
207
- inStack.delete(node);
208
- }
209
- for (const node of adj.keys()) {
210
- dfs(node);
211
- }
212
- }
213
- /**
214
- * Sanitize a name for Mermaid erDiagram entities.
215
- * Strips leading non-word chars (e.g. Joomla's `#__`), keeps the rest readable.
216
- * If the name becomes empty, returns "anon".
217
- */
218
- function mermaidSafeName(name) {
219
- // Strip leading non-word chars, replace remaining non-word with _
220
- const cleaned = name
221
- .replace(/^[^a-zA-Z0-9]+/, "") // strip leading #, $, @, etc.
222
- .replace(/[^a-zA-Z0-9_]/g, "_");
223
- return cleaned || "anon";
224
- }
225
- /** Sanitize a column type for Mermaid — keep the base type name only (drop size/precision). */
226
- function mermaidSafeType(type) {
227
- // "int(10) unsigned" → "int", "varchar(255)" → "varchar", "DECIMAL(10,2)" → "decimal"
228
- const m = /^[a-zA-Z][a-zA-Z0-9_]*/.exec(type);
229
- return m ? m[0].toLowerCase() : "unknown";
230
- }
231
- function generateMermaid(tables, relationships) {
232
- const lines = ["erDiagram"];
233
- for (const table of tables) {
234
- const safeName = mermaidSafeName(table.name);
235
- lines.push(` ${safeName} {`);
236
- for (const col of table.columns) {
237
- const typeName = mermaidSafeType(col.type);
238
- lines.push(` ${typeName} ${mermaidSafeName(col.name)}`);
239
- }
240
- lines.push(" }");
241
- }
242
- for (const rel of relationships) {
243
- const arrow = rel.type === "self_reference" ? "||--o|" : "||--o{";
244
- lines.push(` ${mermaidSafeName(rel.from_table)} ${arrow} ${mermaidSafeName(rel.to_table)} : "${mermaidSafeName(rel.from_column)}"`);
245
- }
246
- return lines.join("\n");
247
- }
248
- export async function traceQuery(repo, options) {
249
- if (!options.table?.trim()) {
250
- throw new Error("table parameter is required");
251
- }
252
- const index = await getCodeIndex(repo);
253
- if (!index) {
254
- throw new Error(`Repository "${repo}" not found. Run index_folder first.`);
255
- }
256
- const tableName = options.table.trim();
257
- const maxRefs = options.max_references ?? 500;
258
- const includeOrm = options.include_orm ?? true;
259
- // Find table definition
260
- const tableSym = index.symbols.find((s) => (s.kind === "table" || s.kind === "view") && s.name === tableName);
261
- const table_definition = tableSym
262
- ? { file: tableSym.file, line: tableSym.start_line, kind: tableSym.kind }
263
- : null;
264
- // Delegate to ripgrep-backed searchText for the fast literal scan, then
265
- // post-filter in JS with an identifier-char boundary regex. Ripgrep doesn't
266
- // support JS-style lookbehind, and \b fails on names starting with # or $.
267
- const IDENT_CHAR = "[a-zA-Z0-9_#$@]";
268
- const escaped = escapeRegex(tableName);
269
- const boundaryRegex = new RegExp(`(?<!${IDENT_CHAR})${escaped}(?!${IDENT_CHAR})`, "i");
270
- // Fetch a wider window so post-filter losses don't silently cap results.
271
- const rgMatches = await searchText(repo, tableName, {
272
- regex: false,
273
- max_results: Math.max(maxRefs * 3, 500),
274
- file_pattern: options.file_pattern,
275
- context_lines: 0,
276
- });
277
- const sql_references = [];
278
- let kept = 0;
279
- let truncated = false;
280
- for (const m of rgMatches) {
281
- const text = m.content ?? "";
282
- if (!boundaryRegex.test(text))
283
- continue;
284
- // Skip the definition line itself
285
- if (tableSym && m.file === tableSym.file && m.line === tableSym.start_line)
286
- continue;
287
- sql_references.push({
288
- file: m.file,
289
- line: m.line,
290
- context: text.trim().slice(0, 120),
291
- type: classifyReference(text),
292
- });
293
- kept++;
294
- if (kept >= maxRefs) {
295
- truncated = true;
296
- break;
297
- }
298
- }
299
- const warnings = [];
300
- if (truncated) {
301
- warnings.push(`Results truncated at max_references=${maxRefs}. Pass file_pattern or increase max_references to see more.`);
302
- }
303
- // ORM detection
304
- const orm_references = [];
305
- if (includeOrm) {
306
- // Prisma detection
307
- const prismaFiles = index.files.filter((f) => f.path.endsWith(".prisma"));
308
- for (const pf of prismaFiles) {
309
- const prismaSymbols = index.symbols.filter((s) => s.file === pf.path);
310
- for (const sym of prismaSymbols) {
311
- // Check @@map("tableName") in source
312
- if (sym.source?.includes(`@@map("${tableName}")`)) {
313
- orm_references.push({
314
- file: sym.file,
315
- line: sym.start_line,
316
- orm: "prisma",
317
- model_name: sym.name,
318
- });
319
- }
320
- // Check model name matching table name (case-insensitive)
321
- if (sym.kind === "class" && sym.name.toLowerCase() === tableName.toLowerCase()) {
322
- // Avoid duplicates
323
- if (!orm_references.some((r) => r.file === sym.file && r.model_name === sym.name)) {
324
- orm_references.push({
325
- file: sym.file,
326
- line: sym.start_line,
327
- orm: "prisma",
328
- model_name: sym.name,
329
- });
330
- }
331
- }
332
- }
333
- }
334
- // Drizzle detection
335
- const tsFiles = index.files.filter((f) => f.path.endsWith(".ts") || f.path.endsWith(".js"));
336
- for (const tf of tsFiles) {
337
- const tsSymbols = index.symbols.filter((s) => s.file === tf.path && s.source);
338
- for (const sym of tsSymbols) {
339
- if (sym.source?.includes(`pgTable("${tableName}"`) ||
340
- sym.source?.includes(`mysqlTable("${tableName}"`) ||
341
- sym.source?.includes(`sqliteTable("${tableName}"`)) {
342
- orm_references.push({
343
- file: sym.file,
344
- line: sym.start_line,
345
- orm: "drizzle",
346
- model_name: sym.name,
347
- });
348
- }
349
- }
350
- }
351
- // Warn if ORM detected but no references found
352
- if (prismaFiles.length > 0 && orm_references.length === 0) {
353
- warnings.push(`ORM detected (Prisma) but no model found for table "${tableName}".`);
354
- }
355
- }
356
- if (!table_definition && sql_references.length === 0) {
357
- warnings.push(`Table "${tableName}" not found in indexed SQL files. If SQL support was disabled, this is expected.`);
358
- }
359
- return { table_definition, sql_references, orm_references, warnings, truncated };
360
- }
361
- function classifyReference(line) {
362
- const upper = line.toUpperCase().trim();
363
- if (/^\s*ALTER\s+TABLE/i.test(upper))
364
- return "ddl";
365
- if (/^\s*CREATE\s+(?:OR\s+REPLACE\s+)?(?:MATERIALIZED\s+)?VIEW/i.test(upper))
366
- return "view";
367
- if (/REFERENCES/i.test(upper))
368
- return "fk";
369
- if (/^\s*(?:SELECT|INSERT|UPDATE|DELETE)\b/i.test(upper))
370
- return "dml";
371
- return "dml";
372
- }
373
- function escapeRegex(str) {
374
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
375
- }
376
- export async function searchColumns(repo, options) {
377
- const index = await getCodeIndex(repo);
378
- if (!index) {
379
- throw new Error(`Repository "${repo}" not found. Run index_folder first.`);
380
- }
381
- const queryLower = (options.query ?? "").toLowerCase();
382
- const typeFilter = options.type?.toLowerCase();
383
- const tableFilter = options.table?.toLowerCase();
384
- const filePattern = options.file_pattern;
385
- const maxResults = options.max_results ?? 100;
386
- // Build table-id → table-name lookup (only SQL tables, not Prisma models)
387
- const tableIdToName = new Map();
388
- for (const sym of index.symbols) {
389
- if (sym.kind !== "table")
390
- continue;
391
- if (filePattern && !sym.file.includes(filePattern))
392
- continue;
393
- tableIdToName.set(sym.id, { name: sym.name, file: sym.file });
394
- }
395
- // Collect field symbols whose parent is a SQL table
396
- const allHits = [];
397
- for (const sym of index.symbols) {
398
- if (sym.kind !== "field")
399
- continue;
400
- if (!sym.parent)
401
- continue;
402
- const parent = tableIdToName.get(sym.parent);
403
- if (!parent)
404
- continue;
405
- const name = sym.name;
406
- const type = sym.signature ?? "unknown";
407
- const normalized = normalizeType(type);
408
- // Apply filters
409
- if (queryLower && !name.toLowerCase().includes(queryLower))
410
- continue;
411
- if (typeFilter && normalized !== typeFilter)
412
- continue;
413
- if (tableFilter && !parent.name.toLowerCase().includes(tableFilter))
414
- continue;
415
- allHits.push({
416
- name,
417
- type,
418
- normalized_type: normalized,
419
- table: parent.name,
420
- file: parent.file,
421
- line: sym.start_line,
422
- });
423
- }
424
- const total = allHits.length;
425
- const truncated = total > maxResults;
426
- const columns = truncated ? allHits.slice(0, maxResults) : allHits;
427
- return { columns, total, truncated };
428
- }
429
- /**
430
- * Per-table complexity score: column count + FK count + index count.
431
- * Identifies "god tables" that need refactoring. Sorted by score desc.
432
- */
433
- export async function analyzeSchemaComplexity(repo, options) {
434
- const index = await getCodeIndex(repo);
435
- if (!index) {
436
- throw new Error(`Repository "${repo}" not found. Run index_folder first.`);
437
- }
438
- const filePattern = options?.file_pattern;
439
- const topN = options?.top_n ?? 50;
440
- const tables = index.symbols.filter((s) => {
441
- if (s.kind !== "table")
442
- return false;
443
- if (filePattern && !s.file.includes(filePattern))
444
- return false;
445
- return true;
446
- });
447
- // Pre-compute: index count per table name
448
- const indexCounts = new Map();
449
- for (const sym of index.symbols) {
450
- if (sym.kind !== "index")
451
- continue;
452
- // Index source typically contains "ON table_name(...)"
453
- const onMatch = /\bON\s+(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))/i.exec(sym.source ?? "");
454
- if (onMatch) {
455
- const tableName = (onMatch[1] ?? onMatch[2] ?? onMatch[3] ?? onMatch[4] ?? "").toLowerCase();
456
- indexCounts.set(tableName, (indexCounts.get(tableName) ?? 0) + 1);
457
- }
458
- }
459
- const results = [];
460
- for (const table of tables) {
461
- const columns = index.symbols.filter((s) => s.kind === "field" && s.parent === table.id);
462
- const column_count = columns.length;
463
- // Count FK references in columns
464
- let fk_count = 0;
465
- for (const col of columns) {
466
- if (/REFERENCES/i.test(col.signature ?? ""))
467
- fk_count++;
468
- }
469
- const index_count = indexCounts.get(table.name.toLowerCase()) ?? 0;
470
- // Weighted score: columns dominate, FKs and indexes add coupling signal
471
- const score = column_count * 1.0 + fk_count * 3.0 + index_count * 1.5;
472
- results.push({
473
- name: table.name,
474
- file: table.file,
475
- line: table.start_line,
476
- column_count,
477
- fk_count,
478
- index_count,
479
- score,
480
- });
481
- }
482
- results.sort((a, b) => b.score - a.score);
483
- return { tables: results.slice(0, topN) };
484
- }
485
- /**
486
- * Scan codebase for unsafe DML patterns in SQL strings.
487
- * Uses ripgrep to find DML statements, then classifies safety.
488
- */
489
- export async function scanDmlSafety(repo, options) {
490
- const index = await getCodeIndex(repo);
491
- if (!index) {
492
- throw new Error(`Repository "${repo}" not found. Run index_folder first.`);
493
- }
494
- const filePattern = options?.file_pattern;
495
- const maxResults = options?.max_results ?? 200;
496
- const findings = [];
497
- const filesScanned = new Set();
498
- // Pattern 1: DELETE without WHERE
499
- const delMatches = await searchText(repo, "DELETE FROM", {
500
- regex: false,
501
- max_results: maxResults,
502
- file_pattern: filePattern,
503
- context_lines: 0,
504
- });
505
- for (const m of delMatches) {
506
- filesScanned.add(m.file);
507
- const text = m.content ?? "";
508
- // Check if WHERE exists after DELETE FROM on the same line or nearby
509
- if (!/\bWHERE\b/i.test(text)) {
510
- findings.push({
511
- rule: "delete-without-where",
512
- severity: "high",
513
- file: m.file,
514
- line: m.line,
515
- context: text.trim().slice(0, 120),
516
- detail: `DELETE FROM without WHERE clause — may delete all rows.`,
517
- });
518
- }
519
- }
520
- // Pattern 2: UPDATE without WHERE
521
- const updMatches = await searchText(repo, "UPDATE", {
522
- regex: false,
523
- max_results: maxResults,
524
- file_pattern: filePattern,
525
- context_lines: 0,
526
- });
527
- for (const m of updMatches) {
528
- filesScanned.add(m.file);
529
- const text = m.content ?? "";
530
- // Must contain SET (otherwise it's not a DML UPDATE)
531
- if (!/\bSET\b/i.test(text))
532
- continue;
533
- if (!/\bWHERE\b/i.test(text)) {
534
- findings.push({
535
- rule: "update-without-where",
536
- severity: "high",
537
- file: m.file,
538
- line: m.line,
539
- context: text.trim().slice(0, 120),
540
- detail: `UPDATE...SET without WHERE clause — may update all rows.`,
541
- });
542
- }
543
- }
544
- // Pattern 3: SELECT * (unbounded read)
545
- const selMatches = await searchText(repo, "SELECT *", {
546
- regex: false,
547
- max_results: maxResults,
548
- file_pattern: filePattern,
549
- context_lines: 0,
550
- });
551
- for (const m of selMatches) {
552
- filesScanned.add(m.file);
553
- const text = m.content ?? "";
554
- // Only flag if FROM is present (actual query, not comment/string fragment)
555
- if (!/\bFROM\b/i.test(text))
556
- continue;
557
- findings.push({
558
- rule: "select-star",
559
- severity: "info",
560
- file: m.file,
561
- line: m.line,
562
- context: text.trim().slice(0, 120),
563
- detail: `SELECT * — fetches all columns. Consider listing specific fields.`,
564
- });
565
- }
566
- // Deduplicate: same file:line + same rule
567
- const seen = new Set();
568
- const deduped = findings.filter((f) => {
569
- const key = `${f.file}:${f.line}:${f.rule}`;
570
- if (seen.has(key))
571
- return false;
572
- seen.add(key);
573
- return true;
574
- });
575
- const by_rule = {};
576
- for (const f of deduped) {
577
- by_rule[f.rule] = (by_rule[f.rule] ?? 0) + 1;
578
- }
579
- return {
580
- findings: deduped,
581
- summary: { total: deduped.length, by_rule, files_scanned: filesScanned.size },
582
- };
583
- }
584
- /**
585
- * Lint SQL schema for common anti-patterns.
586
- * Conservative ruleset with near-zero false positive rate:
587
- * - no-primary-key: table without PRIMARY KEY (serious design smell)
588
- * - wide-table: table with >20 columns (god table)
589
- * - duplicate-index-name: same index name defined multiple times
590
- */
591
- export async function lintSchema(repo, options) {
592
- const index = await getCodeIndex(repo);
593
- if (!index) {
594
- throw new Error(`Repository "${repo}" not found. Run index_folder first.`);
595
- }
596
- const filePattern = options?.file_pattern;
597
- const findings = [];
598
- const warnings = [];
599
- const tables = index.symbols.filter((s) => {
600
- if (s.kind !== "table")
601
- return false;
602
- if (filePattern && !s.file.includes(filePattern))
603
- return false;
604
- return true;
605
- });
606
- if (tables.length === 0) {
607
- warnings.push("No SQL tables found in this repository.");
608
- return { findings, summary: { total: 0, by_rule: {} }, warnings };
609
- }
610
- // Rule 1: no-primary-key — table with no PK field
611
- for (const table of tables) {
612
- const source = table.source ?? "";
613
- const hasPK = /PRIMARY\s+KEY/i.test(source) || /\bSERIAL\b/i.test(source);
614
- if (!hasPK) {
615
- findings.push({
616
- rule: "no-primary-key",
617
- severity: "warning",
618
- table: table.name,
619
- detail: `Table "${table.name}" has no PRIMARY KEY or SERIAL column.`,
620
- file: table.file,
621
- line: table.start_line,
622
- });
623
- }
624
- }
625
- // Rule 2: wide-table — >20 columns
626
- for (const table of tables) {
627
- const fields = index.symbols.filter((s) => s.kind === "field" && s.parent === table.id);
628
- if (fields.length > 20) {
629
- findings.push({
630
- rule: "wide-table",
631
- severity: "warning",
632
- table: table.name,
633
- detail: `Table "${table.name}" has ${fields.length} columns (threshold: 20). Consider splitting.`,
634
- file: table.file,
635
- line: table.start_line,
636
- });
637
- }
638
- }
639
- // Rule 3: duplicate-index-name
640
- const indexNames = new Map();
641
- const indexes = index.symbols.filter((s) => {
642
- if (s.kind !== "index")
643
- return false;
644
- if (filePattern && !s.file.includes(filePattern))
645
- return false;
646
- return true;
647
- });
648
- for (const idx of indexes) {
649
- const key = idx.name.toLowerCase();
650
- if (indexNames.has(key)) {
651
- const prev = indexNames.get(key);
652
- findings.push({
653
- rule: "duplicate-index-name",
654
- severity: "warning",
655
- table: idx.name,
656
- detail: `Index "${idx.name}" defined at ${idx.file}:${idx.start_line} duplicates index at ${prev.file}:${prev.line}.`,
657
- file: idx.file,
658
- line: idx.start_line,
659
- });
660
- }
661
- else {
662
- indexNames.set(key, { file: idx.file, line: idx.start_line });
663
- }
664
- }
665
- // Build summary
666
- const by_rule = {};
667
- for (const f of findings) {
668
- by_rule[f.rule] = (by_rule[f.rule] ?? 0) + 1;
669
- }
670
- return {
671
- findings,
672
- summary: { total: findings.length, by_rule },
673
- warnings,
674
- };
675
- }
676
- const MIGRATION_PATTERNS = [
677
- // Destructive (high severity)
678
- { regex: /DROP\s+TABLE\s+(?:IF\s+EXISTS\s+)?(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))/i, operation: "DROP TABLE", category: "destructive", severity: "high", targetGroup: 1 },
679
- { regex: /ALTER\s+TABLE\s+(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))\s+DROP\s+COLUMN\s+(?:IF\s+EXISTS\s+)?(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))/i, operation: "DROP COLUMN", category: "destructive", severity: "high", targetGroup: 1 },
680
- { regex: /DROP\s+INDEX\s+(?:IF\s+EXISTS\s+)?(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))/i, operation: "DROP INDEX", category: "destructive", severity: "medium", targetGroup: 1 },
681
- { regex: /ALTER\s+TABLE\s+(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))\s+DROP\s+CONSTRAINT/i, operation: "DROP CONSTRAINT", category: "destructive", severity: "medium", targetGroup: 1 },
682
- { regex: /TRUNCATE\s+(?:TABLE\s+)?(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))/i, operation: "TRUNCATE", category: "destructive", severity: "high", targetGroup: 1 },
683
- // Modifying (medium severity)
684
- { regex: /ALTER\s+TABLE\s+(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))\s+ADD\s+COLUMN/i, operation: "ADD COLUMN", category: "modifying", severity: "low", targetGroup: 1 },
685
- { regex: /ALTER\s+TABLE\s+(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))\s+ADD\s+(?!COLUMN)/i, operation: "ALTER TABLE ADD", category: "modifying", severity: "low", targetGroup: 1 },
686
- { regex: /ALTER\s+TABLE\s+(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))\s+ALTER\s+COLUMN/i, operation: "ALTER COLUMN", category: "modifying", severity: "medium", targetGroup: 1 },
687
- { regex: /ALTER\s+TABLE\s+(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))\s+RENAME/i, operation: "RENAME", category: "modifying", severity: "medium", targetGroup: 1 },
688
- // Additive (low severity) — these overlap with the extractor's DDL patterns
689
- { regex: /CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))/i, operation: "CREATE TABLE", category: "additive", severity: "low", targetGroup: 1 },
690
- { regex: /CREATE\s+(?:UNIQUE\s+)?INDEX\s+(?:IF\s+NOT\s+EXISTS\s+)?(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))/i, operation: "CREATE INDEX", category: "additive", severity: "low", targetGroup: 1 },
691
- { regex: /CREATE\s+(?:OR\s+REPLACE\s+)?(?:MATERIALIZED\s+)?VIEW\s+(?:`([^`]+)`|"([^"]+)"|\[([^\]]+)\]|(\w+))/i, operation: "CREATE VIEW", category: "additive", severity: "low", targetGroup: 1 },
692
- ];
693
- function pickTarget(m, startGroup) {
694
- for (let i = startGroup; i < m.length; i++) {
695
- if (m[i])
696
- return m[i];
697
- }
698
- return "(unknown)";
699
- }
700
- export async function diffMigrations(repo, options) {
701
- const index = await getCodeIndex(repo);
702
- if (!index) {
703
- throw new Error(`Repository "${repo}" not found. Run index_folder first.`);
704
- }
705
- const filePattern = options?.file_pattern;
706
- // Find .sql files, sorted by name (migration order heuristic)
707
- const sqlFiles = index.files
708
- .filter((f) => (f.language === "sql" || f.language === "sql-jinja"))
709
- .filter((f) => !filePattern || f.path.includes(filePattern))
710
- .sort((a, b) => a.path.localeCompare(b.path));
711
- const additive = [];
712
- const modifying = [];
713
- const destructive = [];
714
- for (const fileEntry of sqlFiles) {
715
- // Read file source from symbols (each symbol has source)
716
- // Or reconstruct from all symbols in this file
717
- const fileSymbols = index.symbols.filter((s) => s.file === fileEntry.path);
718
- // Collect all raw source lines we can access
719
- const seenLines = new Set();
720
- for (const sym of fileSymbols) {
721
- if (!sym.source)
722
- continue;
723
- for (const line of sym.source.split("\n")) {
724
- seenLines.add(line);
725
- }
726
- }
727
- // Also scan the file directly for DML patterns not captured as symbols
728
- // (ALTER, DROP, TRUNCATE aren't symbols — they're imperative ops)
729
- let fullSource;
730
- try {
731
- const { readFileSync } = await import("node:fs");
732
- const { join } = await import("node:path");
733
- fullSource = readFileSync(join(index.root, fileEntry.path), "utf-8");
734
- }
735
- catch {
736
- // File not accessible — use symbol sources only
737
- }
738
- const linesToScan = fullSource
739
- ? fullSource.split("\n")
740
- : [...seenLines];
741
- for (let lineIdx = 0; lineIdx < linesToScan.length; lineIdx++) {
742
- const line = linesToScan[lineIdx];
743
- const trimmed = line.trim();
744
- if (!trimmed || trimmed.startsWith("--"))
745
- continue;
746
- for (const pat of MIGRATION_PATTERNS) {
747
- const m = pat.regex.exec(trimmed);
748
- if (!m)
749
- continue;
750
- const target = pickTarget(m, pat.targetGroup);
751
- // For DROP COLUMN, include table.column
752
- let fullTarget = target;
753
- if (pat.operation === "DROP COLUMN") {
754
- const colName = pickTarget(m, 5); // groups 5-8 are the column name
755
- fullTarget = `${target}.${colName}`;
756
- }
757
- const op = {
758
- operation: pat.operation,
759
- target: fullTarget,
760
- severity: pat.severity,
761
- file: fileEntry.path,
762
- line: lineIdx + 1,
763
- raw: trimmed.slice(0, 120),
764
- };
765
- switch (pat.category) {
766
- case "additive":
767
- additive.push(op);
768
- break;
769
- case "modifying":
770
- modifying.push(op);
771
- break;
772
- case "destructive":
773
- destructive.push(op);
774
- break;
775
- }
776
- break; // first match wins per line
777
- }
778
- }
779
- }
780
- return {
781
- additive,
782
- modifying,
783
- destructive,
784
- summary: {
785
- additive: additive.length,
786
- modifying: modifying.length,
787
- destructive: destructive.length,
788
- total_files: sqlFiles.length,
789
- },
790
- };
791
- }
792
- /**
793
- * Find SQL tables with zero references outside their own CREATE TABLE definition.
794
- * Uses ripgrep-backed literal search per table for speed.
795
- */
796
- export async function findOrphanTables(repo, options) {
797
- const index = await getCodeIndex(repo);
798
- if (!index) {
799
- throw new Error(`Repository "${repo}" not found. Run index_folder first.`);
800
- }
801
- const filePattern = options?.file_pattern;
802
- // Collect all SQL tables
803
- const tables = index.symbols.filter((s) => {
804
- if (s.kind !== "table")
805
- return false;
806
- if (filePattern && !s.file.includes(filePattern))
807
- return false;
808
- return true;
809
- });
810
- const orphans = [];
811
- for (const table of tables) {
812
- // Search for references to this table name via ripgrep
813
- let rgMatches = [];
814
- try {
815
- rgMatches = await searchText(repo, table.name, {
816
- regex: false,
817
- max_results: 20,
818
- context_lines: 0,
819
- });
820
- }
821
- catch {
822
- rgMatches = [];
823
- }
824
- // Boundary filter + exclude the definition line itself
825
- const IDENT_CHAR = "[a-zA-Z0-9_#$@]";
826
- const escaped = escapeRegex(table.name);
827
- const boundaryRegex = new RegExp(`(?<!${IDENT_CHAR})${escaped}(?!${IDENT_CHAR})`, "i");
828
- const realRefs = rgMatches.filter((m) => {
829
- const text = m.content ?? "";
830
- if (!boundaryRegex.test(text))
831
- return false;
832
- // Exclude the CREATE TABLE definition line
833
- if (m.file === table.file && m.line === table.start_line)
834
- return false;
835
- // Exclude lines within the CREATE TABLE body (column defs, constraints)
836
- if (m.file === table.file && m.line > table.start_line && m.line <= table.end_line)
837
- return false;
838
- return true;
839
- });
840
- if (realRefs.length === 0) {
841
- const columnCount = index.symbols.filter((s) => s.kind === "field" && s.parent === table.id).length;
842
- orphans.push({
843
- name: table.name,
844
- file: table.file,
845
- line: table.start_line,
846
- column_count: columnCount,
847
- });
848
- }
849
- }
850
- return {
851
- orphans,
852
- total_tables: tables.length,
853
- orphan_count: orphans.length,
854
- };
855
- }
856
- /** Parse a Prisma model block source → fields + @@map table name */
857
- function parsePrismaModel(sym) {
858
- const source = sym.source ?? "";
859
- const lines = source.split("\n");
860
- const fields = [];
861
- let tableName = camelToSnake(sym.name);
862
- // @@map("table_name")
863
- const mapMatch = /@@map\s*\(\s*"([^"]+)"\s*\)/.exec(source);
864
- if (mapMatch)
865
- tableName = mapMatch[1];
866
- // Field line pattern: ` fieldName Type? @attr @attr`
867
- const FIELD_RE = /^\s*(\w+)\s+(\w+)(\[\])?(\?)?\s*(.*)$/;
868
- const RELATION_RE = /@relation/;
869
- const MAP_ATTR_RE = /@map\s*\(\s*"([^"]+)"\s*\)/;
870
- // Prisma scalar types — anything else with an uppercase first letter is a model relation
871
- const SCALAR_TYPES = new Set([
872
- "Int", "BigInt", "Float", "Decimal", "String", "Boolean", "DateTime", "Json", "Bytes", "Unsupported",
873
- ]);
874
- for (const line of lines) {
875
- const trimmed = line.trim();
876
- // Skip model header, closing brace, comments, attributes
877
- if (trimmed.startsWith("model ") || trimmed === "" || trimmed === "}")
878
- continue;
879
- if (trimmed.startsWith("//") || trimmed.startsWith("@@"))
880
- continue;
881
- const m = FIELD_RE.exec(trimmed);
882
- if (!m)
883
- continue;
884
- const name = m[1];
885
- const type = m[2];
886
- const isList = m[3] === "[]";
887
- const optional = m[4] === "?";
888
- const attrs = m[5] ?? "";
889
- // Skip reserved keywords that aren't fields (e.g. "model", "enum")
890
- if (/^(model|enum|type|view)$/.test(name))
891
- continue;
892
- const is_id = /@id\b/.test(attrs);
893
- // A field is a relation if:
894
- // 1. It has @relation attr, OR
895
- // 2. It's a list (Type[]) — always a relation side, OR
896
- // 3. Its type starts with uppercase AND isn't a built-in scalar (→ custom model)
897
- const is_relation = RELATION_RE.test(attrs) ||
898
- isList ||
899
- (/^[A-Z]/.test(type) && !SCALAR_TYPES.has(type));
900
- // Relations aren't real DB columns — skip for drift purposes
901
- if (is_relation)
902
- continue;
903
- // @map("db_col") overrides the db name
904
- const mapField = MAP_ATTR_RE.exec(attrs);
905
- const db_name = mapField ? mapField[1] : camelToSnake(name);
906
- fields.push({ name, db_name, type, optional, is_id, is_relation });
907
- }
908
- return {
909
- name: sym.name,
910
- table: tableName,
911
- file: sym.file,
912
- line: sym.start_line,
913
- fields,
914
- };
915
- }
916
- function camelToSnake(s) {
917
- return s
918
- .replace(/([A-Z])/g, (_, c) => "_" + c.toLowerCase())
919
- .replace(/^_/, "");
920
- }
921
- /**
922
- * Normalize a type name for cross-layer comparison.
923
- * Prisma Int → int, SQL INTEGER → int, Float → float, etc.
2
+ * SQL analysis tools public barrel.
924
3
  *
925
- * Handles signatures like "TEXT NOT NULL", "SERIAL PRIMARY KEY", "int(10) unsigned".
926
- * Extracts the base type word, then groups by semantic equivalence.
927
- */
928
- function normalizeType(raw) {
929
- // Take the first word only (strip modifiers, constraints, size).
930
- // "TEXT NOT NULL" → "text", "int(10) unsigned" → "int", "DECIMAL(10,2)" → "decimal"
931
- const firstWord = /[a-zA-Z]+/.exec(raw)?.[0]?.toLowerCase() ?? "";
932
- // Group equivalents
933
- if (/^(int|integer|smallint|bigint|serial|bigserial|smallserial|tinyint|mediumint)$/.test(firstWord))
934
- return "int";
935
- if (/^(float|real|double|decimal|numeric|money)$/.test(firstWord))
936
- return "float";
937
- if (/^(text|varchar|char|string|nvarchar|longtext|mediumtext|tinytext)$/.test(firstWord))
938
- return "string";
939
- if (/^(bool|boolean|bit)$/.test(firstWord))
940
- return "bool";
941
- if (/^(timestamp|timestamptz|datetime|date|time|timetz)$/.test(firstWord))
942
- return "datetime";
943
- if (/^(json|jsonb)$/.test(firstWord))
944
- return "json";
945
- if (/^(uuid)$/.test(firstWord))
946
- return "uuid";
947
- if (/^(bytea|blob|binary|longblob|mediumblob|tinyblob)$/.test(firstWord))
948
- return "bytes";
949
- return firstWord || "unknown";
950
- }
951
- export async function analyzeSchemaDrift(repo, options) {
952
- const index = await getCodeIndex(repo);
953
- if (!index) {
954
- throw new Error(`Repository "${repo}" not found. Run index_folder first.`);
955
- }
956
- const filePattern = options?.file_pattern;
957
- const drifts = [];
958
- const warnings = [];
959
- const orms_detected = [];
960
- // Collect SQL tables and fields
961
- const sqlTables = new Map();
962
- for (const sym of index.symbols) {
963
- if (sym.kind !== "table")
964
- continue;
965
- if (filePattern && !sym.file.includes(filePattern))
966
- continue;
967
- const columns = new Map();
968
- const fields = index.symbols.filter((f) => f.kind === "field" && f.parent === sym.id);
969
- for (const f of fields) {
970
- columns.set(f.name.toLowerCase(), {
971
- type: f.signature ?? "unknown",
972
- file: f.file,
973
- line: f.start_line,
974
- });
975
- }
976
- sqlTables.set(sym.name.toLowerCase(), {
977
- file: sym.file,
978
- line: sym.start_line,
979
- columns,
980
- });
981
- }
982
- // Collect Prisma models (kind === "class" in prisma extractor)
983
- const prismaModels = [];
984
- for (const sym of index.symbols) {
985
- if (sym.kind !== "class")
986
- continue;
987
- if (!sym.file.endsWith(".prisma"))
988
- continue;
989
- if (filePattern && !sym.file.includes(filePattern))
990
- continue;
991
- prismaModels.push(parsePrismaModel(sym));
992
- }
993
- if (prismaModels.length > 0)
994
- orms_detected.push("prisma");
995
- // TODO: Drizzle and TypeORM collection (v1.2)
996
- if (orms_detected.length === 0) {
997
- warnings.push("No ORM models found in repository. analyze_schema_drift requires at least one ORM (Prisma/Drizzle/TypeORM).");
998
- return {
999
- drifts: [],
1000
- summary: { extra_in_orm: 0, extra_in_sql: 0, type_mismatches: 0, total: 0 },
1001
- orms_detected,
1002
- warnings,
1003
- };
1004
- }
1005
- // Cross-reference: Prisma models vs SQL tables
1006
- const matchedSqlTables = new Set();
1007
- for (const model of prismaModels) {
1008
- const sqlTable = sqlTables.get(model.table.toLowerCase());
1009
- if (!sqlTable) {
1010
- // Prisma model has no matching SQL table → extra_in_orm
1011
- drifts.push({
1012
- kind: "extra_in_orm",
1013
- table: model.table,
1014
- orm: "prisma",
1015
- orm_file: model.file,
1016
- orm_line: model.line,
1017
- detail: `Prisma model "${model.name}" maps to table "${model.table}" which does not exist in SQL schema.`,
1018
- });
1019
- continue;
1020
- }
1021
- matchedSqlTables.add(model.table.toLowerCase());
1022
- // Compare fields
1023
- const sqlCols = sqlTable.columns;
1024
- const matchedSqlCols = new Set();
1025
- for (const field of model.fields) {
1026
- const sqlCol = sqlCols.get(field.db_name.toLowerCase());
1027
- if (!sqlCol) {
1028
- drifts.push({
1029
- kind: "extra_in_orm",
1030
- table: model.table,
1031
- column: field.name,
1032
- orm: "prisma",
1033
- orm_file: model.file,
1034
- orm_line: model.line,
1035
- orm_type: field.type,
1036
- detail: `Prisma field "${model.name}.${field.name}" (maps to "${field.db_name}") does not exist in SQL table "${model.table}".`,
1037
- });
1038
- continue;
1039
- }
1040
- matchedSqlCols.add(field.db_name.toLowerCase());
1041
- // Type compatibility check
1042
- const ormNorm = normalizeType(field.type);
1043
- const sqlNorm = normalizeType(sqlCol.type);
1044
- if (ormNorm !== sqlNorm && ormNorm !== "unknown" && sqlNorm !== "unknown") {
1045
- drifts.push({
1046
- kind: "type_mismatch",
1047
- table: model.table,
1048
- column: field.name,
1049
- orm: "prisma",
1050
- orm_file: model.file,
1051
- orm_line: model.line,
1052
- sql_file: sqlCol.file,
1053
- sql_line: sqlCol.line,
1054
- orm_type: field.type,
1055
- sql_type: sqlCol.type,
1056
- detail: `Type mismatch: Prisma "${model.name}.${field.name}" is "${field.type}" (${ormNorm}) but SQL "${model.table}.${field.db_name}" is "${sqlCol.type}" (${sqlNorm}).`,
1057
- });
1058
- }
1059
- }
1060
- // SQL columns not covered by any Prisma field → extra_in_sql (column-level)
1061
- for (const [colName, sqlCol] of sqlCols) {
1062
- if (matchedSqlCols.has(colName))
1063
- continue;
1064
- // Don't flag common auto-columns that Prisma often omits
1065
- if (/^(created_at|updated_at|deleted_at)$/i.test(colName))
1066
- continue;
1067
- drifts.push({
1068
- kind: "extra_in_sql",
1069
- table: model.table,
1070
- column: colName,
1071
- orm: "prisma",
1072
- sql_file: sqlCol.file,
1073
- sql_line: sqlCol.line,
1074
- sql_type: sqlCol.type,
1075
- detail: `SQL column "${model.table}.${colName}" has no corresponding field in Prisma model "${model.name}".`,
1076
- });
1077
- }
1078
- }
1079
- // SQL tables with no Prisma model → extra_in_sql (table-level)
1080
- for (const [tableName, sqlTable] of sqlTables) {
1081
- if (matchedSqlTables.has(tableName))
1082
- continue;
1083
- drifts.push({
1084
- kind: "extra_in_sql",
1085
- table: tableName,
1086
- orm: "prisma",
1087
- sql_file: sqlTable.file,
1088
- sql_line: sqlTable.line,
1089
- detail: `SQL table "${tableName}" has no corresponding Prisma model.`,
1090
- });
1091
- }
1092
- const summary = {
1093
- extra_in_orm: drifts.filter((d) => d.kind === "extra_in_orm").length,
1094
- extra_in_sql: drifts.filter((d) => d.kind === "extra_in_sql").length,
1095
- type_mismatches: drifts.filter((d) => d.kind === "type_mismatch").length,
1096
- total: drifts.length,
1097
- };
1098
- // Heuristic warning: if >50% of ORM tables have no SQL counterpart, this is
1099
- // likely a Prisma-migrate style project where SQL files are incremental
1100
- // migrations, not a full schema snapshot. In that case table-level drift
1101
- // is noise — the real signal is field-level drift on matched tables.
1102
- const totalOrmTables = prismaModels.length;
1103
- const orphanOrmTables = drifts.filter((d) => d.kind === "extra_in_orm" && !d.column).length;
1104
- if (totalOrmTables > 0 && orphanOrmTables / totalOrmTables > 0.5) {
1105
- warnings.push(`${orphanOrmTables}/${totalOrmTables} Prisma models have no SQL counterpart. ` +
1106
- `This likely means the project uses Prisma Migrate (incremental migrations) ` +
1107
- `rather than a full schema.sql snapshot. Field-level drifts on matched tables ` +
1108
- `are still meaningful; ignore table-level extra_in_orm drifts in this mode.`);
1109
- }
1110
- return { drifts, summary, orms_detected, warnings };
1111
- }
1112
- const DEFAULT_SQL_AUDIT_CHECKS = ["drift", "orphan", "lint", "dml", "complexity"];
1113
- /**
1114
- * Composite SQL audit — runs multiple diagnostic gates in a single call.
1115
- * Mirrors framework_audit / nest_audit / audit_scan pattern.
1116
- *
1117
- * Individual gate functions (analyzeSchemaDrift, findOrphanTables, lintSchema,
1118
- * scanDmlSafety, analyzeSchemaComplexity) remain exported for internal use
1119
- * but are NOT registered as separate MCP tools. sql_audit is the single
1120
- * discoverable entry point.
1121
- */
1122
- export async function sqlAudit(repo, options) {
1123
- const checks = options?.checks ?? DEFAULT_SQL_AUDIT_CHECKS;
1124
- const filePattern = options?.file_pattern;
1125
- const gates = [];
1126
- const warnings = [];
1127
- // Build option objects with only defined fields (for exactOptionalPropertyTypes compat)
1128
- const scopedOpts = {};
1129
- if (filePattern !== undefined)
1130
- scopedOpts.file_pattern = filePattern;
1131
- // Gate 1: schema_drift (ORM ↔ SQL drift)
1132
- if (checks.includes("drift")) {
1133
- const drift = await analyzeSchemaDrift(repo, scopedOpts);
1134
- const criticalCount = drift.summary.type_mismatches;
1135
- gates.push({
1136
- check: "drift",
1137
- pass: drift.summary.total === 0,
1138
- critical: criticalCount > 0,
1139
- finding_count: drift.summary.total,
1140
- data: drift,
1141
- summary: drift.summary.total === 0
1142
- ? "No schema drift detected"
1143
- : `${drift.summary.total} drift${drift.summary.total === 1 ? "" : "s"}: ${drift.summary.extra_in_orm} extra in ORM, ${drift.summary.extra_in_sql} extra in SQL, ${drift.summary.type_mismatches} type mismatches`,
1144
- });
1145
- for (const w of drift.warnings)
1146
- warnings.push(`drift: ${w}`);
1147
- }
1148
- // Gate 2: orphan_tables
1149
- if (checks.includes("orphan")) {
1150
- const orphan = await findOrphanTables(repo, scopedOpts);
1151
- gates.push({
1152
- check: "orphan",
1153
- pass: orphan.orphan_count === 0,
1154
- critical: false,
1155
- finding_count: orphan.orphan_count,
1156
- data: orphan,
1157
- summary: orphan.orphan_count === 0
1158
- ? `No orphan tables (${orphan.total_tables} tables scanned)`
1159
- : `${orphan.orphan_count}/${orphan.total_tables} tables with zero references`,
1160
- });
1161
- }
1162
- // Gate 3: lint_schema
1163
- if (checks.includes("lint")) {
1164
- const lint = await lintSchema(repo, scopedOpts);
1165
- gates.push({
1166
- check: "lint",
1167
- pass: lint.summary.total === 0,
1168
- critical: false,
1169
- finding_count: lint.summary.total,
1170
- data: lint,
1171
- summary: lint.summary.total === 0
1172
- ? "No schema lint violations"
1173
- : `${lint.summary.total} lint violation${lint.summary.total === 1 ? "" : "s"}: ${Object.entries(lint.summary.by_rule).map(([r, n]) => `${r}=${n}`).join(", ")}`,
1174
- });
1175
- for (const w of lint.warnings)
1176
- warnings.push(`lint: ${w}`);
1177
- }
1178
- // Gate 4: dml_safety
1179
- if (checks.includes("dml")) {
1180
- const dmlOpts = {};
1181
- if (filePattern !== undefined)
1182
- dmlOpts.file_pattern = filePattern;
1183
- if (options?.max_results !== undefined)
1184
- dmlOpts.max_results = options.max_results;
1185
- const dml = await scanDmlSafety(repo, dmlOpts);
1186
- const highSeverity = dml.findings.filter((f) => f.severity === "high").length;
1187
- gates.push({
1188
- check: "dml",
1189
- pass: highSeverity === 0,
1190
- critical: highSeverity > 0,
1191
- finding_count: dml.summary.total,
1192
- data: dml,
1193
- summary: dml.summary.total === 0
1194
- ? `No DML safety issues (${dml.summary.files_scanned} files scanned)`
1195
- : `${dml.summary.total} DML issue${dml.summary.total === 1 ? "" : "s"} (${highSeverity} high risk): ${Object.entries(dml.summary.by_rule).map(([r, n]) => `${r}=${n}`).join(", ")}`,
1196
- });
1197
- }
1198
- // Gate 5: schema_complexity (god tables)
1199
- if (checks.includes("complexity")) {
1200
- const complexityOpts = { top_n: 10 };
1201
- if (filePattern !== undefined)
1202
- complexityOpts.file_pattern = filePattern;
1203
- const complexity = await analyzeSchemaComplexity(repo, complexityOpts);
1204
- // Threshold: score >= 25 = "needs refactor" (20 cols + 1 FK + 1 idx → 24.5)
1205
- const godTables = complexity.tables.filter((t) => t.score >= 25);
1206
- gates.push({
1207
- check: "complexity",
1208
- pass: godTables.length === 0,
1209
- critical: false,
1210
- finding_count: godTables.length,
1211
- data: complexity,
1212
- summary: godTables.length === 0
1213
- ? `No god tables detected (${complexity.tables.length} tables analyzed)`
1214
- : `${godTables.length} god table${godTables.length === 1 ? "" : "s"}: ${godTables.slice(0, 3).map((t) => `${t.name}(${t.score.toFixed(0)})`).join(", ")}${godTables.length > 3 ? "..." : ""}`,
1215
- });
1216
- }
1217
- const total_findings = gates.reduce((sum, g) => sum + g.finding_count, 0);
1218
- const critical_findings = gates
1219
- .filter((g) => g.critical)
1220
- .reduce((sum, g) => sum + g.finding_count, 0);
1221
- const gates_passed = gates.filter((g) => g.pass).length;
1222
- const gates_failed = gates.filter((g) => !g.pass).length;
1223
- return {
1224
- gates,
1225
- summary: {
1226
- total_findings,
1227
- critical_findings,
1228
- gates_run: gates.length,
1229
- gates_passed,
1230
- gates_failed,
1231
- },
1232
- warnings,
1233
- };
1234
- }
4
+ * Capability implementations live in focused sql-*-tools modules; this file
5
+ * preserves the existing import path used by MCP registration and tests.
6
+ */
7
+ export { detectSqlDialect } from "./sql-shared-tools.js";
8
+ export { analyzeSchema } from "./sql-schema-tools.js";
9
+ export { traceQuery } from "./sql-query-tools.js";
10
+ export { searchColumns } from "./sql-column-tools.js";
11
+ export { analyzeSchemaComplexity } from "./sql-complexity-tools.js";
12
+ export { scanDmlSafety } from "./sql-dml-safety-tools.js";
13
+ export { lintSchema } from "./sql-lint-schema-tools.js";
14
+ export { diffMigrations } from "./sql-migration-diff-tools.js";
15
+ export { findOrphanTables } from "./sql-orphan-table-tools.js";
16
+ export { analyzeSchemaDrift } from "./sql-drift-tools.js";
17
+ export { sqlAudit } from "./sql-audit-tools.js";
1235
18
  //# sourceMappingURL=sql-tools.js.map