@neverinfamous/mysql-mcp 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (802) hide show
  1. package/.env.example +14 -4
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +7 -1
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +6 -1
  4. package/.github/dependabot.yml +15 -0
  5. package/.github/pull_request_template.md +5 -0
  6. package/.github/workflows/codeql.yml +41 -42
  7. package/.github/workflows/docker-publish.yml +247 -210
  8. package/.github/workflows/publish-npm.yml +16 -6
  9. package/CHANGELOG.md +357 -22
  10. package/CODE_MODE.md +245 -0
  11. package/CODE_OF_CONDUCT.md +2 -0
  12. package/DOCKER_README.md +250 -161
  13. package/Dockerfile +2 -2
  14. package/README.md +239 -182
  15. package/SECURITY.md +0 -8
  16. package/VERSION +1 -1
  17. package/dist/__tests__/mocks/adapter.d.ts +3 -3
  18. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  19. package/dist/__tests__/mocks/adapter.js +51 -35
  20. package/dist/__tests__/mocks/adapter.js.map +1 -1
  21. package/dist/__tests__/mocks/index.d.ts +4 -4
  22. package/dist/__tests__/mocks/index.d.ts.map +1 -1
  23. package/dist/__tests__/mocks/index.js +2 -2
  24. package/dist/__tests__/mocks/index.js.map +1 -1
  25. package/dist/__tests__/mocks/mysql.d.ts +2 -2
  26. package/dist/__tests__/mocks/mysql.d.ts.map +1 -1
  27. package/dist/__tests__/mocks/mysql.js +14 -14
  28. package/dist/__tests__/mocks/mysql.js.map +1 -1
  29. package/dist/__tests__/setup.d.ts.map +1 -1
  30. package/dist/__tests__/setup.js +7 -7
  31. package/dist/__tests__/setup.js.map +1 -1
  32. package/dist/adapters/DatabaseAdapter.d.ts +2 -2
  33. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  34. package/dist/adapters/DatabaseAdapter.js +69 -40
  35. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  36. package/dist/adapters/mysql/MySQLAdapter.d.ts +14 -4
  37. package/dist/adapters/mysql/MySQLAdapter.d.ts.map +1 -1
  38. package/dist/adapters/mysql/MySQLAdapter.js +152 -116
  39. package/dist/adapters/mysql/MySQLAdapter.js.map +1 -1
  40. package/dist/adapters/mysql/SchemaManager.d.ts +1 -1
  41. package/dist/adapters/mysql/SchemaManager.d.ts.map +1 -1
  42. package/dist/adapters/mysql/SchemaManager.js +76 -56
  43. package/dist/adapters/mysql/SchemaManager.js.map +1 -1
  44. package/dist/adapters/mysql/index.d.ts +2 -2
  45. package/dist/adapters/mysql/index.js +2 -2
  46. package/dist/adapters/mysql/prompts/backupStrategy.d.ts +1 -1
  47. package/dist/adapters/mysql/prompts/backupStrategy.d.ts.map +1 -1
  48. package/dist/adapters/mysql/prompts/backupStrategy.js +21 -9
  49. package/dist/adapters/mysql/prompts/backupStrategy.js.map +1 -1
  50. package/dist/adapters/mysql/prompts/clusterSetup.d.ts +1 -1
  51. package/dist/adapters/mysql/prompts/clusterSetup.d.ts.map +1 -1
  52. package/dist/adapters/mysql/prompts/clusterSetup.js +3 -3
  53. package/dist/adapters/mysql/prompts/clusterSetup.js.map +1 -1
  54. package/dist/adapters/mysql/prompts/docstoreSetup.d.ts +1 -1
  55. package/dist/adapters/mysql/prompts/docstoreSetup.js +3 -3
  56. package/dist/adapters/mysql/prompts/docstoreSetup.js.map +1 -1
  57. package/dist/adapters/mysql/prompts/eventScheduler.d.ts +1 -1
  58. package/dist/adapters/mysql/prompts/eventScheduler.js +3 -3
  59. package/dist/adapters/mysql/prompts/eventScheduler.js.map +1 -1
  60. package/dist/adapters/mysql/prompts/healthCheck.d.ts +1 -1
  61. package/dist/adapters/mysql/prompts/healthCheck.d.ts.map +1 -1
  62. package/dist/adapters/mysql/prompts/healthCheck.js +10 -6
  63. package/dist/adapters/mysql/prompts/healthCheck.js.map +1 -1
  64. package/dist/adapters/mysql/prompts/index.d.ts +10 -3
  65. package/dist/adapters/mysql/prompts/index.d.ts.map +1 -1
  66. package/dist/adapters/mysql/prompts/index.js +106 -63
  67. package/dist/adapters/mysql/prompts/index.js.map +1 -1
  68. package/dist/adapters/mysql/prompts/indexTuning.d.ts +1 -1
  69. package/dist/adapters/mysql/prompts/indexTuning.d.ts.map +1 -1
  70. package/dist/adapters/mysql/prompts/indexTuning.js +11 -7
  71. package/dist/adapters/mysql/prompts/indexTuning.js.map +1 -1
  72. package/dist/adapters/mysql/prompts/mysqlshSetup.d.ts +1 -1
  73. package/dist/adapters/mysql/prompts/mysqlshSetup.js +4 -4
  74. package/dist/adapters/mysql/prompts/mysqlshSetup.js.map +1 -1
  75. package/dist/adapters/mysql/prompts/proxysqlSetup.d.ts +1 -1
  76. package/dist/adapters/mysql/prompts/proxysqlSetup.js +3 -3
  77. package/dist/adapters/mysql/prompts/proxysqlSetup.js.map +1 -1
  78. package/dist/adapters/mysql/prompts/replicationSetup.d.ts +1 -1
  79. package/dist/adapters/mysql/prompts/replicationSetup.d.ts.map +1 -1
  80. package/dist/adapters/mysql/prompts/replicationSetup.js +13 -7
  81. package/dist/adapters/mysql/prompts/replicationSetup.js.map +1 -1
  82. package/dist/adapters/mysql/prompts/routerSetup.d.ts +1 -1
  83. package/dist/adapters/mysql/prompts/routerSetup.d.ts.map +1 -1
  84. package/dist/adapters/mysql/prompts/routerSetup.js +8 -3
  85. package/dist/adapters/mysql/prompts/routerSetup.js.map +1 -1
  86. package/dist/adapters/mysql/prompts/spatialSetup.d.ts +1 -1
  87. package/dist/adapters/mysql/prompts/spatialSetup.js +3 -3
  88. package/dist/adapters/mysql/prompts/spatialSetup.js.map +1 -1
  89. package/dist/adapters/mysql/prompts/sysSchema.d.ts +1 -1
  90. package/dist/adapters/mysql/prompts/sysSchema.d.ts.map +1 -1
  91. package/dist/adapters/mysql/prompts/sysSchema.js +3 -3
  92. package/dist/adapters/mysql/prompts/sysSchema.js.map +1 -1
  93. package/dist/adapters/mysql/resources/capabilities.d.ts +2 -2
  94. package/dist/adapters/mysql/resources/capabilities.d.ts.map +1 -1
  95. package/dist/adapters/mysql/resources/capabilities.js +19 -16
  96. package/dist/adapters/mysql/resources/capabilities.js.map +1 -1
  97. package/dist/adapters/mysql/resources/cluster.d.ts +2 -2
  98. package/dist/adapters/mysql/resources/cluster.d.ts.map +1 -1
  99. package/dist/adapters/mysql/resources/cluster.js +17 -15
  100. package/dist/adapters/mysql/resources/cluster.js.map +1 -1
  101. package/dist/adapters/mysql/resources/docstore.d.ts +2 -2
  102. package/dist/adapters/mysql/resources/docstore.d.ts.map +1 -1
  103. package/dist/adapters/mysql/resources/docstore.js +12 -12
  104. package/dist/adapters/mysql/resources/docstore.js.map +1 -1
  105. package/dist/adapters/mysql/resources/events.d.ts +2 -2
  106. package/dist/adapters/mysql/resources/events.d.ts.map +1 -1
  107. package/dist/adapters/mysql/resources/events.js +12 -12
  108. package/dist/adapters/mysql/resources/events.js.map +1 -1
  109. package/dist/adapters/mysql/resources/health.d.ts +2 -2
  110. package/dist/adapters/mysql/resources/health.d.ts.map +1 -1
  111. package/dist/adapters/mysql/resources/health.js +36 -32
  112. package/dist/adapters/mysql/resources/health.js.map +1 -1
  113. package/dist/adapters/mysql/resources/index.d.ts +11 -3
  114. package/dist/adapters/mysql/resources/index.d.ts.map +1 -1
  115. package/dist/adapters/mysql/resources/index.js +28 -20
  116. package/dist/adapters/mysql/resources/index.js.map +1 -1
  117. package/dist/adapters/mysql/resources/indexes.d.ts +2 -2
  118. package/dist/adapters/mysql/resources/indexes.d.ts.map +1 -1
  119. package/dist/adapters/mysql/resources/indexes.js +12 -12
  120. package/dist/adapters/mysql/resources/indexes.js.map +1 -1
  121. package/dist/adapters/mysql/resources/innodb.d.ts +2 -2
  122. package/dist/adapters/mysql/resources/innodb.d.ts.map +1 -1
  123. package/dist/adapters/mysql/resources/innodb.js +37 -36
  124. package/dist/adapters/mysql/resources/innodb.js.map +1 -1
  125. package/dist/adapters/mysql/resources/locks.d.ts +2 -2
  126. package/dist/adapters/mysql/resources/locks.d.ts.map +1 -1
  127. package/dist/adapters/mysql/resources/locks.js +14 -14
  128. package/dist/adapters/mysql/resources/locks.js.map +1 -1
  129. package/dist/adapters/mysql/resources/performance.d.ts +2 -2
  130. package/dist/adapters/mysql/resources/performance.d.ts.map +1 -1
  131. package/dist/adapters/mysql/resources/performance.js +30 -29
  132. package/dist/adapters/mysql/resources/performance.js.map +1 -1
  133. package/dist/adapters/mysql/resources/pool.d.ts +2 -2
  134. package/dist/adapters/mysql/resources/pool.d.ts.map +1 -1
  135. package/dist/adapters/mysql/resources/pool.js +9 -9
  136. package/dist/adapters/mysql/resources/pool.js.map +1 -1
  137. package/dist/adapters/mysql/resources/processlist.d.ts +2 -2
  138. package/dist/adapters/mysql/resources/processlist.d.ts.map +1 -1
  139. package/dist/adapters/mysql/resources/processlist.js +9 -9
  140. package/dist/adapters/mysql/resources/processlist.js.map +1 -1
  141. package/dist/adapters/mysql/resources/replication.d.ts +2 -2
  142. package/dist/adapters/mysql/resources/replication.d.ts.map +1 -1
  143. package/dist/adapters/mysql/resources/replication.js +42 -35
  144. package/dist/adapters/mysql/resources/replication.js.map +1 -1
  145. package/dist/adapters/mysql/resources/schema.d.ts +2 -2
  146. package/dist/adapters/mysql/resources/schema.d.ts.map +1 -1
  147. package/dist/adapters/mysql/resources/schema.js +8 -8
  148. package/dist/adapters/mysql/resources/schema.js.map +1 -1
  149. package/dist/adapters/mysql/resources/spatial.d.ts +2 -2
  150. package/dist/adapters/mysql/resources/spatial.d.ts.map +1 -1
  151. package/dist/adapters/mysql/resources/spatial.js +9 -9
  152. package/dist/adapters/mysql/resources/spatial.js.map +1 -1
  153. package/dist/adapters/mysql/resources/status.d.ts +2 -2
  154. package/dist/adapters/mysql/resources/status.d.ts.map +1 -1
  155. package/dist/adapters/mysql/resources/status.js +10 -10
  156. package/dist/adapters/mysql/resources/status.js.map +1 -1
  157. package/dist/adapters/mysql/resources/sysschema.d.ts +2 -2
  158. package/dist/adapters/mysql/resources/sysschema.d.ts.map +1 -1
  159. package/dist/adapters/mysql/resources/sysschema.js +10 -10
  160. package/dist/adapters/mysql/resources/sysschema.js.map +1 -1
  161. package/dist/adapters/mysql/resources/tables.d.ts +2 -2
  162. package/dist/adapters/mysql/resources/tables.d.ts.map +1 -1
  163. package/dist/adapters/mysql/resources/tables.js +8 -8
  164. package/dist/adapters/mysql/resources/tables.js.map +1 -1
  165. package/dist/adapters/mysql/resources/variables.d.ts +2 -2
  166. package/dist/adapters/mysql/resources/variables.d.ts.map +1 -1
  167. package/dist/adapters/mysql/resources/variables.js +10 -10
  168. package/dist/adapters/mysql/resources/variables.js.map +1 -1
  169. package/dist/adapters/mysql/tools/admin/backup.d.ts +2 -2
  170. package/dist/adapters/mysql/tools/admin/backup.d.ts.map +1 -1
  171. package/dist/adapters/mysql/tools/admin/backup.js +193 -101
  172. package/dist/adapters/mysql/tools/admin/backup.js.map +1 -1
  173. package/dist/adapters/mysql/tools/admin/index.d.ts +2 -2
  174. package/dist/adapters/mysql/tools/admin/index.js +6 -6
  175. package/dist/adapters/mysql/tools/admin/index.js.map +1 -1
  176. package/dist/adapters/mysql/tools/admin/maintenance.d.ts +2 -2
  177. package/dist/adapters/mysql/tools/admin/maintenance.d.ts.map +1 -1
  178. package/dist/adapters/mysql/tools/admin/maintenance.js +97 -66
  179. package/dist/adapters/mysql/tools/admin/maintenance.js.map +1 -1
  180. package/dist/adapters/mysql/tools/admin/monitoring.d.ts +2 -2
  181. package/dist/adapters/mysql/tools/admin/monitoring.d.ts.map +1 -1
  182. package/dist/adapters/mysql/tools/admin/monitoring.js +215 -79
  183. package/dist/adapters/mysql/tools/admin/monitoring.js.map +1 -1
  184. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts +2 -2
  185. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts.map +1 -1
  186. package/dist/adapters/mysql/tools/cluster/group-replication.js +90 -74
  187. package/dist/adapters/mysql/tools/cluster/group-replication.js.map +1 -1
  188. package/dist/adapters/mysql/tools/cluster/index.d.ts +2 -2
  189. package/dist/adapters/mysql/tools/cluster/index.js +3 -3
  190. package/dist/adapters/mysql/tools/cluster/index.js.map +1 -1
  191. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts +2 -2
  192. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts.map +1 -1
  193. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js +225 -97
  194. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js.map +1 -1
  195. package/dist/adapters/mysql/tools/codemode/index.d.ts +38 -0
  196. package/dist/adapters/mysql/tools/codemode/index.d.ts.map +1 -0
  197. package/dist/adapters/mysql/tools/codemode/index.js +203 -0
  198. package/dist/adapters/mysql/tools/codemode/index.js.map +1 -0
  199. package/dist/adapters/mysql/tools/core.d.ts +2 -2
  200. package/dist/adapters/mysql/tools/core.d.ts.map +1 -1
  201. package/dist/adapters/mysql/tools/core.js +234 -114
  202. package/dist/adapters/mysql/tools/core.js.map +1 -1
  203. package/dist/adapters/mysql/tools/docstore.d.ts +2 -2
  204. package/dist/adapters/mysql/tools/docstore.d.ts.map +1 -1
  205. package/dist/adapters/mysql/tools/docstore.js +252 -117
  206. package/dist/adapters/mysql/tools/docstore.js.map +1 -1
  207. package/dist/adapters/mysql/tools/events.d.ts +2 -2
  208. package/dist/adapters/mysql/tools/events.d.ts.map +1 -1
  209. package/dist/adapters/mysql/tools/events.js +236 -113
  210. package/dist/adapters/mysql/tools/events.js.map +1 -1
  211. package/dist/adapters/mysql/tools/index.d.ts +19 -19
  212. package/dist/adapters/mysql/tools/index.d.ts.map +1 -1
  213. package/dist/adapters/mysql/tools/index.js +19 -19
  214. package/dist/adapters/mysql/tools/index.js.map +1 -1
  215. package/dist/adapters/mysql/tools/json/core.d.ts +2 -2
  216. package/dist/adapters/mysql/tools/json/core.d.ts.map +1 -1
  217. package/dist/adapters/mysql/tools/json/core.js +225 -131
  218. package/dist/adapters/mysql/tools/json/core.js.map +1 -1
  219. package/dist/adapters/mysql/tools/json/enhanced.d.ts +2 -2
  220. package/dist/adapters/mysql/tools/json/enhanced.d.ts.map +1 -1
  221. package/dist/adapters/mysql/tools/json/enhanced.js +274 -163
  222. package/dist/adapters/mysql/tools/json/enhanced.js.map +1 -1
  223. package/dist/adapters/mysql/tools/json/helpers.d.ts +2 -2
  224. package/dist/adapters/mysql/tools/json/helpers.d.ts.map +1 -1
  225. package/dist/adapters/mysql/tools/json/helpers.js +141 -57
  226. package/dist/adapters/mysql/tools/json/helpers.js.map +1 -1
  227. package/dist/adapters/mysql/tools/json/index.d.ts +2 -2
  228. package/dist/adapters/mysql/tools/json/index.js +6 -6
  229. package/dist/adapters/mysql/tools/json/index.js.map +1 -1
  230. package/dist/adapters/mysql/tools/partitioning.d.ts +2 -2
  231. package/dist/adapters/mysql/tools/partitioning.d.ts.map +1 -1
  232. package/dist/adapters/mysql/tools/partitioning.js +180 -64
  233. package/dist/adapters/mysql/tools/partitioning.js.map +1 -1
  234. package/dist/adapters/mysql/tools/performance/analysis.d.ts +2 -2
  235. package/dist/adapters/mysql/tools/performance/analysis.d.ts.map +1 -1
  236. package/dist/adapters/mysql/tools/performance/analysis.js +184 -101
  237. package/dist/adapters/mysql/tools/performance/analysis.js.map +1 -1
  238. package/dist/adapters/mysql/tools/performance/index.d.ts +2 -2
  239. package/dist/adapters/mysql/tools/performance/index.js +4 -4
  240. package/dist/adapters/mysql/tools/performance/index.js.map +1 -1
  241. package/dist/adapters/mysql/tools/performance/optimization.d.ts +3 -3
  242. package/dist/adapters/mysql/tools/performance/optimization.d.ts.map +1 -1
  243. package/dist/adapters/mysql/tools/performance/optimization.js +229 -77
  244. package/dist/adapters/mysql/tools/performance/optimization.js.map +1 -1
  245. package/dist/adapters/mysql/tools/proxysql.d.ts +2 -2
  246. package/dist/adapters/mysql/tools/proxysql.d.ts.map +1 -1
  247. package/dist/adapters/mysql/tools/proxysql.js +213 -125
  248. package/dist/adapters/mysql/tools/proxysql.js.map +1 -1
  249. package/dist/adapters/mysql/tools/replication.d.ts +2 -2
  250. package/dist/adapters/mysql/tools/replication.d.ts.map +1 -1
  251. package/dist/adapters/mysql/tools/replication.js +117 -66
  252. package/dist/adapters/mysql/tools/replication.js.map +1 -1
  253. package/dist/adapters/mysql/tools/roles.d.ts +2 -2
  254. package/dist/adapters/mysql/tools/roles.d.ts.map +1 -1
  255. package/dist/adapters/mysql/tools/roles.js +276 -84
  256. package/dist/adapters/mysql/tools/roles.js.map +1 -1
  257. package/dist/adapters/mysql/tools/router.d.ts +2 -2
  258. package/dist/adapters/mysql/tools/router.d.ts.map +1 -1
  259. package/dist/adapters/mysql/tools/router.js +174 -109
  260. package/dist/adapters/mysql/tools/router.js.map +1 -1
  261. package/dist/adapters/mysql/tools/schema/constraints.d.ts +2 -2
  262. package/dist/adapters/mysql/tools/schema/constraints.d.ts.map +1 -1
  263. package/dist/adapters/mysql/tools/schema/constraints.js +24 -15
  264. package/dist/adapters/mysql/tools/schema/constraints.js.map +1 -1
  265. package/dist/adapters/mysql/tools/schema/index.d.ts +2 -2
  266. package/dist/adapters/mysql/tools/schema/index.d.ts.map +1 -1
  267. package/dist/adapters/mysql/tools/schema/index.js +7 -7
  268. package/dist/adapters/mysql/tools/schema/index.js.map +1 -1
  269. package/dist/adapters/mysql/tools/schema/management.d.ts +2 -2
  270. package/dist/adapters/mysql/tools/schema/management.d.ts.map +1 -1
  271. package/dist/adapters/mysql/tools/schema/management.js +99 -42
  272. package/dist/adapters/mysql/tools/schema/management.js.map +1 -1
  273. package/dist/adapters/mysql/tools/schema/routines.d.ts +2 -2
  274. package/dist/adapters/mysql/tools/schema/routines.d.ts.map +1 -1
  275. package/dist/adapters/mysql/tools/schema/routines.js +36 -19
  276. package/dist/adapters/mysql/tools/schema/routines.js.map +1 -1
  277. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts +2 -2
  278. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts.map +1 -1
  279. package/dist/adapters/mysql/tools/schema/scheduled_events.js +26 -13
  280. package/dist/adapters/mysql/tools/schema/scheduled_events.js.map +1 -1
  281. package/dist/adapters/mysql/tools/schema/triggers.d.ts +2 -2
  282. package/dist/adapters/mysql/tools/schema/triggers.d.ts.map +1 -1
  283. package/dist/adapters/mysql/tools/schema/triggers.js +24 -13
  284. package/dist/adapters/mysql/tools/schema/triggers.js.map +1 -1
  285. package/dist/adapters/mysql/tools/schema/views.d.ts +2 -2
  286. package/dist/adapters/mysql/tools/schema/views.d.ts.map +1 -1
  287. package/dist/adapters/mysql/tools/schema/views.js +59 -28
  288. package/dist/adapters/mysql/tools/schema/views.js.map +1 -1
  289. package/dist/adapters/mysql/tools/security/audit.d.ts +2 -2
  290. package/dist/adapters/mysql/tools/security/audit.d.ts.map +1 -1
  291. package/dist/adapters/mysql/tools/security/audit.js +61 -55
  292. package/dist/adapters/mysql/tools/security/audit.js.map +1 -1
  293. package/dist/adapters/mysql/tools/security/data-protection.d.ts +2 -2
  294. package/dist/adapters/mysql/tools/security/data-protection.d.ts.map +1 -1
  295. package/dist/adapters/mysql/tools/security/data-protection.js +193 -80
  296. package/dist/adapters/mysql/tools/security/data-protection.js.map +1 -1
  297. package/dist/adapters/mysql/tools/security/encryption.d.ts +2 -2
  298. package/dist/adapters/mysql/tools/security/encryption.d.ts.map +1 -1
  299. package/dist/adapters/mysql/tools/security/encryption.js +86 -67
  300. package/dist/adapters/mysql/tools/security/encryption.js.map +1 -1
  301. package/dist/adapters/mysql/tools/security/index.d.ts +2 -2
  302. package/dist/adapters/mysql/tools/security/index.js +4 -4
  303. package/dist/adapters/mysql/tools/security/index.js.map +1 -1
  304. package/dist/adapters/mysql/tools/shell/backup.d.ts +1 -1
  305. package/dist/adapters/mysql/tools/shell/backup.d.ts.map +1 -1
  306. package/dist/adapters/mysql/tools/shell/backup.js +122 -63
  307. package/dist/adapters/mysql/tools/shell/backup.js.map +1 -1
  308. package/dist/adapters/mysql/tools/shell/common.d.ts.map +1 -1
  309. package/dist/adapters/mysql/tools/shell/common.js +61 -37
  310. package/dist/adapters/mysql/tools/shell/common.js.map +1 -1
  311. package/dist/adapters/mysql/tools/shell/data-transfer.d.ts +1 -1
  312. package/dist/adapters/mysql/tools/shell/data-transfer.d.ts.map +1 -1
  313. package/dist/adapters/mysql/tools/shell/data-transfer.js +125 -69
  314. package/dist/adapters/mysql/tools/shell/data-transfer.js.map +1 -1
  315. package/dist/adapters/mysql/tools/shell/index.d.ts +2 -2
  316. package/dist/adapters/mysql/tools/shell/index.js +6 -6
  317. package/dist/adapters/mysql/tools/shell/index.js.map +1 -1
  318. package/dist/adapters/mysql/tools/shell/info.d.ts +1 -1
  319. package/dist/adapters/mysql/tools/shell/info.d.ts.map +1 -1
  320. package/dist/adapters/mysql/tools/shell/info.js +12 -12
  321. package/dist/adapters/mysql/tools/shell/info.js.map +1 -1
  322. package/dist/adapters/mysql/tools/shell/restore.d.ts +1 -1
  323. package/dist/adapters/mysql/tools/shell/restore.d.ts.map +1 -1
  324. package/dist/adapters/mysql/tools/shell/restore.js +128 -43
  325. package/dist/adapters/mysql/tools/shell/restore.js.map +1 -1
  326. package/dist/adapters/mysql/tools/shell/utilities.d.ts +1 -1
  327. package/dist/adapters/mysql/tools/shell/utilities.d.ts.map +1 -1
  328. package/dist/adapters/mysql/tools/shell/utilities.js +42 -18
  329. package/dist/adapters/mysql/tools/shell/utilities.js.map +1 -1
  330. package/dist/adapters/mysql/tools/spatial/geometry.d.ts +2 -2
  331. package/dist/adapters/mysql/tools/spatial/geometry.d.ts.map +1 -1
  332. package/dist/adapters/mysql/tools/spatial/geometry.js +85 -46
  333. package/dist/adapters/mysql/tools/spatial/geometry.js.map +1 -1
  334. package/dist/adapters/mysql/tools/spatial/index.d.ts +2 -2
  335. package/dist/adapters/mysql/tools/spatial/index.js +5 -5
  336. package/dist/adapters/mysql/tools/spatial/index.js.map +1 -1
  337. package/dist/adapters/mysql/tools/spatial/operations.d.ts +2 -2
  338. package/dist/adapters/mysql/tools/spatial/operations.d.ts.map +1 -1
  339. package/dist/adapters/mysql/tools/spatial/operations.js +175 -106
  340. package/dist/adapters/mysql/tools/spatial/operations.js.map +1 -1
  341. package/dist/adapters/mysql/tools/spatial/queries.d.ts +2 -2
  342. package/dist/adapters/mysql/tools/spatial/queries.d.ts.map +1 -1
  343. package/dist/adapters/mysql/tools/spatial/queries.js +144 -100
  344. package/dist/adapters/mysql/tools/spatial/queries.js.map +1 -1
  345. package/dist/adapters/mysql/tools/spatial/setup.d.ts +2 -2
  346. package/dist/adapters/mysql/tools/spatial/setup.d.ts.map +1 -1
  347. package/dist/adapters/mysql/tools/spatial/setup.js +122 -34
  348. package/dist/adapters/mysql/tools/spatial/setup.js.map +1 -1
  349. package/dist/adapters/mysql/tools/stats/comparative.d.ts +2 -2
  350. package/dist/adapters/mysql/tools/stats/comparative.d.ts.map +1 -1
  351. package/dist/adapters/mysql/tools/stats/comparative.js +159 -107
  352. package/dist/adapters/mysql/tools/stats/comparative.js.map +1 -1
  353. package/dist/adapters/mysql/tools/stats/descriptive.d.ts +2 -2
  354. package/dist/adapters/mysql/tools/stats/descriptive.d.ts.map +1 -1
  355. package/dist/adapters/mysql/tools/stats/descriptive.js +268 -205
  356. package/dist/adapters/mysql/tools/stats/descriptive.js.map +1 -1
  357. package/dist/adapters/mysql/tools/stats/index.d.ts +2 -2
  358. package/dist/adapters/mysql/tools/stats/index.js +3 -3
  359. package/dist/adapters/mysql/tools/stats/index.js.map +1 -1
  360. package/dist/adapters/mysql/tools/sysschema/activity.d.ts +2 -2
  361. package/dist/adapters/mysql/tools/sysschema/activity.d.ts.map +1 -1
  362. package/dist/adapters/mysql/tools/sysschema/activity.js +23 -23
  363. package/dist/adapters/mysql/tools/sysschema/activity.js.map +1 -1
  364. package/dist/adapters/mysql/tools/sysschema/index.d.ts +2 -2
  365. package/dist/adapters/mysql/tools/sysschema/index.js +4 -4
  366. package/dist/adapters/mysql/tools/sysschema/index.js.map +1 -1
  367. package/dist/adapters/mysql/tools/sysschema/performance.d.ts +2 -2
  368. package/dist/adapters/mysql/tools/sysschema/performance.d.ts.map +1 -1
  369. package/dist/adapters/mysql/tools/sysschema/performance.js +58 -43
  370. package/dist/adapters/mysql/tools/sysschema/performance.js.map +1 -1
  371. package/dist/adapters/mysql/tools/sysschema/resources.d.ts +2 -2
  372. package/dist/adapters/mysql/tools/sysschema/resources.d.ts.map +1 -1
  373. package/dist/adapters/mysql/tools/sysschema/resources.js +58 -33
  374. package/dist/adapters/mysql/tools/sysschema/resources.js.map +1 -1
  375. package/dist/adapters/mysql/tools/text/fulltext.d.ts +4 -3
  376. package/dist/adapters/mysql/tools/text/fulltext.d.ts.map +1 -1
  377. package/dist/adapters/mysql/tools/text/fulltext.js +214 -55
  378. package/dist/adapters/mysql/tools/text/fulltext.js.map +1 -1
  379. package/dist/adapters/mysql/tools/text/index.d.ts +3 -3
  380. package/dist/adapters/mysql/tools/text/index.d.ts.map +1 -1
  381. package/dist/adapters/mysql/tools/text/index.js +6 -5
  382. package/dist/adapters/mysql/tools/text/index.js.map +1 -1
  383. package/dist/adapters/mysql/tools/text/processing.d.ts +2 -2
  384. package/dist/adapters/mysql/tools/text/processing.d.ts.map +1 -1
  385. package/dist/adapters/mysql/tools/text/processing.js +175 -122
  386. package/dist/adapters/mysql/tools/text/processing.js.map +1 -1
  387. package/dist/adapters/mysql/tools/transactions.d.ts +2 -2
  388. package/dist/adapters/mysql/tools/transactions.d.ts.map +1 -1
  389. package/dist/adapters/mysql/tools/transactions.js +162 -85
  390. package/dist/adapters/mysql/tools/transactions.js.map +1 -1
  391. package/dist/adapters/mysql/types/proxysql-types.d.ts +7 -2
  392. package/dist/adapters/mysql/types/proxysql-types.d.ts.map +1 -1
  393. package/dist/adapters/mysql/types/proxysql-types.js +52 -30
  394. package/dist/adapters/mysql/types/proxysql-types.js.map +1 -1
  395. package/dist/adapters/mysql/types/router-types.d.ts +1 -1
  396. package/dist/adapters/mysql/types/router-types.js +17 -17
  397. package/dist/adapters/mysql/types/router-types.js.map +1 -1
  398. package/dist/adapters/mysql/types/shell-types.d.ts +1 -2
  399. package/dist/adapters/mysql/types/shell-types.d.ts.map +1 -1
  400. package/dist/adapters/mysql/types/shell-types.js +255 -82
  401. package/dist/adapters/mysql/types/shell-types.js.map +1 -1
  402. package/dist/adapters/mysql/types.d.ts +976 -80
  403. package/dist/adapters/mysql/types.d.ts.map +1 -1
  404. package/dist/adapters/mysql/types.js +1317 -170
  405. package/dist/adapters/mysql/types.js.map +1 -1
  406. package/dist/auth/AuthorizationServerDiscovery.d.ts +1 -1
  407. package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -1
  408. package/dist/auth/AuthorizationServerDiscovery.js +16 -14
  409. package/dist/auth/AuthorizationServerDiscovery.js.map +1 -1
  410. package/dist/auth/OAuthResourceServer.d.ts +1 -1
  411. package/dist/auth/OAuthResourceServer.d.ts.map +1 -1
  412. package/dist/auth/OAuthResourceServer.js +4 -4
  413. package/dist/auth/OAuthResourceServer.js.map +1 -1
  414. package/dist/auth/TokenValidator.d.ts +1 -1
  415. package/dist/auth/TokenValidator.d.ts.map +1 -1
  416. package/dist/auth/TokenValidator.js +30 -20
  417. package/dist/auth/TokenValidator.js.map +1 -1
  418. package/dist/auth/errors.d.ts.map +1 -1
  419. package/dist/auth/errors.js +24 -24
  420. package/dist/auth/errors.js.map +1 -1
  421. package/dist/auth/index.d.ts +7 -7
  422. package/dist/auth/index.d.ts.map +1 -1
  423. package/dist/auth/index.js +6 -6
  424. package/dist/auth/index.js.map +1 -1
  425. package/dist/auth/middleware.d.ts +2 -2
  426. package/dist/auth/middleware.d.ts.map +1 -1
  427. package/dist/auth/middleware.js +28 -24
  428. package/dist/auth/middleware.js.map +1 -1
  429. package/dist/auth/scopes.d.ts +2 -2
  430. package/dist/auth/scopes.d.ts.map +1 -1
  431. package/dist/auth/scopes.js +23 -16
  432. package/dist/auth/scopes.js.map +1 -1
  433. package/dist/auth/types.d.ts +2 -2
  434. package/dist/auth/types.d.ts.map +1 -1
  435. package/dist/cli/args.d.ts +1 -1
  436. package/dist/cli/args.d.ts.map +1 -1
  437. package/dist/cli/args.js +82 -68
  438. package/dist/cli/args.js.map +1 -1
  439. package/dist/cli.d.ts +1 -1
  440. package/dist/cli.d.ts.map +1 -1
  441. package/dist/cli.js +44 -34
  442. package/dist/cli.js.map +1 -1
  443. package/dist/codemode/api.d.ts +69 -0
  444. package/dist/codemode/api.d.ts.map +1 -0
  445. package/dist/codemode/api.js +1035 -0
  446. package/dist/codemode/api.js.map +1 -0
  447. package/dist/codemode/index.d.ts +13 -0
  448. package/dist/codemode/index.d.ts.map +1 -0
  449. package/dist/codemode/index.js +17 -0
  450. package/dist/codemode/index.js.map +1 -0
  451. package/dist/codemode/sandbox-factory.d.ts +72 -0
  452. package/dist/codemode/sandbox-factory.d.ts.map +1 -0
  453. package/dist/codemode/sandbox-factory.js +88 -0
  454. package/dist/codemode/sandbox-factory.js.map +1 -0
  455. package/dist/codemode/sandbox.d.ts +96 -0
  456. package/dist/codemode/sandbox.d.ts.map +1 -0
  457. package/dist/codemode/sandbox.js +345 -0
  458. package/dist/codemode/sandbox.js.map +1 -0
  459. package/dist/codemode/security.d.ts +44 -0
  460. package/dist/codemode/security.d.ts.map +1 -0
  461. package/dist/codemode/security.js +149 -0
  462. package/dist/codemode/security.js.map +1 -0
  463. package/dist/codemode/types.d.ts +137 -0
  464. package/dist/codemode/types.d.ts.map +1 -0
  465. package/dist/codemode/types.js +46 -0
  466. package/dist/codemode/types.js.map +1 -0
  467. package/dist/codemode/worker-sandbox.d.ts +82 -0
  468. package/dist/codemode/worker-sandbox.d.ts.map +1 -0
  469. package/dist/codemode/worker-sandbox.js +244 -0
  470. package/dist/codemode/worker-sandbox.js.map +1 -0
  471. package/dist/codemode/worker-script.d.ts +8 -0
  472. package/dist/codemode/worker-script.d.ts.map +1 -0
  473. package/dist/codemode/worker-script.js +113 -0
  474. package/dist/codemode/worker-script.js.map +1 -0
  475. package/dist/constants/ServerInstructions.d.ts +2 -2
  476. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  477. package/dist/constants/ServerInstructions.js +252 -36
  478. package/dist/constants/ServerInstructions.js.map +1 -1
  479. package/dist/filtering/ToolConstants.d.ts +12 -12
  480. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  481. package/dist/filtering/ToolConstants.js +253 -214
  482. package/dist/filtering/ToolConstants.js.map +1 -1
  483. package/dist/filtering/ToolFilter.d.ts +2 -2
  484. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  485. package/dist/filtering/ToolFilter.js +47 -36
  486. package/dist/filtering/ToolFilter.js.map +1 -1
  487. package/dist/index.d.ts +9 -9
  488. package/dist/index.d.ts.map +1 -1
  489. package/dist/index.js +7 -7
  490. package/dist/index.js.map +1 -1
  491. package/dist/logging/McpLogging.d.ts +2 -2
  492. package/dist/logging/McpLogging.d.ts.map +1 -1
  493. package/dist/logging/McpLogging.js +16 -13
  494. package/dist/logging/McpLogging.js.map +1 -1
  495. package/dist/logging/index.d.ts +1 -1
  496. package/dist/logging/index.js +1 -1
  497. package/dist/pool/ConnectionPool.d.ts +3 -3
  498. package/dist/pool/ConnectionPool.d.ts.map +1 -1
  499. package/dist/pool/ConnectionPool.js +30 -26
  500. package/dist/pool/ConnectionPool.js.map +1 -1
  501. package/dist/progress/ProgressReporter.d.ts +1 -1
  502. package/dist/progress/ProgressReporter.d.ts.map +1 -1
  503. package/dist/progress/ProgressReporter.js +5 -5
  504. package/dist/progress/ProgressReporter.js.map +1 -1
  505. package/dist/progress/index.d.ts +1 -1
  506. package/dist/progress/index.d.ts.map +1 -1
  507. package/dist/progress/index.js +1 -1
  508. package/dist/progress/index.js.map +1 -1
  509. package/dist/server/McpServer.d.ts +3 -3
  510. package/dist/server/McpServer.d.ts.map +1 -1
  511. package/dist/server/McpServer.js +58 -53
  512. package/dist/server/McpServer.js.map +1 -1
  513. package/dist/transports/http.d.ts +3 -3
  514. package/dist/transports/http.d.ts.map +1 -1
  515. package/dist/transports/http.js +36 -33
  516. package/dist/transports/http.js.map +1 -1
  517. package/dist/transports/index.d.ts +1 -1
  518. package/dist/transports/index.d.ts.map +1 -1
  519. package/dist/transports/index.js +1 -1
  520. package/dist/transports/index.js.map +1 -1
  521. package/dist/types/index.d.ts +6 -6
  522. package/dist/types/index.d.ts.map +1 -1
  523. package/dist/types/index.js +1 -1
  524. package/dist/types/index.js.map +1 -1
  525. package/dist/types/modules/database.d.ts +1 -1
  526. package/dist/types/modules/database.d.ts.map +1 -1
  527. package/dist/types/modules/errors.d.ts.map +1 -1
  528. package/dist/types/modules/errors.js +15 -15
  529. package/dist/types/modules/errors.js.map +1 -1
  530. package/dist/types/modules/oauth.d.ts +1 -1
  531. package/dist/types/modules/oauth.d.ts.map +1 -1
  532. package/dist/types/modules/query.d.ts +8 -8
  533. package/dist/types/modules/query.d.ts.map +1 -1
  534. package/dist/types/modules/server.d.ts +5 -3
  535. package/dist/types/modules/server.d.ts.map +1 -1
  536. package/dist/types/modules/tools.d.ts +6 -6
  537. package/dist/types/modules/tools.d.ts.map +1 -1
  538. package/dist/utils/logger.d.ts +2 -2
  539. package/dist/utils/logger.d.ts.map +1 -1
  540. package/dist/utils/logger.js +58 -55
  541. package/dist/utils/logger.js.map +1 -1
  542. package/dist/utils/promptGenerator.d.ts +1 -1
  543. package/dist/utils/promptGenerator.d.ts.map +1 -1
  544. package/dist/utils/promptGenerator.js +24 -16
  545. package/dist/utils/promptGenerator.js.map +1 -1
  546. package/dist/utils/validators.d.ts +21 -2
  547. package/dist/utils/validators.d.ts.map +1 -1
  548. package/dist/utils/validators.js +101 -13
  549. package/dist/utils/validators.js.map +1 -1
  550. package/eslint.config.js +117 -81
  551. package/package.json +66 -64
  552. package/releases/release-notes.md +32 -26
  553. package/releases/v2.0.0-release-notes.md +99 -51
  554. package/releases/v2.1.0-release-notes.md +14 -5
  555. package/releases/v2.2.0-release-notes.md +239 -0
  556. package/releases/v2.3.0-release-notes.md +191 -0
  557. package/server.json +1 -1
  558. package/src/__tests__/cli.test.ts +302 -247
  559. package/src/__tests__/index.test.ts +21 -21
  560. package/src/__tests__/mocks/adapter.ts +204 -163
  561. package/src/__tests__/mocks/index.ts +30 -23
  562. package/src/__tests__/mocks/mysql.ts +94 -84
  563. package/src/__tests__/perf.test.ts +207 -203
  564. package/src/__tests__/performance.test.ts +173 -164
  565. package/src/__tests__/setup.ts +26 -21
  566. package/src/adapters/DatabaseAdapter.ts +386 -340
  567. package/src/adapters/__tests__/DatabaseAdapter.test.ts +455 -377
  568. package/src/adapters/mysql/MySQLAdapter.ts +560 -486
  569. package/src/adapters/mysql/SchemaManager.ts +251 -208
  570. package/src/adapters/mysql/__tests__/MySQLAdapter.integration.test.ts +150 -147
  571. package/src/adapters/mysql/__tests__/MySQLAdapter.test.ts +590 -477
  572. package/src/adapters/mysql/__tests__/SchemaManager.test.ts +196 -154
  573. package/src/adapters/mysql/index.ts +2 -2
  574. package/src/adapters/mysql/prompts/__tests__/indexTuning.test.ts +33 -26
  575. package/src/adapters/mysql/prompts/__tests__/prompts.test.ts +277 -239
  576. package/src/adapters/mysql/prompts/backupStrategy.ts +29 -17
  577. package/src/adapters/mysql/prompts/clusterSetup.ts +11 -10
  578. package/src/adapters/mysql/prompts/docstoreSetup.ts +10 -10
  579. package/src/adapters/mysql/prompts/eventScheduler.ts +10 -10
  580. package/src/adapters/mysql/prompts/healthCheck.ts +20 -15
  581. package/src/adapters/mysql/prompts/index.ts +202 -145
  582. package/src/adapters/mysql/prompts/indexTuning.ts +22 -17
  583. package/src/adapters/mysql/prompts/mysqlshSetup.ts +11 -11
  584. package/src/adapters/mysql/prompts/proxysqlSetup.ts +10 -10
  585. package/src/adapters/mysql/prompts/replicationSetup.ts +24 -16
  586. package/src/adapters/mysql/prompts/routerSetup.ts +15 -10
  587. package/src/adapters/mysql/prompts/spatialSetup.ts +10 -10
  588. package/src/adapters/mysql/prompts/sysSchema.ts +11 -10
  589. package/src/adapters/mysql/resources/__tests__/capabilities.test.ts +118 -47
  590. package/src/adapters/mysql/resources/__tests__/cluster.test.ts +163 -104
  591. package/src/adapters/mysql/resources/__tests__/docstore.test.ts +88 -81
  592. package/src/adapters/mysql/resources/__tests__/events.test.ts +94 -83
  593. package/src/adapters/mysql/resources/__tests__/health.test.ts +131 -91
  594. package/src/adapters/mysql/resources/__tests__/indexes.test.ts +125 -102
  595. package/src/adapters/mysql/resources/__tests__/innodb.test.ts +86 -62
  596. package/src/adapters/mysql/resources/__tests__/locks.test.ts +142 -104
  597. package/src/adapters/mysql/resources/__tests__/performance.test.ts +81 -58
  598. package/src/adapters/mysql/resources/__tests__/pool.test.ts +45 -40
  599. package/src/adapters/mysql/resources/__tests__/processlist.test.ts +39 -23
  600. package/src/adapters/mysql/resources/__tests__/replication.test.ts +265 -211
  601. package/src/adapters/mysql/resources/__tests__/resources.test.ts +121 -109
  602. package/src/adapters/mysql/resources/__tests__/schema.test.ts +29 -23
  603. package/src/adapters/mysql/resources/__tests__/spatial.test.ts +58 -45
  604. package/src/adapters/mysql/resources/__tests__/status.test.ts +62 -45
  605. package/src/adapters/mysql/resources/__tests__/sysschema.test.ts +99 -60
  606. package/src/adapters/mysql/resources/__tests__/tables.test.ts +41 -32
  607. package/src/adapters/mysql/resources/__tests__/variables.test.ts +77 -49
  608. package/src/adapters/mysql/resources/capabilities.ts +61 -42
  609. package/src/adapters/mysql/resources/cluster.ts +58 -49
  610. package/src/adapters/mysql/resources/docstore.ts +46 -41
  611. package/src/adapters/mysql/resources/events.ts +37 -31
  612. package/src/adapters/mysql/resources/health.ts +98 -74
  613. package/src/adapters/mysql/resources/index.ts +55 -47
  614. package/src/adapters/mysql/resources/indexes.ts +66 -51
  615. package/src/adapters/mysql/resources/innodb.ts +98 -81
  616. package/src/adapters/mysql/resources/locks.ts +43 -40
  617. package/src/adapters/mysql/resources/performance.ts +80 -67
  618. package/src/adapters/mysql/resources/pool.ts +23 -20
  619. package/src/adapters/mysql/resources/processlist.ts +23 -18
  620. package/src/adapters/mysql/resources/replication.ts +124 -105
  621. package/src/adapters/mysql/resources/schema.ts +23 -18
  622. package/src/adapters/mysql/resources/spatial.ts +31 -26
  623. package/src/adapters/mysql/resources/status.ts +27 -22
  624. package/src/adapters/mysql/resources/sysschema.ts +41 -36
  625. package/src/adapters/mysql/resources/tables.ts +23 -18
  626. package/src/adapters/mysql/resources/variables.ts +27 -22
  627. package/src/adapters/mysql/tools/__tests__/cluster.test.ts +419 -311
  628. package/src/adapters/mysql/tools/__tests__/core.test.ts +701 -382
  629. package/src/adapters/mysql/tools/__tests__/docstore.test.ts +782 -413
  630. package/src/adapters/mysql/tools/__tests__/events.test.ts +806 -486
  631. package/src/adapters/mysql/tools/__tests__/json_core.test.ts +326 -259
  632. package/src/adapters/mysql/tools/__tests__/json_enhanced.test.ts +452 -352
  633. package/src/adapters/mysql/tools/__tests__/json_helpers.test.ts +203 -128
  634. package/src/adapters/mysql/tools/__tests__/proxysql.test.ts +576 -340
  635. package/src/adapters/mysql/tools/__tests__/replication.test.ts +796 -390
  636. package/src/adapters/mysql/tools/__tests__/roles.test.ts +423 -166
  637. package/src/adapters/mysql/tools/__tests__/router.test.ts +644 -540
  638. package/src/adapters/mysql/tools/__tests__/security.test.ts +746 -421
  639. package/src/adapters/mysql/tools/__tests__/security_injection.test.ts +246 -173
  640. package/src/adapters/mysql/tools/__tests__/security_integration.test.ts +244 -205
  641. package/src/adapters/mysql/tools/__tests__/spatial.test.ts +443 -298
  642. package/src/adapters/mysql/tools/__tests__/spatial_handler.test.ts +535 -150
  643. package/src/adapters/mysql/tools/__tests__/stats.test.ts +861 -553
  644. package/src/adapters/mysql/tools/__tests__/transactions.test.ts +452 -263
  645. package/src/adapters/mysql/tools/admin/__tests__/backup.test.ts +612 -372
  646. package/src/adapters/mysql/tools/admin/__tests__/maintenance.test.ts +550 -257
  647. package/src/adapters/mysql/tools/admin/__tests__/monitoring.test.ts +549 -352
  648. package/src/adapters/mysql/tools/admin/backup.ts +339 -215
  649. package/src/adapters/mysql/tools/admin/index.ts +46 -46
  650. package/src/adapters/mysql/tools/admin/maintenance.ts +180 -130
  651. package/src/adapters/mysql/tools/admin/monitoring.ts +373 -199
  652. package/src/adapters/mysql/tools/cluster/__tests__/group-replication.test.ts +200 -186
  653. package/src/adapters/mysql/tools/cluster/__tests__/innodb-cluster.test.ts +399 -95
  654. package/src/adapters/mysql/tools/cluster/group-replication.ts +218 -183
  655. package/src/adapters/mysql/tools/cluster/index.ts +27 -27
  656. package/src/adapters/mysql/tools/cluster/innodb-cluster.ts +413 -251
  657. package/src/adapters/mysql/tools/codemode/index.ts +249 -0
  658. package/src/adapters/mysql/tools/core.ts +425 -285
  659. package/src/adapters/mysql/tools/docstore.ts +478 -276
  660. package/src/adapters/mysql/tools/events.ts +441 -285
  661. package/src/adapters/mysql/tools/index.ts +31 -20
  662. package/src/adapters/mysql/tools/json/__tests__/core.test.ts +456 -199
  663. package/src/adapters/mysql/tools/json/__tests__/enhanced.test.ts +554 -298
  664. package/src/adapters/mysql/tools/json/__tests__/helpers.test.ts +195 -74
  665. package/src/adapters/mysql/tools/json/__tests__/validation.test.ts +106 -72
  666. package/src/adapters/mysql/tools/json/core.ts +368 -263
  667. package/src/adapters/mysql/tools/json/enhanced.ts +368 -229
  668. package/src/adapters/mysql/tools/json/helpers.ts +205 -113
  669. package/src/adapters/mysql/tools/json/index.ts +46 -46
  670. package/src/adapters/mysql/tools/partitioning.ts +289 -140
  671. package/src/adapters/mysql/tools/performance/__tests__/analysis.test.ts +664 -249
  672. package/src/adapters/mysql/tools/performance/__tests__/optimization.test.ts +436 -179
  673. package/src/adapters/mysql/tools/performance/analysis.ts +319 -215
  674. package/src/adapters/mysql/tools/performance/index.ts +33 -33
  675. package/src/adapters/mysql/tools/performance/optimization.ts +438 -183
  676. package/src/adapters/mysql/tools/proxysql.ts +462 -320
  677. package/src/adapters/mysql/tools/replication.ts +233 -180
  678. package/src/adapters/mysql/tools/roles.ts +429 -171
  679. package/src/adapters/mysql/tools/router.ts +410 -292
  680. package/src/adapters/mysql/tools/schema/__tests__/constraints.test.ts +157 -82
  681. package/src/adapters/mysql/tools/schema/__tests__/management.test.ts +226 -101
  682. package/src/adapters/mysql/tools/schema/__tests__/routines.test.ts +80 -35
  683. package/src/adapters/mysql/tools/schema/__tests__/scheduled_events.test.ts +59 -40
  684. package/src/adapters/mysql/tools/schema/__tests__/triggers.test.ts +65 -40
  685. package/src/adapters/mysql/tools/schema/__tests__/views.test.ts +146 -77
  686. package/src/adapters/mysql/tools/schema/constraints.ts +61 -42
  687. package/src/adapters/mysql/tools/schema/index.ts +26 -35
  688. package/src/adapters/mysql/tools/schema/management.ts +167 -94
  689. package/src/adapters/mysql/tools/schema/routines.ts +79 -48
  690. package/src/adapters/mysql/tools/schema/scheduled_events.ts +53 -32
  691. package/src/adapters/mysql/tools/schema/triggers.ts +51 -33
  692. package/src/adapters/mysql/tools/schema/views.ts +96 -53
  693. package/src/adapters/mysql/tools/security/__tests__/audit.test.ts +216 -158
  694. package/src/adapters/mysql/tools/security/__tests__/data-protection.test.ts +154 -98
  695. package/src/adapters/mysql/tools/security/__tests__/encryption.test.ts +174 -138
  696. package/src/adapters/mysql/tools/security/audit.ts +213 -193
  697. package/src/adapters/mysql/tools/security/data-protection.ts +342 -198
  698. package/src/adapters/mysql/tools/security/encryption.ts +233 -193
  699. package/src/adapters/mysql/tools/security/index.ts +26 -26
  700. package/src/adapters/mysql/tools/shell/__tests__/backup.test.ts +443 -283
  701. package/src/adapters/mysql/tools/shell/__tests__/common.test.ts +183 -130
  702. package/src/adapters/mysql/tools/shell/__tests__/data-transfer.test.ts +516 -353
  703. package/src/adapters/mysql/tools/shell/__tests__/info.test.ts +65 -63
  704. package/src/adapters/mysql/tools/shell/__tests__/restore.test.ts +260 -174
  705. package/src/adapters/mysql/tools/shell/__tests__/utilities.test.ts +161 -143
  706. package/src/adapters/mysql/tools/shell/backup.ts +280 -188
  707. package/src/adapters/mysql/tools/shell/common.ts +203 -153
  708. package/src/adapters/mysql/tools/shell/data-transfer.ts +286 -200
  709. package/src/adapters/mysql/tools/shell/index.ts +29 -29
  710. package/src/adapters/mysql/tools/shell/info.ts +35 -31
  711. package/src/adapters/mysql/tools/shell/restore.ts +236 -121
  712. package/src/adapters/mysql/tools/shell/utilities.ts +86 -45
  713. package/src/adapters/mysql/tools/spatial/__tests__/geometry.test.ts +129 -89
  714. package/src/adapters/mysql/tools/spatial/__tests__/operations.test.ts +284 -148
  715. package/src/adapters/mysql/tools/spatial/__tests__/queries.test.ts +340 -245
  716. package/src/adapters/mysql/tools/spatial/geometry.ts +120 -74
  717. package/src/adapters/mysql/tools/spatial/index.ts +33 -33
  718. package/src/adapters/mysql/tools/spatial/operations.ts +254 -171
  719. package/src/adapters/mysql/tools/spatial/queries.ts +221 -165
  720. package/src/adapters/mysql/tools/spatial/setup.ts +180 -73
  721. package/src/adapters/mysql/tools/stats/__tests__/comparative.test.ts +188 -130
  722. package/src/adapters/mysql/tools/stats/comparative.ts +261 -187
  723. package/src/adapters/mysql/tools/stats/descriptive.ts +414 -322
  724. package/src/adapters/mysql/tools/stats/index.ts +23 -23
  725. package/src/adapters/mysql/tools/sysschema/__tests__/activity.test.ts +99 -71
  726. package/src/adapters/mysql/tools/sysschema/__tests__/io_summary_fix.test.ts +21 -18
  727. package/src/adapters/mysql/tools/sysschema/__tests__/performance.test.ts +149 -108
  728. package/src/adapters/mysql/tools/sysschema/__tests__/resources.test.ts +243 -104
  729. package/src/adapters/mysql/tools/sysschema/activity.ts +72 -64
  730. package/src/adapters/mysql/tools/sysschema/index.ts +24 -24
  731. package/src/adapters/mysql/tools/sysschema/performance.ts +140 -115
  732. package/src/adapters/mysql/tools/sysschema/resources.ts +140 -99
  733. package/src/adapters/mysql/tools/text/__tests__/fulltext.test.ts +526 -145
  734. package/src/adapters/mysql/tools/text/__tests__/processing.test.ts +452 -193
  735. package/src/adapters/mysql/tools/text/fulltext.ts +327 -123
  736. package/src/adapters/mysql/tools/text/index.ts +32 -30
  737. package/src/adapters/mysql/tools/text/processing.ts +281 -212
  738. package/src/adapters/mysql/tools/transactions.ts +288 -197
  739. package/src/adapters/mysql/types/__tests__/shell-types.test.ts +204 -202
  740. package/src/adapters/mysql/types/proxysql-types.ts +142 -109
  741. package/src/adapters/mysql/types/router-types.ts +36 -36
  742. package/src/adapters/mysql/types/shell-types.ts +280 -94
  743. package/src/adapters/mysql/types.ts +1475 -164
  744. package/src/auth/AuthorizationServerDiscovery.ts +127 -113
  745. package/src/auth/OAuthResourceServer.ts +67 -62
  746. package/src/auth/TokenValidator.ts +136 -119
  747. package/src/auth/__tests__/AuthorizationServerDiscovery.test.ts +295 -274
  748. package/src/auth/__tests__/OAuthResourceServer.test.ts +180 -169
  749. package/src/auth/__tests__/TokenValidator.test.ts +297 -285
  750. package/src/auth/__tests__/errors.test.ts +180 -175
  751. package/src/auth/__tests__/middleware.test.ts +281 -247
  752. package/src/auth/__tests__/scopes.test.ts +136 -134
  753. package/src/auth/errors.ts +56 -56
  754. package/src/auth/index.ts +23 -17
  755. package/src/auth/middleware.ts +161 -139
  756. package/src/auth/scopes.ts +134 -107
  757. package/src/auth/types.ts +155 -155
  758. package/src/cli/__tests__/args.test.ts +241 -216
  759. package/src/cli/__tests__/main.test.ts +191 -158
  760. package/src/cli/args.ts +285 -258
  761. package/src/cli.ts +150 -127
  762. package/src/codemode/api.ts +1224 -0
  763. package/src/codemode/index.ts +51 -0
  764. package/src/codemode/sandbox-factory.ts +146 -0
  765. package/src/codemode/sandbox.ts +450 -0
  766. package/src/codemode/security.ts +188 -0
  767. package/src/codemode/types.ts +194 -0
  768. package/src/codemode/worker-sandbox.ts +326 -0
  769. package/src/codemode/worker-script.ts +144 -0
  770. package/src/constants/ServerInstructions.ts +295 -70
  771. package/src/filtering/ToolConstants.ts +311 -272
  772. package/src/filtering/ToolFilter.ts +254 -220
  773. package/src/filtering/__tests__/ToolFilter.test.ts +469 -396
  774. package/src/index.ts +62 -57
  775. package/src/logging/McpLogging.ts +128 -119
  776. package/src/logging/__tests__/McpLogging.test.ts +223 -223
  777. package/src/logging/index.ts +2 -2
  778. package/src/pool/ConnectionPool.ts +260 -246
  779. package/src/pool/__tests__/ConnectionPool.test.ts +452 -418
  780. package/src/progress/ProgressReporter.ts +123 -123
  781. package/src/progress/__tests__/ProgressReporter.test.ts +235 -229
  782. package/src/progress/index.ts +6 -2
  783. package/src/server/McpServer.ts +305 -285
  784. package/src/server/__tests__/McpServer.test.ts +333 -291
  785. package/src/transports/__tests__/http.test.ts +658 -527
  786. package/src/transports/http.ts +237 -203
  787. package/src/transports/index.ts +6 -2
  788. package/src/types/__tests__/types.test.ts +197 -193
  789. package/src/types/index.ts +49 -37
  790. package/src/types/modules/database.ts +65 -63
  791. package/src/types/modules/errors.ts +41 -37
  792. package/src/types/modules/oauth.ts +46 -46
  793. package/src/types/modules/query.ts +75 -75
  794. package/src/types/modules/server.ts +21 -18
  795. package/src/types/modules/tools.ts +182 -178
  796. package/src/utils/__tests__/logger.test.ts +424 -414
  797. package/src/utils/__tests__/validators.test.ts +250 -165
  798. package/src/utils/logger.ts +344 -330
  799. package/src/utils/promptGenerator.ts +58 -47
  800. package/src/utils/validators.ts +217 -91
  801. package/tsconfig.json +41 -50
  802. package/vitest.config.ts +23 -23
