From ff20ae0a0c10a3fd3970140b3e8901c69ca094f7 Mon Sep 17 00:00:00 2001 From: Joel Natividad <1980690+jqnatividad@users.noreply.github.com> Date: Thu, 8 Oct 2026 15:00:50 -0400 Subject: [PATCH 1/2] build: limit the sdist to the package, tests, README and LICENSE Hatch includes every git-tracked file in the sdist by default, so 0.1.0's tarball also shipped CLAUDE.md, .serena/, uv.lock and .github/. The wheel was unaffected. Co-Authored-By: Claude Opus 5.5 --- pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index adf5b43..b7bb4bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,9 @@ dev = ["pytest>=8", "pytest-asyncio>=0.24", "mypy>=1.11", "ruff>=0.6"] [tool.hatch.build.targets.wheel] packages = ["src/qsv_client"] +[tool.hatch.build.targets.sdist] +include = ["src/qsv_client", "tests", "README.md", "LICENSE"] + [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" From 759b2c08685dc7c9d91167355d27843cf7a474b8 Mon Sep 17 00:00:00 2001 From: Joel Natividad <1980690+jqnatividad@users.noreply.github.com> Date: Thu, 8 Oct 2026 15:02:14 -0400 Subject: [PATCH 2/2] docs: add CHANGELOG.md Covers 0.1.0 and the unreleased sdist change, and ships it in the sdist. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 43 +++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..527f632 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,43 @@ +# Changelog + +All notable changes to this project are documented here. The format follows +[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project uses +[Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Changed + +- The sdist now contains only the package, tests, README, CHANGELOG and LICENSE. 0.1.0's also + included repository tooling files (`CLAUDE.md`, `.serena/`, `uv.lock`, `.github/`). The wheel + is unchanged. ([#2](https://github.com/dathere/qsv-client/pull/2)) + +## [0.1.0] - 2026-10-08 + +First release. ([#1](https://github.com/dathere/qsv-client/pull/1)) + +### Added + +- `Qsv` (sync) and `AsyncQsv` (asyncio) clients with the same API: `run(command, *args)` plus + `count`, `headers`, `stats`, `frequency` and `describegpt` conveniences, returning a + `QsvResult` with `json()` and `csv_rows()` helpers. +- Binary discovery: an explicit path, then `$QSV_BIN`, then `qsv`, `qsvmcp`, `qsvdp` or + `qsvlite` on `PATH`. +- Timeouts and cancellation that stop the whole process group (SIGTERM, then SIGKILL after a + grace period), including children qsv started itself. On Windows, qsv is killed directly. +- Typed errors: `QsvError` and its subclasses `QsvUsageError`, `QsvCsvError`, `QsvIOError`, + `QsvNoMatch`, `QsvNetworkError`, `QsvOutOfMemory`, `QsvEncodingError`, `QsvInferenceError`, + `QsvWriteError` and `QsvTimeout`. They are read from qsv's JSON error line + (`QSV_ERROR_FORMAT=json`, [dathere/qsv#4765](https://github.com/dathere/qsv/pull/4765)) when the + binary supports it, and classified by exit code otherwise. `QsvNotFound` and `QsvVersionError` + are raised before anything runs. +- Capability detection (`Qsv().capabilities`): binary, version, features and commands, read from + `qsv --capabilities` where available, otherwise from `--version` and `--list`. A `min_version=` + check is also available. +- `stdout_path=` streams large output to a file instead of holding it in memory. +- `llm_api_key`, `llm_base_url` and `llm_model` are passed to `describegpt` as `QSV_LLM_*` + environment variables, so keys never appear on the command line. +- Type hints (`py.typed`), no runtime dependencies, Python 3.10+. + +[Unreleased]: https://github.com/dathere/qsv-client/compare/0.1.0...HEAD +[0.1.0]: https://github.com/dathere/qsv-client/releases/tag/0.1.0 diff --git a/pyproject.toml b/pyproject.toml index b7bb4bc..501a654 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ dev = ["pytest>=8", "pytest-asyncio>=0.24", "mypy>=1.11", "ruff>=0.6"] packages = ["src/qsv_client"] [tool.hatch.build.targets.sdist] -include = ["src/qsv_client", "tests", "README.md", "LICENSE"] +include = ["src/qsv_client", "tests", "README.md", "CHANGELOG.md", "LICENSE"] [tool.pytest.ini_options] testpaths = ["tests"]