@neverinfamous/mysql-mcp 2.3.0 → 3.0.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 (347) hide show
  1. package/.dockerignore +1 -0
  2. package/.gitattributes +18 -0
  3. package/.github/workflows/codeql.yml +2 -10
  4. package/.github/workflows/docker-publish.yml +15 -13
  5. package/CHANGELOG.md +287 -1
  6. package/DOCKER_README.md +100 -265
  7. package/Dockerfile +5 -0
  8. package/README.md +124 -59
  9. package/VERSION +1 -1
  10. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  11. package/dist/__tests__/mocks/adapter.js +2 -0
  12. package/dist/__tests__/mocks/adapter.js.map +1 -1
  13. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  14. package/dist/adapters/DatabaseAdapter.js +50 -9
  15. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  16. package/dist/adapters/mysql/MySQLAdapter.d.ts +6 -0
  17. package/dist/adapters/mysql/MySQLAdapter.d.ts.map +1 -1
  18. package/dist/adapters/mysql/MySQLAdapter.js +8 -0
  19. package/dist/adapters/mysql/MySQLAdapter.js.map +1 -1
  20. package/dist/adapters/mysql/SchemaManager.js +16 -15
  21. package/dist/adapters/mysql/SchemaManager.js.map +1 -1
  22. package/dist/adapters/mysql/prompts/index.js +10 -20
  23. package/dist/adapters/mysql/prompts/index.js.map +1 -1
  24. package/dist/adapters/mysql/prompts/proxysqlSetup.js +1 -1
  25. package/dist/adapters/mysql/resources/docstore.d.ts.map +1 -1
  26. package/dist/adapters/mysql/resources/docstore.js +10 -7
  27. package/dist/adapters/mysql/resources/docstore.js.map +1 -1
  28. package/dist/adapters/mysql/resources/events.js +11 -8
  29. package/dist/adapters/mysql/resources/events.js.map +1 -1
  30. package/dist/adapters/mysql/resources/indexes.d.ts.map +1 -1
  31. package/dist/adapters/mysql/resources/indexes.js +12 -15
  32. package/dist/adapters/mysql/resources/indexes.js.map +1 -1
  33. package/dist/adapters/mysql/resources/innodb.d.ts.map +1 -1
  34. package/dist/adapters/mysql/resources/innodb.js +20 -17
  35. package/dist/adapters/mysql/resources/innodb.js.map +1 -1
  36. package/dist/adapters/mysql/resources/locks.d.ts.map +1 -1
  37. package/dist/adapters/mysql/resources/locks.js +9 -6
  38. package/dist/adapters/mysql/resources/locks.js.map +1 -1
  39. package/dist/adapters/mysql/resources/performance.d.ts.map +1 -1
  40. package/dist/adapters/mysql/resources/performance.js +15 -15
  41. package/dist/adapters/mysql/resources/performance.js.map +1 -1
  42. package/dist/adapters/mysql/resources/spatial.d.ts.map +1 -1
  43. package/dist/adapters/mysql/resources/spatial.js +9 -6
  44. package/dist/adapters/mysql/resources/spatial.js.map +1 -1
  45. package/dist/adapters/mysql/resources/sysschema.d.ts.map +1 -1
  46. package/dist/adapters/mysql/resources/sysschema.js +12 -9
  47. package/dist/adapters/mysql/resources/sysschema.js.map +1 -1
  48. package/dist/adapters/mysql/tools/admin/backup.d.ts.map +1 -1
  49. package/dist/adapters/mysql/tools/admin/backup.js +170 -121
  50. package/dist/adapters/mysql/tools/admin/backup.js.map +1 -1
  51. package/dist/adapters/mysql/tools/admin/maintenance.d.ts.map +1 -1
  52. package/dist/adapters/mysql/tools/admin/maintenance.js +106 -57
  53. package/dist/adapters/mysql/tools/admin/maintenance.js.map +1 -1
  54. package/dist/adapters/mysql/tools/admin/monitoring.d.ts.map +1 -1
  55. package/dist/adapters/mysql/tools/admin/monitoring.js +183 -101
  56. package/dist/adapters/mysql/tools/admin/monitoring.js.map +1 -1
  57. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts.map +1 -1
  58. package/dist/adapters/mysql/tools/cluster/group-replication.js +164 -120
  59. package/dist/adapters/mysql/tools/cluster/group-replication.js.map +1 -1
  60. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts.map +1 -1
  61. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js +212 -145
  62. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js.map +1 -1
  63. package/dist/adapters/mysql/tools/codemode/index.d.ts.map +1 -1
  64. package/dist/adapters/mysql/tools/codemode/index.js +6 -4
  65. package/dist/adapters/mysql/tools/codemode/index.js.map +1 -1
  66. package/dist/adapters/mysql/tools/core.d.ts.map +1 -1
  67. package/dist/adapters/mysql/tools/core.js +152 -29
  68. package/dist/adapters/mysql/tools/core.js.map +1 -1
  69. package/dist/adapters/mysql/tools/docstore.d.ts.map +1 -1
  70. package/dist/adapters/mysql/tools/docstore.js +340 -163
  71. package/dist/adapters/mysql/tools/docstore.js.map +1 -1
  72. package/dist/adapters/mysql/tools/events.d.ts.map +1 -1
  73. package/dist/adapters/mysql/tools/events.js +284 -198
  74. package/dist/adapters/mysql/tools/events.js.map +1 -1
  75. package/dist/adapters/mysql/tools/json/core.d.ts.map +1 -1
  76. package/dist/adapters/mysql/tools/json/core.js +11 -39
  77. package/dist/adapters/mysql/tools/json/core.js.map +1 -1
  78. package/dist/adapters/mysql/tools/json/enhanced.d.ts.map +1 -1
  79. package/dist/adapters/mysql/tools/json/enhanced.js +15 -33
  80. package/dist/adapters/mysql/tools/json/enhanced.js.map +1 -1
  81. package/dist/adapters/mysql/tools/json/helpers.d.ts.map +1 -1
  82. package/dist/adapters/mysql/tools/json/helpers.js +13 -24
  83. package/dist/adapters/mysql/tools/json/helpers.js.map +1 -1
  84. package/dist/adapters/mysql/tools/partitioning.js +3 -0
  85. package/dist/adapters/mysql/tools/partitioning.js.map +1 -1
  86. package/dist/adapters/mysql/tools/performance/analysis.d.ts.map +1 -1
  87. package/dist/adapters/mysql/tools/performance/analysis.js +89 -60
  88. package/dist/adapters/mysql/tools/performance/analysis.js.map +1 -1
  89. package/dist/adapters/mysql/tools/performance/optimization.d.ts.map +1 -1
  90. package/dist/adapters/mysql/tools/performance/optimization.js +151 -127
  91. package/dist/adapters/mysql/tools/performance/optimization.js.map +1 -1
  92. package/dist/adapters/mysql/tools/proxysql.d.ts +1 -1
  93. package/dist/adapters/mysql/tools/proxysql.d.ts.map +1 -1
  94. package/dist/adapters/mysql/tools/proxysql.js +289 -176
  95. package/dist/adapters/mysql/tools/proxysql.js.map +1 -1
  96. package/dist/adapters/mysql/tools/replication.js +75 -49
  97. package/dist/adapters/mysql/tools/replication.js.map +1 -1
  98. package/dist/adapters/mysql/tools/roles.d.ts.map +1 -1
  99. package/dist/adapters/mysql/tools/roles.js +224 -182
  100. package/dist/adapters/mysql/tools/roles.js.map +1 -1
  101. package/dist/adapters/mysql/tools/router.d.ts.map +1 -1
  102. package/dist/adapters/mysql/tools/router.js +168 -67
  103. package/dist/adapters/mysql/tools/router.js.map +1 -1
  104. package/dist/adapters/mysql/tools/schema/constraints.d.ts.map +1 -1
  105. package/dist/adapters/mysql/tools/schema/constraints.js +21 -3
  106. package/dist/adapters/mysql/tools/schema/constraints.js.map +1 -1
  107. package/dist/adapters/mysql/tools/schema/management.d.ts.map +1 -1
  108. package/dist/adapters/mysql/tools/schema/management.js +61 -14
  109. package/dist/adapters/mysql/tools/schema/management.js.map +1 -1
  110. package/dist/adapters/mysql/tools/schema/routines.d.ts.map +1 -1
  111. package/dist/adapters/mysql/tools/schema/routines.js +27 -4
  112. package/dist/adapters/mysql/tools/schema/routines.js.map +1 -1
  113. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts.map +1 -1
  114. package/dist/adapters/mysql/tools/schema/scheduled_events.js +24 -3
  115. package/dist/adapters/mysql/tools/schema/scheduled_events.js.map +1 -1
  116. package/dist/adapters/mysql/tools/schema/triggers.d.ts.map +1 -1
  117. package/dist/adapters/mysql/tools/schema/triggers.js +23 -2
  118. package/dist/adapters/mysql/tools/schema/triggers.js.map +1 -1
  119. package/dist/adapters/mysql/tools/schema/views.d.ts.map +1 -1
  120. package/dist/adapters/mysql/tools/schema/views.js +47 -7
  121. package/dist/adapters/mysql/tools/schema/views.js.map +1 -1
  122. package/dist/adapters/mysql/tools/security/audit.d.ts.map +1 -1
  123. package/dist/adapters/mysql/tools/security/audit.js +102 -34
  124. package/dist/adapters/mysql/tools/security/audit.js.map +1 -1
  125. package/dist/adapters/mysql/tools/security/data-protection.d.ts.map +1 -1
  126. package/dist/adapters/mysql/tools/security/data-protection.js +264 -205
  127. package/dist/adapters/mysql/tools/security/data-protection.js.map +1 -1
  128. package/dist/adapters/mysql/tools/security/encryption.d.ts.map +1 -1
  129. package/dist/adapters/mysql/tools/security/encryption.js +137 -104
  130. package/dist/adapters/mysql/tools/security/encryption.js.map +1 -1
  131. package/dist/adapters/mysql/tools/shell/backup.d.ts.map +1 -1
  132. package/dist/adapters/mysql/tools/shell/backup.js +71 -59
  133. package/dist/adapters/mysql/tools/shell/backup.js.map +1 -1
  134. package/dist/adapters/mysql/tools/shell/restore.d.ts.map +1 -1
  135. package/dist/adapters/mysql/tools/shell/restore.js +61 -47
  136. package/dist/adapters/mysql/tools/shell/restore.js.map +1 -1
  137. package/dist/adapters/mysql/tools/spatial/geometry.d.ts.map +1 -1
  138. package/dist/adapters/mysql/tools/spatial/geometry.js +19 -5
  139. package/dist/adapters/mysql/tools/spatial/geometry.js.map +1 -1
  140. package/dist/adapters/mysql/tools/spatial/operations.d.ts.map +1 -1
  141. package/dist/adapters/mysql/tools/spatial/operations.js +42 -17
  142. package/dist/adapters/mysql/tools/spatial/operations.js.map +1 -1
  143. package/dist/adapters/mysql/tools/spatial/queries.d.ts.map +1 -1
  144. package/dist/adapters/mysql/tools/spatial/queries.js +109 -57
  145. package/dist/adapters/mysql/tools/spatial/queries.js.map +1 -1
  146. package/dist/adapters/mysql/tools/spatial/setup.d.ts.map +1 -1
  147. package/dist/adapters/mysql/tools/spatial/setup.js +103 -50
  148. package/dist/adapters/mysql/tools/spatial/setup.js.map +1 -1
  149. package/dist/adapters/mysql/tools/stats/comparative.d.ts.map +1 -1
  150. package/dist/adapters/mysql/tools/stats/comparative.js +128 -79
  151. package/dist/adapters/mysql/tools/stats/comparative.js.map +1 -1
  152. package/dist/adapters/mysql/tools/stats/descriptive.d.ts.map +1 -1
  153. package/dist/adapters/mysql/tools/stats/descriptive.js +174 -102
  154. package/dist/adapters/mysql/tools/stats/descriptive.js.map +1 -1
  155. package/dist/adapters/mysql/tools/sysschema/activity.d.ts.map +1 -1
  156. package/dist/adapters/mysql/tools/sysschema/activity.js +50 -25
  157. package/dist/adapters/mysql/tools/sysschema/activity.js.map +1 -1
  158. package/dist/adapters/mysql/tools/sysschema/performance.d.ts.map +1 -1
  159. package/dist/adapters/mysql/tools/sysschema/performance.js +121 -66
  160. package/dist/adapters/mysql/tools/sysschema/performance.js.map +1 -1
  161. package/dist/adapters/mysql/tools/sysschema/resources.d.ts.map +1 -1
  162. package/dist/adapters/mysql/tools/sysschema/resources.js +101 -64
  163. package/dist/adapters/mysql/tools/sysschema/resources.js.map +1 -1
  164. package/dist/adapters/mysql/tools/text/fulltext.d.ts.map +1 -1
  165. package/dist/adapters/mysql/tools/text/fulltext.js +18 -32
  166. package/dist/adapters/mysql/tools/text/fulltext.js.map +1 -1
  167. package/dist/adapters/mysql/tools/transactions.d.ts.map +1 -1
  168. package/dist/adapters/mysql/tools/transactions.js +48 -23
  169. package/dist/adapters/mysql/tools/transactions.js.map +1 -1
  170. package/dist/adapters/mysql/types/proxysql-types.d.ts +15 -0
  171. package/dist/adapters/mysql/types/proxysql-types.d.ts.map +1 -1
  172. package/dist/adapters/mysql/types/proxysql-types.js +33 -1
  173. package/dist/adapters/mysql/types/proxysql-types.js.map +1 -1
  174. package/dist/adapters/mysql/types/router-types.d.ts +1 -1
  175. package/dist/adapters/mysql/types/router-types.js +1 -1
  176. package/dist/adapters/mysql/types/router-types.js.map +1 -1
  177. package/dist/adapters/mysql/types/shell-types.js +2 -2
  178. package/dist/adapters/mysql/types/shell-types.js.map +1 -1
  179. package/dist/adapters/mysql/types.d.ts +485 -21
  180. package/dist/adapters/mysql/types.d.ts.map +1 -1
  181. package/dist/adapters/mysql/types.js +546 -19
  182. package/dist/adapters/mysql/types.js.map +1 -1
  183. package/dist/auth/scopes.js +1 -1
  184. package/dist/auth/scopes.js.map +1 -1
  185. package/dist/codemode/api.d.ts +3 -2
  186. package/dist/codemode/api.d.ts.map +1 -1
  187. package/dist/codemode/api.js +80 -5
  188. package/dist/codemode/api.js.map +1 -1
  189. package/dist/codemode/sandbox-factory.js +1 -1
  190. package/dist/codemode/sandbox-factory.js.map +1 -1
  191. package/dist/codemode/types.d.ts +26 -0
  192. package/dist/codemode/types.d.ts.map +1 -1
  193. package/dist/codemode/types.js +2 -0
  194. package/dist/codemode/types.js.map +1 -1
  195. package/dist/codemode/worker-sandbox.d.ts +4 -2
  196. package/dist/codemode/worker-sandbox.d.ts.map +1 -1
  197. package/dist/codemode/worker-sandbox.js +66 -7
  198. package/dist/codemode/worker-sandbox.js.map +1 -1
  199. package/dist/codemode/worker-script.d.ts +3 -0
  200. package/dist/codemode/worker-script.d.ts.map +1 -1
  201. package/dist/codemode/worker-script.js +128 -75
  202. package/dist/codemode/worker-script.js.map +1 -1
  203. package/dist/constants/ServerInstructions.d.ts +1 -1
  204. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  205. package/dist/constants/ServerInstructions.js +37 -31
  206. package/dist/constants/ServerInstructions.js.map +1 -1
  207. package/dist/filtering/ToolConstants.d.ts +1 -1
  208. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  209. package/dist/filtering/ToolConstants.js +1 -2
  210. package/dist/filtering/ToolConstants.js.map +1 -1
  211. package/dist/pool/ConnectionPool.d.ts.map +1 -1
  212. package/dist/pool/ConnectionPool.js.map +1 -1
  213. package/dist/transports/http.d.ts.map +1 -1
  214. package/dist/transports/http.js +6 -0
  215. package/dist/transports/http.js.map +1 -1
  216. package/dist/utils/validators.d.ts +1 -1
  217. package/dist/utils/validators.d.ts.map +1 -1
  218. package/dist/utils/validators.js.map +1 -1
  219. package/package.json +4 -4
  220. package/releases/v2.3.0-release-notes.md +20 -20
  221. package/releases/v2.3.1-release-notes.md +34 -0
  222. package/releases/v3.0.0-release-notes.md +81 -0
  223. package/src/__tests__/mocks/adapter.ts +3 -0
  224. package/src/__tests__/perf.test.ts +6 -6
  225. package/src/adapters/DatabaseAdapter.ts +58 -9
  226. package/src/adapters/__tests__/DatabaseAdapter.test.ts +89 -8
  227. package/src/adapters/mysql/MySQLAdapter.ts +17 -2
  228. package/src/adapters/mysql/SchemaManager.ts +21 -21
  229. package/src/adapters/mysql/__tests__/MySQLAdapter.test.ts +1 -1
  230. package/src/adapters/mysql/prompts/index.ts +12 -22
  231. package/src/adapters/mysql/prompts/proxysqlSetup.ts +1 -1
  232. package/src/adapters/mysql/resources/docstore.ts +13 -10
  233. package/src/adapters/mysql/resources/events.ts +12 -12
  234. package/src/adapters/mysql/resources/indexes.ts +17 -19
  235. package/src/adapters/mysql/resources/innodb.ts +23 -22
  236. package/src/adapters/mysql/resources/locks.ts +9 -7
  237. package/src/adapters/mysql/resources/performance.ts +23 -18
  238. package/src/adapters/mysql/resources/spatial.ts +9 -7
  239. package/src/adapters/mysql/resources/sysschema.ts +12 -11
  240. package/src/adapters/mysql/tools/__tests__/core.test.ts +126 -55
  241. package/src/adapters/mysql/tools/__tests__/docstore.test.ts +459 -88
  242. package/src/adapters/mysql/tools/__tests__/events.test.ts +281 -103
  243. package/src/adapters/mysql/tools/__tests__/proxysql.test.ts +128 -28
  244. package/src/adapters/mysql/tools/__tests__/replication.test.ts +48 -2
  245. package/src/adapters/mysql/tools/__tests__/roles.test.ts +15 -18
  246. package/src/adapters/mysql/tools/__tests__/router.test.ts +32 -5
  247. package/src/adapters/mysql/tools/__tests__/security.test.ts +126 -2
  248. package/src/adapters/mysql/tools/__tests__/security_injection.test.ts +84 -76
  249. package/src/adapters/mysql/tools/__tests__/security_integration.test.ts +47 -50
  250. package/src/adapters/mysql/tools/__tests__/spatial.test.ts +11 -10
  251. package/src/adapters/mysql/tools/__tests__/spatial_handler.test.ts +54 -38
  252. package/src/adapters/mysql/tools/__tests__/stats.test.ts +285 -152
  253. package/src/adapters/mysql/tools/__tests__/transactions.test.ts +13 -13
  254. package/src/adapters/mysql/tools/admin/__tests__/backup.test.ts +171 -25
  255. package/src/adapters/mysql/tools/admin/__tests__/maintenance.test.ts +240 -4
  256. package/src/adapters/mysql/tools/admin/__tests__/monitoring-summary.test.ts +274 -0
  257. package/src/adapters/mysql/tools/admin/__tests__/monitoring.test.ts +94 -5
  258. package/src/adapters/mysql/tools/admin/backup.ts +193 -143
  259. package/src/adapters/mysql/tools/admin/maintenance.ts +118 -69
  260. package/src/adapters/mysql/tools/admin/monitoring.ts +201 -125
  261. package/src/adapters/mysql/tools/cluster/__tests__/group-replication.test.ts +69 -0
  262. package/src/adapters/mysql/tools/cluster/__tests__/innodb-cluster.test.ts +141 -0
  263. package/src/adapters/mysql/tools/cluster/group-replication.ts +172 -132
  264. package/src/adapters/mysql/tools/cluster/innodb-cluster.ts +231 -157
  265. package/src/adapters/mysql/tools/codemode/__tests__/codemode-tool.test.ts +227 -0
  266. package/src/adapters/mysql/tools/codemode/index.ts +5 -3
  267. package/src/adapters/mysql/tools/core.ts +152 -38
  268. package/src/adapters/mysql/tools/docstore.ts +422 -205
  269. package/src/adapters/mysql/tools/events.ts +334 -233
  270. package/src/adapters/mysql/tools/json/__tests__/core.test.ts +20 -0
  271. package/src/adapters/mysql/tools/json/__tests__/enhanced.test.ts +82 -50
  272. package/src/adapters/mysql/tools/json/__tests__/helpers.test.ts +42 -3
  273. package/src/adapters/mysql/tools/json/core.ts +21 -42
  274. package/src/adapters/mysql/tools/json/enhanced.ts +22 -37
  275. package/src/adapters/mysql/tools/json/helpers.ts +21 -25
  276. package/src/adapters/mysql/tools/partitioning.ts +3 -0
  277. package/src/adapters/mysql/tools/performance/__tests__/analysis.test.ts +98 -5
  278. package/src/adapters/mysql/tools/performance/__tests__/optimization-coverage.test.ts +515 -0
  279. package/src/adapters/mysql/tools/performance/__tests__/optimization.test.ts +187 -0
  280. package/src/adapters/mysql/tools/performance/analysis.ts +95 -69
  281. package/src/adapters/mysql/tools/performance/optimization.ts +182 -153
  282. package/src/adapters/mysql/tools/proxysql.ts +314 -209
  283. package/src/adapters/mysql/tools/replication.ts +84 -57
  284. package/src/adapters/mysql/tools/roles.ts +274 -226
  285. package/src/adapters/mysql/tools/router.ts +181 -85
  286. package/src/adapters/mysql/tools/schema/__tests__/constraints.test.ts +13 -0
  287. package/src/adapters/mysql/tools/schema/__tests__/management.test.ts +60 -25
  288. package/src/adapters/mysql/tools/schema/__tests__/scheduled_events.test.ts +11 -0
  289. package/src/adapters/mysql/tools/schema/__tests__/triggers.test.ts +25 -4
  290. package/src/adapters/mysql/tools/schema/__tests__/views.test.ts +46 -14
  291. package/src/adapters/mysql/tools/schema/constraints.ts +22 -3
  292. package/src/adapters/mysql/tools/schema/management.ts +60 -15
  293. package/src/adapters/mysql/tools/schema/routines.ts +26 -4
  294. package/src/adapters/mysql/tools/schema/scheduled_events.ts +25 -3
  295. package/src/adapters/mysql/tools/schema/triggers.ts +27 -2
  296. package/src/adapters/mysql/tools/schema/views.ts +46 -8
  297. package/src/adapters/mysql/tools/security/__tests__/audit.test.ts +90 -4
  298. package/src/adapters/mysql/tools/security/audit.ts +113 -39
  299. package/src/adapters/mysql/tools/security/data-protection.ts +293 -233
  300. package/src/adapters/mysql/tools/security/encryption.ts +172 -139
  301. package/src/adapters/mysql/tools/shell/__tests__/backup.test.ts +29 -0
  302. package/src/adapters/mysql/tools/shell/backup.ts +90 -73
  303. package/src/adapters/mysql/tools/shell/restore.ts +62 -48
  304. package/src/adapters/mysql/tools/spatial/__tests__/operations.test.ts +22 -14
  305. package/src/adapters/mysql/tools/spatial/__tests__/queries.test.ts +65 -51
  306. package/src/adapters/mysql/tools/spatial/geometry.ts +23 -7
  307. package/src/adapters/mysql/tools/spatial/operations.ts +60 -31
  308. package/src/adapters/mysql/tools/spatial/queries.ts +142 -65
  309. package/src/adapters/mysql/tools/spatial/setup.ts +121 -55
  310. package/src/adapters/mysql/tools/stats/__tests__/comparative.test.ts +12 -10
  311. package/src/adapters/mysql/tools/stats/comparative.ts +150 -98
  312. package/src/adapters/mysql/tools/stats/descriptive.ts +204 -127
  313. package/src/adapters/mysql/tools/sysschema/__tests__/error-paths.test.ts +222 -0
  314. package/src/adapters/mysql/tools/sysschema/__tests__/performance.test.ts +45 -0
  315. package/src/adapters/mysql/tools/sysschema/__tests__/resources.test.ts +6 -3
  316. package/src/adapters/mysql/tools/sysschema/activity.ts +52 -27
  317. package/src/adapters/mysql/tools/sysschema/performance.ts +132 -68
  318. package/src/adapters/mysql/tools/sysschema/resources.ts +105 -67
  319. package/src/adapters/mysql/tools/text/__tests__/fulltext.test.ts +45 -17
  320. package/src/adapters/mysql/tools/text/fulltext.ts +27 -38
  321. package/src/adapters/mysql/tools/transactions.ts +49 -24
  322. package/src/adapters/mysql/types/proxysql-types.ts +38 -1
  323. package/src/adapters/mysql/types/router-types.ts +1 -1
  324. package/src/adapters/mysql/types/shell-types.ts +2 -2
  325. package/src/adapters/mysql/types.ts +632 -19
  326. package/src/auth/__tests__/scopes.test.ts +2 -2
  327. package/src/auth/scopes.ts +1 -1
  328. package/src/codemode/__tests__/api.test.ts +417 -0
  329. package/src/codemode/__tests__/sandbox-factory.test.ts +158 -0
  330. package/src/codemode/__tests__/sandbox.test.ts +301 -0
  331. package/src/codemode/__tests__/security.test.ts +368 -0
  332. package/src/codemode/__tests__/worker-sandbox.test.ts +179 -0
  333. package/src/codemode/__tests__/worker-script.test.ts +226 -0
  334. package/src/codemode/api.ts +89 -5
  335. package/src/codemode/sandbox-factory.ts +1 -1
  336. package/src/codemode/types.ts +34 -0
  337. package/src/codemode/worker-sandbox.ts +74 -7
  338. package/src/codemode/worker-script.ts +157 -86
  339. package/src/constants/ServerInstructions.ts +37 -31
  340. package/src/filtering/ToolConstants.ts +1 -2
  341. package/src/filtering/__tests__/ToolFilter.test.ts +9 -9
  342. package/src/pool/ConnectionPool.ts +4 -1
  343. package/src/transports/__tests__/http.test.ts +15 -3
  344. package/src/transports/http.ts +12 -0
  345. package/src/utils/validators.ts +2 -1
  346. package/vitest.config.ts +3 -1
  347. package/CODE_MODE.md +0 -245
