pg-admin-mcp 0.0.0-stage → 0.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 (130) hide show
  1. package/README.md +608 -2
  2. package/dist/config/env.js +67 -0
  3. package/dist/config/env.js.map +1 -0
  4. package/dist/config/profiles.js +257 -0
  5. package/dist/config/profiles.js.map +1 -0
  6. package/dist/core/audit-context.js +21 -0
  7. package/dist/core/audit-context.js.map +1 -0
  8. package/dist/core/audit.js +91 -0
  9. package/dist/core/audit.js.map +1 -0
  10. package/dist/core/brands.js +24 -0
  11. package/dist/core/brands.js.map +1 -0
  12. package/dist/core/classifier.js +279 -0
  13. package/dist/core/classifier.js.map +1 -0
  14. package/dist/core/errors.js +197 -0
  15. package/dist/core/errors.js.map +1 -0
  16. package/dist/core/format.js +258 -0
  17. package/dist/core/format.js.map +1 -0
  18. package/dist/core/guards.js +513 -0
  19. package/dist/core/guards.js.map +1 -0
  20. package/dist/core/identifiers.js +431 -0
  21. package/dist/core/identifiers.js.map +1 -0
  22. package/dist/core/limits.js +79 -0
  23. package/dist/core/limits.js.map +1 -0
  24. package/dist/core/logger.js +34 -0
  25. package/dist/core/logger.js.map +1 -0
  26. package/dist/core/paginate.js +195 -0
  27. package/dist/core/paginate.js.map +1 -0
  28. package/dist/core/paths.js +392 -0
  29. package/dist/core/paths.js.map +1 -0
  30. package/dist/core/policy.js +98 -0
  31. package/dist/core/policy.js.map +1 -0
  32. package/dist/core/shutdown.js +10 -0
  33. package/dist/core/shutdown.js.map +1 -0
  34. package/dist/core/stdout-guard.js +25 -0
  35. package/dist/core/stdout-guard.js.map +1 -0
  36. package/dist/db/catalog.js +1006 -0
  37. package/dist/db/catalog.js.map +1 -0
  38. package/dist/db/pool.js +158 -0
  39. package/dist/db/pool.js.map +1 -0
  40. package/dist/db/session.js +258 -0
  41. package/dist/db/session.js.map +1 -0
  42. package/dist/db/types.js +2 -0
  43. package/dist/db/types.js.map +1 -0
  44. package/dist/index.js +91 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/resources/index.js +88 -0
  47. package/dist/resources/index.js.map +1 -0
  48. package/dist/runtime/binaries.js +356 -0
  49. package/dist/runtime/binaries.js.map +1 -0
  50. package/dist/runtime/env-file.js +62 -0
  51. package/dist/runtime/env-file.js.map +1 -0
  52. package/dist/runtime/environment.js +34 -0
  53. package/dist/runtime/environment.js.map +1 -0
  54. package/dist/server.js +106 -0
  55. package/dist/server.js.map +1 -0
  56. package/dist/snapshot/capture.js +189 -0
  57. package/dist/snapshot/capture.js.map +1 -0
  58. package/dist/snapshot/diff.js +254 -0
  59. package/dist/snapshot/diff.js.map +1 -0
  60. package/dist/snapshot/migrate.js +1596 -0
  61. package/dist/snapshot/migrate.js.map +1 -0
  62. package/dist/snapshot/model.js +80 -0
  63. package/dist/snapshot/model.js.map +1 -0
  64. package/dist/tools/_archive_meta.js +138 -0
  65. package/dist/tools/_archive_meta.js.map +1 -0
  66. package/dist/tools/_batch_shared.js +73 -0
  67. package/dist/tools/_batch_shared.js.map +1 -0
  68. package/dist/tools/_export_format.js +107 -0
  69. package/dist/tools/_export_format.js.map +1 -0
  70. package/dist/tools/_object_kinds.js +97 -0
  71. package/dist/tools/_object_kinds.js.map +1 -0
  72. package/dist/tools/_relation_detail.js +55 -0
  73. package/dist/tools/_relation_detail.js.map +1 -0
  74. package/dist/tools/_shared.js +17 -0
  75. package/dist/tools/_shared.js.map +1 -0
  76. package/dist/tools/_snapshot_io.js +238 -0
  77. package/dist/tools/_snapshot_io.js.map +1 -0
  78. package/dist/tools/admin/_shared.js +18 -0
  79. package/dist/tools/admin/_shared.js.map +1 -0
  80. package/dist/tools/admin/extensions.js +80 -0
  81. package/dist/tools/admin/extensions.js.map +1 -0
  82. package/dist/tools/admin/grants.js +207 -0
  83. package/dist/tools/admin/grants.js.map +1 -0
  84. package/dist/tools/admin/index.js +138 -0
  85. package/dist/tools/admin/index.js.map +1 -0
  86. package/dist/tools/admin/maintenance.js +106 -0
  87. package/dist/tools/admin/maintenance.js.map +1 -0
  88. package/dist/tools/admin/roles.js +144 -0
  89. package/dist/tools/admin/roles.js.map +1 -0
  90. package/dist/tools/admin/sessions.js +104 -0
  91. package/dist/tools/admin/sessions.js.map +1 -0
  92. package/dist/tools/admin/stats.js +63 -0
  93. package/dist/tools/admin/stats.js.map +1 -0
  94. package/dist/tools/backup.js +288 -0
  95. package/dist/tools/backup.js.map +1 -0
  96. package/dist/tools/connection_status.js +138 -0
  97. package/dist/tools/connection_status.js.map +1 -0
  98. package/dist/tools/copy.js +355 -0
  99. package/dist/tools/copy.js.map +1 -0
  100. package/dist/tools/delete_batch.js +73 -0
  101. package/dist/tools/delete_batch.js.map +1 -0
  102. package/dist/tools/describe_object.js +87 -0
  103. package/dist/tools/describe_object.js.map +1 -0
  104. package/dist/tools/execute_sql.js +395 -0
  105. package/dist/tools/execute_sql.js.map +1 -0
  106. package/dist/tools/explain.js +134 -0
  107. package/dist/tools/explain.js.map +1 -0
  108. package/dist/tools/export.js +215 -0
  109. package/dist/tools/export.js.map +1 -0
  110. package/dist/tools/get_schema.js +148 -0
  111. package/dist/tools/get_schema.js.map +1 -0
  112. package/dist/tools/index.js +40 -0
  113. package/dist/tools/index.js.map +1 -0
  114. package/dist/tools/insert_batch.js +212 -0
  115. package/dist/tools/insert_batch.js.map +1 -0
  116. package/dist/tools/list_objects.js +160 -0
  117. package/dist/tools/list_objects.js.map +1 -0
  118. package/dist/tools/prepare_migration.js +112 -0
  119. package/dist/tools/prepare_migration.js.map +1 -0
  120. package/dist/tools/restore.js +301 -0
  121. package/dist/tools/restore.js.map +1 -0
  122. package/dist/tools/schema_diff.js +79 -0
  123. package/dist/tools/schema_diff.js.map +1 -0
  124. package/dist/tools/schema_snapshot.js +57 -0
  125. package/dist/tools/schema_snapshot.js.map +1 -0
  126. package/dist/tools/select.js +162 -0
  127. package/dist/tools/select.js.map +1 -0
  128. package/dist/tools/update_batch.js +154 -0
  129. package/dist/tools/update_batch.js.map +1 -0
  130. package/package.json +47 -5
@@ -0,0 +1,258 @@
1
+ import { assertNever } from '../tools/_shared.js';
2
+ import { DEFAULT_LIMITS, truncateRows } from './limits.js';
3
+ /** The two pg type OIDs whose JS runtime shape (`string`) is not self-describing — see the module doc. */
4
+ const OID = {
5
+ NUMERIC: 1700,
6
+ INT8: 20,
7
+ };
8
+ const CELL_MAX_CHARS = 300;
9
+ const NULL_TEXT = 'NULL';
10
+ /**
11
+ * Placeholder for a cell that could not be rendered at all — a raw value
12
+ * `JSON.stringify` cannot handle (a circular object reached through a
13
+ * jsonb-typed column, or similar) rather than an ordinary NULL/empty value.
14
+ * One bad cell degrades to this instead of failing the whole tool call.
15
+ */
16
+ const UNRENDERABLE = '[unrenderable value]';
17
+ /** `JSON.stringify` replacer: BigInt has no native JSON representation, so render it as its decimal text instead of throwing. */
18
+ function jsonReplacer(_key, value) {
19
+ return typeof value === 'bigint' ? value.toString() : value;
20
+ }
21
+ /** True for the `postgres-interval` object `pg` parses an `interval` column into. */
22
+ function isPgInterval(value) {
23
+ return typeof value.toPostgres === 'function';
24
+ }
25
+ /**
26
+ * Renders one cell to plain text, unclipped. `null`/`undefined` -> bare
27
+ * `NULL` — the one unquoted case, which is what makes it distinguishable
28
+ * from the *string* `'NULL'` (quoted, like every other string) and from `''`
29
+ * (renders as `''`).
30
+ */
31
+ function renderScalar(value, dataTypeId) {
32
+ if (value === null || value === undefined)
33
+ return NULL_TEXT;
34
+ if (typeof value === 'bigint')
35
+ return value.toString();
36
+ if (typeof value === 'string') {
37
+ // numeric/int8 arrive as strings to preserve precision / 64-bit range —
38
+ // rendered bare (no quotes) since they are numbers, never coerced.
39
+ if (dataTypeId === OID.NUMERIC || dataTypeId === OID.INT8)
40
+ return value;
41
+ return `'${value}'`;
42
+ }
43
+ if (Buffer.isBuffer(value))
44
+ return `\\x${value.toString('hex')}`; // bytea, psql-style
45
+ if (value instanceof Date)
46
+ return value.toISOString(); // date/timestamp/timestamptz
47
+ if (Array.isArray(value))
48
+ return `{${value.map((el) => renderScalar(el, undefined)).join(',')}}`; // psql array syntax
49
+ if (typeof value === 'object' && isPgInterval(value))
50
+ return value.toPostgres(); // interval
51
+ if (typeof value === 'object')
52
+ return JSON.stringify(value, jsonReplacer); // json/jsonb — throws on a circular ref, caught by callers
53
+ return String(value); // number, boolean
54
+ }
55
+ /**
56
+ * `formatCell` and `jsonRow` are the two call sites that actually reach a raw
57
+ * cell value from row data (as opposed to a value this module already knows
58
+ * to be well-formed). Both wrap `render` in the same try/catch so a single
59
+ * malformed cell — most likely a circular object nested in a jsonb column —
60
+ * degrades to {@link UNRENDERABLE} instead of throwing out of the whole
61
+ * `formatOutcome` call.
62
+ */
63
+ function renderCellSafely(render, onError) {
64
+ try {
65
+ return render();
66
+ }
67
+ catch {
68
+ return onError;
69
+ }
70
+ }
71
+ function formatCell(value, dataTypeId) {
72
+ const text = renderCellSafely(() => renderScalar(value, dataTypeId), UNRENDERABLE);
73
+ if (text.length <= CELL_MAX_CHARS)
74
+ return text;
75
+ const clippedChars = text.length - CELL_MAX_CHARS;
76
+ return `${text.slice(0, CELL_MAX_CHARS)} …[clipped, ${clippedChars} more chars]`;
77
+ }
78
+ /** JSON-safe mirror of {@link renderScalar} for `structuredContent` — same type rules, real JSON values instead of the quoted-text table form. */
79
+ function toJsonSafe(value, dataTypeId) {
80
+ void dataTypeId; // numeric/int8 already stay strings with no special case needed here
81
+ if (value === null || value === undefined)
82
+ return null;
83
+ if (typeof value === 'bigint')
84
+ return value.toString();
85
+ if (typeof value === 'string')
86
+ return value;
87
+ if (Buffer.isBuffer(value))
88
+ return `\\x${value.toString('hex')}`;
89
+ if (value instanceof Date)
90
+ return value.toISOString();
91
+ if (Array.isArray(value))
92
+ return value.map((el) => toJsonSafe(el, undefined));
93
+ if (typeof value === 'object' && isPgInterval(value))
94
+ return value.toPostgres();
95
+ if (typeof value === 'object') {
96
+ // Unlike renderScalar, this branch does not stringify — it hands the
97
+ // object straight through for the SDK to JSON-encode later. That means a
98
+ // circular object slips past unnoticed here; probe it the same way the
99
+ // eventual encoder will, in jsonRow below, rather than duplicating the
100
+ // check for every object-typed cell whether or not it is ever used.
101
+ return value;
102
+ }
103
+ return value;
104
+ }
105
+ function pad(text, width) {
106
+ return text.length >= width ? text : text + ' '.repeat(width - text.length);
107
+ }
108
+ /** Compact, aligned, ASCII-only text table — no ANSI, no box-drawing that breaks on narrow widths. */
109
+ function renderTable(columns, rows) {
110
+ const headers = columns.map((c) => c.name);
111
+ const cellRows = rows.map((row) => columns.map((c) => formatCell(row[c.name], c.dataTypeId)));
112
+ const widths = headers.map((h, i) => {
113
+ let width = h.length;
114
+ for (const r of cellRows)
115
+ width = Math.max(width, r[i]?.length ?? 0);
116
+ return width;
117
+ });
118
+ const headerLine = headers.map((h, i) => pad(h, widths[i] ?? 0)).join(' | ');
119
+ const sepLine = widths.map((w) => '-'.repeat(w)).join('-+-');
120
+ const bodyLines = cellRows.map((r) => r.map((cell, i) => pad(cell, widths[i] ?? 0)).join(' | '));
121
+ return [headerLine, sepLine, ...bodyLines].join('\n');
122
+ }
123
+ function truncationMarker(t, caps, opts = {}) {
124
+ if (t.reason === null)
125
+ return null;
126
+ const singular = opts.nounSingular ?? 'row';
127
+ const noun = t.truncatedRows === 1 ? singular : `${singular}s`;
128
+ // `capLabel` only overrides the row-cap description — a byte-cap cut is
129
+ // still accurately described as a byte cap regardless of what caused any
130
+ // *row*-level truncation upstream (e.g. `list_objects`'s pageSize).
131
+ const capDesc = t.reason === 'rows' ? (opts.capLabel ?? `row cap ${caps.maxRows}`) : `byte cap ${caps.maxBytes}`;
132
+ const cursorSuffix = opts.cursor === undefined ? '' : ` — pass cursor: "${opts.cursor}" to continue`;
133
+ return `… truncated: ${t.truncatedRows} more ${noun} (${capDesc})${cursorSuffix}`;
134
+ }
135
+ function jsonRow(row, columns) {
136
+ return Object.fromEntries(columns.map((c) => {
137
+ const safe = renderCellSafely(() => toJsonSafe(row[c.name], c.dataTypeId), UNRENDERABLE);
138
+ // toJsonSafe's plain-object branch only passes objects through — it
139
+ // never proves they are actually JSON-serializable (a circular jsonb
140
+ // value would sail through undetected). Probe it the same way the
141
+ // eventual JSON-RPC encoder will.
142
+ const probed = renderCellSafely(() => {
143
+ JSON.stringify(safe, jsonReplacer);
144
+ return safe;
145
+ }, UNRENDERABLE);
146
+ return [c.name, probed];
147
+ }));
148
+ }
149
+ function textResult(text, structuredContent) {
150
+ return { content: [{ type: 'text', text }], structuredContent };
151
+ }
152
+ function formatRows(outcome, opts) {
153
+ const limits = opts.limits ?? DEFAULT_LIMITS;
154
+ // Byte-cap enforcement lives here: a SQL `LIMIT` bounds row *count*, never
155
+ // serialized *size*, so this is where an oversized result actually gets
156
+ // cut — measuring real bytes and never serializing past the cap (see
157
+ // `core/limits.ts#truncateRows`). Measured against the *rendered* form
158
+ // (`jsonRow`, the same transform `structuredContent.rows` below is built
159
+ // from), not the raw row: a raw `bytea` cell is a `Buffer`, and
160
+ // `JSON.stringify`-ing a `Buffer` directly produces its `{"type":"Buffer",
161
+ // "data":[...]}` array form — about 1.8x the size of the hex-encoded text
162
+ // actually shipped — which overestimated the byte cost of binary-heavy
163
+ // rows and misreported `truncatedBytes`/the marker's cap figure. Wrapping
164
+ // `jsonRow` here (rather than calling it once up front) keeps the early-stop
165
+ // property: `truncateRows` only serializes rows up to the one that trips
166
+ // the cap, so the discarded tail is still never rendered or serialized.
167
+ const byBytes = truncateRows(outcome.rows, limits, (row) => JSON.stringify(jsonRow(row, outcome.columns), jsonReplacer));
168
+ // `outcome.truncated`/`rowCount` carry whatever the caller already knew was
169
+ // cut upstream (e.g. a `LIMIT maxRows + 1` probe); combined with whatever
170
+ // this pass additionally cut for byte size.
171
+ const upstreamTruncatedRows = Math.max(outcome.rowCount - outcome.rows.length, 0);
172
+ const truncatedRows = upstreamTruncatedRows + byBytes.truncation.truncatedRows;
173
+ const reason = byBytes.truncation.reason ?? (outcome.truncated || upstreamTruncatedRows > 0 ? 'rows' : null);
174
+ const truncation = { truncatedRows, truncatedBytes: byBytes.truncation.truncatedBytes, reason };
175
+ const kept = byBytes.rows;
176
+ const table = kept.length === 0 ? '(no rows)' : renderTable(outcome.columns, kept);
177
+ const marker = truncationMarker(truncation, limits, {
178
+ ...(outcome.rowCapLabel === undefined ? {} : { capLabel: outcome.rowCapLabel }),
179
+ ...(outcome.truncationNoun === undefined ? {} : { nounSingular: outcome.truncationNoun }),
180
+ ...(outcome.nextCursor === undefined ? {} : { cursor: outcome.nextCursor }),
181
+ });
182
+ const summary = `${kept.length} row(s) returned${outcome.rowCount !== kept.length ? ` (of ${outcome.rowCount})` : ''}`;
183
+ const text = [summary, '', table, ...(marker === null ? [] : ['', marker])].join('\n');
184
+ return textResult(text, {
185
+ kind: 'rows',
186
+ columns: outcome.columns.map((c) => c.name),
187
+ rows: kept.map((row) => jsonRow(row, outcome.columns)),
188
+ rowCount: outcome.rowCount,
189
+ truncation,
190
+ ...(outcome.nextCursor === undefined ? {} : { nextCursor: outcome.nextCursor }),
191
+ });
192
+ }
193
+ function formatMutation(outcome) {
194
+ const text = `${outcome.rowCount} row(s) affected — ${outcome.committed ? 'committed' : 'rolled back'}`;
195
+ return textResult(text, { kind: 'mutation', rowCount: outcome.rowCount, committed: outcome.committed });
196
+ }
197
+ function formatDryRun(outcome) {
198
+ // No `ColumnMeta` travels with a dry-run preview, so the numeric/int8
199
+ // string-vs-text disambiguation above is unavailable here — every string
200
+ // preview value renders quoted, the safe (text-like) default. Documented
201
+ // limitation, not a bug: see the phase report for why.
202
+ const previewColumns = Object.keys(outcome.preview[0] ?? {}).map((name) => ({ name }));
203
+ const previewTable = outcome.preview.length === 0 ? '(no preview rows)' : renderTable(previewColumns, outcome.preview);
204
+ const text = [
205
+ `DRY RUN — ${outcome.rowCount} row(s) would be affected (not committed)`,
206
+ // Immediately under the count, not at the end: this is where a tool says
207
+ // the count does not mean what it looks like (DDL reports none at all).
208
+ ...(outcome.note === undefined ? [] : ['', outcome.note]),
209
+ '',
210
+ 'Preview:',
211
+ previewTable,
212
+ '',
213
+ 'expect (pass back verbatim with confirm:true to apply):',
214
+ JSON.stringify(outcome.expect),
215
+ ].join('\n');
216
+ return textResult(text, {
217
+ kind: 'dryRun',
218
+ rowCount: outcome.rowCount,
219
+ preview: outcome.preview.map((row) => jsonRow(row, previewColumns)),
220
+ expect: outcome.expect,
221
+ ...(outcome.note === undefined ? {} : { note: outcome.note }),
222
+ });
223
+ }
224
+ function formatFile(outcome) {
225
+ const lines = [`File written: ${outcome.path} (${outcome.bytes} bytes)`];
226
+ if (outcome.hostPath !== undefined)
227
+ lines.push(`Host path: ${outcome.hostPath}`);
228
+ for (const [key, value] of Object.entries(outcome.meta ?? {})) {
229
+ lines.push(`${key}: ${renderCellSafely(() => renderScalar(value, undefined), UNRENDERABLE)}`);
230
+ }
231
+ return textResult(lines.join('\n'), {
232
+ kind: 'file',
233
+ path: outcome.path,
234
+ bytes: outcome.bytes,
235
+ ...(outcome.hostPath === undefined ? {} : { hostPath: outcome.hostPath }),
236
+ ...(outcome.meta === undefined ? {} : { meta: outcome.meta }),
237
+ });
238
+ }
239
+ function formatReport(outcome) {
240
+ return textResult(JSON.stringify(outcome.data, null, 2), { kind: 'report', data: outcome.data });
241
+ }
242
+ export function formatOutcome(outcome, opts = {}) {
243
+ switch (outcome.kind) {
244
+ case 'rows':
245
+ return formatRows(outcome, opts);
246
+ case 'mutation':
247
+ return formatMutation(outcome);
248
+ case 'dryRun':
249
+ return formatDryRun(outcome);
250
+ case 'file':
251
+ return formatFile(outcome);
252
+ case 'report':
253
+ return formatReport(outcome);
254
+ default:
255
+ return assertNever(outcome);
256
+ }
257
+ }
258
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/core/format.ts"],"names":[],"mappings":"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"}