v2.17.2
Fixed
- Transcript capture independence —
performTranscriptCapturenow runs on session idle independently of auto-capture (no longer gated byautoCaptureEnabled). Previously, disabling auto-capture also silently disabled transcript storage. New testtests/transcript-idle-wiring.test.tsverifies the wiring. - Node 22 ESM JSON import — Added
with { type: "json" }import attribute tosrc/plugin.ts'spackage.jsonimport. Without it, Node 22's ESM loader throwsERR_IMPORT_ATTRIBUTE_MISSINGand opencode silently skips loading the plugin when installed via npm. - Structured output for opencode provider — Rewrote
generateStructuredOutputinopencode-provider.tsfor AI SDK v7 compatibility. - Web server empty-query transcript search —
GET /api/transcripts/searchwith an empty query now callshandleListTranscriptsinstead of crashing FTS5MATCHon an empty string. - Timeline
includePromptsorphaning — Linked memories are now retained whenincludePrompts=false. Previously they were orphaned inlinkedPairsand filtered out byBoolean(p.memory && p.prompt). - Latent SQL ESCAPE bug in
vector-search.ts— Template literalESCAPE '\'produced an empty escape character, causing SQLite errors in thegetMemoriesBySessionIDLIKE fallback path. Fixed toESCAPE '\\'. - Release workflow changelog extraction — The
awkregex used an unescaped[, matching wrong sections. Replaced withindex()string matching.
Changed
- Ponytail-audit round 1 — Dead code removed, fetchWithTimeout/apiErrorResponse hoisted to BaseAIProvider, UserProfileValidator → zod schema. 22 files, net -92 lines.
- Ponytail-audit round 2 — 13 verified-dead symbols removed across 35 files (-308 lines net). DeduplicationService.cosineSimilarity → import shared. runOneTimeScoringRecalculation inlined.
- DeepSource remediation — JS-0356 (dead imports/vars), JS-W1041/JS-0331/JS-R1004 (boolean returns, redundant types, template literals), skipcq annotations.
Removed
- Dead methods: MemoryMetadata interface, MigrationService.getStatus(), MigrationProgressTracker.reset(), applyConfidenceDecay/deleteProfile/getAllActiveProfiles, getArchivedCount.
- Legacy superseded methods: AISessionManager.addMessage/deleteSession/clearMessages (prod uses addMessageAtomic + TTL cleanup).
- Test-only production methods: insertManyForTest/searchForTest, getTranscript, countUncapturedPrompts/getUncapturedPrompts/markMultipleAsCaptured. Removed from production classes; tests updated.
- Dead config field: injection.queryAwareFiltering (never read in production).
- Dead script/tooling: 4 warning-only lint-deepsource.sh checks, test:bun script, .coderabbit.yaml coverage exclude.
Infrastructure
- Minimal Codespace devcontainer — .devcontainer/devcontainer.json (typescript-node:22 base, sshd feature, port 4096).
Notes
- src/types/usearch.d.ts retained — Load-bearing ambient module declaration; deleting it broke typecheck. File restored.
- DeepSource: JavaScript check remains in pre-existing failure state (Documentation Coverage metric). This release resolved 27 issues, introduced 0 new ones.
Contributors
No community contributors for this release. All work by @ZeR020.
Full Changelog: v2.17.1...v2.17.2