@@ -5,13 +5,22 @@
5
5
  * 3 tools total.
6
6
  */
7
7
 
8
- import { z } from "zod";
8
+ import { z, ZodError } from "zod";
9
9
  import type { MySQLAdapter } from "../../MySQLAdapter.js";
10
10
  import type {
11
11
  ToolDefinition,
12
12
  RequestContext,
13
13
  } from "../../../../types/index.js";
14
14
 
15
+ // =============================================================================
16
+ // Helpers
17
+ // =============================================================================
18
+
19
+ /** Extract human-readable messages from a ZodError instead of raw JSON array */
20
+ function formatZodError(error: ZodError): string {
21
+ return error.issues.map((i) => i.message).join("; ");
22
+ }
23
+
15
24
  // =============================================================================
16
25
  // Schemas
17
26
  // =============================================================================
@@ -64,24 +73,24 @@ export function createCorrelationTool(adapter: MySQLAdapter): ToolDefinition {
64
73
  idempotentHint: true,
65
74
  },
66
75
  handler: async (params: unknown, _context: RequestContext) => {
67
- const { table, column1, column2, where } =
68
- CorrelationSchema.parse(params);
69
-
70
- // Validate identifiers
71
- if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(table)) {
72
- throw new Error("Invalid table name");
73
- }
74
- if (
75
- !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(column1) ||
76
- !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(column2)
77
- ) {
78
- throw new Error("Invalid column name");
79
- }
76
+ try {
77
+ const { table, column1, column2, where } =
78
+ CorrelationSchema.parse(params);
79
+ // Validate identifiers
80
+ if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(table)) {
81
+ return { success: false, error: "Invalid table name" };
82
+ }
83
+ if (
84
+ !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(column1) ||
85
+ !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(column2)
86
+ ) {
87
+ return { success: false, error: "Invalid column name" };
88
+ }
80
89
 
