From 45f3fa7a43959ac36588d31075e17c04ffe1eaa4 Mon Sep 17 00:00:00 2001 From: zgq Date: Mon, 21 Sep 2026 10:23:46 +0800 Subject: [PATCH] Prepare SQLX v0.1.9 release --- .github/workflows/packages.yml | 14 +++++++------- Cargo.lock | 10 +++++----- Cargo.toml | 2 +- README.md | 4 ++-- docs/release-notes.md | 15 ++++++--------- integrations/README.md | 2 +- .../plugins/sqlx/.claude-plugin/plugin.json | 4 ++-- .../codex/plugins/sqlx/.codex-plugin/plugin.json | 2 +- integrations/dsh/package.json | 2 +- integrations/pi/package.json | 2 +- java/jdbc/pom.xml | 2 +- packages/npm-installer/package.json | 2 +- scripts/jdbc-fixture.sh | 2 +- scripts/manifest.py | 2 +- scripts/package-shared.py | 4 ++-- scripts/package.py | 2 +- skills/sqlx/SKILL.md | 2 +- skills/sqlx/references/install-cli.md | 2 +- skills/sqlx/references/local-ui.md | 2 +- tests/updates.py | 4 ++-- 20 files changed, 39 insertions(+), 42 deletions(-) diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml index 8f33ee7..f4fe2c2 100644 --- a/.github/workflows/packages.yml +++ b/.github/workflows/packages.yml @@ -111,12 +111,12 @@ jobs: passed=$(gh run list --workflow ci.yml --commit "$GITHUB_SHA" --status success --json databaseId --jq 'length') test "$passed" -gt 0 # checkout's shallow SHA fetch creates a local lightweight tag; retrieve the actual tag object. - git fetch --force origin refs/tags/v0.1.8:refs/tags/v0.1.8 - test "$(git rev-parse 'v0.1.8^{commit}')" = "$GITHUB_SHA" - test "$(git describe --tags --exact-match HEAD)" = v0.1.8 - test "$(git cat-file -t refs/tags/v0.1.8)" = tag - gh release create v0.1.8 --draft --verify-tag --title 'SQLX 0.1.8' --notes-file docs/release-notes.md dist/*.zip dist/manifest.json dist/SHA256SUMS dist/release-version.txt - gh release edit v0.1.8 --draft=false --latest + git fetch --force origin refs/tags/v0.1.9:refs/tags/v0.1.9 + test "$(git rev-parse 'v0.1.9^{commit}')" = "$GITHUB_SHA" + test "$(git describe --tags --exact-match HEAD)" = v0.1.9 + test "$(git cat-file -t refs/tags/v0.1.9)" = tag + gh release create v0.1.9 --draft --verify-tag --title 'SQLX 0.1.9' --notes-file docs/release-notes.md dist/*.zip dist/manifest.json dist/SHA256SUMS dist/release-version.txt + gh release edit v0.1.9 --draft=false --latest npm: needs: [assemble] if: inputs.publish @@ -132,6 +132,6 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} run: | - test "$GITHUB_REF_NAME" = v0.1.8 + test "$GITHUB_REF_NAME" = v0.1.9 test "$(node -p 'require("./package.json").version')" = "${GITHUB_REF_NAME#v}" npm publish --access public diff --git a/Cargo.lock b/Cargo.lock index 1e5196f..255a4ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1453,7 +1453,7 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "ottermind-sqlx" -version = "0.1.8" +version = "0.1.9" dependencies = [ "aes-gcm", "anyhow", @@ -2181,7 +2181,7 @@ dependencies = [ [[package]] name = "sqlx-driver-mysql" -version = "0.1.8" +version = "0.1.9" dependencies = [ "anyhow", "base64", @@ -2193,7 +2193,7 @@ dependencies = [ [[package]] name = "sqlx-driver-postgres" -version = "0.1.8" +version = "0.1.9" dependencies = [ "anyhow", "base64", @@ -2211,7 +2211,7 @@ dependencies = [ [[package]] name = "sqlx-protocol" -version = "0.1.8" +version = "0.1.9" dependencies = [ "anyhow", "serde", @@ -2220,7 +2220,7 @@ dependencies = [ [[package]] name = "sqlx-ui" -version = "0.1.8" +version = "0.1.9" dependencies = [ "anyhow", "axum", diff --git a/Cargo.toml b/Cargo.toml index 0cf9f4e..447fafd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "2" members = ["crates/protocol", "crates/cli", "crates/ui", "drivers/mysql", "drivers/postgres"] [workspace.package] -version = "0.1.8" +version = "0.1.9" edition = "2021" rust-version = "1.95" license-file = "LICENSE" diff --git a/README.md b/README.md index a48fd2f..597733a 100644 --- a/README.md +++ b/README.md @@ -311,7 +311,7 @@ For Oracle and SQL Server, build the JDBC worker and place its driver JARs along ```sh mvn -B -f java/jdbc/pom.xml package -cp java/jdbc/target/sqlx-jdbc-0.1.8.jar target/release/sqlx-jdbc.jar +cp java/jdbc/target/sqlx-jdbc-0.1.9.jar target/release/sqlx-jdbc.jar curl -fL https://repo.maven.apache.org/maven2/com/oracle/database/jdbc/ojdbc11/23.6.0.24.10/ojdbc11-23.6.0.24.10.jar -o target/release/ojdbc.jar curl -fL https://repo.maven.apache.org/maven2/com/microsoft/sqlserver/mssql-jdbc/12.10.1.jre11/mssql-jdbc-12.10.1.jre11.jar -o target/release/mssql-jdbc.jar ``` @@ -320,7 +320,7 @@ On Windows PowerShell: ```powershell mvn -B -f java/jdbc/pom.xml package -Copy-Item java/jdbc/target/sqlx-jdbc-0.1.8.jar target/release/sqlx-jdbc.jar +Copy-Item java/jdbc/target/sqlx-jdbc-0.1.9.jar target/release/sqlx-jdbc.jar Invoke-WebRequest 'https://repo.maven.apache.org/maven2/com/oracle/database/jdbc/ojdbc11/23.6.0.24.10/ojdbc11-23.6.0.24.10.jar' -OutFile target/release/ojdbc.jar Invoke-WebRequest 'https://repo.maven.apache.org/maven2/com/microsoft/sqlserver/mssql-jdbc/12.10.1.jre11/mssql-jdbc-12.10.1.jre11.jar' -OutFile target/release/mssql-jdbc.jar ``` diff --git a/docs/release-notes.md b/docs/release-notes.md index ed45fed..7e270f6 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -1,21 +1,18 @@ -SQLX 0.1.8 fixes credential redaction in the JDBC worker and documents how to connect to a local database. +SQLX 0.1.9 serves SQLX over the Model Context Protocol and ships ready-made integrations for four agent harnesses. -## Fixes +## New -- The JDBC worker redacted the username and password wherever they appeared, so a driver message could lose unrelated text: with the password `oracle`, the Oracle help link arrived as `https://docs.[redacted].com/error-help/db/ora-17002/`. Redaction now leaves a secret alone when it is only part of a word or a hostname, matching the CLI behaviour shipped in 0.1.7. - -## Improvements - -- The README's first-connection section now names the MySQL, Oracle and SQL Server flags, lists the three failure messages a local container produces under the default certificate verification, and shows the `--tls disable` form for a new or existing connection. +- `sqlx mcp` runs SQLX as a Model Context Protocol server over stdio, exposing `sqlx_datasource_list`, `sqlx_datasource_show`, `sqlx_datasource_test`, `sqlx_sql_execute`, `sqlx_sql_view` and `sqlx_prefetch`. Read-only tools are annotated as read-only; both execution tools are marked destructive and state in their description that the user must authorize the operation and its scope first, so a harness that gates destructive tools asks before running them. +- Integrations for four harnesses: Codex and Claude Code install a plugin that starts the MCP server, while DeepSeek Harness and Pi install a package that registers the same tools natively. Each integration lives under `integrations/` and requires the SQLX CLI on `PATH`. ## Upgrading From SQLX 0.1.2 or later, run `sqlx update check`, `sqlx update install`, and `sqlx update status`. Versions 0.1.0 and 0.1.1 need the [README installer](https://github.com/OtterMind/sqlx#install-the-cli) first. -CLI updates preserve running UI services and the selected plugin. This release does not change the local page plugin, so no page update is required. Downloaded components are cached per version and reused, so an upgrade only fetches components that changed. Update managed Skills separately with `sqlx skill update` after upgrading the CLI; the 0.1.8 Skill requires SQLX 0.1.8. +CLI updates preserve running UI services and the selected plugin. This release does not change the local page plugin, so no page update is required. Downloaded components are cached per version and reused, so an upgrade only fetches components that changed. Update managed Skills separately with `sqlx skill update` after upgrading the CLI; the 0.1.9 Skill requires SQLX 0.1.9. The Skill's approval rule constrains the Agent workflow only. SQLX itself still executes the supplied SQL unchanged, and an explicit result refresh still reruns the complete original batch, including any writes. Prebuilt packages are available for macOS ARM64/x64, Linux ARM64/x64, and Windows x64. macOS executables are Developer ID signed and notarized. See LICENSE and NOTICE for license conditions. -**Full Changelog**: https://github.com/OtterMind/sqlx/compare/v0.1.7...v0.1.8 +**Full Changelog**: https://github.com/OtterMind/sqlx/compare/v0.1.8...v0.1.9 diff --git a/integrations/README.md b/integrations/README.md index d17d810..624d75e 100644 --- a/integrations/README.md +++ b/integrations/README.md @@ -13,7 +13,7 @@ thin native-tool packages for harnesses that register tools themselves. ## Requirements -The `sqlx` CLI (0.1.8 or later, which provides `sqlx mcp`) must be installed and on `PATH`. +The `sqlx` CLI (0.1.9 or later, which provides `sqlx mcp`) must be installed and on `PATH`. `SQLX_BIN` selects a specific executable; otherwise the first `sqlx` on `PATH` is used. ## Tools diff --git a/integrations/claude/plugins/sqlx/.claude-plugin/plugin.json b/integrations/claude/plugins/sqlx/.claude-plugin/plugin.json index 317ad91..185c616 100644 --- a/integrations/claude/plugins/sqlx/.claude-plugin/plugin.json +++ b/integrations/claude/plugins/sqlx/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "sqlx", - "description": "List saved OtterMind SQLX datasources, test connections, execute SQL against MySQL, PostgreSQL, Oracle and SQL Server, and open local result pages. Credentials stay in the SQLX data directory. Requires the sqlx CLI (0.1.8+) on PATH.", - "version": "0.1.8", + "description": "List saved OtterMind SQLX datasources, test connections, execute SQL against MySQL, PostgreSQL, Oracle and SQL Server, and open local result pages. Credentials stay in the SQLX data directory. Requires the sqlx CLI (0.1.9+) on PATH.", + "version": "0.1.9", "author": { "name": "OtterMind" }, diff --git a/integrations/codex/plugins/sqlx/.codex-plugin/plugin.json b/integrations/codex/plugins/sqlx/.codex-plugin/plugin.json index 309c36f..274076f 100644 --- a/integrations/codex/plugins/sqlx/.codex-plugin/plugin.json +++ b/integrations/codex/plugins/sqlx/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "sqlx", - "version": "0.1.8", + "version": "0.1.9", "description": "List saved OtterMind SQLX datasources, test connections, execute SQL against MySQL, PostgreSQL, Oracle and SQL Server, and open local result pages. Credentials stay in the SQLX data directory.", "author": { "name": "OtterMind" diff --git a/integrations/dsh/package.json b/integrations/dsh/package.json index be731d4..c42c588 100644 --- a/integrations/dsh/package.json +++ b/integrations/dsh/package.json @@ -1,6 +1,6 @@ { "name": "@ottermind/dsh-sqlx", - "version": "0.1.8", + "version": "0.1.9", "description": "OtterMind SQLX tools for DeepSeek Harness: list datasources, test connections, execute SQL and open local result pages.", "type": "module", "main": "lib/index.js", diff --git a/integrations/pi/package.json b/integrations/pi/package.json index 6af6d72..480ef72 100644 --- a/integrations/pi/package.json +++ b/integrations/pi/package.json @@ -1,6 +1,6 @@ { "name": "@ottermind/pi-sqlx", - "version": "0.1.8", + "version": "0.1.9", "description": "OtterMind SQLX tools for the Pi coding agent: list datasources, test connections, execute SQL and open local result pages.", "keywords": [ "pi-package", diff --git a/java/jdbc/pom.xml b/java/jdbc/pom.xml index d0a19d7..231c9c0 100644 --- a/java/jdbc/pom.xml +++ b/java/jdbc/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - ai.ottermind.sqlxsqlx-jdbc0.1.8 + ai.ottermind.sqlxsqlx-jdbc0.1.9 17UTF-8 com.fasterxml.jackson.corejackson-databind2.18.6 diff --git a/packages/npm-installer/package.json b/packages/npm-installer/package.json index 772ec17..2ec3f7b 100644 --- a/packages/npm-installer/package.json +++ b/packages/npm-installer/package.json @@ -1,6 +1,6 @@ { "name": "@ottermind/sqlx", - "version": "0.1.8", + "version": "0.1.9", "description": "Install or update the SQLX database CLI and its agent Skill.", "license": "LicenseRef-Chat2DB", "homepage": "https://github.com/OtterMind/sqlx#readme", diff --git a/scripts/jdbc-fixture.sh b/scripts/jdbc-fixture.sh index 237ee35..501c694 100644 --- a/scripts/jdbc-fixture.sh +++ b/scripts/jdbc-fixture.sh @@ -2,7 +2,7 @@ set -euo pipefail kind="${1:?oracle or sqlserver required}" mkdir -p target/debug -cp java/jdbc/target/sqlx-jdbc-0.1.8.jar target/debug/sqlx-jdbc.jar +cp java/jdbc/target/sqlx-jdbc-0.1.9.jar target/debug/sqlx-jdbc.jar case "$kind" in oracle) curl --fail --location --retry 3 'https://repo.maven.apache.org/maven2/com/oracle/database/jdbc/ojdbc11/23.6.0.24.10/ojdbc11-23.6.0.24.10.jar' -o target/debug/ojdbc.jar diff --git a/scripts/manifest.py b/scripts/manifest.py index 5cc4348..20ad413 100644 --- a/scripts/manifest.py +++ b/scripts/manifest.py @@ -2,7 +2,7 @@ import argparse,hashlib,json from pathlib import Path def main(): - p=argparse.ArgumentParser();p.add_argument('directory',type=Path);p.add_argument('--version',default='0.1.8');a=p.parse_args();components={} + p=argparse.ArgumentParser();p.add_argument('directory',type=Path);p.add_argument('--version',default='0.1.9');a=p.parse_args();components={} for path in sorted(a.directory.glob('metadata-*.json')): fragment=json.loads(path.read_text()) if set(components)&set(fragment):raise ValueError('duplicate manifest components') diff --git a/scripts/package-shared.py b/scripts/package-shared.py index cf00c5f..af35a56 100644 --- a/scripts/package-shared.py +++ b/scripts/package-shared.py @@ -11,7 +11,7 @@ def get(url): if attempt==2:raise time.sleep(attempt+1) def main(): - p=argparse.ArgumentParser();p.add_argument('--version',default='0.1.8');p.add_argument('--output',type=Path,default=ROOT/'dist');a=p.parse_args();a.output.mkdir(parents=True,exist_ok=True) + p=argparse.ArgumentParser();p.add_argument('--version',default='0.1.9');p.add_argument('--output',type=Path,default=ROOT/'dist');a=p.parse_args();a.output.mkdir(parents=True,exist_ok=True) records={};base=f'https://github.com/OtterMind/sqlx/releases/download/v{a.version}/' def add(name,entries,entrypoint,version=None): component_version=version or a.version @@ -19,7 +19,7 @@ def add(name,entries,entrypoint,version=None): with zipfile.ZipFile(path,'w',zipfile.ZIP_DEFLATED) as z: for filename,body in entries.items():z.writestr(filename,body) # The Skill ships with the CLI, so it requires the same release; the default - # UI plugin is unchanged in 0.1.8 and keeps its 0.1.4 requirement. + # UI plugin is unchanged in 0.1.9 and keeps its 0.1.4 requirement. compat={'skill':f'>={a.version}, <0.2.0','ui-default':'>=0.1.4, <0.2.0'}.get(name,'>=0.1.1, <0.2.0') records[f'{name}:any']=dict(version=component_version,url=base+path.name,sha256=hashlib.sha256(path.read_bytes()).hexdigest(),archive='zip',entrypoint=entrypoint,cli_compat=compat,protocol_version=1) add('jdbc',{'sqlx-jdbc.jar':(ROOT/f'java/jdbc/target/sqlx-jdbc-{a.version}.jar').read_bytes(),'LICENSE':(ROOT/'LICENSE').read_bytes(),'NOTICE':(ROOT/'NOTICE').read_bytes()},'sqlx-jdbc.jar') diff --git a/scripts/package.py b/scripts/package.py index 66a34bf..88f8184 100644 --- a/scripts/package.py +++ b/scripts/package.py @@ -8,7 +8,7 @@ def archive(output,files): for source,name in files:z.write(source,name) return hashlib.sha256(output.read_bytes()).hexdigest() def main(): - p=argparse.ArgumentParser();p.add_argument('--platform',required=True);p.add_argument('--version',default='0.1.8');p.add_argument('--bin-dir',type=Path,default=ROOT/'target/release');p.add_argument('--output',type=Path,default=ROOT/'dist');a=p.parse_args() + p=argparse.ArgumentParser();p.add_argument('--platform',required=True);p.add_argument('--version',default='0.1.9');p.add_argument('--bin-dir',type=Path,default=ROOT/'target/release');p.add_argument('--output',type=Path,default=ROOT/'dist');a=p.parse_args() a.output.mkdir(parents=True,exist_ok=True);records={} suffix='.exe' if a.platform.startswith('windows-') else '' for kind,binary in [('cli','sqlx'),('mysql','sqlx-driver-mysql'),('postgres','sqlx-driver-postgres'),('ui','sqlx-ui')]: diff --git a/skills/sqlx/SKILL.md b/skills/sqlx/SKILL.md index d558d99..422394c 100644 --- a/skills/sqlx/SKILL.md +++ b/skills/sqlx/SKILL.md @@ -2,7 +2,7 @@ name: sqlx description: Manage encrypted database connections and execute SQL with the OtterMind SQLX CLI. Use for MySQL, PostgreSQL, Oracle, and SQL Server connection checks, queries, DDL, and schema inspection. This skill targets OtterMind/sqlx, not the Rust SQLx migration CLI. metadata: - cli-compat: ">=0.1.8, <0.2.0" + cli-compat: ">=0.1.9, <0.2.0" --- # SQLX diff --git a/skills/sqlx/references/install-cli.md b/skills/sqlx/references/install-cli.md index e9efe62..cbf2de2 100644 --- a/skills/sqlx/references/install-cli.md +++ b/skills/sqlx/references/install-cli.md @@ -1,6 +1,6 @@ # Install OtterMind SQLX -The repository is https://github.com/OtterMind/sqlx. The supported CLI range for this Skill is `>=0.1.8, <0.2.0`. The local-page commands are not available in 0.1.0; check the actual version before using them. +The repository is https://github.com/OtterMind/sqlx. The supported CLI range for this Skill is `>=0.1.9, <0.2.0`. The local-page commands are not available in 0.1.0; check the actual version before using them. 1. Check `sqlx --version` and `sqlx --help`. An existing Rust SQLx migration tool is a different executable; preserve it and install this client into a separate user directory, using the explicit path when needed. 2. Select a release from the repository's GitHub Releases page compatible with this Skill. If no binary release is published, follow the [README source installation](https://github.com/OtterMind/sqlx#build-from-source) when the required build tools are available. Do not download another project's CLI or pretend a release exists. diff --git a/skills/sqlx/references/local-ui.md b/skills/sqlx/references/local-ui.md index 1db55ac..231f8bc 100644 --- a/skills/sqlx/references/local-ui.md +++ b/skills/sqlx/references/local-ui.md @@ -1,6 +1,6 @@ # Local credential and result pages -This Skill requires SQLX 0.1.8. Basic local-page commands were introduced in 0.1.1; saved-datasource browsing, data refresh and session renewal were introduced in 0.1.3. Reusable local links and stable restart addresses require 0.1.4. The page is served by a separately downloaded local service and the selected UI plugin, and opens on the machine where the CLI runs. A local URL from a remote SSH environment does not automatically open the remote page on the user's computer. +This Skill requires SQLX 0.1.9. Basic local-page commands were introduced in 0.1.1; saved-datasource browsing, data refresh and session renewal were introduced in 0.1.3. Reusable local links and stable restart addresses require 0.1.4. The page is served by a separately downloaded local service and the selected UI plugin, and opens on the machine where the CLI runs. A local URL from a remote SSH environment does not automatically open the remote page on the user's computer. ## Deliver the page link diff --git a/tests/updates.py b/tests/updates.py index 1ef71c2..c83b617 100644 --- a/tests/updates.py +++ b/tests/updates.py @@ -14,8 +14,8 @@ import zipfile ROOT = Path(__file__).resolve().parents[1] -CURRENT = "0.1.8" -NEXT = "0.1.9" +CURRENT = "0.1.9" +NEXT = "0.1.10" SUFFIX = ".exe" if os.name == "nt" else "" NAME = "sqlx" + SUFFIX CLI = ROOT / "target/debug" / NAME