@neverinfamous/postgres-mcp 1.3.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (548) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +244 -129
  3. package/dist/__tests__/benchmarks/codemode.bench.d.ts +10 -0
  4. package/dist/__tests__/benchmarks/codemode.bench.d.ts.map +1 -0
  5. package/dist/__tests__/benchmarks/codemode.bench.js +159 -0
  6. package/dist/__tests__/benchmarks/codemode.bench.js.map +1 -0
  7. package/dist/__tests__/benchmarks/connection-pool.bench.d.ts +10 -0
  8. package/dist/__tests__/benchmarks/connection-pool.bench.d.ts.map +1 -0
  9. package/dist/__tests__/benchmarks/connection-pool.bench.js +123 -0
  10. package/dist/__tests__/benchmarks/connection-pool.bench.js.map +1 -0
  11. package/dist/__tests__/benchmarks/handler-dispatch.bench.d.ts +11 -0
  12. package/dist/__tests__/benchmarks/handler-dispatch.bench.d.ts.map +1 -0
  13. package/dist/__tests__/benchmarks/handler-dispatch.bench.js +199 -0
  14. package/dist/__tests__/benchmarks/handler-dispatch.bench.js.map +1 -0
  15. package/dist/__tests__/benchmarks/logger-sanitization.bench.d.ts +15 -0
  16. package/dist/__tests__/benchmarks/logger-sanitization.bench.d.ts.map +1 -0
  17. package/dist/__tests__/benchmarks/logger-sanitization.bench.js +155 -0
  18. package/dist/__tests__/benchmarks/logger-sanitization.bench.js.map +1 -0
  19. package/dist/__tests__/benchmarks/resource-prompts.bench.d.ts +10 -0
  20. package/dist/__tests__/benchmarks/resource-prompts.bench.d.ts.map +1 -0
  21. package/dist/__tests__/benchmarks/resource-prompts.bench.js +181 -0
  22. package/dist/__tests__/benchmarks/resource-prompts.bench.js.map +1 -0
  23. package/dist/__tests__/benchmarks/schema-parsing.bench.d.ts +11 -0
  24. package/dist/__tests__/benchmarks/schema-parsing.bench.d.ts.map +1 -0
  25. package/dist/__tests__/benchmarks/schema-parsing.bench.js +209 -0
  26. package/dist/__tests__/benchmarks/schema-parsing.bench.js.map +1 -0
  27. package/dist/__tests__/benchmarks/tool-filtering.bench.d.ts +9 -0
  28. package/dist/__tests__/benchmarks/tool-filtering.bench.d.ts.map +1 -0
  29. package/dist/__tests__/benchmarks/tool-filtering.bench.js +83 -0
  30. package/dist/__tests__/benchmarks/tool-filtering.bench.js.map +1 -0
  31. package/dist/__tests__/benchmarks/transport-auth.bench.d.ts +10 -0
  32. package/dist/__tests__/benchmarks/transport-auth.bench.d.ts.map +1 -0
  33. package/dist/__tests__/benchmarks/transport-auth.bench.js +128 -0
  34. package/dist/__tests__/benchmarks/transport-auth.bench.js.map +1 -0
  35. package/dist/__tests__/benchmarks/utilities.bench.d.ts +10 -0
  36. package/dist/__tests__/benchmarks/utilities.bench.d.ts.map +1 -0
  37. package/dist/__tests__/benchmarks/utilities.bench.js +164 -0
  38. package/dist/__tests__/benchmarks/utilities.bench.js.map +1 -0
  39. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  40. package/dist/__tests__/mocks/adapter.js +2 -1
  41. package/dist/__tests__/mocks/adapter.js.map +1 -1
  42. package/dist/adapters/DatabaseAdapter.d.ts +6 -1
  43. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  44. package/dist/adapters/DatabaseAdapter.js +23 -7
  45. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  46. package/dist/adapters/postgresql/PostgresAdapter.d.ts +5 -22
  47. package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
  48. package/dist/adapters/postgresql/PostgresAdapter.js +30 -519
  49. package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
  50. package/dist/adapters/postgresql/prompts/index.js +1 -1
  51. package/dist/adapters/postgresql/prompts/index.js.map +1 -1
  52. package/dist/adapters/postgresql/resources/index.d.ts +1 -1
  53. package/dist/adapters/postgresql/resources/index.js +3 -3
  54. package/dist/adapters/postgresql/resources/index.js.map +1 -1
  55. package/dist/adapters/postgresql/schema-operations.d.ts +71 -0
  56. package/dist/adapters/postgresql/schema-operations.d.ts.map +1 -0
  57. package/dist/adapters/postgresql/schema-operations.js +561 -0
  58. package/dist/adapters/postgresql/schema-operations.js.map +1 -0
  59. package/dist/adapters/postgresql/schemas/admin.d.ts +4 -4
  60. package/dist/adapters/postgresql/schemas/admin.js +4 -4
  61. package/dist/adapters/postgresql/schemas/admin.js.map +1 -1
  62. package/dist/adapters/postgresql/schemas/backup.d.ts +39 -25
  63. package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -1
  64. package/dist/adapters/postgresql/schemas/backup.js +54 -25
  65. package/dist/adapters/postgresql/schemas/backup.js.map +1 -1
  66. package/dist/adapters/postgresql/schemas/core/index.d.ts +6 -0
  67. package/dist/adapters/postgresql/schemas/core/index.d.ts.map +1 -0
  68. package/dist/adapters/postgresql/schemas/core/index.js +6 -0
  69. package/dist/adapters/postgresql/schemas/core/index.js.map +1 -0
  70. package/dist/adapters/postgresql/schemas/{core.d.ts → core/queries.d.ts} +12 -167
  71. package/dist/adapters/postgresql/schemas/core/queries.d.ts.map +1 -0
  72. package/dist/adapters/postgresql/schemas/{core.js → core/queries.js} +5 -213
  73. package/dist/adapters/postgresql/schemas/core/queries.js.map +1 -0
  74. package/dist/adapters/postgresql/schemas/core/transactions.d.ts +149 -0
  75. package/dist/adapters/postgresql/schemas/core/transactions.d.ts.map +1 -0
  76. package/dist/adapters/postgresql/schemas/core/transactions.js +239 -0
  77. package/dist/adapters/postgresql/schemas/core/transactions.js.map +1 -0
  78. package/dist/adapters/postgresql/schemas/cron.d.ts +12 -12
  79. package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -1
  80. package/dist/adapters/postgresql/schemas/cron.js +38 -10
  81. package/dist/adapters/postgresql/schemas/cron.js.map +1 -1
  82. package/dist/adapters/postgresql/schemas/extensions/citext.d.ts +222 -0
  83. package/dist/adapters/postgresql/schemas/extensions/citext.d.ts.map +1 -0
  84. package/dist/adapters/postgresql/schemas/extensions/citext.js +306 -0
  85. package/dist/adapters/postgresql/schemas/extensions/citext.js.map +1 -0
  86. package/dist/adapters/postgresql/schemas/extensions/index.d.ts +15 -0
  87. package/dist/adapters/postgresql/schemas/extensions/index.d.ts.map +1 -0
  88. package/dist/adapters/postgresql/schemas/extensions/index.js +20 -0
  89. package/dist/adapters/postgresql/schemas/extensions/index.js.map +1 -0
  90. package/dist/adapters/postgresql/schemas/extensions/kcache.d.ts +164 -0
  91. package/dist/adapters/postgresql/schemas/extensions/kcache.d.ts.map +1 -0
  92. package/dist/adapters/postgresql/schemas/extensions/kcache.js +225 -0
  93. package/dist/adapters/postgresql/schemas/extensions/kcache.js.map +1 -0
  94. package/dist/adapters/postgresql/schemas/extensions/ltree.d.ts +253 -0
  95. package/dist/adapters/postgresql/schemas/extensions/ltree.d.ts.map +1 -0
  96. package/dist/adapters/postgresql/schemas/extensions/ltree.js +430 -0
  97. package/dist/adapters/postgresql/schemas/extensions/ltree.js.map +1 -0
  98. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.d.ts +251 -0
  99. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.d.ts.map +1 -0
  100. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.js +294 -0
  101. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.js.map +1 -0
  102. package/dist/adapters/postgresql/schemas/extensions/shared.d.ts +10 -0
  103. package/dist/adapters/postgresql/schemas/extensions/shared.d.ts.map +1 -0
  104. package/dist/adapters/postgresql/schemas/extensions/shared.js +15 -0
  105. package/dist/adapters/postgresql/schemas/extensions/shared.js.map +1 -0
  106. package/dist/adapters/postgresql/schemas/index.d.ts +8 -7
  107. package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -1
  108. package/dist/adapters/postgresql/schemas/index.js +16 -10
  109. package/dist/adapters/postgresql/schemas/index.js.map +1 -1
  110. package/dist/adapters/postgresql/schemas/introspection.d.ts +445 -0
  111. package/dist/adapters/postgresql/schemas/introspection.d.ts.map +1 -0
  112. package/dist/adapters/postgresql/schemas/introspection.js +481 -0
  113. package/dist/adapters/postgresql/schemas/introspection.js.map +1 -0
  114. package/dist/adapters/postgresql/schemas/jsonb/advanced.d.ts +270 -0
  115. package/dist/adapters/postgresql/schemas/jsonb/advanced.d.ts.map +1 -0
  116. package/dist/adapters/postgresql/schemas/jsonb/advanced.js +371 -0
  117. package/dist/adapters/postgresql/schemas/jsonb/advanced.js.map +1 -0
  118. package/dist/adapters/postgresql/schemas/jsonb/basic.d.ts +283 -0
  119. package/dist/adapters/postgresql/schemas/jsonb/basic.d.ts.map +1 -0
  120. package/dist/adapters/postgresql/schemas/jsonb/basic.js +456 -0
  121. package/dist/adapters/postgresql/schemas/jsonb/basic.js.map +1 -0
  122. package/dist/adapters/postgresql/schemas/jsonb/index.d.ts +6 -0
  123. package/dist/adapters/postgresql/schemas/jsonb/index.d.ts.map +1 -0
  124. package/dist/adapters/postgresql/schemas/jsonb/index.js +6 -0
  125. package/dist/adapters/postgresql/schemas/jsonb/index.js.map +1 -0
  126. package/dist/adapters/postgresql/schemas/monitoring.d.ts +45 -29
  127. package/dist/adapters/postgresql/schemas/monitoring.d.ts.map +1 -1
  128. package/dist/adapters/postgresql/schemas/monitoring.js +51 -18
  129. package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -1
  130. package/dist/adapters/postgresql/schemas/partitioning.d.ts +28 -32
  131. package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -1
  132. package/dist/adapters/postgresql/schemas/partitioning.js +82 -53
  133. package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -1
  134. package/dist/adapters/postgresql/schemas/partman.d.ts +78 -7
  135. package/dist/adapters/postgresql/schemas/partman.d.ts.map +1 -1
  136. package/dist/adapters/postgresql/schemas/partman.js +54 -41
  137. package/dist/adapters/postgresql/schemas/partman.js.map +1 -1
  138. package/dist/adapters/postgresql/schemas/performance.d.ts +37 -19
  139. package/dist/adapters/postgresql/schemas/performance.d.ts.map +1 -1
  140. package/dist/adapters/postgresql/schemas/performance.js +54 -12
  141. package/dist/adapters/postgresql/schemas/performance.js.map +1 -1
  142. package/dist/adapters/postgresql/schemas/postgis/advanced.d.ts +429 -0
  143. package/dist/adapters/postgresql/schemas/postgis/advanced.d.ts.map +1 -0
  144. package/dist/adapters/postgresql/schemas/{postgis.js → postgis/advanced.js} +4 -467
  145. package/dist/adapters/postgresql/schemas/postgis/advanced.js.map +1 -0
  146. package/dist/adapters/postgresql/schemas/{postgis.d.ts → postgis/basic.d.ts} +1 -423
  147. package/dist/adapters/postgresql/schemas/postgis/basic.d.ts.map +1 -0
  148. package/dist/adapters/postgresql/schemas/postgis/basic.js +493 -0
  149. package/dist/adapters/postgresql/schemas/postgis/basic.js.map +1 -0
  150. package/dist/adapters/postgresql/schemas/postgis/index.d.ts +6 -0
  151. package/dist/adapters/postgresql/schemas/postgis/index.d.ts.map +1 -0
  152. package/dist/adapters/postgresql/schemas/postgis/index.js +6 -0
  153. package/dist/adapters/postgresql/schemas/postgis/index.js.map +1 -0
  154. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +50 -32
  155. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -1
  156. package/dist/adapters/postgresql/schemas/schema-mgmt.js +93 -26
  157. package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -1
  158. package/dist/adapters/postgresql/schemas/stats/index.d.ts +6 -0
  159. package/dist/adapters/postgresql/schemas/stats/index.d.ts.map +1 -0
  160. package/dist/adapters/postgresql/schemas/stats/index.js +6 -0
  161. package/dist/adapters/postgresql/schemas/stats/index.js.map +1 -0
  162. package/dist/adapters/postgresql/schemas/stats/input.d.ts +260 -0
  163. package/dist/adapters/postgresql/schemas/stats/input.d.ts.map +1 -0
  164. package/dist/adapters/postgresql/schemas/{stats.js → stats/input.js} +2 -331
  165. package/dist/adapters/postgresql/schemas/stats/input.js.map +1 -0
  166. package/dist/adapters/postgresql/schemas/{stats.d.ts → stats/output.d.ts} +3 -246
  167. package/dist/adapters/postgresql/schemas/stats/output.d.ts.map +1 -0
  168. package/dist/adapters/postgresql/schemas/stats/output.js +334 -0
  169. package/dist/adapters/postgresql/schemas/stats/output.js.map +1 -0
  170. package/dist/adapters/postgresql/schemas/text-search.d.ts +44 -32
  171. package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -1
  172. package/dist/adapters/postgresql/schemas/text-search.js +53 -36
  173. package/dist/adapters/postgresql/schemas/text-search.js.map +1 -1
  174. package/dist/adapters/postgresql/schemas/vector.d.ts +10 -10
  175. package/dist/adapters/postgresql/schemas/vector.d.ts.map +1 -1
  176. package/dist/adapters/postgresql/schemas/vector.js +12 -16
  177. package/dist/adapters/postgresql/schemas/vector.js.map +1 -1
  178. package/dist/adapters/postgresql/tools/admin.d.ts.map +1 -1
  179. package/dist/adapters/postgresql/tools/admin.js +82 -67
  180. package/dist/adapters/postgresql/tools/admin.js.map +1 -1
  181. package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -1
  182. package/dist/adapters/postgresql/tools/backup/dump.js +119 -97
  183. package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -1
  184. package/dist/adapters/postgresql/tools/backup/planning.d.ts.map +1 -1
  185. package/dist/adapters/postgresql/tools/backup/planning.js +345 -287
  186. package/dist/adapters/postgresql/tools/backup/planning.js.map +1 -1
  187. package/dist/adapters/postgresql/tools/citext/analysis.d.ts +24 -0
  188. package/dist/adapters/postgresql/tools/citext/analysis.d.ts.map +1 -0
  189. package/dist/adapters/postgresql/tools/{citext.js → citext/analysis.js} +131 -281
  190. package/dist/adapters/postgresql/tools/citext/analysis.js.map +1 -0
  191. package/dist/adapters/postgresql/tools/citext/index.d.ts +15 -0
  192. package/dist/adapters/postgresql/tools/citext/index.d.ts.map +1 -0
  193. package/dist/adapters/postgresql/tools/citext/index.js +23 -0
  194. package/dist/adapters/postgresql/tools/citext/index.js.map +1 -0
  195. package/dist/adapters/postgresql/tools/citext/setup.d.ts +16 -0
  196. package/dist/adapters/postgresql/tools/citext/setup.d.ts.map +1 -0
  197. package/dist/adapters/postgresql/tools/citext/setup.js +193 -0
  198. package/dist/adapters/postgresql/tools/citext/setup.js.map +1 -0
  199. package/dist/adapters/postgresql/tools/codemode/index.d.ts.map +1 -1
  200. package/dist/adapters/postgresql/tools/codemode/index.js +3 -12
  201. package/dist/adapters/postgresql/tools/codemode/index.js.map +1 -1
  202. package/dist/adapters/postgresql/tools/core/convenience.d.ts +12 -22
  203. package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -1
  204. package/dist/adapters/postgresql/tools/core/convenience.js +116 -211
  205. package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -1
  206. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts +1 -0
  207. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts.map +1 -1
  208. package/dist/adapters/postgresql/tools/core/error-helpers.js +8 -1
  209. package/dist/adapters/postgresql/tools/core/error-helpers.js.map +1 -1
  210. package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -1
  211. package/dist/adapters/postgresql/tools/core/health.js +124 -114
  212. package/dist/adapters/postgresql/tools/core/health.js.map +1 -1
  213. package/dist/adapters/postgresql/tools/core/index.d.ts +2 -1
  214. package/dist/adapters/postgresql/tools/core/index.d.ts.map +1 -1
  215. package/dist/adapters/postgresql/tools/core/index.js +3 -2
  216. package/dist/adapters/postgresql/tools/core/index.js.map +1 -1
  217. package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -1
  218. package/dist/adapters/postgresql/tools/core/indexes.js +153 -128
  219. package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -1
  220. package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -1
  221. package/dist/adapters/postgresql/tools/core/objects.js +186 -161
  222. package/dist/adapters/postgresql/tools/core/objects.js.map +1 -1
  223. package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -1
  224. package/dist/adapters/postgresql/tools/core/query.js +37 -25
  225. package/dist/adapters/postgresql/tools/core/query.js.map +1 -1
  226. package/dist/adapters/postgresql/tools/core/schemas.d.ts +6 -3
  227. package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -1
  228. package/dist/adapters/postgresql/tools/core/schemas.js +11 -2
  229. package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -1
  230. package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -1
  231. package/dist/adapters/postgresql/tools/core/tables.js +156 -129
  232. package/dist/adapters/postgresql/tools/core/tables.js.map +1 -1
  233. package/dist/adapters/postgresql/tools/core/utility.d.ts +26 -0
  234. package/dist/adapters/postgresql/tools/core/utility.d.ts.map +1 -0
  235. package/dist/adapters/postgresql/tools/core/utility.js +174 -0
  236. package/dist/adapters/postgresql/tools/core/utility.js.map +1 -0
  237. package/dist/adapters/postgresql/tools/cron.js +149 -70
  238. package/dist/adapters/postgresql/tools/cron.js.map +1 -1
  239. package/dist/adapters/postgresql/tools/introspection/analysis.d.ts +12 -0
  240. package/dist/adapters/postgresql/tools/introspection/analysis.d.ts.map +1 -0
  241. package/dist/adapters/postgresql/tools/introspection/analysis.js +574 -0
  242. package/dist/adapters/postgresql/tools/introspection/analysis.js.map +1 -0
  243. package/dist/adapters/postgresql/tools/introspection/graph.d.ts +55 -0
  244. package/dist/adapters/postgresql/tools/introspection/graph.d.ts.map +1 -0
  245. package/dist/adapters/postgresql/tools/introspection/graph.js +638 -0
  246. package/dist/adapters/postgresql/tools/introspection/graph.js.map +1 -0
  247. package/dist/adapters/postgresql/tools/introspection/index.d.ts +19 -0
  248. package/dist/adapters/postgresql/tools/introspection/index.d.ts.map +1 -0
  249. package/dist/adapters/postgresql/tools/introspection/index.js +36 -0
  250. package/dist/adapters/postgresql/tools/introspection/index.js.map +1 -0
  251. package/dist/adapters/postgresql/tools/introspection/migration.d.ts +15 -0
  252. package/dist/adapters/postgresql/tools/introspection/migration.d.ts.map +1 -0
  253. package/dist/adapters/postgresql/tools/introspection/migration.js +599 -0
  254. package/dist/adapters/postgresql/tools/introspection/migration.js.map +1 -0
  255. package/dist/adapters/postgresql/tools/jsonb/analytics.d.ts +20 -0
  256. package/dist/adapters/postgresql/tools/jsonb/analytics.d.ts.map +1 -0
  257. package/dist/adapters/postgresql/tools/jsonb/analytics.js +367 -0
  258. package/dist/adapters/postgresql/tools/jsonb/analytics.js.map +1 -0
  259. package/dist/adapters/postgresql/tools/jsonb/index.d.ts +4 -2
  260. package/dist/adapters/postgresql/tools/jsonb/index.d.ts.map +1 -1
  261. package/dist/adapters/postgresql/tools/jsonb/index.js +8 -4
  262. package/dist/adapters/postgresql/tools/jsonb/index.js.map +1 -1
  263. package/dist/adapters/postgresql/tools/jsonb/read.d.ts +38 -0
  264. package/dist/adapters/postgresql/tools/jsonb/read.d.ts.map +1 -0
  265. package/dist/adapters/postgresql/tools/jsonb/read.js +543 -0
  266. package/dist/adapters/postgresql/tools/jsonb/read.js.map +1 -0
  267. package/dist/adapters/postgresql/tools/jsonb/{advanced.d.ts → transform.d.ts} +1 -13
  268. package/dist/adapters/postgresql/tools/jsonb/transform.d.ts.map +1 -0
  269. package/dist/adapters/postgresql/tools/jsonb/{advanced.js → transform.js} +39 -361
  270. package/dist/adapters/postgresql/tools/jsonb/transform.js.map +1 -0
  271. package/dist/adapters/postgresql/tools/jsonb/write.d.ts +14 -0
  272. package/dist/adapters/postgresql/tools/jsonb/write.d.ts.map +1 -0
  273. package/dist/adapters/postgresql/tools/jsonb/write.js +468 -0
  274. package/dist/adapters/postgresql/tools/jsonb/write.js.map +1 -0
  275. package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -1
  276. package/dist/adapters/postgresql/tools/kcache.js +116 -51
  277. package/dist/adapters/postgresql/tools/kcache.js.map +1 -1
  278. package/dist/adapters/postgresql/tools/ltree.d.ts.map +1 -1
  279. package/dist/adapters/postgresql/tools/ltree.js +358 -259
  280. package/dist/adapters/postgresql/tools/ltree.js.map +1 -1
  281. package/dist/adapters/postgresql/tools/monitoring/analysis.d.ts +15 -0
  282. package/dist/adapters/postgresql/tools/monitoring/analysis.d.ts.map +1 -0
  283. package/dist/adapters/postgresql/tools/{monitoring.js → monitoring/analysis.js} +37 -361
  284. package/dist/adapters/postgresql/tools/monitoring/analysis.js.map +1 -0
  285. package/dist/adapters/postgresql/tools/monitoring/basic.d.ts +17 -0
  286. package/dist/adapters/postgresql/tools/monitoring/basic.d.ts.map +1 -0
  287. package/dist/adapters/postgresql/tools/monitoring/basic.js +432 -0
  288. package/dist/adapters/postgresql/tools/monitoring/basic.js.map +1 -0
  289. package/dist/adapters/postgresql/tools/monitoring/index.d.ts +16 -0
  290. package/dist/adapters/postgresql/tools/monitoring/index.d.ts.map +1 -0
  291. package/dist/adapters/postgresql/tools/monitoring/index.js +31 -0
  292. package/dist/adapters/postgresql/tools/monitoring/index.js.map +1 -0
  293. package/dist/adapters/postgresql/tools/partitioning/index.d.ts +15 -0
  294. package/dist/adapters/postgresql/tools/partitioning/index.d.ts.map +1 -0
  295. package/dist/adapters/postgresql/tools/partitioning/index.js +23 -0
  296. package/dist/adapters/postgresql/tools/partitioning/index.js.map +1 -0
  297. package/dist/adapters/postgresql/tools/partitioning/info.d.ts +11 -0
  298. package/dist/adapters/postgresql/tools/partitioning/info.d.ts.map +1 -0
  299. package/dist/adapters/postgresql/tools/partitioning/info.js +302 -0
  300. package/dist/adapters/postgresql/tools/partitioning/info.js.map +1 -0
  301. package/dist/adapters/postgresql/tools/partitioning/management.d.ts +28 -0
  302. package/dist/adapters/postgresql/tools/partitioning/management.d.ts.map +1 -0
  303. package/dist/adapters/postgresql/tools/{partitioning.js → partitioning/management.js} +48 -307
  304. package/dist/adapters/postgresql/tools/partitioning/management.js.map +1 -0
  305. package/dist/adapters/postgresql/tools/partman/helpers.d.ts +29 -0
  306. package/dist/adapters/postgresql/tools/partman/helpers.d.ts.map +1 -0
  307. package/dist/adapters/postgresql/tools/partman/helpers.js +59 -0
  308. package/dist/adapters/postgresql/tools/partman/helpers.js.map +1 -0
  309. package/dist/adapters/postgresql/tools/partman/index.d.ts +2 -1
  310. package/dist/adapters/postgresql/tools/partman/index.d.ts.map +1 -1
  311. package/dist/adapters/postgresql/tools/partman/index.js +4 -2
  312. package/dist/adapters/postgresql/tools/partman/index.js.map +1 -1
  313. package/dist/adapters/postgresql/tools/partman/maintenance.d.ts +20 -0
  314. package/dist/adapters/postgresql/tools/partman/maintenance.d.ts.map +1 -0
  315. package/dist/adapters/postgresql/tools/partman/maintenance.js +496 -0
  316. package/dist/adapters/postgresql/tools/partman/maintenance.js.map +1 -0
  317. package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -1
  318. package/dist/adapters/postgresql/tools/partman/management.js +452 -417
  319. package/dist/adapters/postgresql/tools/partman/management.js.map +1 -1
  320. package/dist/adapters/postgresql/tools/partman/operations.d.ts +1 -13
  321. package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -1
  322. package/dist/adapters/postgresql/tools/partman/operations.js +173 -654
  323. package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -1
  324. package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -1
  325. package/dist/adapters/postgresql/tools/performance/analysis.js +79 -45
  326. package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -1
  327. package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -1
  328. package/dist/adapters/postgresql/tools/performance/monitoring.js +83 -55
  329. package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -1
  330. package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -1
  331. package/dist/adapters/postgresql/tools/performance/optimization.js +18 -11
  332. package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -1
  333. package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -1
  334. package/dist/adapters/postgresql/tools/performance/stats.js +441 -286
  335. package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -1
  336. package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -1
  337. package/dist/adapters/postgresql/tools/pgcrypto.js +67 -79
  338. package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -1
  339. package/dist/adapters/postgresql/tools/postgis/advanced.d.ts.map +1 -1
  340. package/dist/adapters/postgresql/tools/postgis/advanced.js +30 -25
  341. package/dist/adapters/postgresql/tools/postgis/advanced.js.map +1 -1
  342. package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -1
  343. package/dist/adapters/postgresql/tools/postgis/basic.js +137 -100
  344. package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -1
  345. package/dist/adapters/postgresql/tools/schema/index.d.ts +16 -0
  346. package/dist/adapters/postgresql/tools/schema/index.d.ts.map +1 -0
  347. package/dist/adapters/postgresql/tools/schema/index.js +32 -0
  348. package/dist/adapters/postgresql/tools/schema/index.js.map +1 -0
  349. package/dist/adapters/postgresql/tools/schema/objects.d.ts +15 -0
  350. package/dist/adapters/postgresql/tools/schema/objects.d.ts.map +1 -0
  351. package/dist/adapters/postgresql/tools/schema/objects.js +378 -0
  352. package/dist/adapters/postgresql/tools/schema/objects.js.map +1 -0
  353. package/dist/adapters/postgresql/tools/schema/views.d.ts +15 -0
  354. package/dist/adapters/postgresql/tools/schema/views.d.ts.map +1 -0
  355. package/dist/adapters/postgresql/tools/{schema.js → schema/views.js} +91 -339
  356. package/dist/adapters/postgresql/tools/schema/views.js.map +1 -0
  357. package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -1
  358. package/dist/adapters/postgresql/tools/stats/advanced.js +40 -235
  359. package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -1
  360. package/dist/adapters/postgresql/tools/stats/basic.d.ts.map +1 -1
  361. package/dist/adapters/postgresql/tools/stats/basic.js +45 -30
  362. package/dist/adapters/postgresql/tools/stats/basic.js.map +1 -1
  363. package/dist/adapters/postgresql/tools/stats/math-utils.d.ts +33 -0
  364. package/dist/adapters/postgresql/tools/stats/math-utils.d.ts.map +1 -0
  365. package/dist/adapters/postgresql/tools/stats/math-utils.js +225 -0
  366. package/dist/adapters/postgresql/tools/stats/math-utils.js.map +1 -0
  367. package/dist/adapters/postgresql/tools/text/index.d.ts +16 -0
  368. package/dist/adapters/postgresql/tools/text/index.d.ts.map +1 -0
  369. package/dist/adapters/postgresql/tools/text/index.js +33 -0
  370. package/dist/adapters/postgresql/tools/text/index.js.map +1 -0
  371. package/dist/adapters/postgresql/tools/text/matching.d.ts +17 -0
  372. package/dist/adapters/postgresql/tools/text/matching.d.ts.map +1 -0
  373. package/dist/adapters/postgresql/tools/text/matching.js +565 -0
  374. package/dist/adapters/postgresql/tools/text/matching.js.map +1 -0
  375. package/dist/adapters/postgresql/tools/text/search.d.ts +17 -0
  376. package/dist/adapters/postgresql/tools/text/search.d.ts.map +1 -0
  377. package/dist/adapters/postgresql/tools/text/search.js +653 -0
  378. package/dist/adapters/postgresql/tools/text/search.js.map +1 -0
  379. package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -1
  380. package/dist/adapters/postgresql/tools/transactions.js +11 -27
  381. package/dist/adapters/postgresql/tools/transactions.js.map +1 -1
  382. package/dist/adapters/postgresql/tools/vector/{basic.d.ts → data.d.ts} +10 -8
  383. package/dist/adapters/postgresql/tools/vector/data.d.ts.map +1 -0
  384. package/dist/adapters/postgresql/tools/vector/data.js +540 -0
  385. package/dist/adapters/postgresql/tools/vector/data.js.map +1 -0
  386. package/dist/adapters/postgresql/tools/vector/index.d.ts.map +1 -1
  387. package/dist/adapters/postgresql/tools/vector/index.js +6 -2
  388. package/dist/adapters/postgresql/tools/vector/index.js.map +1 -1
  389. package/dist/adapters/postgresql/tools/vector/management.d.ts +11 -0
  390. package/dist/adapters/postgresql/tools/vector/management.d.ts.map +1 -0
  391. package/dist/adapters/postgresql/tools/vector/management.js +425 -0
  392. package/dist/adapters/postgresql/tools/vector/management.js.map +1 -0
  393. package/dist/adapters/postgresql/tools/vector/query.d.ts +14 -0
  394. package/dist/adapters/postgresql/tools/vector/query.d.ts.map +1 -0
  395. package/dist/adapters/postgresql/tools/vector/query.js +767 -0
  396. package/dist/adapters/postgresql/tools/vector/query.js.map +1 -0
  397. package/dist/adapters/postgresql/tools/vector/{advanced.d.ts → search-advanced.d.ts} +4 -5
  398. package/dist/adapters/postgresql/tools/vector/search-advanced.d.ts.map +1 -0
  399. package/dist/adapters/postgresql/tools/vector/search-advanced.js +626 -0
  400. package/dist/adapters/postgresql/tools/vector/search-advanced.js.map +1 -0
  401. package/dist/auth/auth-context.d.ts +28 -0
  402. package/dist/auth/auth-context.d.ts.map +1 -0
  403. package/dist/auth/auth-context.js +37 -0
  404. package/dist/auth/auth-context.js.map +1 -0
  405. package/dist/auth/scope-map.d.ts +20 -0
  406. package/dist/auth/scope-map.d.ts.map +1 -0
  407. package/dist/auth/scope-map.js +40 -0
  408. package/dist/auth/scope-map.js.map +1 -0
  409. package/dist/auth/scopes.d.ts.map +1 -1
  410. package/dist/auth/scopes.js +2 -0
  411. package/dist/auth/scopes.js.map +1 -1
  412. package/dist/cli/args.d.ts +3 -2
  413. package/dist/cli/args.d.ts.map +1 -1
  414. package/dist/cli/args.js +4 -3
  415. package/dist/cli/args.js.map +1 -1
  416. package/dist/cli.js +11 -5
  417. package/dist/cli.js.map +1 -1
  418. package/dist/codemode/api/aliases.d.ts +14 -0
  419. package/dist/codemode/api/aliases.d.ts.map +1 -0
  420. package/dist/codemode/api/aliases.js +503 -0
  421. package/dist/codemode/api/aliases.js.map +1 -0
  422. package/dist/codemode/api/group-api.d.ts +23 -0
  423. package/dist/codemode/api/group-api.d.ts.map +1 -0
  424. package/dist/codemode/api/group-api.js +179 -0
  425. package/dist/codemode/api/group-api.js.map +1 -0
  426. package/dist/codemode/{api.d.ts → api/index.d.ts} +5 -4
  427. package/dist/codemode/api/index.d.ts.map +1 -0
  428. package/dist/codemode/api/index.js +192 -0
  429. package/dist/codemode/api/index.js.map +1 -0
  430. package/dist/codemode/api/maps.d.ts +47 -0
  431. package/dist/codemode/api/maps.d.ts.map +1 -0
  432. package/dist/codemode/api/maps.js +523 -0
  433. package/dist/codemode/api/maps.js.map +1 -0
  434. package/dist/codemode/api/normalize.d.ts +13 -0
  435. package/dist/codemode/api/normalize.d.ts.map +1 -0
  436. package/dist/codemode/api/normalize.js +120 -0
  437. package/dist/codemode/api/normalize.js.map +1 -0
  438. package/dist/codemode/index.d.ts +1 -3
  439. package/dist/codemode/index.d.ts.map +1 -1
  440. package/dist/codemode/index.js +1 -5
  441. package/dist/codemode/index.js.map +1 -1
  442. package/dist/codemode/sandbox.d.ts +14 -1
  443. package/dist/codemode/sandbox.d.ts.map +1 -1
  444. package/dist/codemode/sandbox.js +66 -44
  445. package/dist/codemode/sandbox.js.map +1 -1
  446. package/dist/codemode/types.d.ts.map +1 -1
  447. package/dist/codemode/types.js +3 -0
  448. package/dist/codemode/types.js.map +1 -1
  449. package/dist/constants/ServerInstructions.d.ts +5 -1
  450. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  451. package/dist/constants/ServerInstructions.js +91 -43
  452. package/dist/constants/ServerInstructions.js.map +1 -1
  453. package/dist/filtering/ToolConstants.d.ts +22 -19
  454. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  455. package/dist/filtering/ToolConstants.js +48 -37
  456. package/dist/filtering/ToolConstants.js.map +1 -1
  457. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  458. package/dist/filtering/ToolFilter.js +10 -13
  459. package/dist/filtering/ToolFilter.js.map +1 -1
  460. package/dist/pool/ConnectionPool.js +1 -1
  461. package/dist/pool/ConnectionPool.js.map +1 -1
  462. package/dist/server/McpServer.d.ts +1 -1
  463. package/dist/server/McpServer.d.ts.map +1 -1
  464. package/dist/server/McpServer.js +1 -2
  465. package/dist/server/McpServer.js.map +1 -1
  466. package/dist/transports/http.d.ts +44 -10
  467. package/dist/transports/http.d.ts.map +1 -1
  468. package/dist/transports/http.js +327 -40
  469. package/dist/transports/http.js.map +1 -1
  470. package/dist/types/filtering.d.ts +2 -2
  471. package/dist/types/filtering.d.ts.map +1 -1
  472. package/dist/utils/icons.d.ts.map +1 -1
  473. package/dist/utils/icons.js +5 -0
  474. package/dist/utils/icons.js.map +1 -1
  475. package/dist/utils/logger.d.ts +6 -6
  476. package/dist/utils/logger.d.ts.map +1 -1
  477. package/dist/utils/logger.js +18 -15
  478. package/dist/utils/logger.js.map +1 -1
  479. package/dist/utils/progress-utils.d.ts +2 -2
  480. package/dist/utils/progress-utils.d.ts.map +1 -1
  481. package/dist/utils/progress-utils.js +2 -3
  482. package/dist/utils/progress-utils.js.map +1 -1
  483. package/dist/utils/version.d.ts +9 -0
  484. package/dist/utils/version.d.ts.map +1 -0
  485. package/dist/utils/version.js +12 -0
  486. package/dist/utils/version.js.map +1 -0
  487. package/dist/utils/where-clause.d.ts +4 -0
  488. package/dist/utils/where-clause.d.ts.map +1 -1
  489. package/dist/utils/where-clause.js +40 -0
  490. package/dist/utils/where-clause.js.map +1 -1
  491. package/package.json +19 -14
  492. package/dist/adapters/postgresql/schemas/core.d.ts.map +0 -1
  493. package/dist/adapters/postgresql/schemas/core.js.map +0 -1
  494. package/dist/adapters/postgresql/schemas/extensions.d.ts +0 -833
  495. package/dist/adapters/postgresql/schemas/extensions.d.ts.map +0 -1
  496. package/dist/adapters/postgresql/schemas/extensions.js +0 -1170
  497. package/dist/adapters/postgresql/schemas/extensions.js.map +0 -1
  498. package/dist/adapters/postgresql/schemas/jsonb.d.ts +0 -533
  499. package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +0 -1
  500. package/dist/adapters/postgresql/schemas/jsonb.js +0 -790
  501. package/dist/adapters/postgresql/schemas/jsonb.js.map +0 -1
  502. package/dist/adapters/postgresql/schemas/postgis.d.ts.map +0 -1
  503. package/dist/adapters/postgresql/schemas/postgis.js.map +0 -1
  504. package/dist/adapters/postgresql/schemas/stats.d.ts.map +0 -1
  505. package/dist/adapters/postgresql/schemas/stats.js.map +0 -1
  506. package/dist/adapters/postgresql/tools/citext.d.ts +0 -18
  507. package/dist/adapters/postgresql/tools/citext.d.ts.map +0 -1
  508. package/dist/adapters/postgresql/tools/citext.js.map +0 -1
  509. package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +0 -1
  510. package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +0 -1
  511. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts +0 -20
  512. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +0 -1
  513. package/dist/adapters/postgresql/tools/jsonb/basic.js +0 -915
  514. package/dist/adapters/postgresql/tools/jsonb/basic.js.map +0 -1
  515. package/dist/adapters/postgresql/tools/monitoring.d.ts +0 -13
  516. package/dist/adapters/postgresql/tools/monitoring.d.ts.map +0 -1
  517. package/dist/adapters/postgresql/tools/monitoring.js.map +0 -1
  518. package/dist/adapters/postgresql/tools/partitioning.d.ts +0 -13
  519. package/dist/adapters/postgresql/tools/partitioning.d.ts.map +0 -1
  520. package/dist/adapters/postgresql/tools/partitioning.js.map +0 -1
  521. package/dist/adapters/postgresql/tools/schema.d.ts +0 -13
  522. package/dist/adapters/postgresql/tools/schema.d.ts.map +0 -1
  523. package/dist/adapters/postgresql/tools/schema.js.map +0 -1
  524. package/dist/adapters/postgresql/tools/text.d.ts +0 -13
  525. package/dist/adapters/postgresql/tools/text.d.ts.map +0 -1
  526. package/dist/adapters/postgresql/tools/text.js +0 -903
  527. package/dist/adapters/postgresql/tools/text.js.map +0 -1
  528. package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +0 -1
  529. package/dist/adapters/postgresql/tools/vector/advanced.js +0 -958
  530. package/dist/adapters/postgresql/tools/vector/advanced.js.map +0 -1
  531. package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +0 -1
  532. package/dist/adapters/postgresql/tools/vector/basic.js +0 -1165
  533. package/dist/adapters/postgresql/tools/vector/basic.js.map +0 -1
  534. package/dist/codemode/api.d.ts.map +0 -1
  535. package/dist/codemode/api.js +0 -1510
  536. package/dist/codemode/api.js.map +0 -1
  537. package/dist/codemode/sandbox-factory.d.ts +0 -72
  538. package/dist/codemode/sandbox-factory.d.ts.map +0 -1
  539. package/dist/codemode/sandbox-factory.js +0 -88
  540. package/dist/codemode/sandbox-factory.js.map +0 -1
  541. package/dist/codemode/worker-sandbox.d.ts +0 -82
  542. package/dist/codemode/worker-sandbox.d.ts.map +0 -1
  543. package/dist/codemode/worker-sandbox.js +0 -244
  544. package/dist/codemode/worker-sandbox.js.map +0 -1
  545. package/dist/codemode/worker-script.d.ts +0 -8
  546. package/dist/codemode/worker-script.d.ts.map +0 -1
  547. package/dist/codemode/worker-script.js +0 -113
  548. package/dist/codemode/worker-script.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/introspection/graph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,4BAA4B,CAAC;AAqBpC,MAAM,WAAW,MAAM;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,SAAS;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,eAAe,EACxB,YAAY,CAAC,EAAE,MAAM,EACrB,uBAAuB,CAAC,EAAE,OAAO,GAChC,OAAO,CAAC,MAAM,EAAE,CAAC,CA6DnB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,EACxB,YAAY,CAAC,EAAE,MAAM,EACrB,uBAAuB,CAAC,EAAE,OAAO,GAChC,OAAO,CAAC,SAAS,EAAE,CAAC,CAsCtB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAQzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAkCzE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GACpB,MAAM,EAAE,GAAG,IAAI,CA2CjB;AAwCD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,GACvB,cAAc,CA2HhB;AAMD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,GACvB,cAAc,CAiJhB;AAMD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,eAAe,GACvB,cAAc,CA0KhB"}