@@ -2,244 +2,1391 @@
2
2
  * MySQL Adapter - Zod Schemas
3
3
  *
4
4
  * Input validation schemas for all MySQL tools.
5
+ *
6
+ * DUAL-SCHEMA PATTERN (Split Schema):
7
+ * Base schemas (SchemaBase) are exported for MCP inputSchema visibility.
8
+ * Transformed schemas (Schema) are exported for handler parsing with alias resolution.
9
+ * This ensures MCP clients see all parameter names (including aliases) while
10
+ * handlers receive normalized data with canonical parameter names.
11
+ */
12
+ import { z } from "zod";
13
+ // =============================================================================
14
+ // Preprocess Utilities
15
+ // =============================================================================
16
+ /**
17
+ * Convert undefined input to empty object for optional-param tools.
18
+ * Used with z.preprocess() to handle tools called with no arguments.
19
+ */
20
+ function defaultToEmpty(input) {
21
+ return input ?? {};
22
+ }
23
+ /**
24
+ * Preprocess table parameters:
25
+ * - Alias: tableName/name → table
26
+ */
27
+ function preprocessTableParams(input) {
28
+ if (typeof input !== "object" || input === null)
29
+ return input;
30
+ const result = { ...input };
31
+ if (result["table"] === undefined) {
32
+ if (result["tableName"] !== undefined)
33
+ result["table"] = result["tableName"];
34
+ else if (result["name"] !== undefined)
35
+ result["table"] = result["name"];
36
+ }
37
+ return result;
38
+ }
39
+ /**
40
+ * Preprocess query parameters:
41
+ * - Alias: sql → query
42
+ * - Alias: tx/txId → transactionId
43
+ */
44
+ function preprocessQueryParams(input) {
45
+ if (typeof input !== "object" || input === null)
46
+ return input;
47
+ const result = { ...input };
48
+ if (result["query"] === undefined && result["sql"] !== undefined) {
49
+ result["query"] = result["sql"];
50
+ }
51
+ if (result["transactionId"] === undefined) {
52
+ if (result["txId"] !== undefined)
53
+ result["transactionId"] = result["txId"];
54
+ else if (result["tx"] !== undefined)
55
+ result["transactionId"] = result["tx"];
56
+ }
57
+ return result;
58
+ }
59
+ /**
60
+ * Preprocess transaction ID parameters:
61
+ * - Alias: tx/txId → transactionId
62
+ */
63
+ function preprocessTransactionIdParams(input) {
64
+ const normalized = defaultToEmpty(input);
65
+ if (normalized["transactionId"] === undefined) {
66
+ if (normalized["txId"] !== undefined)
67
+ normalized["transactionId"] = normalized["txId"];
68
+ else if (normalized["tx"] !== undefined)
69
+ normalized["transactionId"] = normalized["tx"];
70
+ }
71
+ return normalized;
72
+ }
73
+ /**
74
+ * Preprocess savepoint parameters:
75
+ * - Alias: tx/txId → transactionId
76
+ * - Alias: name → savepoint
77
+ */
78
+ function preprocessSavepointParams(input) {
79
+ if (typeof input !== "object" || input === null)
80
+ return input;
81
+ const result = { ...input };
82
+ if (result["transactionId"] === undefined) {
83
+ if (result["txId"] !== undefined)
84
+ result["transactionId"] = result["txId"];
85
+ else if (result["tx"] !== undefined)
86
+ result["transactionId"] = result["tx"];
87
+ }
88
+ if (result["savepoint"] === undefined && result["name"] !== undefined) {
89
+ result["savepoint"] = result["name"];
90
+ }
91
+ return result;
92
+ }
93
+ /**
94
+ * Preprocess create table parameters:
95
+ * - Alias: table/tableName → name
96
+ */
97
+ function preprocessCreateTableParams(input) {
98
+ if (typeof input !== "object" || input === null)
99
+ return input;
100
+ const result = { ...input };
101
+ if (result["name"] === undefined) {
102
+ if (result["table"] !== undefined)
103
+ result["name"] = result["table"];
104
+ else if (result["tableName"] !== undefined)
105
+ result["name"] = result["tableName"];
106
+ }
107
+ return result;
108
+ }
109
+ /**
110
+ * Preprocess transaction execute parameters:
111
+ * - Alias: queries/sqls → statements
5
112
  */
