@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,232 @@
1
+ /**
2
+ * PostGIS Status Resource
3
+ *
4
+ * Provides PostGIS extension status, spatial columns, and index information.
5
+ */
6
+ import { LOW_PRIORITY } from "../../../utils/resourceAnnotations.js";
7
+ /** Safely convert unknown value to string */
8
+ function toStr(value) {
9
+ return typeof value === "string" ? value : "";
10
+ }
11
+ export function createPostgisResource(adapter) {
12
+ return {
13
+ uri: "postgres://postgis",
14
+ name: "PostGIS Status",
15
+ description: "PostGIS extension status, spatial columns, index usage, and optimization recommendations",
16
+ mimeType: "application/json",
17
+ annotations: LOW_PRIORITY,
18
+ handler: async () => {
19
+ const result = {
20
+ extensionInstalled: false,
21
+ extensionVersion: null,
22
+ fullVersion: null,
23
+ spatialColumns: [],
24
+ columnCount: 0,
25
+ geometryCount: 0,
26
+ geographyCount: 0,
27
+ indexes: [],
28
+ indexCount: 0,
29
+ unindexedColumns: [],
30
+ sridDistribution: [],
31
+ recommendations: [],
32
+ };
33
+ // Check if PostGIS is installed (outside try-catch for correct error messaging)
34
+ const extCheck = await adapter.executeQuery(`SELECT extversion FROM pg_extension WHERE extname = 'postgis'`);
35
+ if (!extCheck.rows || extCheck.rows.length === 0) {
36
+ result.recommendations.push("PostGIS extension is not installed. Use pg_postgis_create_extension to enable geospatial operations.");
37
+ return JSON.stringify(result, null, 2);
38
+ }
39
+ result.extensionInstalled = true;
40
+ const extVersion = extCheck.rows[0]?.["extversion"];
41
+ result.extensionVersion =
42
+ typeof extVersion === "string" ? extVersion : null;
43
+ try {
44
+ // Get full PostGIS version info
45
+ try {
46
+ const versionResult = await adapter.executeQuery(`SELECT PostGIS_Full_Version() as version`);
47
+ const fullVersion = versionResult.rows?.[0]?.["version"];
48
+ result.fullVersion =
49
+ typeof fullVersion === "string" ? fullVersion : null;
50
+ }
51
+ catch {
52
+ // Function might not exist in older versions
53
+ }
54
+ // Get spatial columns from geometry_columns view
55
+ const columnsResult = await adapter.executeQuery(`SELECT
56
+ gc.f_table_schema,
57
+ gc.f_table_name,
58
+ gc.f_geometry_column,
59
+ gc.type,
60
+ gc.srid,
61
+ gc.coord_dimension,
62
+ COALESCE(s.n_live_tup, 0)::int as row_count
63
+ FROM geometry_columns gc
64
+ LEFT JOIN pg_stat_user_tables s
65
+ ON s.schemaname = gc.f_table_schema
66
+ AND s.relname = gc.f_table_name
67
+ ORDER BY gc.f_table_schema, gc.f_table_name`);
68
+ if (columnsResult.rows) {
69
+ for (const row of columnsResult.rows) {
70
+ result.spatialColumns.push({
71
+ schema: toStr(row["f_table_schema"]),
72
+ table: toStr(row["f_table_name"]),
73
+ column: toStr(row["f_geometry_column"]),
74
+ type: toStr(row["type"]),
75
+ srid: Number(row["srid"] ?? 0),
76
+ dimensions: Number(row["coord_dimension"] ?? 2),
77
+ rowCount: Number(row["row_count"] ?? 0),
78
+ });
79
+ }
80
+ }
81
+ // Also check geography columns
82
+ try {
83
+ const geoColumnsResult = await adapter.executeQuery(`SELECT
84
+ gc.f_table_schema,
85
+ gc.f_table_name,
86
+ gc.f_geography_column,
87
+ gc.type,
88
+ gc.srid,
89
+ gc.coord_dimension,
90
+ COALESCE(s.n_live_tup, 0)::int as row_count
91
+ FROM geography_columns gc
92
+ LEFT JOIN pg_stat_user_tables s
93
+ ON s.schemaname = gc.f_table_schema
94
+ AND s.relname = gc.f_table_name
95
+ ORDER BY gc.f_table_schema, gc.f_table_name`);
96
+ if (geoColumnsResult.rows) {
97
+ for (const row of geoColumnsResult.rows) {
98
+ const geoType = toStr(row["type"]);
99
+ result.spatialColumns.push({
100
+ schema: toStr(row["f_table_schema"]),
101
+ table: toStr(row["f_table_name"]),
102
+ column: toStr(row["f_geography_column"]),
103
+ type: `geography(${geoType})`,
104
+ srid: Number(row["srid"] ?? 4326),
105
+ dimensions: Number(row["coord_dimension"] ?? 2),
106
+ rowCount: Number(row["row_count"] ?? 0),
107
+ });
108
+ result.geographyCount++;
109
+ }
110
+ }
111
+ }
112
+ catch {
113
+ // geography_columns might not exist
114
+ }
115
+ result.columnCount = result.spatialColumns.length;
116
+ result.geometryCount = result.columnCount - result.geographyCount;
117
+ // Get spatial indexes (GiST on geometry/geography columns)
118
+ const indexResult = await adapter.executeQuery(`SELECT
119
+ n.nspname as schema_name,
120
+ t.relname as table_name,
121
+ i.relname as index_name,
122
+ a.attname as column_name,
123
+ am.amname as index_type,
124
+ pg_size_pretty(pg_relation_size(i.oid)) as index_size
125
+ FROM pg_index idx
126
+ JOIN pg_class i ON idx.indexrelid = i.oid
127
+ JOIN pg_class t ON idx.indrelid = t.oid
128
+ JOIN pg_namespace n ON t.relnamespace = n.oid
129
+ JOIN pg_am am ON i.relam = am.oid
130
+ JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(idx.indkey)
131
+ JOIN pg_type ty ON a.atttypid = ty.oid
132
+ WHERE am.amname IN ('gist', 'spgist', 'brin')
133
+ AND ty.typname IN ('geometry', 'geography')
134
+ AND n.nspname NOT IN ('pg_catalog', 'information_schema')
135
+ ORDER BY n.nspname, t.relname, i.relname`);
136
+ if (indexResult.rows) {
137
+ for (const row of indexResult.rows) {
138
+ result.indexes.push({
139
+ schema: toStr(row["schema_name"]),
140
+ table: toStr(row["table_name"]),
141
+ indexName: toStr(row["index_name"]),
142
+ column: toStr(row["column_name"]),
143
+ indexType: toStr(row["index_type"]),
144
+ size: toStr(row["index_size"]) || "0 bytes",
145
+ });
146
+ }
147
+ }
148
+ result.indexCount = result.indexes.length;
149
+ // Find unindexed spatial columns and generate actionable SQL
150
+ // Skip small tables where GiST indexes provide minimal benefit
151
+ const SMALL_TABLE_THRESHOLD = 1000;
152
+ const indexedColumns = new Set(result.indexes.map((i) => `${i.schema}.${i.table}.${i.column}`));
153
+ // Get existing index names to avoid conflicts
154
+ const existingIndexResult = await adapter.executeQuery(`
155
+ SELECT indexname FROM pg_indexes WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
156
+ `);
157
+ const existingIndexNames = new Set((existingIndexResult.rows ?? []).map((r) => r["indexname"]));
158
+ const unindexedCols = result.spatialColumns.filter((c) => !indexedColumns.has(`${c.schema}.${c.table}.${c.column}`) &&
159
+ c.rowCount >= SMALL_TABLE_THRESHOLD);
160
+ const smallTableCount = result.spatialColumns.filter((c) => !indexedColumns.has(`${c.schema}.${c.table}.${c.column}`) &&
161
+ c.rowCount < SMALL_TABLE_THRESHOLD).length;
162
+ result.unindexedColumns = unindexedCols.map((c) => {
163
+ // Generate unique index name
164
+ let gistName = `idx_${c.table}_${c.column}_gist`;
165
+ // Add suffix if name already exists
166
+ let suffix = 1;
167
+ while (existingIndexNames.has(gistName)) {
168
+ gistName = `idx_${c.table}_${c.column}_gist_${String(suffix)}`;
169
+ suffix++;
170
+ }
171
+ return {
172
+ column: `${c.schema}.${c.table}.${c.column}`,
173
+ suggestedGistSql: `CREATE INDEX IF NOT EXISTS "${gistName}" ON "${c.schema}"."${c.table}" USING GIST ("${c.column}");`,
174
+ };
175
+ });
176
+ // SRID distribution
177
+ const sridCounts = new Map();
178
+ for (const col of result.spatialColumns) {
179
+ sridCounts.set(col.srid, (sridCounts.get(col.srid) ?? 0) + 1);
180
+ }
181
+ result.sridDistribution = Array.from(sridCounts.entries())
182
+ .map(([srid, count]) => ({ srid, count }))
183
+ .sort((a, b) => b.count - a.count);
184
+ // Generate recommendations
185
+ if (result.columnCount === 0) {
186
+ result.recommendations.push("No spatial columns found. Use pg_geometry_column to add geometry/geography columns.");
187
+ }
188
+ if (result.unindexedColumns.length > 0) {
189
+ const columnNames = result.unindexedColumns
190
+ .slice(0, 3)
191
+ .map((c) => c.column)
192
+ .join(", ");
193
+ result.recommendations.push(`${String(result.unindexedColumns.length)} spatial column(s) on larger tables without GiST indexes: ${columnNames}${result.unindexedColumns.length > 3 ? "..." : ""}. See unindexedColumns for ready-to-use CREATE INDEX SQL.`);
194
+ }
195
+ // Note about small tables that were skipped
196
+ if (smallTableCount > 0 && result.unindexedColumns.length === 0) {
197
+ result.recommendations.push(`${String(smallTableCount)} unindexed spatial column(s) on small tables (<${String(SMALL_TABLE_THRESHOLD)} rows). Indexes optional for small tables.`);
198
+ }
199
+ for (const col of result.spatialColumns) {
200
+ const isUnindexed = result.unindexedColumns.some((u) => u.column === `${col.schema}.${col.table}.${col.column}`);
201
+ if (col.rowCount > 10000 && isUnindexed) {
202
+ result.recommendations.push(`Large unindexed spatial column: ${col.table}.${col.column} (${String(col.rowCount)} rows). GiST index strongly recommended.`);
203
+ }
204
+ }
205
+ if (result.geometryCount > 0 && result.geographyCount === 0) {
206
+ result.recommendations.push("Only geometry columns found. Consider geography type for global distance calculations over large areas.");
207
+ }
208
+ // Add type guidance
209
+ result.typeGuidance = {
210
+ geometry: "Geometry type: Planar (flat-earth) calculations. Faster computations. Best for: local areas, projected data, city/region level. Uses cartesian math.",
211
+ geography: "Geography type: Spherical (round-earth) calculations. Accurate for global distances. Best for: global datasets, long-distance queries, GPS coordinates. Uses geodetic math.",
212
+ recommendation: result.geographyCount > 0 && result.geometryCount > 0
213
+ ? "Using both types appropriately. Geometry for local operations, geography for global calculations."
214
+ : result.geographyCount > 0
215
+ ? "Using geography type - correct for global distance calculations."
216
+ : "Using geometry only. If calculating distances across continents or between far-apart cities, geography type provides more accurate results.",
217
+ };
218
+ // Check for SRID 0 (unknown)
219
+ const unknownSrid = result.spatialColumns.filter((c) => c.srid === 0);
220
+ if (unknownSrid.length > 0) {
221
+ result.recommendations.push(`${String(unknownSrid.length)} columns with SRID 0 (unknown). Set proper SRID for accurate calculations.`);
222
+ }
223
+ }
224
+ catch {
225
+ // Extension is installed but data queries failed
226
+ result.recommendations.push("Error querying PostGIS data. Check permissions on geometry_columns view.");
227
+ }
228
+ return JSON.stringify(result, null, 2);
229
+ },
230
+ };
231
+ }
232
+ //# sourceMappingURL=postgis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgis.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/postgis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Replication Resource
3
+ *
4
+ * Primary/replica status, replication slots, WAL status, and lag monitoring.
5
+ */
6
+ import type { PostgresAdapter } from "../PostgresAdapter.js";
7
+ import type { ResourceDefinition } from "../../../types/index.js";
8
+ export declare function createReplicationResource(adapter: PostgresAdapter): ResourceDefinition;
9
+ //# sourceMappingURL=replication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replication.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/replication.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAYjC,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,GACvB,kBAAkB,CA4HpB"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Replication Resource
3
+ *
4
+ * Primary/replica status, replication slots, WAL status, and lag monitoring.
5
+ */
6
+ import { LOW_PRIORITY } from "../../../utils/resourceAnnotations.js";
7
+ export function createReplicationResource(adapter) {
8
+ return {
9
+ uri: "postgres://replication",
10
+ name: "Replication Status",
11
+ description: "Primary/replica status, replication slots, WAL status, and lag monitoring",
12
+ mimeType: "application/json",
13
+ annotations: LOW_PRIORITY,
14
+ handler: async (_uri, _context) => {
15
+ // Check if we're on primary or replica
16
+ const roleResult = await adapter.executeQuery("SELECT pg_is_in_recovery() as is_replica");
17
+ const isReplica = roleResult.rows?.[0]?.["is_replica"] === true;
18
+ // Determine if this is a standalone server (not a replica and no replicas connected)
19
+ let role;
20
+ let statusMessage;
21
+ let replicationSlots = [];
22
+ let replicationStats = [];
23
+ if (isReplica) {
24
+ role = "replica";
25
+ statusMessage =
26
+ "This server is a replica receiving data from a primary server.";
27
+ }
28
+ else {
29
+ // Primary server - check for replication activity
30
+ const slotsResult = await adapter.executeQuery(`
31
+ SELECT
32
+ slot_name,
33
+ slot_type,
34
+ database,
35
+ active,
36
+ restart_lsn,
37
+ confirmed_flush_lsn,
38
+ wal_status,
39
+ safe_wal_size
40
+ FROM pg_replication_slots
41
+ `);
42
+ replicationSlots = slotsResult.rows ?? [];
43
+ // Get replication statistics
44
+ const statsResult = await adapter.executeQuery(`
45
+ SELECT
46
+ client_addr,
47
+ application_name,
48
+ state,
49
+ sync_state,
50
+ replay_lsn,
51
+ write_lag,
52
+ flush_lag,
53
+ replay_lag
54
+ FROM pg_stat_replication
55
+ `);
56
+ replicationStats = statsResult.rows ?? [];
57
+ // Determine if standalone (not a replica and no replication activity)
58
+ const hasReplicationSlots = replicationSlots.length > 0;
59
+ const hasConnectedReplicas = replicationStats.length > 0;
60
+ if (hasReplicationSlots || hasConnectedReplicas) {
61
+ role = "primary";
62
+ const activeSlots = replicationSlots.filter((s) => s["active"] === true).length;
63
+ if (hasConnectedReplicas) {
64
+ statusMessage = `Primary server with ${replicationStats.length.toString()} connected replica(s).`;
65
+ }
66
+ else if (activeSlots === 0 && hasReplicationSlots) {
67
+ statusMessage = `Primary server with ${replicationSlots.length.toString()} replication slot(s) but no connected replicas. Check replica connectivity.`;
68
+ }
69
+ else {
70
+ statusMessage = "Primary server configured for replication.";
71
+ }
72
+ }
73
+ else {
74
+ role = "standalone";
75
+ statusMessage =
76
+ "Standalone PostgreSQL server with no replication configured. This is expected if you do not require high availability or read replicas.";
77
+ }
78
+ }
79
+ const replicationInfo = {
80
+ role,
81
+ replicationSlots,
82
+ replicationStats,
83
+ walStatus: {},
84
+ statusMessage,
85
+ };
86
+ if (isReplica) {
87
+ // Replica server - get replication delay
88
+ const lagResult = await adapter.executeQuery(`
89
+ SELECT
90
+ now() - pg_last_xact_replay_timestamp() AS replication_delay
91
+ `);
92
+ const delay = lagResult.rows?.[0]?.["replication_delay"];
93
+ // Handle interval type from PostgreSQL - convert to string representation
94
+ if (delay != null && typeof delay === "object") {
95
+ replicationInfo.replicationDelay = JSON.stringify(delay);
96
+ }
97
+ else if (typeof delay === "string") {
98
+ replicationInfo.replicationDelay = delay;
99
+ }
100
+ else if (delay != null) {
101
+ replicationInfo.replicationDelay = JSON.stringify(delay);
102
+ }
103
+ else {
104
+ replicationInfo.replicationDelay = "Unknown";
105
+ }
106
+ }
107
+ // Get WAL status (works on both primary and replica)
108
+ try {
109
+ const walResult = await adapter.executeQuery(`
110
+ SELECT
111
+ pg_current_wal_lsn() as current_wal_lsn,
112
+ pg_walfile_name(pg_current_wal_lsn()) as current_wal_file
113
+ `);
114
+ replicationInfo.walStatus = walResult.rows?.[0] ?? {};
115
+ }
116
+ catch {
117
+ // pg_current_wal_lsn() might fail on replica
118
+ replicationInfo.walStatus = {
119
+ note: "WAL position unavailable (replica mode)",
120
+ };
121
+ }
122
+ return replicationInfo;
123
+ },
124
+ };
125
+ }
126
+ //# sourceMappingURL=replication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replication.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/replication.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Schema Resource
3
+ *
4
+ * Full database schema including tables, views, indexes, and constraints.
5
+ * Enhanced with statsStale detection based on modification percentage.
6
+ */
7
+ import type { PostgresAdapter } from "../PostgresAdapter.js";
8
+ import type { ResourceDefinition } from "../../../types/index.js";
9
+ export declare function createSchemaResource(adapter: PostgresAdapter): ResourceDefinition;
10
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,yBAAyB,CAAC;AAyBjC,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,GACvB,kBAAkB,CA4DpB"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Schema Resource
3
+ *
4
+ * Full database schema including tables, views, indexes, and constraints.
5
+ * Enhanced with statsStale detection based on modification percentage.
6
+ */
7
+ import { HIGH_PRIORITY } from "../../../utils/resourceAnnotations.js";
8
+ /** Safely convert unknown value to string */
9
+ function toStr(value) {
10
+ if (typeof value === "string")
11
+ return value;
12
+ if (value === null || value === undefined)
13
+ return "";
14
+ if (typeof value === "number")
15
+ return value.toString();
16
+ return "";
17
+ }
18
+ /** Safely convert unknown value to number */
19
+ function toNum(value) {
20
+ if (typeof value === "number")
21
+ return value;
22
+ if (typeof value === "string")
23
+ return Number(value) || 0;
24
+ return 0;
25
+ }
26
+ export function createSchemaResource(adapter) {
27
+ return {
28
+ uri: "postgres://schema",
29
+ name: "Database Schema",
30
+ description: "Comprehensive database schema: tables with columns/constraints/indexes, views, and statsStale detection. Use postgres://tables for a lightweight table listing.",
31
+ mimeType: "application/json",
32
+ annotations: HIGH_PRIORITY,
33
+ handler: async (_uri, _context) => {
34
+ const schema = await adapter.getSchema();
35
+ // Get modification statistics to determine statsStale based on >10% modified
36
+ const statsResult = await adapter.executeQuery(`
37
+ SELECT schemaname, relname,
38
+ COALESCE(n_mod_since_analyze, 0) as n_mod_since_analyze,
39
+ COALESCE(n_live_tup, 0) as n_live_tup
40
+ FROM pg_stat_user_tables
41
+ `);
42
+ const statsMap = new Map();
43
+ for (const row of statsResult.rows ?? []) {
44
+ const schemaname = toStr(row["schemaname"]);
45
+ const relname = toStr(row["relname"]);
46
+ const key = `${schemaname}.${relname}`;
47
+ statsMap.set(key, {
48
+ schemaname,
49
+ relname,
50
+ n_mod_since_analyze: toNum(row["n_mod_since_analyze"]),
51
+ n_live_tup: toNum(row["n_live_tup"]),
52
+ });
53
+ }
54
+ // Enhance tables with statsStale based on modification percentage
55
+ const enhancedTables = (schema.tables ?? []).map((table) => {
56
+ const key = `${table.schema ?? "public"}.${table.name}`;
57
+ const stats = statsMap.get(key);
58
+ // statsStale is true if:
59
+ // 1. Already marked stale (reltuples = -1)
60
+ // 2. OR modification percentage > 10%
61
+ let statsStale = table.statsStale === true;
62
+ if (stats && stats.n_live_tup > 0) {
63
+ const pctModified = (stats.n_mod_since_analyze / stats.n_live_tup) * 100;
64
+ if (pctModified > 10) {
65
+ statsStale = true;
66
+ }
67
+ }
68
+ return {
69
+ ...table,
70
+ statsStale,
71
+ };
72
+ });
73
+ return {
74
+ ...schema,
75
+ tables: enhancedTables,
76
+ };
77
+ },
78
+ };
79
+ }
80
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Settings Resource
3
+ *
4
+ * Current PostgreSQL configuration settings with production defaults analysis.
5
+ */
6
+ import type { PostgresAdapter } from "../PostgresAdapter.js";
7
+ import type { ResourceDefinition } from "../../../types/index.js";
8
+ export declare function createSettingsResource(adapter: PostgresAdapter): ResourceDefinition;
9
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/settings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAYjC,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,GACvB,kBAAkB,CAmNpB"}