@neverinfamous/postgres-mcp 2.1.0 → 2.2.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.
- package/README.md +58 -52
- package/dist/__tests__/benchmarks/codemode.bench.js +3 -3
- package/dist/__tests__/benchmarks/codemode.bench.js.map +1 -1
- package/dist/__tests__/benchmarks/connection-pool.bench.js +3 -3
- package/dist/__tests__/benchmarks/connection-pool.bench.js.map +1 -1
- package/dist/__tests__/benchmarks/introspection-migration.bench.d.ts +11 -0
- package/dist/__tests__/benchmarks/introspection-migration.bench.d.ts.map +1 -0
- package/dist/__tests__/benchmarks/introspection-migration.bench.js +143 -0
- package/dist/__tests__/benchmarks/introspection-migration.bench.js.map +1 -0
- package/dist/__tests__/benchmarks/resource-prompts.bench.js +0 -64
- package/dist/__tests__/benchmarks/resource-prompts.bench.js.map +1 -1
- package/dist/__tests__/benchmarks/schema-parsing.bench.js +4 -4
- package/dist/__tests__/benchmarks/schema-parsing.bench.js.map +1 -1
- package/dist/__tests__/benchmarks/tool-filtering.bench.js +17 -8
- package/dist/__tests__/benchmarks/tool-filtering.bench.js.map +1 -1
- package/dist/adapters/DatabaseAdapter.d.ts +0 -4
- package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
- package/dist/adapters/DatabaseAdapter.js +0 -13
- package/dist/adapters/DatabaseAdapter.js.map +1 -1
- package/dist/adapters/postgresql/PostgresAdapter.d.ts +0 -4
- package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
- package/dist/adapters/postgresql/PostgresAdapter.js +3 -6
- package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
- package/dist/adapters/postgresql/schemas/core/queries.d.ts +4 -4
- package/dist/adapters/postgresql/schemas/introspection.d.ts +14 -37
- package/dist/adapters/postgresql/schemas/introspection.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/introspection.js +71 -29
- package/dist/adapters/postgresql/schemas/introspection.js.map +1 -1
- package/dist/adapters/postgresql/schemas/vector.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/vector.js +2 -4
- package/dist/adapters/postgresql/schemas/vector.js.map +1 -1
- package/dist/adapters/postgresql/tools/introspection/analysis.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/introspection/analysis.js +158 -127
- package/dist/adapters/postgresql/tools/introspection/analysis.js.map +1 -1
- package/dist/adapters/postgresql/tools/introspection/graph.d.ts +1 -1
- package/dist/adapters/postgresql/tools/introspection/graph.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/introspection/graph.js +12 -29
- package/dist/adapters/postgresql/tools/introspection/graph.js.map +1 -1
- package/dist/adapters/postgresql/tools/introspection/index.d.ts +9 -7
- package/dist/adapters/postgresql/tools/introspection/index.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/introspection/index.js +9 -14
- package/dist/adapters/postgresql/tools/introspection/index.js.map +1 -1
- package/dist/adapters/postgresql/tools/introspection/migration.d.ts +1 -1
- package/dist/adapters/postgresql/tools/introspection/migration.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/introspection/migration.js +62 -86
- package/dist/adapters/postgresql/tools/introspection/migration.js.map +1 -1
- package/dist/adapters/postgresql/tools/migration/index.d.ts +15 -0
- package/dist/adapters/postgresql/tools/migration/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/migration/index.js +23 -0
- package/dist/adapters/postgresql/tools/migration/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/anomaly-detection.d.ts +18 -0
- package/dist/adapters/postgresql/tools/performance/anomaly-detection.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/anomaly-detection.js +533 -0
- package/dist/adapters/postgresql/tools/performance/anomaly-detection.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/diagnostics.d.ts +11 -0
- package/dist/adapters/postgresql/tools/performance/diagnostics.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/diagnostics.js +332 -0
- package/dist/adapters/postgresql/tools/performance/diagnostics.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/index.d.ts +1 -1
- package/dist/adapters/postgresql/tools/performance/index.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/performance/index.js +7 -1
- package/dist/adapters/postgresql/tools/performance/index.js.map +1 -1
- package/dist/auth/scopes.d.ts.map +1 -1
- package/dist/auth/scopes.js +2 -0
- package/dist/auth/scopes.js.map +1 -1
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -1
- package/dist/codemode/api/index.d.ts +1 -0
- package/dist/codemode/api/index.d.ts.map +1 -1
- package/dist/codemode/api/index.js +3 -0
- package/dist/codemode/api/index.js.map +1 -1
- package/dist/codemode/api/maps.d.ts.map +1 -1
- package/dist/codemode/api/maps.js +18 -12
- package/dist/codemode/api/maps.js.map +1 -1
- package/dist/filtering/ToolConstants.d.ts +11 -11
- package/dist/filtering/ToolConstants.d.ts.map +1 -1
- package/dist/filtering/ToolConstants.js +28 -15
- package/dist/filtering/ToolConstants.js.map +1 -1
- package/dist/filtering/ToolFilter.d.ts +0 -32
- package/dist/filtering/ToolFilter.d.ts.map +1 -1
- package/dist/filtering/ToolFilter.js +0 -43
- package/dist/filtering/ToolFilter.js.map +1 -1
- package/dist/transports/http.d.ts +12 -0
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +19 -1
- package/dist/transports/http.js.map +1 -1
- package/dist/types/filtering.d.ts +1 -1
- package/dist/types/filtering.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/mcp.d.ts +0 -21
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/types/schema.d.ts +0 -79
- package/dist/types/schema.d.ts.map +1 -1
- package/dist/utils/fts-config.d.ts +0 -6
- package/dist/utils/fts-config.d.ts.map +1 -1
- package/dist/utils/fts-config.js +1 -1
- package/dist/utils/fts-config.js.map +1 -1
- package/dist/utils/icons.d.ts.map +1 -1
- package/dist/utils/icons.js +5 -0
- package/dist/utils/icons.js.map +1 -1
- package/dist/utils/identifiers.d.ts.map +1 -1
- package/dist/utils/identifiers.js +6 -6
- package/dist/utils/identifiers.js.map +1 -1
- package/dist/utils/progress-utils.d.ts +1 -12
- package/dist/utils/progress-utils.d.ts.map +1 -1
- package/dist/utils/progress-utils.js +0 -18
- package/dist/utils/progress-utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/utils/promptGenerator.d.ts +0 -20
- package/dist/utils/promptGenerator.d.ts.map +0 -1
- package/dist/utils/promptGenerator.js +0 -81
- package/dist/utils/promptGenerator.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- mcp-name: io.github.neverinfamous/postgres-mcp -->
|
|
4
4
|
|
|
5
|
-
**Last Updated March
|
|
5
|
+
**Last Updated March 9, 2026**
|
|
6
6
|
|
|
7
|
-
**PostgreSQL MCP Server** enabling AI assistants (AntiGravity, Claude, Cursor, etc.) to interact with PostgreSQL databases through the Model Context Protocol. Features **Code Mode** — a revolutionary approach that provides access to all
|
|
7
|
+
**PostgreSQL MCP Server** enabling AI assistants (AntiGravity, Claude, Cursor, etc.) to interact with PostgreSQL databases through the Model Context Protocol. Features **Code Mode** — a revolutionary approach that provides access to all 231 tools through a single, secure JavaScript sandbox, eliminating the massive token overhead of multi-step tool calls. Also includes schema introspection, migration tracking, smart tool filtering, deterministic error handling, connection pooling, HTTP/SSE Transport, OAuth 2.1 authentication, and extension support for citext, ltree, pgcrypto, pg_cron, pg_stat_kcache, pgvector, PostGIS, and HypoPG.
|
|
8
8
|
|
|
9
|
-
**
|
|
9
|
+
**231 Specialized Tools** · **20 Resources** · **19 AI-Powered Prompts**
|
|
10
10
|
|
|
11
11
|
[](https://github.com/neverinfamous/postgres-mcp)
|
|
12
12
|

|
|
@@ -17,29 +17,29 @@
|
|
|
17
17
|
[](https://github.com/neverinfamous/postgres-mcp/blob/main/SECURITY.md)
|
|
18
18
|

|
|
19
19
|
[](https://github.com/neverinfamous/postgres-mcp)
|
|
20
|
-
[](https://github.com/neverinfamous/postgres-mcp)
|
|
21
20
|
[](https://github.com/neverinfamous/postgres-mcp/actions/workflows/e2e.yml)
|
|
22
|
-
[](https://github.com/neverinfamous/postgres-mcp)
|
|
22
|
+
[](https://github.com/neverinfamous/postgres-mcp)
|
|
23
23
|
|
|
24
|
-
**[Docker Hub](https://hub.docker.com/r/writenotenow/postgres-mcp)** • **[npm Package](https://www.npmjs.com/package/@neverinfamous/postgres-mcp)** • **[MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.neverinfamous/postgres-mcp)** • **[Wiki](https://github.com/neverinfamous/postgres-mcp/wiki)** • **[Changelog](https://github.com/neverinfamous/postgres-mcp/blob/main/CHANGELOG.md)**
|
|
24
|
+
**[Docker Hub](https://hub.docker.com/r/writenotenow/postgres-mcp)** • **[npm Package](https://www.npmjs.com/package/@neverinfamous/postgres-mcp)** • **[MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.neverinfamous/postgres-mcp)** • **[Wiki](https://github.com/neverinfamous/postgres-mcp/wiki)** • **[Tool Reference](https://github.com/neverinfamous/postgres-mcp/wiki/Tool-Reference)** • **[Changelog](https://github.com/neverinfamous/postgres-mcp/blob/main/CHANGELOG.md)**
|
|
25
25
|
|
|
26
26
|
## 🎯 What Sets Us Apart
|
|
27
27
|
|
|
28
28
|
| Feature | Description |
|
|
29
29
|
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
30
|
-
| **
|
|
30
|
+
| **231 Specialized Tools** | The largest PostgreSQL tool collection for MCP — from core CRUD and native JSONB to pgvector, PostGIS, pg_cron, ltree, pgcrypto, introspection analysis, migration tracking, and 8 extension ecosystems |
|
|
31
31
|
| **20 Observability Resources** | Real-time schema, performance metrics, connection pool status, replication lag, vacuum stats, lock contention, and extension diagnostics |
|
|
32
32
|
| **19 AI-Powered Prompts** | Guided workflows for query building, schema design, performance tuning, and extension setup |
|
|
33
|
-
| **Code Mode** | **Massive Token Savings:** Execute complex, multi-step operations inside a fast, secure JavaScript sandbox. Instead of spending thousands of tokens on back-and-forth tool calls, Code Mode exposes all
|
|
33
|
+
| **Code Mode** | **Massive Token Savings:** Execute complex, multi-step operations inside a fast, secure JavaScript sandbox. Instead of spending thousands of tokens on back-and-forth tool calls, Code Mode exposes all 231 capabilities locally, reducing token overhead by up to 90% and supercharging AI agent reasoning. |
|
|
34
34
|
| **OAuth 2.1 + Access Control** | Enterprise-ready security with RFC 9728/8414 compliance, granular scopes (`read`, `write`, `admin`, `full`, `db:*`, `table:*:*`), and Keycloak integration |
|
|
35
|
-
| **Smart Tool Filtering** |
|
|
35
|
+
| **Smart Tool Filtering** | 22 tool groups + 16 shortcuts let you stay within IDE limits while exposing exactly what you need |
|
|
36
36
|
| **Dual HTTP Transport** | Streamable HTTP (`/mcp`) for modern clients + legacy SSE (`/sse`) for backward compatibility — both protocols supported simultaneously |
|
|
37
37
|
| **High-Performance Pooling** | Built-in connection pooling with health checks for efficient, concurrent database access |
|
|
38
38
|
| **8 Extension Ecosystems** | First-class support for **pgvector**, **PostGIS**, **pg_cron**, **pg_partman**, **pg_stat_kcache**, **citext**, **ltree**, and **pgcrypto** |
|
|
39
|
-
| **Introspection & Migration Tracking** | Simulate cascade impacts, generate safe DDL ordering, analyze constraint health, and track schema migrations with SHA-256 dedup — 12 agent-optimized tools
|
|
39
|
+
| **Introspection & Migration Tracking** | Simulate cascade impacts, generate safe DDL ordering, analyze constraint health, and track schema migrations with SHA-256 dedup — 12 agent-optimized tools split into read-only analysis and migration management groups |
|
|
40
40
|
| **Deterministic Error Handling** | Every tool returns structured `{success, error}` responses — no raw exceptions, no silent failures, no misleading messages. Agents get actionable context instead of cryptic PostgreSQL codes |
|
|
41
41
|
| **Production-Ready Security** | SQL injection protection, parameterized queries, input validation, sandboxed code execution, SSL certificate verification by default, and HTTP body size enforcement |
|
|
42
|
-
| **Benchmarked Performance** |
|
|
42
|
+
| **Benchmarked Performance** | 93+ [Vitest benchmarks](https://github.com/neverinfamous/postgres-mcp/wiki/Performance) across 10 domains: tool dispatch at 6.9M ops/sec, identifier sanitization at 4.4M ops/sec, auth checks at 5.3M ops/sec, and schema parsing at 2.1M ops/sec |
|
|
43
43
|
| **Strict TypeScript** | 100% type-safe codebase with 3448 tests and 95.09% coverage |
|
|
44
44
|
| **MCP 2025-11-25 Compliant** | Full protocol support with tool safety hints, resource priorities, and progress notifications |
|
|
45
45
|
|
|
@@ -123,7 +123,7 @@ Code executes in a **sandboxed VM context** with multiple layers of security. Al
|
|
|
123
123
|
- **Static code validation** — blocked patterns include `require()`, `process`, `eval()`, and filesystem access
|
|
124
124
|
- **Rate limiting** — 60 executions per minute per client
|
|
125
125
|
- **Hard timeouts** — configurable execution limit (default 30s)
|
|
126
|
-
- **Full API access** — all
|
|
126
|
+
- **Full API access** — all 22 tool groups are available via `pg.*` (e.g., `pg.core.readQuery()`, `pg.jsonb.extract()`, `pg.introspection.dependencyGraph()`, `pg.migration.migrationStatus()`)
|
|
127
127
|
- **Requires `admin` OAuth scope** — execution is logged for audit
|
|
128
128
|
|
|
129
129
|
### ⚡ Code Mode Only (Maximum Token Savings)
|
|
@@ -154,7 +154,7 @@ If you control your own setup, you can run with **only Code Mode enabled** — a
|
|
|
154
154
|
}
|
|
155
155
|
```
|
|
156
156
|
|
|
157
|
-
This exposes just `pg_execute_code`. The agent writes JavaScript against the typed `pg.*` SDK — composing queries, chaining operations across all
|
|
157
|
+
This exposes just `pg_execute_code`. The agent writes JavaScript against the typed `pg.*` SDK — composing queries, chaining operations across all 22 tool groups, and returning exactly the data it needs — in one execution. This mirrors the [Code Mode pattern](https://blog.cloudflare.com/code-mode-mcp/) pioneered by Cloudflare for their entire API: fixed token cost regardless of how many capabilities exist.
|
|
158
158
|
|
|
159
159
|
> [!TIP]
|
|
160
160
|
> **Maximize Token Savings:** Instruct your AI agent to prefer Code Mode over individual tool calls:
|
|
@@ -190,22 +190,22 @@ node dist/cli.js list-tools # List available tools
|
|
|
190
190
|
|
|
191
191
|
### Benchmarks
|
|
192
192
|
|
|
193
|
-
Run `npm run bench` to execute the performance benchmark suite (
|
|
193
|
+
Run `npm run bench` to execute the performance benchmark suite (10 files, 93+ scenarios) powered by [Vitest Bench](https://vitest.dev/guide/features.html#benchmarking). Use `npm run bench:verbose` for detailed table output.
|
|
194
194
|
|
|
195
195
|
**Performance Highlights** (Node.js 24, Windows 11):
|
|
196
196
|
|
|
197
197
|
| Area | Benchmark | Throughput |
|
|
198
198
|
| --------------------------- | ---------------------------------------- | ------------- |
|
|
199
|
-
| **Tool Dispatch** | Map.get() single tool lookup | ~
|
|
200
|
-
| **WHERE Validation** | Simple clause (combined regex fast-path) | ~
|
|
201
|
-
| **Identifier Sanitization** | validateIdentifier() | ~
|
|
202
|
-
| **Auth — Token Extraction** | extractBearerToken() | ~2.
|
|
203
|
-
| **Auth — Scope Checking** |
|
|
204
|
-
| **Rate Limiting** | Single IP check | ~
|
|
205
|
-
| **Logger** | Filtered debug (no-op path) | ~
|
|
206
|
-
| **Schema Parsing** |
|
|
207
|
-
| **Metadata Cache** | Cache hit + miss pattern | ~1.
|
|
208
|
-
| **Sandbox Creation** | CodeModeSandbox.create() cold start | ~
|
|
199
|
+
| **Tool Dispatch** | Map.get() single tool lookup | ~6.9M ops/sec |
|
|
200
|
+
| **WHERE Validation** | Simple clause (combined regex fast-path) | ~3.7M ops/sec |
|
|
201
|
+
| **Identifier Sanitization** | validateIdentifier() | ~4.4M ops/sec |
|
|
202
|
+
| **Auth — Token Extraction** | extractBearerToken() | ~2.7M ops/sec |
|
|
203
|
+
| **Auth — Scope Checking** | hasScope() | ~5.3M ops/sec |
|
|
204
|
+
| **Rate Limiting** | Single IP check | ~2.3M ops/sec |
|
|
205
|
+
| **Logger** | Filtered debug (no-op path) | ~5.4M ops/sec |
|
|
206
|
+
| **Schema Parsing** | MigrationInitSchema.parse() | ~2.1M ops/sec |
|
|
207
|
+
| **Metadata Cache** | Cache hit + miss pattern | ~1.7M ops/sec |
|
|
208
|
+
| **Sandbox Creation** | CodeModeSandbox.create() cold start | ~863 ops/sec |
|
|
209
209
|
|
|
210
210
|
> Full benchmark results and methodology are available on the [Performance wiki page](https://github.com/neverinfamous/postgres-mcp/wiki/Performance).
|
|
211
211
|
|
|
@@ -305,12 +305,12 @@ All shortcuts and tool groups include **Code Mode** (`pg_execute_code`) by defau
|
|
|
305
305
|
| --------------- | ------ | ------------------------ | -------------------------------------------------------- |
|
|
306
306
|
| `starter` | **59** | 🌟 **Recommended** | Core, trans, JSONB, schema, codemode |
|
|
307
307
|
| `essential` | 47 | Minimal footprint | Core, trans, JSONB, codemode |
|
|
308
|
-
| `dev-schema` | 52 | Dev Schema & Migrations | Core, trans, schema, introspection, codemode
|
|
308
|
+
| `dev-schema` | 52 | Dev Schema & Migrations | Core, trans, schema, introspection, migration, codemode |
|
|
309
309
|
| `dev-analytics` | 42 | Dev Analytics | Core, trans, stats, partitioning, codemode |
|
|
310
310
|
| `ai-data` | 60 | AI Data Analyst | Core, JSONB, text, trans, codemode |
|
|
311
311
|
| `ai-vector` | 50 | AI/ML with pgvector | Core, vector, trans, part, codemode |
|
|
312
|
-
| `dba-monitor` |
|
|
313
|
-
| `dba-schema` | 45 | DBA Schema & Migrations | Core, schema, introspection, codemode
|
|
312
|
+
| `dba-monitor` | 63 | DBA Monitoring | Core, monitoring, perf, trans, codemode |
|
|
313
|
+
| `dba-schema` | 45 | DBA Schema & Migrations | Core, schema, introspection, migration, codemode |
|
|
314
314
|
| `dba-infra` | 46 | DBA Infrastructure | Core, admin, backup, partitioning, codemode |
|
|
315
315
|
| `dba-stats` | 57 | DBA Stats | Core, admin, monitoring, trans, stats, codemode |
|
|
316
316
|
| `geo` | 43 | Geospatial Workloads | Core, PostGIS, trans, codemode |
|
|
@@ -318,35 +318,36 @@ All shortcuts and tool groups include **Code Mode** (`pg_execute_code`) by defau
|
|
|
318
318
|
| `ext-ai` | 26 | Extension: AI/Security | pgvector, pgcrypto, codemode |
|
|
319
319
|
| `ext-geo` | 24 | Extension: Spatial | PostGIS, ltree, codemode |
|
|
320
320
|
| `ext-schedule` | 19 | Extension: Scheduling | pg_cron, pg_partman, codemode |
|
|
321
|
-
| `ext-perf` |
|
|
321
|
+
| `ext-perf` | 32 | Extension: Perf/Analysis | pg_stat_kcache, performance, codemode |
|
|
322
322
|
|
|
323
|
-
### Tool Groups (
|
|
323
|
+
### Tool Groups (22 Available)
|
|
324
324
|
|
|
325
325
|
> Tool counts include Code Mode (`pg_execute_code`) which is added to all groups by default.
|
|
326
326
|
|
|
327
|
-
| Group | Tools | Description
|
|
328
|
-
| --------------- | ----- |
|
|
329
|
-
| `codemode` | 1 | Code Mode (sandboxed code execution)
|
|
330
|
-
| `core` | 21 | Read/write queries, tables, indexes, convenience/drop tools
|
|
331
|
-
| `transactions` | 8 | BEGIN, COMMIT, ROLLBACK, savepoints
|
|
332
|
-
| `jsonb` | 20 | JSONB manipulation and queries
|
|
333
|
-
| `text` | 14 | Full-text search, fuzzy matching
|
|
334
|
-
| `performance` |
|
|
335
|
-
| `admin` | 11 | VACUUM, ANALYZE, REINDEX
|
|
336
|
-
| `monitoring` | 12 | Database sizes, connections, status
|
|
337
|
-
| `backup` | 10 | pg_dump, COPY, restore
|
|
338
|
-
| `schema` | 13 | Schemas, views, sequences, functions, triggers
|
|
339
|
-
| `introspection` |
|
|
340
|
-
| `
|
|
341
|
-
| `
|
|
342
|
-
| `
|
|
343
|
-
| `
|
|
344
|
-
| `
|
|
345
|
-
| `
|
|
346
|
-
| `
|
|
347
|
-
| `
|
|
348
|
-
| `
|
|
349
|
-
| `
|
|
327
|
+
| Group | Tools | Description |
|
|
328
|
+
| --------------- | ----- | --------------------------------------------------------------------- |
|
|
329
|
+
| `codemode` | 1 | Code Mode (sandboxed code execution) |
|
|
330
|
+
| `core` | 21 | Read/write queries, tables, indexes, convenience/drop tools |
|
|
331
|
+
| `transactions` | 8 | BEGIN, COMMIT, ROLLBACK, savepoints |
|
|
332
|
+
| `jsonb` | 20 | JSONB manipulation and queries |
|
|
333
|
+
| `text` | 14 | Full-text search, fuzzy matching |
|
|
334
|
+
| `performance` | 25 | EXPLAIN, query analysis, optimization, diagnostics, anomaly detection |
|
|
335
|
+
| `admin` | 11 | VACUUM, ANALYZE, REINDEX |
|
|
336
|
+
| `monitoring` | 12 | Database sizes, connections, status |
|
|
337
|
+
| `backup` | 10 | pg_dump, COPY, restore |
|
|
338
|
+
| `schema` | 13 | Schemas, views, sequences, functions, triggers |
|
|
339
|
+
| `introspection` | 7 | Dependency graphs, cascade simulation, schema analysis |
|
|
340
|
+
| `migration` | 7 | Schema migration tracking and management |
|
|
341
|
+
| `partitioning` | 7 | Native partition management |
|
|
342
|
+
| `stats` | 9 | Statistical analysis |
|
|
343
|
+
| `vector` | 17 | pgvector (AI/ML similarity search) |
|
|
344
|
+
| `postgis` | 16 | PostGIS (geospatial) |
|
|
345
|
+
| `cron` | 9 | pg_cron (job scheduling) |
|
|
346
|
+
| `partman` | 11 | pg_partman (auto-partitioning) |
|
|
347
|
+
| `kcache` | 8 | pg_stat_kcache (OS-level stats) |
|
|
348
|
+
| `citext` | 7 | citext (case-insensitive text) |
|
|
349
|
+
| `ltree` | 9 | ltree (hierarchical data) |
|
|
350
|
+
| `pgcrypto` | 10 | pgcrypto (encryption, UUIDs) |
|
|
350
351
|
|
|
351
352
|
---
|
|
352
353
|
|
|
@@ -550,6 +551,9 @@ The server exposes metadata at `/.well-known/oauth-protected-resource`.
|
|
|
550
551
|
> [!NOTE]
|
|
551
552
|
> **Per-tool scope enforcement:** Scopes are enforced at the tool level — each tool group maps to a required scope (`read`, `write`, or `admin`). When OAuth is enabled, every tool invocation checks the calling token's scopes before execution. When OAuth is not configured, scope checks are skipped entirely.
|
|
552
553
|
|
|
554
|
+
> [!WARNING]
|
|
555
|
+
> **HTTP without OAuth:** When using `--transport http` without enabling OAuth, all clients have full unrestricted access. Always enable OAuth for production HTTP deployments. See [SECURITY.md](SECURITY.md) for details.
|
|
556
|
+
|
|
553
557
|
---
|
|
554
558
|
|
|
555
559
|
## ⚡ Performance Tuning
|
|
@@ -562,6 +566,8 @@ The server exposes metadata at `/.well-known/oauth-protected-resource`.
|
|
|
562
566
|
|
|
563
567
|
> **Tip:** Lower `METADATA_CACHE_TTL_MS` for development (e.g., `5000`), or increase it for production with stable schemas (e.g., `300000` = 5 min).
|
|
564
568
|
|
|
569
|
+
> **Pool Tuning for IAM Auth:** For cloud-managed databases with IAM authentication (e.g., AWS RDS, Google Cloud SQL), set `POSTGRES_POOL_MIN=2` to keep warm connections and reduce authentication latency.
|
|
570
|
+
|
|
565
571
|
---
|
|
566
572
|
|
|
567
573
|
## 🤖 AI-Powered Prompts
|
|
@@ -79,7 +79,7 @@ describe("Sandbox Execution", () => {
|
|
|
79
79
|
});
|
|
80
80
|
bench('trivial code execution ("return 42")', async () => {
|
|
81
81
|
await sandbox.execute("return 42;", {});
|
|
82
|
-
}, { iterations:
|
|
82
|
+
}, { iterations: 100, warmupIterations: 10, time: 5000 });
|
|
83
83
|
bench("execution with 20-group API bindings", async () => {
|
|
84
84
|
const apiBindings = {};
|
|
85
85
|
const groupNames = [
|
|
@@ -112,11 +112,11 @@ describe("Sandbox Execution", () => {
|
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
114
|
await sandbox.execute("const result = pg.core.readQuery(); return result;", apiBindings);
|
|
115
|
-
}, { iterations:
|
|
115
|
+
}, { iterations: 100, warmupIterations: 10, time: 5000 });
|
|
116
116
|
bench("console output capture", async () => {
|
|
117
117
|
await sandbox.execute('console.log("test output"); console.warn("warning");', {});
|
|
118
118
|
sandbox.clearConsoleOutput();
|
|
119
|
-
}, { iterations:
|
|
119
|
+
}, { iterations: 100, warmupIterations: 10, time: 5000 });
|
|
120
120
|
});
|
|
121
121
|
// ---------------------------------------------------------------------------
|
|
122
122
|
// 4. Security Validation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codemode.bench.js","sourceRoot":"","sources":["../../../src/__tests__/benchmarks/codemode.bench.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"codemode.bench.js","sourceRoot":"","sources":["../../../src/__tests__/benchmarks/codemode.bench.ts"],"names":[],"mappings":"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"}
|
|
@@ -98,20 +98,20 @@ describe("Connection Pool Benchmarks", () => {
|
|
|
98
98
|
// -------------------------------------------------------------------------
|
|
99
99
|
bench("query() framework overhead", async () => {
|
|
100
100
|
await pool.query("SELECT 1");
|
|
101
|
-
}, { iterations:
|
|
101
|
+
}, { iterations: 5000, warmupIterations: 50 });
|
|
102
102
|
// -------------------------------------------------------------------------
|
|
103
103
|
// 3. getConnection() + releaseConnection() round trip
|
|
104
104
|
// -------------------------------------------------------------------------
|
|
105
105
|
bench("getConnection/releaseConnection round trip", async () => {
|
|
106
106
|
const client = await pool.getConnection();
|
|
107
107
|
pool.releaseConnection(client);
|
|
108
|
-
}, { iterations:
|
|
108
|
+
}, { iterations: 5000, warmupIterations: 50 });
|
|
109
109
|
// -------------------------------------------------------------------------
|
|
110
110
|
// 4. checkHealth() overhead (includes a mocked SELECT query)
|
|
111
111
|
// -------------------------------------------------------------------------
|
|
112
112
|
bench("checkHealth() overhead", async () => {
|
|
113
113
|
await pool.checkHealth();
|
|
114
|
-
}, { iterations:
|
|
114
|
+
}, { iterations: 2000, warmupIterations: 30 });
|
|
115
115
|
// -------------------------------------------------------------------------
|
|
116
116
|
// 5. isInitialized() / isClosing() — micro-operations used in guards
|
|
117
117
|
// -------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-pool.bench.js","sourceRoot":"","sources":["../../../src/__tests__/benchmarks/connection-pool.bench.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"connection-pool.bench.js","sourceRoot":"","sources":["../../../src/__tests__/benchmarks/connection-pool.bench.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* postgres-mcp - Introspection & Migration Schema Parsing Benchmarks
|
|
3
|
+
*
|
|
4
|
+
* Measures parsing performance for introspection and migration input schemas,
|
|
5
|
+
* covering z.preprocess transforms, alias resolution, coercion, and
|
|
6
|
+
* validation failure rejection speed.
|
|
7
|
+
*
|
|
8
|
+
* Run: npm run bench
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=introspection-migration.bench.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspection-migration.bench.d.ts","sourceRoot":"","sources":["../../../src/__tests__/benchmarks/introspection-migration.bench.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* postgres-mcp - Introspection & Migration Schema Parsing Benchmarks
|
|
3
|
+
*
|
|
4
|
+
* Measures parsing performance for introspection and migration input schemas,
|
|
5
|
+
* covering z.preprocess transforms, alias resolution, coercion, and
|
|
6
|
+
* validation failure rejection speed.
|
|
7
|
+
*
|
|
8
|
+
* Run: npm run bench
|
|
9
|
+
*/
|
|
10
|
+
import { describe, bench, vi } from "vitest";
|
|
11
|
+
import { DependencyGraphSchema, TopologicalSortSchema, CascadeSimulatorSchema, SchemaSnapshotSchema, ConstraintAnalysisSchema, MigrationRisksSchema, MigrationInitSchema, MigrationRecordSchema, MigrationApplySchema, MigrationRollbackSchema, MigrationHistorySchema, MigrationStatusSchema, } from "../../adapters/postgresql/schemas/introspection.js";
|
|
12
|
+
// Suppress logger output
|
|
13
|
+
vi.mock("../../utils/logger.js", () => ({
|
|
14
|
+
logger: {
|
|
15
|
+
debug: vi.fn(),
|
|
16
|
+
info: vi.fn(),
|
|
17
|
+
warn: vi.fn(),
|
|
18
|
+
warning: vi.fn(),
|
|
19
|
+
error: vi.fn(),
|
|
20
|
+
notice: vi.fn(),
|
|
21
|
+
critical: vi.fn(),
|
|
22
|
+
alert: vi.fn(),
|
|
23
|
+
emergency: vi.fn(),
|
|
24
|
+
setLevel: vi.fn(),
|
|
25
|
+
setMcpServer: vi.fn(),
|
|
26
|
+
},
|
|
27
|
+
}));
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// 1. Simple Introspection Schemas (no transforms)
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
describe("Simple Introspection Schema Parsing", () => {
|
|
32
|
+
bench("DependencyGraphSchema.parse(defaults)", () => {
|
|
33
|
+
DependencyGraphSchema.parse({});
|
|
34
|
+
}, { iterations: 5000, warmupIterations: 100 });
|
|
35
|
+
bench("DependencyGraphSchema.parse(with schema)", () => {
|
|
36
|
+
DependencyGraphSchema.parse({ schema: "public", includeRowCounts: true });
|
|
37
|
+
}, { iterations: 5000, warmupIterations: 100 });
|
|
38
|
+
bench("TopologicalSortSchema.parse(create direction)", () => {
|
|
39
|
+
TopologicalSortSchema.parse({ direction: "create" });
|
|
40
|
+
}, { iterations: 5000, warmupIterations: 100 });
|
|
41
|
+
bench("MigrationInitSchema.parse(defaults)", () => {
|
|
42
|
+
MigrationInitSchema.parse({});
|
|
43
|
+
}, { iterations: 5000, warmupIterations: 100 });
|
|
44
|
+
});
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// 2. Transform Schemas (z.preprocess with aliasing)
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
describe("Transform Schema Parsing (z.preprocess)", () => {
|
|
49
|
+
bench('CascadeSimulatorSchema.parse(string shorthand "users")', () => {
|
|
50
|
+
CascadeSimulatorSchema.parse("users");
|
|
51
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
52
|
+
bench("CascadeSimulatorSchema.parse(object with schema.table)", () => {
|
|
53
|
+
CascadeSimulatorSchema.parse({
|
|
54
|
+
table: "public.orders",
|
|
55
|
+
operation: "DELETE",
|
|
56
|
+
});
|
|
57
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
58
|
+
bench("ConstraintAnalysisSchema.parse(with schema.table split)", () => {
|
|
59
|
+
ConstraintAnalysisSchema.parse({ table: "public.users" });
|
|
60
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
61
|
+
bench("MigrationRisksSchema.parse(statement → statements alias)", () => {
|
|
62
|
+
MigrationRisksSchema.parse({
|
|
63
|
+
statement: "ALTER TABLE users ADD COLUMN bio TEXT",
|
|
64
|
+
});
|
|
65
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
66
|
+
bench("MigrationRisksSchema.parse(3 statements)", () => {
|
|
67
|
+
MigrationRisksSchema.parse({
|
|
68
|
+
statements: [
|
|
69
|
+
"ALTER TABLE users ADD COLUMN bio TEXT",
|
|
70
|
+
"DROP TABLE old_users",
|
|
71
|
+
"CREATE INDEX CONCURRENTLY idx_bio ON users(bio)",
|
|
72
|
+
],
|
|
73
|
+
});
|
|
74
|
+
}, { iterations: 2000, warmupIterations: 50 });
|
|
75
|
+
bench("SchemaSnapshotSchema.parse(with sections + compact)", () => {
|
|
76
|
+
SchemaSnapshotSchema.parse({
|
|
77
|
+
sections: ["tables", "indexes", "constraints"],
|
|
78
|
+
compact: true,
|
|
79
|
+
});
|
|
80
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
81
|
+
});
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// 3. Migration Tool Schemas (required fields + coercion)
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
describe("Migration Schema Parsing", () => {
|
|
86
|
+
bench("MigrationRecordSchema.parse(full payload)", () => {
|
|
87
|
+
MigrationRecordSchema.parse({
|
|
88
|
+
version: "1.0.0",
|
|
89
|
+
description: "Add users table",
|
|
90
|
+
migrationSql: "CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT)",
|
|
91
|
+
rollbackSql: "DROP TABLE users",
|
|
92
|
+
sourceSystem: "agent",
|
|
93
|
+
});
|
|
94
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
95
|
+
bench("MigrationApplySchema.parse(minimal required)", () => {
|
|
96
|
+
MigrationApplySchema.parse({
|
|
97
|
+
version: "2.0.0",
|
|
98
|
+
migrationSql: "ALTER TABLE users ADD COLUMN email TEXT",
|
|
99
|
+
});
|
|
100
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
101
|
+
bench("MigrationRollbackSchema.parse(by version)", () => {
|
|
102
|
+
MigrationRollbackSchema.parse({ version: "1.0.0", dryRun: true });
|
|
103
|
+
}, { iterations: 5000, warmupIterations: 100 });
|
|
104
|
+
bench("MigrationHistorySchema.parse(with coerced limit/offset)", () => {
|
|
105
|
+
MigrationHistorySchema.parse({
|
|
106
|
+
limit: "25",
|
|
107
|
+
offset: "10",
|
|
108
|
+
status: "applied",
|
|
109
|
+
});
|
|
110
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
111
|
+
bench("MigrationStatusSchema.parse(defaults)", () => {
|
|
112
|
+
MigrationStatusSchema.parse({});
|
|
113
|
+
}, { iterations: 5000, warmupIterations: 100 });
|
|
114
|
+
});
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
// 4. Validation Failure Paths
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
describe("Validation Failure Paths (Introspection & Migration)", () => {
|
|
119
|
+
bench("MigrationRecordSchema.safeParse(missing version)", () => {
|
|
120
|
+
MigrationRecordSchema.safeParse({
|
|
121
|
+
migrationSql: "CREATE TABLE test (id INT)",
|
|
122
|
+
});
|
|
123
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
124
|
+
bench("MigrationRecordSchema.safeParse(missing migrationSql)", () => {
|
|
125
|
+
MigrationRecordSchema.safeParse({ version: "1.0.0" });
|
|
126
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
127
|
+
bench("MigrationApplySchema.safeParse(empty object)", () => {
|
|
128
|
+
MigrationApplySchema.safeParse({});
|
|
129
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
130
|
+
bench("CascadeSimulatorSchema.safeParse(wrong type — number)", () => {
|
|
131
|
+
CascadeSimulatorSchema.safeParse(42);
|
|
132
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
133
|
+
bench("MigrationRisksSchema.safeParse(empty object)", () => {
|
|
134
|
+
MigrationRisksSchema.safeParse({});
|
|
135
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
136
|
+
bench("ConstraintAnalysisSchema.safeParse(wrong param types)", () => {
|
|
137
|
+
ConstraintAnalysisSchema.safeParse({
|
|
138
|
+
table: 123,
|
|
139
|
+
checks: "not-an-array",
|
|
140
|
+
});
|
|
141
|
+
}, { iterations: 3000, warmupIterations: 50 });
|
|
142
|
+
});
|
|
143
|
+
//# sourceMappingURL=introspection-migration.bench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspection-migration.bench.js","sourceRoot":"","sources":["../../../src/__tests__/benchmarks/introspection-migration.bench.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
* Run: npm run bench
|
|
8
8
|
*/
|
|
9
9
|
import { describe, bench, vi } from "vitest";
|
|
10
|
-
import { generateCompactIndex, generateDiscoveryPrompt, generateToolTags, } from "../../utils/promptGenerator.js";
|
|
11
10
|
// Suppress logger output
|
|
12
11
|
vi.mock("../../utils/logger.js", () => ({
|
|
13
12
|
logger: {
|
|
@@ -24,46 +23,6 @@ vi.mock("../../utils/logger.js", () => ({
|
|
|
24
23
|
setMcpServer: vi.fn(),
|
|
25
24
|
},
|
|
26
25
|
}));
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
|
-
// Simulated data
|
|
29
|
-
// ---------------------------------------------------------------------------
|
|
30
|
-
const toolGroups = [
|
|
31
|
-
"core",
|
|
32
|
-
"transactions",
|
|
33
|
-
"jsonb",
|
|
34
|
-
"text",
|
|
35
|
-
"performance",
|
|
36
|
-
"admin",
|
|
37
|
-
"monitoring",
|
|
38
|
-
"backup",
|
|
39
|
-
"schema",
|
|
40
|
-
"vector",
|
|
41
|
-
"postgis",
|
|
42
|
-
"partitioning",
|
|
43
|
-
"stats",
|
|
44
|
-
"cron",
|
|
45
|
-
"partman",
|
|
46
|
-
"kcache",
|
|
47
|
-
"citext",
|
|
48
|
-
"ltree",
|
|
49
|
-
"pgcrypto",
|
|
50
|
-
];
|
|
51
|
-
// Build a representative set of tool definitions
|
|
52
|
-
const toolDefinitions = [];
|
|
53
|
-
for (const group of toolGroups) {
|
|
54
|
-
const toolCount = Math.floor(Math.random() * 10) + 5;
|
|
55
|
-
for (let i = 0; i < toolCount; i++) {
|
|
56
|
-
toolDefinitions.push({
|
|
57
|
-
name: `pg_${group}_tool_${String(i)}`,
|
|
58
|
-
description: `Performs ${group} operation ${String(i)}. Supports multiple options and parameters.`,
|
|
59
|
-
group: group,
|
|
60
|
-
inputSchema: { type: "object", properties: {} },
|
|
61
|
-
handler: () => Promise.resolve({
|
|
62
|
-
content: [{ type: "text", text: "ok" }],
|
|
63
|
-
}),
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
26
|
// Resource URI templates (same pattern as postgres-mcp)
|
|
68
27
|
const resourceTemplates = [
|
|
69
28
|
{ uriTemplate: "postgres://schema", name: "Database Schema" },
|
|
@@ -111,29 +70,6 @@ describe("Resource URI Matching", () => {
|
|
|
111
70
|
}, { iterations: 10000, warmupIterations: 100 });
|
|
112
71
|
});
|
|
113
72
|
// ---------------------------------------------------------------------------
|
|
114
|
-
// 2. Prompt Generation
|
|
115
|
-
// ---------------------------------------------------------------------------
|
|
116
|
-
describe("Prompt Generation", () => {
|
|
117
|
-
bench(`generateCompactIndex(${String(toolDefinitions.length)} tools)`, () => {
|
|
118
|
-
generateCompactIndex(toolDefinitions);
|
|
119
|
-
}, { iterations: 500, warmupIterations: 10 });
|
|
120
|
-
bench(`generateDiscoveryPrompt(${String(toolDefinitions.length)} tools)`, () => {
|
|
121
|
-
generateDiscoveryPrompt(toolDefinitions);
|
|
122
|
-
}, { iterations: 500, warmupIterations: 10 });
|
|
123
|
-
bench("generateToolTags(single tool)", () => {
|
|
124
|
-
const tool = toolDefinitions[0];
|
|
125
|
-
if (tool)
|
|
126
|
-
generateToolTags(tool);
|
|
127
|
-
}, { iterations: 10000, warmupIterations: 100 });
|
|
128
|
-
bench("generateToolTags(x10 tools)", () => {
|
|
129
|
-
for (let i = 0; i < 10; i++) {
|
|
130
|
-
const tool = toolDefinitions[i];
|
|
131
|
-
if (tool)
|
|
132
|
-
generateToolTags(tool);
|
|
133
|
-
}
|
|
134
|
-
}, { iterations: 3000, warmupIterations: 30 });
|
|
135
|
-
});
|
|
136
|
-
// ---------------------------------------------------------------------------
|
|
137
73
|
// 3. Prompt Message Assembly
|
|
138
74
|
// ---------------------------------------------------------------------------
|
|
139
75
|
describe("Prompt Message Assembly", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-prompts.bench.js","sourceRoot":"","sources":["../../../src/__tests__/benchmarks/resource-prompts.bench.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"resource-prompts.bench.js","sourceRoot":"","sources":["../../../src/__tests__/benchmarks/resource-prompts.bench.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE7C,yBAAyB;AACzB,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE;QACN,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;QAChB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE;QACf,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;QACjB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;QAClB,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;KACtB;CACF,CAAC,CAAC,CAAC;AAEJ,wDAAwD;AACxD,MAAM,iBAAiB,GAAG;IACxB,EAAE,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAC7D,EAAE,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY,EAAE;IACxD,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAC3D,EAAE,WAAW,EAAE,wBAAwB,EAAE,IAAI,EAAE,mBAAmB,EAAE;IACpE,EAAE,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,cAAc,EAAE;IAC1D,EAAE,WAAW,EAAE,uBAAuB,EAAE,IAAI,EAAE,YAAY,EAAE;IAC5D,EAAE,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAE,YAAY,EAAE;IACvD,EAAE,WAAW,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,EAAE;IACtD,EAAE,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAE,cAAc,EAAE;IACzD,EAAE,WAAW,EAAE,qBAAqB,EAAE,IAAI,EAAE,kBAAkB,EAAE;IAChE,EAAE,WAAW,EAAE,qBAAqB,EAAE,IAAI,EAAE,UAAU,EAAE;IACxD,EAAE,WAAW,EAAE,wBAAwB,EAAE,IAAI,EAAE,aAAa,EAAE;IAC9D,EAAE,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,eAAe,EAAE;IAC3D,EAAE,WAAW,EAAE,yBAAyB,EAAE,IAAI,EAAE,cAAc,EAAE;IAChE,EAAE,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,eAAe,EAAE;IAC3D,EAAE,WAAW,EAAE,oBAAoB,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAC7D,EAAE,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,eAAe,EAAE;IAC3D,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE;IACrD,EAAE,WAAW,EAAE,oBAAoB,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAC7D,EAAE,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,eAAe,EAAE;CAC5D,CAAC;AAEF,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAC9E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAyC,CAAC;IACrE,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QACzC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CACH,4BAA4B,EAC5B,GAAG,EAAE;QACH,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC,EACD,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAC7C,CAAC;IAEF,KAAK,CACH,8BAA8B,EAC9B,GAAG,EAAE;QACH,WAAW,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC,EACD,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAC7C,CAAC;IAEF,KAAK,CACH,4CAA4C,EAC5C,GAAG,EAAE;QACH,MAAM,SAAS,GAAG,oBAAoB,CAAC;QACvC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC;IAC7D,CAAC,EACD,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAC7C,CAAC;IAEF,KAAK,CACH,uCAAuC,EACvC,GAAG,EAAE;QACH,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACzD,KAAK,IAAI,CAAC,MAAM,CAAC;IACnB,CAAC,EACD,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAC7C,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAC9E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,KAAK,CACH,0CAA0C,EAC1C,GAAG,EAAE;QACH,MAAM,QAAQ,GAAG;YACf;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,8CAA8C;iBACrD;aACF;YACD;gBACE,IAAI,EAAE,WAAoB;gBAC1B,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,oDAAoD;iBAC3D;aACF;YACD;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,sBAAsB;iBAC7B;aACF;SACF,CAAC;QACF,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAC3C,CAAC;IAEF,KAAK,CACH,uCAAuC,EACvC,GAAG,EAAE;QACH,uDAAuD;QACvD,MAAM,IAAI,GAAuC;YAC/C,KAAK,EAAE,eAAe;YACtB,SAAS,EAAE,UAAU;SACtB,CAAC;QACF,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACzB,CAAC;QACH,CAAC;QACD,KAAK,SAAS,CAAC;IACjB,CAAC,EACD,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAC7C,CAAC;AACJ,CAAC,CAAC,CAAC"}
|