@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,239 @@
1
+ /**
2
+ * PostgreSQL pgcrypto Extension Tools
3
+ * 9 tools total.
4
+ */
5
+ import { z } from "zod";
6
+ import { readOnly, write } from "../../../utils/annotations.js";
7
+ import { getToolIcons } from "../../../utils/icons.js";
8
+ import { PgcryptoHashSchema, PgcryptoHmacSchema, PgcryptoEncryptSchema, PgcryptoEncryptSchemaBase, PgcryptoDecryptSchema, PgcryptoDecryptSchemaBase, PgcryptoRandomBytesSchema, PgcryptoGenSaltSchema, PgcryptoCryptSchema, } from "../schemas/index.js";
9
+ export function getPgcryptoTools(adapter) {
10
+ return [
11
+ createPgcryptoExtensionTool(adapter),
12
+ createPgcryptoHashTool(adapter),
13
+ createPgcryptoHmacTool(adapter),
14
+ createPgcryptoEncryptTool(adapter),
15
+ createPgcryptoDecryptTool(adapter),
16
+ createPgcryptoGenRandomUuidTool(adapter),
17
+ createPgcryptoGenRandomBytesTool(adapter),
18
+ createPgcryptoGenSaltTool(adapter),
19
+ createPgcryptoCryptTool(adapter),
20
+ ];
21
+ }
22
+ function createPgcryptoExtensionTool(adapter) {
23
+ return {
24
+ name: "pg_pgcrypto_create_extension",
25
+ description: "Enable the pgcrypto extension for cryptographic functions.",
26
+ group: "pgcrypto",
27
+ inputSchema: z.object({}),
28
+ annotations: write("Create Pgcrypto Extension"),
29
+ icons: getToolIcons("pgcrypto", write("Create Pgcrypto Extension")),
30
+ handler: async (_params, _context) => {
31
+ await adapter.executeQuery("CREATE EXTENSION IF NOT EXISTS pgcrypto");
32
+ return { success: true, message: "pgcrypto extension enabled" };
33
+ },
34
+ };
35
+ }
36
+ function createPgcryptoHashTool(adapter) {
37
+ return {
38
+ name: "pg_pgcrypto_hash",
39
+ description: "Hash data using various algorithms (SHA-256, SHA-512, MD5, etc.).",
40
+ group: "pgcrypto",
41
+ inputSchema: PgcryptoHashSchema,
42
+ annotations: readOnly("Hash Data"),
43
+ icons: getToolIcons("pgcrypto", readOnly("Hash Data")),
44
+ handler: async (params, _context) => {
45
+ const { data, algorithm, encoding } = PgcryptoHashSchema.parse(params);
46
+ const enc = encoding ?? "hex";
47
+ const encodeFunc = enc === "base64"
48
+ ? "encode(digest($1, $2), 'base64')"
49
+ : "encode(digest($1, $2), 'hex')";
50
+ const result = await adapter.executeQuery(`SELECT ${encodeFunc} as hash`, [data, algorithm]);
51
+ return {
52
+ success: true,
53
+ algorithm,
54
+ encoding: enc,
55
+ hash: result.rows?.[0]?.["hash"],
56
+ inputLength: data.length,
57
+ };
58
+ },
59
+ };
60
+ }
61
+ function createPgcryptoHmacTool(adapter) {
62
+ return {
63
+ name: "pg_pgcrypto_hmac",
64
+ description: "Compute HMAC for data with a secret key.",
65
+ group: "pgcrypto",
66
+ inputSchema: PgcryptoHmacSchema,
67
+ annotations: readOnly("HMAC"),
68
+ icons: getToolIcons("pgcrypto", readOnly("HMAC")),
69
+ handler: async (params, _context) => {
70
+ const { data, key, algorithm, encoding } = PgcryptoHmacSchema.parse(params);
71
+ const enc = encoding ?? "hex";
72
+ const encodeFunc = enc === "base64"
73
+ ? "encode(hmac($1, $2, $3), 'base64')"
74
+ : "encode(hmac($1, $2, $3), 'hex')";
75
+ const result = await adapter.executeQuery(`SELECT ${encodeFunc} as hmac`, [data, key, algorithm]);
76
+ return {
77
+ success: true,
78
+ algorithm,
79
+ encoding: enc,
80
+ hmac: result.rows?.[0]?.["hmac"],
81
+ };
82
+ },
83
+ };
84
+ }
85
+ function createPgcryptoEncryptTool(adapter) {
86
+ return {
87
+ name: "pg_pgcrypto_encrypt",
88
+ description: "Encrypt data using PGP symmetric encryption.",
89
+ group: "pgcrypto",
90
+ // Use base schema for MCP so properties are properly exposed
91
+ inputSchema: PgcryptoEncryptSchemaBase,
92
+ annotations: readOnly("Encrypt Data"),
93
+ icons: getToolIcons("pgcrypto", readOnly("Encrypt Data")),
94
+ handler: async (params, _context) => {
95
+ // Use transformed schema with alias resolution for validation
96
+ const { data, password, options } = PgcryptoEncryptSchema.parse(params);
97
+ const sql = options !== undefined
98
+ ? `SELECT encode(pgp_sym_encrypt($1, $2, $3), 'base64') as encrypted`
99
+ : `SELECT encode(pgp_sym_encrypt($1, $2), 'base64') as encrypted`;
100
+ const queryParams = options !== undefined ? [data, password, options] : [data, password];
101
+ const result = await adapter.executeQuery(sql, queryParams);
102
+ return {
103
+ success: true,
104
+ encrypted: result.rows?.[0]?.["encrypted"],
105
+ encoding: "base64",
106
+ };
107
+ },
108
+ };
109
+ }
110
+ function createPgcryptoDecryptTool(adapter) {
111
+ return {
112
+ name: "pg_pgcrypto_decrypt",
113
+ description: "Decrypt data that was encrypted with pg_pgcrypto_encrypt.",
114
+ group: "pgcrypto",
115
+ // Use base schema for MCP so properties are properly exposed
116
+ inputSchema: PgcryptoDecryptSchemaBase,
117
+ annotations: readOnly("Decrypt Data"),
118
+ icons: getToolIcons("pgcrypto", readOnly("Decrypt Data")),
119
+ handler: async (params, _context) => {
120
+ // Use transformed schema with alias resolution for validation
121
+ const { encryptedData, password } = PgcryptoDecryptSchema.parse(params);
122
+ const result = await adapter.executeQuery(`SELECT pgp_sym_decrypt(decode($1, 'base64'), $2) as decrypted`, [encryptedData, password]);
123
+ const decrypted = result.rows?.[0]?.["decrypted"];
124
+ // Throw error for decryption failure (wrong password or corrupted data)
125
+ if (decrypted === undefined || decrypted === null) {
126
+ throw new Error("Decryption failed - wrong password or corrupted data");
127
+ }
128
+ return { success: true, decrypted: decrypted, verified: true };
129
+ },
130
+ };
131
+ }
132
+ function createPgcryptoGenRandomUuidTool(adapter) {
133
+ // Schema with proper validation
134
+ const GenUuidSchema = z
135
+ .object({
136
+ count: z
137
+ .number()
138
+ .min(1)
139
+ .max(100)
140
+ .optional()
141
+ .describe("Number of UUIDs to generate (default: 1, max: 100)"),
142
+ })
143
+ .default({});
144
+ return {
145
+ name: "pg_pgcrypto_gen_random_uuid",
146
+ description: "Generate a cryptographically secure UUID v4.",
147
+ group: "pgcrypto",
148
+ inputSchema: GenUuidSchema,
149
+ annotations: readOnly("Generate UUID"),
150
+ icons: getToolIcons("pgcrypto", readOnly("Generate UUID")),
151
+ handler: async (params, _context) => {
152
+ // Parse via Zod to enforce count validation (max 100)
153
+ const parsed = GenUuidSchema.parse(params);
154
+ const generateCount = parsed.count ?? 1;
155
+ const result = await adapter.executeQuery(`SELECT gen_random_uuid()::text as uuid FROM generate_series(1, $1)`, [generateCount]);
156
+ const uuids = (result.rows ?? []).map((r) => r["uuid"]);
157
+ // Add convenience 'uuid' property for single UUID requests
158
+ const response = {
159
+ success: true,
160
+ uuids,
161
+ count: uuids.length,
162
+ };
163
+ if (uuids.length === 1) {
164
+ response["uuid"] = uuids[0];
165
+ }
166
+ return response;
167
+ },
168
+ };
169
+ }
170
+ function createPgcryptoGenRandomBytesTool(adapter) {
171
+ return {
172
+ name: "pg_pgcrypto_gen_random_bytes",
173
+ description: "Generate cryptographically secure random bytes.",
174
+ group: "pgcrypto",
175
+ inputSchema: PgcryptoRandomBytesSchema,
176
+ annotations: readOnly("Generate Random Bytes"),
177
+ icons: getToolIcons("pgcrypto", readOnly("Generate Random Bytes")),
178
+ handler: async (params, _context) => {
179
+ const { length, encoding } = PgcryptoRandomBytesSchema.parse(params);
180
+ const enc = encoding ?? "hex";
181
+ const encodeFormat = enc === "base64" ? "base64" : "hex";
182
+ const result = await adapter.executeQuery(`SELECT encode(gen_random_bytes($1), $2) as random_bytes`, [length, encodeFormat]);
183
+ return {
184
+ success: true,
185
+ randomBytes: result.rows?.[0]?.["random_bytes"],
186
+ length,
187
+ encoding: enc,
188
+ };
189
+ },
190
+ };
191
+ }
192
+ function createPgcryptoGenSaltTool(adapter) {
193
+ return {
194
+ name: "pg_pgcrypto_gen_salt",
195
+ description: "Generate a salt for use with crypt() password hashing.",
196
+ group: "pgcrypto",
197
+ inputSchema: PgcryptoGenSaltSchema,
198
+ annotations: readOnly("Generate Salt"),
199
+ icons: getToolIcons("pgcrypto", readOnly("Generate Salt")),
200
+ handler: async (params, _context) => {
201
+ const { type, iterations } = PgcryptoGenSaltSchema.parse(params);
202
+ const result = iterations !== undefined && (type === "bf" || type === "xdes")
203
+ ? await adapter.executeQuery(`SELECT gen_salt($1, $2) as salt`, [
204
+ type,
205
+ iterations,
206
+ ])
207
+ : await adapter.executeQuery(`SELECT gen_salt($1) as salt`, [type]);
208
+ return {
209
+ success: true,
210
+ salt: result.rows?.[0]?.["salt"],
211
+ type,
212
+ };
213
+ },
214
+ };
215
+ }
216
+ function createPgcryptoCryptTool(adapter) {
217
+ return {
218
+ name: "pg_pgcrypto_crypt",
219
+ description: "Hash a password using crypt() with a salt from gen_salt().",
220
+ group: "pgcrypto",
221
+ inputSchema: PgcryptoCryptSchema,
222
+ annotations: readOnly("Crypt Password"),
223
+ icons: getToolIcons("pgcrypto", readOnly("Crypt Password")),
224
+ handler: async (params, _context) => {
225
+ const { password, salt } = PgcryptoCryptSchema.parse(params);
226
+ const result = await adapter.executeQuery(`SELECT crypt($1, $2) as hash`, [password, salt]);
227
+ const hash = result.rows?.[0]?.["hash"];
228
+ const algorithm = salt.startsWith("$2a$") || salt.startsWith("$2b$")
229
+ ? "bcrypt"
230
+ : salt.startsWith("$1$")
231
+ ? "md5"
232
+ : salt.startsWith("_")
233
+ ? "xdes"
234
+ : "des";
235
+ return { success: true, hash, algorithm };
236
+ },
237
+ };
238
+ }
239
+ //# sourceMappingURL=pgcrypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pgcrypto.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/tools/pgcrypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * PostgreSQL PostGIS Extension Tools - Advanced Operations
3
+ *
4
+ * Advanced spatial tools: geocode, geo_transform, geo_index_optimize, geo_cluster.
5
+ */
6
+ import type { PostgresAdapter } from "../../PostgresAdapter.js";
7
+ import type { ToolDefinition } from "../../../../types/index.js";
8
+ export declare function createGeocodeTool(adapter: PostgresAdapter): ToolDefinition;
9
+ /**
10
+ * Transform geometry between coordinate systems
11
+ */
12
+ export declare function createGeoTransformTool(adapter: PostgresAdapter): ToolDefinition;
13
+ /**
14
+ * Analyze and optimize spatial indexes
15
+ */
16
+ export declare function createGeoIndexOptimizeTool(adapter: PostgresAdapter): ToolDefinition;
17
+ /**
18
+ * Spatial clustering using ST_ClusterDBSCAN or ST_ClusterKMeans
19
+ */
20
+ export declare function createGeoClusterTool(adapter: PostgresAdapter): ToolDefinition;
21
+ //# sourceMappingURL=advanced.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/postgis/advanced.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,4BAA4B,CAAC;AAapC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAoC1E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,GACvB,cAAc,CA4EhB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,eAAe,GACvB,cAAc,CAwIhB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAgM7E"}
@@ -0,0 +1,383 @@
1
+ /**
2
+ * PostgreSQL PostGIS Extension Tools - Advanced Operations
3
+ *
4
+ * Advanced spatial tools: geocode, geo_transform, geo_index_optimize, geo_cluster.
5
+ */
6
+ import { z } from "zod";
7
+ import { readOnly } from "../../../../utils/annotations.js";
8
+ import { getToolIcons } from "../../../../utils/icons.js";
9
+ import { GeocodeSchemaBase, GeocodeSchema, GeoTransformSchemaBase, GeoTransformSchema, GeoClusterSchemaBase, GeoClusterSchema, } from "../../schemas/index.js";
10
+ export function createGeocodeTool(adapter) {
11
+ return {
12
+ name: "pg_geocode",
13
+ description: "Create a point geometry from latitude/longitude coordinates. The SRID parameter sets output metadata only; input coordinates are always WGS84 lat/lng.",
14
+ group: "postgis",
15
+ inputSchema: GeocodeSchemaBase, // Base schema for MCP visibility
16
+ annotations: readOnly("Geocode"),
17
+ icons: getToolIcons("postgis", readOnly("Geocode")),
18
+ handler: async (params, _context) => {
19
+ const parsed = GeocodeSchema.parse(params ?? {});
20
+ const srid = parsed.srid ?? 4326;
21
+ const sql = `SELECT
22
+ ST_AsGeoJSON(ST_SetSRID(ST_MakePoint($1, $2), $3)) as geojson,
23
+ ST_AsText(ST_SetSRID(ST_MakePoint($1, $2), $3)) as wkt`;
24
+ const result = await adapter.executeQuery(sql, [
25
+ parsed.lng,
26
+ parsed.lat,
27
+ srid,
28
+ ]);
29
+ // Add note about SRID for non-4326 cases
30
+ const row = result.rows?.[0];
31
+ if (row === undefined) {
32
+ return {};
33
+ }
34
+ const response = { ...row };
35
+ if (srid !== 4326) {
36
+ response["note"] =
37
+ `Coordinates are WGS84 lat/lng with SRID ${String(srid)} metadata. Use pg_geo_transform to convert to target CRS.`;
38
+ }
39
+ return response;
40
+ },
41
+ };
42
+ }
43
+ /**
44
+ * Transform geometry between coordinate systems
45
+ */
46
+ export function createGeoTransformTool(adapter) {
47
+ return {
48
+ name: "pg_geo_transform",
49
+ description: "Transform geometry from one spatial reference system (SRID) to another.",
50
+ group: "postgis",
51
+ inputSchema: GeoTransformSchemaBase, // Base schema for MCP visibility
52
+ annotations: readOnly("Transform Geometry"),
53
+ icons: getToolIcons("postgis", readOnly("Transform Geometry")),
54
+ handler: async (params, _context) => {
55
+ const parsed = GeoTransformSchema.parse(params ?? {});
56
+ const schemaName = parsed.schema ?? "public";
57
+ const qualifiedTable = schemaName !== "public"
58
+ ? `"${schemaName}"."${parsed.table}"`
59
+ : `"${parsed.table}"`;
60
+ const columnName = `"${parsed.column}"`;
61
+ const whereClause = parsed.where !== undefined ? `WHERE ${parsed.where}` : "";
62
+ // Default limit of 50 to prevent large payloads, use limit: 0 for all
63
+ const effectiveLimit = parsed.limit ?? 50;
64
+ const limitClause = effectiveLimit > 0 ? `LIMIT ${String(effectiveLimit)}` : "";
65
+ // Get non-geometry columns to avoid returning raw WKB
66
+ const colQuery = `
67
+ SELECT column_name FROM information_schema.columns
68
+ WHERE table_schema = $1 AND table_name = $2
69
+ AND udt_name NOT IN ('geometry', 'geography')
70
+ ORDER BY ordinal_position
71
+ `;
72
+ const colResult = await adapter.executeQuery(colQuery, [
73
+ schemaName,
74
+ parsed.table,
75
+ ]);
76
+ const nonGeomCols = (colResult.rows ?? [])
77
+ .map((row) => `"${String(row["column_name"])}"`)
78
+ .join(", ");
79
+ // Select non-geometry columns + transformed geometry representations
80
+ const selectCols = nonGeomCols.length > 0
81
+ ? `${nonGeomCols}, ST_AsGeoJSON(ST_Transform(ST_SetSRID(${columnName}, ${String(parsed.fromSrid)}), ${String(parsed.toSrid)})) as transformed_geojson, ST_AsText(ST_Transform(ST_SetSRID(${columnName}, ${String(parsed.fromSrid)}), ${String(parsed.toSrid)})) as transformed_wkt, ${String(parsed.toSrid)} as output_srid`
82
+ : `ST_AsGeoJSON(ST_Transform(ST_SetSRID(${columnName}, ${String(parsed.fromSrid)}), ${String(parsed.toSrid)})) as transformed_geojson, ST_AsText(ST_Transform(ST_SetSRID(${columnName}, ${String(parsed.fromSrid)}), ${String(parsed.toSrid)})) as transformed_wkt, ${String(parsed.toSrid)} as output_srid`;
83
+ const sql = `SELECT ${selectCols} FROM ${qualifiedTable} ${whereClause} ${limitClause}`;
84
+ const result = await adapter.executeQuery(sql);
85
+ // Build response with truncation indicators if default limit was applied
86
+ const response = {
87
+ results: result.rows,
88
+ count: result.rows?.length ?? 0,
89
+ fromSrid: parsed.fromSrid,
90
+ toSrid: parsed.toSrid,
91
+ };
92
+ // When using default limit, check if more rows exist
93
+ if (parsed.limit === undefined && effectiveLimit > 0) {
94
+ const countSql = `SELECT COUNT(*) as cnt FROM ${qualifiedTable} ${whereClause}`;
95
+ const countResult = await adapter.executeQuery(countSql);
96
+ const totalCount = Number(countResult.rows?.[0]?.["cnt"] ?? 0);
97
+ if (totalCount > effectiveLimit) {
98
+ response["truncated"] = true;
99
+ response["totalCount"] = totalCount;
100
+ response["limit"] = effectiveLimit;
101
+ }
102
+ }
103
+ return response;
104
+ },
105
+ };
106
+ }
107
+ /**
108
+ * Analyze and optimize spatial indexes
109
+ */
110
+ export function createGeoIndexOptimizeTool(adapter) {
111
+ return {
112
+ name: "pg_geo_index_optimize",
113
+ description: "Analyze spatial indexes and provide optimization recommendations.",
114
+ group: "postgis",
115
+ inputSchema: z.object({
116
+ table: z
117
+ .string()
118
+ .optional()
119
+ .describe("Specific table to analyze (or all spatial tables)"),
120
+ schema: z.string().optional().describe("Schema name"),
121
+ }),
122
+ annotations: readOnly("Geo Index Optimize"),
123
+ icons: getToolIcons("postgis", readOnly("Geo Index Optimize")),
124
+ handler: async (params, _context) => {
125
+ const parsed = params;
126
+ const schemaName = parsed.schema ?? "public";
127
+ const indexQuery = `
128
+ SELECT
129
+ c.relname as table_name,
130
+ i.relname as index_name,
131
+ a.attname as column_name,
132
+ pg_size_pretty(pg_relation_size(i.oid)) as index_size,
133
+ pg_relation_size(i.oid) as index_size_bytes,
134
+ idx_scan as index_scans,
135
+ idx_tup_read as tuples_read,
136
+ idx_tup_fetch as tuples_fetched
137
+ FROM pg_index x
138
+ JOIN pg_class c ON c.oid = x.indrelid
139
+ JOIN pg_class i ON i.oid = x.indexrelid
140
+ JOIN pg_attribute a ON a.attrelid = c.oid AND a.attnum = ANY(x.indkey)
141
+ JOIN pg_namespace n ON n.oid = c.relnamespace
142
+ JOIN pg_type t ON t.oid = a.atttypid
143
+ LEFT JOIN pg_stat_user_indexes s ON s.indexrelid = i.oid
144
+ WHERE n.nspname = $1
145
+ AND (pg_get_indexdef(i.oid) LIKE '%gist%' OR pg_get_indexdef(i.oid) LIKE '%spgist%')
146
+ AND t.typname IN ('geometry', 'geography')
147
+ ${parsed.table !== undefined ? `AND c.relname = '${parsed.table}'` : ""}
148
+ ORDER BY index_size_bytes DESC
149
+ `;
150
+ const [indexes, tableStats] = await Promise.all([
151
+ adapter.executeQuery(indexQuery, [schemaName]),
152
+ adapter.executeQuery(`
153
+ SELECT
154
+ c.relname as table_name,
155
+ n_live_tup as row_count,
156
+ pg_size_pretty(pg_table_size(c.oid)) as table_size
157
+ FROM pg_stat_user_tables t
158
+ JOIN pg_class c ON c.relname = t.relname
159
+ JOIN pg_namespace n ON n.oid = c.relnamespace
160
+ WHERE n.nspname = $1
161
+ ${parsed.table !== undefined ? `AND c.relname = '${parsed.table}'` : ""}
162
+ AND EXISTS (
163
+ SELECT 1 FROM information_schema.columns ic
164
+ WHERE ic.table_schema = n.nspname
165
+ AND ic.table_name = c.relname
166
+ AND ic.udt_name IN ('geometry', 'geography')
167
+ )
168
+ `, [schemaName]),
169
+ ]);
170
+ const recommendations = [];
171
+ for (const idx of indexes.rows ?? []) {
172
+ const scans = Number(idx["index_scans"] ?? 0);
173
+ const sizeBytes = Number(idx["index_size_bytes"] ?? 0);
174
+ if (scans === 0 && sizeBytes > 1024 * 1024) {
175
+ recommendations.push(`Index "${String(idx["index_name"])}" on ${String(idx["table_name"])} is unused but takes ${String(idx["index_size"])}. Consider dropping it.`);
176
+ }
177
+ if (scans > 0 && sizeBytes > 100 * 1024 * 1024) {
178
+ recommendations.push(`Large spatial index "${String(idx["index_name"])}" (${String(idx["index_size"])}). Consider partitioning the table for better performance.`);
179
+ }
180
+ }
181
+ for (const table of tableStats.rows ?? []) {
182
+ const rowCount = Number(table["row_count"] ?? 0);
183
+ const hasIndex = (indexes.rows ?? []).some((idx) => idx["table_name"] === table["table_name"]);
184
+ if (rowCount > 10000 && !hasIndex) {
185
+ recommendations.push(`Table "${String(table["table_name"])}" has ${String(rowCount)} rows but no spatial index. Consider adding a GiST index.`);
186
+ }
187
+ }
188
+ // Warn if table filter specified but no results found
189
+ if (parsed.table !== undefined &&
190
+ (indexes.rows?.length ?? 0) === 0 &&
191
+ (tableStats.rows?.length ?? 0) === 0) {
192
+ return {
193
+ warning: `Table "${parsed.table}" not found in schema "${schemaName}" or has no spatial columns/indexes.`,
194
+ table: parsed.table,
195
+ schema: schemaName,
196
+ spatialIndexes: [],
197
+ tableStats: [],
198
+ recommendations: [
199
+ `Verify table "${parsed.table}" exists and has geometry/geography columns.`,
200
+ ],
201
+ };
202
+ }
203
+ return {
204
+ spatialIndexes: indexes.rows,
205
+ tableStats: tableStats.rows,
206
+ recommendations: recommendations.length > 0
207
+ ? recommendations
208
+ : (indexes.rows?.length ?? 0) === 0
209
+ ? [
210
+ "No spatial indexes found in this schema. Consider adding GiST indexes for spatial columns.",
211
+ ]
212
+ : ["All spatial indexes appear optimized"],
213
+ tips: [
214
+ "Use GiST indexes for general spatial queries",
215
+ "Consider SP-GiST for point-only data",
216
+ "CLUSTER table by spatial index for range queries",
217
+ "Use BRIN indexes for very large, sorted spatial data",
218
+ ],
219
+ };
220
+ },
221
+ };
222
+ }
223
+ /**
224
+ * Spatial clustering using ST_ClusterDBSCAN or ST_ClusterKMeans
225
+ */
226
+ export function createGeoClusterTool(adapter) {
227
+ return {
228
+ name: "pg_geo_cluster",
229
+ description: "Perform spatial clustering using DBSCAN or K-Means. DBSCAN defaults: eps=100m, minPoints=3. K-Means default: numClusters=5 (provide explicit value for best results).",
230
+ group: "postgis",
231
+ inputSchema: GeoClusterSchemaBase, // Base schema for MCP visibility
232
+ annotations: readOnly("Geo Cluster"),
233
+ icons: getToolIcons("postgis", readOnly("Geo Cluster")),
234
+ handler: async (params, _context) => {
235
+ const parsed = GeoClusterSchema.parse(params ?? {});
236
+ const method = parsed.method ?? "dbscan";
237
+ const schemaName = parsed.schema ?? "public";
238
+ const qualifiedTable = schemaName !== "public"
239
+ ? `"${schemaName}"."${parsed.table}"`
240
+ : `"${parsed.table}"`;
241
+ const whereClause = parsed.where !== undefined ? `WHERE ${parsed.where}` : "";
242
+ const limitClause = parsed.limit !== undefined && parsed.limit > 0
243
+ ? `LIMIT ${String(parsed.limit)}`
244
+ : "";
245
+ // Track warning if K > N
246
+ let warning;
247
+ // For K-Means, validate and adjust numClusters
248
+ let effectiveNumClusters = parsed.numClusters ?? 5;
249
+ let rowCount = 0;
250
+ if (method === "kmeans") {
251
+ // Validate numClusters > 0
252
+ if (effectiveNumClusters <= 0) {
253
+ return {
254
+ error: `numClusters must be greater than 0 (received: ${String(effectiveNumClusters)}).`,
255
+ method,
256
+ table: parsed.table,
257
+ numClusters: effectiveNumClusters,
258
+ suggestion: "Provide a positive integer for numClusters (e.g., numClusters: 3)",
259
+ };
260
+ }
261
+ const countResult = await adapter.executeQuery(`SELECT COUNT(*) as cnt FROM ${qualifiedTable} ${whereClause}`);
262
+ rowCount = Number(countResult.rows?.[0]?.["cnt"] ?? 0);
263
+ if (rowCount === 0) {
264
+ return {
265
+ error: `No rows found in table ${parsed.table}${whereClause !== "" ? " matching filter" : ""}. K-Means requires at least 1 row.`,
266
+ method,
267
+ table: parsed.table,
268
+ rowCount: 0,
269
+ };
270
+ }
271
+ // Clamp K to row count and warn if exceeded
272
+ if (effectiveNumClusters > rowCount) {
273
+ warning = `Requested ${String(parsed.numClusters)} clusters but only ${String(rowCount)} rows available. Using ${String(rowCount)} clusters instead.`;
274
+ effectiveNumClusters = rowCount;
275
+ }
276
+ }
277
+ let clusterFunction;
278
+ if (method === "kmeans") {
279
+ clusterFunction = `ST_ClusterKMeans("${parsed.column}", ${String(effectiveNumClusters)}) OVER ()`;
280
+ }
281
+ else {
282
+ const eps = parsed.eps ?? 100;
283
+ const minPoints = parsed.minPoints ?? 3;
284
+ clusterFunction = `ST_ClusterDBSCAN("${parsed.column}", ${String(eps)}, ${String(minPoints)}) OVER ()`;
285
+ }
286
+ const sql = `
287
+ WITH clustered AS (
288
+ SELECT
289
+ *,
290
+ ${clusterFunction} as cluster_id
291
+ FROM ${qualifiedTable}
292
+ ${whereClause}
293
+ )
294
+ SELECT
295
+ cluster_id,
296
+ COUNT(*) as point_count,
297
+ ST_AsGeoJSON(ST_Centroid(ST_Collect("${parsed.column}"))) as centroid,
298
+ ST_AsGeoJSON(ST_ConvexHull(ST_Collect("${parsed.column}"))) as hull
299
+ FROM clustered
300
+ WHERE cluster_id IS NOT NULL
301
+ GROUP BY cluster_id
302
+ ORDER BY point_count DESC
303
+ ${limitClause}
304
+ `;
305
+ const [clustersResult, summaryResult] = await Promise.all([
306
+ adapter.executeQuery(sql),
307
+ adapter.executeQuery(`
308
+ WITH clustered AS (
309
+ SELECT ${clusterFunction} as cluster_id
310
+ FROM ${qualifiedTable}
311
+ ${whereClause}
312
+ )
313
+ SELECT
314
+ COUNT(DISTINCT cluster_id) as num_clusters,
315
+ COUNT(*) FILTER (WHERE cluster_id IS NULL) as noise_points,
316
+ COUNT(*) as total_points
317
+ FROM clustered
318
+ `),
319
+ ]);
320
+ // Normalize cluster point_count to numbers
321
+ const normalizedClusters = (clustersResult.rows ?? []).map((row) => ({
322
+ ...row,
323
+ point_count: Number(row["point_count"]),
324
+ }));
325
+ // Normalize summary values to numbers for consistency
326
+ const rawSummary = summaryResult.rows?.[0] ?? {};
327
+ const normalizedSummary = {
328
+ num_clusters: Number(rawSummary["num_clusters"] ?? 0),
329
+ noise_points: Number(rawSummary["noise_points"] ?? 0),
330
+ total_points: Number(rawSummary["total_points"] ?? 0),
331
+ };
332
+ // Build response
333
+ const response = {
334
+ method,
335
+ parameters: method === "kmeans"
336
+ ? { numClusters: effectiveNumClusters }
337
+ : { eps: parsed.eps ?? 100, minPoints: parsed.minPoints ?? 3 },
338
+ summary: normalizedSummary,
339
+ clusters: normalizedClusters,
340
+ };
341
+ // Add warning if K was clamped
342
+ if (warning !== undefined) {
343
+ response["warning"] = warning;
344
+ response["requestedClusters"] = parsed.numClusters;
345
+ response["actualClusters"] = effectiveNumClusters;
346
+ }
347
+ // Add contextual hints based on method and results
348
+ const numClusters = normalizedSummary.num_clusters;
349
+ const noisePoints = normalizedSummary.noise_points;
350
+ const totalPoints = normalizedSummary.total_points;
351
+ if (method === "dbscan") {
352
+ const eps = parsed.eps ?? 100;
353
+ const minPoints = parsed.minPoints ?? 3;
354
+ // Provide hints about DBSCAN parameter trade-offs
355
+ const hints = [];
356
+ if (numClusters === 1 && totalPoints > 1) {
357
+ hints.push(`All ${String(totalPoints)} points formed a single cluster. Consider decreasing eps (currently ${String(eps)}m) to create more distinct clusters.`);
358
+ }
359
+ if (noisePoints > 0 && noisePoints > totalPoints * 0.5) {
360
+ hints.push(`${String(noisePoints)} of ${String(totalPoints)} points (${String(Math.round((noisePoints / totalPoints) * 100))}%) are noise. Consider increasing eps or decreasing minPoints (currently ${String(minPoints)}).`);
361
+ }
362
+ if (numClusters === 0 && totalPoints > 0) {
363
+ hints.push(`No clusters formed - all points are noise. Try increasing eps (currently ${String(eps)}m) or decreasing minPoints (currently ${String(minPoints)}).`);
364
+ }
365
+ response["notes"] =
366
+ "Noise points (cluster_id = NULL) are points not belonging to any cluster";
367
+ if (hints.length > 0) {
368
+ response["hints"] = hints;
369
+ }
370
+ response["parameterGuide"] = {
371
+ eps: `Distance threshold in meters. Larger values group more distant points together.`,
372
+ minPoints: `Minimum points required to form a cluster. Higher values create fewer, denser clusters.`,
373
+ };
374
+ }
375
+ else {
376
+ response["notes"] =
377
+ "K-Means will always assign all points to a cluster";
378
+ }
379
+ return response;
380
+ },
381
+ };
382
+ }
383
+ //# sourceMappingURL=advanced.js.map