Added
ty(astral-sh/ty) support as an alternative Python language server/lens-mapcommand: a human-facing, self-contained interactive HTML project map rendered from the review graphlens_diagnostic_marktool (situational, activate viapi_lens_activate_tools): record a disposition for a diagnostics finding (#690)pilens:autofix:startbus event, symmetric topilens:format:start, so the same in-process listener can also see theagent_endactionable-warnings autofix batch before it mutates files- Two new
pi.eventsbus signals so an in-process extension can observe pi-lens's deferred-format queue before it mutates files, not just after lens_diagnostics mode=fullandlsp_diagnostics's batch/directory sweep now cache confirmed per-file LSP results across calls
Changed
release.ymlpublishes to npm via OIDC trusted publishing instead of a long-livedNPM_TOKEN, andpackage.jsondeclares anallowScriptsallowlist for npm v12's install-time script review- Consolidated the hand-duplicated "walk up directories looking for one of a list of config filenames" loop across 4 sites
- Extracted
index.ts'stool_callhandler (read-guard preflight: LSP auto-touch, read-range tracking/expansion, oldText autopatch, edit-guard block/relocation, pre-write duplicate-export detection) intoclients/runtime-tool-call.ts - Consolidated the hand-duplicated "load a JSON cache file, try/catch, version/shape-validate" boilerplate across 7 sites
Fixed
pilens_health's resource footprint no longer reports dead instances from stale instance-registry entries- The shared project ignore matcher is now tracked-aware, so a git-tracked file whose name happens to match a
.gitignore/global ignore pattern is no longer invisible to every scan and to the review graph - The startup scan-context walk no longer re-runs and discards itself on every single
piprocess start in a large monorepo - Review graph import resolution now prefers
.ts/.tsx(and.mts/.cts) source twins over compiled.js/.mjs/.cjssiblings, and node creation is gated against untracked-AND-gitignored files - Scan-provenance labels no longer poison a diagnostic's dedup identity, and the workspace sweep now honors ast-grep's
skipTestFilesgate like the per-edit path does oxlintno longer skips test filesno-javascript-urlast-grep rule no longer flags ajavascript:string literal used as adversarial test input, and ast-grep's ownskipTestFilespolicy now survives when its LSP surface (not just the in-process napi runner) is activefind-import-file-without-extensionast-grep rule no longer flags bare/scoped package specifiers with a subpath- Cold LSP servers now actually get their full warm-up budget instead of being silently capped at their normal per-edit timeout
🙏 Thanks
Thanks to the external contributors in this release: