Releases: gjczone/pi-shazam
Release list
v0.30.0
v0.30.0
What's Changed
Fixed
-
Truncated flag dropped on no-changes cache hit (#754): The
scanProject
no-changes cache-hit path now setsgraph.truncatedso the incompleteness
warning reaches all tools. Every other return path already did this; only the
fast path was missing it. -
Silent
realpathSyncfailures in LSP discovery (#755): The
comment-only catch inlsp/manager.tsnow logs via_logWarnso filesystem
errors (EACCES, ELOOP, ENOTDIR) during LSP server discovery are diagnosable
instead of swallowed. -
isErrorflag discarded by Pi tool wrappers (#756): The factory
executereturn type now supports{ text, isError? }from dispatchers,
and the factory normalizes + propagatesisErrorinto the
AgentToolResult.tools/impact.ts,tools/changes.ts, and
tools/overview.tsnow return the fullDispatchResultinstead of.text
only. Path-traversal and validation rejections now correctly surface as
tool errors. -
Zombie MCP processes on Windows disconnect (#757): All four shutdown
triggers (transport.onclose,stdin end/error/close) now call a shared
shutdownAndExithelper that defersprocess.exit(0)viasetImmediate
aftershutdown()completes, matching the existingSIGTERM/SIGINT
handler pattern. -
JSON envelope missing
truncatedfield (#758):buildEnvelopenow
accepts an optional{ truncated }option and surfaces it as a top-level
flag. The factory injectsgraph.truncatedinto JSON output so MCP/JSON
consumers can detect incomplete graphs whenMAX_FILESwas hit. -
Format root mismatch — validation vs. execution (#759):
tools/format.tsnow validatesoptions.fileagainstprojectRoot(the
same root used for formatter execution) instead ofgetEffectiveRoot(),
eliminating the scenario where a file passes validation against one root
but is formatted under another. -
Argument injection via dash-prefixed filenames (#760): All five
formatter cases (prettier, eslint, biome, ruff, gofmt) now insert--
beforetargetFileso filenames starting with-are never interpreted
as formatter flags. -
check-destructive.shfail-open on logging failure (#761): The
BLOCKED and MEDIUM paths now wrapmkdir -pandecho >>in|| true
guards so a logging failure (read-only fs, permission denied) cannot
change the exit code away from 2 and cause a destructive command to
proceed. Both codebuddy and kimi hooks are updated. -
V3 incremental scan stale edge cleanup (#752):
_appendEdgenow
populatestargetToSourcesso the incremental scan path correctly
removes stale edges when files are deleted. -
Shell hooks hardened against fail-open (#750): Source resolver,
alias expansion, andrmregex patterns hardened so unexpected shell
state cannot cause hooks to silently pass when they should block. -
Home-directory scan guard (#720, #724): The scanner refuses to
operate on$HOME/%USERPROFILE%by default (opt-out via
PI_SHAZAM_ALLOW_HOME=1).HOME_SKIP_DIRSentries are scoped so
cross-platform patterns cannot skip real source directories. -
Stderr noise reduction (#632, #727): Suppressed ENOENT warnings on
negative filesystem probes; silencedisGitRepowarnings on non-git
directories; alignedvalidatePathInProjectCoreto_logWarn. -
Degraded-mode visibility (#728-#734, #731-#733): Truncation
warnings now reach all tools, not just overview. Cache persistence status
propagates toRepoGraph.cacheStatus. Parser degraded queries are
surfaced in the overview. LSP memory leak fixed (LRU cap on opened files). -
Batch P1 code-review fixes (#735-#739): Null guards, defaults, path
classification, flat tests, stderr noise reduction, stale state cleanup,
partial hierarchy fixes.
Upgrade
pi install npm:pi-shazam@latestOr for MCP clients:
{ "mcpServers": { "pi-shazam": { "command": "npx", "args": ["-y", "-p", "pi-shazam@latest", "pi-shazam-mcp"] } } }Full Changelog: v0.27.1...v0.30.0
v0.27.1
pi-shazam v0.27.1
Emergency fix release. v0.27.0 shipped the full 0.27 feature set (V3 ProtoBuf
cache, impact provenance + Mermaid graph, overview module-density ranking, lookup
provenance edges, GitHub Action wrapper, and more) but was pulled because a
packaging defect excluded the runtime protobufjs dependency, breaking the MCP
server and V3 cache on a fresh install. v0.27.1 contains everything in v0.27.0
plus the dependency fix below. If you installed v0.27.0, upgrade to v0.27.1.
What's Changed in v0.27.1
Fixed
- Runtime
protobufjsmissing from published package (#722):protobufjswas
declared indevDependenciesbut imported at runtime bycore/proto-schema.ts,
so the published 0.27.0 tarball excluded it and the MCP server / V3 cache path
failed withERR_MODULE_NOT_FOUNDon a fresh install. Movedprotobufjsto
dependencies(keptprotobufjs-cliin devDependencies) so it ships in the package.
v0.27.0 Feature Highlights (included in v0.27.1)
Added
-
V3 ProtoBuf cache format (#628, #646): New compact binary cache that
encodes edge data as columnar ProtoBuf arrays behind a 4-byteSHA\3
magic header. On a 1000-symbol project the on-disk cache drops from
~800KB (V2 JSON) to ~30% smaller in practice; the V2 JSON format stays
readable for backward compatibility. Schema lives incore/graph.proto
(source of truth) with a JSON runtime mirror incore/proto-schema.ts
(protobufjs, no generated static module indist/).saveGraphCache
now writes V3 by default;loadGraphCachedetects the magic header and
falls back to V2 for older caches, preserving thefileMtimesmap so
mtime-based invalidation is unchanged. -
Impact enrichment: provenance breakdown + Mermaid call graph (#631 B):
shazam_impactJSON now carries aprovenanceCountsfield per affected
symbol (resolved vs. heuristic at a glance) plus a compactR:N N:M H:K
badge on the affected-file markdown line; call-chain edges carry an
explicitprovenance. EveryCallChainEntryalso gains a self-contained
Mermaidflowchart TDblock (mermaidfield) with provenance as edge
labels and solid/dashed arrows, capped at 30 nodes. -
Overview module-density ranking (#631 B):
shazam_overviewsurfaces a
topByDensitylist on the JSON envelope and a "Module Density (Top 10 by
symbols-per-file)" markdown section to flag "god module" candidates. -
Lookup provenance edges + provenance-weight sort (#631 B, #643):
shazam_lookupJSON mode now exposesincomingEdges/outgoingEdges
(up to 20 each, withprovenance) and a precomputedprovenanceCounts
summary per entry (#643). Entries are sorted by provenance weight
(resolved > name_match > heuristic > unresolved, PageRank tiebreak) so the
most-trustworthy matches come first; markdown output keeps the original
PageRank ordering. -
Changes structural (line-count) working-tree view (#631 B):
shazam_changesadds astructuralChangesfield with added/removed/
modified line counts fromgit diff --numstat(staged + unstaged, binary
files skipped, capped at 20 files), plus a compact(+N -M lines across K files)markdown badge. -
GitHub Action wrapper for
shazam_verify(#638, #652): Composite
action at.github/actions/shazam-verify/runsshazam_verifyon every
PR and posts a risk-scored review as a PR comment (plus step summary).
Addstools/verify-comment.ts(formatVerifyComment), anaction.yml
manifest, orchestrator/entrypoint scripts, andtests/github-action-*.test.ts
(25 tests). Adds theyamldevDependency. -
ProtoBuf schema mirror consistency test (
tests/cache-proto-schema.test.ts):
Parsescore/graph.prototext and asserts the field set, IDs,
types, andrepeatedflags match the JSON mirror in
core/proto-schema.ts. Catches drift between the two schema
sources before it can corrupt a cache file. -
V3.0 / V3.1 legacy deserializers (
deserializeGraphV3V0,
deserializeGraphV3V1,+WithMetadatavariants) plus
encodeGraphPayloadV31/decodeGraphPayloadV31for tests.
Public surface for the in-place converter; kept so the load
path can decode legacy wire formats. -
Real-world size sanity check in
tests/benchmark-v3.test.ts:
Documented the V3.1 ratio on a self-scan of pi-shazam (3499
symbols, 1264 symbol-level edges, 7236 file-level rows): V3.1
is 96% of V2 on a real project (vs. 53% on the edge-heavy
synthetic benchmark), because real projects spend most bytes
on the JSON metadata + non-deduped file-level rows.
Changed
-
Cyclomatic complexity via tree-sitter AST (#642): Replaced the regex
sweep that countedif|else|for|while|case|catch+&&/||/:?across
whole source slices (which inflated scores by counting keywords inside
comments/strings) with a tree-sittercomplexityquery matching real
branching AST nodes only, applying the else-if rule (plainelseadds 0,
else ifadds 1) on a baseline score of 1. Queries added for
TS/TSX/JS/Python/Go/Rust; the original regex is kept as a fallback for
languages without a compiled query, preserving coverage. -
Tool defaults tightened for LLM agents + per-edge provenance (#629,
#633, #634, #635, #636; #640): Bundled four related quality PRs. Unified
Affected-Tests detection (core/test-patterns.tsis now the single source
of truth; symbol-mode JSON carriesaffectedTests). Display polish +
path-traversal UX (classifyFilePathdistinguishes traversal vs. missing;
did-you-meanfor lookup/impact/format). Per-edgeprovenanceonEdge
with LSP-driven promotion (upgradeEdgesToResolved/upgradeEdgesForHotspots,
zero extra LSP latency). Always-on defaults:### Hotspotsalways in
overview text andJSON.hotspots.{byPageRank,byComplexity};verifyuses a
single-line-per-diagnostic format with a summary header (drops suggestedFixes
text +.shazamauto-export);inferImpactMode()picks symbol vs. files
mode from input shape, removing the strict mutual-exclusion error. -
Verify flags migrated to
.pi-shazam/config.json;lookup mode=state
removed (#630): Newcore/config.tsloads.pi-shazam/config.json
(missing/empty = silent defaults, malformed = warn).shazam_verify
maxFilesnow resolves fromconfig.verify.maxFiles(default 100); dead
noCascade/noSecretsoptions removed.shazam_lookup mode=statewas
first deprecated (warn) then fully removed — callers now get a clear error
pointing at--name/--direction. -
Default scan now excludes
tests/(#632):scanProjectskips the
tests/directory by default (override withincludeTests). -
Typed result builders across all tools (#631 A): Introduced pure,
typed builders —buildVerifyResult,buildFormatResult,
buildOverviewResult,buildImpactResult+buildCallChainResult,
buildChangesResult(+renderChangesMarkdown), typedXxxResultfor all
three lookup modes, and akinddiscriminator withexecuteRenameSymbolJson.
Tool internals now build a typed model before rendering JSON/markdown,
reducing envelope drift and enabling direct result assertions in tests. -
V3.1 cache: string table for symbol ID dedup (#647): The on-disk
graph cache (core/cache.tsV3 format) now stores each unique
symbol ID exactly once in a top-levelstring_table; every edge's
source/targetis referenced by int32 index. On a 1000-symbol
graph with ~3 edges per node this brings the V3 cache to ~53% of
the V2 size (down from ~68% in V3.0), close to the plan's 50%
target. The on-disk magic header bumped fromSHA\3toSHA\4;
old V3.0 caches fall through to the V2 JSON path on load (which
fails to parse) and the scanner rebuilds them on the next scan.
Schema changes are additive and live incore/graph.proto(source
of truth) +core/proto-schema.ts(JSON runtime mirror). -
V3.2 cache: kind int enum + silent in-place upgrade (#647 follow-ups
D + E): Edgekindis encoded as int32 (1 byte varint) instead
of string (5-7 bytes per row) — on a real-world self-scan this
shaves another ~30-50 KB on top of V3.1. The on-disk magic header
bumped fromSHA\4toSHA\5.loadGraphCachenow auto-upgrades
legacy V3.0 (SHA\3, no string table) and V3.1 (SHA\4, kind as
string) caches to V3.2 in place on first read, so users on v0.27.0
(PR-G) and the just-shipped V3.1 release of this branch pay no
re-scan cost on upgrade. The V3.1-specific ProtoBuf schema
(kind: string) lives incore/proto-schema.tsas a separate
Rootso the in-place decoder can interpret the legacy wire
format; the V3.2 writer always produces the canonical int32 form.
Fixed
- Batch code-review fixes (code-review findings #687-#701): Resolves
15code-review-labelled findings across the tool surface. Highlights:- Rust import resolution (#687): Non-prefixed multi-segment
use
paths (use utils::helper::doThing) are now resolved from the crate
root (Rust 2018+ semantics) instead of being dropped as external crates,
soshazam_impact/shazam_verifyno longer miss local Rust edges. - Symlink path-traversal in auto-format (#688, P0):
hooks/shazam-guide.ts
autoFormatFilenow validates viavalidatePathInProject(realpathSync
symlink-escape check) instead of the string-onlyisPathInRoot, and
imports it fromtools/_factory.ts(resolving the hook→tools layer
violation flagged in #697). - Silent audit-log discards (#689): Two empty
catchblocks in
index.tsshazam-doctor parsing now log via_logWarninstead of
swallowing malformedinternal.log/shazam-calls.loglines. - Silent cache-write failures (#690):
saveGraphCachecatch blocks in
core/scanner.tsnow emit_logWarn(incremental + full paths) so
ENOSPC/EACCES/EROFS cache drops are observable, not silent. - *...
- Rust import resolution (#687): Non-prefixed multi-segment
v0.26.0
v0.26.0
What's Changed
Added
-
Shared MCP/Pi dispatch layer (#618): All 7 tools now share a single dispatch
implementation intools/_dispatchers.ts. Pi and MCP handlers call the same
dispatcher functions, eliminating the dual-maintenance that caused 8 behavioral
differences in #616.mcp/tools.tsreduced from ~450 lines to ~100 lines. -
MCP-Pi parity contract tests (#619): 19 contract tests verify that Pi and
MCP tool handlers produce identical output for the same input. Covers all 7
tools with key scenarios: known symbols, file paths, error paths, JSON mode,
path traversal rejection, and mutual exclusion. -
Static parity check script (#620):
scripts/check-mcp-parity.shruns 10
grep-based heuristic checks to detect MCP-Pi drift. Wired intoscripts/ci.sh
as a non-blocking warning. -
AGENTS.md sync rule: Change Map now includes "Modifying an existing tool
handler" — when Pi dispatch logic changes, the MCP handler must be mirrored.
Changed
-
Pi tools refactored:
tools/overview.ts,lookup.ts,impact.ts,
verify.ts,changes.ts,format.ts,rename_symbol.tsnow delegate
dispatch logic totools/_dispatchers.ts. -
Tests updated: Source-code pattern checks in
tests/mcp.test.tsnow
verify the dispatcher file instead of the MCP file.
Upgrade
pi install npm:pi-shazam@latestOr for MCP clients:
{ "mcpServers": { "pi-shazam": { "command": "npx", "args": ["-y", "-p", "pi-shazam@latest", "pi-shazam-mcp"] } } }Full Changelog: v0.25.0...v0.26.0
v0.25.0
v0.25.0
What's Changed
Added
-
Windows LSP server discovery (#582, #585): LSP servers are now discoverable on
Windows.findInPathbypasses POSIX-onlySAFE_PATH_DIRSfiltering on win32
and auto-appends.cmdextension when the bare command is not found (npm global
installs create.cmdshims).trustedUserCandidatesincludes Windows paths
(%APPDATA%/npm, Scoop, Cargo, Mason, VS Code). -
PATHEXT-aware executable detection (#585):
isExecutableon win32 now
respects thePATHEXTenvironment variable (.COM;.EXE;.BAT;.CMD;.VBS;.JS
default) instead of hardcoding only.exe,.cmd,.bat. -
Platform-appropriate cache directory (#584): Cache now uses
%LOCALAPPDATA%/pi-shazam/cacheon Windows,~/Library/Caches/pi-shazamon
macOS, and$XDG_CACHE_HOME/pi-shazamon Linux (renamed fromrepomap). -
Windows CI coverage (#583, #592):
windows-latestrunner added to CI matrix
(typecheck, tests, build) and publish workflow. All 662 tests pass on Windows.
package.jsonosfield now includes"win32". -
MCP documentation for Windows (#586):
mcp/README.mdnow includes Windows
MCP client configuration examples (Claude Desktop on cmd, PowerShell, Git Bash).
Bug Fixes
-
MCP HOME fallback on Windows (#586):
PI_SHAZAM_HOME_ONLYcheck now falls
back toUSERPROFILEbefore the hardcoded "/home", fixing the home-directory
gate on Windows whereHOMEis not set by default. -
Cross-platform path normalization in MCP (#586):
buildEnvelopenow
normalizes backslash project paths to forward slashes for consistent JSON
output across platforms. -
Cross-platform test compatibility (#592): 8 test files fixed for Windows —
path comparisons, URI construction, file separator handling, short-name paths,
and log message assertions now work correctly on all platforms.
Upgrade
pi install npm:pi-shazam@latestOr for MCP clients:
{ "mcpServers": { "pi-shazam": { "command": "npx", "args": ["-y", "-p", "pi-shazam@latest", "pi-shazam-mcp"] } } }Full Changelog: v0.24.4...v0.25.0
v0.24.4
v0.24.4
What's Changed
Bug Fixes
-
fix: Silence ENOENT warnings during LSP server discovery —
isExecutable()now suppresses the expectedENOENTerror when probing for
optional LSP server binaries, matching_logWarn's documented ENOENT early-return
pattern. Only real errors (permission denied, I/O error) are logged. -
fix: Clean up stale temp dir before MCP symlink test (#485) —
tests/mcp.test.tsnow runsrmSyncbeforemkdirSyncto avoidEEXISTon
leftover symlinks from previous test runs. Worktree copy uses a unique temp dir
name to avoid collisions when vitest runs files in parallel.
Upgrade
pi install npm:pi-shazam@latestOr for MCP clients:
{ "mcpServers": { "pi-shazam": { "command": "npx", "args": ["-y", "-p", "pi-shazam@latest", "pi-shazam-mcp"] } } }Full Changelog: v0.24.3...v0.24.4
v0.24.3
v0.24.3
Bug Fixes
- MCP JSON mode parity: All 7 MCP tools now support
{ "json": true }for structured JSON output, matching the Pi native extension behavior. Previously, 5 tools (overview, lookup, impact, format, rename_symbol) silently ignored thejsonparameter.
Upgrade
pi install npm:pi-shazam@latestOr for MCP clients:
{ "mcpServers": { "pi-shazam": { "command": "npx", "args": ["-y", "-p", "pi-shazam@latest", "pi-shazam-mcp"] } } }Full Changelog: v0.24.1...v0.24.3
v0.24.2
v0.24.2
Bug Fixes
- MCP JSON mode parity: All 7 MCP tools now support
{ "json": true }for structured JSON output, matching the Pi native extension behavior. Previously, onlyshazam_verifyandshazam_changeshonored thejsonparameter; the other 5 tools (overview, lookup, impact, format, rename_symbol) silently ignored it and always returned text.
Upgrade
pi install npm:pi-shazam@latestOr for MCP clients:
{ "mcpServers": { "pi-shazam": { "command": "npx", "args": ["-y", "-p", "pi-shazam@latest", "pi-shazam-mcp"] } } }Full Changelog: v0.24.1...v0.24.2
v0.24.1
v0.24.1
What's Changed
Simplified
-
Duplicate consolidation (#571): Extracted
isTestFile()SSOT tocore/filter.ts,_cleanEdgesForSymbols()shared edge cleanup incore/scanner.ts,decodeBufferAdaptive()pure buffer-to-string incore/encoding.ts, unified audit logging viacore/audit-log.tsinmcp/tools.ts, sharedPRETTIER_CONFIG_FILESincore/formatters.ts(added missing.prettierrc.js),detectProjectLanguages()incore/formatters.ts,lsp/manager.tsderives languages fromgraph.fileSymbolsinstead of duplicate directory walk, import resolution unified tocore/resolve-import.ts. -
Hot-path optimizations (#573): Single-pass diagnostics counting avoids multiple
filter().lengthiterations. Eliminated intermediate[...Set].filter()arrays in graph snapshot comparison. -
Circular dependency fix:
core/audit-log.tsno longer imports_logWarnfromcore/output.ts, eliminating a runtime circular dependency. Error logging in audit-log usesconsole.errordirectly, matching the module's own design intent.
Upgrade
pi install npm:pi-shazam@latestOr for MCP clients:
{ "mcpServers": { "pi-shazam": { "command": "npx", "args": ["-y", "-p", "pi-shazam@latest", "pi-shazam-mcp"] } } }Full Changelog: v0.24.0...v0.24.1
v0.24.0
v0.24.0
What's Changed
Bug Fixes
-
fix(#564): Rust resolveImport returns null instead of phantom paths —
Rustcrate::,mod X;, andsuper::imports now returnnullwhen no candidate file exists, matching the behavior of all other languages and preventing phantom paths from enteringfileImports. -
fix(#565): Move rename-state.ts from hooks/ to tools/ to fix layer violation —
tools/impact.ts,tools/rename_symbol.ts, andmcp/tools.tsno longer import fromhooks/, fixing the one-way dependency rule violation. -
fix(#566): Log MCP shutdown errors instead of empty catch blocks —
transport.oncloseandstdin.on("end")handlers now log shutdown errors via_logWarninstead of silently swallowing them. -
fix(#567): Clear LSP init timeout timer to prevent UnhandledPromiseRejection —
The 15-second LSP initialization timeout timer is now cleared on success, preventing UnhandledPromiseRejection that could crash the process under--unhandled-rejections=strict. -
fix(#568): Redact error messages in withLogging before re-throwing to MCP clients —
Error messages sent to MCP clients are now redacted to prevent leaking absolute paths and stack traces. Original stack trace is preserved on the wrapped error. -
fix(#569): Move recordCallChain after symbol existence verification —
The rename safety gate no longer marks nonexistent symbols as reviewed, preventing bypass when the impact analysis fails to find the target symbol. -
fix(#570): Batch P1 reliability and safety fixes —
Cross-platform path containment usingpath.relative()(Windows compatibility),createToolerror logging via_logWarn,validateProjectRootreturns resolved real path for LSP consistency,maxFilesdefaults to 100 instead of unsafe type cast,jqfallback inpre-commit-verify.sh, cache deserializationArray.isArrayguard for corruptedfileImports,console.errorreplaced with_logWarnin rename_symbol and index.ts.
Simplified
-
Dead code removal (#572): Removed delta mode residual code (
options.delta,deltaLabel) fromverify.ts,tools/definitions.ts,mcp/tools.ts, andprecommit-verify.ts. Removed unused_lspManagerparameter fromregisterAllTools. -
Hot-path optimizations (#573): BFS queue
shift()replaced with O(1) head-index dequeue in all 4 BFS loops. LRU detail cache uses O(1) Map-based ordering instead of O(n)indexOf+splice. Single-pass diagnostics counting avoids multiplefilter().lengthiterations. Eliminated intermediate[...Set].filter()arrays in graph snapshot comparison.
Documentation
- docs: Fixed documentation alignment with actual implementation — updated SKILL.md (removed non-existent delta parameter, fixed LSP language count), mcp/README.md (tool count), AGENTS.md (source file count, audit log path), mcp/tools.ts (tool consolidation comment).
Upgrade
pi install npm:pi-shazam@latestOr for MCP clients:
{ "mcpServers": { "pi-shazam": { "command": "npx", "args": ["-y", "-p", "pi-shazam@latest", "pi-shazam-mcp"] } } }Full Changelog: v0.23.3...v0.24.0
v0.23.3
v0.23.3
What's Changed
Bug Fixes
- fix(#547): remove dead impact-state surface — Removed
setPendingImpactcall from production code since it was never actually invoked, eliminating dead code path. - fix(#554,#557): capture tsc/pyright/mypy stdout in pre-commit verify, add stale cache banner in lookup — Pre-commit verify now captures subprocess stdout (tsc, pyright, mypy).
shazam_lookupnow displays a stale cache warning when the graph is outdated. - fix(#551,#552,#555): remove global ENOENT suppression, break writeJsonl recursion, conservative CJK token estimate — Removed global ENOENT suppression that masked genuine file-not-found errors. Fixed infinite recursion in writeJsonl failure path. Tightened CJK token estimation for more accurate truncation.
- fix(#550,#553): log error causes in catch sites and withEnrichTimeout rejections — Added error cause logging to all catch sites and
withEnrichTimeoutrejection paths for better debugging. - fix(#546,#548,#556): serialize LSP shutdown, reset rename state on session_shutdown, clean up didClose on send failure — Serialized LSP server shutdown to prevent race conditions. Reset rename state when session ends. Properly clean up didClose notifications on send failure.
- fix(#544,#545): redact before truncating audit-log args and set isError on tool error responses — Audit-log argument redaction now happens before truncation to avoid leaking sensitive data in truncated output. Tool error responses now correctly set
isErrorflag.
Upgrade
pi install npm:pi-shazam@latestOr for MCP clients:
{ "mcpServers": { "pi-shazam": { "command": "npx", "args": ["-y", "-p", "pi-shazam@latest", "pi-shazam-mcp"] } } }Full Changelog: v0.23.2...v0.23.3