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