Releases: laithalsaadoon/claude-sql
Release list
v2.1.1
Fix
- version: name a registry install instead of reporting
source: ? - cluster: report a cluster count on the cache-hit path, not a row count (#178)
cluster — run_clustering's cache-hit path returned a row count under the
clusters key while the compute path returned a cluster count, so a warm
analyze reported 139054 messages, 80057 clusters against a parquet holding
1,080 real clusters. One helper now derives all three numbers for every cache-hit
branch, and the tests assert the two paths agree rather than pinning literals.
version — publishing to PyPI at v2.1.0 created an install shape
read_install_source could not express: it matched only directory / url /
git, and a registry install's uv receipt carries a specifier and none of
those, so claude-sql --version printed installed from source: ? for the most
common install of all. The kind is now inferred from the absence of a
local-source key.
Both fixes are locked by tests verified to fail against the prior code.
v2.1.0
Feat
- near-real-time snapshot refresh + watch daemon (#175)
Fix
- settings: corpus-scope the analytics caches under corpora/<corpus_key>/ (#168)
Refactor
- cleanup: drop dead ANALYTICS_VIEW_NAMES + fix stale core-package comments (#164)
Not in the auto-changelog
cz's filter surfaces feat / fix / refactor only, so the dependency work
in #176 is absent by design: 41 packages to latest (numpy 2.5.2, lancedb 0.37.1,
duckdb 1.5.5, strands-agents 1.52), eight Any-boundary type fixes surfaced by
ty 0.0.73, and the ruff 0.16.3 reformat.
For anyone embedding claude-sql in-process
snapshot_as_of(con)— the raw readers are DuckDB TEMP TABLEs, so a
long-lived connection answers from a snapshot. This reports what instant that
snapshot covers, letting a consumer distinguish "genuinely absent" from "newer
than my snapshot" instead of substituting its own clock.refresh_raw(con)— advances the snapshot by re-reading only the source
files whose mtime moved: 0.22 s versus 6.2 s for a full re-registration over
9,082 files. Reportsrebuilt/rebuild_reasonwhen it degrades.claude-sql watch— a daemon that holds a warm connection and keeps it
near-live as transcripts land. Install the newwatchextra for OS-event
change detection; without it the watcher polls an mtime scan.
v2.0.0
BREAKING CHANGE
- module paths moved from claude_sql.{core,analytics,app} to
claude_sql.{domain,application,infrastructure,interfaces}; core is fully
dissolved (Settings -> infrastructure.settings, models -> domain.models,
provider ports -> domain.ports). Console script binds
claude_sql.interfaces.cli.app:main. The evals and provenance planes are
removed.
Feat
- v2: hexagonal architecture — domain/application/infrastructure/interfaces (#159)
v1.2.1
Refactor
- lance_store: migrate create_index to unified config API (#145)
v1.2.0
Fix
- skills: skill_usage tool-source rows join to prior user intent (#50) (#131)
- analytics: success_rate_by_work computes rates over known outcomes (#48) (#130)
- analytics: autonomy_trend buckets by session start not classifier time (#49) (#129)
Docs
- analytics_cookbook: note autonomy_trend buckets by session start (#53) (#133)
- analytics_cookbook: explain community_id=-1 noise bucket and mutual-kNN plateau (#52) (#132)
Note: success_rate_by_work output changed from 5 to 7 columns (adds known_sessions, unknown_fraction; rates now over known outcomes). See the migration note in docs/analytics_cookbook.md §4.3 — hence the minor bump.
v1.1.9
Perf
- ingest: vectorize simhash64 bit-voting with numpy (#117)
v1.1.8
Fix
- conflicts: add conflicts_over_time macro for a real conversation-time axis (#110)
v1.1.7
Fix
- conflicts: raise classify_max_tokens 2048 → 16000 to stop max_tokens truncation (#106)
v1.1.6
Perf
- session-text: format ts.isoformat() engine-side in the timeline loaders (#100)
v1.1.5
Perf
- trajectory: JOIN the session-id window instead of binding a list param (#98)