Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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", "CHANGELOG.md", "LICENSE"]

[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
Expand Down
Loading