@neverinfamous/postgres-mcp 2.0.0 → 2.2.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 (518) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +119 -46
  3. package/dist/__tests__/benchmarks/codemode.bench.js +3 -3
  4. package/dist/__tests__/benchmarks/codemode.bench.js.map +1 -1
  5. package/dist/__tests__/benchmarks/connection-pool.bench.js +3 -3
  6. package/dist/__tests__/benchmarks/connection-pool.bench.js.map +1 -1
  7. package/dist/__tests__/benchmarks/introspection-migration.bench.d.ts +11 -0
  8. package/dist/__tests__/benchmarks/introspection-migration.bench.d.ts.map +1 -0
  9. package/dist/__tests__/benchmarks/introspection-migration.bench.js +143 -0
  10. package/dist/__tests__/benchmarks/introspection-migration.bench.js.map +1 -0
  11. package/dist/__tests__/benchmarks/resource-prompts.bench.js +0 -64
  12. package/dist/__tests__/benchmarks/resource-prompts.bench.js.map +1 -1
  13. package/dist/__tests__/benchmarks/schema-parsing.bench.js +5 -5
  14. package/dist/__tests__/benchmarks/schema-parsing.bench.js.map +1 -1
  15. package/dist/__tests__/benchmarks/tool-filtering.bench.js +17 -8
  16. package/dist/__tests__/benchmarks/tool-filtering.bench.js.map +1 -1
  17. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  18. package/dist/__tests__/mocks/adapter.js +2 -1
  19. package/dist/__tests__/mocks/adapter.js.map +1 -1
  20. package/dist/adapters/DatabaseAdapter.d.ts +6 -5
  21. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  22. package/dist/adapters/DatabaseAdapter.js +11 -20
  23. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  24. package/dist/adapters/postgresql/PostgresAdapter.d.ts +5 -26
  25. package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
  26. package/dist/adapters/postgresql/PostgresAdapter.js +31 -526
  27. package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
  28. package/dist/adapters/postgresql/prompts/index.js +1 -1
  29. package/dist/adapters/postgresql/prompts/index.js.map +1 -1
  30. package/dist/adapters/postgresql/resources/index.d.ts +1 -1
  31. package/dist/adapters/postgresql/resources/index.js +3 -3
  32. package/dist/adapters/postgresql/resources/index.js.map +1 -1
  33. package/dist/adapters/postgresql/schema-operations.d.ts +71 -0
  34. package/dist/adapters/postgresql/schema-operations.d.ts.map +1 -0
  35. package/dist/adapters/postgresql/schema-operations.js +561 -0
  36. package/dist/adapters/postgresql/schema-operations.js.map +1 -0
  37. package/dist/adapters/postgresql/schemas/admin.d.ts +4 -4
  38. package/dist/adapters/postgresql/schemas/admin.js +4 -4
  39. package/dist/adapters/postgresql/schemas/admin.js.map +1 -1
  40. package/dist/adapters/postgresql/schemas/backup.d.ts +2 -2
  41. package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -1
  42. package/dist/adapters/postgresql/schemas/backup.js +1 -3
  43. package/dist/adapters/postgresql/schemas/backup.js.map +1 -1
  44. package/dist/adapters/postgresql/schemas/core/index.d.ts +6 -0
  45. package/dist/adapters/postgresql/schemas/core/index.d.ts.map +1 -0
  46. package/dist/adapters/postgresql/schemas/core/index.js +6 -0
  47. package/dist/adapters/postgresql/schemas/core/index.js.map +1 -0
  48. package/dist/adapters/postgresql/schemas/{core.d.ts → core/queries.d.ts} +16 -171
  49. package/dist/adapters/postgresql/schemas/core/queries.d.ts.map +1 -0
  50. package/dist/adapters/postgresql/schemas/{core.js → core/queries.js} +5 -213
  51. package/dist/adapters/postgresql/schemas/core/queries.js.map +1 -0
  52. package/dist/adapters/postgresql/schemas/core/transactions.d.ts +149 -0
  53. package/dist/adapters/postgresql/schemas/core/transactions.d.ts.map +1 -0
  54. package/dist/adapters/postgresql/schemas/core/transactions.js +239 -0
  55. package/dist/adapters/postgresql/schemas/core/transactions.js.map +1 -0
  56. package/dist/adapters/postgresql/schemas/cron.d.ts +12 -12
  57. package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -1
  58. package/dist/adapters/postgresql/schemas/cron.js +38 -10
  59. package/dist/adapters/postgresql/schemas/cron.js.map +1 -1
  60. package/dist/adapters/postgresql/schemas/extensions/citext.d.ts +222 -0
  61. package/dist/adapters/postgresql/schemas/extensions/citext.d.ts.map +1 -0
  62. package/dist/adapters/postgresql/schemas/extensions/citext.js +306 -0
  63. package/dist/adapters/postgresql/schemas/extensions/citext.js.map +1 -0
  64. package/dist/adapters/postgresql/schemas/extensions/index.d.ts +15 -0
  65. package/dist/adapters/postgresql/schemas/extensions/index.d.ts.map +1 -0
  66. package/dist/adapters/postgresql/schemas/extensions/index.js +20 -0
  67. package/dist/adapters/postgresql/schemas/extensions/index.js.map +1 -0
  68. package/dist/adapters/postgresql/schemas/extensions/kcache.d.ts +164 -0
  69. package/dist/adapters/postgresql/schemas/extensions/kcache.d.ts.map +1 -0
  70. package/dist/adapters/postgresql/schemas/extensions/kcache.js +225 -0
  71. package/dist/adapters/postgresql/schemas/extensions/kcache.js.map +1 -0
  72. package/dist/adapters/postgresql/schemas/extensions/ltree.d.ts +253 -0
  73. package/dist/adapters/postgresql/schemas/extensions/ltree.d.ts.map +1 -0
  74. package/dist/adapters/postgresql/schemas/extensions/ltree.js +430 -0
  75. package/dist/adapters/postgresql/schemas/extensions/ltree.js.map +1 -0
  76. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.d.ts +251 -0
  77. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.d.ts.map +1 -0
  78. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.js +294 -0
  79. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.js.map +1 -0
  80. package/dist/adapters/postgresql/schemas/extensions/shared.d.ts +10 -0
  81. package/dist/adapters/postgresql/schemas/extensions/shared.d.ts.map +1 -0
  82. package/dist/adapters/postgresql/schemas/extensions/shared.js +15 -0
  83. package/dist/adapters/postgresql/schemas/extensions/shared.js.map +1 -0
  84. package/dist/adapters/postgresql/schemas/index.d.ts +6 -6
  85. package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -1
  86. package/dist/adapters/postgresql/schemas/index.js +8 -8
  87. package/dist/adapters/postgresql/schemas/index.js.map +1 -1
  88. package/dist/adapters/postgresql/schemas/introspection.d.ts +19 -42
  89. package/dist/adapters/postgresql/schemas/introspection.d.ts.map +1 -1
  90. package/dist/adapters/postgresql/schemas/introspection.js +72 -27
  91. package/dist/adapters/postgresql/schemas/introspection.js.map +1 -1
  92. package/dist/adapters/postgresql/schemas/jsonb/advanced.d.ts +270 -0
  93. package/dist/adapters/postgresql/schemas/jsonb/advanced.d.ts.map +1 -0
  94. package/dist/adapters/postgresql/schemas/jsonb/advanced.js +371 -0
  95. package/dist/adapters/postgresql/schemas/jsonb/advanced.js.map +1 -0
  96. package/dist/adapters/postgresql/schemas/jsonb/basic.d.ts +283 -0
  97. package/dist/adapters/postgresql/schemas/jsonb/basic.d.ts.map +1 -0
  98. package/dist/adapters/postgresql/schemas/jsonb/basic.js +456 -0
  99. package/dist/adapters/postgresql/schemas/jsonb/basic.js.map +1 -0
  100. package/dist/adapters/postgresql/schemas/jsonb/index.d.ts +6 -0
  101. package/dist/adapters/postgresql/schemas/jsonb/index.d.ts.map +1 -0
  102. package/dist/adapters/postgresql/schemas/jsonb/index.js +6 -0
  103. package/dist/adapters/postgresql/schemas/jsonb/index.js.map +1 -0
  104. package/dist/adapters/postgresql/schemas/monitoring.d.ts +4 -4
  105. package/dist/adapters/postgresql/schemas/monitoring.js +2 -2
  106. package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -1
  107. package/dist/adapters/postgresql/schemas/partitioning.d.ts +14 -14
  108. package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -1
  109. package/dist/adapters/postgresql/schemas/partitioning.js +64 -46
  110. package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -1
  111. package/dist/adapters/postgresql/schemas/partman.d.ts +16 -14
  112. package/dist/adapters/postgresql/schemas/partman.d.ts.map +1 -1
  113. package/dist/adapters/postgresql/schemas/partman.js +9 -9
  114. package/dist/adapters/postgresql/schemas/partman.js.map +1 -1
  115. package/dist/adapters/postgresql/schemas/postgis/advanced.d.ts +429 -0
  116. package/dist/adapters/postgresql/schemas/postgis/advanced.d.ts.map +1 -0
  117. package/dist/adapters/postgresql/schemas/postgis/advanced.js +495 -0
  118. package/dist/adapters/postgresql/schemas/postgis/advanced.js.map +1 -0
  119. package/dist/adapters/postgresql/schemas/{postgis.d.ts → postgis/basic.d.ts} +1 -423
  120. package/dist/adapters/postgresql/schemas/postgis/basic.d.ts.map +1 -0
  121. package/dist/adapters/postgresql/schemas/{postgis.js → postgis/basic.js} +1 -486
  122. package/dist/adapters/postgresql/schemas/postgis/basic.js.map +1 -0
  123. package/dist/adapters/postgresql/schemas/postgis/index.d.ts +6 -0
  124. package/dist/adapters/postgresql/schemas/postgis/index.d.ts.map +1 -0
  125. package/dist/adapters/postgresql/schemas/postgis/index.js +6 -0
  126. package/dist/adapters/postgresql/schemas/postgis/index.js.map +1 -0
  127. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +35 -25
  128. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -1
  129. package/dist/adapters/postgresql/schemas/schema-mgmt.js +57 -19
  130. package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -1
  131. package/dist/adapters/postgresql/schemas/stats/index.d.ts +6 -0
  132. package/dist/adapters/postgresql/schemas/stats/index.d.ts.map +1 -0
  133. package/dist/adapters/postgresql/schemas/stats/index.js +6 -0
  134. package/dist/adapters/postgresql/schemas/stats/index.js.map +1 -0
  135. package/dist/adapters/postgresql/schemas/stats/input.d.ts +260 -0
  136. package/dist/adapters/postgresql/schemas/stats/input.d.ts.map +1 -0
  137. package/dist/adapters/postgresql/schemas/{stats.js → stats/input.js} +2 -331
  138. package/dist/adapters/postgresql/schemas/stats/input.js.map +1 -0
  139. package/dist/adapters/postgresql/schemas/{stats.d.ts → stats/output.d.ts} +3 -246
  140. package/dist/adapters/postgresql/schemas/stats/output.d.ts.map +1 -0
  141. package/dist/adapters/postgresql/schemas/stats/output.js +334 -0
  142. package/dist/adapters/postgresql/schemas/stats/output.js.map +1 -0
  143. package/dist/adapters/postgresql/schemas/text-search.d.ts +18 -18
  144. package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -1
  145. package/dist/adapters/postgresql/schemas/text-search.js +12 -27
  146. package/dist/adapters/postgresql/schemas/text-search.js.map +1 -1
  147. package/dist/adapters/postgresql/schemas/vector.d.ts +10 -10
  148. package/dist/adapters/postgresql/schemas/vector.d.ts.map +1 -1
  149. package/dist/adapters/postgresql/schemas/vector.js +9 -15
  150. package/dist/adapters/postgresql/schemas/vector.js.map +1 -1
  151. package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -1
  152. package/dist/adapters/postgresql/tools/backup/dump.js +95 -76
  153. package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -1
  154. package/dist/adapters/postgresql/tools/backup/planning.d.ts.map +1 -1
  155. package/dist/adapters/postgresql/tools/backup/planning.js +345 -287
  156. package/dist/adapters/postgresql/tools/backup/planning.js.map +1 -1
  157. package/dist/adapters/postgresql/tools/citext/analysis.d.ts +24 -0
  158. package/dist/adapters/postgresql/tools/citext/analysis.d.ts.map +1 -0
  159. package/dist/adapters/postgresql/tools/{citext.js → citext/analysis.js} +50 -232
  160. package/dist/adapters/postgresql/tools/citext/analysis.js.map +1 -0
  161. package/dist/adapters/postgresql/tools/citext/index.d.ts +15 -0
  162. package/dist/adapters/postgresql/tools/citext/index.d.ts.map +1 -0
  163. package/dist/adapters/postgresql/tools/citext/index.js +23 -0
  164. package/dist/adapters/postgresql/tools/citext/index.js.map +1 -0
  165. package/dist/adapters/postgresql/tools/citext/setup.d.ts +16 -0
  166. package/dist/adapters/postgresql/tools/citext/setup.d.ts.map +1 -0
  167. package/dist/adapters/postgresql/tools/citext/setup.js +193 -0
  168. package/dist/adapters/postgresql/tools/citext/setup.js.map +1 -0
  169. package/dist/adapters/postgresql/tools/codemode/index.js +1 -1
  170. package/dist/adapters/postgresql/tools/codemode/index.js.map +1 -1
  171. package/dist/adapters/postgresql/tools/core/convenience.d.ts +12 -22
  172. package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -1
  173. package/dist/adapters/postgresql/tools/core/convenience.js +100 -210
  174. package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -1
  175. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts +1 -0
  176. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts.map +1 -1
  177. package/dist/adapters/postgresql/tools/core/error-helpers.js +8 -1
  178. package/dist/adapters/postgresql/tools/core/error-helpers.js.map +1 -1
  179. package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -1
  180. package/dist/adapters/postgresql/tools/core/health.js +124 -114
  181. package/dist/adapters/postgresql/tools/core/health.js.map +1 -1
  182. package/dist/adapters/postgresql/tools/core/index.d.ts +2 -1
  183. package/dist/adapters/postgresql/tools/core/index.d.ts.map +1 -1
  184. package/dist/adapters/postgresql/tools/core/index.js +3 -2
  185. package/dist/adapters/postgresql/tools/core/index.js.map +1 -1
  186. package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -1
  187. package/dist/adapters/postgresql/tools/core/indexes.js +151 -127
  188. package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -1
  189. package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -1
  190. package/dist/adapters/postgresql/tools/core/objects.js +186 -161
  191. package/dist/adapters/postgresql/tools/core/objects.js.map +1 -1
  192. package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -1
  193. package/dist/adapters/postgresql/tools/core/query.js +37 -25
  194. package/dist/adapters/postgresql/tools/core/query.js.map +1 -1
  195. package/dist/adapters/postgresql/tools/core/schemas.d.ts +6 -3
  196. package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -1
  197. package/dist/adapters/postgresql/tools/core/schemas.js +11 -2
  198. package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -1
  199. package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -1
  200. package/dist/adapters/postgresql/tools/core/tables.js +156 -129
  201. package/dist/adapters/postgresql/tools/core/tables.js.map +1 -1
  202. package/dist/adapters/postgresql/tools/core/utility.d.ts +26 -0
  203. package/dist/adapters/postgresql/tools/core/utility.d.ts.map +1 -0
  204. package/dist/adapters/postgresql/tools/core/utility.js +174 -0
  205. package/dist/adapters/postgresql/tools/core/utility.js.map +1 -0
  206. package/dist/adapters/postgresql/tools/cron.js +90 -43
  207. package/dist/adapters/postgresql/tools/cron.js.map +1 -1
  208. package/dist/adapters/postgresql/tools/introspection/analysis.d.ts +12 -0
  209. package/dist/adapters/postgresql/tools/introspection/analysis.d.ts.map +1 -0
  210. package/dist/adapters/postgresql/tools/introspection/analysis.js +605 -0
  211. package/dist/adapters/postgresql/tools/introspection/analysis.js.map +1 -0
  212. package/dist/adapters/postgresql/tools/introspection/graph.d.ts +55 -0
  213. package/dist/adapters/postgresql/tools/introspection/graph.d.ts.map +1 -0
  214. package/dist/adapters/postgresql/tools/introspection/graph.js +621 -0
  215. package/dist/adapters/postgresql/tools/introspection/graph.js.map +1 -0
  216. package/dist/adapters/postgresql/tools/introspection/index.d.ts +21 -0
  217. package/dist/adapters/postgresql/tools/introspection/index.d.ts.map +1 -0
  218. package/dist/adapters/postgresql/tools/introspection/index.js +31 -0
  219. package/dist/adapters/postgresql/tools/introspection/index.js.map +1 -0
  220. package/dist/adapters/postgresql/tools/introspection/migration.d.ts +15 -0
  221. package/dist/adapters/postgresql/tools/introspection/migration.d.ts.map +1 -0
  222. package/dist/adapters/postgresql/tools/introspection/migration.js +575 -0
  223. package/dist/adapters/postgresql/tools/introspection/migration.js.map +1 -0
  224. package/dist/adapters/postgresql/tools/jsonb/analytics.d.ts +20 -0
  225. package/dist/adapters/postgresql/tools/jsonb/analytics.d.ts.map +1 -0
  226. package/dist/adapters/postgresql/tools/jsonb/analytics.js +367 -0
  227. package/dist/adapters/postgresql/tools/jsonb/analytics.js.map +1 -0
  228. package/dist/adapters/postgresql/tools/jsonb/index.d.ts +4 -2
  229. package/dist/adapters/postgresql/tools/jsonb/index.d.ts.map +1 -1
  230. package/dist/adapters/postgresql/tools/jsonb/index.js +8 -4
  231. package/dist/adapters/postgresql/tools/jsonb/index.js.map +1 -1
  232. package/dist/adapters/postgresql/tools/jsonb/read.d.ts +38 -0
  233. package/dist/adapters/postgresql/tools/jsonb/read.d.ts.map +1 -0
  234. package/dist/adapters/postgresql/tools/jsonb/{basic.js → read.js} +41 -482
  235. package/dist/adapters/postgresql/tools/jsonb/read.js.map +1 -0
  236. package/dist/adapters/postgresql/tools/jsonb/{advanced.d.ts → transform.d.ts} +1 -13
  237. package/dist/adapters/postgresql/tools/jsonb/transform.d.ts.map +1 -0
  238. package/dist/adapters/postgresql/tools/jsonb/{advanced.js → transform.js} +26 -357
  239. package/dist/adapters/postgresql/tools/jsonb/transform.js.map +1 -0
  240. package/dist/adapters/postgresql/tools/jsonb/write.d.ts +14 -0
  241. package/dist/adapters/postgresql/tools/jsonb/write.d.ts.map +1 -0
  242. package/dist/adapters/postgresql/tools/jsonb/write.js +468 -0
  243. package/dist/adapters/postgresql/tools/jsonb/write.js.map +1 -0
  244. package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -1
  245. package/dist/adapters/postgresql/tools/kcache.js +116 -51
  246. package/dist/adapters/postgresql/tools/kcache.js.map +1 -1
  247. package/dist/adapters/postgresql/tools/ltree.js +346 -260
  248. package/dist/adapters/postgresql/tools/ltree.js.map +1 -1
  249. package/dist/adapters/postgresql/tools/migration/index.d.ts +15 -0
  250. package/dist/adapters/postgresql/tools/migration/index.d.ts.map +1 -0
  251. package/dist/adapters/postgresql/tools/migration/index.js +23 -0
  252. package/dist/adapters/postgresql/tools/migration/index.js.map +1 -0
  253. package/dist/adapters/postgresql/tools/monitoring/analysis.d.ts +15 -0
  254. package/dist/adapters/postgresql/tools/monitoring/analysis.d.ts.map +1 -0
  255. package/dist/adapters/postgresql/tools/{monitoring.js → monitoring/analysis.js} +24 -359
  256. package/dist/adapters/postgresql/tools/monitoring/analysis.js.map +1 -0
  257. package/dist/adapters/postgresql/tools/monitoring/basic.d.ts +17 -0
  258. package/dist/adapters/postgresql/tools/monitoring/basic.d.ts.map +1 -0
  259. package/dist/adapters/postgresql/tools/monitoring/basic.js +432 -0
  260. package/dist/adapters/postgresql/tools/monitoring/basic.js.map +1 -0
  261. package/dist/adapters/postgresql/tools/monitoring/index.d.ts +16 -0
  262. package/dist/adapters/postgresql/tools/monitoring/index.d.ts.map +1 -0
  263. package/dist/adapters/postgresql/tools/monitoring/index.js +31 -0
  264. package/dist/adapters/postgresql/tools/monitoring/index.js.map +1 -0
  265. package/dist/adapters/postgresql/tools/partitioning/index.d.ts +15 -0
  266. package/dist/adapters/postgresql/tools/partitioning/index.d.ts.map +1 -0
  267. package/dist/adapters/postgresql/tools/partitioning/index.js +23 -0
  268. package/dist/adapters/postgresql/tools/partitioning/index.js.map +1 -0
  269. package/dist/adapters/postgresql/tools/partitioning/info.d.ts +11 -0
  270. package/dist/adapters/postgresql/tools/partitioning/info.d.ts.map +1 -0
  271. package/dist/adapters/postgresql/tools/partitioning/info.js +302 -0
  272. package/dist/adapters/postgresql/tools/partitioning/info.js.map +1 -0
  273. package/dist/adapters/postgresql/tools/partitioning/management.d.ts +28 -0
  274. package/dist/adapters/postgresql/tools/partitioning/management.d.ts.map +1 -0
  275. package/dist/adapters/postgresql/tools/{partitioning.js → partitioning/management.js} +48 -307
  276. package/dist/adapters/postgresql/tools/partitioning/management.js.map +1 -0
  277. package/dist/adapters/postgresql/tools/partman/helpers.d.ts +29 -0
  278. package/dist/adapters/postgresql/tools/partman/helpers.d.ts.map +1 -0
  279. package/dist/adapters/postgresql/tools/partman/helpers.js +59 -0
  280. package/dist/adapters/postgresql/tools/partman/helpers.js.map +1 -0
  281. package/dist/adapters/postgresql/tools/partman/index.d.ts +2 -1
  282. package/dist/adapters/postgresql/tools/partman/index.d.ts.map +1 -1
  283. package/dist/adapters/postgresql/tools/partman/index.js +4 -2
  284. package/dist/adapters/postgresql/tools/partman/index.js.map +1 -1
  285. package/dist/adapters/postgresql/tools/partman/maintenance.d.ts +20 -0
  286. package/dist/adapters/postgresql/tools/partman/maintenance.d.ts.map +1 -0
  287. package/dist/adapters/postgresql/tools/partman/maintenance.js +496 -0
  288. package/dist/adapters/postgresql/tools/partman/maintenance.js.map +1 -0
  289. package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -1
  290. package/dist/adapters/postgresql/tools/partman/management.js +438 -383
  291. package/dist/adapters/postgresql/tools/partman/management.js.map +1 -1
  292. package/dist/adapters/postgresql/tools/partman/operations.d.ts +1 -13
  293. package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -1
  294. package/dist/adapters/postgresql/tools/partman/operations.js +171 -652
  295. package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -1
  296. package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -1
  297. package/dist/adapters/postgresql/tools/performance/analysis.js +69 -42
  298. package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -1
  299. package/dist/adapters/postgresql/tools/performance/anomaly-detection.d.ts +18 -0
  300. package/dist/adapters/postgresql/tools/performance/anomaly-detection.d.ts.map +1 -0
  301. package/dist/adapters/postgresql/tools/performance/anomaly-detection.js +533 -0
  302. package/dist/adapters/postgresql/tools/performance/anomaly-detection.js.map +1 -0
  303. package/dist/adapters/postgresql/tools/performance/diagnostics.d.ts +11 -0
  304. package/dist/adapters/postgresql/tools/performance/diagnostics.d.ts.map +1 -0
  305. package/dist/adapters/postgresql/tools/performance/diagnostics.js +332 -0
  306. package/dist/adapters/postgresql/tools/performance/diagnostics.js.map +1 -0
  307. package/dist/adapters/postgresql/tools/performance/index.d.ts +1 -1
  308. package/dist/adapters/postgresql/tools/performance/index.d.ts.map +1 -1
  309. package/dist/adapters/postgresql/tools/performance/index.js +7 -1
  310. package/dist/adapters/postgresql/tools/performance/index.js.map +1 -1
  311. package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -1
  312. package/dist/adapters/postgresql/tools/performance/monitoring.js +80 -55
  313. package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -1
  314. package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -1
  315. package/dist/adapters/postgresql/tools/performance/optimization.js +18 -11
  316. package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -1
  317. package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -1
  318. package/dist/adapters/postgresql/tools/performance/stats.js +439 -318
  319. package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -1
  320. package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -1
  321. package/dist/adapters/postgresql/tools/pgcrypto.js +45 -77
  322. package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -1
  323. package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -1
  324. package/dist/adapters/postgresql/tools/postgis/basic.js +121 -93
  325. package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -1
  326. package/dist/adapters/postgresql/tools/schema/index.d.ts +16 -0
  327. package/dist/adapters/postgresql/tools/schema/index.d.ts.map +1 -0
  328. package/dist/adapters/postgresql/tools/schema/index.js +32 -0
  329. package/dist/adapters/postgresql/tools/schema/index.js.map +1 -0
  330. package/dist/adapters/postgresql/tools/schema/objects.d.ts +15 -0
  331. package/dist/adapters/postgresql/tools/schema/objects.d.ts.map +1 -0
  332. package/dist/adapters/postgresql/tools/schema/objects.js +378 -0
  333. package/dist/adapters/postgresql/tools/schema/objects.js.map +1 -0
  334. package/dist/adapters/postgresql/tools/schema/views.d.ts +15 -0
  335. package/dist/adapters/postgresql/tools/schema/views.d.ts.map +1 -0
  336. package/dist/adapters/postgresql/tools/{schema.js → schema/views.js} +64 -386
  337. package/dist/adapters/postgresql/tools/schema/views.js.map +1 -0
  338. package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -1
  339. package/dist/adapters/postgresql/tools/stats/advanced.js +1 -218
  340. package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -1
  341. package/dist/adapters/postgresql/tools/stats/math-utils.d.ts +33 -0
  342. package/dist/adapters/postgresql/tools/stats/math-utils.d.ts.map +1 -0
  343. package/dist/adapters/postgresql/tools/stats/math-utils.js +225 -0
  344. package/dist/adapters/postgresql/tools/stats/math-utils.js.map +1 -0
  345. package/dist/adapters/postgresql/tools/text/index.d.ts +16 -0
  346. package/dist/adapters/postgresql/tools/text/index.d.ts.map +1 -0
  347. package/dist/adapters/postgresql/tools/text/index.js +33 -0
  348. package/dist/adapters/postgresql/tools/text/index.js.map +1 -0
  349. package/dist/adapters/postgresql/tools/text/matching.d.ts +17 -0
  350. package/dist/adapters/postgresql/tools/text/matching.d.ts.map +1 -0
  351. package/dist/adapters/postgresql/tools/text/matching.js +565 -0
  352. package/dist/adapters/postgresql/tools/text/matching.js.map +1 -0
  353. package/dist/adapters/postgresql/tools/text/search.d.ts +17 -0
  354. package/dist/adapters/postgresql/tools/text/search.d.ts.map +1 -0
  355. package/dist/adapters/postgresql/tools/text/search.js +653 -0
  356. package/dist/adapters/postgresql/tools/text/search.js.map +1 -0
  357. package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -1
  358. package/dist/adapters/postgresql/tools/transactions.js +11 -27
  359. package/dist/adapters/postgresql/tools/transactions.js.map +1 -1
  360. package/dist/adapters/postgresql/tools/vector/{basic.d.ts → data.d.ts} +10 -8
  361. package/dist/adapters/postgresql/tools/vector/data.d.ts.map +1 -0
  362. package/dist/adapters/postgresql/tools/vector/data.js +540 -0
  363. package/dist/adapters/postgresql/tools/vector/data.js.map +1 -0
  364. package/dist/adapters/postgresql/tools/vector/index.d.ts.map +1 -1
  365. package/dist/adapters/postgresql/tools/vector/index.js +6 -2
  366. package/dist/adapters/postgresql/tools/vector/index.js.map +1 -1
  367. package/dist/adapters/postgresql/tools/vector/management.d.ts +11 -0
  368. package/dist/adapters/postgresql/tools/vector/management.d.ts.map +1 -0
  369. package/dist/adapters/postgresql/tools/vector/management.js +425 -0
  370. package/dist/adapters/postgresql/tools/vector/management.js.map +1 -0
  371. package/dist/adapters/postgresql/tools/vector/query.d.ts +14 -0
  372. package/dist/adapters/postgresql/tools/vector/query.d.ts.map +1 -0
  373. package/dist/adapters/postgresql/tools/vector/query.js +767 -0
  374. package/dist/adapters/postgresql/tools/vector/query.js.map +1 -0
  375. package/dist/adapters/postgresql/tools/vector/{advanced.d.ts → search-advanced.d.ts} +4 -5
  376. package/dist/adapters/postgresql/tools/vector/search-advanced.d.ts.map +1 -0
  377. package/dist/adapters/postgresql/tools/vector/search-advanced.js +626 -0
  378. package/dist/adapters/postgresql/tools/vector/search-advanced.js.map +1 -0
  379. package/dist/auth/scopes.d.ts.map +1 -1
  380. package/dist/auth/scopes.js +3 -1
  381. package/dist/auth/scopes.js.map +1 -1
  382. package/dist/cli/args.d.ts +3 -2
  383. package/dist/cli/args.d.ts.map +1 -1
  384. package/dist/cli/args.js +4 -3
  385. package/dist/cli/args.js.map +1 -1
  386. package/dist/cli.js +16 -4
  387. package/dist/cli.js.map +1 -1
  388. package/dist/codemode/api/aliases.d.ts +14 -0
  389. package/dist/codemode/api/aliases.d.ts.map +1 -0
  390. package/dist/codemode/api/aliases.js +503 -0
  391. package/dist/codemode/api/aliases.js.map +1 -0
  392. package/dist/codemode/api/group-api.d.ts +23 -0
  393. package/dist/codemode/api/group-api.d.ts.map +1 -0
  394. package/dist/codemode/api/group-api.js +179 -0
  395. package/dist/codemode/api/group-api.js.map +1 -0
  396. package/dist/codemode/{api.d.ts → api/index.d.ts} +5 -4
  397. package/dist/codemode/api/index.d.ts.map +1 -0
  398. package/dist/codemode/api/index.js +195 -0
  399. package/dist/codemode/api/index.js.map +1 -0
  400. package/dist/codemode/api/maps.d.ts +47 -0
  401. package/dist/codemode/api/maps.d.ts.map +1 -0
  402. package/dist/codemode/api/maps.js +529 -0
  403. package/dist/codemode/api/maps.js.map +1 -0
  404. package/dist/codemode/api/normalize.d.ts +13 -0
  405. package/dist/codemode/api/normalize.d.ts.map +1 -0
  406. package/dist/codemode/api/normalize.js +120 -0
  407. package/dist/codemode/api/normalize.js.map +1 -0
  408. package/dist/codemode/index.d.ts +1 -1
  409. package/dist/codemode/index.d.ts.map +1 -1
  410. package/dist/codemode/index.js +1 -1
  411. package/dist/codemode/index.js.map +1 -1
  412. package/dist/codemode/sandbox.d.ts.map +1 -1
  413. package/dist/codemode/sandbox.js +8 -25
  414. package/dist/codemode/sandbox.js.map +1 -1
  415. package/dist/filtering/ToolConstants.d.ts +11 -11
  416. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  417. package/dist/filtering/ToolConstants.js +28 -15
  418. package/dist/filtering/ToolConstants.js.map +1 -1
  419. package/dist/filtering/ToolFilter.d.ts +0 -32
  420. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  421. package/dist/filtering/ToolFilter.js +0 -43
  422. package/dist/filtering/ToolFilter.js.map +1 -1
  423. package/dist/server/McpServer.d.ts +1 -1
  424. package/dist/server/McpServer.d.ts.map +1 -1
  425. package/dist/server/McpServer.js +1 -2
  426. package/dist/server/McpServer.js.map +1 -1
  427. package/dist/transports/http.d.ts +55 -10
  428. package/dist/transports/http.d.ts.map +1 -1
  429. package/dist/transports/http.js +301 -50
  430. package/dist/transports/http.js.map +1 -1
  431. package/dist/types/filtering.d.ts +1 -1
  432. package/dist/types/filtering.d.ts.map +1 -1
  433. package/dist/types/index.d.ts +2 -2
  434. package/dist/types/index.d.ts.map +1 -1
  435. package/dist/types/index.js.map +1 -1
  436. package/dist/types/mcp.d.ts +0 -21
  437. package/dist/types/mcp.d.ts.map +1 -1
  438. package/dist/types/schema.d.ts +0 -79
  439. package/dist/types/schema.d.ts.map +1 -1
  440. package/dist/utils/fts-config.d.ts +0 -6
  441. package/dist/utils/fts-config.d.ts.map +1 -1
  442. package/dist/utils/fts-config.js +1 -1
  443. package/dist/utils/fts-config.js.map +1 -1
  444. package/dist/utils/icons.d.ts.map +1 -1
  445. package/dist/utils/icons.js +5 -0
  446. package/dist/utils/icons.js.map +1 -1
  447. package/dist/utils/identifiers.d.ts.map +1 -1
  448. package/dist/utils/identifiers.js +6 -6
  449. package/dist/utils/identifiers.js.map +1 -1
  450. package/dist/utils/logger.d.ts +6 -6
  451. package/dist/utils/logger.d.ts.map +1 -1
  452. package/dist/utils/logger.js +18 -15
  453. package/dist/utils/logger.js.map +1 -1
  454. package/dist/utils/progress-utils.d.ts +3 -14
  455. package/dist/utils/progress-utils.d.ts.map +1 -1
  456. package/dist/utils/progress-utils.js +2 -21
  457. package/dist/utils/progress-utils.js.map +1 -1
  458. package/dist/utils/version.d.ts +9 -0
  459. package/dist/utils/version.d.ts.map +1 -0
  460. package/dist/utils/version.js +12 -0
  461. package/dist/utils/version.js.map +1 -0
  462. package/dist/utils/where-clause.d.ts +4 -0
  463. package/dist/utils/where-clause.d.ts.map +1 -1
  464. package/dist/utils/where-clause.js +16 -0
  465. package/dist/utils/where-clause.js.map +1 -1
  466. package/package.json +6 -4
  467. package/dist/adapters/postgresql/schemas/core.d.ts.map +0 -1
  468. package/dist/adapters/postgresql/schemas/core.js.map +0 -1
  469. package/dist/adapters/postgresql/schemas/extensions.d.ts +0 -852
  470. package/dist/adapters/postgresql/schemas/extensions.d.ts.map +0 -1
  471. package/dist/adapters/postgresql/schemas/extensions.js +0 -1202
  472. package/dist/adapters/postgresql/schemas/extensions.js.map +0 -1
  473. package/dist/adapters/postgresql/schemas/jsonb.d.ts +0 -541
  474. package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +0 -1
  475. package/dist/adapters/postgresql/schemas/jsonb.js +0 -814
  476. package/dist/adapters/postgresql/schemas/jsonb.js.map +0 -1
  477. package/dist/adapters/postgresql/schemas/postgis.d.ts.map +0 -1
  478. package/dist/adapters/postgresql/schemas/postgis.js.map +0 -1
  479. package/dist/adapters/postgresql/schemas/stats.d.ts.map +0 -1
  480. package/dist/adapters/postgresql/schemas/stats.js.map +0 -1
  481. package/dist/adapters/postgresql/tools/citext.d.ts +0 -18
  482. package/dist/adapters/postgresql/tools/citext.d.ts.map +0 -1
  483. package/dist/adapters/postgresql/tools/citext.js.map +0 -1
  484. package/dist/adapters/postgresql/tools/introspection.d.ts +0 -15
  485. package/dist/adapters/postgresql/tools/introspection.d.ts.map +0 -1
  486. package/dist/adapters/postgresql/tools/introspection.js +0 -1682
  487. package/dist/adapters/postgresql/tools/introspection.js.map +0 -1
  488. package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +0 -1
  489. package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +0 -1
  490. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts +0 -20
  491. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +0 -1
  492. package/dist/adapters/postgresql/tools/jsonb/basic.js.map +0 -1
  493. package/dist/adapters/postgresql/tools/monitoring.d.ts +0 -13
  494. package/dist/adapters/postgresql/tools/monitoring.d.ts.map +0 -1
  495. package/dist/adapters/postgresql/tools/monitoring.js.map +0 -1
  496. package/dist/adapters/postgresql/tools/partitioning.d.ts +0 -13
  497. package/dist/adapters/postgresql/tools/partitioning.d.ts.map +0 -1
  498. package/dist/adapters/postgresql/tools/partitioning.js.map +0 -1
  499. package/dist/adapters/postgresql/tools/schema.d.ts +0 -13
  500. package/dist/adapters/postgresql/tools/schema.d.ts.map +0 -1
  501. package/dist/adapters/postgresql/tools/schema.js.map +0 -1
  502. package/dist/adapters/postgresql/tools/text.d.ts +0 -13
  503. package/dist/adapters/postgresql/tools/text.d.ts.map +0 -1
  504. package/dist/adapters/postgresql/tools/text.js +0 -1082
  505. package/dist/adapters/postgresql/tools/text.js.map +0 -1
  506. package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +0 -1
  507. package/dist/adapters/postgresql/tools/vector/advanced.js +0 -958
  508. package/dist/adapters/postgresql/tools/vector/advanced.js.map +0 -1
  509. package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +0 -1
  510. package/dist/adapters/postgresql/tools/vector/basic.js +0 -1165
  511. package/dist/adapters/postgresql/tools/vector/basic.js.map +0 -1
  512. package/dist/codemode/api.d.ts.map +0 -1
  513. package/dist/codemode/api.js +0 -1544
  514. package/dist/codemode/api.js.map +0 -1
  515. package/dist/utils/promptGenerator.d.ts +0 -20
  516. package/dist/utils/promptGenerator.d.ts.map +0 -1
  517. package/dist/utils/promptGenerator.js +0 -81
  518. package/dist/utils/promptGenerator.js.map +0 -1
