claude-mem-lite 3.25.0 → 3.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"plugins": [
|
|
11
11
|
{
|
|
12
12
|
"name": "claude-mem-lite",
|
|
13
|
-
"version": "3.
|
|
13
|
+
"version": "3.26.0",
|
|
14
14
|
"source": "./",
|
|
15
15
|
"description": "Persistent long-term memory for Claude Code via MCP — captures coding decisions, bugfixes, and context across sessions. Hybrid FTS5 + TF-IDF search with episode batching. Single SQLite DB, no external services. A lighter, lower-cost alternative to claude-mem (episode batching + a smaller model; cost savings are an internal estimate, not a measured benchmark)."
|
|
16
16
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-mem-lite",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.26.0",
|
|
4
4
|
"description": "Persistent long-term memory for Claude Code via MCP — captures coding decisions, bugfixes, and context across sessions. Hybrid FTS5 + TF-IDF search with episode batching. Single SQLite DB, no external services. A lighter, lower-cost alternative to claude-mem (episode batching + a smaller model; cost savings are an internal estimate, not a measured benchmark).",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "sdsrss"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-mem-lite",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.26.0",
|
|
4
4
|
"description": "Persistent long-term memory for Claude Code via MCP — captures coding decisions, bugfixes, and context across sessions. Hybrid FTS5 + TF-IDF search with episode batching. Single SQLite DB, no external services. A lighter, lower-cost alternative to claude-mem (episode batching + a smaller model; cost savings are an internal estimate, not a measured benchmark).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "npm@10.9.2",
|
|
@@ -211,23 +211,25 @@ export function hasExplicitSignal(text, { errSig, files, intent } = {}) {
|
|
|
211
211
|
return false;
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
-
// ─── Identifier-exact-match precision bypass (default
|
|
214
|
+
// ─── Identifier-exact-match precision bypass (default ON since v3.26.0) ──────
|
|
215
215
|
//
|
|
216
|
-
// CLAUDE_MEM_UPS_IDENTIFIER_BYPASS=
|
|
216
|
+
// Set CLAUDE_MEM_UPS_IDENTIFIER_BYPASS=0 to disable. Rationale: the score-floors below
|
|
217
217
|
// (OR_TOP_BM25_FLOOR / TOP_REL_FLOOR) drop the WHOLE FTS set when the top row's
|
|
218
218
|
// magnitude is weak. But a rare code identifier (camelCase / snake_case / CONST_CASE
|
|
219
219
|
// / kebab≥3) match has high *semantic* precision even at modest BM25 — a df=1 term
|
|
220
220
|
// like `sanitizeFtsQuery` scores only ~23 raw yet is an unambiguous hit. So an obs
|
|
221
221
|
// whose title/lesson EXACT-matches an identifier the prompt names is a precision pass
|
|
222
222
|
// — the same independent-signal rationale that already exempts sigRows (error
|
|
223
|
-
// signatures) and fileRows (file names) from these floors.
|
|
224
|
-
//
|
|
223
|
+
// signatures) and fileRows (file names) from these floors. Such rows are restored
|
|
224
|
+
// after the floors run.
|
|
225
225
|
//
|
|
226
|
-
// Default
|
|
227
|
-
// (
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
|
|
226
|
+
// Default ON — flipped in v3.26.0 after a corrected benchmark/ups-ab.mjs re-measurement
|
|
227
|
+
// (#8858 two-bucket: TRUE off-topic FP isolated from on-topic eagerness). Over 12
|
|
228
|
+
// positives / 7 true-precision hard-negatives: recall up, TRUE off-topic FP = 0 (stable
|
|
229
|
+
// ×3 runs) → VERDICT NET-POSITIVE. The only behavior delta is on-topic eagerness (naming
|
|
230
|
+
// an identifier surfaces its obs) — the highest-precision injection trigger there is. The
|
|
231
|
+
// prose stop-list (IDENTIFIER_STOPWORDS) keeps the extractor off ordinary English.
|
|
232
|
+
export const IDENTIFIER_BYPASS = process.env.CLAUDE_MEM_UPS_IDENTIFIER_BYPASS !== '0';
|
|
231
233
|
const TECH_IDENTIFIER_RE_G = new RegExp(TECH_IDENTIFIER_RE.source, 'g');
|
|
232
234
|
|
|
233
235
|
// All tech-identifier tokens in `text`, lowercased + de-duped (for case-insensitive
|
|
@@ -615,8 +617,8 @@ async function main() {
|
|
|
615
617
|
const signalPresent = hasExplicitSignal(promptText, {
|
|
616
618
|
errSig, files: filesForGate, intent,
|
|
617
619
|
});
|
|
618
|
-
// Identifier tokens the prompt names (for the precision bypass below). Empty
|
|
619
|
-
//
|
|
620
|
+
// Identifier tokens the prompt names (for the precision bypass below). Empty only
|
|
621
|
+
// when CLAUDE_MEM_UPS_IDENTIFIER_BYPASS=0 (bypass is default-on), then it is a no-op.
|
|
620
622
|
const promptIdentifiers = IDENTIFIER_BYPASS ? extractTechIdentifiers(promptText) : [];
|
|
621
623
|
|
|
622
624
|
if (intent?.useRecent) {
|
|
@@ -649,7 +651,7 @@ async function main() {
|
|
|
649
651
|
typeof r.relevance === 'number' && Math.abs(r.relevance) >= bm25Floor
|
|
650
652
|
);
|
|
651
653
|
|
|
652
|
-
// Identifier-exact-match precision bypass (default
|
|
654
|
+
// Identifier-exact-match precision bypass (default on — see IDENTIFIER_BYPASS).
|
|
653
655
|
// Capture rows that exact-match a prompt identifier BEFORE the set-floors below;
|
|
654
656
|
// they carry independent precision signal (sigRows/fileRows rationale) and are
|
|
655
657
|
// restored after the floors so a low top-score can't drop a named-identifier hit.
|