@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
@@ -1,1544 +0,0 @@
1
- /**
2
- * postgres-mcp - Code Mode API
3
- *
4
- * Exposes all 194 PostgreSQL tools organized by their 19 groups
5
- * for use within the sandboxed execution environment.
6
- */
7
- /**
8
- * Method aliases for code mode API.
9
- * Maps alternate method names to their canonical method names.
10
- * Format: { groupName: { aliasName: canonicalName } }
11
- *
12
- * These aliases handle common naming misguesses where agents
13
- * might try the redundant prefix pattern (e.g., jsonbExtract vs extract).
14
- */
15
- const METHOD_ALIASES = {
16
- // JSONB: pg_jsonb_extract → extract, but agent might try jsonbExtract
17
- jsonb: {
18
- jsonbExtract: "extract",
19
- jsonbSet: "set",
20
- jsonbInsert: "insert",
21
- jsonbDelete: "delete",
22
- jsonbContains: "contains",
23
- jsonbPathQuery: "pathQuery",
24
- jsonbAgg: "agg",
25
- jsonbObject: "object",
26
- jsonbArray: "array",
27
- jsonbKeys: "keys",
28
- jsonbStripNulls: "stripNulls",
29
- jsonbTypeof: "typeof",
30
- jsonbValidatePath: "validatePath",
31
- jsonbMerge: "merge",
32
- jsonbNormalize: "normalize",
33
- jsonbDiff: "diff",
34
- jsonbIndexSuggest: "indexSuggest",
35
- jsonbSecurityScan: "securityScan",
36
- jsonbStats: "stats",
37
- },
38
- // Text: pg_text_search → textSearch, but also search
39
- text: {
40
- textSearch: "search",
41
- textRank: "rank",
42
- textHeadline: "headline",
43
- textNormalize: "normalize",
44
- textSentiment: "sentiment",
45
- textToVector: "toVector",
46
- textToQuery: "toQuery",
47
- textSearchConfig: "searchConfig",
48
- // Intuitive aliases for common methods
49
- similar: "trigramSimilarity", // pg.text.similar() → trigramSimilarity()
50
- trigram: "trigramSimilarity", // pg.text.trigram() → trigramSimilarity()
51
- similarity: "trigramSimilarity", // pg.text.similarity() → trigramSimilarity()
52
- fuzzy: "fuzzyMatch", // pg.text.fuzzy() → fuzzyMatch()
53
- like: "likeSearch", // pg.text.like() → likeSearch()
54
- regex: "regexpMatch", // pg.text.regex() → regexpMatch()
55
- regexp: "regexpMatch", // pg.text.regexp() → regexpMatch()
56
- unaccent: "normalize", // pg.text.unaccent() → normalize()
57
- highlight: "headline", // pg.text.highlight() → headline()
58
- patternMatch: "regexpMatch", // pg.text.patternMatch() → regexpMatch()
59
- configs: "searchConfig", // pg.text.configs() → searchConfig()
60
- searchConfigs: "searchConfig", // pg.text.searchConfigs() → searchConfig()
61
- createIndex: "createFtsIndex", // pg.text.createIndex() → createFtsIndex()
62
- },
63
- // Vector: pg_vector_search → search, but agent might try vectorSearch
64
- vector: {
65
- vectorSearch: "search",
66
- vectorAggregate: "aggregate",
67
- vectorCreateIndex: "createIndex",
68
- vectorCluster: "cluster",
69
- vectorIndexOptimize: "indexOptimize",
70
- vectorPerformance: "performance",
71
- vectorDimensionReduce: "dimensionReduce",
72
- vectorEmbed: "embed",
73
- vectorNormalize: "normalize",
74
- vectorQuantize: "quantize",
75
- vectorList: "list",
76
- },
77
- // PostGIS
78
- postgis: {
79
- // pg.postgis.indexOptimize() -> geoIndexOptimize (from pg_geo_index_optimize)
80
- indexOptimize: "geoIndexOptimize",
81
- // pg.postgis.addColumn() -> geometryColumn (from pg_geometry_column)
82
- addColumn: "geometryColumn",
83
- },
84
- // Performance: naming aliases for common queries
85
- performance: {
86
- // User education aliases - common names that map to actual method names
87
- cacheStats: "cacheHitRatio", // pg_cache_stats → cacheHitRatio()
88
- queryStats: "statStatements", // pg_query_stats → statStatements()
89
- // Activity-related aliases
90
- activity: "statActivity", // activity() → statActivity()
91
- // Index analysis aliases
92
- indexUsage: "indexStats", // indexUsage() → indexStats()
93
- // Vacuum alias
94
- vacuum: "vacuumStats", // vacuum() → vacuumStats()
95
- // Bloat alias
96
- bloatEstimate: "bloatCheck", // bloatEstimate() → bloatCheck()
97
- bloat: "bloatCheck", // bloat() → bloatCheck()
98
- },
99
- // Monitoring: intuitive aliases for common monitoring methods
100
- monitoring: {
101
- tables: "tableSizes", // tables() → tableSizes()
102
- connections: "connectionStats", // connections() → connectionStats()
103
- settings: "showSettings", // settings() → showSettings()
104
- config: "showSettings", // config() → showSettings()
105
- alerts: "alertThresholdSet", // alerts() → alertThresholdSet()
106
- thresholds: "alertThresholdSet", // thresholds() → alertThresholdSet()
107
- },
108
- // Transactions: shorter aliases
109
- transactions: {
110
- // pg.transactions.begin() -> transactionBegin (from pg_transaction_begin)
111
- begin: "transactionBegin",
112
- commit: "transactionCommit",
113
- rollback: "transactionRollback",
114
- savepoint: "transactionSavepoint",
115
- release: "transactionRelease",
116
- rollbackTo: "transactionRollbackTo",
117
- execute: "transactionExecute",
118
- },
119
- // Stats: pg_stats_descriptive → descriptive, but agent might try statsDescriptive
120
- stats: {
121
- statsDescriptive: "descriptive",
122
- statsPercentiles: "percentiles",
123
- statsCorrelation: "correlation",
124
- statsRegression: "regression",
125
- statsTimeSeries: "timeSeries",
126
- statsDistribution: "distribution",
127
- statsHypothesis: "hypothesis",
128
- statsSampling: "sampling",
129
- // Intuitive aliases
130
- summary: "descriptive", // summary() → descriptive()
131
- percentile: "percentiles", // percentile() → percentiles()
132
- histogram: "distribution", // histogram() → distribution()
133
- movingAverage: "timeSeries", // movingAverage() → timeSeries()
134
- time_series: "timeSeries", // time_series() → timeSeries()
135
- },
136
- // Cron: pg_cron_schedule → cronSchedule, but agent might try cronSchedule
137
- cron: {
138
- cronCreateExtension: "createExtension",
139
- cronSchedule: "schedule",
140
- cronScheduleInDatabase: "scheduleInDatabase",
141
- cronUnschedule: "unschedule",
142
- cronAlterJob: "alterJob",
143
- cronListJobs: "listJobs",
144
- cronJobRunDetails: "jobRunDetails",
145
- cronCleanupHistory: "cleanupHistory",
146
- },
147
- // Partman
148
- partman: {
149
- partmanCreateExtension: "createExtension",
150
- partmanCreateParent: "createParent",
151
- partmanRunMaintenance: "runMaintenance",
152
- partmanShowConfig: "showConfig",
153
- partmanShowPartitions: "showPartitions", // Missing alias - added
154
- partmanCheckDefault: "checkDefault",
155
- partmanPartitionData: "partitionData",
156
- partmanSetRetention: "setRetention",
157
- partmanUndoPartition: "undoPartition",
158
- partmanAnalyzePartitionHealth: "analyzePartitionHealth",
159
- // Intuitive short alias
160
- analyzeHealth: "analyzePartitionHealth", // pg.partman.analyzeHealth() → analyzePartitionHealth()
161
- },
162
- // Kcache
163
- kcache: {
164
- kcacheCreateExtension: "createExtension",
165
- kcacheQueryStats: "queryStats",
166
- kcacheReset: "reset",
167
- kcacheTopCpu: "topCpu",
168
- kcacheTopIo: "topIo",
169
- kcacheDatabaseStats: "databaseStats",
170
- kcacheResourceAnalysis: "resourceAnalysis",
171
- },
172
- // Citext
173
- citext: {
174
- citextCreateExtension: "createExtension",
175
- citextConvertColumn: "convertColumn",
176
- citextListColumns: "listColumns",
177
- citextAnalyzeCandidates: "analyzeCandidates",
178
- citextCompare: "compare",
179
- citextSchemaAdvisor: "schemaAdvisor",
180
- },
181
- // Ltree
182
- ltree: {
183
- ltreeCreateExtension: "createExtension",
184
- ltreeQuery: "query",
185
- ltreeSubpath: "subpath",
186
- ltreeLca: "lca",
187
- ltreeMatch: "match",
188
- ltreeListColumns: "listColumns",
189
- ltreeConvertColumn: "convertColumn",
190
- ltreeCreateIndex: "createIndex",
191
- },
192
- // Pgcrypto
193
- pgcrypto: {
194
- pgcryptoCreateExtension: "createExtension",
195
- pgcryptoHash: "hash",
196
- pgcryptoHmac: "hmac",
197
- pgcryptoEncrypt: "encrypt",
198
- pgcryptoDecrypt: "decrypt",
199
- pgcryptoGenRandomUuid: "genRandomUuid",
200
- pgcryptoGenRandomBytes: "genRandomBytes",
201
- pgcryptoGenSalt: "genSalt",
202
- pgcryptoCrypt: "crypt",
203
- },
204
- // Partitioning: shorter aliases
205
- partitioning: {
206
- create: "createPartition", // create() → createPartition()
207
- add: "createPartition", // add() → createPartition()
208
- list: "listPartitions", // list() → listPartitions()
209
- info: "partitionInfo", // info() → partitionInfo()
210
- attach: "attachPartition", // attach() → attachPartition()
211
- detach: "detachPartition", // detach() → detachPartition()
212
- remove: "detachPartition", // remove() → detachPartition()
213
- },
214
- // Introspection: shorthand aliases for common operations
215
- introspection: {
216
- deps: "dependencyGraph", // deps() → dependencyGraph()
217
- graph: "dependencyGraph", // graph() → dependencyGraph()
218
- sort: "topologicalSort", // sort() → topologicalSort()
219
- cascade: "cascadeSimulator", // cascade() → cascadeSimulator()
220
- snapshot: "schemaSnapshot", // snapshot() → schemaSnapshot()
221
- constraints: "constraintAnalysis", // constraints() → constraintAnalysis()
222
- risks: "migrationRisks", // risks() → migrationRisks()
223
- init: "migrationInit", // init() → migrationInit()
224
- record: "migrationRecord", // record() → migrationRecord()
225
- apply: "migrationApply", // apply() → migrationApply()
226
- rollback: "migrationRollback", // rollback() → migrationRollback()
227
- history: "migrationHistory", // history() → migrationHistory()
228
- status: "migrationStatus", // status() → migrationStatus()
229
- },
230
- };
231
- /**
232
- * Usage examples for each group's help() output.
233
- * Provides quick-reference examples for common operations.
234
- */
235
- const GROUP_EXAMPLES = {
236
- core: [
237
- 'pg.core.readQuery("SELECT * FROM users LIMIT 10")',
238
- 'pg.core.exists("users", "email=$1", ["test@example.com"])',
239
- 'pg.core.createTable("orders", [{ name: "id", type: "SERIAL PRIMARY KEY" }])',
240
- 'pg.core.batchInsert("products", [{ name: "A" }, { name: "B" }])',
241
- ],
242
- transactions: [
243
- "const { transactionId } = await pg.transactions.begin()",
244
- 'await pg.transactions.savepoint({ transactionId, name: "sp1" })',
245
- 'await pg.transactions.rollbackTo({ transactionId, name: "sp1" })',
246
- "await pg.transactions.commit({ transactionId })",
247
- 'await pg.transactions.execute({ statements: [{ sql: "INSERT..." }, { sql: "UPDATE..." }] })',
248
- ],
249
- jsonb: [
250
- 'pg.jsonb.extract({ table: "docs", column: "data", path: "user.name" })',
251
- 'pg.jsonb.extract({ table: "docs", column: "data", path: "name", select: ["id"], limit: 10 })',
252
- 'pg.jsonb.set({ table: "docs", column: "data", path: "status", value: "active", where: "id=1" })',
253
- 'pg.jsonb.contains({ table: "docs", column: "data", value: { type: "admin" } })',
254
- "pg.jsonb.merge({ base: { a: 1 }, overlay: { b: 2 }, deep: true })",
255
- "pg.jsonb.diff({ doc1: { a: 1 }, doc2: { a: 2, b: 3 } })",
256
- 'pg.jsonb.agg({ table: "docs", select: ["id"], orderBy: "id DESC", limit: 5 })',
257
- ],
258
- text: [
259
- 'pg.text.search({ table: "articles", column: "content", query: "database" })',
260
- 'pg.text.fuzzyMatch({ table: "users", column: "name", value: "john", maxDistance: 2 })',
261
- 'pg.text.trigramSimilarity({ table: "products", column: "name", value: "widget" })',
262
- ],
263
- performance: [
264
- "pg.performance.explain({ sql: 'SELECT * FROM orders' })",
265
- "pg.performance.cacheHitRatio()",
266
- "pg.performance.indexStats({ table: 'orders' })",
267
- "pg.performance.bloatCheck()",
268
- ],
269
- admin: [
270
- "pg.admin.vacuum({ table: 'orders' })",
271
- "pg.admin.vacuum({ table: 'orders', full: true, analyze: true })",
272
- "pg.admin.analyze({ table: 'orders', columns: ['created_at', 'status'] })",
273
- "pg.admin.reindex({ target: 'table', name: 'orders', concurrently: true })",
274
- "pg.admin.cluster({ table: 'orders', index: 'idx_orders_date' })",
275
- "pg.admin.setConfig({ name: 'work_mem', value: '256MB' })",
276
- "pg.admin.cancelBackend({ pid: 12345 })",
277
- ],
278
- monitoring: [
279
- "pg.monitoring.databaseSize()",
280
- "pg.monitoring.tableSizes({ limit: 10 })",
281
- "pg.monitoring.connectionStats()",
282
- "pg.monitoring.showSettings({ pattern: 'work_mem' })",
283
- "pg.monitoring.capacityPlanning({ days: 30 })",
284
- "pg.monitoring.uptime()",
285
- "pg.monitoring.serverVersion()",
286
- "pg.monitoring.resourceUsageAnalyze()",
287
- "pg.monitoring.alertThresholdSet({ metric: 'connection_usage' })",
288
- ],
289
- backup: [
290
- "pg.backup.dumpTable({ table: 'users', includeData: true })",
291
- "pg.backup.copyExport({ table: 'orders', format: 'csv', limit: 100 })",
292
- "pg.backup.copyExport({ table: 'public.products' })", // schema.table format
293
- "pg.backup.copyImport({ table: 'orders', filePath: '/data/orders.csv', format: 'csv' })",
294
- "pg.backup.restoreCommand({ backupFile: 'backup.dump', database: 'mydb' })",
295
- "pg.backup.createBackupPlan({ frequency: 'daily', retention: 7 })",
296
- "pg.backup.physical({ targetDir: '/backups/base', format: 'tar', compress: 6 })",
297
- "pg.backup.restoreValidate({ backupFile: 'backup.dump', backupType: 'pg_dump' })",
298
- "pg.backup.scheduleOptimize()",
299
- ],
300
- schema: [
301
- "pg.schema.createView({ name: 'active_users', sql: 'SELECT * FROM users WHERE active' })",
302
- "pg.schema.listViews()",
303
- "pg.schema.createSequence({ name: 'order_seq' })",
304
- ],
305
- vector: [
306
- "pg.vector.search({ table: 'embeddings', column: 'vector', queryVector: [...], limit: 10 })",
307
- "pg.vector.createIndex({ table: 'embeddings', column: 'vector', method: 'ivfflat' })",
308
- "pg.vector.aggregate({ table: 'embeddings', column: 'vector', groupBy: 'category' })",
309
- ],
310
- postgis: [
311
- "pg.postgis.distance({ table: 'locations', column: 'geom', point: { lat: 40.7, lng: -74 } })",
312
- "pg.postgis.buffer({ table: 'areas', column: 'geom', distance: 1000 })",
313
- "pg.postgis.pointInPolygon({ table: 'zones', column: 'geom', point: { lat: 40.7, lng: -74 } })",
314
- ],
315
- partitioning: [
316
- "pg.partitioning.createPartitionedTable({ name: 'events', columns: [...], partitionBy: 'RANGE', partitionKey: 'created_at' })",
317
- "pg.partitioning.createPartition({ parent: 'events', name: 'events_2024_q1', forValues: \"FROM ('2024-01-01') TO ('2024-04-01')\" })",
318
- "pg.partitioning.listPartitions({ table: 'events' })",
319
- ],
320
- stats: [
321
- "pg.stats.descriptive({ table: 'orders', column: 'amount' })",
322
- "pg.stats.percentiles({ table: 'orders', column: 'amount', percentiles: [0.5, 0.95, 0.99] })",
323
- "pg.stats.timeSeries({ table: 'metrics', timeColumn: 'ts', valueColumn: 'value', interval: '1 hour' })",
324
- ],
325
- cron: [
326
- "pg.cron.schedule({ name: 'cleanup', schedule: '0 3 * * *', command: \"DELETE FROM logs WHERE created_at < NOW() - INTERVAL '30 days'\" })",
327
- "pg.cron.listJobs()",
328
- "pg.cron.listJobs({ limit: 0 })", // Get all jobs
329
- "pg.cron.unschedule({ jobId: 1 })",
330
- ],
331
- partman: [
332
- "pg.partman.createParent({ table: 'events', column: 'created_at', interval: '1 month' })",
333
- "pg.partman.runMaintenance()",
334
- "pg.partman.showPartitions({ parentTable: 'events' })",
335
- ],
336
- kcache: [
337
- "pg.kcache.queryStats({ orderBy: 'cpu_time', limit: 10 })",
338
- "pg.kcache.topCpu({ limit: 5 })",
339
- "pg.kcache.topIo({ ioType: 'reads' })",
340
- "pg.kcache.resourceAnalysis()",
341
- ],
342
- citext: [
343
- "pg.citext.convertColumn({ table: 'users', column: 'email' })",
344
- "pg.citext.listColumns()",
345
- "pg.citext.analyzeCandidates({ table: 'users' })",
346
- ],
347
- ltree: [
348
- "pg.ltree.query({ table: 'categories', column: 'path', path: 'electronics', mode: 'descendants' })",
349
- "pg.ltree.match({ table: 'categories', column: 'path', pattern: '*.phones.*' })",
350
- "pg.ltree.subpath({ path: 'a.b.c.d', offset: 1, length: 2 })",
351
- "pg.ltree.lca({ paths: ['electronics.phones', 'electronics.accessories'] })",
352
- ],
353
- pgcrypto: [
354
- "pg.pgcrypto.hash({ data: 'password123', algorithm: 'sha256' })",
355
- "pg.pgcrypto.encrypt({ data: 'secret', password: 'mykey' })",
356
- "pg.pgcrypto.genRandomUuid()",
357
- "pg.pgcrypto.genSalt({ type: 'bf', iterations: 10 })",
358
- "pg.pgcrypto.crypt({ password: 'userpass', salt: storedHash })",
359
- ],
360
- introspection: [
361
- "pg.introspection.dependencyGraph()",
362
- "pg.introspection.dependencyGraph({ schema: 'public' })",
363
- "pg.introspection.topologicalSort({ direction: 'create' })",
364
- "pg.introspection.cascadeSimulator({ table: 'users' })",
365
- "pg.introspection.schemaSnapshot({ sections: ['tables', 'constraints'] })",
366
- "pg.introspection.constraintAnalysis({ checks: ['unindexed_fk', 'missing_pk'] })",
367
- "pg.introspection.migrationRisks({ statements: ['ALTER TABLE users DROP COLUMN email'] })",
368
- "pg.introspection.migrationInit()",
369
- "pg.introspection.migrationRecord({ version: '1.0.0', migrationSql: 'ALTER TABLE...', rollbackSql: 'ALTER TABLE...' })",
370
- "pg.introspection.migrationApply({ version: '2.0.0', migrationSql: 'CREATE TABLE orders (...)', rollbackSql: 'DROP TABLE orders' })",
371
- "pg.introspection.migrationRollback({ version: '1.0.0', dryRun: true })",
372
- "pg.introspection.migrationHistory({ status: 'applied' })",
373
- "pg.introspection.migrationStatus()",
374
- ],
375
- };
376
- /**
377
- * Mapping of method names to their parameter names for positional argument support.
378
- * Single string = first positional arg maps to this key
379
- * Array = multiple positional args map to these keys in order
380
- *
381
- * Enables:
382
- * - `pg.core.readQuery("SELECT...")` → `{ sql: "SELECT..." }`
383
- * - `pg.core.exists("users", "id = 1")` → `{ table: "users", where: "id = 1" }`
384
- * - `pg.transactions.savepoint(txId, "sp1")` → `{ transactionId: txId, name: "sp1" }`
385
- */
386
- const POSITIONAL_PARAM_MAP = {
387
- // ============ CORE GROUP ============
388
- // Single param
389
- readQuery: "sql",
390
- writeQuery: "sql",
391
- describeTable: "table",
392
- dropTable: "table",
393
- listTables: "schema",
394
- count: ["table", "where"],
395
- truncate: "table",
396
- dropIndex: "name",
397
- listObjects: "schema",
398
- // Multi param
399
- exists: ["table", "where", "params"],
400
- objectDetails: ["name", "type"],
401
- createTable: ["name", "columns"],
402
- createIndex: ["table", "columns"], // Only required params; options object gets merged
403
- upsert: ["table", "data", "conflictColumns"],
404
- batchInsert: ["table", "rows"],
405
- // ============ SCHEMA GROUP ============
406
- createSchema: "name",
407
- dropSchema: "name",
408
- createSequence: "name",
409
- dropSequence: "name",
410
- dropView: "name",
411
- listSequences: "schema",
412
- listViews: "schema",
413
- listFunctions: "schema",
414
- listTriggers: "table",
415
- listConstraints: "table",
416
- createView: ["name", "sql"], // name first, then query (sql alias)
417
- // ============ JSONB GROUP ============
418
- // All table-based JSONB tools need [table, column, ...] pattern
419
- extract: ["table", "column", "path", "where"],
420
- set: ["table", "column", "path", "value", "where"],
421
- insert: ["table", "column", "path", "value", "where"],
422
- delete: ["table", "column", "path", "where"],
423
- contains: ["table", "column", "value", "where"],
424
- pathQuery: ["table", "column", "path", "vars", "where"],
425
- keys: ["table", "column", "where"],
426
- stripNulls: ["table", "column", "where"],
427
- typeof: ["table", "column", "path", "where"],
428
- stats: ["table", "column", "sampleSize"],
429
- indexSuggest: ["table", "column", "sampleSize"],
430
- securityScan: ["table", "column", "sampleSize"],
431
- normalize: ["table", "column", "mode", "where"],
432
- agg: ["table", "column"],
433
- // Non-table JSONB tools
434
- merge: ["base", "overlay"],
435
- diff: ["doc1", "doc2"],
436
- validatePath: "path",
437
- // ============ TRANSACTION GROUP ============
438
- transactionCommit: "transactionId",
439
- transactionRollback: "transactionId",
440
- transactionSavepoint: ["transactionId", "name"],
441
- transactionRelease: ["transactionId", "name"],
442
- transactionRollbackTo: ["transactionId", "name"],
443
- // Note: transactionExecute uses ARRAY_WRAP_MAP, not positional mapping
444
- // Short aliases
445
- commit: "transactionId",
446
- rollback: "transactionId",
447
- savepoint: ["transactionId", "name"],
448
- release: ["transactionId", "name"],
449
- rollbackTo: ["transactionId", "name"],
450
- // Note: execute uses ARRAY_WRAP_MAP, not positional mapping
451
- // ============ PARTITIONING GROUP ============
452
- listPartitions: "table",
453
- createPartitionedTable: ["name", "columns", "partitionBy", "partitionKey"],
454
- createPartition: ["parent", "name", "forValues"],
455
- attachPartition: ["parent", "partition", "forValues"],
456
- detachPartition: ["parent", "partition"],
457
- partitionInfo: "table",
458
- // ============ STATS GROUP ============
459
- descriptive: ["table", "column"],
460
- percentiles: ["table", "column", "percentiles"],
461
- distribution: ["table", "column"],
462
- histogram: ["table", "column", "buckets"],
463
- correlation: ["table", "column1", "column2"],
464
- outliers: ["table", "column"],
465
- hypothesis: ["table", "column", "test", "hypothesizedMean"],
466
- sampling: ["table", "sampleSize"],
467
- regression: ["table", "xColumn", "yColumn"],
468
- timeSeries: ["table", "timeColumn", "valueColumn"], // timeColumn first is more intuitive
469
- // Stats prefixed aliases need mappings too
470
- statsTimeSeries: ["table", "timeColumn", "valueColumn"],
471
- statsDescriptive: ["table", "column"],
472
- statsPercentiles: ["table", "column", "percentiles"],
473
- statsDistribution: ["table", "column"],
474
- statsCorrelation: ["table", "column1", "column2"],
475
- statsHypothesis: ["table", "column", "test", "hypothesizedMean"],
476
- statsSampling: ["table", "sampleSize"],
477
- statsRegression: ["table", "xColumn", "yColumn"],
478
- // ============ BACKUP GROUP ============
479
- copyExport: "table",
480
- copyImport: "table",
481
- dumpTable: "table",
482
- dumpSchema: "schema",
483
- restoreCommand: "backupFile",
484
- physical: "targetDir",
485
- restoreValidate: "backupFile",
486
- // ============ TEXT GROUP ============
487
- // New tools
488
- toVector: "text",
489
- toQuery: "text",
490
- textToVector: "text",
491
- textToQuery: "text",
492
- // Wrapper functions (soundex/metaphone call fuzzyMatch)
493
- soundex: ["table", "column", "value"],
494
- metaphone: ["table", "column", "value"],
495
- };
496
- /**
497
- * Methods where a single array arg should be wrapped in a specific key
498
- */
499
- const ARRAY_WRAP_MAP = {
500
- transactionExecute: "statements",
501
- execute: "statements",
502
- // JSONB builders - support both 'values' and 'elements'
503
- array: "values",
504
- jsonbArray: "values",
505
- };
506
- /**
507
- * Methods where a single object arg should be wrapped in a specific key
508
- * (instead of passed through directly).
509
- *
510
- * For pg_jsonb_object, the skipKeys array lists keys that indicate the user
511
- * has already provided the correct structure (e.g., { data: {...} }).
512
- */
513
- const OBJECT_WRAP_MAP = {
514
- object: { wrapKey: "data", skipKeys: ["data", "object", "pairs"] }, // pg.jsonb.object({key: val}) → {data: {key: val}}
515
- jsonbObject: { wrapKey: "data", skipKeys: ["data", "object", "pairs"] }, // alias
516
- };
517
- /**
518
- * Normalize parameters to support positional arguments.
519
- * Handles both single positional args and multiple positional args.
520
- */
521
- function normalizeParams(methodName, args) {
522
- // No args - pass through
523
- if (args.length === 0)
524
- return undefined;
525
- // Single arg handling
526
- if (args.length === 1) {
527
- const arg = args[0];
528
- // Object arg - check if we need to wrap it
529
- if (typeof arg === "object" && arg !== null && !Array.isArray(arg)) {
530
- const wrapConfig = OBJECT_WRAP_MAP[methodName];
531
- if (wrapConfig !== undefined) {
532
- const objArg = arg;
533
- // Only wrap if none of the skipKeys are present (avoid double-wrapping)
534
- const hasExpectedKey = wrapConfig.skipKeys.some((key) => key in objArg);
535
- if (!hasExpectedKey) {
536
- return { [wrapConfig.wrapKey]: arg };
537
- }
538
- }
539
- // Pass through normally (either no wrap config or already has expected structure)
540
- return arg;
541
- }
542
- // Array arg - check if we should wrap it
543
- if (Array.isArray(arg)) {
544
- const wrapKey = ARRAY_WRAP_MAP[methodName];
545
- if (wrapKey !== undefined) {
546
- return { [wrapKey]: arg };
547
- }
548
- // Return as-is (e.g., for rows parameter)
549
- return arg;
550
- }
551
- // String arg - use positional mapping
552
- if (typeof arg === "string") {
553
- const paramMapping = POSITIONAL_PARAM_MAP[methodName];
554
- if (typeof paramMapping === "string") {
555
- return { [paramMapping]: arg };
556
- }
557
- if (Array.isArray(paramMapping) && paramMapping[0] !== undefined) {
558
- return { [paramMapping[0]]: arg };
559
- }
560
- // Fallback: try common parameter names
561
- return { sql: arg, query: arg, table: arg, name: arg };
562
- }
563
- return arg;
564
- }
565
- // Multi-arg: check for array+options pattern first (e.g., execute([stmts], {isolationLevel}))
566
- if (args.length >= 1 && Array.isArray(args[0])) {
567
- const wrapKey = ARRAY_WRAP_MAP[methodName];
568
- if (wrapKey !== undefined) {
569
- const result = { [wrapKey]: args[0] };
570
- // Merge trailing options object
571
- if (args.length > 1) {
572
- const lastArg = args[args.length - 1];
573
- if (typeof lastArg === "object" &&
574
- lastArg !== null &&
575
- !Array.isArray(lastArg)) {
576
- Object.assign(result, lastArg);
577
- }
578
- }
579
- return result;
580
- }
581
- }
582
- // Look up positional parameter mapping
583
- const paramMapping = POSITIONAL_PARAM_MAP[methodName];
584
- if (paramMapping === undefined) {
585
- return args[0];
586
- }
587
- // Single param mapping - merge trailing options if present
588
- if (typeof paramMapping === "string") {
589
- const result = { [paramMapping]: args[0] };
590
- // Merge trailing options object (e.g., truncate("table", { cascade: true }))
591
- if (args.length > 1) {
592
- const lastArg = args[args.length - 1];
593
- if (typeof lastArg === "object" &&
594
- lastArg !== null &&
595
- !Array.isArray(lastArg)) {
596
- Object.assign(result, lastArg);
597
- }
598
- }
599
- return result;
600
- }
601
- // Multi-param mapping (array)
602
- const result = {};
603
- // Check if last arg is an options object that should be merged
604
- const lastArg = args[args.length - 1];
605
- const lastArgIsOptionsObject = typeof lastArg === "object" &&
606
- lastArg !== null &&
607
- !Array.isArray(lastArg) &&
608
- Object.keys(lastArg).some((k) => paramMapping.includes(k));
609
- // Map positional args to their keys, skipping options object if detected
610
- const argsToMap = lastArgIsOptionsObject ? args.length - 1 : args.length;
611
- for (let i = 0; i < paramMapping.length && i < argsToMap; i++) {
612
- const key = paramMapping[i];
613
- const arg = args[i];
614
- if (key !== undefined) {
615
- result[key] = arg;
616
- }
617
- }
618
- // Merge trailing options object (either beyond mapping length or detected options object)
619
- if (args.length > paramMapping.length || lastArgIsOptionsObject) {
620
- if (typeof lastArg === "object" &&
621
- lastArg !== null &&
622
- !Array.isArray(lastArg)) {
623
- Object.assign(result, lastArg);
624
- }
625
- }
626
- return result;
627
- }
628
- /**
629
- * Dynamic API generator for tool groups
630
- * Creates methods for each tool in the group
631
- */
632
- function createGroupApi(adapter, groupName, tools) {
633
- const api = {};
634
- for (const tool of tools) {
635
- // Convert tool name to method name
636
- // e.g., pg_read_query -> readQuery, pg_jsonb_extract -> extract
637
- const methodName = toolNameToMethodName(tool.name, groupName);
638
- api[methodName] = async (...args) => {
639
- // Normalize positional arguments to object parameters
640
- // Use empty object when no args provided to match direct tool call behavior
641
- const normalizedParams = normalizeParams(methodName, args) ?? {};
642
- const context = adapter.createContext();
643
- return tool.handler(normalizedParams, context);
644
- };
645
- }
646
- // Add method aliases for this group
647
- const aliases = METHOD_ALIASES[groupName];
648
- if (aliases !== undefined) {
649
- for (const [aliasName, canonicalName] of Object.entries(aliases)) {
650
- if (api[canonicalName] !== undefined) {
651
- api[aliasName] = api[canonicalName];
652
- }
653
- }
654
- }
655
- // Add special wrapper functions for text group (soundex/metaphone call fuzzyMatch with method param)
656
- if (groupName === "text" && api["fuzzyMatch"] !== undefined) {
657
- const fuzzyMatchFn = api["fuzzyMatch"];
658
- // pg.text.soundex({table, column, value}) → fuzzyMatch({table, column, value, method: 'soundex'})
659
- api["soundex"] = async (...args) => {
660
- const normalizedParams = normalizeParams("soundex", args);
661
- return fuzzyMatchFn({ ...normalizedParams, method: "soundex" });
662
- };
663
- // pg.text.metaphone({table, column, value}) → fuzzyMatch({table, column, value, method: 'metaphone'})
664
- api["metaphone"] = async (...args) => {
665
- const normalizedParams = normalizeParams("metaphone", args);
666
- return fuzzyMatchFn({ ...normalizedParams, method: "metaphone" });
667
- };
668
- }
669
- // Add special wrapper functions for performance group
670
- if (groupName === "performance") {
671
- const locksFn = api["locks"];
672
- const statActivityFn = api["statActivity"];
673
- // pg.performance.blockingQueries() → locks({ showBlocked: true })
674
- if (locksFn !== undefined) {
675
- api["blockingQueries"] = async () => {
676
- return locksFn({ showBlocked: true });
677
- };
678
- }
679
- // pg.performance.longRunningQueries(seconds?) → {longRunningQueries, count, threshold}
680
- if (statActivityFn !== undefined) {
681
- api["longRunningQueries"] = async (...args) => {
682
- // Support both: longRunningQueries(10) and longRunningQueries({seconds: 10})
683
- let minSeconds;
684
- const arg0 = args[0];
685
- if (typeof arg0 === "number") {
686
- minSeconds = arg0;
687
- }
688
- else if (typeof arg0 === "object" && arg0 !== null) {
689
- const obj = arg0;
690
- const secVal = obj["seconds"] ??
691
- obj["threshold"] ??
692
- obj["minSeconds"] ??
693
- obj["minDuration"];
694
- if (typeof secVal === "number") {
695
- minSeconds = secVal;
696
- }
697
- }
698
- const result = (await statActivityFn({ includeIdle: false }));
699
- const threshold = minSeconds ?? 5; // Default 5 seconds
700
- const longRunning = result.connections.filter((conn) => {
701
- const duration = conn["duration"];
702
- if (typeof duration === "string") {
703
- // Parse interval like "00:00:10.123"
704
- const parts = duration.split(":");
705
- if (parts.length >= 3) {
706
- const hours = parseInt(parts[0] ?? "0", 10);
707
- const mins = parseInt(parts[1] ?? "0", 10);
708
- const secs = parseFloat(parts[2] ?? "0");
709
- const totalSeconds = hours * 3600 + mins * 60 + secs;
710
- return totalSeconds >= threshold;
711
- }
712
- }
713
- return false;
714
- });
715
- return {
716
- longRunningQueries: longRunning,
717
- count: longRunning.length,
718
- threshold: `${String(threshold)} seconds`,
719
- };
720
- };
721
- // Add alias: runningQueries → longRunningQueries
722
- api["runningQueries"] = api["longRunningQueries"];
723
- }
724
- // pg.performance.analyzeTable() → Actually runs ANALYZE (cross-group bridge to admin)
725
- api["analyzeTable"] = async (...args) => {
726
- const arg0 = args[0];
727
- let tableName = "";
728
- let schemaName = "public";
729
- if (typeof arg0 === "string") {
730
- // Handle schema.table format
731
- if (arg0.includes(".")) {
732
- const parts = arg0.split(".");
733
- schemaName = parts[0] ?? "public";
734
- tableName = parts[1] ?? "";
735
- }
736
- else {
737
- tableName = arg0;
738
- }
739
- }
740
- else if (typeof arg0 === "object" && arg0 !== null) {
741
- const obj = arg0;
742
- const tableVal = obj["table"] ?? obj["name"];
743
- if (typeof tableVal === "string") {
744
- // Handle schema.table format in object form too
745
- if (tableVal.includes(".")) {
746
- const parts = tableVal.split(".");
747
- schemaName = parts[0] ?? "public";
748
- tableName = parts[1] ?? "";
749
- }
750
- else {
751
- tableName = tableVal;
752
- }
753
- }
754
- // Only use explicit schema if table didn't contain schema prefix
755
- const schemaVal = obj["schema"];
756
- if (typeof schemaVal === "string" &&
757
- !tableVal?.toString().includes(".")) {
758
- schemaName = schemaVal;
759
- }
760
- }
761
- if (tableName === "") {
762
- return {
763
- error: "Table name required",
764
- usage: 'pg.performance.analyzeTable("table_name") or pg.performance.analyzeTable({ table: "name", schema: "public" })',
765
- };
766
- }
767
- // Execute ANALYZE directly
768
- const qualifiedName = `"${schemaName}"."${tableName}"`;
769
- await adapter.executeQuery(`ANALYZE ${qualifiedName}`);
770
- return {
771
- success: true,
772
- message: `ANALYZE completed on ${qualifiedName}`,
773
- hint: "Table statistics updated for query planner optimization.",
774
- };
775
- };
776
- }
777
- return api;
778
- }
779
- /**
780
- * Convert tool name to camelCase method name
781
- * Examples:
782
- * pg_read_query (core) -> readQuery
783
- * pg_jsonb_extract (jsonb) -> extract
784
- * pg_vector_search (vector) -> search
785
- */
786
- function toolNameToMethodName(toolName, groupName) {
787
- // Remove pg_ prefix
788
- let name = toolName.replace(/^pg_/, "");
789
- // Remove group prefix if present
790
- const groupPrefix = groupName.replace(/-/g, "_") + "_";
791
- if (name.startsWith(groupPrefix)) {
792
- name = name.substring(groupPrefix.length);
793
- }
794
- // Convert snake_case to camelCase
795
- return name.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
796
- }
797
- /**
798
- * Main API class exposing all tool groups
799
- */
800
- export class PgApi {
801
- core;
802
- transactions;
803
- jsonb;
804
- text;
805
- performance;
806
- admin;
807
- monitoring;
808
- backup;
809
- schema;
810
- vector;
811
- postgis;
812
- partitioning;
813
- stats;
814
- cron;
815
- partman;
816
- kcache;
817
- citext;
818
- ltree;
819
- pgcrypto;
820
- introspection;
821
- toolsByGroup;
822
- constructor(adapter) {
823
- // Get all tool definitions and group them
824
- const allTools = adapter.getToolDefinitions();
825
- this.toolsByGroup = this.groupTools(allTools);
826
- // Create group-specific APIs
827
- this.core = createGroupApi(adapter, "core", this.toolsByGroup.get("core") ?? []);
828
- this.transactions = createGroupApi(adapter, "transactions", this.toolsByGroup.get("transactions") ?? []);
829
- this.jsonb = createGroupApi(adapter, "jsonb", this.toolsByGroup.get("jsonb") ?? []);
830
- this.text = createGroupApi(adapter, "text", this.toolsByGroup.get("text") ?? []);
831
- this.performance = createGroupApi(adapter, "performance", this.toolsByGroup.get("performance") ?? []);
832
- this.admin = createGroupApi(adapter, "admin", this.toolsByGroup.get("admin") ?? []);
833
- this.monitoring = createGroupApi(adapter, "monitoring", this.toolsByGroup.get("monitoring") ?? []);
834
- this.backup = createGroupApi(adapter, "backup", this.toolsByGroup.get("backup") ?? []);
835
- this.schema = createGroupApi(adapter, "schema", this.toolsByGroup.get("schema") ?? []);
836
- this.vector = createGroupApi(adapter, "vector", this.toolsByGroup.get("vector") ?? []);
837
- this.postgis = createGroupApi(adapter, "postgis", this.toolsByGroup.get("postgis") ?? []);
838
- this.partitioning = createGroupApi(adapter, "partitioning", this.toolsByGroup.get("partitioning") ?? []);
839
- this.stats = createGroupApi(adapter, "stats", this.toolsByGroup.get("stats") ?? []);
840
- this.cron = createGroupApi(adapter, "cron", this.toolsByGroup.get("cron") ?? []);
841
- this.partman = createGroupApi(adapter, "partman", this.toolsByGroup.get("partman") ?? []);
842
- this.kcache = createGroupApi(adapter, "kcache", this.toolsByGroup.get("kcache") ?? []);
843
- this.citext = createGroupApi(adapter, "citext", this.toolsByGroup.get("citext") ?? []);
844
- this.ltree = createGroupApi(adapter, "ltree", this.toolsByGroup.get("ltree") ?? []);
845
- this.pgcrypto = createGroupApi(adapter, "pgcrypto", this.toolsByGroup.get("pgcrypto") ?? []);
846
- this.introspection = createGroupApi(adapter, "introspection", this.toolsByGroup.get("introspection") ?? []);
847
- }
848
- /**
849
- * Group tools by their tool group
850
- */
851
- groupTools(tools) {
852
- const grouped = new Map();
853
- for (const tool of tools) {
854
- const group = tool.group;
855
- const existing = grouped.get(group);
856
- if (existing) {
857
- existing.push(tool);
858
- }
859
- else {
860
- grouped.set(group, [tool]);
861
- }
862
- }
863
- return grouped;
864
- }
865
- /**
866
- * Get list of available groups and their method counts
867
- */
868
- getAvailableGroups() {
869
- const groups = {};
870
- for (const [group, tools] of this.toolsByGroup) {
871
- groups[group] = tools.length;
872
- }
873
- return groups;
874
- }
875
- /**
876
- * Get list of methods available in a group
877
- */
878
- getGroupMethods(groupName) {
879
- const groupApi = this[groupName];
880
- if (typeof groupApi === "object" && groupApi !== null) {
881
- return Object.keys(groupApi);
882
- }
883
- return [];
884
- }
885
- /**
886
- * Get help information listing all groups and their methods.
887
- * Call pg.help() in code mode to discover available APIs.
888
- *
889
- * @returns Object with group names as keys and arrays of method names as values
890
- */
891
- help() {
892
- const result = {};
893
- for (const [group, tools] of this.toolsByGroup) {
894
- // Skip codemode group itself
895
- if (group === "codemode")
896
- continue;
897
- result[group] = tools.map((t) => toolNameToMethodName(t.name, group));
898
- }
899
- return result;
900
- }
901
- /**
902
- * Create a serializable API binding for the sandbox
903
- * This creates references that can be called from isolated-vm
904
- */
905
- createSandboxBindings() {
906
- const bindings = {};
907
- const groupNames = [
908
- "core",
909
- "transactions",
910
- "jsonb",
911
- "text",
912
- "performance",
913
- "admin",
914
- "monitoring",
915
- "backup",
916
- "schema",
917
- "vector",
918
- "postgis",
919
- "partitioning",
920
- "stats",
921
- "cron",
922
- "partman",
923
- "kcache",
924
- "citext",
925
- "ltree",
926
- "pgcrypto",
927
- "introspection",
928
- ];
929
- for (const groupName of groupNames) {
930
- const groupApi = this[groupName];
931
- // Capture all method names including aliases
932
- const allMethodNames = Object.keys(groupApi);
933
- // Separate canonical methods from aliases for structured help output
934
- const aliases = METHOD_ALIASES[groupName] ?? {};
935
- const aliasNames = new Set(Object.keys(aliases));
936
- const canonicalMethodNames = allMethodNames.filter((name) => !aliasNames.has(name));
937
- // Filter aliases to only show useful shorthand aliases in help output
938
- // Exclude redundant prefix aliases (e.g., partmanShowConfig, cronListJobs) that
939
- // just add the group name prefix - these are fallback catches, not intended API
940
- const usefulAliases = allMethodNames.filter((name) => {
941
- if (!aliasNames.has(name))
942
- return false;
943
- // Exclude aliases that start with the group name (redundant prefixes)
944
- const lowerGroupName = groupName.toLowerCase();
945
- const lowerAlias = name.toLowerCase();
946
- return !lowerAlias.startsWith(lowerGroupName);
947
- });
948
- // Add all methods plus a 'help' property that lists them
949
- bindings[groupName] = {
950
- ...groupApi,
951
- // Help returns all methods - canonical first, then method aliases, plus examples
952
- // Note: methodAliases are alternate names within THIS group (e.g., pg.partman.analyzeHealth → pg.partman.analyzePartitionHealth)
953
- // They are NOT top-level pg.* aliases. Redundant prefix aliases (e.g., partmanShowConfig) are excluded.
954
- help: () => ({
955
- methods: canonicalMethodNames,
956
- methodAliases: usefulAliases,
957
- examples: GROUP_EXAMPLES[groupName],
958
- }),
959
- };
960
- }
961
- // Add top-level help as directly callable pg.help()
962
- bindings["help"] = () => this.help();
963
- // Add top-level hybridSearch alias for convenience: pg.hybridSearch() → pg.vector.hybridSearch()
964
- const vectorApi = bindings["vector"];
965
- if (vectorApi?.["hybridSearch"] !== undefined) {
966
- bindings["hybridSearch"] = vectorApi["hybridSearch"];
967
- }
968
- // Add top-level JSONB aliases for convenience: pg.jsonbXxx() → pg.jsonb.xxx()
969
- const jsonbApi = bindings["jsonb"];
970
- if (jsonbApi !== undefined) {
971
- if (jsonbApi["extract"] !== undefined) {
972
- bindings["jsonbExtract"] = jsonbApi["extract"];
973
- }
974
- if (jsonbApi["set"] !== undefined) {
975
- bindings["jsonbSet"] = jsonbApi["set"];
976
- }
977
- if (jsonbApi["insert"] !== undefined) {
978
- bindings["jsonbInsert"] = jsonbApi["insert"];
979
- }
980
- if (jsonbApi["delete"] !== undefined) {
981
- bindings["jsonbDelete"] = jsonbApi["delete"];
982
- }
983
- if (jsonbApi["contains"] !== undefined) {
984
- bindings["jsonbContains"] = jsonbApi["contains"];
985
- }
986
- if (jsonbApi["pathQuery"] !== undefined) {
987
- bindings["jsonbPathQuery"] = jsonbApi["pathQuery"];
988
- }
989
- if (jsonbApi["agg"] !== undefined) {
990
- bindings["jsonbAgg"] = jsonbApi["agg"];
991
- }
992
- if (jsonbApi["object"] !== undefined) {
993
- bindings["jsonbObject"] = jsonbApi["object"];
994
- }
995
- if (jsonbApi["array"] !== undefined) {
996
- bindings["jsonbArray"] = jsonbApi["array"];
997
- }
998
- if (jsonbApi["keys"] !== undefined) {
999
- bindings["jsonbKeys"] = jsonbApi["keys"];
1000
- }
1001
- if (jsonbApi["stripNulls"] !== undefined) {
1002
- bindings["jsonbStripNulls"] = jsonbApi["stripNulls"];
1003
- }
1004
- if (jsonbApi["typeof"] !== undefined) {
1005
- bindings["jsonbTypeof"] = jsonbApi["typeof"];
1006
- }
1007
- if (jsonbApi["validatePath"] !== undefined) {
1008
- bindings["jsonbValidatePath"] = jsonbApi["validatePath"];
1009
- }
1010
- if (jsonbApi["merge"] !== undefined) {
1011
- bindings["jsonbMerge"] = jsonbApi["merge"];
1012
- }
1013
- if (jsonbApi["normalize"] !== undefined) {
1014
- bindings["jsonbNormalize"] = jsonbApi["normalize"];
1015
- }
1016
- if (jsonbApi["diff"] !== undefined) {
1017
- bindings["jsonbDiff"] = jsonbApi["diff"];
1018
- }
1019
- if (jsonbApi["indexSuggest"] !== undefined) {
1020
- bindings["jsonbIndexSuggest"] = jsonbApi["indexSuggest"];
1021
- }
1022
- if (jsonbApi["securityScan"] !== undefined) {
1023
- bindings["jsonbSecurityScan"] = jsonbApi["securityScan"];
1024
- }
1025
- if (jsonbApi["stats"] !== undefined) {
1026
- bindings["jsonbStats"] = jsonbApi["stats"];
1027
- }
1028
- }
1029
- // Add top-level text aliases for convenience: pg.textXxx() → pg.text.xxx()
1030
- const textApi = bindings["text"];
1031
- if (textApi !== undefined) {
1032
- if (textApi["search"] !== undefined) {
1033
- bindings["textSearch"] = textApi["search"];
1034
- }
1035
- if (textApi["rank"] !== undefined) {
1036
- bindings["textRank"] = textApi["rank"];
1037
- }
1038
- if (textApi["headline"] !== undefined) {
1039
- bindings["textHeadline"] = textApi["headline"];
1040
- }
1041
- if (textApi["normalize"] !== undefined) {
1042
- bindings["textNormalize"] = textApi["normalize"];
1043
- }
1044
- if (textApi["sentiment"] !== undefined) {
1045
- bindings["textSentiment"] = textApi["sentiment"];
1046
- }
1047
- if (textApi["toVector"] !== undefined) {
1048
- bindings["textToVector"] = textApi["toVector"];
1049
- }
1050
- if (textApi["toQuery"] !== undefined) {
1051
- bindings["textToQuery"] = textApi["toQuery"];
1052
- }
1053
- if (textApi["searchConfig"] !== undefined) {
1054
- bindings["textSearchConfig"] = textApi["searchConfig"];
1055
- }
1056
- if (textApi["trigramSimilarity"] !== undefined) {
1057
- bindings["textTrigramSimilarity"] = textApi["trigramSimilarity"];
1058
- }
1059
- if (textApi["fuzzyMatch"] !== undefined) {
1060
- bindings["textFuzzyMatch"] = textApi["fuzzyMatch"];
1061
- }
1062
- if (textApi["likeSearch"] !== undefined) {
1063
- bindings["textLikeSearch"] = textApi["likeSearch"];
1064
- }
1065
- if (textApi["regexpMatch"] !== undefined) {
1066
- bindings["textRegexpMatch"] = textApi["regexpMatch"];
1067
- }
1068
- if (textApi["createFtsIndex"] !== undefined) {
1069
- bindings["textCreateFtsIndex"] = textApi["createFtsIndex"];
1070
- }
1071
- }
1072
- // Add top-level citext aliases for convenience: pg.citextXxx() → pg.citext.xxx()
1073
- const citextApi = bindings["citext"];
1074
- if (citextApi !== undefined) {
1075
- if (citextApi["createExtension"] !== undefined) {
1076
- bindings["citextCreateExtension"] = citextApi["createExtension"];
1077
- }
1078
- if (citextApi["convertColumn"] !== undefined) {
1079
- bindings["citextConvertColumn"] = citextApi["convertColumn"];
1080
- }
1081
- if (citextApi["listColumns"] !== undefined) {
1082
- bindings["citextListColumns"] = citextApi["listColumns"];
1083
- }
1084
- if (citextApi["analyzeCandidates"] !== undefined) {
1085
- bindings["citextAnalyzeCandidates"] = citextApi["analyzeCandidates"];
1086
- }
1087
- if (citextApi["compare"] !== undefined) {
1088
- bindings["citextCompare"] = citextApi["compare"];
1089
- }
1090
- if (citextApi["schemaAdvisor"] !== undefined) {
1091
- bindings["citextSchemaAdvisor"] = citextApi["schemaAdvisor"];
1092
- }
1093
- }
1094
- // Add top-level ltree aliases for convenience: pg.ltreeXxx() → pg.ltree.xxx()
1095
- const ltreeApi = bindings["ltree"];
1096
- if (ltreeApi !== undefined) {
1097
- if (ltreeApi["createExtension"] !== undefined) {
1098
- bindings["ltreeCreateExtension"] = ltreeApi["createExtension"];
1099
- }
1100
- if (ltreeApi["query"] !== undefined) {
1101
- bindings["ltreeQuery"] = ltreeApi["query"];
1102
- }
1103
- if (ltreeApi["subpath"] !== undefined) {
1104
- bindings["ltreeSubpath"] = ltreeApi["subpath"];
1105
- }
1106
- if (ltreeApi["lca"] !== undefined) {
1107
- bindings["ltreeLca"] = ltreeApi["lca"];
1108
- }
1109
- if (ltreeApi["match"] !== undefined) {
1110
- bindings["ltreeMatch"] = ltreeApi["match"];
1111
- }
1112
- if (ltreeApi["listColumns"] !== undefined) {
1113
- bindings["ltreeListColumns"] = ltreeApi["listColumns"];
1114
- }
1115
- if (ltreeApi["convertColumn"] !== undefined) {
1116
- bindings["ltreeConvertColumn"] = ltreeApi["convertColumn"];
1117
- }
1118
- if (ltreeApi["createIndex"] !== undefined) {
1119
- bindings["ltreeCreateIndex"] = ltreeApi["createIndex"];
1120
- }
1121
- }
1122
- // Add top-level pgcrypto aliases for convenience: pg.pgcryptoXxx() → pg.pgcrypto.xxx()
1123
- const pgcryptoApi = bindings["pgcrypto"];
1124
- if (pgcryptoApi !== undefined) {
1125
- if (pgcryptoApi["createExtension"] !== undefined) {
1126
- bindings["pgcryptoCreateExtension"] = pgcryptoApi["createExtension"];
1127
- }
1128
- if (pgcryptoApi["hash"] !== undefined) {
1129
- bindings["pgcryptoHash"] = pgcryptoApi["hash"];
1130
- }
1131
- if (pgcryptoApi["hmac"] !== undefined) {
1132
- bindings["pgcryptoHmac"] = pgcryptoApi["hmac"];
1133
- }
1134
- if (pgcryptoApi["encrypt"] !== undefined) {
1135
- bindings["pgcryptoEncrypt"] = pgcryptoApi["encrypt"];
1136
- }
1137
- if (pgcryptoApi["decrypt"] !== undefined) {
1138
- bindings["pgcryptoDecrypt"] = pgcryptoApi["decrypt"];
1139
- }
1140
- if (pgcryptoApi["genRandomUuid"] !== undefined) {
1141
- bindings["pgcryptoGenRandomUuid"] = pgcryptoApi["genRandomUuid"];
1142
- }
1143
- if (pgcryptoApi["genRandomBytes"] !== undefined) {
1144
- bindings["pgcryptoGenRandomBytes"] = pgcryptoApi["genRandomBytes"];
1145
- }
1146
- if (pgcryptoApi["genSalt"] !== undefined) {
1147
- bindings["pgcryptoGenSalt"] = pgcryptoApi["genSalt"];
1148
- }
1149
- if (pgcryptoApi["crypt"] !== undefined) {
1150
- bindings["pgcryptoCrypt"] = pgcryptoApi["crypt"];
1151
- }
1152
- }
1153
- // Add top-level core aliases for the most common starter tools: pg.readQuery() → pg.core.readQuery()
1154
- const coreApi = bindings["core"];
1155
- if (coreApi !== undefined) {
1156
- // Query tools
1157
- if (coreApi["readQuery"] !== undefined) {
1158
- bindings["readQuery"] = coreApi["readQuery"];
1159
- }
1160
- if (coreApi["writeQuery"] !== undefined) {
1161
- bindings["writeQuery"] = coreApi["writeQuery"];
1162
- }
1163
- // Table metadata tools
1164
- if (coreApi["listTables"] !== undefined) {
1165
- bindings["listTables"] = coreApi["listTables"];
1166
- }
1167
- if (coreApi["describeTable"] !== undefined) {
1168
- bindings["describeTable"] = coreApi["describeTable"];
1169
- }
1170
- // Table CRUD tools
1171
- if (coreApi["createTable"] !== undefined) {
1172
- bindings["createTable"] = coreApi["createTable"];
1173
- }
1174
- if (coreApi["dropTable"] !== undefined) {
1175
- bindings["dropTable"] = coreApi["dropTable"];
1176
- }
1177
- // Row operation tools
1178
- if (coreApi["count"] !== undefined) {
1179
- bindings["count"] = coreApi["count"];
1180
- }
1181
- if (coreApi["exists"] !== undefined) {
1182
- bindings["exists"] = coreApi["exists"];
1183
- }
1184
- if (coreApi["upsert"] !== undefined) {
1185
- bindings["upsert"] = coreApi["upsert"];
1186
- }
1187
- if (coreApi["batchInsert"] !== undefined) {
1188
- bindings["batchInsert"] = coreApi["batchInsert"];
1189
- }
1190
- if (coreApi["truncate"] !== undefined) {
1191
- bindings["truncate"] = coreApi["truncate"];
1192
- }
1193
- // Index tools
1194
- if (coreApi["createIndex"] !== undefined) {
1195
- bindings["createIndex"] = coreApi["createIndex"];
1196
- }
1197
- if (coreApi["dropIndex"] !== undefined) {
1198
- bindings["dropIndex"] = coreApi["dropIndex"];
1199
- }
1200
- if (coreApi["getIndexes"] !== undefined) {
1201
- bindings["getIndexes"] = coreApi["getIndexes"];
1202
- }
1203
- // Object listing tools
1204
- if (coreApi["listObjects"] !== undefined) {
1205
- bindings["listObjects"] = coreApi["listObjects"];
1206
- }
1207
- if (coreApi["objectDetails"] !== undefined) {
1208
- bindings["objectDetails"] = coreApi["objectDetails"];
1209
- }
1210
- // Health/analysis tools
1211
- if (coreApi["analyzeDbHealth"] !== undefined) {
1212
- bindings["analyzeDbHealth"] = coreApi["analyzeDbHealth"];
1213
- }
1214
- if (coreApi["analyzeQueryIndexes"] !== undefined) {
1215
- bindings["analyzeQueryIndexes"] = coreApi["analyzeQueryIndexes"];
1216
- }
1217
- if (coreApi["analyzeWorkloadIndexes"] !== undefined) {
1218
- bindings["analyzeWorkloadIndexes"] = coreApi["analyzeWorkloadIndexes"];
1219
- }
1220
- // Extensions
1221
- if (coreApi["listExtensions"] !== undefined) {
1222
- bindings["listExtensions"] = coreApi["listExtensions"];
1223
- }
1224
- }
1225
- // Add top-level transaction aliases for consistency: pg.transactionXxx() → pg.transactions.xxx()
1226
- const transactionsApi = bindings["transactions"];
1227
- if (transactionsApi !== undefined) {
1228
- if (transactionsApi["transactionBegin"] !== undefined) {
1229
- bindings["transactionBegin"] = transactionsApi["transactionBegin"];
1230
- }
1231
- if (transactionsApi["transactionCommit"] !== undefined) {
1232
- bindings["transactionCommit"] = transactionsApi["transactionCommit"];
1233
- }
1234
- if (transactionsApi["transactionRollback"] !== undefined) {
1235
- bindings["transactionRollback"] =
1236
- transactionsApi["transactionRollback"];
1237
- }
1238
- if (transactionsApi["transactionSavepoint"] !== undefined) {
1239
- bindings["transactionSavepoint"] =
1240
- transactionsApi["transactionSavepoint"];
1241
- }
1242
- if (transactionsApi["transactionRelease"] !== undefined) {
1243
- bindings["transactionRelease"] = transactionsApi["transactionRelease"];
1244
- }
1245
- if (transactionsApi["transactionRollbackTo"] !== undefined) {
1246
- bindings["transactionRollbackTo"] =
1247
- transactionsApi["transactionRollbackTo"];
1248
- }
1249
- if (transactionsApi["transactionExecute"] !== undefined) {
1250
- bindings["transactionExecute"] = transactionsApi["transactionExecute"];
1251
- }
1252
- }
1253
- // Add top-level performance aliases for convenience: pg.explain() → pg.performance.explain()
1254
- const performanceApi = bindings["performance"];
1255
- if (performanceApi !== undefined) {
1256
- // Query plan analysis
1257
- if (performanceApi["explain"] !== undefined) {
1258
- bindings["explain"] = performanceApi["explain"];
1259
- }
1260
- if (performanceApi["explainAnalyze"] !== undefined) {
1261
- bindings["explainAnalyze"] = performanceApi["explainAnalyze"];
1262
- }
1263
- // Cache and stats
1264
- if (performanceApi["cacheHitRatio"] !== undefined) {
1265
- bindings["cacheHitRatio"] = performanceApi["cacheHitRatio"];
1266
- }
1267
- if (performanceApi["indexStats"] !== undefined) {
1268
- bindings["indexStats"] = performanceApi["indexStats"];
1269
- }
1270
- if (performanceApi["tableStats"] !== undefined) {
1271
- bindings["tableStats"] = performanceApi["tableStats"];
1272
- }
1273
- // Recommendations and analysis
1274
- if (performanceApi["indexRecommendations"] !== undefined) {
1275
- bindings["indexRecommendations"] =
1276
- performanceApi["indexRecommendations"];
1277
- }
1278
- if (performanceApi["bloatCheck"] !== undefined) {
1279
- bindings["bloatCheck"] = performanceApi["bloatCheck"];
1280
- }
1281
- if (performanceApi["vacuumStats"] !== undefined) {
1282
- bindings["vacuumStats"] = performanceApi["vacuumStats"];
1283
- }
1284
- // Index analysis
1285
- if (performanceApi["unusedIndexes"] !== undefined) {
1286
- bindings["unusedIndexes"] = performanceApi["unusedIndexes"];
1287
- }
1288
- if (performanceApi["duplicateIndexes"] !== undefined) {
1289
- bindings["duplicateIndexes"] = performanceApi["duplicateIndexes"];
1290
- }
1291
- if (performanceApi["seqScanTables"] !== undefined) {
1292
- bindings["seqScanTables"] = performanceApi["seqScanTables"];
1293
- }
1294
- }
1295
- // Add top-level admin aliases for convenience: pg.vacuum() → pg.admin.vacuum()
1296
- // Note: Admin tools are system-level operations, so we include essential maintenance aliases
1297
- const adminApi = bindings["admin"];
1298
- if (adminApi !== undefined) {
1299
- // Maintenance operations
1300
- if (adminApi["vacuum"] !== undefined) {
1301
- bindings["vacuum"] = adminApi["vacuum"];
1302
- }
1303
- if (adminApi["vacuumAnalyze"] !== undefined) {
1304
- bindings["vacuumAnalyze"] = adminApi["vacuumAnalyze"];
1305
- }
1306
- if (adminApi["analyze"] !== undefined) {
1307
- bindings["analyze"] = adminApi["analyze"];
1308
- }
1309
- if (adminApi["reindex"] !== undefined) {
1310
- bindings["reindex"] = adminApi["reindex"];
1311
- }
1312
- if (adminApi["cluster"] !== undefined) {
1313
- bindings["cluster"] = adminApi["cluster"];
1314
- }
1315
- // Configuration
1316
- if (adminApi["setConfig"] !== undefined) {
1317
- bindings["setConfig"] = adminApi["setConfig"];
1318
- }
1319
- if (adminApi["reloadConf"] !== undefined) {
1320
- bindings["reloadConf"] = adminApi["reloadConf"];
1321
- }
1322
- // Statistics
1323
- if (adminApi["resetStats"] !== undefined) {
1324
- bindings["resetStats"] = adminApi["resetStats"];
1325
- }
1326
- // Backend management
1327
- if (adminApi["cancelBackend"] !== undefined) {
1328
- bindings["cancelBackend"] = adminApi["cancelBackend"];
1329
- }
1330
- if (adminApi["terminateBackend"] !== undefined) {
1331
- bindings["terminateBackend"] = adminApi["terminateBackend"];
1332
- }
1333
- }
1334
- // Add top-level monitoring aliases for convenience: pg.databaseSize() → pg.monitoring.databaseSize()
1335
- const monitoringApi = bindings["monitoring"];
1336
- if (monitoringApi !== undefined) {
1337
- // Database and table sizing
1338
- if (monitoringApi["databaseSize"] !== undefined) {
1339
- bindings["databaseSize"] = monitoringApi["databaseSize"];
1340
- }
1341
- if (monitoringApi["tableSizes"] !== undefined) {
1342
- bindings["tableSizes"] = monitoringApi["tableSizes"];
1343
- }
1344
- // Connection monitoring
1345
- if (monitoringApi["connectionStats"] !== undefined) {
1346
- bindings["connectionStats"] = monitoringApi["connectionStats"];
1347
- }
1348
- // Server information
1349
- if (monitoringApi["serverVersion"] !== undefined) {
1350
- bindings["serverVersion"] = monitoringApi["serverVersion"];
1351
- }
1352
- if (monitoringApi["uptime"] !== undefined) {
1353
- bindings["uptime"] = monitoringApi["uptime"];
1354
- }
1355
- // Configuration
1356
- if (monitoringApi["showSettings"] !== undefined) {
1357
- bindings["showSettings"] = monitoringApi["showSettings"];
1358
- }
1359
- // Recovery and replication
1360
- if (monitoringApi["recoveryStatus"] !== undefined) {
1361
- bindings["recoveryStatus"] = monitoringApi["recoveryStatus"];
1362
- }
1363
- if (monitoringApi["replicationStatus"] !== undefined) {
1364
- bindings["replicationStatus"] = monitoringApi["replicationStatus"];
1365
- }
1366
- // Capacity and resource analysis
1367
- if (monitoringApi["capacityPlanning"] !== undefined) {
1368
- bindings["capacityPlanning"] = monitoringApi["capacityPlanning"];
1369
- }
1370
- if (monitoringApi["resourceUsageAnalyze"] !== undefined) {
1371
- bindings["resourceUsageAnalyze"] =
1372
- monitoringApi["resourceUsageAnalyze"];
1373
- }
1374
- // Alert thresholds
1375
- if (monitoringApi["alertThresholdSet"] !== undefined) {
1376
- bindings["alertThresholdSet"] = monitoringApi["alertThresholdSet"];
1377
- }
1378
- }
1379
- // Add top-level backup aliases for convenience: pg.dumpTable() → pg.backup.dumpTable()
1380
- const backupApi = bindings["backup"];
1381
- if (backupApi !== undefined) {
1382
- // Dump operations
1383
- if (backupApi["dumpTable"] !== undefined) {
1384
- bindings["dumpTable"] = backupApi["dumpTable"];
1385
- }
1386
- if (backupApi["dumpSchema"] !== undefined) {
1387
- bindings["dumpSchema"] = backupApi["dumpSchema"];
1388
- }
1389
- // Copy operations
1390
- if (backupApi["copyExport"] !== undefined) {
1391
- bindings["copyExport"] = backupApi["copyExport"];
1392
- }
1393
- if (backupApi["copyImport"] !== undefined) {
1394
- bindings["copyImport"] = backupApi["copyImport"];
1395
- }
1396
- // Backup planning
1397
- if (backupApi["createBackupPlan"] !== undefined) {
1398
- bindings["createBackupPlan"] = backupApi["createBackupPlan"];
1399
- }
1400
- // Restore operations
1401
- if (backupApi["restoreCommand"] !== undefined) {
1402
- bindings["restoreCommand"] = backupApi["restoreCommand"];
1403
- }
1404
- if (backupApi["restoreValidate"] !== undefined) {
1405
- bindings["restoreValidate"] = backupApi["restoreValidate"];
1406
- }
1407
- // Physical backup
1408
- if (backupApi["physical"] !== undefined) {
1409
- bindings["physical"] = backupApi["physical"];
1410
- bindings["backupPhysical"] = backupApi["physical"]; // Also add prefixed alias
1411
- }
1412
- // Schedule optimization
1413
- if (backupApi["scheduleOptimize"] !== undefined) {
1414
- bindings["scheduleOptimize"] = backupApi["scheduleOptimize"];
1415
- bindings["backupScheduleOptimize"] = backupApi["scheduleOptimize"]; // Also add prefixed alias
1416
- }
1417
- }
1418
- // Add top-level stats aliases for convenience: pg.descriptive() → pg.stats.descriptive()
1419
- const statsApi = bindings["stats"];
1420
- if (statsApi !== undefined) {
1421
- // Core statistics
1422
- if (statsApi["descriptive"] !== undefined) {
1423
- bindings["descriptive"] = statsApi["descriptive"];
1424
- }
1425
- if (statsApi["percentiles"] !== undefined) {
1426
- bindings["percentiles"] = statsApi["percentiles"];
1427
- }
1428
- if (statsApi["correlation"] !== undefined) {
1429
- bindings["correlation"] = statsApi["correlation"];
1430
- }
1431
- if (statsApi["regression"] !== undefined) {
1432
- bindings["regression"] = statsApi["regression"];
1433
- }
1434
- // Advanced statistics
1435
- if (statsApi["timeSeries"] !== undefined) {
1436
- bindings["timeSeries"] = statsApi["timeSeries"];
1437
- }
1438
- if (statsApi["distribution"] !== undefined) {
1439
- bindings["distribution"] = statsApi["distribution"];
1440
- }
1441
- if (statsApi["hypothesis"] !== undefined) {
1442
- bindings["hypothesis"] = statsApi["hypothesis"];
1443
- }
1444
- if (statsApi["sampling"] !== undefined) {
1445
- bindings["sampling"] = statsApi["sampling"];
1446
- }
1447
- }
1448
- // Add top-level PostGIS aliases for convenience: pg.postgisXxx() → pg.postgis.xxx()
1449
- const postgisApi = bindings["postgis"];
1450
- if (postgisApi !== undefined) {
1451
- // Extension
1452
- if (postgisApi["createExtension"] !== undefined) {
1453
- bindings["postgisCreateExtension"] = postgisApi["createExtension"];
1454
- }
1455
- // Geometry creation
1456
- if (postgisApi["geocode"] !== undefined) {
1457
- bindings["postgisGeocode"] = postgisApi["geocode"];
1458
- }
1459
- if (postgisApi["geometryColumn"] !== undefined) {
1460
- bindings["postgisGeometryColumn"] = postgisApi["geometryColumn"];
1461
- }
1462
- if (postgisApi["spatialIndex"] !== undefined) {
1463
- bindings["postgisSpatialIndex"] = postgisApi["spatialIndex"];
1464
- }
1465
- // Spatial queries
1466
- if (postgisApi["distance"] !== undefined) {
1467
- bindings["postgisDistance"] = postgisApi["distance"];
1468
- }
1469
- if (postgisApi["boundingBox"] !== undefined) {
1470
- bindings["postgisBoundingBox"] = postgisApi["boundingBox"];
1471
- }
1472
- if (postgisApi["intersection"] !== undefined) {
1473
- bindings["postgisIntersection"] = postgisApi["intersection"];
1474
- }
1475
- if (postgisApi["pointInPolygon"] !== undefined) {
1476
- bindings["postgisPointInPolygon"] = postgisApi["pointInPolygon"];
1477
- }
1478
- // Table operations
1479
- if (postgisApi["buffer"] !== undefined) {
1480
- bindings["postgisBuffer"] = postgisApi["buffer"];
1481
- }
1482
- if (postgisApi["geoTransform"] !== undefined) {
1483
- bindings["postgisGeoTransform"] = postgisApi["geoTransform"];
1484
- }
1485
- if (postgisApi["geoCluster"] !== undefined) {
1486
- bindings["postgisGeoCluster"] = postgisApi["geoCluster"];
1487
- }
1488
- // Standalone geometry operations
1489
- if (postgisApi["geometryBuffer"] !== undefined) {
1490
- bindings["postgisGeometryBuffer"] = postgisApi["geometryBuffer"];
1491
- }
1492
- if (postgisApi["geometryTransform"] !== undefined) {
1493
- bindings["postgisGeometryTransform"] = postgisApi["geometryTransform"];
1494
- }
1495
- if (postgisApi["geometryIntersection"] !== undefined) {
1496
- bindings["postgisGeometryIntersection"] =
1497
- postgisApi["geometryIntersection"];
1498
- }
1499
- // Administration
1500
- if (postgisApi["geoIndexOptimize"] !== undefined) {
1501
- bindings["postgisGeoIndexOptimize"] = postgisApi["geoIndexOptimize"];
1502
- }
1503
- }
1504
- // Add top-level cron aliases for convenience: pg.cronSchedule() → pg.cron.schedule()
1505
- const cronApi = bindings["cron"];
1506
- if (cronApi !== undefined) {
1507
- // Extension
1508
- if (cronApi["createExtension"] !== undefined) {
1509
- bindings["cronCreateExtension"] = cronApi["createExtension"];
1510
- }
1511
- // Scheduling
1512
- if (cronApi["schedule"] !== undefined) {
1513
- bindings["cronSchedule"] = cronApi["schedule"];
1514
- }
1515
- if (cronApi["scheduleInDatabase"] !== undefined) {
1516
- bindings["cronScheduleInDatabase"] = cronApi["scheduleInDatabase"];
1517
- }
1518
- if (cronApi["unschedule"] !== undefined) {
1519
- bindings["cronUnschedule"] = cronApi["unschedule"];
1520
- }
1521
- // Job management
1522
- if (cronApi["alterJob"] !== undefined) {
1523
- bindings["cronAlterJob"] = cronApi["alterJob"];
1524
- }
1525
- if (cronApi["listJobs"] !== undefined) {
1526
- bindings["cronListJobs"] = cronApi["listJobs"];
1527
- }
1528
- if (cronApi["jobRunDetails"] !== undefined) {
1529
- bindings["cronJobRunDetails"] = cronApi["jobRunDetails"];
1530
- }
1531
- if (cronApi["cleanupHistory"] !== undefined) {
1532
- bindings["cronCleanupHistory"] = cronApi["cleanupHistory"];
1533
- }
1534
- }
1535
- return bindings;
1536
- }
1537
- }
1538
- /**
1539
- * Create a PgApi instance for an adapter
1540
- */
1541
- export function createPgApi(adapter) {
1542
- return new PgApi(adapter);
1543
- }
1544
- //# sourceMappingURL=api.js.map