superlocalmemory 3.3.28 → 3.3.29

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superlocalmemory",
3
- "version": "3.3.28",
3
+ "version": "3.3.29",
4
4
  "description": "Information-geometric agent memory with mathematical guarantees. 4-channel retrieval, Fisher-Rao similarity, zero-LLM mode, EU AI Act compliant. Works with Claude, Cursor, Windsurf, and 17+ AI tools.",
5
5
  "keywords": [
6
6
  "ai-memory",
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superlocalmemory"
3
- version = "3.3.28"
3
+ version = "3.3.29"
4
4
  description = "Information-geometric agent memory with mathematical guarantees"
5
5
  readme = "README.md"
6
6
  license = {text = "Elastic-2.0"}
@@ -76,15 +76,19 @@ def register_v33_tools(server, get_engine: Callable) -> None:
76
76
  )
77
77
 
78
78
  if dry_run:
79
- # Dry run: compute retention stats without applying changes
80
- from superlocalmemory.math.ebbinghaus import EbbinghausCurve as _EC
81
- facts = engine._db.get_all_facts(pid)
79
+ rows = engine._db.execute(
80
+ "SELECT lifecycle_zone, COUNT(*) as cnt "
81
+ "FROM fact_retention WHERE profile_id = ? "
82
+ "GROUP BY lifecycle_zone",
83
+ (pid,),
84
+ )
82
85
  zones = {"active": 0, "warm": 0, "cold": 0, "archive": 0, "forgotten": 0}
83
- for f in facts:
84
- r = ebbinghaus.compute_retention(f.access_count or 0, f.importance or 0.5, 0, 0.0)
85
- zone = ebbinghaus.classify_zone(r)
86
- zones[zone] = zones.get(zone, 0) + 1
87
- result = {"total": len(facts), "transitions": 0, "dry_run_zones": zones}
86
+ total = 0
87
+ for row in rows:
88
+ r = dict(row)
89
+ zones[r["lifecycle_zone"]] = int(r["cnt"])
90
+ total += int(r["cnt"])
91
+ result = {"total": total, "transitions": 0, "dry_run_zones": zones}
88
92
  else:
89
93
  result = scheduler.run_decay_cycle(pid, force=True)
90
94
 
@@ -399,9 +403,9 @@ def register_v33_tools(server, get_engine: Callable) -> None:
399
403
  # 3. Behavioral pattern mining
400
404
  try:
401
405
  from superlocalmemory.learning.consolidation_worker import ConsolidationWorker
402
- cw = ConsolidationWorker(engine._db, engine._config)
403
- patterns = cw._generate_patterns(pid)
404
- results["behavioral"] = {"patterns_mined": len(patterns)}
406
+ cw = ConsolidationWorker(engine._db.db_path, engine._db.db_path.parent / "learning.db",)
407
+ count = cw._generate_patterns(pid, False)
408
+ results["behavioral"] = {"patterns_mined": count}
405
409
  except Exception as exc:
406
410
  results["behavioral"] = {"error": str(exc)}
407
411