6
- import { z } from 'zod';
113
+ function preprocessTransactionExecuteParams(input) {
114
+ if (typeof input !== "object" || input === null)
115
+ return input;
116
+ const result = { ...input };
117
+ if (result["statements"] === undefined) {
118
+ if (result["queries"] !== undefined)
119
+ result["statements"] = result["queries"];
120
+ else if (result["sqls"] !== undefined)
121
+ result["statements"] = result["sqls"];
122
+ }
123
+ return result;
124
+ }
7
125
  // =============================================================================
8
126
  // Core Tools Schemas
9
127
  // =============================================================================
10
- export const ReadQuerySchema = z.object({
11
- query: z.string().describe('SQL SELECT query to execute'),
12
- params: z.array(z.unknown()).optional().describe('Query parameters for prepared statement'),
13
- transactionId: z.string().optional().describe('Optional transaction ID for executing within a transaction')
128
+ // --- ReadQuery ---
129
+ // Base schema for MCP visibility (AI sees: query, sql, params, transactionId, txId, tx)
130
+ export const ReadQuerySchemaBase = z.object({
131
+ query: z.string().optional().describe("SQL SELECT query to execute"),
132
+ sql: z.string().optional().describe("Alias for query"),
133
+ params: z
134
+ .array(z.unknown())
135
+ .optional()
136
+ .describe("Query parameters for prepared statement"),
137
+ transactionId: z
138
+ .string()
139
+ .optional()
140
+ .describe("Optional transaction ID for executing within a transaction"),
141
+ txId: z.string().optional().describe("Alias for transactionId"),
142
+ tx: z.string().optional().describe("Alias for transactionId"),
14
143
  });
15
- export const WriteQuerySchema = z.object({
16
- query: z.string().describe('SQL INSERT/UPDATE/DELETE query'),
17
- params: z.array(z.unknown()).optional().describe('Query parameters for prepared statement'),
18
- transactionId: z.string().optional().describe('Optional transaction ID for executing within a transaction')
144
+ // Transformed schema for handler parsing (normalizes aliases)
145
+ export const ReadQuerySchema = z
146
+ .preprocess(preprocessQueryParams, z.object({
147
+ query: z.string().optional().describe("SQL SELECT query to execute"),
148
+ sql: z.string().optional().describe("Alias for query"),
149
+ params: z
150
+ .array(z.unknown())
151
+ .optional()
152
+ .describe("Query parameters for prepared statement"),
153
+ transactionId: z
154
+ .string()
155
+ .optional()
156
+ .describe("Optional transaction ID for executing within a transaction"),
157
+ txId: z.string().optional().describe("Alias for transactionId"),
158
+ tx: z.string().optional().describe("Alias for transactionId"),
159
+ }))
160
+ .transform((data) => ({
161
+ query: data.query ?? data.sql ?? "",
162
+ params: data.params,
163
+ transactionId: data.transactionId ?? data.txId ?? data.tx,
164
+ }))
165
+ .refine((data) => data.query !== "", {
166
+ message: "query (or sql alias) is required",
19
167
  });
168
+ // --- WriteQuery ---
169
+ // Base schema for MCP visibility
170
+ export const WriteQuerySchemaBase = z.object({
171
+ query: z
172
+ .string()
173
+ .optional()
174
+ .describe("SQL INSERT/UPDATE/DELETE query to execute"),
175
+ sql: z.string().optional().describe("Alias for query"),
176
+ params: z
177
+ .array(z.unknown())
178
+ .optional()
179
+ .describe("Query parameters for prepared statement"),
180
+ transactionId: z
181
+ .string()
182
+ .optional()
183
+ .describe("Optional transaction ID for executing within a transaction"),
184
+ txId: z.string().optional().describe("Alias for transactionId"),
185
+ tx: z.string().optional().describe("Alias for transactionId"),
186
+ });
187
+ // Transformed schema for handler parsing
188
+ export const WriteQuerySchema = z
189
+ .preprocess(preprocessQueryParams, z.object({
190
+ query: z
191
+ .string()
192
+ .optional()
193
+ .describe("SQL INSERT/UPDATE/DELETE query to execute"),
194
+ sql: z.string().optional().describe("Alias for query"),
195
+ params: z
196
+ .array(z.unknown())
197
+ .optional()
198
+ .describe("Query parameters for prepared statement"),
199
+ transactionId: z
200
+ .string()
201
+ .optional()
202
+ .describe("Optional transaction ID for executing within a transaction"),
203
+ txId: z.string().optional().describe("Alias for transactionId"),
204
+ tx: z.string().optional().describe("Alias for transactionId"),
205
+ }))
206
+ .transform((data) => ({
207
+ query: data.query ?? data.sql ?? "",
208
+ params: data.params,
209
+ transactionId: data.transactionId ?? data.txId ?? data.tx,
210
+ }))
211
+ .refine((data) => data.query !== "", {
212
+ message: "query (or sql alias) is required",
213
+ });
214
+ // --- ListTables ---
20
215
  export const ListTablesSchema = z.object({
21
- database: z.string().optional().describe('Database name (defaults to connected database)')
22
- });
23
- export const DescribeTableSchema = z.object({
24
- table: z.string().describe('Table name to describe')
25
- });
26
- export const CreateTableSchema = z.object({
27
- name: z.string().describe('Table name'),
28
- columns: z.array(z.object({
29
- name: z.string().describe('Column name'),
30
- type: z.string().describe('MySQL data type (e.g., INT, VARCHAR(255), JSON)'),
31
- nullable: z.boolean().optional().default(true).describe('Allow NULL values'),
32
- primaryKey: z.boolean().optional().describe('Is primary key'),
33
- autoIncrement: z.boolean().optional().describe('Auto-increment column'),
34
- default: z.unknown().optional().describe('Default value'),
35
- unique: z.boolean().optional().describe('Unique constraint'),
36
- comment: z.string().optional().describe('Column comment')
37
- })).describe('Column definitions'),
38
- engine: z.enum(['InnoDB', 'MyISAM', 'MEMORY', 'CSV', 'ARCHIVE']).optional().default('InnoDB').describe('Storage engine'),
39
- charset: z.string().optional().default('utf8mb4').describe('Character set'),
40
- collate: z.string().optional().default('utf8mb4_unicode_ci').describe('Collation'),
41
- comment: z.string().optional().describe('Table comment'),
42
- ifNotExists: z.boolean().optional().default(false).describe('Add IF NOT EXISTS clause')
43
- });
44
- export const DropTableSchema = z.object({
45
- table: z.string().describe('Table name to drop'),
46
- ifExists: z.boolean().optional().default(true).describe('Add IF EXISTS clause')
47
- });
48
- export const CreateIndexSchema = z.object({
49
- name: z.string().describe('Index name'),
50
- table: z.string().describe('Table name'),
51
- columns: z.array(z.string()).describe('Column names to index'),
52
- unique: z.boolean().optional().default(false).describe('Create unique index'),
53
- type: z.enum(['BTREE', 'HASH', 'FULLTEXT', 'SPATIAL']).optional().describe('Index type'),
54
- ifNotExists: z.boolean().optional().default(false).describe('Add IF NOT EXISTS clause')
55
- });
56
- export const GetIndexesSchema = z.object({
57
- table: z.string().describe('Table name')
216
+ database: z
217
+ .string()
218
+ .optional()
219
+ .describe("Database name (defaults to connected database)"),
220
+ });
221
+ // --- DescribeTable ---
222
+ // Base schema for MCP visibility
223
+ export const DescribeTableSchemaBase = z.object({
224
+ table: z.string().optional().describe("Table name to describe"),
225
+ tableName: z.string().optional().describe("Alias for table"),
226
+ name: z.string().optional().describe("Alias for table"),
227
+ });
228
+ // Transformed schema for handler parsing
229
+ export const DescribeTableSchema = z
230
+ .preprocess(preprocessTableParams, DescribeTableSchemaBase)
231
+ .transform((data) => ({
232
+ table: data.table ?? data.tableName ?? data.name ?? "",
233
+ }))
234
+ .refine((data) => data.table !== "", {
235
+ message: "table (or tableName/name alias) is required",
236
+ });
237
+ // --- CreateTable ---
238
+ // Base schema for MCP visibility
239
+ export const CreateTableSchemaBase = z.object({
240
+ name: z.string().optional().describe("Table name"),
241
+ table: z.string().optional().describe("Alias for name"),
242
+ tableName: z.string().optional().describe("Alias for name"),
243
+ columns: z
244
+ .array(z.object({
245
+ name: z.string().describe("Column name"),
246
+ type: z
247
+ .string()
248
+ .describe("MySQL data type (e.g., INT, VARCHAR(255), JSON)"),
249
+ nullable: z
250
+ .boolean()
251
+ .optional()
252
+ .default(true)
253
+ .describe("Allow NULL values"),
254
+ primaryKey: z.boolean().optional().describe("Is primary key"),
255
+ autoIncrement: z.boolean().optional().describe("Auto-increment column"),
256
+ default: z.unknown().optional().describe("Default value"),
257
+ unique: z.boolean().optional().describe("Unique constraint"),
258
+ comment: z.string().optional().describe("Column comment"),
259
+ }))
260
+ .describe("Column definitions"),
261
+ engine: z
262
+ .enum(["InnoDB", "MyISAM", "MEMORY", "CSV", "ARCHIVE"])
263
+ .optional()
264
+ .default("InnoDB")
265
+ .describe("Storage engine"),
266
+ charset: z.string().optional().default("utf8mb4").describe("Character set"),
267
+ collate: z
268
+ .string()
269
+ .optional()
270
+ .default("utf8mb4_unicode_ci")
271
+ .describe("Collation"),
272
+ comment: z.string().optional().describe("Table comment"),
273
+ ifNotExists: z
274
+ .boolean()
275
+ .optional()
276
+ .default(false)
277
+ .describe("Add IF NOT EXISTS clause"),
278
+ });
279
+ // Transformed schema for handler parsing
280
+ export const CreateTableSchema = z
281
+ .preprocess(preprocessCreateTableParams, CreateTableSchemaBase)
282
+ .transform((data) => ({
283
+ name: data.name ?? data.table ?? data.tableName ?? "",
284
+ columns: data.columns,
285
+ engine: data.engine,
286
+ charset: data.charset,
287
+ collate: data.collate,
288
+ comment: data.comment,
289
+ ifNotExists: data.ifNotExists,
290
+ }))
291
+ .refine((data) => data.name !== "", {
292
+ message: "name (or table/tableName alias) is required",
293
+ });
294
+ // --- DropTable ---
295
+ // Base schema for MCP visibility
296
+ export const DropTableSchemaBase = z.object({
297
+ table: z.string().optional().describe("Table name to drop"),
298
+ tableName: z.string().optional().describe("Alias for table"),
299
+ name: z.string().optional().describe("Alias for table"),
300
+ ifExists: z
301
+ .boolean()
302
+ .optional()
303
+ .default(true)
304
+ .describe("Add IF EXISTS clause"),
305
+ });
306
+ // Transformed schema for handler parsing
307
+ export const DropTableSchema = z
308
+ .preprocess(preprocessTableParams, DropTableSchemaBase)
309
+ .transform((data) => ({
310
+ table: data.table ?? data.tableName ?? data.name ?? "",
311
+ ifExists: data.ifExists,
312
+ }))
313
+ .refine((data) => data.table !== "", {
314
+ message: "table (or tableName/name alias) is required",
315
+ });
316
+ // --- CreateIndex ---
317
+ // Base schema for MCP visibility
318
+ export const CreateIndexSchemaBase = z.object({
319
+ name: z.string().describe("Index name"),
320
+ table: z.string().optional().describe("Table name"),
321
+ tableName: z.string().optional().describe("Alias for table"),
322
+ columns: z.array(z.string()).describe("Column names to index"),
323
+ unique: z.boolean().optional().default(false).describe("Create unique index"),
324
+ type: z
325
+ .enum(["BTREE", "HASH", "FULLTEXT", "SPATIAL"])
326
+ .optional()
327
+ .describe("Index type"),
328
+ ifNotExists: z
329
+ .boolean()
330
+ .optional()
331
+ .default(false)
332
+ .describe("Add IF NOT EXISTS clause"),
333
+ });
334
+ // Transformed schema for handler parsing
335
+ export const CreateIndexSchema = z
336
+ .preprocess(preprocessTableParams, CreateIndexSchemaBase)
337
+ .transform((data) => ({
338
+ name: data.name,
339
+ table: data.table ?? data.tableName ?? "",
340
+ columns: data.columns,
341
+ unique: data.unique,
342
+ type: data.type,
343
+ ifNotExists: data.ifNotExists,
344
+ }))
345
+ .refine((data) => data.table !== "", {
346
+ message: "table (or tableName alias) is required",
347
+ });
348
+ // --- GetIndexes ---
349
+ // Base schema for MCP visibility
350
+ export const GetIndexesSchemaBase = z.object({
351
+ table: z.string().optional().describe("Table name"),
352
+ tableName: z.string().optional().describe("Alias for table"),
353
+ });
354
+ // Transformed schema for handler parsing
355
+ export const GetIndexesSchema = z
356
+ .preprocess(preprocessTableParams, GetIndexesSchemaBase)
357
+ .transform((data) => ({
358
+ table: data.table ?? data.tableName ?? "",
359
+ }))
360
+ .refine((data) => data.table !== "", {
361
+ message: "table (or tableName alias) is required",
58
362
  });
59
363
  // =============================================================================
60
364
  // Transaction Schemas
61
365
  // =============================================================================
62
- export const TransactionBeginSchema = z.object({
63
- isolationLevel: z.enum([
64
- 'READ UNCOMMITTED',
65
- 'READ COMMITTED',
66
- 'REPEATABLE READ',
67
- 'SERIALIZABLE'
68
- ]).optional().describe('Transaction isolation level')
366
+ // --- TransactionBegin ---
367
+ export const TransactionBeginSchema = z.preprocess(defaultToEmpty, z.object({
368
+ isolationLevel: z
369
+ .enum([
370
+ "READ UNCOMMITTED",
371
+ "READ COMMITTED",
372
+ "REPEATABLE READ",
373
+ "SERIALIZABLE",
374
+ ])
375
+ .optional()
376
+ .describe("Transaction isolation level"),
377
+ }));
378
+ // --- TransactionId ---
379
+ // Base schema for MCP visibility
380
+ export const TransactionIdSchemaBase = z.object({
381
+ transactionId: z
382
+ .string()
383
+ .optional()
384
+ .describe("Transaction ID from begin operation"),
385
+ txId: z.string().optional().describe("Alias for transactionId"),
386
+ tx: z.string().optional().describe("Alias for transactionId"),
387
+ });
388
+ // Transformed schema for handler parsing
389
+ export const TransactionIdSchema = z
390
+ .preprocess(preprocessTransactionIdParams, TransactionIdSchemaBase)
391
+ .transform((data) => ({
392
+ transactionId: data.transactionId ?? data.txId ?? data.tx ?? "",
393
+ }))
394
+ .refine((data) => data.transactionId !== "", {
395
+ message: "transactionId (or txId/tx alias) is required. Get one from mysql_transaction_begin first.",
69
396
  });
70
- export const TransactionIdSchema = z.object({
71
- transactionId: z.string().describe('Transaction ID from begin operation')
397
+ // --- TransactionSavepoint ---
398
+ // Base schema for MCP visibility
399
+ export const TransactionSavepointSchemaBase = z.object({
400
+ transactionId: z.string().optional().describe("Transaction ID"),
401
+ txId: z.string().optional().describe("Alias for transactionId"),
402
+ tx: z.string().optional().describe("Alias for transactionId"),
403
+ savepoint: z.string().optional().describe("Savepoint name"),
404
+ name: z.string().optional().describe("Alias for savepoint"),
72
405
  });
73
- export const TransactionSavepointSchema = z.object({
74
- transactionId: z.string().describe('Transaction ID'),
75
- savepoint: z.string().describe('Savepoint name')
406
+ // Transformed schema for handler parsing
407
+ export const TransactionSavepointSchema = z
408
+ .preprocess(preprocessSavepointParams, TransactionSavepointSchemaBase)
409
+ .transform((data) => ({
410
+ transactionId: data.transactionId ?? data.txId ?? data.tx ?? "",
411
+ savepoint: data.savepoint ?? data.name ?? "",
412
+ }))
413
+ .refine((data) => data.transactionId !== "" && data.savepoint !== "", {
414
+ message: 'Both transactionId and savepoint are required. Example: {transactionId: "...", savepoint: "sp1"}',
76
415
  });
77
- export const TransactionExecuteSchema = z.object({
78
- statements: z.array(z.string()).describe('SQL statements to execute atomically'),
79
- isolationLevel: z.enum([
80
- 'READ UNCOMMITTED',
81
- 'READ COMMITTED',
82
- 'REPEATABLE READ',
83
- 'SERIALIZABLE'
84
- ]).optional().describe('Transaction isolation level')
416
+ // --- TransactionExecute ---
417
+ // Base schema for MCP visibility
418
+ export const TransactionExecuteSchemaBase = z.object({
419
+ statements: z
420
+ .array(z.string())
421
+ .optional()
422
+ .describe("SQL statements to execute atomically"),
423
+ queries: z.array(z.string()).optional().describe("Alias for statements"),
424
+ isolationLevel: z
425
+ .enum([
426
+ "READ UNCOMMITTED",
427
+ "READ COMMITTED",
428
+ "REPEATABLE READ",
429
+ "SERIALIZABLE",
430
+ ])
431
+ .optional()
432
+ .describe("Transaction isolation level"),
85
433
  });
434
+ // Transformed schema for handler parsing
435
+ export const TransactionExecuteSchema = z
436
+ .preprocess(preprocessTransactionExecuteParams, TransactionExecuteSchemaBase)
437
+ .transform((data) => ({
438
+ statements: data.statements ?? data.queries ?? [],
439
+ isolationLevel: data.isolationLevel,
440
+ }));
441
+ // =============================================================================
442
+ // Preprocess: JSON/Text column params (table, column, where aliases)
443
+ // =============================================================================
444
+ function preprocessJsonColumnParams(val) {
445
+ if (val == null || typeof val !== "object")
446
+ return val ?? {};
447
+ const v = val;
448
+ return {
449
+ ...v,
450
+ table: v["table"] ?? v["tableName"] ?? v["name"],
451
+ column: v["column"] ?? v["col"],
452
+ where: v["where"] ?? v["filter"],
453
+ };
454
+ }
455
+ export function preprocessQueryOnlyParams(val) {
456
+ if (val == null || typeof val !== "object")
457
+ return val ?? {};
458
+ const v = val;
459
+ return {
460
+ ...v,
461
+ query: v["query"] ?? v["sql"],
462
+ };
463
+ }
86
464
  // =============================================================================
87
465
  // JSON Schemas
88
466
  // =============================================================================
89
- export const JsonExtractSchema = z.object({
90
- table: z.string().describe('Table name'),
91
- column: z.string().describe('JSON column name'),
92
- path: z.string().describe('JSON path (e.g., $.name or $[0])'),
93
- where: z.string().optional().describe('WHERE clause for filtering rows')
94
- });
95
- export const JsonSetSchema = z.object({
96
- table: z.string().describe('Table name'),
97
- column: z.string().describe('JSON column name'),
98
- path: z.string().describe('JSON path to set'),
99
- value: z.unknown().describe('Value to set'),
100
- where: z.string().describe('WHERE clause to identify rows')
101
- });
102
- export const JsonContainsSchema = z.object({
103
- table: z.string().describe('Table name'),
104
- column: z.string().describe('JSON column name'),
105
- value: z.unknown().describe('Value to search for'),
106
- path: z.string().optional().describe('Optional JSON path to search within')
107
- });
108
- export const JsonKeysSchema = z.object({
109
- table: z.string().describe('Table name'),
110
- column: z.string().describe('JSON column name'),
111
- path: z.string().optional().describe('Optional JSON path (defaults to root)')
112
- });
113
- export const JsonSearchSchema = z.object({
114
- table: z.string().describe('Table name'),
115
- column: z.string().describe('JSON column name'),
116
- searchValue: z.string().describe('String value to search for'),
117
- mode: z.enum(['one', 'all']).optional().default('one').describe('Search mode')
467
+ // --- JsonExtract ---
468
+ export const JsonExtractSchemaBase = z.object({
469
+ table: z.string().optional().describe("Table name"),
470
+ tableName: z.string().optional().describe("Alias for table"),
471
+ name: z.string().optional().describe("Alias for table"),
472
+ column: z.string().optional().describe("JSON column name"),
473
+ col: z.string().optional().describe("Alias for column"),
474
+ path: z.string().describe("JSON path (e.g., $.name or $[0])"),
475
+ where: z.string().optional().describe("WHERE clause for filtering rows"),
476
+ filter: z.string().optional().describe("Alias for where"),
477
+ });
478
+ export const JsonExtractSchema = z
479
+ .preprocess(preprocessJsonColumnParams, z.object({
480
+ table: z.string().optional(),
481
+ tableName: z.string().optional(),
482
+ name: z.string().optional(),
483
+ column: z.string().optional(),
484
+ col: z.string().optional(),
485
+ path: z.string(),
486
+ where: z.string().optional(),
487
+ filter: z.string().optional(),
488
+ }))
489
+ .transform((data) => ({
490
+ table: data.table ?? data.tableName ?? data.name ?? "",
491
+ column: data.column ?? data.col ?? "",
492
+ path: data.path,
493
+ where: data.where ?? data.filter,
494
+ }))
495
+ .refine((data) => data.table !== "", {
496
+ message: "table (or tableName/name alias) is required",
497
+ })
498
+ .refine((data) => data.column !== "", {
499
+ message: "column (or col alias) is required",
500
+ });
501
+ // --- JsonSet ---
502
+ export const JsonSetSchemaBase = z.object({
503
+ table: z.string().optional().describe("Table name"),
504
+ tableName: z.string().optional().describe("Alias for table"),
505
+ name: z.string().optional().describe("Alias for table"),
506
+ column: z.string().optional().describe("JSON column name"),
507
+ col: z.string().optional().describe("Alias for column"),
508
+ path: z.string().describe("JSON path to set"),
509
+ value: z.unknown().describe("Value to set"),
510
+ where: z.string().optional().describe("WHERE clause to identify rows"),
511
+ filter: z.string().optional().describe("Alias for where"),
118
512
  });
513
+ export const JsonSetSchema = z
514
+ .preprocess(preprocessJsonColumnParams, z.object({
515
+ table: z.string().optional(),
516
+ tableName: z.string().optional(),
517
+ name: z.string().optional(),
518
+ column: z.string().optional(),
519
+ col: z.string().optional(),
520
+ path: z.string(),
521
+ value: z.unknown(),
522
+ where: z.string().optional(),
523
+ filter: z.string().optional(),
524
+ }))
525
+ .transform((data) => ({
526
+ table: data.table ?? data.tableName ?? data.name ?? "",
527
+ column: data.column ?? data.col ?? "",
528
+ path: data.path,
529
+ value: data.value,
530
+ where: data.where ?? data.filter ?? "",
531
+ }))
532
+ .refine((data) => data.table !== "", {
533
+ message: "table (or tableName/name alias) is required",
534
+ })
535
+ .refine((data) => data.column !== "", {
536
+ message: "column (or col alias) is required",
537
+ })
538
+ .refine((data) => data.where !== "", {
539
+ message: "where (or filter alias) is required",
540
+ });
541
+ // --- JsonContains ---
542
+ export const JsonContainsSchemaBase = z.object({
543
+ table: z.string().optional().describe("Table name"),
544
+ tableName: z.string().optional().describe("Alias for table"),
545
+ name: z.string().optional().describe("Alias for table"),
546
+ column: z.string().optional().describe("JSON column name"),
547
+ col: z.string().optional().describe("Alias for column"),
548
+ value: z.unknown().describe("Value to search for"),
549
+ path: z.string().optional().describe("Optional JSON path to search within"),
550
+ });
551
+ export const JsonContainsSchema = z
552
+ .preprocess(preprocessJsonColumnParams, z.object({
553
+ table: z.string().optional(),
554
+ tableName: z.string().optional(),
555
+ name: z.string().optional(),
556
+ column: z.string().optional(),
557
+ col: z.string().optional(),
558
+ value: z.unknown(),
559
+ path: z.string().optional(),
560
+ }))
561
+ .transform((data) => ({
562
+ table: data.table ?? data.tableName ?? data.name ?? "",
563
+ column: data.column ?? data.col ?? "",
564
+ value: data.value,
565
+ path: data.path,
566
+ }))
567
+ .refine((data) => data.table !== "", {
568
+ message: "table (or tableName/name alias) is required",
569
+ })
570
+ .refine((data) => data.column !== "", {
571
+ message: "column (or col alias) is required",
572
+ });
573
+ // --- JsonKeys ---
574
+ export const JsonKeysSchemaBase = z.object({
575
+ table: z.string().optional().describe("Table name"),
576
+ tableName: z.string().optional().describe("Alias for table"),
577
+ name: z.string().optional().describe("Alias for table"),
578
+ column: z.string().optional().describe("JSON column name"),
579
+ col: z.string().optional().describe("Alias for column"),
580
+ path: z.string().optional().describe("Optional JSON path (defaults to root)"),
581
+ });
582
+ export const JsonKeysSchema = z
583
+ .preprocess(preprocessJsonColumnParams, z.object({
584
+ table: z.string().optional(),
585
+ tableName: z.string().optional(),
586
+ name: z.string().optional(),
587
+ column: z.string().optional(),
588
+ col: z.string().optional(),
589
+ path: z.string().optional(),
590
+ }))
591
+ .transform((data) => ({
592
+ table: data.table ?? data.tableName ?? data.name ?? "",
593
+ column: data.column ?? data.col ?? "",
594
+ path: data.path,
595
+ }))
596
+ .refine((data) => data.table !== "", {
597
+ message: "table (or tableName/name alias) is required",
598
+ })
599
+ .refine((data) => data.column !== "", {
600
+ message: "column (or col alias) is required",
601
+ });
602
+ // --- JsonSearch ---
603
+ export const JsonSearchSchemaBase = z.object({
604
+ table: z.string().optional().describe("Table name"),
605
+ tableName: z.string().optional().describe("Alias for table"),
606
+ name: z.string().optional().describe("Alias for table"),
607
+ column: z.string().optional().describe("JSON column name"),
608
+ col: z.string().optional().describe("Alias for column"),
609
+ searchValue: z.string().describe("String value to search for"),
610
+ mode: z
611
+ .enum(["one", "all"])
612
+ .optional()
613
+ .default("one")
614
+ .describe("Search mode"),
615
+ });
616
+ export const JsonSearchSchema = z
617
+ .preprocess(preprocessJsonColumnParams, z.object({
618
+ table: z.string().optional(),
619
+ tableName: z.string().optional(),
620
+ name: z.string().optional(),
621
+ column: z.string().optional(),
622
+ col: z.string().optional(),
623
+ searchValue: z.string(),
624
+ mode: z.enum(["one", "all"]).optional().default("one"),
625
+ }))
626
+ .transform((data) => ({
627
+ table: data.table ?? data.tableName ?? data.name ?? "",
628
+ column: data.column ?? data.col ?? "",
629
+ searchValue: data.searchValue,
630
+ mode: data.mode,
631
+ }))
632
+ .refine((data) => data.table !== "", {
633
+ message: "table (or tableName/name alias) is required",
634
+ })
635
+ .refine((data) => data.column !== "", {
636
+ message: "column (or col alias) is required",
637
+ });
638
+ // --- JsonValidate (no table/column — no aliases needed) ---
119
639
  export const JsonValidateSchema = z.object({
120
- value: z.string().describe('JSON string to validate')
640
+ value: z.string().describe("JSON string to validate"),
121
641
  });
122
642
  // =============================================================================
123
643
  // Text Schemas
124
644
  // =============================================================================
125
- export const RegexpMatchSchema = z.object({
126
- table: z.string().describe('Table name'),
127
- column: z.string().describe('Column name'),
128
- pattern: z.string().describe('Regular expression pattern')
645
+ // --- RegexpMatch ---
646
+ export const RegexpMatchSchemaBase = z.object({
647
+ table: z.string().optional().describe("Table name"),
648
+ tableName: z.string().optional().describe("Alias for table"),
649
+ name: z.string().optional().describe("Alias for table"),
650
+ column: z.string().optional().describe("Column name"),
651
+ col: z.string().optional().describe("Alias for column"),
652
+ pattern: z.string().describe("Regular expression pattern"),
653
+ where: z
654
+ .string()
655
+ .optional()
656
+ .describe("Additional WHERE clause for filtering"),
657
+ filter: z.string().optional().describe("Alias for where"),
658
+ });
659
+ export const RegexpMatchSchema = z
660
+ .preprocess(preprocessJsonColumnParams, z.object({
661
+ table: z.string().optional(),
662
+ tableName: z.string().optional(),
663
+ name: z.string().optional(),
664
+ column: z.string().optional(),
665
+ col: z.string().optional(),
666
+ pattern: z.string(),
667
+ where: z.string().optional(),
668
+ filter: z.string().optional(),
669
+ }))
670
+ .transform((data) => ({
671
+ table: data.table ?? data.tableName ?? data.name ?? "",
672
+ column: data.column ?? data.col ?? "",
673
+ pattern: data.pattern,
674
+ where: data.where ?? data.filter,
675
+ }))
676
+ .refine((data) => data.table !== "", {
677
+ message: "table (or tableName/name alias) is required",
678
+ })
679
+ .refine((data) => data.column !== "", {
680
+ message: "column (or col alias) is required",
681
+ });
682
+ // --- LikeSearch ---
683
+ export const LikeSearchSchemaBase = z.object({
684
+ table: z.string().optional().describe("Table name"),
685
+ tableName: z.string().optional().describe("Alias for table"),
686
+ name: z.string().optional().describe("Alias for table"),
687
+ column: z.string().optional().describe("Column name"),
688
+ col: z.string().optional().describe("Alias for column"),
689
+ pattern: z.string().describe("LIKE pattern with % and _ wildcards"),
690
+ where: z
691
+ .string()
692
+ .optional()
693
+ .describe("Additional WHERE clause for filtering"),
694
+ filter: z.string().optional().describe("Alias for where"),
695
+ });
696
+ export const LikeSearchSchema = z
697
+ .preprocess(preprocessJsonColumnParams, z.object({
698
+ table: z.string().optional(),
699
+ tableName: z.string().optional(),
700
+ name: z.string().optional(),
701
+ column: z.string().optional(),
702
+ col: z.string().optional(),
703
+ pattern: z.string(),
704
+ where: z.string().optional(),
705
+ filter: z.string().optional(),
706
+ }))
707
+ .transform((data) => ({
708
+ table: data.table ?? data.tableName ?? data.name ?? "",
709
+ column: data.column ?? data.col ?? "",
710
+ pattern: data.pattern,
711
+ where: data.where ?? data.filter,
712
+ }))
713
+ .refine((data) => data.table !== "", {
714
+ message: "table (or tableName/name alias) is required",
715
+ })
716
+ .refine((data) => data.column !== "", {
717
+ message: "column (or col alias) is required",
718
+ });
719
+ // --- Soundex ---
720
+ export const SoundexSchemaBase = z.object({
721
+ table: z.string().optional().describe("Table name"),
722
+ tableName: z.string().optional().describe("Alias for table"),
723
+ name: z.string().optional().describe("Alias for table"),
724
+ column: z.string().optional().describe("Column name"),
725
+ col: z.string().optional().describe("Alias for column"),
726
+ value: z.string().describe("Value to match phonetically"),
727
+ where: z
728
+ .string()
729
+ .optional()
730
+ .describe("Additional WHERE clause for filtering"),
731
+ filter: z.string().optional().describe("Alias for where"),
732
+ });
733
+ export const SoundexSchema = z
734
+ .preprocess(preprocessJsonColumnParams, z.object({
735
+ table: z.string().optional(),
736
+ tableName: z.string().optional(),
737
+ name: z.string().optional(),
738
+ column: z.string().optional(),
739
+ col: z.string().optional(),
740
+ value: z.string(),
741
+ where: z.string().optional(),
742
+ filter: z.string().optional(),
743
+ }))
744
+ .transform((data) => ({
745
+ table: data.table ?? data.tableName ?? data.name ?? "",
746
+ column: data.column ?? data.col ?? "",
747
+ value: data.value,
748
+ where: data.where ?? data.filter,
749
+ }))
750
+ .refine((data) => data.table !== "", {
751
+ message: "table (or tableName/name alias) is required",
752
+ })
753
+ .refine((data) => data.column !== "", {
754
+ message: "column (or col alias) is required",
755
+ });
756
+ // --- Substring ---
757
+ export const SubstringSchemaBase = z.object({
758
+ table: z.string().optional().describe("Table name"),
759
+ tableName: z.string().optional().describe("Alias for table"),
760
+ name: z.string().optional().describe("Alias for table"),
761
+ column: z.string().describe("Column name"),
762
+ start: z.number().describe("Starting position (1-indexed)"),
763
+ length: z.number().optional().describe("Number of characters"),
764
+ where: z
765
+ .string()
766
+ .optional()
767
+ .describe("Additional WHERE clause for filtering"),
768
+ filter: z.string().optional().describe("Alias for where"),
769
+ });
770
+ export const SubstringSchema = z
771
+ .preprocess(preprocessJsonColumnParams, z.object({
772
+ table: z.string().optional(),
773
+ tableName: z.string().optional(),
774
+ name: z.string().optional(),
775
+ column: z.string(),
776
+ start: z.number(),
777
+ length: z.number().optional(),
778
+ where: z.string().optional(),
779
+ filter: z.string().optional(),
780
+ }))
781
+ .transform((data) => ({
782
+ table: data.table ?? data.tableName ?? data.name ?? "",
783
+ column: data.column,
784
+ start: data.start,
785
+ length: data.length,
786
+ where: data.where ?? data.filter,
787
+ }))
788
+ .refine((data) => data.table !== "", {
789
+ message: "table (or tableName/name alias) is required",
790
+ });
791
+ // --- Concat ---
792
+ export const ConcatSchemaBase = z.object({
793
+ table: z.string().optional().describe("Table name"),
794
+ tableName: z.string().optional().describe("Alias for table"),
795
+ name: z.string().optional().describe("Alias for table"),
796
+ columns: z.array(z.string()).describe("Columns to concatenate"),
797
+ separator: z
798
+ .string()
799
+ .optional()
800
+ .default(" ")
801
+ .describe("Separator between values"),
802
+ alias: z
803
+ .string()
804
+ .optional()
805
+ .default("concatenated")
806
+ .describe("Result column name"),
807
+ where: z
808
+ .string()
809
+ .optional()
810
+ .describe("Additional WHERE clause for filtering"),
811
+ filter: z.string().optional().describe("Alias for where"),
812
+ includeSourceColumns: z
813
+ .boolean()
814
+ .optional()
815
+ .default(true)
816
+ .describe("Include individual source columns in output (default: true). Set to false for minimal payload."),
817
+ });
818
+ export const ConcatSchema = z
819
+ .preprocess(preprocessJsonColumnParams, z.object({
820
+ table: z.string().optional(),
821
+ tableName: z.string().optional(),
822
+ name: z.string().optional(),
823
+ columns: z.array(z.string()),
824
+ separator: z.string().optional().default(" "),
825
+ alias: z.string().optional().default("concatenated"),
826
+ where: z.string().optional(),
827
+ filter: z.string().optional(),
828
+ includeSourceColumns: z.boolean().optional().default(true),
829
+ }))
830
+ .transform((data) => ({
831
+ table: data.table ?? data.tableName ?? data.name ?? "",
832
+ columns: data.columns,
833
+ separator: data.separator,
834
+ alias: data.alias,
835
+ where: data.where ?? data.filter,
836
+ includeSourceColumns: data.includeSourceColumns,
837
+ }))
838
+ .refine((data) => data.table !== "", {
839
+ message: "table (or tableName/name alias) is required",
840
+ });
841
+ // --- CollationConvert ---
842
+ export const CollationConvertSchemaBase = z.object({
843
+ table: z.string().optional().describe("Table name"),
844
+ tableName: z.string().optional().describe("Alias for table"),
845
+ name: z.string().optional().describe("Alias for table"),
846
+ column: z.string().optional().describe("Column name"),
847
+ col: z.string().optional().describe("Alias for column"),
848
+ charset: z.string().describe("Target character set (e.g., utf8mb4)"),
849
+ collation: z.string().optional().describe("Target collation"),
850
+ where: z
851
+ .string()
852
+ .optional()
853
+ .describe("Additional WHERE clause for filtering"),
854
+ filter: z.string().optional().describe("Alias for where"),
129
855
  });
130
- export const LikeSearchSchema = z.object({
131
- table: z.string().describe('Table name'),
132
- column: z.string().describe('Column name'),
133
- pattern: z.string().describe('LIKE pattern with % and _ wildcards')
856
+ export const CollationConvertSchema = z
857
+ .preprocess(preprocessJsonColumnParams, z.object({
858
+ table: z.string().optional(),
859
+ tableName: z.string().optional(),
860
+ name: z.string().optional(),
861
+ column: z.string().optional(),
862
+ col: z.string().optional(),
863
+ charset: z.string(),
864
+ collation: z.string().optional(),
865
+ where: z.string().optional(),
866
+ filter: z.string().optional(),
867
+ }))
868
+ .transform((data) => ({
869
+ table: data.table ?? data.tableName ?? data.name ?? "",
870
+ column: data.column ?? data.col ?? "",
871
+ charset: data.charset,
872
+ collation: data.collation,
873
+ where: data.where ?? data.filter,
874
+ }))
875
+ .refine((data) => data.table !== "", {
876
+ message: "table (or tableName/name alias) is required",
877
+ })
878
+ .refine((data) => data.column !== "", {
879
+ message: "column (or col alias) is required",
134
880
  });
135
- export const SoundexSchema = z.object({
136
- table: z.string().describe('Table name'),
137
- column: z.string().describe('Column name'),
138
- value: z.string().describe('Value to match phonetically')
881
+ // --- FulltextCreate ---
882
+ export const FulltextCreateSchemaBase = z.object({
883
+ table: z.string().optional().describe("Table name"),
884
+ tableName: z.string().optional().describe("Alias for table"),
885
+ name: z.string().optional().describe("Alias for table"),
886
+ columns: z
887
+ .array(z.string())
888
+ .optional()
889
+ .describe("Columns to include in index"),
890
+ indexName: z.string().optional().describe("Optional index name"),
139
891
  });
140
- export const FulltextCreateSchema = z.object({
141
- table: z.string().describe('Table name'),
142
- columns: z.array(z.string()).describe('Columns to include in index'),
143
- indexName: z.string().optional().describe('Optional index name')
892
+ export const FulltextCreateSchema = z
893
+ .preprocess(preprocessTableParams, z.object({
894
+ table: z.string().optional(),
895
+ tableName: z.string().optional(),
896
+ name: z.string().optional(),
897
+ columns: z.array(z.string()).optional(),
898
+ indexName: z.string().optional(),
899
+ }))
900
+ .transform((data) => ({
901
+ table: data.table ?? data.tableName ?? data.name ?? "",
902
+ columns: data.columns ?? [],
903
+ indexName: data.indexName,
904
+ }))
905
+ .refine((data) => data.table !== "", {
906
+ message: "table (or tableName/name alias) is required",
907
+ })
908
+ .refine((data) => data.columns.length > 0, {
909
+ message: "columns is required",
144
910
  });
145
- export const FulltextSearchSchema = z.object({
146
- table: z.string().describe('Table name'),
147
- columns: z.array(z.string()).describe('Columns to search'),
148
- query: z.string().describe('Search query'),
149
- mode: z.enum(['NATURAL', 'BOOLEAN', 'EXPANSION']).optional().default('NATURAL').describe('Search mode')
911
+ // --- FulltextSearch ---
912
+ export const FulltextSearchSchemaBase = z.object({
913
+ table: z.string().optional().describe("Table name"),
914
+ tableName: z.string().optional().describe("Alias for table"),
915
+ name: z.string().optional().describe("Alias for table"),
916
+ columns: z.array(z.string()).optional().describe("Columns to search"),
917
+ query: z.string().optional().describe("Search query"),
918
+ sql: z.string().optional().describe("Alias for query"),
919
+ mode: z
920
+ .enum(["NATURAL", "BOOLEAN", "EXPANSION"])
921
+ .optional()
922
+ .default("NATURAL")
923
+ .describe("Search mode"),
924
+ });
925
+ export const FulltextSearchSchema = z
926
+ .preprocess((val) => {
927
+ const v1 = preprocessTableParams(val);
928
+ return preprocessQueryOnlyParams(v1);
929
+ }, z.object({
930
+ table: z.string().optional(),
931
+ tableName: z.string().optional(),
932
+ name: z.string().optional(),
933
+ columns: z.array(z.string()).optional(),
934
+ query: z.string().optional(),
935
+ sql: z.string().optional(),
936
+ mode: z
937
+ .enum(["NATURAL", "BOOLEAN", "EXPANSION"])
938
+ .optional()
939
+ .default("NATURAL"),
940
+ }))
941
+ .transform((data) => ({
942
+ table: data.table ?? data.tableName ?? data.name ?? "",
943
+ columns: data.columns ?? [],
944
+ query: data.query ?? data.sql ?? "",
945
+ mode: data.mode,
946
+ }))
947
+ .refine((data) => data.table !== "", {
948
+ message: "table (or tableName/name alias) is required",
949
+ })
950
+ .refine((data) => data.columns.length > 0, { message: "columns is required" })
951
+ .refine((data) => data.query !== "", {
952
+ message: "query (or sql alias) is required",
150
953
  });
151
954
  // =============================================================================
152
955
  // Performance Schemas
153
956
  // =============================================================================
154
- export const ExplainSchema = z.object({
155
- query: z.string().describe('SQL query to explain'),
156
- analyze: z.boolean().optional().default(false).describe('Run EXPLAIN ANALYZE (MySQL 8.0+)'),
157
- format: z.enum(['TRADITIONAL', 'JSON', 'TREE']).optional().default('JSON').describe('Output format')
957
+ // --- Explain ---
958
+ export const ExplainSchemaBase = z.object({
959
+ query: z.string().optional().describe("SQL query to explain"),
960
+ sql: z.string().optional().describe("Alias for query"),
961
+ format: z
962
+ .enum(["TRADITIONAL", "JSON", "TREE"])
963
+ .optional()
964
+ .default("JSON")
965
+ .describe("Output format"),
966
+ });
967
+ export const ExplainSchema = z
968
+ .preprocess(preprocessQueryOnlyParams, z.object({
969
+ query: z.string().optional(),
970
+ sql: z.string().optional(),
971
+ format: z
972
+ .enum(["TRADITIONAL", "JSON", "TREE"])
973
+ .optional()
974
+ .default("JSON"),
975
+ }))
976
+ .transform((data) => ({
977
+ query: data.query ?? data.sql ?? "",
978
+ format: data.format,
979
+ }))
980
+ .refine((data) => data.query !== "", {
981
+ message: "query (or sql alias) is required",
982
+ });
983
+ // --- ExplainAnalyze ---
984
+ export const ExplainAnalyzeSchemaBase = z.object({
985
+ query: z.string().optional().describe("SQL query to analyze"),
986
+ sql: z.string().optional().describe("Alias for query"),
987
+ format: z
988
+ .enum(["JSON", "TREE"])
989
+ .optional()
990
+ .default("TREE")
991
+ .describe("Output format"),
992
+ });
993
+ export const ExplainAnalyzeSchema = z
994
+ .preprocess(preprocessQueryOnlyParams, z.object({
995
+ query: z.string().optional(),
996
+ sql: z.string().optional(),
997
+ format: z.enum(["JSON", "TREE"]).optional().default("TREE"),
998
+ }))
999
+ .transform((data) => ({
1000
+ query: data.query ?? data.sql ?? "",
1001
+ format: data.format,
1002
+ }))
1003
+ .refine((data) => data.query !== "", {
1004
+ message: "query (or sql alias) is required",
158
1005
  });
1006
+ // --- SlowQuery (no table/query aliases — simple passthrough) ---
159
1007
  export const SlowQuerySchema = z.object({
160
- limit: z.number().optional().default(10).describe('Number of slow queries to return'),
161
- minTime: z.number().optional().describe('Minimum query time in seconds')
1008
+ limit: z
1009
+ .number()
1010
+ .optional()
1011
+ .default(10)
1012
+ .describe("Number of slow queries to return"),
1013
+ minTime: z.number().optional().describe("Minimum query time in seconds"),
162
1014
  });
163
- export const IndexUsageSchema = z.object({
164
- table: z.string().optional().describe('Filter by table name')
1015
+ // --- IndexUsage ---
1016
+ export const IndexUsageSchemaBase = z.object({
1017
+ table: z.string().optional().describe("Filter by table name"),
1018
+ tableName: z.string().optional().describe("Alias for table"),
1019
+ name: z.string().optional().describe("Alias for table"),
1020
+ limit: z
1021
+ .number()
1022
+ .int()
1023
+ .positive()
1024
+ .optional()
1025
+ .default(10)
1026
+ .describe("Maximum number of indexes to return"),
165
1027
  });
166
- export const TableStatsSchema = z.object({
167
- table: z.string().describe('Table name')
1028
+ export const IndexUsageSchema = z
1029
+ .preprocess(preprocessTableParams, z.object({
1030
+ table: z.string().optional(),
1031
+ tableName: z.string().optional(),
1032
+ name: z.string().optional(),
1033
+ limit: z.number().int().positive().optional().default(10),
1034
+ }))
1035
+ .transform((data) => ({
1036
+ table: data.table ?? data.tableName ?? data.name,
1037
+ limit: data.limit,
1038
+ }));
1039
+ // --- TableStats ---
1040
+ export const TableStatsSchemaBase = z.object({
1041
+ table: z.string().optional().describe("Table name"),
1042
+ tableName: z.string().optional().describe("Alias for table"),
1043
+ name: z.string().optional().describe("Alias for table"),
168
1044
  });
1045
+ export const TableStatsSchema = z
1046
+ .preprocess(preprocessTableParams, z.object({
1047
+ table: z.string().optional(),
1048
+ tableName: z.string().optional(),
1049
+ name: z.string().optional(),
1050
+ }))
1051
+ .transform((data) => ({
1052
+ table: data.table ?? data.tableName ?? data.name ?? "",
1053
+ }))
1054
+ .refine((data) => data.table !== "", {
1055
+ message: "table (or tableName/name alias) is required",
1056
+ });
1057
+ // =============================================================================
1058
+ // Preprocess: Admin table params (normalizes singular 'table' to 'tables' array)
1059
+ // =============================================================================
1060
+ function preprocessAdminTableParams(val) {
1061
+ if (val == null || typeof val !== "object")
1062
+ return val ?? {};
1063
+ const v = val;
1064
+ // If 'table' is passed as a string and 'tables' is not set, wrap it into an array
1065
+ if (typeof v["table"] === "string" && !Array.isArray(v["tables"])) {
1066
+ return { ...v, tables: [v["table"]] };
1067
+ }
1068
+ // Also support tableName/name aliases → tables
1069
+ if (typeof v["tableName"] === "string" && !Array.isArray(v["tables"])) {
1070
+ return { ...v, tables: [v["tableName"]] };
1071
+ }
1072
+ if (typeof v["name"] === "string" && !Array.isArray(v["tables"])) {
1073
+ return { ...v, tables: [v["name"]] };
1074
+ }
1075
+ return v;
1076
+ }
169
1077
  // =============================================================================
170
1078
  // Admin Schemas
171
1079
  // =============================================================================
172
- export const OptimizeTableSchema = z.object({
173
- tables: z.array(z.string()).describe('Table names to optimize')
1080
+ // --- OptimizeTable ---
1081
+ export const OptimizeTableSchemaBase = z.object({
1082
+ tables: z.array(z.string()).optional().describe("Table names to optimize"),
1083
+ table: z.string().optional().describe("Single table name (alias for tables)"),
1084
+ tableName: z.string().optional().describe("Alias for table"),
1085
+ name: z.string().optional().describe("Alias for table"),
1086
+ });
1087
+ export const OptimizeTableSchema = z
1088
+ .preprocess(preprocessAdminTableParams, z.object({
1089
+ tables: z.array(z.string()).optional(),
1090
+ table: z.string().optional(),
1091
+ tableName: z.string().optional(),
1092
+ name: z.string().optional(),
1093
+ }))
1094
+ .transform((data) => ({
1095
+ tables: data.tables ?? [],
1096
+ }))
1097
+ .refine((data) => data.tables.length > 0, {
1098
+ message: "tables (or table/tableName/name alias) is required",
174
1099
  });
175
- export const AnalyzeTableSchema = z.object({
176
- tables: z.array(z.string()).describe('Table names to analyze')
1100
+ // --- AnalyzeTable ---
1101
+ export const AnalyzeTableSchemaBase = z.object({
1102
+ tables: z.array(z.string()).optional().describe("Table names to analyze"),
1103
+ table: z.string().optional().describe("Single table name (alias for tables)"),
1104
+ tableName: z.string().optional().describe("Alias for table"),
1105
+ name: z.string().optional().describe("Alias for table"),
177
1106
  });
178
- export const CheckTableSchema = z.object({
179
- tables: z.array(z.string()).describe('Table names to check'),
180
- option: z.enum(['QUICK', 'FAST', 'MEDIUM', 'EXTENDED', 'CHANGED']).optional().describe('Check option')
1107
+ export const AnalyzeTableSchema = z
1108
+ .preprocess(preprocessAdminTableParams, z.object({
1109
+ tables: z.array(z.string()).optional(),
1110
+ table: z.string().optional(),
1111
+ tableName: z.string().optional(),
1112
+ name: z.string().optional(),
1113
+ }))
1114
+ .transform((data) => ({
1115
+ tables: data.tables ?? [],
1116
+ }))
1117
+ .refine((data) => data.tables.length > 0, {
1118
+ message: "tables (or table/tableName/name alias) is required",
181
1119
  });
182
- export const FlushTablesSchema = z.object({
183
- tables: z.array(z.string()).optional().describe('Specific tables to flush (empty for all)')
1120
+ // --- CheckTable ---
1121
+ export const CheckTableSchemaBase = z.object({
1122
+ tables: z.array(z.string()).optional().describe("Table names to check"),
1123
+ table: z.string().optional().describe("Single table name (alias for tables)"),
1124
+ tableName: z.string().optional().describe("Alias for table"),
1125
+ name: z.string().optional().describe("Alias for table"),
1126
+ option: z
1127
+ .enum(["QUICK", "FAST", "MEDIUM", "EXTENDED", "CHANGED"])
1128
+ .optional()
1129
+ .describe("Check option"),
184
1130
  });
1131
+ export const CheckTableSchema = z
1132
+ .preprocess(preprocessAdminTableParams, z.object({
1133
+ tables: z.array(z.string()).optional(),
1134
+ table: z.string().optional(),
1135
+ tableName: z.string().optional(),
1136
+ name: z.string().optional(),
1137
+ option: z
1138
+ .enum(["QUICK", "FAST", "MEDIUM", "EXTENDED", "CHANGED"])
1139
+ .optional(),
1140
+ }))
1141
+ .transform((data) => ({
1142
+ tables: data.tables ?? [],
1143
+ option: data.option,
1144
+ }))
1145
+ .refine((data) => data.tables.length > 0, {
1146
+ message: "tables (or table/tableName/name alias) is required",
1147
+ });
1148
+ // --- FlushTables ---
1149
+ export const FlushTablesSchemaBase = z.object({
1150
+ tables: z
1151
+ .array(z.string())
1152
+ .optional()
1153
+ .describe("Specific tables to flush (empty for all)"),
1154
+ table: z.string().optional().describe("Single table name (alias for tables)"),
1155
+ tableName: z.string().optional().describe("Alias for table"),
1156
+ name: z.string().optional().describe("Alias for table"),
1157
+ });
1158
+ export const FlushTablesSchema = z
1159
+ .preprocess(preprocessAdminTableParams, z.object({
1160
+ tables: z.array(z.string()).optional(),
1161
+ table: z.string().optional(),
1162
+ tableName: z.string().optional(),
1163
+ name: z.string().optional(),
1164
+ }))
1165
+ .transform((data) => ({
1166
+ tables: data.tables,
1167
+ }));
185
1168
  export const KillQuerySchema = z.object({
186
- processId: z.number().describe('Process ID to kill'),
187
- connection: z.boolean().optional().default(false).describe('Kill connection instead of query')
1169
+ processId: z.number().describe("Process ID to kill"),
1170
+ connection: z
1171
+ .boolean()
1172
+ .optional()
1173
+ .default(false)
1174
+ .describe("Kill connection instead of query"),
188
1175
  });
189
1176
  export const ShowProcesslistSchema = z.object({
190
- full: z.boolean().optional().default(false).describe('Show full query text')
1177
+ full: z.boolean().optional().default(false).describe("Show full query text"),
191
1178
  });
192
1179
  export const ShowStatusSchema = z.object({
193
- like: z.string().optional().describe('Filter variables by LIKE pattern'),
194
- global: z.boolean().optional().default(true).describe('Show global status')
1180
+ like: z.string().optional().describe("Filter variables by LIKE pattern"),
1181
+ global: z.boolean().optional().default(true).describe("Show global status"),
1182
+ limit: z
1183
+ .number()
1184
+ .int()
1185
+ .positive()
1186
+ .optional()
1187
+ .describe("Maximum number of variables to return (default: 100). Set higher to see all."),
195
1188
  });
196
1189
  export const ShowVariablesSchema = z.object({
197
- like: z.string().optional().describe('Filter variables by LIKE pattern'),
198
- global: z.boolean().optional().default(true).describe('Show global variables')
1190
+ like: z.string().optional().describe("Filter variables by LIKE pattern"),
1191
+ global: z
1192
+ .boolean()
1193
+ .optional()
1194
+ .default(true)
1195
+ .describe("Show global variables"),
1196
+ limit: z
1197
+ .number()
1198
+ .int()
1199
+ .positive()
1200
+ .optional()
1201
+ .describe("Maximum number of variables to return (default: 100). Set higher to see all."),
199
1202
  });
200
1203
  // =============================================================================
201
1204
  // Backup Schemas
202
1205
  // =============================================================================
203
- export const ExportTableSchema = z.object({
204
- table: z.string().describe('Table name'),
205
- format: z.enum(['SQL', 'CSV']).optional().default('SQL').describe('Export format'),
206
- where: z.string().optional().describe('WHERE clause to filter rows')
1206
+ // --- ExportTable ---
1207
+ export const ExportTableSchemaBase = z.object({
1208
+ table: z.string().optional().describe("Table name"),
1209
+ tableName: z.string().optional().describe("Alias for table"),
1210
+ name: z.string().optional().describe("Alias for table"),
1211
+ format: z
1212
+ .enum(["SQL", "CSV"])
1213
+ .optional()
1214
+ .default("SQL")
1215
+ .describe("Export format"),
1216
+ where: z.string().optional().describe("WHERE clause to filter rows"),
1217
+ filter: z.string().optional().describe("Alias for where"),
1218
+ limit: z
1219
+ .number()
1220
+ .int()
1221
+ .positive()
1222
+ .optional()
1223
+ .default(100)
1224
+ .describe("Maximum number of rows to export (default: 100). Set higher to export more rows."),
1225
+ });
1226
+ export const ExportTableSchema = z
1227
+ .preprocess(preprocessTableParams, z.object({
1228
+ table: z.string().optional(),
1229
+ tableName: z.string().optional(),
1230
+ name: z.string().optional(),
1231
+ format: z.enum(["SQL", "CSV"]).optional().default("SQL"),
1232
+ where: z.string().optional(),
1233
+ filter: z.string().optional(),
1234
+ limit: z.number().int().positive().optional().default(100),
1235
+ }))
1236
+ .transform((data) => ({
1237
+ table: data.table ?? data.tableName ?? data.name ?? "",
1238
+ format: data.format,
1239
+ where: data.where ?? data.filter,
1240
+ limit: data.limit,
1241
+ }))
1242
+ .refine((data) => data.table !== "", {
1243
+ message: "table (or tableName/name alias) is required",
1244
+ });
1245
+ // --- ImportData ---
1246
+ export const ImportDataSchemaBase = z.object({
1247
+ table: z.string().optional().describe("Table name"),
1248
+ tableName: z.string().optional().describe("Alias for table"),
1249
+ name: z.string().optional().describe("Alias for table"),
1250
+ data: z
1251
+ .array(z.record(z.string(), z.unknown()))
1252
+ .describe("Array of row objects to insert"),
207
1253
  });
208
- export const ImportDataSchema = z.object({
209
- table: z.string().describe('Table name'),
210
- data: z.array(z.record(z.string(), z.unknown())).describe('Array of row objects to insert')
1254
+ export const ImportDataSchema = z
1255
+ .preprocess(preprocessTableParams, z.object({
1256
+ table: z.string().optional(),
1257
+ tableName: z.string().optional(),
1258
+ name: z.string().optional(),
1259
+ data: z.array(z.record(z.string(), z.unknown())),
1260
+ }))
1261
+ .transform((data) => ({
1262
+ table: data.table ?? data.tableName ?? data.name ?? "",
1263
+ data: data.data,
1264
+ }))
1265
+ .refine((data) => data.table !== "", {
1266
+ message: "table (or tableName/name alias) is required",
211
1267
  });
212
1268
  // =============================================================================
213
1269
  // Replication Schemas
214
1270
  // =============================================================================
215
1271
  export const BinlogEventsSchema = z.object({
216
- logFile: z.string().optional().describe('Binlog file name'),
217
- position: z.number().optional().describe('Starting position'),
218
- limit: z.number().optional().default(100).describe('Maximum events to return')
1272
+ logFile: z.string().optional().describe("Binlog file name"),
1273
+ position: z.number().optional().describe("Starting position"),
1274
+ limit: z
1275
+ .number()
1276
+ .optional()
1277
+ .default(20)
1278
+ .describe("Maximum events to return (default: 20). Set higher for more events."),
219
1279
  });
220
1280
  // =============================================================================
221
1281
  // Partitioning Schemas
222
1282
  // =============================================================================
223
- export const PartitionInfoSchema = z.object({
224
- table: z.string().describe('Table name')
1283
+ // --- PartitionInfo ---
1284
+ export const PartitionInfoSchemaBase = z.object({
1285
+ table: z.string().optional().describe("Table name"),
1286
+ tableName: z.string().optional().describe("Alias for table"),
1287
+ name: z.string().optional().describe("Alias for table"),
1288
+ });
1289
+ export const PartitionInfoSchema = z
1290
+ .preprocess(preprocessTableParams, z.object({
1291
+ table: z.string().optional(),
1292
+ tableName: z.string().optional(),
1293
+ name: z.string().optional(),
1294
+ }))
1295
+ .transform((data) => ({
1296
+ table: data.table ?? data.tableName ?? data.name ?? "",
1297
+ }))
1298
+ .refine((data) => data.table !== "", {
1299
+ message: "table (or tableName/name alias) is required",
1300
+ });
1301
+ // --- AddPartition ---
1302
+ export const AddPartitionSchemaBase = z.object({
1303
+ table: z.string().optional().describe("Table name"),
1304
+ tableName: z.string().optional().describe("Alias for table"),
1305
+ name: z.string().optional().describe("Alias for table"),
1306
+ partitionName: z.string().describe("New partition name"),
1307
+ partitionType: z
1308
+ .enum(["RANGE", "LIST", "HASH", "KEY"])
1309
+ .describe("Partition type"),
1310
+ value: z
1311
+ .string()
1312
+ .describe('Partition boundary value only - e.g., "2024" for RANGE, "1,2,3" for LIST, "4" for HASH/KEY partitions count. Do NOT include "LESS THAN" or "VALUES IN" keywords.'),
1313
+ });
1314
+ export const AddPartitionSchema = z
1315
+ .preprocess(preprocessTableParams, z.object({
1316
+ table: z.string().optional(),
1317
+ tableName: z.string().optional(),
1318
+ name: z.string().optional(),
1319
+ partitionName: z.string(),
1320
+ partitionType: z.enum(["RANGE", "LIST", "HASH", "KEY"]),
1321
+ value: z.string(),
1322
+ }))
1323
+ .transform((data) => ({
1324
+ table: data.table ?? data.tableName ?? data.name ?? "",
1325
+ partitionName: data.partitionName,
1326
+ partitionType: data.partitionType,
1327
+ value: data.value,
1328
+ }))
1329
+ .refine((data) => data.table !== "", {
1330
+ message: "table (or tableName/name alias) is required",
1331
+ });
1332
+ // --- DropPartition ---
1333
+ export const DropPartitionSchemaBase = z.object({
1334
+ table: z.string().optional().describe("Table name"),
1335
+ tableName: z.string().optional().describe("Alias for table"),
1336
+ name: z.string().optional().describe("Alias for table"),
1337
+ partitionName: z.string().describe("Partition name to drop"),
225
1338
  });
226
- export const AddPartitionSchema = z.object({
227
- table: z.string().describe('Table name'),
228
- partitionName: z.string().describe('New partition name'),
229
- partitionType: z.enum(['RANGE', 'LIST', 'HASH', 'KEY']).describe('Partition type'),
230
- value: z.string().describe('Partition boundary value only - e.g., "2024" for RANGE, "1,2,3" for LIST, "4" for HASH/KEY partitions count. Do NOT include "LESS THAN" or "VALUES IN" keywords.')
1339
+ export const DropPartitionSchema = z
1340
+ .preprocess(preprocessTableParams, z.object({
1341
+ table: z.string().optional(),
1342
+ tableName: z.string().optional(),
1343
+ name: z.string().optional(),
1344
+ partitionName: z.string(),
1345
+ }))
1346
+ .transform((data) => ({
1347
+ table: data.table ?? data.tableName ?? data.name ?? "",
1348
+ partitionName: data.partitionName,
1349
+ }))
1350
+ .refine((data) => data.table !== "", {
1351
+ message: "table (or tableName/name alias) is required",
231
1352
  });
232
- export const DropPartitionSchema = z.object({
233
- table: z.string().describe('Table name'),
234
- partitionName: z.string().describe('Partition name to drop')
1353
+ // --- ReorganizePartition ---
1354
+ export const ReorganizePartitionSchemaBase = z.object({
1355
+ table: z.string().optional().describe("Table name"),
1356
+ tableName: z.string().optional().describe("Alias for table"),
1357
+ name: z.string().optional().describe("Alias for table"),
1358
+ fromPartitions: z.array(z.string()).describe("Source partition names"),
1359
+ partitionType: z
1360
+ .enum(["RANGE", "LIST", "HASH", "KEY"])
1361
+ .describe("Partition type (RANGE or LIST). HASH/KEY partitions cannot be reorganized."),
1362
+ toPartitions: z
1363
+ .array(z.object({
1364
+ name: z.string().describe("New partition name"),
1365
+ value: z
1366
+ .string()
1367
+ .describe('Partition boundary value only - e.g., "2024" for RANGE, "1,2,3" for LIST. Do NOT include "LESS THAN" or "VALUES IN" keywords.'),
1368
+ }))
1369
+ .describe("New partition definitions"),
235
1370
  });
236
- export const ReorganizePartitionSchema = z.object({
237
- table: z.string().describe('Table name'),
238
- fromPartitions: z.array(z.string()).describe('Source partition names'),
239
- partitionType: z.enum(['RANGE', 'LIST']).describe('Partition type (RANGE or LIST). HASH/KEY partitions cannot be reorganized.'),
1371
+ export const ReorganizePartitionSchema = z
1372
+ .preprocess(preprocessTableParams, z.object({
1373
+ table: z.string().optional(),
1374
+ tableName: z.string().optional(),
1375
+ name: z.string().optional(),
1376
+ fromPartitions: z.array(z.string()),
1377
+ partitionType: z.enum(["RANGE", "LIST"]),
240
1378
  toPartitions: z.array(z.object({
241
- name: z.string().describe('New partition name'),
242
- value: z.string().describe('Partition boundary value only - e.g., "2024" for RANGE, "1,2,3" for LIST. Do NOT include "LESS THAN" or "VALUES IN" keywords.')
243
- })).describe('New partition definitions')
1379
+ name: z.string(),
1380
+ value: z.string(),
1381
+ })),
1382
+ }))
1383
+ .transform((data) => ({
1384
+ table: data.table ?? data.tableName ?? data.name ?? "",
1385
+ fromPartitions: data.fromPartitions,
1386
+ partitionType: data.partitionType,
1387
+ toPartitions: data.toPartitions,
1388
+ }))
1389
+ .refine((data) => data.table !== "", {
1390
+ message: "table (or tableName/name alias) is required",
244
1391
  });
245
1392
  //# sourceMappingURL=types.js.map