81
- const whereClause = where ? `WHERE ${where}` : "";
90
+ const whereClause = where ? `WHERE ${where}` : "";
82
91
 
83
- // Calculate Pearson correlation coefficient
84
- const query = `
92
+ // Calculate Pearson correlation coefficient
93
+ const query = `
85
94
  SELECT
86
95
  (COUNT(*) * SUM(\`${column1}\` * \`${column2}\`) - SUM(\`${column1}\`) * SUM(\`${column2}\`)) /
87
96
  (SQRT(COUNT(*) * SUM(\`${column1}\` * \`${column1}\`) - SUM(\`${column1}\`) * SUM(\`${column1}\`)) *
@@ -96,7 +105,6 @@ export function createCorrelationTool(adapter: MySQLAdapter): ToolDefinition {
96
105
  ${whereClause}
97
106
  `;
98
107
 
99
- try {
100
108
  const result = await adapter.executeQuery(query);
101
109
  const stats = result.rows?.[0];
102
110
 
@@ -127,9 +135,19 @@ export function createCorrelationTool(adapter: MySQLAdapter): ToolDefinition {
127
135
  },
128
136
  };
129
137
  } catch (error) {
130
- const msg = error instanceof Error ? error.message : String(error);
138
+ if (error instanceof ZodError) {
139
+ return { success: false, error: formatZodError(error) };
140
+ }
141
+ const msg = (error instanceof Error ? error.message : String(error))
142
+ .replace(/^Query failed: /, "")
143
+ .replace(/^Execute failed: /, "");
131
144
  if (msg.includes("doesn't exist")) {
132
- return { exists: false, table };
145
+ return {
146
+ exists: false,
147
+ table:
148
+ ((params as Record<string, unknown>)?.["table"] as string) ??
149
+ "unknown",
150
+ };
133
151
  }
134
152
  return { success: false, error: msg };
135
153
  }
@@ -154,23 +172,24 @@ export function createRegressionTool(adapter: MySQLAdapter): ToolDefinition {
154
172
  idempotentHint: true,
155
173
  },
156
174
  handler: async (params: unknown, _context: RequestContext) => {
157
- const { table, xColumn, yColumn, where } = RegressionSchema.parse(params);
158
-
159
- // Validate identifiers
160
- if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(table)) {
161
- throw new Error("Invalid table name");
162
- }
163
- if (
164
- !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(xColumn) ||
165
- !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(yColumn)
166
- ) {
167
- throw new Error("Invalid column name");
168
- }
175
+ try {
176
+ const { table, xColumn, yColumn, where } =
177
+ RegressionSchema.parse(params);
178
+ // Validate identifiers
179
+ if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(table)) {
180
+ return { success: false, error: "Invalid table name" };
181
+ }
182
+ if (
183
+ !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(xColumn) ||
184
+ !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(yColumn)
185
+ ) {
186
+ return { success: false, error: "Invalid column name" };
187
+ }
169
188
 
170
- const whereClause = where ? `WHERE ${where}` : "";
189
+ const whereClause = where ? `WHERE ${where}` : "";
171
190
 
172
- // Simpler approach for MySQL
173
- const statsQuery = `
191
+ // Simpler approach for MySQL
192
+ const statsQuery = `
174
193
  SELECT
175
194
  COUNT(*) as n,
176
195
  AVG(\`${xColumn}\`) as avg_x,
@@ -184,12 +203,12 @@ export function createRegressionTool(adapter: MySQLAdapter): ToolDefinition {
184
203
  ${whereClause}
185
204
  `;
186
205
 
187
- try {
188
206
  const result = await adapter.executeQuery(statsQuery);
189
207
  const stats = result.rows?.[0];
190
208
 
191
209
  if (!stats || (stats["n"] as number) < 2) {
192
210
  return {
211
+ success: false,
193
212
  error: "Insufficient data points for regression (need at least 2)",
194
213
  sampleSize: stats?.["n"] ?? 0,
195
214
  };
@@ -229,9 +248,19 @@ export function createRegressionTool(adapter: MySQLAdapter): ToolDefinition {
229
248
  : "Poor fit",
230
249
  };
231
250
  } catch (error) {
232
- const msg = error instanceof Error ? error.message : String(error);
251
+ if (error instanceof ZodError) {
252
+ return { success: false, error: formatZodError(error) };
253
+ }
254
+ const msg = (error instanceof Error ? error.message : String(error))
255
+ .replace(/^Query failed: /, "")
256
+ .replace(/^Execute failed: /, "");
233
257
  if (msg.includes("doesn't exist")) {
234
- return { exists: false, table };
258
+ return {
259
+ exists: false,
260
+ table:
261
+ ((params as Record<string, unknown>)?.["table"] as string) ??
262
+ "unknown",
263
+ };
235
264
  }
236
265
  return { success: false, error: msg };
237
266
  }
@@ -254,53 +283,58 @@ export function createHistogramTool(adapter: MySQLAdapter): ToolDefinition {
254
283
  readOnlyHint: false, // Can update histogram
255
284
  },
256
285
  handler: async (params: unknown, _context: RequestContext) => {
257
- const { table, column, buckets, update } = HistogramSchema.parse(params);
258
-
259
- // Validate identifiers
260
- if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(table)) {
261
- throw new Error("Invalid table name");
262
- }
263
- if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(column)) {
264
- throw new Error("Invalid column name");
265
- }
286
+ try {
287
+ const { table, column, buckets, update } =
288
+ HistogramSchema.parse(params);
289
+ // Validate identifiers
290
+ if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(table)) {
291
+ return { success: false, error: "Invalid table name" };
292
+ }
293
+ if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(column)) {
294
+ return { success: false, error: "Invalid column name" };
295
+ }
266
296
 
267
- // Check if table exists (P154)
268
- const tableCheck = await adapter.executeQuery(
269
- `SELECT TABLE_NAME FROM information_schema.TABLES
297
+ // Check if table exists (P154)
298
+ const tableCheck = await adapter.executeQuery(
299
+ `SELECT TABLE_NAME FROM information_schema.TABLES
270
300
  WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,
271
- [table],
272
- );
301
+ [table],
302
+ );
273
303
 
