@neverinfamous/postgres-mcp 1.0.1

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