Releases
v1.0.0
Compare
Sorry, something went wrong.
No results found
Changelog
5a7392d fix(spill): keep the row count whole when the fallback footer is cut
ea201e7 fix(http): refuse token-less requests before their body and bound reads
48647ec docs: correct the audit of a failed ask and the XDG_CONFIG_HOME rule
c357a16 fix(engine): replace bytes that are not UTF-8 in every query error
ecf050b fix(spill): make an existing spill directory 0700 before writing
b226986 fix(tools): keep resources/list within the 10 KB inline limit
f37ee8c test(engine): wait 30s for the server to end an oversized query
b735926 test(guard): name the Warm test after what it checks
8102deb fix(serve): wait at most 2 seconds for the engine to close at exit
494da19 fix(http): listen on IPv4 alone for any host but an IPv6 address
4274472 fix(introspect): read pg_search and pg_profile values under 16 MiB
aaed7cf fix(spill): write no spill file under a path that is not UTF-8
6688aaf docs: name the confirmation question as the one result past 10 KB
6ec1351 fix(tools): cut a wrapped protocol error to the 10 KB limit
02b7326 fix(tools): audit a tools/call that ends in a protocol error
98bd802 chore(lint): enable modernize
06e0ca1 refactor: adopt Go 1.26 idioms
648e70d docs: split the safety model and pg_explain costing into short bullets
0a26f66 ci(release): fail before GoReleaser unless server.json names the tag
0d8d9d2 ci: drop the bench job: the test matrix already runs it on PG 15-18
b1fd580 chore: merge finish/surface
b600d1a chore: merge finish/bounds
e704f22 docs(introspect): say each definition is bounded, not their number
d83526d docs: name the protocol errors the 10 KB bound does not cover
7b0ccc4 fix(explain): read the plan under 16 MiB so large plans are summarized
b545859 docs: say to move the .env files with config.json when upgrading
bc94ace fix(introspect): cut long definitions so pg_schema keeps within max_bytes
5cee472 docs: say over --http the role check findings reach the first caller
31288f0 fix(tools): audit every resources/read, also those the SDK turns away
23ee101 fix(tools): list only the resources of connections already in use
9a30ee8 fix(spill): cut the fallback notes so a long spill path keeps the limit
4b753ae fix(engine): replace bytes that are not UTF-8 in column and type names
8fd5a20 perf: compile the SQL parser in the background as the server starts
f124c72 docs: fix the upgrade steps: move config.json, rename server and rules
7bacca0 fix: honour $XDG_CONFIG_HOME for the default config file
6b9b72e fix(http): listen on IPv4 alone when --http names an IPv4 address
773621b docs: say each run of bytes that are not UTF-8 becomes one U+FFFD
370f5cd ci: pin actions by commit SHA, GoReleaser and the base image exactly; add Dependabot
4b48079 fix(tools): show control and invisible formatting characters in the confirmation as escapes
cff62c6 test(engine): spell U+FFFD and é as escapes in the UTF-8 test
567fe59 fix(tools): show and bind each connection's search_path in the confirmation, asked after its check
ef66457 fix(http): send a WWW-Authenticate Bearer challenge with every 401
aa00240 fix(tools): refuse an older client that cannot be asked during the call, whatever its _meta claims
4410fd4 fix(engine): replace bytes that are not UTF-8 in values and errors, so 10 KB holds at the client
5db1185 fix(tools): cut the name an unknown tool or prompt error echoes to 10 KB
ac0caea fix(registry): run the image as the user, who can read a private config
2fb83c3 fix(tools): introduce the server by title, description and website
19a808b fix(tools): cut the URI a resource-not-found error echoes to 10 KB
78ad973 fix(http): cancel the calls still running when shutdown's 10s run out
33f0e7d fix(http): require the token for OPTIONS * too, which net/http answered itself
5182f9e fix(engine): hide a DSN that does not parse: it may hold a password
2e81672 ci: fail on known vulnerabilities the code reaches, with govulncheck
1655c57 fix(deps): require Go 1.26.9 and patch x/text, x/crypto, go-archive
34d2366 test: cover doctor's failed role check, a failed spill cleanup and the fallback spill directory's errors
a7707fa test(tools): fail every tool on an unknown connection before any query, and cover the AWS status and error texts
f697bf4 test(spill): a Store without Now stamps and cleans up by the current time
5908ad2 test(introspect): fail Profile when its sample fails or counts other columns
a8cc46e test(health): check the fixture through Check, and fail on results Postgres did not raise
d861347 test(guard): reject a statement nested anywhere in a query, and show parse errors without a position
29d743a test(explain): fail Run on a plan or relation sizes it cannot read, and a nested loop without an outer side
aff4fd6 test(resolver): fetch secrets from a local Secrets Manager stand-in, and never cache a failed fetch
456cf5b test(engine): cover Querier, QueryError.Error, an unresolvable DSN and an unencodable param
c64b9e6 test(testdb): cover Querier, Block, AppSQL and the harness's failure paths
6db7833 refactor: remove inline comments
7f90650 ci: keep the checkout's credentials out of every CI job
ac528db docs: name the golangci-lint version CI runs
4ad562b test: set the deprecated readonly key through config.Parse, which CI's linter accepts
8282322 docs: bring README and CONTRIBUTING in line with the merged lanes
0d85512 test(tools): share auditedCall between the fan-out and confirmation tests
a02ce55 test: share testdb.ServerVersion instead of repeating the version query
0b78d4f fix(cli): cancel the query when an HTTP client drops its request
c7307a9 chore: merge pgglass/pg18
d317a47 chore: merge pgglass/dist
b2a99da chore: merge pgglass/bench
9e9670d chore: merge pgglass/confirm
352166e chore: merge pgglass/resources
5b62979 chore: merge pgglass/cli
4a6bcb7 chore: merge pgglass/fixes
cc5f8d3 ci: test on PostgreSQL 18 and list the supported versions
c2ea4ec feat(explain): flag PostgreSQL 18 storage spills and keep per-loop rows to two decimals
f12a572 fix(introspect): name virtual generated columns among the reasons pg_profile samples
d85b12a fix(introspect): show a column under a NOT VALID not-null constraint as nullable
e62eb5a feat(preflight): warn of pg_signal_autovacuum_worker and pg_get_logical_snapshot_*
cd9f2da feat(guard): deny pg_buffercache_evict* and pg_logicalinspect's snapshot readers
e6409be docs: warn that HTTP on loopback without a token is open to every local user
4db0acb docs: list the command line, doctor and HTTP in the README's docs table
4c85930 fix(cli): bound doctor's credential lookup by its connect timeout
ea942e9 feat(cli): serve Streamable HTTP with --http, bearer token beyond loopback
9eb1d1c feat(cli): add doctor to check the config and each connection's role
655e4e1 feat(cli)!: read the config from --config, by default ~/.config/pgglass/config.json, and add --version
50e7c0e test(tools): prove a client's cancellation of pg_query cancels its query on Postgres
cb82918 test(tools): overflow fan-out sections with 63-byte names and a long spill path, not names config refuses
7ae58c4 fix(config): refuse a default_schema over 63 bytes at startup
0dbda37 fix(tools): say inline when limit or max_rows cut pg_search's matches
a5b9b18 fix(explain): cost an EXISTS subquery for its first row, as the planner charges it
7a7c3e8 fix(tools): keep "role check failed" in strict refusals whose audit Postgres refused
72d6306 fix(health): say a long-running session's transaction is open that long, not its state
fa78e0e docs: link the token benchmark from the README and CONTRIBUTING
f16ddcf ci: run the token benchmark in a job of its own
4513b7b test(bench): add a token benchmark checked against a baseline
e81e63a docs: say which variables to pass to the container
dcbf80b docs: document the install script, release archives, the Docker image and releasing
3edf1d0 feat(registry): add server.json for the MCP Registry
1482db7 feat(install): check the archive against checksums.txt and install every released platform
a05f459 ci(release): build macOS and Linux on amd64 and arm64 with SBOMs and a GHCR image, and attest them
2ff1ff9 docs: document the table resources and their audit lines
9b41bce feat(tools): expose tables as pgglass:// MCP resources for @-mentions
bd9d787 feat(tools): pass the role check without consuming its findings
669014f feat(introspect): wrap ErrNotFound when Table finds no relation
e70b3c6 feat(tools): ask the user before running on confirm connections
8aca1f5 feat(tools): title every tool, send usage instructions and negotiate the newest MCP revision
01af1da chore: require Go 1.26, upgrade dependencies, go-sdk v1.8.0 and CI actions
62c954c refactor!: rename the project to pgglass
1177b53 fix(tools): spill every fanned-out section when the sections overflow
eacda8a fix(introspect): cut comments to 200 characters so long ones keep pg_schema within max_bytes
f96baa7 fix(tools): say when limit or max_rows cut a spilled pg_search
6166946 fix(explain): drop the fell-short guess that flagged scans a LIMIT stopped early
21b14cb test(tools): lead the long-name diff fixture's tables with their number
2e59029 docs: name the spill path, not only long names, as what overflows fan-out sections
e724cd5 test(tools): size diffText's room from a spilled summary, now that linesOutput returns short lines inline
cfc89f3 chore: merge v2/polish2-tidy (pg_diff_schema names the side whose role check fails; long_running ages sessions by their transaction)
7b70a0d chore: merge v2/polish2-bounds (names over 63 bytes are refused; spill drops Spill and Output, and its fallback cuts cells as the call does)
d5801d3 chore: merge v2/polish2-explain (pg_explain flags what runs under a LIMIT that fell short, and costs an inner OFFSET in full)
4c241fe test(tools): state the exact worst-case sizes in the inline-bound comments
6da1da1 fix(spill): cut cells in the no-file fallback only as the call does
a2c4978 refactor(spill): drop Spill and Output; linesOutput uses OutputWhole
8d4673a fix(explain): flag what runs under a LIMIT that fell short, and cost an inner OFFSET in full
cc270f5 docs: list explain, health and guardtest in the project structure
f21f13c fix(tools): name view queries and open transactions in descriptions
37dac27 fix: refuse connection and object names longer than Postgres keeps
e7f1ea6 fix(health): age a session in a transaction by its transaction, running or idle
93574f9 test(tools): assert the long-schema refusal and fit pg_diff_schema's summary under its first line
3059aa8 fix(tools): name the side whose role check fails in pg_diff_schema
ead2f0a docs: add the MIT license
eec89f5 fix(tools): keep fanned-out sections within the inline limit
85b695c fix(tools): return pg_health's findings whole, not cut at 200 characters
4e0303d fix(tools): keep every response within the inline limit
6a2dc4e fix(explain): flag the scan under a window over the whole partition
543911e test(health): gofmt health_test.go
e6d96f3 chore: merge v2/polish-tidy (deny pg_prewarm, drop the unbounded Schemas/Tables and Statement.SQL, rename the gap tests)
882ea54 chore: merge v2/polish-health (pg_health counts client backends, ages idle transactions, ranks dead rows by count)
0867b30 chore: merge v2/polish-diff (pg_diff_schema compares view queries and names the side that fails)
e52c463 chore: merge v2/polish-explain (pg_explain costs and flags what a LIMIT stops early by the share it reads)
2eb2109 chore: merge v2/polish-spill (summaries and fan-out sections stay within the inline limit; spilled lines and profile values stay whole)
71bb6e2 docs(health): tighten the long_running wording in the usage guide and its test
25de5b6 fix(health): count only client backends against max_connections
df054ea fix(explain): stop flagging and overcosting what a LIMIT stops early
d9eb0b8 fix(tools): return pg_profile's values whole, not cut at 200 characters
e02816c fix(tools): always spill the lines a tool finds too large, whole
a1d5158 fix(health): age sessions idle in transaction by their transaction, not their last query
080a6d5 fix(spill): keep summaries and fan-out sections within the inline limit
3a74417 fix: compare view queries in pg_diff_schema and name the side that fails
38d9231 fix(guard): deny pg_prewarm, which any role may run to evict the shared buffers' working set
f321f49 fix(health): rank dead_tuples by dead rows, so tiny tables no longer crowd out large ones
305c083 refactor(explain): remove Statement.SQL, which only a test called, and test the statement through Run
9b06016 refactor(introspect): remove the unbounded Schemas and Tables, which only tests called
27663ea test(tools): name the gap tests after their behaviour and drop a check that cannot fail
c656da1 test(resolver): cover the env and dotenv sources' Status through StatusFor
5adb6f8 fix(tools): spill pg_search matches past the inline limit
4765436 fix(guard): deny autoprewarm_*, which let any role write a server file
a2861b8 docs: document all eight tools and what sets the server apart
b60cce6 refactor: dedupe the merged tools' text-result builders and definition tests
c02e8dc chore: merge v2/p4-fixes (credential refetch, bounded pg_schema listings, spill dir fallback, doc fixes)
4c2d446 chore: merge v2/p4-health (pg_health, a server health report from statistics views)
85773fc chore: merge v2/p4-explain (pg_explain, a compact plan summary with flags)
aeb8c93 chore: merge v2/p4-profile (pg_profile, column profiles from pg_stats or a sample)
92a4f6a chore: merge v2/p4-diff (pg_diff_schema compares a schema on two connections)
5f87978 chore: merge v2/p4-fanout (pg_query fan-out over up to 10 connections)
d20e33c test: skip the server-start test under -short and tidy a firstLines comment
aebb56a docs: qualify the search_path and default_transaction_read_only claims
4e4fcc4 fix: spill to a private temp directory when there is no user cache directory
2a902d2 fix(tools): bound pg_schema's catalog queries to 500 schemas or relations per listing
ff1504c feat(tools): add pg_health, a read-only server health report from statistics views
9afa508 fix(preflight): flag EXECUTE on heap_force_*, pg_truncate_visibility_map and pg_log_standby_snapshot
47a9dd2 feat(tools): add pg_profile, column profiles from pg_stats or a bounded sample
c83bb10 docs(engine): point the package doc to the guard's denylists instead of repeating them
b96b273 fix(resolver): key the AWS secret cache by aws_profile and secret_name
490154d fix(engine): fetch cached credentials again when the server refuses them
3b8e05d feat(tools): add pg_diff_schema to compare a schema on two connections
dea9802 feat(tools): add pg_explain, a compact plan summary with flags
ac248f8 feat(introspect): read a schema's structure in one query and diff two
0948568 feat(tools): fan pg_query out over up to 10 connections at once
79eefe6 fix(guard): deny setseed, whose seed for random() outlives the rollback
d4fb15b fix(engine): refuse a new connection whose DSN names another user, database or host
60245c3 fix(guard): deny index maintenance and functions that take a transaction id
ed9a2d1 docs: bring README, docs and role-check comment in line with the merged fixes
cbe3be8 fix(tools): refuse a denied schema as pg_query's search_path in the tools, not the engine
a58b1bc chore: merge v2/fix55-tools (tools, spill and test-helper review fixes)
000cc8f chore: merge v2/fix55-guard (guard denylists and preflight review fixes)
af35579 chore: merge v2/fix55-engine (engine, config and resolver review fixes)
a96e695 fix(guard): deny pg_surgery and visibility-map truncation
9295089 docs(engine): say what the per-message headroom is for
86681a9 fix(engine): refuse a search_path naming a schema the guard denies
f8594b2 test: replace four scan-one-value helpers with testdb.Value
9c0b3fe test(tools): prove parallel calls on one connection overlap by their backends
e466136 fix(guard): deny pg_log_* functions
5ba9b5b fix(tools): stop waiting for another call's role check when the call ends
b1f52ce build: build without cgo, like the release binaries
e22555d refactor(engine): drop the compile-only contract test and unexport limits
bfef36e test(preflight): index the session user's failing query by name
a7320c3 docs: describe the relation denylist in the guard's comments and fix corpus source tags
621f041 fix(engine): fail on an oversized server message that comes before any row
074dce2 docs(tools): say strict refuses critical findings, not every role that can write
f377079 fix: spill under the user cache directory instead of the shared temp directory
224ff2d docs: say which findings are critical and add the PgBouncer read-only caveat
a376a8b feat(preflight): audit the session user and membership in superuser roles
88b0d50 fix(engine): count 24 bytes per value against max_bytes
f70d673 refactor: share the unknown-connection error and format list, drop RLSEnabled, rely on Parse defaults
9bd0f15 fix(engine): let a query waiting on a connection open give up with its context
b2e046a fix(tools): cut pg_schema output to the inline limit with a note
c294b9b fix(engine): resolve credentials again for each new connection
29d001e fix(preflight): flag EXECUTE on pg_background, aws_s3, aws_lambda and more server-file functions
d1aec52 refactor(spill): summarize spills by column names and types, capped to fit inline
bd0083a fix(preflight): pin the audit's search_path to pg_catalog
e90aece fix(guard): deny pg_background and the aws_s3 and aws_lambda schemas
7b9ab1c fix(guard): deny transaction-level advisory locks
9cefdf5 fix(guard): deny pg_log_backend_memory_contexts, which signals other backends
42052bd fix(config): bound the timeouts and spill_ttl_hours
476aa4e test: drop compile-only contract tests, tautologies and harness self-tests
3e8e1e7 fix(guard): deny catalogs that hold credentials, and get_raw_page
f94aeb1 fix(config): reject unknown keys in config.json
d3f55da test: replace enginetest and duplicated helpers with testdb.Querier, Conn and Image
322955f fix(guard): deny table_to_xml* and xpath_table, which read a relation by name
358311e fix(resolver): report a binary AWS secret instead of panicking
294cb37 fix(resolver): build the AWS secret DSN as an escaped URL
93934dc test(resolver): run TestRegisterSource serially; it races the parallel registry reads
922e929 test(resolver): stop TestRegisterSource racing the parallel tests
b1b6550 fix: close server-config read bypass and per-field memory DoS
31cad2e docs: describe the v2 tools, safety model and settings
4326330 feat(tools): rewire the tools on guard, role check, engine and spill
5484ed0 feat(engine): per-query max_rows; pin UTF8 and conforming strings
b8ebf03 fix(guard): deny functions whose effects outlive the rollback
7a61923 feat: merge v2/introspect, catalog introspection with a TTL cache
ffbdfbd feat: merge v2/render-spill, result formats and the spill store
cac2e8f feat: merge v2/preflight, the connected-role audit
80be2cd feat: merge v2/guard, the parser-based SQL guard
83f7506 feat: merge v2/engine, the pooled READ ONLY query engine
c52fd5b feat(guard): parse SQL and allow only one read-only statement
7b77b2d feat(engine): run each query in a rolled-back READ ONLY transaction on per-connection pools
5fe8001 feat: implement render formats and the spill store
791ec4d feat(introspect): catalog introspection with compact renders and a TTL cache
ccee856 feat(preflight): audit the connected role for write and escape privileges
2033864 feat: add v2 package contracts and a testcontainers Postgres harness
50da612 feat(config): add role_check, max_rows, max_bytes, lock timeout, spill TTL and format settings
594312a ci: migrate golangci-lint config to v2 and pin golangci-lint v2.10.1
adde695 docs: slim down README and move detailed docs to docs/
67aa722 fix(ci): rewrite golangci-lint config for v1 format compatibility
722de9b docs: add contributing guide with branch strategy and source extension walkthrough
5519730 docs: add usage guide with step-by-step examples and parallel query tips
54cb6be feat: add 24h TTL to AWS secrets cache
57761b8 refactor: restructure into internal/ packages following Go conventions
126a2d5 refactor: split resolver into separate files by concern
b1a74bd refactor: extract fieldValidator for structured credential validation
8c951d5 docs: add connection structure guide and extensibility reference
08dd83d refactor: introduce CredentialSource interface for pluggable credential backends
b4de17e docs: add comprehensive README for open-source release
f9820d4 feat: add MCP server entrypoint with parallel query support
17117a5 feat: add MCP tool handlers for list, query, and schema discovery
3aa13de feat: add query output formatting and smart truncation
d9dccc2 feat: add connection pool with TTL, VPN check, and DSN handling
9aca782 feat: add pluggable credential resolver with four source types
846eaf6 feat: add flexible multi-source connection configuration
25808b6 chore: add Go module definition and dependencies
6bee76a chore: add project scaffolding and CI/CD configuration
You can’t perform that action at this time.