274
- if (!tableCheck.rows || tableCheck.rows.length === 0) {
275
- return { exists: false, table };
276
- }
304
+ if (!tableCheck.rows || tableCheck.rows.length === 0) {
305
+ return { exists: false, table };
306
+ }
277
307
 
278
- // Check if column exists on the table
279
- const columnCheck = await adapter.executeQuery(
280
- `SELECT COLUMN_NAME FROM information_schema.COLUMNS
308
+ // Check if column exists on the table
309
+ const columnCheck = await adapter.executeQuery(
310
+ `SELECT COLUMN_NAME FROM information_schema.COLUMNS
281
311
  WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,
282
- [table, column],
283
- );
312
+ [table, column],
313
+ );
284
314
 
285
- if (!columnCheck.rows || columnCheck.rows.length === 0) {
286
- return {
287
- exists: false,
288
- table,
289
- column,
290
- message: `Column '${column}' does not exist on table '${table}'`,
291
- };
292
- }
315
+ if (!columnCheck.rows || columnCheck.rows.length === 0) {
316
+ return {
317
+ exists: false,
318
+ table,
319
+ column,
320
+ message: `Column '${column}' does not exist on table '${table}'`,
321
+ };
322
+ }
293
323
 
294
- if (update) {
295
- // Create or update histogram
296
- const numBuckets = Math.min(buckets, 1024);
297
- await adapter.executeQuery(
298
- `ANALYZE TABLE \`${table}\` UPDATE HISTOGRAM ON \`${column}\` WITH ${String(numBuckets)} BUCKETS`,
299
- );
300
- }
324
+ let warning: string | undefined;
325
+ if (update) {
326
+ // Create or update histogram
327
+ const numBuckets = Math.min(buckets, 1024);
328
+ if (buckets > 1024) {
329
+ warning = `Requested ${buckets} buckets; clamped to max 1024`;
330
+ }
331
+ await adapter.executeQuery(
332
+ `ANALYZE TABLE \`${table}\` UPDATE HISTOGRAM ON \`${column}\` WITH ${String(numBuckets)} BUCKETS`,
333
+ );
334
+ }
301
335
 
