claude-mem-lite 3.54.0 → 3.56.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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/lib/binding-probe.mjs +18 -2
- package/package.json +1 -1
- package/synonyms.mjs +40 -0
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"plugins": [
|
|
11
11
|
{
|
|
12
12
|
"name": "claude-mem-lite",
|
|
13
|
-
"version": "3.
|
|
13
|
+
"version": "3.56.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.56.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/lib/binding-probe.mjs
CHANGED
|
@@ -38,13 +38,29 @@ export async function probeBetterSqlite3Binding(installDir) {
|
|
|
38
38
|
* subprocess.
|
|
39
39
|
*
|
|
40
40
|
* @param {string} installDir Directory containing node_modules/better-sqlite3
|
|
41
|
-
* @param {{probe?: () => Promise<{ok: boolean, error?: string}>, rebuild?: () => Promise<void
|
|
41
|
+
* @param {{probe?: () => Promise<{ok: boolean, error?: string}>, rebuild?: () => Promise<void>, exec?: (cmd: string, opts: object) => void}} [deps]
|
|
42
42
|
* @returns {Promise<{ok: true, action: 'verified' | 'rebuilt'} | {ok: false, error: string}>}
|
|
43
43
|
*/
|
|
44
44
|
export async function ensureBetterSqlite3Working(installDir, deps = {}) {
|
|
45
45
|
const probe = deps.probe || (() => probeBetterSqlite3Binding(installDir));
|
|
46
|
+
const exec = deps.exec || execSync;
|
|
46
47
|
const rebuild = deps.rebuild || (async () => {
|
|
47
|
-
|
|
48
|
+
// npm >= 12 blocks install/lifecycle scripts by default (the `allow-scripts`
|
|
49
|
+
// allowlist ships empty). better-sqlite3's install step
|
|
50
|
+
// (`prebuild-install || node-gyp rebuild`) is what produces the native .node
|
|
51
|
+
// binding, so a plain `npm rebuild better-sqlite3` exits 0 ("rebuilt
|
|
52
|
+
// dependencies successfully") WITHOUT compiling it — the server then FATALs
|
|
53
|
+
// opening the DB and dies before the MCP handshake (client reports -32000),
|
|
54
|
+
// and THIS self-heal silently no-ops on every launch. Re-enable scripts for
|
|
55
|
+
// just this rebuild of our own vetted dependency: `npm rebuild <pkg>` runs
|
|
56
|
+
// only <pkg>'s scripts, so the blast radius is better-sqlite3 alone. Older
|
|
57
|
+
// npm has no such gate and treats the unknown flag as an ignored config; if
|
|
58
|
+
// it instead errors on the flag, fall back to the plain rebuild.
|
|
59
|
+
try {
|
|
60
|
+
exec('npm rebuild better-sqlite3 --dangerously-allow-all-scripts', { cwd: installDir, stdio: 'pipe' });
|
|
61
|
+
} catch {
|
|
62
|
+
exec('npm rebuild better-sqlite3', { cwd: installDir, stdio: 'pipe' });
|
|
63
|
+
}
|
|
48
64
|
});
|
|
49
65
|
|
|
50
66
|
const first = await probe();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-mem-lite",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.56.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",
|
package/synonyms.mjs
CHANGED
|
@@ -215,6 +215,37 @@ export const SYNONYM_PAIRS = [
|
|
|
215
215
|
['历史', 'history'], ['描述', 'description'],
|
|
216
216
|
['推荐', 'recommend'], ['建议', 'suggestion'],
|
|
217
217
|
['智能', 'smart'], ['智能', 'intelligent'],
|
|
218
|
+
// ─── G15 bilingual bridge (three-face audit 2026-07-18) ───
|
|
219
|
+
// Real-DB gap: obs bodies are Haiku ENGLISH summaries, so Chinese queries for
|
|
220
|
+
// the user's WORKING vocabulary scored zero ('钳制' 0 hits vs 'clamp' 9 — the
|
|
221
|
+
// audit's canonical case). Pairs curated from (a) 90d prompt mining of
|
|
222
|
+
// frequent uncovered CJK terms (注入/发版/报告/目录/路径/覆盖/规范/默认…) and
|
|
223
|
+
// (b) the memory/search/release domain vocabulary this corpus actually stores.
|
|
224
|
+
// English→Chinese direction is near-free (CJK terms rarely match EN docs);
|
|
225
|
+
// the win is Chinese→English. Gated by denoise-ab A/B (g15 control snapshot).
|
|
226
|
+
['钳制', 'clamp'], ['富集', 'enrich'], ['富集', 'enrichment'],
|
|
227
|
+
['注入', 'inject'], ['注入', 'injection'],
|
|
228
|
+
['召回', 'recall'], ['检索', 'retrieval'], ['检索', 'search'],
|
|
229
|
+
['衰减', 'decay'], ['去重', 'dedup'],
|
|
230
|
+
['幂等', 'idempotent'], ['幂等', 'idempotency'],
|
|
231
|
+
['回填', 'backfill'], ['降级', 'degrade'],
|
|
232
|
+
['兜底', 'fallback'], ['回退', 'rollback'], ['回退', 'revert'],
|
|
233
|
+
['探针', 'probe'], ['遥测', 'telemetry'],
|
|
234
|
+
['基线', 'baseline'], ['审计', 'audit'],
|
|
235
|
+
['路线图', 'roadmap'], ['词表', 'vocabulary'],
|
|
236
|
+
['命名空间', 'namespace'], ['残留', 'residue'],
|
|
237
|
+
['门控', 'gate'], ['阈值', 'threshold'],
|
|
238
|
+
['快照', 'snapshot'], ['签名', 'signature'], ['签名', 'signing'],
|
|
239
|
+
['备份', 'backup'], ['漏斗', 'funnel'],
|
|
240
|
+
['发版', 'release'], ['报告', 'report'],
|
|
241
|
+
['目录', 'directory'], ['路径', 'path'],
|
|
242
|
+
['覆盖', 'coverage'], ['覆盖', 'overwrite'],
|
|
243
|
+
['规范', 'spec'], ['默认', 'default'],
|
|
244
|
+
['场景', 'scenario'], ['质量', 'quality'],
|
|
245
|
+
['逻辑', 'logic'], ['规则', 'rule'],
|
|
246
|
+
['墓碑', 'tombstone'], ['噪音', 'noise'], ['噪声', 'noise'],
|
|
247
|
+
['精度', 'precision'], ['精准', 'precision'], ['稀释', 'dilution'],
|
|
248
|
+
['延后', 'defer'], ['挂账', 'deferred'], ['可观测', 'observability'],
|
|
218
249
|
];
|
|
219
250
|
|
|
220
251
|
// ─── Bidirectional SYNONYM_MAP (case-insensitive) ──────────────────────────────
|
|
@@ -272,6 +303,15 @@ export const CJK_COMPOUNDS = new Set([
|
|
|
272
303
|
// improves, and real compounds cannot create boundary-straddle bigrams.
|
|
273
304
|
'工作', '用户', '完成', '计划', '命令', '工具', '插件', '实施', '处理',
|
|
274
305
|
'清理', '显示', '本地', '改动', '确认', '直接', '开始',
|
|
306
|
+
// G15 bilingual-bridge terms — keep cjkBigrams (CJK_SORTED reads ONLY this
|
|
307
|
+
// set) segmenting the same words the synonym map expands, so index-side and
|
|
308
|
+
// query-side tokenization agree. Real compounds are monotonically safe (above).
|
|
309
|
+
'钳制', '富集', '召回', '检索', '衰减', '去重', '幂等', '回填', '降级',
|
|
310
|
+
'兜底', '回退', '探针', '遥测', '基线', '审计', '路线图', '词表', '命名空间',
|
|
311
|
+
'残留', '门控', '阈值', '快照', '签名', '备份', '漏斗', '发版', '报告',
|
|
312
|
+
'目录', '路径', '覆盖', '规范', '默认', '场景', '质量', '逻辑', '规则',
|
|
313
|
+
'墓碑', '噪音', '噪声', '精度', '精准', '稀释', '延后', '挂账', '可观测',
|
|
314
|
+
'注入',
|
|
275
315
|
]);
|
|
276
316
|
|
|
277
317
|
// ─── Dispatch Synonyms (unidirectional, broader groupings) ──────────────────
|