@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
@@ -1,368 +1,531 @@
1
-
2
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
3
- import * as child_process from 'child_process';
4
- import { createMockMySQLAdapter, createMockRequestContext } from '../../../../../__tests__/mocks/index.js';
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import * as child_process from "child_process";
3
+ import {
4
+ createMockMySQLAdapter,
5
+ createMockRequestContext,
6
+ } from "../../../../../__tests__/mocks/index.js";
5
7
  import {
6
- createShellExportTableTool,
7
- createShellImportTableTool,
8
- createShellImportJSONTool
9
- } from '../data-transfer.js';
8
+ createShellExportTableTool,
9
+ createShellImportTableTool,
10
+ createShellImportJSONTool,
11
+ } from "../data-transfer.js";
10
12
 
11
- vi.mock('child_process', () => ({
12
- spawn: vi.fn()
13
+ vi.mock("child_process", () => ({
14
+ spawn: vi.fn(),
13
15
  }));
14
16
 
15
- describe('Shell Data Transfer Tools', () => {
16
- let mockAdapter: ReturnType<typeof createMockMySQLAdapter>;
17
- let mockContext: ReturnType<typeof createMockRequestContext>;
18
- let mockSpawn: ReturnType<typeof vi.fn>;
17
+ describe("Shell Data Transfer Tools", () => {
18
+ let mockAdapter: ReturnType<typeof createMockMySQLAdapter>;
19
+ let mockContext: ReturnType<typeof createMockRequestContext>;
20
+ let mockSpawn: ReturnType<typeof vi.fn>;
21
+
22
+ beforeEach(() => {
23
+ vi.clearAllMocks();
24
+ mockAdapter = createMockMySQLAdapter();
25
+ mockContext = createMockRequestContext();
26
+ mockSpawn = child_process.spawn as any;
27
+ });
28
+
29
+ afterEach(() => {
30
+ vi.restoreAllMocks();
31
+ });
32
+
33
+ function setupMockSpawn(stdout = "", stderr = "", exitCode = 0) {
34
+ const mockChild = {
35
+ stdout: {
36
+ on: vi.fn().mockImplementation((event, cb) => {
37
+ if (event === "data") cb(Buffer.from(stdout));
38
+ }),
39
+ },
40
+ stderr: {
41
+ on: vi.fn().mockImplementation((event, cb) => {
42
+ if (event === "data") cb(Buffer.from(stderr));
43
+ }),
44
+ },
45
+ stdin: {
46
+ write: vi.fn(),
47
+ end: vi.fn(),
48
+ },
49
+ on: vi.fn().mockImplementation((event, cb) => {
50
+ if (event === "close") cb(exitCode);
51
+ }),
52
+ kill: vi.fn(),
53
+ };
54
+ mockSpawn.mockReturnValue(mockChild);
55
+ return mockChild;
56
+ }
57
+
58
+ describe("mysqlsh_export_table", () => {
59
+ it("should export table with CSV format and options", async () => {
60
+ const successJson = JSON.stringify({
61
+ success: true,
62
+ result: { rows: 100 },
63
+ });
64
+ setupMockSpawn(successJson);
65
+
66
+ const tool = createShellExportTableTool();
67
+ const result = (await tool.handler(
68
+ {
69
+ schema: "test",
70
+ table: "users",
71
+ outputPath: "/tmp/dump",
72
+ format: "csv",
73
+ },
74
+ mockContext,
75
+ )) as any;
76
+
77
+ expect(result.success).toBe(true);
78
+ expect(result.result).toEqual({ rows: 100 });
79
+
80
+ const jsArg = mockSpawn.mock.calls[0][1][4];
81
+ expect(jsArg).toContain('util.exportTable("test.users"');
82
+ expect(jsArg).toContain('fieldsTerminatedBy: ","');
83
+ expect(jsArg).toContain('fieldsEnclosedBy: "\\""');
84
+ });
85
+
86
+ it("should export table with TSV format (default behavior)", async () => {
87
+ setupMockSpawn(JSON.stringify({ success: true }));
88
+
89
+ const tool = createShellExportTableTool();
90
+ await tool.handler(
91
+ {
92
+ schema: "test",
93
+ table: "users",
94
+ outputPath: "/tmp/dump.tsv",
95
+ format: "tsv",
96
+ },
97
+ mockContext,
98
+ );
99
+
100
+ const jsArg = mockSpawn.mock.calls[0][1][4];
101
+ // TSV is the default for util.exportTable(), no fieldsTerminatedBy option should be set
102
+ expect(jsArg).not.toContain("fieldsTerminatedBy");
103
+ });
104
+
105
+ it("should export table with WHERE clause", async () => {
106
+ setupMockSpawn(JSON.stringify({ success: true }));
107
+
108
+ const tool = createShellExportTableTool();
109
+ await tool.handler(
110
+ {
111
+ schema: "test",
112
+ table: "users",
113
+ outputPath: "/tmp/users_filtered",
114
+ format: "csv",
115
+ where: "age > 18",
116
+ },
117
+ mockContext,
118
+ );
119
+
120
+ const jsArg = mockSpawn.mock.calls[0][1][4];
121
+ expect(jsArg).toContain('where: "age > 18"');
122
+ });
123
+
124
+ it("should escape backslashes in path", async () => {
125
+ setupMockSpawn(JSON.stringify({ success: true }));
126
+
127
+ const tool = createShellExportTableTool();
128
+ await tool.handler(
129
+ {
130
+ schema: "test",
131
+ table: "users",
132
+ outputPath: "C:\\temp\\dump",
133
+ format: "csv",
134
+ },
135
+ mockContext,
136
+ );
137
+
138
+ const jsArg = mockSpawn.mock.calls[0][1][4];
139
+ // In JS code it should be escaped: C:\\temp\\dump
140
+ // So we look for "C:\\temp\\dump" in the string
141
+ expect(jsArg).toContain("C:\\\\temp\\\\dump");
142
+ });
143
+ it("should return structured error for privilege errors", async () => {
144
+ setupMockSpawn("", "Access denied for user", 1);
145
+
146
+ const tool = createShellExportTableTool();
147
+ const result = (await tool.handler(
148
+ {
149
+ schema: "test",
150
+ table: "users",
151
+ outputPath: "/tmp/dump",
152
+ format: "csv",
153
+ },
154
+ mockContext,
155
+ )) as any;
156
+
157
+ expect(result.success).toBe(false);
158
+ expect(result.error).toContain("privilege");
159
+ expect(result.hint).toContain("SELECT privilege");
160
+ });
161
+
162
+ it("should return structured error for non-privilege errors", async () => {
163
+ setupMockSpawn("", "Connection timeout", 1);
164
+
165
+ const tool = createShellExportTableTool();
166
+ const result = (await tool.handler(
167
+ {
168
+ schema: "test",
169
+ table: "users",
170
+ outputPath: "/tmp/dump",
171
+ format: "csv",
172
+ },
173
+ mockContext,
174
+ )) as any;
175
+
176
+ expect(result.success).toBe(false);
177
+ expect(result.error).toContain("Connection timeout");
178
+ });
179
+ });
180
+
181
+ describe("mysqlsh_import_table", () => {
182
+ it("should import table with options", async () => {
183
+ const successJson = JSON.stringify({
184
+ success: true,
185
+ result: { status: "Done" },
186
+ });
187
+ setupMockSpawn(successJson);
188
+
189
+ const tool = createShellImportTableTool();
190
+ const result = (await tool.handler(
191
+ {
192
+ schema: "test",
193
+ table: "users",
194
+ inputPath: "/tmp/data.csv",
195
+ threads: 4,
196
+ skipRows: 1,
197
+ fieldsTerminatedBy: ",",
198
+ linesTerminatedBy: "\n",
199
+ columns: ["id", "name"],
200
+ },
201
+ mockContext,
202
+ )) as any;
203
+
204
+ expect(result.success).toBe(true);
205
+ const jsArg = mockSpawn.mock.calls[0][1][4];
206
+ expect(jsArg).toContain('util.importTable("/tmp/data.csv"');
207
+ expect(jsArg).toContain("threads: 4");
208
+ expect(jsArg).toContain("skipRows: 1");
209
+ expect(jsArg).toContain('fieldsTerminatedBy: ","');
210
+ expect(jsArg).toContain('linesTerminatedBy: "\\n"');
211
+ expect(jsArg).toContain('columns: ["id","name"]');
212
+ });
213
+
214
+ it("should enable local_infile when updateServerSettings is true", async () => {
215
+ const successJson = JSON.stringify({
216
+ success: true,
217
+ result: { status: "Done" },
218
+ });
219
+ setupMockSpawn(successJson);
220
+
221
+ const tool = createShellImportTableTool();
222
+ const result = (await tool.handler(
223
+ {
224
+ schema: "test",
225
+ table: "users",
226
+ inputPath: "/tmp/data.csv",
227
+ updateServerSettings: true,
228
+ },
229
+ mockContext,
230
+ )) as any;
231
+
232
+ expect(result.success).toBe(true);
233
+ expect(result.localInfileEnabled).toBe(true);
234
+
235
+ const jsArg = mockSpawn.mock.calls[0][1][4];
236
+ expect(jsArg).toContain("SET GLOBAL local_infile = ON");
237
+ });
238
+
239
+ it("should return structured error when local_infile is disabled", async () => {
240
+ setupMockSpawn("", "ERROR: local_infile is disabled", 1);
241
+
242
+ const tool = createShellImportTableTool();
243
+ const result = (await tool.handler(
244
+ {
245
+ schema: "test",
246
+ table: "users",
247
+ inputPath: "/tmp/data.csv",
248
+ },
249
+ mockContext,
250
+ )) as any;
251
+
252
+ expect(result.success).toBe(false);
253
+ expect(result.error).toContain("local_infile");
254
+ expect(result.hint).toContain("updateServerSettings");
255
+ });
256
+
257
+ it("should return structured error when Loading local data is disabled", async () => {
258
+ setupMockSpawn("", "Loading local data is disabled", 1);
259
+
260
+ const tool = createShellImportTableTool();
261
+ const result = (await tool.handler(
262
+ {
263
+ schema: "test",
264
+ table: "users",
265
+ inputPath: "/tmp/data.csv",
266
+ },
267
+ mockContext,
268
+ )) as any;
269
+
270
+ expect(result.success).toBe(false);
271
+ expect(result.error).toContain("local_infile");
272
+ expect(result.hint).toContain("updateServerSettings");
273
+ });
274
+
275
+ it("should return structured error for non-local_infile errors", async () => {
276
+ setupMockSpawn("", "Some other error", 1);
277
+
278
+ const tool = createShellImportTableTool();
279
+ const result = (await tool.handler(
280
+ {
281
+ schema: "test",
282
+ table: "users",
283
+ inputPath: "/tmp/data.csv",
284
+ },
285
+ mockContext,
286
+ )) as any;
287
+
288
+ expect(result.success).toBe(false);
289
+ expect(result.error).toContain("Some other error");
290
+ });
291
+ });
292
+
293
+ describe("mysqlsh_import_json", () => {
294
+ it("should import JSON to collection", async () => {
295
+ const successJson = JSON.stringify({
296
+ success: true,
297
+ result: { imported: 50 },
298
+ });
299
+ setupMockSpawn(successJson);
300
+
301
+ const tool = createShellImportJSONTool();
302
+ const result = (await tool.handler(
303
+ {
304
+ inputPath: "/tmp/docs.json",
305
+ schema: "test",
306
+ collection: "docs",
307
+ },
308
+ mockContext,
309
+ )) as any;
310
+
311
+ expect(result.success).toBe(true);
312
+ expect(result.protocol).toBe("X Protocol");
313
+
314
+ const jsArg = mockSpawn.mock.calls[0][1][4];
315
+ expect(jsArg).toContain('collection: "docs"');
316
+ });
317
+
318
+ it("should import JSON to table column with BSON types conversion", async () => {
319
+ const successJson = JSON.stringify({
320
+ success: true,
321
+ result: { imported: 50 },
322
+ });
323
+ setupMockSpawn(successJson);
324
+
325
+ const tool = createShellImportJSONTool();
326
+ await tool.handler(
327
+ {
328
+ inputPath: "/tmp/data.json",
329
+ schema: "test",
330
+ collection: "my_table", // 'collection' param is used as table name when tableColumn is present logic-wise?
331
+ // Wait, let's check source code logic.
332
+ // if (tableColumn) { options.push(`table: "${collection}"`); options.push(`tableColumn: "${tableColumn}"`); }
333
+ // So yes, schema.collection maps to inputSchema 'collection' field which seems to be used as table name here.
334
+ tableColumn: "data_col",
335
+ convertBsonTypes: true,
336
+ },
337
+ mockContext,
338
+ );
339
+
340
+ const jsArg = mockSpawn.mock.calls[0][1][4];
341
+ expect(jsArg).toContain('table: "my_table"');
342
+ expect(jsArg).toContain('tableColumn: "data_col"');
343
+ expect(jsArg).toContain("convertBsonTypes: true");
344
+ });
345
+
346
+ it("should return raw output when no JSON found but exit code 0", async () => {
347
+ setupMockSpawn("Some non-JSON success output", "", 0);
348
+
349
+ const tool = createShellImportJSONTool();
350
+ const result = (await tool.handler(
351
+ {
352
+ inputPath: "/tmp/docs.json",
353
+ schema: "test",
354
+ collection: "docs",
355
+ },
356
+ mockContext,
357
+ )) as any;
358
+
359
+ expect(result.success).toBe(true);
360
+ expect(result.result.raw).toBe("Some non-JSON success output");
361
+ });
362
+
363
+ it("should return structured error for import failure", async () => {
364
+ setupMockSpawn("Import failed", "", 1);
365
+
366
+ const tool = createShellImportJSONTool();
367
+ const result = (await tool.handler(
368
+ {
369
+ inputPath: "/tmp/bad.json",
370
+ schema: "test",
371
+ collection: "docs",
372
+ },
373
+ mockContext,
374
+ )) as any;
375
+
376
+ expect(result.success).toBe(false);
377
+ expect(result.error).toContain("Import failed");
378
+ });
379
+
380
+ it("should return structured error for X Protocol access denied in stderr", async () => {
381
+ setupMockSpawn("", "Access denied for user", 0);
382
+
383
+ const tool = createShellImportJSONTool();
384
+ const result = (await tool.handler(
385
+ {
386
+ inputPath: "/tmp/docs.json",
387
+ schema: "test",
388
+ collection: "docs",
389
+ },
390
+ mockContext,
391
+ )) as any;
392
+
393
+ expect(result.success).toBe(false);
394
+ expect(result.error).toContain("X Protocol authentication failed");
395
+ expect(result.hint).toContain("X Plugin");
396
+ });
397
+
398
+ it("should return structured error for X Protocol 1045 error in stderr", async () => {
399
+ setupMockSpawn("", "MySQL Error 1045: Access denied", 0);
400
+
401
+ const tool = createShellImportJSONTool();
402
+ const result = (await tool.handler(
403
+ {
404
+ inputPath: "/tmp/docs.json",
405
+ schema: "test",
406
+ collection: "docs",
407
+ },
408
+ mockContext,
409
+ )) as any;
410
+
411
+ expect(result.success).toBe(false);
412
+ expect(result.error).toContain("X Protocol authentication failed");
413
+ expect(result.hint).toContain("X Plugin");
414
+ });
415
+
416
+ it("should return structured error when JSON result has success: false", async () => {
417
+ setupMockSpawn(
418
+ JSON.stringify({ success: false, error: "Collection not found" }),
419
+ "",
420
+ 0,
421
+ );
422
+
423
+ const tool = createShellImportJSONTool();
424
+ const result = (await tool.handler(
425
+ {
426
+ inputPath: "/tmp/docs.json",
427
+ schema: "test",
428
+ collection: "nonexistent",
429
+ },
430
+ mockContext,
431
+ )) as any;
432
+
433
+ expect(result.success).toBe(false);
434
+ expect(result.error).toContain("Collection not found");
435
+ });
19
436
 
20
- beforeEach(() => {
21
- vi.clearAllMocks();
22
- mockAdapter = createMockMySQLAdapter();
23
- mockContext = createMockRequestContext();
24
- mockSpawn = child_process.spawn as any;
437
+ it("should return structured error when success: false without error message", async () => {
438
+ setupMockSpawn(JSON.stringify({ success: false }), "", 0);
439
+
440
+ const tool = createShellImportJSONTool();
441
+ const result = (await tool.handler(
442
+ {
443
+ inputPath: "/tmp/docs.json",
444
+ schema: "test",
445
+ collection: "docs",
446
+ },
447
+ mockContext,
448
+ )) as any;
449
+
450
+ expect(result.success).toBe(false);
451
+ expect(result.error).toContain("Unknown MySQL Shell error");
25
452
  });
26
453
 
27
- afterEach(() => {
28
- vi.restoreAllMocks();
454
+ it("should skip lines that parse to invalid JSON and continue looking", async () => {
455
+ // First line is invalid JSON, second line is valid
456
+ setupMockSpawn(
457
+ "{ invalid }\n" + JSON.stringify({ success: true, result: "ok" }),
458
+ "",
459
+ 0,
460
+ );
461
+
462
+ const tool = createShellImportJSONTool();
463
+ const result = (await tool.handler(
464
+ {
465
+ inputPath: "/tmp/docs.json",
466
+ schema: "test",
467
+ collection: "docs",
468
+ },
469
+ mockContext,
470
+ )) as any;
471
+
472
+ expect(result.success).toBe(true);
473
+ expect(result.result).toBe("ok");
29
474
  });
30
475
 
31
- function setupMockSpawn(stdout = '', stderr = '', exitCode = 0) {
32
- const mockChild = {
33
- stdout: {
34
- on: vi.fn().mockImplementation((event, cb) => {
35
- if (event === 'data') cb(Buffer.from(stdout));
36
- })
37
- },
38
- stderr: {
39
- on: vi.fn().mockImplementation((event, cb) => {
40
- if (event === 'data') cb(Buffer.from(stderr));
41
- })
42
- },
43
- stdin: {
44
- write: vi.fn(),
45
- end: vi.fn()
46
- },
47
- on: vi.fn().mockImplementation((event, cb) => {
48
- if (event === 'close') cb(exitCode);
49
- }),
50
- kill: vi.fn()
51
- };
52
- mockSpawn.mockReturnValue(mockChild);
53
- return mockChild;
54
- }
55
-
56
- describe('mysqlsh_export_table', () => {
57
- it('should export table with CSV format and options', async () => {
58
- const successJson = JSON.stringify({ success: true, result: { rows: 100 } });
59
- setupMockSpawn(successJson);
60
-
61
- const tool = createShellExportTableTool();
62
- const result = await tool.handler({
63
- schema: 'test',
64
- table: 'users',
65
- outputPath: '/tmp/dump',
66
- format: 'csv'
67
- }, mockContext) as any;
68
-
69
- expect(result.success).toBe(true);
70
- expect(result.result).toEqual({ rows: 100 });
71
-
72
- const jsArg = mockSpawn.mock.calls[0][1][4];
73
- expect(jsArg).toContain('util.exportTable("test.users"');
74
- expect(jsArg).toContain('fieldsTerminatedBy: ","');
75
- expect(jsArg).toContain('fieldsEnclosedBy: "\\""');
76
- });
77
-
78
- it('should export table with TSV format', async () => {
79
- setupMockSpawn(JSON.stringify({ success: true }));
80
-
81
- const tool = createShellExportTableTool();
82
- await tool.handler({
83
- schema: 'test',
84
- table: 'users',
85
- outputPath: '/tmp/dump.tsv',
86
- format: 'tsv'
87
- }, mockContext);
88
-
89
- const jsArg = mockSpawn.mock.calls[0][1][4];
90
- expect(jsArg).toContain('fieldsTerminatedBy: "\\t"');
91
- });
92
-
93
- it('should export table with WHERE clause', async () => {
94
- setupMockSpawn(JSON.stringify({ success: true }));
95
-
96
- const tool = createShellExportTableTool();
97
- await tool.handler({
98
- schema: 'test',
99
- table: 'users',
100
- outputPath: '/tmp/users_filtered',
101
- format: 'json',
102
- where: 'age > 18'
103
- }, mockContext);
104
-
105
- const jsArg = mockSpawn.mock.calls[0][1][4];
106
- expect(jsArg).toContain('where: "age > 18"');
107
- });
108
-
109
- it('should escape backslashes in path', async () => {
110
- setupMockSpawn(JSON.stringify({ success: true }));
111
-
112
- const tool = createShellExportTableTool();
113
- await tool.handler({
114
- schema: 'test',
115
- table: 'users',
116
- outputPath: 'C:\\temp\\dump',
117
- format: 'json'
118
- }, mockContext);
119
-
120
- const jsArg = mockSpawn.mock.calls[0][1][4];
121
- // In JS code it should be escaped: C:\\temp\\dump
122
- // So we look for "C:\\temp\\dump" in the string
123
- expect(jsArg).toContain('C:\\\\temp\\\\dump');
124
- });
476
+ it("should skip empty lines when parsing JSON", async () => {
477
+ setupMockSpawn(
478
+ "\n\n" + JSON.stringify({ success: true, result: "data" }) + "\n\n",
479
+ "",
480
+ 0,
481
+ );
482
+
483
+ const tool = createShellImportJSONTool();
484
+ const result = (await tool.handler(
485
+ {
486
+ inputPath: "/tmp/docs.json",
487
+ schema: "test",
488
+ collection: "docs",
489
+ },
490
+ mockContext,
491
+ )) as any;
492
+
493
+ expect(result.success).toBe(true);
494
+ expect(result.result).toBe("data");
125
495
  });
126
496
 
127
- describe('mysqlsh_import_table', () => {
128
- it('should import table with options', async () => {
129
- const successJson = JSON.stringify({ success: true, result: { status: 'Done' } });
130
- setupMockSpawn(successJson);
131
-
132
- const tool = createShellImportTableTool();
133
- const result = await tool.handler({
134
- schema: 'test',
135
- table: 'users',
136
- inputPath: '/tmp/data.csv',
137
- threads: 4,
138
- skipRows: 1,
139
- fieldsTerminatedBy: ',',
140
- linesTerminatedBy: '\n',
141
- columns: ['id', 'name']
142
- }, mockContext) as any;
143
-
144
- expect(result.success).toBe(true);
145
- const jsArg = mockSpawn.mock.calls[0][1][4];
146
- expect(jsArg).toContain('util.importTable("/tmp/data.csv"');
147
- expect(jsArg).toContain('threads: 4');
148
- expect(jsArg).toContain('skipRows: 1');
149
- expect(jsArg).toContain('fieldsTerminatedBy: ","');
150
- expect(jsArg).toContain('linesTerminatedBy: "\\n"');
151
- expect(jsArg).toContain('columns: ["id","name"]');
152
- });
153
-
154
- it('should enable local_infile when updateServerSettings is true', async () => {
155
- const successJson = JSON.stringify({ success: true, result: { status: 'Done' } });
156
- setupMockSpawn(successJson);
157
-
158
- const tool = createShellImportTableTool();
159
- const result = await tool.handler({
160
- schema: 'test',
161
- table: 'users',
162
- inputPath: '/tmp/data.csv',
163
- updateServerSettings: true
164
- }, mockContext) as any;
165
-
166
- expect(result.success).toBe(true);
167
- expect(result.localInfileEnabled).toBe(true);
168
-
169
- const jsArg = mockSpawn.mock.calls[0][1][4];
170
- expect(jsArg).toContain('SET GLOBAL local_infile = ON');
171
- });
172
-
173
- it('should throw helpful error when local_infile is disabled', async () => {
174
- setupMockSpawn('', 'ERROR: local_infile is disabled', 1);
175
-
176
- const tool = createShellImportTableTool();
177
- await expect(tool.handler({
178
- schema: 'test',
179
- table: 'users',
180
- inputPath: '/tmp/data.csv'
181
- }, mockContext)).rejects.toThrow('local_infile is disabled');
182
- });
183
-
184
- it('should throw helpful error when Loading local data is disabled', async () => {
185
- setupMockSpawn('', 'Loading local data is disabled', 1);
186
-
187
- const tool = createShellImportTableTool();
188
- await expect(tool.handler({
189
- schema: 'test',
190
- table: 'users',
191
- inputPath: '/tmp/data.csv'
192
- }, mockContext)).rejects.toThrow('updateServerSettings: true');
193
- });
194
-
195
- it('should re-throw non-local_infile errors', async () => {
196
- setupMockSpawn('', 'Some other error', 1);
197
-
198
- const tool = createShellImportTableTool();
199
- await expect(tool.handler({
200
- schema: 'test',
201
- table: 'users',
202
- inputPath: '/tmp/data.csv'
203
- }, mockContext)).rejects.toThrow('Some other error');
204
- });
497
+ it("should return structured error with stderr on non-zero exit code", async () => {
498
+ setupMockSpawn("", "Fatal shell error", 1);
499
+
500
+ const tool = createShellImportJSONTool();
501
+ const result = (await tool.handler(
502
+ {
503
+ inputPath: "/tmp/bad.json",
504
+ schema: "test",
505
+ collection: "docs",
506
+ },
507
+ mockContext,
508
+ )) as any;
509
+
510
+ expect(result.success).toBe(false);
511
+ expect(result.error).toContain("Fatal shell error");
205
512
  });
206
513
 
207
- describe('mysqlsh_import_json', () => {
208
- it('should import JSON to collection', async () => {
209
- const successJson = JSON.stringify({ success: true, result: { imported: 50 } });
210
- setupMockSpawn(successJson);
211
-
212
- const tool = createShellImportJSONTool();
213
- const result = await tool.handler({
214
- inputPath: '/tmp/docs.json',
215
- schema: 'test',
216
- collection: 'docs'
217
- }, mockContext) as any;
218
-
219
- expect(result.success).toBe(true);
220
- expect(result.protocol).toBe('X Protocol');
221
-
222
- const jsArg = mockSpawn.mock.calls[0][1][4];
223
- expect(jsArg).toContain('collection: "docs"');
224
- });
225
-
226
- it('should import JSON to table column with BSON types conversion', async () => {
227
- const successJson = JSON.stringify({ success: true, result: { imported: 50 } });
228
- setupMockSpawn(successJson);
229
-
230
- const tool = createShellImportJSONTool();
231
- await tool.handler({
232
- inputPath: '/tmp/data.json',
233
- schema: 'test',
234
- collection: 'my_table', // 'collection' param is used as table name when tableColumn is present logic-wise?
235
- // Wait, let's check source code logic.
236
- // if (tableColumn) { options.push(`table: "${collection}"`); options.push(`tableColumn: "${tableColumn}"`); }
237
- // So yes, schema.collection maps to inputSchema 'collection' field which seems to be used as table name here.
238
- tableColumn: 'data_col',
239
- convertBsonTypes: true
240
- }, mockContext);
241
-
242
- const jsArg = mockSpawn.mock.calls[0][1][4];
243
- expect(jsArg).toContain('table: "my_table"');
244
- expect(jsArg).toContain('tableColumn: "data_col"');
245
- expect(jsArg).toContain('convertBsonTypes: true');
246
- });
247
-
248
- it('should return raw output when no JSON found but exit code 0', async () => {
249
- setupMockSpawn('Some non-JSON success output', '', 0);
250
-
251
- const tool = createShellImportJSONTool();
252
- const result = await tool.handler({
253
- inputPath: '/tmp/docs.json',
254
- schema: 'test',
255
- collection: 'docs'
256
- }, mockContext) as any;
257
-
258
- expect(result.success).toBe(true);
259
- expect(result.result.raw).toBe('Some non-JSON success output');
260
- });
261
-
262
- it('should handle import failure', async () => {
263
- setupMockSpawn('Import failed', '', 1);
264
-
265
- const tool = createShellImportJSONTool();
266
- await expect(tool.handler({
267
- inputPath: '/tmp/bad.json',
268
- schema: 'test',
269
- collection: 'docs'
270
- }, mockContext)).rejects.toThrow('Import failed');
271
- });
272
-
273
- it('should throw X Protocol error when access denied in stderr', async () => {
274
- setupMockSpawn('', 'Access denied for user', 0);
275
-
276
- const tool = createShellImportJSONTool();
277
- await expect(tool.handler({
278
- inputPath: '/tmp/docs.json',
279
- schema: 'test',
280
- collection: 'docs'
281
- }, mockContext)).rejects.toThrow('X Protocol authentication failed');
282
- });
283
-
284
- it('should throw X Protocol error when 1045 code in stderr', async () => {
285
- setupMockSpawn('', 'MySQL Error 1045: Access denied', 0);
286
-
287
- const tool = createShellImportJSONTool();
288
- await expect(tool.handler({
289
- inputPath: '/tmp/docs.json',
290
- schema: 'test',
291
- collection: 'docs'
292
- }, mockContext)).rejects.toThrow('X Protocol authentication failed');
293
- });
294
-
295
- it('should throw error when JSON result has success: false', async () => {
296
- setupMockSpawn(JSON.stringify({ success: false, error: 'Collection not found' }), '', 0);
297
-
298
- const tool = createShellImportJSONTool();
299
- await expect(tool.handler({
300
- inputPath: '/tmp/docs.json',
301
- schema: 'test',
302
- collection: 'nonexistent'
303
- }, mockContext)).rejects.toThrow('Collection not found');
304
- });
305
-
306
- it('should throw unknown error when success: false without error message', async () => {
307
- setupMockSpawn(JSON.stringify({ success: false }), '', 0);
308
-
309
- const tool = createShellImportJSONTool();
310
- await expect(tool.handler({
311
- inputPath: '/tmp/docs.json',
312
- schema: 'test',
313
- collection: 'docs'
314
- }, mockContext)).rejects.toThrow('Unknown MySQL Shell error');
315
- });
316
-
317
- it('should skip lines that parse to invalid JSON and continue looking', async () => {
318
- // First line is invalid JSON, second line is valid
319
- setupMockSpawn('{ invalid }\n' + JSON.stringify({ success: true, result: 'ok' }), '', 0);
320
-
321
- const tool = createShellImportJSONTool();
322
- const result = await tool.handler({
323
- inputPath: '/tmp/docs.json',
324
- schema: 'test',
325
- collection: 'docs'
326
- }, mockContext) as any;
327
-
328
- expect(result.success).toBe(true);
329
- expect(result.result).toBe('ok');
330
- });
331
-
332
- it('should skip empty lines when parsing JSON', async () => {
333
- setupMockSpawn('\n\n' + JSON.stringify({ success: true, result: 'data' }) + '\n\n', '', 0);
334
-
335
- const tool = createShellImportJSONTool();
336
- const result = await tool.handler({
337
- inputPath: '/tmp/docs.json',
338
- schema: 'test',
339
- collection: 'docs'
340
- }, mockContext) as any;
341
-
342
- expect(result.success).toBe(true);
343
- expect(result.result).toBe('data');
344
- });
345
-
346
- it('should throw stderr message when failed with non-zero exit code', async () => {
347
- setupMockSpawn('', 'Fatal shell error', 1);
348
-
349
- const tool = createShellImportJSONTool();
350
- await expect(tool.handler({
351
- inputPath: '/tmp/bad.json',
352
- schema: 'test',
353
- collection: 'docs'
354
- }, mockContext)).rejects.toThrow('Fatal shell error');
355
- });
356
-
357
- it('should throw stdout when no stderr on failure', async () => {
358
- setupMockSpawn('stdout error message only', '', 1);
359
-
360
- const tool = createShellImportJSONTool();
361
- await expect(tool.handler({
362
- inputPath: '/tmp/bad.json',
363
- schema: 'test',
364
- collection: 'docs'
365
- }, mockContext)).rejects.toThrow('stdout error message only');
366
- });
514
+ it("should return structured error with stdout when no stderr on failure", async () => {
515
+ setupMockSpawn("stdout error message only", "", 1);
516
+
517
+ const tool = createShellImportJSONTool();
518
+ const result = (await tool.handler(
519
+ {
520
+ inputPath: "/tmp/bad.json",
521
+ schema: "test",
522
+ collection: "docs",
523
+ },
524
+ mockContext,
525
+ )) as any;
526
+
527
+ expect(result.success).toBe(false);
528
+ expect(result.error).toContain("stdout error message only");
367
529
  });
530
+ });
368
531
  });