302
- // Get histogram info from information_schema
303
- const histogramQuery = `
336
+ // Get histogram info from information_schema
337
+ const histogramQuery = `
304
338
  SELECT
305
339
  SCHEMA_NAME as schemaName,
306
340
  TABLE_NAME as tableName,
@@ -316,31 +350,49 @@ export function createHistogramTool(adapter: MySQLAdapter): ToolDefinition {
316
350
  AND SCHEMA_NAME = DATABASE()
317
351
  `;
318
352
 
319
- const result = await adapter.executeQuery(histogramQuery, [
320
- table,
321
- column,
322
- ]);
323
-
324
- if (!result.rows || result.rows.length === 0) {
325
- return {
326
- exists: false,
327
- message: update
328
- ? "Histogram created but not yet visible in metadata"
329
- : "No histogram exists for this column",
353
+ const result = await adapter.executeQuery(histogramQuery, [
330
354
  table,
331
355
  column,
332
- };
333
- }
356
+ ]);
357
+
358
+ if (!result.rows || result.rows.length === 0) {
359
+ return {
360
+ exists: false,
361
+ message: update
362
+ ? "Histogram created but not yet visible in metadata"
363
+ : "No histogram exists for this column",
364
+ table,
365
+ column,
366
+ };
367
+ }
334
368
 
335
- const histogramRow = result.rows[0];
336
- if (!histogramRow) {
337
- return { exists: false, table, column };
369
+ const histogramRow = result.rows[0];
370
+ if (!histogramRow) {
371
+ return { exists: false, table, column };
372
+ }
373
+ return {
374
+ exists: true,
375
+ ...histogramRow,
376
+ updated: update,
377
+ ...(warning && { warning }),
378
+ };
379
+ } catch (error) {
380
+ if (error instanceof ZodError) {
381
+ return { success: false, error: formatZodError(error) };
382
+ }
383
+ const msg = (error instanceof Error ? error.message : String(error))
384
+ .replace(/^Query failed: /, "")
385
+ .replace(/^Execute failed: /, "");
386
+ if (msg.includes("doesn't exist")) {
387
+ return {
388
+ exists: false,
389
+ table:
390
+ ((params as Record<string, unknown>)?.["table"] as string) ??
391
+ "unknown",
392
+ };
393
+ }
394
+ return { success: false, error: msg };
338
395
  }
339
- return {
340
- exists: true,
341
- ...histogramRow,
342
- updated: update,
343
- };
344
396
  },
345
397
  };
346
398
  }