@@ -0,0 +1,626 @@
1
+ /**
2
+ * PostgreSQL pgvector - Search & Analysis
3
+ *
4
+ * High-level search and analysis: cluster, hybridSearch, performance.
5
+ */
6
+ import { z } from "zod";
7
+ import { readOnly } from "../../../../utils/annotations.js";
8
+ import { getToolIcons } from "../../../../utils/icons.js";
9
+ import { formatPostgresError } from "../core/error-helpers.js";
10
+ import { sanitizeIdentifier, sanitizeTableName, } from "../../../../utils/identifiers.js";
11
+ import { checkTableAndColumn, truncateVector } from "./data.js";
12
+ import { VectorClusterOutputSchema, HybridSearchOutputSchema, VectorPerformanceOutputSchema, } from "../../schemas/index.js";
13
+ /**
14
+ * Parse a PostgreSQL vector string to a number array.
15
+ */
16
+ function parseVector(vecStr) {
17
+ if (typeof vecStr !== "string")
18
+ return null;
19
+ try {
20
+ const cleaned = vecStr.replace(/[[\]()]/g, "");
21
+ return cleaned.split(",").map(Number);
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ }
27
+ export function createVectorClusterTool(adapter) {
28
+ // Schema with parameter smoothing
29
+ const ClusterSchemaBase = z.object({
30
+ table: z.string().optional().describe("Table name"),
31
+ tableName: z.string().optional().describe("Alias for table"),
32
+ column: z.string().optional().describe("Vector column"),
33
+ col: z.string().optional().describe("Alias for column"),
34
+ k: z.any().optional().describe("Number of clusters"),
35
+ clusters: z.any().optional().describe("Alias for k (number of clusters)"),
36
+ iterations: z.any().optional().describe("Max iterations (default: 10)"),
37
+ sampleSize: z.any().optional().describe("Sample size for large tables"),
38
+ schema: z.string().optional().describe("Database schema (default: public)"),
39
+ });
40
+ const ClusterSchema = ClusterSchemaBase.transform((data) => {
41
+ const rawK = (data.k ?? data.clusters);
42
+ const rawIterations = data.iterations;
43
+ const rawSampleSize = data.sampleSize;
44
+ return {
45
+ table: data.table ?? data.tableName ?? "",
46
+ column: data.column ?? data.col ?? "",
47
+ k: rawK != null ? Number(rawK) : undefined,
48
+ iterations: rawIterations != null ? Number(rawIterations) : undefined,
49
+ sampleSize: rawSampleSize != null ? Number(rawSampleSize) : undefined,
50
+ schema: data.schema,
51
+ };
52
+ }).refine((data) => data.k !== undefined, {
53
+ message: "k (or clusters alias) is required",
54
+ });
55
+ return {
56
+ name: "pg_vector_cluster",
57
+ description: "Perform K-means clustering on vectors. Returns cluster centroids only (not row assignments). To assign rows to clusters, compare row vectors to centroids using pg_vector_distance.",
58
+ group: "vector",
59
+ inputSchema: ClusterSchemaBase,
60
+ outputSchema: VectorClusterOutputSchema,
61
+ annotations: readOnly("Vector Cluster"),
62
+ icons: getToolIcons("vector", readOnly("Vector Cluster")),
63
+ handler: async (params, _context) => {
64
+ try {
65
+ const parsed = ClusterSchema.parse(params);
66
+ // Refine guarantees k is defined, but add explicit check for TypeScript
67
+ const k = parsed.k;
68
+ if (k === undefined) {
69
+ throw new Error("k (or clusters alias) is required");
70
+ }
71
+ if (isNaN(k)) {
72
+ return {
73
+ success: false,
74
+ error: `Validation error: k must be a valid number, received "${String(parsed.k)}"`,
75
+ suggestion: "Provide a numeric value for k (e.g., 3, 5, 10)",
76
+ };
77
+ }
78
+ if (k < 1) {
79
+ return {
80
+ success: false,
81
+ error: "k must be at least 1 (number of clusters)",
82
+ suggestion: "Provide k >= 1, typically between 2 and 20",
83
+ };
84
+ }
85
+ const maxIter = parsed.iterations ?? 10;
86
+ const sample = parsed.sampleSize ?? 10000;
87
+ const schemaName = parsed.schema ?? "public";
88
+ const tableName = sanitizeTableName(parsed.table, parsed.schema);
89
+ const columnName = sanitizeIdentifier(parsed.column);
90
+ // Two-step existence check: table first, then column
91
+ const existenceCheck = await checkTableAndColumn(adapter, parsed.table, parsed.column, schemaName);
92
+ if (existenceCheck) {
93
+ return { success: false, ...existenceCheck };
94
+ }
95
+ // Validate column is actually a vector type
96
+ const typeCheckSql = `
97
+ SELECT udt_name FROM information_schema.columns
98
+ WHERE table_schema = $1 AND table_name = $2 AND column_name = $3
99
+ `;
100
+ const typeResult = await adapter.executeQuery(typeCheckSql, [
101
+ schemaName,
102
+ parsed.table,
103
+ parsed.column,
104
+ ]);
105
+ const udtName = typeResult.rows?.[0]?.["udt_name"];
106
+ if (udtName !== "vector") {
107
+ return {
108
+ success: false,
109
+ error: `Column '${parsed.column}' is not a vector column (type: ${udtName ?? "unknown"})`,
110
+ suggestion: "Use a column with vector type for clustering",
111
+ };
112
+ }
113
+ const sampleSql = `
114
+ SELECT ${columnName} as vec
115
+ FROM ${tableName}
116
+ WHERE ${columnName} IS NOT NULL
117
+ ORDER BY RANDOM()
118
+ LIMIT ${String(sample)}
119
+ `;
120
+ const sampleResult = await adapter.executeQuery(sampleSql);
121
+ const vectors = (sampleResult.rows ?? []);
122
+ if (vectors.length < k) {
123
+ return {
124
+ success: false,
125
+ error: `Cannot create ${String(k)} clusters with only ${String(vectors.length)} data points. Reduce k to at most ${String(vectors.length)} or increase sampleSize.`,
126
+ k: k,
127
+ availableDataPoints: vectors.length,
128
+ sampleSize: sample,
129
+ };
130
+ }
131
+ const initialCentroids = vectors.slice(0, k).map((v) => v.vec);
132
+ const clusterSql = `
133
+ WITH sample_vectors AS (
134
+ SELECT ROW_NUMBER() OVER () as id, ${columnName} as vec
135
+ FROM ${tableName}
136
+ WHERE ${columnName} IS NOT NULL
137
+ LIMIT ${String(sample)}
138
+ ),
139
+ centroids AS (
140
+ SELECT unnest($1::vector[]) as centroid
141
+ )
142
+ SELECT
143
+ c.centroid,
144
+ COUNT(*) as cluster_size,
145
+ AVG(s.vec) as new_centroid
146
+ FROM sample_vectors s
147
+ CROSS JOIN LATERAL (
148
+ SELECT centroid, ROW_NUMBER() OVER (ORDER BY s.vec <-> centroid) as rn
149
+ FROM centroids
150
+ ) c
151
+ WHERE c.rn = 1
152
+ GROUP BY c.centroid
153
+ `;
154
+ let centroids = initialCentroids;
155
+ for (let i = 0; i < maxIter; i++) {
156
+ try {
157
+ const result = await adapter.executeQuery(clusterSql, [centroids]);
158
+ centroids = (result.rows ?? []).map((r) => r["new_centroid"]);
159
+ }
160
+ catch {
161
+ break;
162
+ }
163
+ }
164
+ // Truncate large centroids for display (like pg_vector_aggregate does)
165
+ const parsedCentroids = centroids.map((c) => {
166
+ const parsed = parseVector(c);
167
+ if (parsed === null) {
168
+ return { vector: c };
169
+ }
170
+ // For large vectors, use preview format (first 10 dimensions)
171
+ if (parsed.length > 10) {
172
+ const truncated = truncateVector(parsed, 10);
173
+ return {
174
+ preview: truncated.preview,
175
+ dimensions: truncated.dimensions,
176
+ truncated: truncated.truncated,
177
+ };
178
+ }
179
+ return { vector: parsed };
180
+ });
181
+ return {
182
+ k: k,
183
+ iterations: maxIter,
184
+ sampleSize: vectors.length,
185
+ centroids: parsedCentroids,
186
+ note: "For production clustering, consider using specialized libraries",
187
+ };
188
+ }
189
+ catch (error) {
190
+ return {
191
+ success: false,
192
+ error: formatPostgresError(error, { tool: "pg_vector_cluster" }),
193
+ };
194
+ }
195
+ },
196
+ };
197
+ }
198
+ export function createHybridSearchTool(adapter) {
199
+ // Schema with parameter smoothing
200
+ const HybridSearchSchemaBase = z.object({
201
+ table: z.string().optional().describe("Table name"),
202
+ tableName: z.string().optional().describe("Alias for table"),
203
+ vectorColumn: z.string().optional().describe("Vector column"),
204
+ vectorCol: z.string().optional().describe("Alias for vectorColumn"),
205
+ textColumn: z.string().describe("Text column for FTS"),
206
+ vector: z.array(z.number()).describe("Query vector"),
207
+ textQuery: z.string().describe("Text search query"),
208
+ vectorWeight: z.coerce
209
+ .number()
210
+ .optional()
211
+ .describe("Weight for vector score (0-1, default: 0.5)"),
212
+ limit: z.coerce.number().optional().describe("Max results"),
213
+ select: z
214
+ .array(z.string())
215
+ .optional()
216
+ .describe("Columns to return (defaults to non-vector columns)"),
217
+ });
218
+ const HybridSearchSchema = HybridSearchSchemaBase.transform((data) => ({
219
+ table: data.table ?? data.tableName ?? "",
220
+ vectorColumn: data.vectorColumn ?? data.vectorCol ?? "",
221
+ textColumn: data.textColumn,
222
+ vector: data.vector,
223
+ textQuery: data.textQuery,
224
+ vectorWeight: data.vectorWeight,
225
+ limit: data.limit,
226
+ select: data.select,
227
+ }));
228
+ return {
229
+ name: "pg_hybrid_search",
230
+ description: "Combined vector similarity and full-text search with weighted scoring.",
231
+ group: "vector",
232
+ inputSchema: HybridSearchSchemaBase,
233
+ outputSchema: HybridSearchOutputSchema,
234
+ annotations: readOnly("Hybrid Search"),
235
+ icons: getToolIcons("vector", readOnly("Hybrid Search")),
236
+ handler: async (params, _context) => {
237
+ try {
238
+ const parsed = HybridSearchSchema.parse(params);
239
+ // Validate required parameters before using them
240
+ if (parsed.table === "") {
241
+ return {
242
+ success: false,
243
+ error: "table (or tableName) parameter is required",
244
+ requiredParams: [
245
+ "table",
246
+ "vectorColumn",
247
+ "textColumn",
248
+ "vector",
249
+ "textQuery",
250
+ ],
251
+ };
252
+ }
253
+ if (parsed.vectorColumn === "") {
254
+ return {
255
+ success: false,
256
+ error: "vectorColumn (or vectorCol) parameter is required",
257
+ requiredParams: [
258
+ "table",
259
+ "vectorColumn",
260
+ "textColumn",
261
+ "vector",
262
+ "textQuery",
263
+ ],
264
+ };
265
+ }
266
+ // Parse schema.table format (embedded schema takes priority)
267
+ let resolvedTable = parsed.table;
268
+ let resolvedSchema;
269
+ if (parsed.table.includes(".")) {
270
+ const parts = parsed.table.split(".");
271
+ resolvedSchema = parts[0];
272
+ resolvedTable = parts[1] ?? parsed.table;
273
+ }
274
+ const schemaName = resolvedSchema ?? "public";
275
+ const tableName = sanitizeTableName(resolvedTable, schemaName);
276
+ // P154: Verify table and vectorColumn exist before querying
277
+ const existenceError = await checkTableAndColumn(adapter, resolvedTable, parsed.vectorColumn, schemaName);
278
+ if (existenceError !== null) {
279
+ return { success: false, ...existenceError };
280
+ }
281
+ // Check column type - reject if it's a tsvector
282
+ const colTypeSql = `
283
+ SELECT data_type, udt_name
284
+ FROM information_schema.columns
285
+ WHERE table_schema = $1 AND table_name = $2 AND column_name = $3
286
+ `;
287
+ const colTypeResult = await adapter.executeQuery(colTypeSql, [
288
+ schemaName,
289
+ resolvedTable,
290
+ parsed.vectorColumn,
291
+ ]);
292
+ const colType = colTypeResult.rows?.[0];
293
+ if (colType?.udt_name === "tsvector" ||
294
+ colType?.data_type === "tsvector") {
295
+ return {
296
+ success: false,
297
+ error: `Column '${parsed.vectorColumn}' is tsvector, not vector. For hybrid search, vectorColumn must be a pgvector column (type 'vector'). Use textColumn for text search.`,
298
+ suggestion: `Specify a different vector column, or check your table structure with pg_describe_table`,
299
+ };
300
+ }
301
+ if (colType?.udt_name !== "vector" && colType !== undefined) {
302
+ const actualType = colType.udt_name ?? colType.data_type ?? "unknown";
303
+ return {
304
+ success: false,
305
+ error: `Column '${parsed.vectorColumn}' has type '${actualType}', not 'vector'. Hybrid search requires a pgvector column.`,
306
+ columnType: actualType,
307
+ };
308
+ }
309
+ // Check textColumn type to determine if we need to_tsvector() wrapping
310
+ const textColTypeResult = await adapter.executeQuery(colTypeSql, [
311
+ schemaName,
312
+ resolvedTable,
313
+ parsed.textColumn,
314
+ ]);
315
+ const textColType = textColTypeResult.rows?.[0];
316
+ const isTextColumnTsvector = textColType?.udt_name === "tsvector" ||
317
+ textColType?.data_type === "tsvector";
318
+ // Use tsvector column directly, otherwise wrap with to_tsvector()
319
+ const textExpr = isTextColumnTsvector
320
+ ? `"${parsed.textColumn}"`
321
+ : `to_tsvector('english', "${parsed.textColumn}")`;
322
+ const vectorWeight = parsed.vectorWeight ?? 0.5;
323
+ // Fix floating point precision (e.g., 0.30000000000000004 -> 0.3)
324
+ const textWeight = Math.round((1 - vectorWeight) * 1000) / 1000;
325
+ const limitVal = parsed.limit ?? 10;
326
+ const vectorStr = `[${parsed.vector.join(",")}]`;
327
+ // Build select clause - use specified columns, excluding vector column if using t.*
328
+ let selectCols;
329
+ if (parsed.select !== undefined && parsed.select.length > 0) {
330
+ // Use only the explicitly selected columns
331
+ selectCols = parsed.select.map((c) => `t."${c}"`).join(", ");
332
+ }
333
+ else {
334
+ // Get all columns except vector columns to avoid token waste
335
+ const colsSql = `
336
+ SELECT column_name
337
+ FROM information_schema.columns
338
+ WHERE table_schema = $1 AND table_name = $2
339
+ AND udt_name != 'vector'
340
+ ORDER BY ordinal_position
341
+ `;
342
+ const colsResult = await adapter.executeQuery(colsSql, [
343
+ schemaName,
344
+ resolvedTable,
345
+ ]);
346
+ const cols = (colsResult.rows ?? []).map((r) => r["column_name"]);
347
+ selectCols =
348
+ cols.length > 0 ? cols.map((c) => `t."${c}"`).join(", ") : "t.*";
349
+ }
350
+ const sql = `
351
+ WITH vector_scores AS (
352
+ SELECT
353
+ ctid,
354
+ 1 - ("${parsed.vectorColumn}" <=> '${vectorStr}'::vector) as vector_score
355
+ FROM ${tableName}
356
+ WHERE "${parsed.vectorColumn}" IS NOT NULL
357
+ ORDER BY "${parsed.vectorColumn}" <=> '${vectorStr}'::vector
358
+ LIMIT ${String(limitVal * 3)}
359
+ ),
360
+ text_scores AS (
361
+ SELECT
362
+ ctid,
363
+ ts_rank(${textExpr}, plainto_tsquery($1)) as text_score
364
+ FROM ${tableName}
365
+ WHERE ${textExpr} @@ plainto_tsquery($1)
366
+ )
367
+ SELECT
368
+ ${selectCols},
369
+ COALESCE(v.vector_score, 0) * ${String(vectorWeight)} +
370
+ COALESCE(ts.text_score, 0) * ${String(textWeight)} as combined_score,
371
+ COALESCE(v.vector_score, 0) as vector_score,
372
+ COALESCE(ts.text_score, 0) as text_score
373
+ FROM ${tableName} t
374
+ LEFT JOIN vector_scores v ON t.ctid = v.ctid
375
+ LEFT JOIN text_scores ts ON t.ctid = ts.ctid
376
+ WHERE v.ctid IS NOT NULL OR ts.ctid IS NOT NULL
377
+ ORDER BY combined_score DESC
378
+ LIMIT ${String(limitVal)}
379
+ `;
380
+ try {
381
+ const result = await adapter.executeQuery(sql, [parsed.textQuery]);
382
+ return {
383
+ results: result.rows,
384
+ count: result.rows?.length ?? 0,
385
+ vectorWeight,
386
+ textWeight,
387
+ };
388
+ }
389
+ catch (error) {
390
+ if (error instanceof Error) {
391
+ // Parse column not found errors
392
+ const colMatch = /column "([^"]+)" does not exist/.exec(error.message);
393
+ if (colMatch) {
394
+ const missingCol = colMatch[1] ?? "";
395
+ // Determine which parameter has the issue
396
+ let paramName = "column";
397
+ if (missingCol === parsed.textColumn) {
398
+ paramName = "textColumn";
399
+ }
400
+ else if (missingCol === parsed.vectorColumn) {
401
+ paramName = "vectorColumn";
402
+ }
403
+ return {
404
+ success: false,
405
+ error: `Column '${missingCol}' does not exist in table '${resolvedTable}'`,
406
+ parameterWithIssue: paramName,
407
+ suggestion: "Use pg_describe_table to find available columns",
408
+ };
409
+ }
410
+ // Parse dimension mismatch errors
411
+ const dimMatch = /different vector dimensions (\d+) and (\d+)/.exec(error.message);
412
+ if (dimMatch) {
413
+ const expectedDim = dimMatch[1] ?? "0";
414
+ const providedDim = dimMatch[2] ?? "0";
415
+ return {
416
+ success: false,
417
+ error: `Vector dimension mismatch: column expects ${expectedDim} dimensions, but you provided ${providedDim} dimensions.`,
418
+ expectedDimensions: parseInt(expectedDim, 10),
419
+ providedDimensions: parseInt(providedDim, 10),
420
+ suggestion: "Ensure your query vector has the same dimensions as the column.",
421
+ };
422
+ }
423
+ // Parse relation not found errors
424
+ const relationMatch = /relation "([^"]+)" does not exist/.exec(error.message);
425
+ if (relationMatch) {
426
+ const missingRelation = relationMatch[1] ?? "";
427
+ return {
428
+ success: false,
429
+ error: `Table '${missingRelation}' does not exist in schema '${schemaName}'`,
430
+ suggestion: "Use pg_list_tables to find available tables",
431
+ };
432
+ }
433
+ // Return generic database error as {success: false} instead of throwing
434
+ return {
435
+ success: false,
436
+ error: error.message,
437
+ suggestion: "Check your query parameters and table structure",
438
+ };
439
+ }
440
+ // For non-Error exceptions, return generic error
441
+ return {
442
+ success: false,
443
+ error: "An unexpected error occurred",
444
+ details: String(error),
445
+ };
446
+ }
447
+ }
448
+ catch (error) {
449
+ return {
450
+ success: false,
451
+ error: formatPostgresError(error, { tool: "pg_hybrid_search" }),
452
+ };
453
+ }
454
+ },
455
+ };
456
+ }
457
+ export function createVectorPerformanceTool(adapter) {
458
+ // Schema with parameter smoothing
459
+ const PerformanceSchemaBase = z.object({
460
+ table: z.string().optional().describe("Table name"),
461
+ tableName: z.string().optional().describe("Alias for table"),
462
+ column: z.string().optional().describe("Vector column"),
463
+ col: z.string().optional().describe("Alias for column"),
464
+ testVector: z
465
+ .array(z.number())
466
+ .optional()
467
+ .describe("Test vector for benchmarking"),
468
+ schema: z.string().optional().describe("Database schema (default: public)"),
469
+ });
470
+ const PerformanceSchema = PerformanceSchemaBase.transform((data) => ({
471
+ table: data.table ?? data.tableName ?? "",
472
+ column: data.column ?? data.col ?? "",
473
+ testVector: data.testVector,
474
+ schema: data.schema,
475
+ }));
476
+ return {
477
+ name: "pg_vector_performance",
478
+ description: "Analyze vector search performance and index effectiveness. Provide testVector for benchmarking (recommended).",
479
+ group: "vector",
480
+ inputSchema: PerformanceSchemaBase,
481
+ outputSchema: VectorPerformanceOutputSchema,
482
+ annotations: readOnly("Vector Performance"),
483
+ icons: getToolIcons("vector", readOnly("Vector Performance")),
484
+ handler: async (params, _context) => {
485
+ try {
486
+ const parsed = PerformanceSchema.parse(params);
487
+ // Validate required params
488
+ if (parsed.table === "") {
489
+ return {
490
+ success: false,
491
+ error: "table (or tableName) parameter is required",
492
+ requiredParams: ["table", "column"],
493
+ };
494
+ }
495
+ if (parsed.column === "") {
496
+ return {
497
+ success: false,
498
+ error: "column (or col) parameter is required for the vector column name",
499
+ requiredParams: ["table", "column"],
500
+ };
501
+ }
502
+ const tableName = sanitizeTableName(parsed.table, parsed.schema);
503
+ const columnName = sanitizeIdentifier(parsed.column);
504
+ const schemaName = parsed.schema ?? "public";
505
+ // Two-step existence check: table first, then column
506
+ const existenceCheck = await checkTableAndColumn(adapter, parsed.table, parsed.column, schemaName);
507
+ if (existenceCheck) {
508
+ return { success: false, ...existenceCheck };
509
+ }
510
+ const indexSql = `
511
+ SELECT
512
+ i.indexname,
513
+ i.indexdef,
514
+ pg_size_pretty(pg_relation_size((i.schemaname || '.' || i.indexname)::regclass)) as index_size,
515
+ s.idx_scan,
516
+ s.idx_tup_read
517
+ FROM pg_indexes i
518
+ LEFT JOIN pg_stat_user_indexes s ON s.indexrelname = i.indexname AND s.schemaname = i.schemaname
519
+ WHERE i.tablename = $1 AND i.schemaname = $2
520
+ AND i.indexdef LIKE '%vector%'
521
+ `;
522
+ const indexResult = await adapter.executeQuery(indexSql, [
523
+ parsed.table,
524
+ schemaName,
525
+ ]);
526
+ const statsSql = `
527
+ SELECT
528
+ reltuples::bigint as estimated_rows,
529
+ pg_size_pretty(pg_relation_size('${tableName}'::regclass)) as table_size
530
+ FROM pg_class c
531
+ JOIN pg_namespace n ON c.relnamespace = n.oid
532
+ WHERE c.relname = $1 AND n.nspname = $2
533
+ `;
534
+ const statsResult = await adapter.executeQuery(statsSql, [
535
+ parsed.table,
536
+ schemaName,
537
+ ]);
538
+ // PostgreSQL returns bigint as string, cast as needed
539
+ const stats = (statsResult.rows?.[0] ?? {});
540
+ let benchmark = null;
541
+ let testVectorSource;
542
+ let testVector = parsed.testVector;
543
+ // Auto-generate test vector from first row if not provided
544
+ if (testVector === undefined) {
545
+ try {
546
+ const sampleSql = `SELECT ${columnName}::text as vec FROM ${tableName} WHERE ${columnName} IS NOT NULL LIMIT 1`;
547
+ const sampleResult = await adapter.executeQuery(sampleSql);
548
+ const sampleRow = sampleResult.rows?.[0];
549
+ if (sampleRow?.vec !== undefined) {
550
+ // Parse vector string like "[0.1,0.2,0.3]" to array
551
+ const vecStr = sampleRow.vec.replace(/[[\]]/g, "");
552
+ testVector = vecStr.split(",").map(Number);
553
+ testVectorSource = "auto-generated from first row";
554
+ }
555
+ }
556
+ catch {
557
+ // Silently ignore - benchmark just won't be available
558
+ }
559
+ }
560
+ else {
561
+ testVectorSource = "user-provided";
562
+ }
563
+ if (testVector !== undefined && testVector.length > 0) {
564
+ const vectorStr = `[${testVector.join(",")}]`;
565
+ const benchSql = `
566
+ EXPLAIN ANALYZE
567
+ SELECT * FROM ${tableName}
568
+ ORDER BY ${columnName} <-> '${vectorStr}'::vector
569
+ LIMIT 10
570
+ `;
571
+ const benchResult = await adapter.executeQuery(benchSql);
572
+ // Truncate large vectors in EXPLAIN output to reduce payload size
573
+ // Pattern matches vector literals like '[0.1,0.2,...,0.9]'::vector
574
+ const vectorPattern = /\[[\d.,\s-e]+\]'::vector/g;
575
+ const truncatedRows = (benchResult.rows ?? []).map((row) => {
576
+ const planLine = row["QUERY PLAN"];
577
+ if (planLine && planLine.length > 200) {
578
+ // Truncate long vector literals in query plan
579
+ const truncated = planLine.replace(vectorPattern, `[...${String(testVector.length)} dims]'::vector`);
580
+ return { "QUERY PLAN": truncated };
581
+ }
582
+ return row;
583
+ });
584
+ benchmark = truncatedRows;
585
+ }
586
+ // Convert PostgreSQL bigint strings to numbers for output schema compliance
587
+ const estimatedRows = Number(stats.estimated_rows ?? 0);
588
+ // Map indexes to convert bigint stats to numbers (idx_scan, idx_tup_read)
589
+ const indexes = (indexResult.rows ?? []).map((row) => ({
590
+ ...row,
591
+ idx_scan: row["idx_scan"] != null ? Number(row["idx_scan"]) : null,
592
+ idx_tup_read: row["idx_tup_read"] != null ? Number(row["idx_tup_read"]) : null,
593
+ }));
594
+ const response = {
595
+ table: parsed.table,
596
+ column: parsed.column,
597
+ tableSize: stats.table_size,
598
+ // PostgreSQL returns -1 for tables that haven't been analyzed; normalize to 0
599
+ estimatedRows: estimatedRows < 0 ? 0 : estimatedRows,
600
+ indexes,
601
+ benchmark,
602
+ recommendations: (indexResult.rows?.length ?? 0) === 0
603
+ ? [
604
+ "No vector index found - consider creating one for better performance",
605
+ ]
606
+ : [],
607
+ };
608
+ if (testVectorSource !== undefined) {
609
+ response["testVectorSource"] = testVectorSource;
610
+ }
611
+ if (benchmark === null) {
612
+ response["hint"] =
613
+ "No vectors in table to auto-generate test. Provide testVector param for benchmarking.";
614
+ }
615
+ return response;
616
+ }
617
+ catch (error) {
618
+ return {
619
+ success: false,
620
+ error: formatPostgresError(error, { tool: "pg_vector_performance" }),
621
+ };
622
+ }
623
+ },
624
+ };
625
+ }
626
+ //# sourceMappingURL=search-advanced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-advanced.js","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/vector/search-advanced.ts"],"names":[],"mappings":"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"}