diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 48a7ede4..caefb2eb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' cache-dependency-path: 'qpi-ui/go.sum' - name: Set up uv @@ -69,7 +69,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' cache-dependency-path: 'qpi-ui/go.sum' - name: Set up uv @@ -137,7 +137,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' cache-dependency-path: 'qpi-client/go/go.sum' @@ -209,7 +209,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - go-version: ['1.26.x'] + go-version: ['1.27.x'] steps: - name: Checkout Code @@ -265,7 +265,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' cache-dependency-path: 'qpi-ui/go.sum' - name: Set up uv @@ -315,7 +315,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' cache-dependency-path: 'qpi-driver/go/go.sum' - name: Set up uv @@ -496,7 +496,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' - name: Set up Node.js uses: actions/setup-node@v4 @@ -552,7 +552,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' - name: Set up Node.js uses: actions/setup-node@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index dd80423b..c5f45d2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,28 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project follows versions of format `{year}.{month}.{patch_number}`. +## [0.4.3] - 2026-10-30 + +### Changed + +- `go`: every Go module requires Go 1.27.3 and CI builds on 1.27.x, so nothing is built with + a toolchain that still trusts the compromised eMudhra intermediate CAs (CVE-2026-111943, + fixed in Go 1.27.3 and 1.26.10). A binary built before this keeps trusting certificates + issued from the leaked keys until it is rebuilt. +- `qpi-client/py`, `qpi-driver/py`: certifi moves to 2026.10.23, which drops three of the + four eMudhra roots — `emSign ECC Root CA - G3` among them. The pinned 2026.5.20 bundle + still trusted them, and Go's denylist covers only Go. + +### Fixed + +- `qpi-driver/py`: `install-systemd.sh` lets uv take a prerelease only where no release will + do. `--prerelease allow`, there for the qblox extra, applied to every package and pulled in a + pynng beta whose wheel wants a `libatomic` stock Ubuntu has not got — so the driver it + installed died on `import pynng` before it could start. +- `qpi-ui`: pocketbase moves to 0.40.6. Built with Go 1.27, which turns `encoding/json/v2` + on, 0.39.2's `Collection.UnmarshalJSON` recursed into itself, so the server died of a stack + overflow on the first collection it decoded and every request after that was refused. + ## [0.4.2] - 2026-08-16 ### Added diff --git a/Makefile b/Makefile index ed673f41..97867719 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION ?= 0.4.2 +VERSION ?= 0.4.3 UV := $(shell command -v uv 2> /dev/null || echo "$$HOME/.local/bin/uv") EXECUTOR ?= mock EXECUTORS := mock aer quantify qblox diff --git a/README.md b/README.md index eb44ee1a..39f29ceb 100644 --- a/README.md +++ b/README.md @@ -77,12 +77,12 @@ The server is available as a single executable binary, as well as native OS pack #### Standalone Binary (macOS & Linux) Download the binary for your platform, make it executable, and run: ```bash -# macOS (replace 0.4.2 with the version you wish to install) -curl -LO https://github.com/sopherapps/qpi/releases/download/v0.4.2/qpi-0.4.2-darwin-amd64 -chmod +x qpi-0.4.2-darwin-amd64 && mv qpi-0.4.2-darwin-amd64 qpi +# macOS (replace 0.4.3 with the version you wish to install) +curl -LO https://github.com/sopherapps/qpi/releases/download/v0.4.3/qpi-0.4.3-darwin-amd64 +chmod +x qpi-0.4.3-darwin-amd64 && mv qpi-0.4.3-darwin-amd64 qpi # Linux (standalone binary) -curl -L https://github.com/sopherapps/qpi/releases/download/v0.4.2/qpi-0.4.2-linux-amd64.tar.gz | tar -xz +curl -L https://github.com/sopherapps/qpi/releases/download/v0.4.3/qpi-0.4.3-linux-amd64.tar.gz | tar -xz # Start the server ./qpi serve @@ -91,8 +91,8 @@ curl -L https://github.com/sopherapps/qpi/releases/download/v0.4.2/qpi-0.4.2-lin #### Native Linux Packages (Ubuntu, Debian, Fedora, Alpine) For Debian/Ubuntu, download and install the `.deb` package: ```bash -wget https://github.com/sopherapps/qpi/releases/download/v0.4.2/qpi_0.4.2_amd64.deb -sudo apt install ./qpi_0.4.2_amd64.deb +wget https://github.com/sopherapps/qpi/releases/download/v0.4.3/qpi_0.4.3_amd64.deb +sudo apt install ./qpi_0.4.3_amd64.deb ``` *(Note: Installing the package automatically registers and starts `qpi.service` under systemd (or OpenRC on Alpine) to run the server in the background on port `8090`)* diff --git a/e2e/go.mod b/e2e/go.mod index e0b55d42..8142291d 100644 --- a/e2e/go.mod +++ b/e2e/go.mod @@ -1,6 +1,6 @@ module smoke -go 1.21 +go 1.27.3 replace github.com/sopherapps/qpi/qpi-client/go => ../qpi-client/go diff --git a/qpi-client/go/go.mod b/qpi-client/go/go.mod index 01869c3b..6760787e 100644 --- a/qpi-client/go/go.mod +++ b/qpi-client/go/go.mod @@ -1,3 +1,3 @@ module github.com/sopherapps/qpi/qpi-client/go -go 1.21 +go 1.27.3 diff --git a/qpi-client/js/package-lock.json b/qpi-client/js/package-lock.json index cd6f1970..de593ec5 100644 --- a/qpi-client/js/package-lock.json +++ b/qpi-client/js/package-lock.json @@ -1,12 +1,12 @@ { "name": "qpi-client", - "version": "0.4.2", + "version": "0.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "qpi-client", - "version": "0.4.2", + "version": "0.4.3", "license": "MIT", "devDependencies": { "@types/jest": "^29.5.0", diff --git a/qpi-client/js/package.json b/qpi-client/js/package.json index e6942bee..c13077dc 100644 --- a/qpi-client/js/package.json +++ b/qpi-client/js/package.json @@ -1,6 +1,6 @@ { "name": "qpi-client", - "version": "0.4.2", + "version": "0.4.3", "description": "JavaScript/TypeScript client SDK for the QPI quantum computing platform", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/qpi-client/py/pyproject.toml b/qpi-client/py/pyproject.toml index 110f7fa6..9f088b14 100644 --- a/qpi-client/py/pyproject.toml +++ b/qpi-client/py/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "qpi-client" -version = "0.4.2" +version = "0.4.3" description = "Python client SDK for the QPI quantum computing platform" readme = "README.md" license = {text = "MIT"} diff --git a/qpi-client/py/qpi_client/__init__.py b/qpi-client/py/qpi_client/__init__.py index 3fca3145..5c349bfe 100644 --- a/qpi-client/py/qpi_client/__init__.py +++ b/qpi-client/py/qpi_client/__init__.py @@ -30,7 +30,7 @@ try: __version__ = importlib.metadata.version("qpi-client") except importlib.metadata.PackageNotFoundError: - __version__ = "0.4.2" + __version__ = "0.4.3" from qpi_client.client import QPIClient from qpi_client.provider import QPIBackend, QPIJob diff --git a/qpi-client/py/uv.lock b/qpi-client/py/uv.lock index 09b197fc..45d1f3f5 100644 --- a/qpi-client/py/uv.lock +++ b/qpi-client/py/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 5 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.11'", @@ -8,11 +8,11 @@ resolution-markers = [ [[package]] name = "certifi" -version = "2026.5.20" +version = "2026.10.23" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422, upload-time = "2026-05-20T11:46:50.073Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/11/b524cbd9bbdaca58608e4cf4053fd463417549e1959fa8d3aa18319f9555/certifi-2026.10.23.tar.gz", hash = "sha256:a9895e6e2758b371e0545e321a3a8fd1fcfd9829ada8824a936dfb16aaaf36cd", size = 136225, upload-time = "2026-10-23T11:36:16.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134, upload-time = "2026-05-20T11:46:48.578Z" }, + { url = "https://files.pythonhosted.org/packages/32/d1/a3652fe2c19134d0d15922177821d863cbd7e842d53a21bbe7e8e3a1b5ac/certifi-2026.10.23-py3-none-any.whl", hash = "sha256:e9b54de76e530bb6cf0ccd036787103acb58fd42ba930ea8bf948ddbaa2f61d1", size = 135082, upload-time = "2026-10-23T11:36:14.763Z" }, ] [[package]] @@ -387,7 +387,7 @@ wheels = [ [[package]] name = "qpi-client" -version = "0.4.2" +version = "0.4.3" source = { editable = "." } dependencies = [ { name = "qiskit" }, diff --git a/qpi-driver/go/cli/cli.go b/qpi-driver/go/cli/cli.go index 3a0d52f6..90a15089 100644 --- a/qpi-driver/go/cli/cli.go +++ b/qpi-driver/go/cli/cli.go @@ -27,7 +27,7 @@ import ( // Version is the CLI version; overridable at build time with // -ldflags "-X github.com/sopherapps/qpi/qpi-driver/go/cli.Version=…". -var Version = "0.4.2" +var Version = "0.4.3" // commonFlags are the universal options `start` shares across every operation, // mirroring the Python CLI. A device's own settings go through -o instead. diff --git a/qpi-driver/go/go.mod b/qpi-driver/go/go.mod index f7c1cba6..88671916 100644 --- a/qpi-driver/go/go.mod +++ b/qpi-driver/go/go.mod @@ -1,6 +1,6 @@ module github.com/sopherapps/qpi/qpi-driver/go -go 1.21 +go 1.27.3 require ( github.com/spf13/cobra v1.8.1 diff --git a/qpi-driver/js/package-lock.json b/qpi-driver/js/package-lock.json index afdeb404..7db333dc 100644 --- a/qpi-driver/js/package-lock.json +++ b/qpi-driver/js/package-lock.json @@ -1,12 +1,12 @@ { "name": "qpi-driver", - "version": "0.4.2", + "version": "0.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "qpi-driver", - "version": "0.4.2", + "version": "0.4.3", "license": "MIT", "dependencies": { "commander": "^12.1.0" diff --git a/qpi-driver/js/package.json b/qpi-driver/js/package.json index f2f14436..8f64d65d 100644 --- a/qpi-driver/js/package.json +++ b/qpi-driver/js/package.json @@ -1,6 +1,6 @@ { "name": "qpi-driver", - "version": "0.4.2", + "version": "0.4.3", "description": "TypeScript/JavaScript SDK for building QPI quantum platform drivers", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/qpi-driver/py/install-systemd.sh b/qpi-driver/py/install-systemd.sh index 2590e620..340008f2 100755 --- a/qpi-driver/py/install-systemd.sh +++ b/qpi-driver/py/install-systemd.sh @@ -124,7 +124,10 @@ else else VERSION_SUFFIX="==$QPI_DRIVER_VERSION" fi - sudo -u "$REAL_USER" "$UV_PATH" tool install --python 3.12 --prerelease allow "qpi-driver[cli,${DEVICE}]${VERSION_SUFFIX}" + # `if-necessary`, not `allow`: the qblox extra needs prereleases, but `allow` + # applies to every package, and it reached for a pynng beta whose wheel wants a + # libatomic the base image has not got. A prerelease only where no release will do. + sudo -u "$REAL_USER" "$UV_PATH" tool install --python 3.12 --prerelease if-necessary "qpi-driver[cli,${DEVICE}]${VERSION_SUFFIX}" QPI_DRIVER_BIN="${QPI_DRIVER_BIN:-$REAL_HOME/.local/bin/qpi-driver}" fi diff --git a/qpi-driver/py/pyproject.toml b/qpi-driver/py/pyproject.toml index 291c5361..02378e28 100644 --- a/qpi-driver/py/pyproject.toml +++ b/qpi-driver/py/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "qpi-driver" -version = "0.4.2" +version = "0.4.3" description = "Quantum Processing Interface (QPI) QPU Driver" readme = "README.md" requires-python = ">=3.12,<3.13" diff --git a/qpi-driver/py/qpi_driver/__init__.py b/qpi-driver/py/qpi_driver/__init__.py index a45d45fc..de1af176 100644 --- a/qpi-driver/py/qpi_driver/__init__.py +++ b/qpi-driver/py/qpi_driver/__init__.py @@ -3,7 +3,7 @@ try: __version__ = importlib.metadata.version("qpi-driver") except importlib.metadata.PackageNotFoundError: - __version__ = "0.4.2" + __version__ = "0.4.3" from qpi_driver.builtins import ( DeviceBuilder, diff --git a/qpi-driver/py/qpi_driver/cli.py b/qpi-driver/py/qpi_driver/cli.py index 42eb9a32..ae23749e 100644 --- a/qpi-driver/py/qpi_driver/cli.py +++ b/qpi-driver/py/qpi_driver/cli.py @@ -253,7 +253,7 @@ def _get_version() -> str: try: return importlib.metadata.version("qpi-driver") except importlib.metadata.PackageNotFoundError: - return "0.4.2" + return "0.4.3" def _banner(): """Renders the banner at the top of the CLI""" diff --git a/qpi-driver/py/tests/test_cli.py b/qpi-driver/py/tests/test_cli.py index bbd455a2..b49c737b 100644 --- a/qpi-driver/py/tests/test_cli.py +++ b/qpi-driver/py/tests/test_cli.py @@ -40,7 +40,7 @@ def test_cli_version(): try: expected_version = importlib.metadata.version("qpi-driver") except importlib.metadata.PackageNotFoundError: - expected_version = "0.4.2" + expected_version = "0.4.3" assert expected_version in result.stdout @@ -418,7 +418,7 @@ def test_version_falls_back_when_the_package_is_not_installed(): "version", side_effect=importlib.metadata.PackageNotFoundError("qpi-driver"), ): - assert _get_version() == "0.4.2" + assert _get_version() == "0.4.3" def test_cli_process_requires_token(): diff --git a/qpi-driver/py/uv.lock b/qpi-driver/py/uv.lock index bb2c3550..45dc6ab1 100644 --- a/qpi-driver/py/uv.lock +++ b/qpi-driver/py/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 5 requires-python = "==3.12.*" resolution-markers = [ "sys_platform == 'darwin'", @@ -160,11 +160,11 @@ wheels = [ [[package]] name = "certifi" -version = "2026.5.20" +version = "2026.10.23" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422, upload-time = "2026-05-20T11:46:50.073Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/11/b524cbd9bbdaca58608e4cf4053fd463417549e1959fa8d3aa18319f9555/certifi-2026.10.23.tar.gz", hash = "sha256:a9895e6e2758b371e0545e321a3a8fd1fcfd9829ada8824a936dfb16aaaf36cd", size = 136225, upload-time = "2026-10-23T11:36:16.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134, upload-time = "2026-05-20T11:46:48.578Z" }, + { url = "https://files.pythonhosted.org/packages/32/d1/a3652fe2c19134d0d15922177821d863cbd7e842d53a21bbe7e8e3a1b5ac/certifi-2026.10.23-py3-none-any.whl", hash = "sha256:e9b54de76e530bb6cf0ccd036787103acb58fd42ba930ea8bf948ddbaa2f61d1", size = 135082, upload-time = "2026-10-23T11:36:14.763Z" }, ] [[package]] @@ -1694,7 +1694,7 @@ wheels = [ [[package]] name = "qpi-driver" -version = "0.4.2" +version = "0.4.3" source = { editable = "." } dependencies = [ { name = "numpy" }, diff --git a/qpi-ui/go.mod b/qpi-ui/go.mod index 3561459c..805db709 100644 --- a/qpi-ui/go.mod +++ b/qpi-ui/go.mod @@ -1,11 +1,11 @@ module qpi -go 1.26.3 +go 1.27.3 require ( github.com/go-playground/validator/v10 v10.30.3 github.com/pocketbase/dbx v1.12.0 - github.com/pocketbase/pocketbase v0.39.2 + github.com/pocketbase/pocketbase v0.40.6 github.com/spf13/cobra v1.10.2 go.nanomsg.org/mangos/v3 v3.4.2 gopkg.in/yaml.v3 v3.0.1 @@ -15,11 +15,11 @@ require ( github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/disintegration/imaging v1.6.2 // indirect github.com/domodwyer/mailyak/v3 v3.6.2 // indirect - github.com/dustin/go-humanize v1.0.1 // indirect + github.com/dustin/go-humanize v1.1.0 // indirect github.com/fatih/color v1.19.0 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.13 // indirect - github.com/ganigeorgiev/fexpr v0.5.0 // indirect + github.com/fsnotify/fsnotify v1.10.1 // indirect + github.com/gabriel-vasile/mimetype v1.4.15 // indirect + github.com/ganigeorgiev/fexpr v0.6.0 // indirect github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect @@ -27,21 +27,22 @@ require ( github.com/google/uuid v1.6.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.22 // indirect - github.com/ncruces/go-strftime v1.0.0 // indirect + github.com/mattn/go-colorable v0.1.16 // indirect + github.com/mattn/go-isatty v0.0.24 // indirect + github.com/ncruces/go-strftime v1.1.0 // indirect + github.com/pocketbase/ozzo-validation/v4 v4.3.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/spf13/cast v1.10.0 // indirect github.com/spf13/pflag v1.0.10 // indirect - golang.org/x/crypto v0.52.0 // indirect - golang.org/x/image v0.41.0 // indirect - golang.org/x/net v0.55.0 // indirect - golang.org/x/oauth2 v0.36.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/text v0.37.0 // indirect - modernc.org/libc v1.72.3 // indirect + golang.org/x/crypto v0.58.0 // indirect + golang.org/x/image v0.47.0 // indirect + golang.org/x/net v0.61.0 // indirect + golang.org/x/oauth2 v0.37.0 // indirect + golang.org/x/sync v0.24.0 // indirect + golang.org/x/sys v0.49.0 // indirect + golang.org/x/text v0.43.0 // indirect + modernc.org/libc v1.77.1 // indirect modernc.org/mathutil v1.7.1 // indirect - modernc.org/memory v1.11.0 // indirect - modernc.org/sqlite v1.52.0 // indirect + modernc.org/memory v1.12.1 // indirect + modernc.org/sqlite v1.60.1 // indirect ) diff --git a/qpi-ui/go.sum b/qpi-ui/go.sum index 11cd5c74..3e1b8cfb 100644 --- a/qpi-ui/go.sum +++ b/qpi-ui/go.sum @@ -12,16 +12,24 @@ github.com/domodwyer/mailyak/v3 v3.6.2 h1:x3tGMsyFhTCaxp6ycgR0FE/bu5QiNp+hetUuCO github.com/domodwyer/mailyak/v3 v3.6.2/go.mod h1:lOm/u9CyCVWHeaAmHIdF4RiKVxKUT/H5XX10lIKAL6c= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/dustin/go-humanize v1.1.0 h1:dbKTrvD0klcbBV/h4AWJdMuZogJACoMlvWIWZ5b2xWg= +github.com/dustin/go-humanize v1.1.0/go.mod h1:hc1CvRkJMsgxqjmjMQF3QNRAZBwY8AXBAzKYoSX9sFI= github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= +github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/gabriel-vasile/mimetype v1.4.15 h1:05iP/CYtZ/w455R/KZM6rZ5ieAdh99UPtd+d3YzLmaI= +github.com/gabriel-vasile/mimetype v1.4.15/go.mod h1:azpTcoLcDZRNgFou5j+APrqQx9HqVPWa6ijYQIIVswQ= github.com/ganigeorgiev/fexpr v0.5.0 h1:XA9JxtTE/Xm+g/JFI6RfZEHSiQlk+1glLvRK1Lpv/Tk= github.com/ganigeorgiev/fexpr v0.5.0/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE= +github.com/ganigeorgiev/fexpr v0.6.0 h1:Fza3O/QMBKEudUvxV862qe6GjxM60GJjjKytdp+VQus= +github.com/ganigeorgiev/fexpr v0.6.0/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE= github.com/gdamore/optopia v0.2.0/go.mod h1:YKYEwo5C1Pa617H7NlPcmQXl+vG6YnSSNB44n8dNL0Q= github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es= github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= @@ -42,6 +50,7 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20260402051712-545e8a4df936 h1:EwtI+Al+DeppwYX2oXJCETMO23COyaKGP6fHVpkpWpg= github.com/google/pprof v0.0.0-20260402051712-545e8a4df936/go.mod h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI= +github.com/google/pprof v0.0.0-20261016150608-1facf8f91b50 h1:PlNWJRxu5APSV0pWqfIsZ0qt9OOGHSWfZQ4zvx+WgWs= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -57,16 +66,26 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-colorable v0.1.16 h1:+2YjeAe7xP1OQbZW1jERPWWCDLlNqFNCvjiqGiAt84A= +github.com/mattn/go-colorable v0.1.16/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= +github.com/mattn/go-isatty v0.0.24 h1:tGZZoVgT/KiqK1c8ocVLeDS8BSWMRd47J3Lbz7vsReI= +github.com/mattn/go-isatty v0.0.24/go.mod h1:nMCL3Zebbrt45jsMDgnfIwz6ydEQApk5oEI3HqDio6A= github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/ncruces/go-strftime v1.1.0 h1:vtPmPWMkb539RGV9WpWT9EwJGvrOCKvMNI4obWL47Hk= +github.com/ncruces/go-strftime v1.1.0/go.mod h1:yVaq7iwCN09vHRrKBrrflXT0M9tTMG2KmZ9Fj7xeG/g= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pocketbase/dbx v1.12.0 h1:/oLErM+A0b4xI0PWTGPqSDVjzix48PqI/bng2l0PzoA= github.com/pocketbase/dbx v1.12.0/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs= +github.com/pocketbase/ozzo-validation/v4 v4.3.0 h1:uKBDVma7bZqgR2a6AwE+k9hkuDFfiZMpBHQdZ1z3iQs= +github.com/pocketbase/ozzo-validation/v4 v4.3.0/go.mod h1:6XNjSTw/Jb2F8LOkKO3oyzIWExbrGiYoS4uVxVwz90g= github.com/pocketbase/pocketbase v0.39.2 h1:JuRO81y3uvOnG55aFH7EFVeWabbM3civXwnm6JnU/IA= github.com/pocketbase/pocketbase v0.39.2/go.mod h1:Quhg2FHvNdmFap4S98D9f8jaBrrquOwfyxw7wiV/kvg= +github.com/pocketbase/pocketbase v0.40.6 h1:/Ol0iIZNdPzUdzMPDVCYuIgYYC9NhMpk/1T2KYRGM8A= +github.com/pocketbase/pocketbase v0.40.6/go.mod h1:xfE8K+hqzlUxjbtC/VxqHrFxWWO+6wu4sk+L8Wc6Amg= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= @@ -91,30 +110,46 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= +golang.org/x/crypto v0.58.0 h1:COkYLr4k7nDI4r6QtMML2AfzeIswWHAJthLS6K/M/54= +golang.org/x/crypto v0.58.0/go.mod h1:Xh+kl5A+M0gMiWDytH2Hhr5Z7WbNCpv/eB/EFgfSk+w= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.41.0 h1:8wS72eGJMJaBxK6okTzd4WaXumUlTVlb753MlsSvTCo= golang.org/x/image v0.41.0/go.mod h1:uIc348UZMSvS5Z65CVZ7iDPaNobNFEPeJ4kbqTOszmA= +golang.org/x/image v0.47.0 h1:za/8gVz++PPZqmZJBNSISICN5Rrj5zixP/8K++fgmqo= +golang.org/x/image v0.47.0/go.mod h1:IkN5o4A7vq55vXN8FWjjnhg9Rs2GOtffqsSi9mWAKYE= golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/mod v0.42.0 h1:ICeL3t2L30ljSPHHxDnR4fqVcBt/zR2zJAb9juavmQg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= +golang.org/x/net v0.61.0 h1:RR+6j/BTBCrggOLugxa+66R8FvoN6MHlzDlZIbN9YFw= +golang.org/x/net v0.61.0/go.mod h1:WgDCOTH8iwtB66T4/GfI94AHo/hhdb7Hah9NDseQfiI= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= +golang.org/x/oauth2 v0.37.0 h1:JUlcxA8oAtauLfiH8FX2/FkAWHAdi0QtGCGc+hofE98= +golang.org/x/oauth2 v0.37.0/go.mod h1:IxwZNxUULJmpBFf9K/9NTMSIfZZuvuTy1gGxhigP/58= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.24.0 h1:iqiDrGoDgyuvAKrhLQthUEzU/R378N78gXbBjxed7oA= +golang.org/x/sync v0.24.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.49.0 h1:XbzkgYJHdqh/8m2Uu0W/dQv8nktxx4BFHp1M0gROTXA= +golang.org/x/sys v0.49.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/text v0.43.0 h1:1QivrlhwAsnMOcqgOdl9my7s9OyZl8O5/UGUTJVXoWc= +golang.org/x/text v0.43.0/go.mod h1:hbSIYA/amXcRXTFSZqh8tWHEoqRvvbKPJ2uz/KU+a+s= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= +golang.org/x/tools v0.52.0 h1:ryxg4U63oaUYk7uOLTF37n43f4qgtGvqV4Ioit1BaEs= google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= @@ -124,28 +159,37 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= modernc.org/cc/v4 v4.28.2 h1:3tQ0lf2ADtoby2EtSP+J7IE2SHwEJdP8ioR59wx7XpY= modernc.org/cc/v4 v4.28.2/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI= +modernc.org/cc/v4 v4.29.7 h1:q+NXGJ0bK3b4TXFYQQVr9pYETGnmwFWkrUzJnMya/Tg= modernc.org/ccgo/v4 v4.34.0 h1:yRLPFZieg532OT4rp4JFNIVcquwalMX26G95WQDqwCQ= modernc.org/ccgo/v4 v4.34.0/go.mod h1:AS5WYMyBakQ+fhsHhtP8mWB82KTGPkNNJDGfGQCe0/A= +modernc.org/ccgo/v4 v4.36.1 h1:ZNIUZAryN0UgnJwtyxrdEzcFc3yD4Cu4AzjfPXsLsIE= modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM= modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU= modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= modernc.org/gc/v3 v3.1.2 h1:ZtDCnhonXSZexk/AYsegNRV1lJGgaNZJuKjJSWKyEqo= modernc.org/gc/v3 v3.1.2/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= +modernc.org/gc/v3 v3.1.5 h1:21ldfPfRYE31Tb7B3mwAK8gy1AxP4+dKjrOQPfqakoc= modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= modernc.org/libc v1.72.3 h1:ZnDF4tXn4NBXFutMMQC4vtbTFSXhhKzR73fv0beZEAU= modernc.org/libc v1.72.3/go.mod h1:dn0dZNnnn1clLyvRxLxYExxiKRZIRENOfqQ8XEeg4Qs= +modernc.org/libc v1.77.1 h1:Ct8j47QtiZ1Enj2DtFXQtUqrPCAjdCmPjtCuvrYQ0Hs= +modernc.org/libc v1.77.1/go.mod h1:87/pZ4L6nD1zqW4nItuS12YO7hN1igAah34xjnQo/W0= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/memory v1.12.1 h1:nFMiWrpStgZczNl6XI9GnIk/rWhYIyHGUaR04pGbp9g= +modernc.org/memory v1.12.1/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= modernc.org/opt v0.2.0 h1:tGyef5ApycA7FSEOMraay9SaTk5zmbx7Tu+cJs4QKZg= modernc.org/opt v0.2.0/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= modernc.org/sqlite v1.52.0 h1:p4dhYh2tXZCiyaqHwRVJDjIGKWyXayiQpThxgDzJaxo= modernc.org/sqlite v1.52.0/go.mod h1:tcNzv5p84E0skkmJn038y+hWJbLQXQqEnQfeh5r2JLM= +modernc.org/sqlite v1.60.1 h1:/blz53O951KWFOso4QQvEs/Fq6cDBKLtMVrYNSeJVKw= +modernc.org/sqlite v1.60.1/go.mod h1:1dIoEagfDE72QytD5scH1lxARtaUgKgHC/NuApA27r0= modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= diff --git a/qpi-ui/internal/dashboard/package-lock.json b/qpi-ui/internal/dashboard/package-lock.json index 35217f4e..9d4133f5 100644 --- a/qpi-ui/internal/dashboard/package-lock.json +++ b/qpi-ui/internal/dashboard/package-lock.json @@ -1,12 +1,12 @@ { "name": "dashboard-src", - "version": "0.4.2", + "version": "0.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "dashboard-src", - "version": "0.4.2", + "version": "0.4.3", "dependencies": { "@visx/axis": "^4.0.0", "@visx/scale": "^4.0.0", diff --git a/qpi-ui/internal/dashboard/package.json b/qpi-ui/internal/dashboard/package.json index 3904fe63..8c585570 100644 --- a/qpi-ui/internal/dashboard/package.json +++ b/qpi-ui/internal/dashboard/package.json @@ -1,7 +1,7 @@ { "name": "dashboard-src", "private": true, - "version": "0.4.2", + "version": "0.4.3", "type": "module", "scripts": { "dev": "vite", diff --git a/qpi-ui/main.go b/qpi-ui/main.go index 21656ad7..2b8a7771 100644 --- a/qpi-ui/main.go +++ b/qpi-ui/main.go @@ -20,7 +20,7 @@ import ( //go:embed all:internal/dashboard/dist var dashboardFS embed.FS -var Version = "v0.4.2" +var Version = "v0.4.3" func main() { app := pocketbase.New() diff --git a/qpi-ui/pkg/qpi.wxs b/qpi-ui/pkg/qpi.wxs index 2836cc83..fbc940c8 100644 --- a/qpi-ui/pkg/qpi.wxs +++ b/qpi-ui/pkg/qpi.wxs @@ -1,6 +1,6 @@ - +