claude-mem-lite 2.9.5 → 2.9.7

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": "2.9.5",
13
+ "version": "2.9.7",
14
14
  "source": "./",
15
15
  "description": "Lightweight persistent memory system for Claude Code — FTS5 search, episode batching, error-triggered recall"
16
16
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem-lite",
3
- "version": "2.9.5",
3
+ "version": "2.9.7",
4
4
  "description": "Lightweight persistent memory system for Claude Code — FTS5 search, episode batching, error-triggered recall",
5
5
  "author": {
6
6
  "name": "sdsrss"
package/README.md CHANGED
@@ -461,7 +461,7 @@ claude-mem-lite/
461
461
  convert-commands.mjs # Converts command .md → SKILL.md in managed plugins
462
462
  index-managed.mjs # Offline indexer for managed resources
463
463
  # Test & benchmark (dev only)
464
- tests/ # Unit, property, integration, contract, E2E, pipeline tests (789 tests)
464
+ tests/ # Unit, property, integration, contract, E2E, pipeline tests
465
465
  benchmark/ # BM25 search quality benchmarks + CI gate
466
466
  ```
467
467
 
@@ -483,9 +483,9 @@ The benchmark suite runs as a CI gate (`npm run benchmark:gate`) to prevent sear
483
483
 
484
484
  ```bash
485
485
  npm run lint # ESLint static analysis
486
- npm test # Run all 789 tests (vitest)
486
+ npm test # Run full test suite (vitest)
487
487
  npm run test:smoke # Run 5 core smoke tests
488
- npm run test:coverage # Run tests with V8 coverage (≥70% lines/functions, ≥60% branches)
488
+ npm run test:coverage # Run tests with V8 coverage (≥75% lines/functions, ≥65% branches)
489
489
  npm run benchmark # Run full search quality benchmark
490
490
  npm run benchmark:gate # CI gate: fails if metrics regress beyond 5% tolerance
491
491
  ```
package/README.zh-CN.md CHANGED
@@ -461,7 +461,7 @@ claude-mem-lite/
461
461
  convert-commands.mjs # 将 command .md 转换为托管插件中的 SKILL.md
462
462
  index-managed.mjs # 托管资源离线索引器
463
463
  # 测试和基准(仅开发)
464
- tests/ # 单元、属性、集成、契约、E2E、管线测试(789 个)
464
+ tests/ # 单元、属性、集成、契约、E2E、管线测试
465
465
  benchmark/ # BM25 搜索质量基准 + CI 门控
466
466
  ```
467
467
 
@@ -483,9 +483,9 @@ claude-mem-lite/
483
483
 
484
484
  ```bash
485
485
  npm run lint # ESLint 静态分析
486
- npm test # 运行全部 789 个测试(vitest)
486
+ npm test # 运行完整测试套件(vitest)
487
487
  npm run test:smoke # 运行 5 个核心冒烟测试
488
- npm run test:coverage # 运行测试并生成 V8 覆盖率(≥70% 行/函数,≥60% 分支)
488
+ npm run test:coverage # 运行测试并生成 V8 覆盖率(≥75% 行/函数,≥65% 分支)
489
489
  npm run benchmark # 运行完整搜索质量基准测试
490
490
  npm run benchmark:gate # CI 门控:指标回退超过 5% 容差时失败
491
491
  ```
package/hook-update.mjs CHANGED
@@ -2,7 +2,7 @@
2
2
  // Checks for new versions on SessionStart, downloads and installs automatically.
3
3
  // Skips in dev mode (symlinked installs). Silent on network failure.
4
4
 
5
- import { execSync } from 'node:child_process';
5
+ import { execSync, execFileSync } from 'node:child_process';
6
6
  import { readFileSync, writeFileSync, copyFileSync, readdirSync, existsSync, lstatSync, mkdirSync, rmSync, renameSync } from 'node:fs';
7
7
  import { join, dirname } from 'node:path';
8
8
  import { tmpdir } from 'node:os';
@@ -83,10 +83,15 @@ export async function checkForUpdate(options = {}) {
83
83
  latestVersion: latest.version,
84
84
  updateAvailable: false,
85
85
  rateLimited: false,
86
+ lastError: null,
86
87
  });
87
88
  return null;
88
89
  } catch (err) {
89
90
  debugCatch(err, 'checkForUpdate');
91
+ try {
92
+ const s = readState();
93
+ saveState({ ...s, lastCheck: new Date().toISOString(), lastError: err.message });
94
+ } catch {}
90
95
  return null;
91
96
  }
92
97
  }
@@ -195,7 +200,7 @@ const SOURCE_FILES = [
195
200
  'registry.mjs', 'registry-scanner.mjs', 'registry-indexer.mjs',
196
201
  'registry-retriever.mjs', 'resource-discovery.mjs',
197
202
  'dispatch.mjs', 'dispatch-inject.mjs', 'dispatch-feedback.mjs', 'dispatch-patterns.mjs', 'dispatch-workflow.mjs',
198
- 'install.mjs',
203
+ 'install.mjs', 'install-metadata.mjs',
199
204
  ];
200
205
  const SWITCHABLE_PATHS = [...SOURCE_FILES, 'scripts', 'registry', 'node_modules'];
201
206
 
@@ -317,7 +322,7 @@ function copyReleaseIntoStaging(sourceDir, stagingDir) {
317
322
  const stagedScripts = join(stagingDir, 'scripts');
318
323
  if (existsSync(stagedScripts)) {
319
324
  for (const sf of readdirSync(stagedScripts).filter(n => n.endsWith('.sh'))) {
320
- try { execSync(`chmod +x "${join(stagedScripts, sf)}"`, { stdio: 'pipe' }); } catch {}
325
+ try { execFileSync('chmod', ['+x', join(stagedScripts, sf)], { stdio: 'pipe' }); } catch {}
321
326
  }
322
327
  }
323
328