@@ -0,0 +1,638 @@
1
+ /**
2
+ * PostgreSQL Introspection Tools - Graph Analysis
3
+ *
4
+ * Dependency graph, topological sort, and cascade simulation tools.
5
+ * 3 tools total.
6
+ */
7
+ import { readOnly } from "../../../../utils/annotations.js";
8
+ import { getToolIcons } from "../../../../utils/icons.js";
9
+ import { formatPostgresError } from "../core/error-helpers.js";
10
+ import { DependencyGraphSchemaBase, DependencyGraphSchema, TopologicalSortSchemaBase, TopologicalSortSchema, CascadeSimulatorSchemaBase, CascadeSimulatorSchema,
11
+ // Output schemas
12
+ DependencyGraphOutputSchema, TopologicalSortOutputSchema, CascadeSimulatorOutputSchema, } from "../../schemas/index.js";
13
+ // =============================================================================
14
+ // Shared queries
15
+ // =============================================================================
16
+ /**
17
+ * Fetch all foreign key relationships across user schemas
18
+ */
19
+ export async function fetchForeignKeys(adapter, schemaFilter, excludeExtensionSchemas) {
20
+ const params = [];
21
+ let schemaClause = "";
22
+ if (schemaFilter) {
23
+ params.push(schemaFilter);
24
+ schemaClause = `AND src_ns.nspname = $${String(params.length)}`;
25
+ }
26
+ const extensionSchemaExclude = !schemaFilter && excludeExtensionSchemas !== false
27
+ ? "AND src_ns.nspname NOT IN ('cron', 'topology', 'tiger', 'tiger_data')"
28
+ : "";
29
+ const result = await adapter.executeQuery(`SELECT
30
+ c.conname AS constraint_name,
31
+ src_ns.nspname AS from_schema,
32
+ src_t.relname AS from_table,
33
+ array_agg(DISTINCT src_a.attname ORDER BY src_a.attname) AS from_columns,
34
+ ref_ns.nspname AS to_schema,
35
+ ref_t.relname AS to_table,
36
+ array_agg(DISTINCT ref_a.attname ORDER BY ref_a.attname) AS to_columns,
37
+ CASE c.confdeltype
38
+ WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT'
39
+ WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL'
40
+ WHEN 'd' THEN 'SET DEFAULT'
41
+ END AS on_delete,
42
+ CASE c.confupdtype
43
+ WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT'
44
+ WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL'
45
+ WHEN 'd' THEN 'SET DEFAULT'
46
+ END AS on_update
47
+ FROM pg_constraint c
48
+ JOIN pg_class src_t ON src_t.oid = c.conrelid
49
+ JOIN pg_namespace src_ns ON src_ns.oid = src_t.relnamespace
50
+ JOIN pg_class ref_t ON ref_t.oid = c.confrelid
51
+ JOIN pg_namespace ref_ns ON ref_ns.oid = ref_t.relnamespace
52
+ JOIN pg_attribute src_a ON src_a.attrelid = src_t.oid AND src_a.attnum = ANY(c.conkey)
53
+ JOIN pg_attribute ref_a ON ref_a.attrelid = ref_t.oid AND ref_a.attnum = ANY(c.confkey)
54
+ WHERE c.contype = 'f'
55
+ AND src_ns.nspname NOT IN ('pg_catalog', 'information_schema')
56
+ AND src_ns.nspname !~ '^pg_toast'
57
+ ${extensionSchemaExclude}
58
+ ${schemaClause}
59
+ GROUP BY c.conname, src_ns.nspname, src_t.relname,
60
+ ref_ns.nspname, ref_t.relname, c.confdeltype, c.confupdtype
61
+ ORDER BY src_ns.nspname, src_t.relname, c.conname`, params.length > 0 ? params : undefined);
62
+ return (result.rows ?? []).map((row) => ({
63
+ constraintName: row["constraint_name"],
64
+ fromSchema: row["from_schema"],
65
+ fromTable: row["from_table"],
66
+ fromColumns: parseArrayColumn(row["from_columns"]),
67
+ toSchema: row["to_schema"],
68
+ toTable: row["to_table"],
69
+ toColumns: parseArrayColumn(row["to_columns"]),
70
+ onDelete: row["on_delete"],
71
+ onUpdate: row["on_update"],
72
+ }));
73
+ }
74
+ /**
75
+ * Fetch all user tables with row counts and sizes
76
+ */
77
+ export async function fetchTableNodes(adapter, schemaFilter, excludeExtensionSchemas) {
78
+ const params = [];
79
+ let schemaClause = "";
80
+ if (schemaFilter) {
81
+ params.push(schemaFilter);
82
+ schemaClause = `AND n.nspname = $${String(params.length)}`;
83
+ }
84
+ const extensionSchemaExclude = !schemaFilter && excludeExtensionSchemas !== false
85
+ ? "AND n.nspname NOT IN ('cron', 'topology', 'tiger', 'tiger_data')"
86
+ : "";
87
+ const result = await adapter.executeQuery(`SELECT
88
+ n.nspname AS schema,
89
+ c.relname AS table_name,
90
+ CASE WHEN c.reltuples = -1 THEN COALESCE(s.n_live_tup, 0)
91
+ ELSE c.reltuples END::bigint AS row_count,
92
+ pg_table_size(c.oid) AS size_bytes
93
+ FROM pg_class c
94
+ JOIN pg_namespace n ON n.oid = c.relnamespace
95
+ LEFT JOIN pg_stat_user_tables s ON s.relid = c.oid
96
+ WHERE c.relkind IN ('r', 'p')
97
+ AND n.nspname NOT IN ('pg_catalog', 'information_schema')
98
+ AND n.nspname !~ '^pg_toast'
99
+ ${extensionSchemaExclude}
100
+ ${schemaClause}
101
+ ORDER BY n.nspname, c.relname`, params.length > 0 ? params : undefined);
102
+ return (result.rows ?? []).map((row) => ({
103
+ schema: row["schema"],
104
+ table: row["table_name"],
105
+ rowCount: Number(row["row_count"]) || 0,
106
+ sizeBytes: Number(row["size_bytes"]) || 0,
107
+ }));
108
+ }
109
+ /**
110
+ * Parse PostgreSQL array column (handles both native arrays and string format)
111
+ */
112
+ export function parseArrayColumn(value) {
113
+ if (Array.isArray(value))
114
+ return value;
115
+ if (typeof value === "string") {
116
+ const trimmed = value.replace(/^{|}$/g, "");
117
+ if (trimmed === "")
118
+ return [];
119
+ return trimmed.split(",").map((c) => c.trim().replace(/^"|"$/g, ""));
120
+ }
121
+ return [];
122
+ }
123
+ /**
124
+ * Create qualified table name
125
+ */
126
+ export function qualifiedName(schema, table) {
127
+ return `${schema}.${table}`;
128
+ }
129
+ // =============================================================================
130
+ // Graph algorithms
131
+ // =============================================================================
132
+ /**
133
+ * Detect circular dependencies using DFS
134
+ */
135
+ export function detectCycles(adjacency) {
136
+ const cycles = [];
137
+ const visited = new Set();
138
+ const inStack = new Set();
139
+ const stack = [];
140
+ function dfs(node) {
141
+ if (inStack.has(node)) {
142
+ // Found a cycle - extract it from the stack
143
+ const cycleStart = stack.indexOf(node);
144
+ if (cycleStart !== -1) {
145
+ cycles.push([...stack.slice(cycleStart), node]);
146
+ }
147
+ return;
148
+ }
149
+ if (visited.has(node))
150
+ return;
151
+ visited.add(node);
152
+ inStack.add(node);
153
+ stack.push(node);
154
+ for (const neighbor of adjacency.get(node) ?? []) {
155
+ dfs(neighbor);
156
+ }
157
+ stack.pop();
158
+ inStack.delete(node);
159
+ }
160
+ for (const node of adjacency.keys()) {
161
+ dfs(node);
162
+ }
163
+ return cycles;
164
+ }
165
+ /**
166
+ * Topological sort using Kahn's algorithm
167
+ * Returns null if cycles exist
168
+ */
169
+ export function topologicalSort(adjacency, allNodes) {
170
+ // Compute in-degrees
171
+ const inDegree = new Map();
172
+ for (const node of allNodes) {
173
+ inDegree.set(node, 0);
174
+ }
175
+ for (const [, neighbors] of adjacency) {
176
+ for (const n of neighbors) {
177
+ inDegree.set(n, (inDegree.get(n) ?? 0) + 1);
178
+ }
179
+ }
180
+ // Enqueue nodes with 0 in-degree
181
+ const queue = [];
182
+ for (const [node, degree] of inDegree) {
183
+ if (degree === 0) {
184
+ queue.push(node);
185
+ }
186
+ }
187
+ queue.sort(); // Deterministic ordering
188
+ const result = [];
189
+ while (queue.length > 0) {
190
+ const node = queue.shift();
191
+ if (node === undefined)
192
+ break;
193
+ result.push(node);
194
+ for (const neighbor of adjacency.get(node) ?? []) {
195
+ const newDegree = (inDegree.get(neighbor) ?? 1) - 1;
196
+ inDegree.set(neighbor, newDegree);
197
+ if (newDegree === 0) {
198
+ // Insert in sorted position for deterministic output
199
+ const insertIdx = queue.findIndex((q) => q > neighbor);
200
+ if (insertIdx === -1) {
201
+ queue.push(neighbor);
202
+ }
203
+ else {
204
+ queue.splice(insertIdx, 0, neighbor);
205
+ }
206
+ }
207
+ }
208
+ }
209
+ return result.length === allNodes.size ? result : null;
210
+ }
211
+ /**
212
+ * Calculate max depth from root nodes in DAG
213
+ */
214
+ function calculateMaxDepth(adjacency, roots) {
215
+ if (roots.length === 0)
216
+ return 0;
217
+ let maxDepth = 0;
218
+ const depthMap = new Map();
219
+ function dfs(node, depth, visited) {
220
+ if (visited.has(node))
221
+ return;
222
+ visited.add(node);
223
+ const currentMax = depthMap.get(node) ?? -1;
224
+ if (depth > currentMax) {
225
+ depthMap.set(node, depth);
226
+ if (depth > maxDepth)
227
+ maxDepth = depth;
228
+ }
229
+ for (const neighbor of adjacency.get(node) ?? []) {
230
+ dfs(neighbor, depth + 1, visited);
231
+ }
232
+ }
233
+ for (const root of roots) {
234
+ dfs(root, 0, new Set());
235
+ }
236
+ return maxDepth;
237
+ }
238
+ // =============================================================================
239
+ // pg_dependency_graph
240
+ // =============================================================================
241
+ export function createDependencyGraphTool(adapter) {
242
+ return {
243
+ name: "pg_dependency_graph",
244
+ description: "Get the full foreign key dependency graph with cascade paths, row counts, circular dependency detection, and severity assessment. Agent-optimized structured output.",
245
+ group: "introspection",
246
+ inputSchema: DependencyGraphSchemaBase,
247
+ outputSchema: DependencyGraphOutputSchema,
248
+ annotations: readOnly("Dependency Graph"),
249
+ icons: getToolIcons("introspection", readOnly("Dependency Graph")),
250
+ handler: async (params, _context) => {
251
+ try {
252
+ const parsed = DependencyGraphSchema.parse(params);
253
+ const includeRowCounts = parsed.includeRowCounts !== false;
254
+ const excludeExt = parsed.excludeExtensionSchemas;
255
+ const [fks, tables] = await Promise.all([
256
+ fetchForeignKeys(adapter, parsed.schema, excludeExt),
257
+ includeRowCounts
258
+ ? fetchTableNodes(adapter, parsed.schema, excludeExt)
259
+ : Promise.resolve([]),
260
+ ]);
261
+ const tableMap = new Map(tables.map((t) => [qualifiedName(t.schema, t.table), t]));
262
+ // Build adjacency list (from → to, meaning "from" depends on "to")
263
+ const adjacency = new Map();
264
+ const allNodes = new Set();
265
+ // Ensure all tables are in the node set even if they have no FKs
266
+ for (const t of tables) {
267
+ allNodes.add(qualifiedName(t.schema, t.table));
268
+ }
269
+ for (const fk of fks) {
270
+ const from = qualifiedName(fk.fromSchema, fk.fromTable);
271
+ const to = qualifiedName(fk.toSchema, fk.toTable);
272
+ allNodes.add(from);
273
+ allNodes.add(to);
274
+ const existing = adjacency.get(from) ?? [];
275
+ existing.push(to);
276
+ adjacency.set(from, existing);
277
+ }
278
+ // Find root tables (no dependencies) and leaf tables (no dependents)
279
+ const dependents = new Set();
280
+ for (const [, neighbors] of adjacency) {
281
+ for (const n of neighbors) {
282
+ dependents.add(n);
283
+ }
284
+ }
285
+ const rootTables = [...allNodes]
286
+ .filter((n) => !adjacency.has(n) || (adjacency.get(n)?.length ?? 0) === 0)
287
+ .sort();
288
+ const leafTables = [...allNodes]
289
+ .filter((n) => !dependents.has(n))
290
+ .sort();
291
+ // Detect cycles
292
+ const cycles = detectCycles(adjacency);
293
+ const maxDepth = calculateMaxDepth(adjacency, leafTables);
294
+ // Build nodes
295
+ const nodes = [...allNodes].sort().map((name) => {
296
+ const info = tableMap.get(name);
297
+ const parts = name.split(".");
298
+ return {
299
+ table: parts[1] ?? name,
300
+ schema: parts[0] ?? "public",
301
+ ...(includeRowCounts && info
302
+ ? { rowCount: info.rowCount, sizeBytes: info.sizeBytes }
303
+ : {}),
304
+ };
305
+ });
306
+ // Build edges
307
+ const edges = fks.map((fk) => ({
308
+ from: qualifiedName(fk.fromSchema, fk.fromTable),
309
+ to: qualifiedName(fk.toSchema, fk.toTable),
310
+ constraint: fk.constraintName,
311
+ columns: fk.fromColumns.map((col, i) => ({
312
+ from: col,
313
+ to: fk.toColumns[i] ?? col,
314
+ })),
315
+ onDelete: fk.onDelete,
316
+ onUpdate: fk.onUpdate,
317
+ }));
318
+ // Add hint for nonexistent/empty schema
319
+ const hint = parsed.schema !== undefined && allNodes.size === 0
320
+ ? `Schema '${parsed.schema}' returned no tables. Verify the schema exists with pg_list_schemas.`
321
+ : undefined;
322
+ return {
323
+ nodes,
324
+ edges,
325
+ circularDependencies: cycles,
326
+ stats: {
327
+ totalTables: allNodes.size,
328
+ totalRelationships: fks.length,
329
+ maxDepth,
330
+ rootTables,
331
+ leafTables,
332
+ },
333
+ ...(hint !== undefined && { hint }),
334
+ };
335
+ }
336
+ catch (error) {
337
+ return {
338
+ success: false,
339
+ error: formatPostgresError(error, {
340
+ tool: "pg_dependency_graph",
341
+ }),
342
+ };
343
+ }
344
+ },
345
+ };
346
+ }
347
+ // =============================================================================
348
+ // pg_topological_sort
349
+ // =============================================================================
350
+ export function createTopologicalSortTool(adapter) {
351
+ return {
352
+ name: "pg_topological_sort",
353
+ description: "Get tables in safe DDL execution order. 'create' direction: dependencies first (for CREATE TABLE). 'drop' direction: dependents first (for DROP TABLE).",
354
+ group: "introspection",
355
+ inputSchema: TopologicalSortSchemaBase,
356
+ outputSchema: TopologicalSortOutputSchema,
357
+ annotations: readOnly("Topological Sort"),
358
+ icons: getToolIcons("introspection", readOnly("Topological Sort")),
359
+ handler: async (params, _context) => {
360
+ try {
361
+ const parsed = TopologicalSortSchema.parse(params);
362
+ const direction = parsed.direction ?? "create";
363
+ const excludeExt = parsed.excludeExtensionSchemas;
364
+ const fks = await fetchForeignKeys(adapter, parsed.schema, excludeExt);
365
+ const tables = await fetchTableNodes(adapter, parsed.schema, excludeExt);
366
+ // Build adjacency: A depends on B means A→B
367
+ // For "create" order, we need B before A (dependencies first)
368
+ // For "drop" order, we need A before B (dependents first)
369
+ const adjacency = new Map();
370
+ const allNodes = new Set();
371
+ for (const t of tables) {
372
+ allNodes.add(qualifiedName(t.schema, t.table));
373
+ }
374
+ for (const fk of fks) {
375
+ const from = qualifiedName(fk.fromSchema, fk.fromTable);
376
+ const to = qualifiedName(fk.toSchema, fk.toTable);
377
+ allNodes.add(from);
378
+ allNodes.add(to);
379
+ }
380
+ // Build dependency graph: from→to means "from depends on to"
381
+ const dependsOn = new Map();
382
+ for (const fk of fks) {
383
+ const from = qualifiedName(fk.fromSchema, fk.fromTable);
384
+ const to = qualifiedName(fk.toSchema, fk.toTable);
385
+ if (from === to)
386
+ continue; // Self-references don't affect ordering
387
+ const deps = dependsOn.get(from) ?? new Set();
388
+ deps.add(to);
389
+ dependsOn.set(from, deps);
390
+ }
391
+ // For create order: edge from dependency → dependent (process deps first)
392
+ // For drop order: edge from dependent → dependency (process dependents first)
393
+ for (const fk of fks) {
394
+ const from = qualifiedName(fk.fromSchema, fk.fromTable);
395
+ const to = qualifiedName(fk.toSchema, fk.toTable);
396
+ if (from === to)
397
+ continue; // Self-references don't affect ordering
398
+ if (direction === "create") {
399
+ const existing = adjacency.get(to) ?? [];
400
+ existing.push(from);
401
+ adjacency.set(to, existing);
402
+ }
403
+ else {
404
+ const existing = adjacency.get(from) ?? [];
405
+ existing.push(to);
406
+ adjacency.set(from, existing);
407
+ }
408
+ }
409
+ const sorted = topologicalSort(adjacency, allNodes);
410
+ const cycles = sorted === null ? detectCycles(adjacency) : [];
411
+ // Compute level (depth in the dependency graph)
412
+ // Always use create-order traversal for consistent levels regardless of direction
413
+ const levelMap = new Map();
414
+ if (sorted) {
415
+ // For create direction, sorted is already in dependency order.
416
+ // For drop direction, we need create-order to compute levels correctly.
417
+ let createOrder;
418
+ if (direction === "create") {
419
+ createOrder = sorted;
420
+ }
421
+ else {
422
+ // Build create-direction adjacency and sort
423
+ const createAdj = new Map();
424
+ for (const fk of fks) {
425
+ const from = qualifiedName(fk.fromSchema, fk.fromTable);
426
+ const to = qualifiedName(fk.toSchema, fk.toTable);
427
+ if (from === to)
428
+ continue;
429
+ const existing = createAdj.get(to) ?? [];
430
+ existing.push(from);
431
+ createAdj.set(to, existing);
432
+ }
433
+ createOrder =
434
+ topologicalSort(createAdj, allNodes) ?? [...allNodes].sort();
435
+ }
436
+ for (const node of createOrder) {
437
+ const deps = dependsOn.get(node);
438
+ if (!deps || deps.size === 0) {
439
+ levelMap.set(node, 0);
440
+ }
441
+ else {
442
+ let maxParentLevel = 0;
443
+ for (const dep of deps) {
444
+ const parentLevel = levelMap.get(dep) ?? 0;
445
+ if (parentLevel >= maxParentLevel) {
446
+ maxParentLevel = parentLevel + 1;
447
+ }
448
+ }
449
+ levelMap.set(node, maxParentLevel);
450
+ }
451
+ }
452
+ }
453
+ const order = (sorted ?? [...allNodes].sort()).map((name) => {
454
+ const parts = name.split(".");
455
+ return {
456
+ table: parts[1] ?? name,
457
+ schema: parts[0] ?? "public",
458
+ level: levelMap.get(name) ?? 0,
459
+ dependencies: [...(dependsOn.get(name) ?? [])].sort(),
460
+ };
461
+ });
462
+ // Add hint for nonexistent/empty schema
463
+ const hint = parsed.schema !== undefined && allNodes.size === 0
464
+ ? `Schema '${parsed.schema}' returned no tables. Verify the schema exists with pg_list_schemas.`
465
+ : undefined;
466
+ return {
467
+ order,
468
+ direction,
469
+ hasCycles: sorted === null,
470
+ ...(cycles.length > 0 ? { cycles } : {}),
471
+ ...(hint !== undefined && { hint }),
472
+ };
473
+ }
474
+ catch (error) {
475
+ return {
476
+ success: false,
477
+ error: formatPostgresError(error, {
478
+ tool: "pg_topological_sort",
479
+ }),
480
+ };
481
+ }
482
+ },
483
+ };
484
+ }
485
+ // =============================================================================
486
+ // pg_cascade_simulator
487
+ // =============================================================================
488
+ export function createCascadeSimulatorTool(adapter) {
489
+ return {
490
+ name: "pg_cascade_simulator",
491
+ description: "Simulate the impact of DELETE, DROP, or TRUNCATE on a table. Returns affected tables, estimated row counts, cascade paths, and severity assessment.",
492
+ group: "introspection",
493
+ inputSchema: CascadeSimulatorSchemaBase,
494
+ outputSchema: CascadeSimulatorOutputSchema,
495
+ annotations: readOnly("Cascade Simulator"),
496
+ icons: getToolIcons("introspection", readOnly("Cascade Simulator")),
497
+ handler: async (params, _context) => {
498
+ try {
499
+ const parsed = CascadeSimulatorSchema.parse(params);
500
+ const schema = parsed.schema ?? "public";
501
+ const operation = parsed.operation ?? "DELETE";
502
+ const sourceQName = qualifiedName(schema, parsed.table);
503
+ // Cascade simulator must include ALL schemas for accurate cascade path tracing
504
+ const [fks, tables] = await Promise.all([
505
+ fetchForeignKeys(adapter, undefined, false),
506
+ fetchTableNodes(adapter, undefined, false),
507
+ ]);
508
+ const tableMap = new Map(tables.map((t) => [qualifiedName(t.schema, t.table), t]));
509
+ // Check if source table exists
510
+ if (!tableMap.has(sourceQName)) {
511
+ return {
512
+ sourceTable: sourceQName,
513
+ operation,
514
+ affectedTables: [],
515
+ severity: "low",
516
+ stats: {
517
+ totalTablesAffected: 0,
518
+ cascadeActions: 0,
519
+ blockingActions: 0,
520
+ setNullActions: 0,
521
+ maxDepth: 0,
522
+ },
523
+ error: `Table '${sourceQName}' not found. Use pg_list_tables to verify.`,
524
+ };
525
+ }
526
+ // Build reverse adjacency: for each table, find what references it
527
+ // (which tables have FKs pointing TO this table)
528
+ const referencedBy = new Map();
529
+ for (const fk of fks) {
530
+ const to = qualifiedName(fk.toSchema, fk.toTable);
531
+ const existing = referencedBy.get(to) ?? [];
532
+ existing.push(fk);
533
+ referencedBy.set(to, existing);
534
+ }
535
+ const affected = [];
536
+ const visited = new Set();
537
+ const queue = [{ tableName: sourceQName, path: [sourceQName], depth: 0 }];
538
+ visited.add(sourceQName);
539
+ let cascadeActions = 0;
540
+ let blockingActions = 0;
541
+ let setNullActions = 0;
542
+ while (queue.length > 0) {
543
+ const current = queue.shift();
544
+ if (current === undefined)
545
+ break;
546
+ const refs = referencedBy.get(current.tableName) ?? [];
547
+ for (const ref of refs) {
548
+ const refQName = qualifiedName(ref.fromSchema, ref.fromTable);
549
+ if (visited.has(refQName))
550
+ continue;
551
+ visited.add(refQName);
552
+ const action = operation === "DELETE" ? ref.onDelete : "CASCADE";
553
+ const tableInfo = tableMap.get(refQName);
554
+ if (action === "CASCADE") {
555
+ cascadeActions++;
556
+ affected.push({
557
+ table: ref.fromTable,
558
+ schema: ref.fromSchema,
559
+ action: "CASCADE",
560
+ estimatedRows: tableInfo?.rowCount,
561
+ path: [...current.path, refQName],
562
+ depth: current.depth + 1,
563
+ });
564
+ // Continue traversal for cascade
565
+ queue.push({
566
+ tableName: refQName,
567
+ path: [...current.path, refQName],
568
+ depth: current.depth + 1,
569
+ });
570
+ }
571
+ else if (action === "RESTRICT" || action === "NO ACTION") {
572
+ blockingActions++;
573
+ affected.push({
574
+ table: ref.fromTable,
575
+ schema: ref.fromSchema,
576
+ action,
577
+ estimatedRows: tableInfo?.rowCount,
578
+ path: [...current.path, refQName],
579
+ depth: current.depth + 1,
580
+ });
581
+ }
582
+ else if (action === "SET NULL" || action === "SET DEFAULT") {
583
+ setNullActions++;
584
+ affected.push({
585
+ table: ref.fromTable,
586
+ schema: ref.fromSchema,
587
+ action,
588
+ estimatedRows: tableInfo?.rowCount,
589
+ path: [...current.path, refQName],
590
+ depth: current.depth + 1,
591
+ });
592
+ }
593
+ }
594
+ }
595
+ const maxDepth = affected.reduce((max, a) => Math.max(max, a.depth), 0);
596
+ // Severity assessment
597
+ let severity;
598
+ if (blockingActions > 0) {
599
+ severity = "critical"; // Operation will fail
600
+ }
601
+ else if (operation !== "DELETE" && cascadeActions > 0) {
602
+ severity = "critical"; // DROP/TRUNCATE force-cascades everything
603
+ }
604
+ else if (cascadeActions > 5 || maxDepth > 3) {
605
+ severity = "high";
606
+ }
607
+ else if (cascadeActions > 0) {
608
+ severity = "medium";
609
+ }
610
+ else {
611
+ severity = "low";
612
+ }
613
+ return {
614
+ sourceTable: sourceQName,
615
+ operation,
616
+ affectedTables: affected,
617
+ severity,
618
+ stats: {
619
+ totalTablesAffected: affected.length,
620
+ cascadeActions,
621
+ blockingActions,
622
+ setNullActions,
623
+ maxDepth,
624
+ },
625
+ };
626
+ }
627
+ catch (error) {
628
+ return {
629
+ success: false,
630
+ error: formatPostgresError(error, {
631
+ tool: "pg_cascade_simulator",
632
+ }),
633
+ };
634
+ }
635
+ },
636
+ };
637
+ }
638
+ //# sourceMappingURL=graph.js.map