superlocalmemory 3.8.5 → 3.8.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.
Files changed (82) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +3 -3
  3. package/package.json +1 -1
  4. package/plugin/.claude-plugin/plugin.json +1 -1
  5. package/plugin/CLAUDE.md +3 -3
  6. package/plugin/agents/slm-governance-advisor.md +1 -1
  7. package/plugin/agents/slm-loop-runner.md +1 -1
  8. package/plugin/agents/slm-memory-advisor.md +1 -1
  9. package/plugin/agents/slm-optimize-advisor.md +1 -1
  10. package/plugin/requirements.txt +1 -1
  11. package/plugin/skills/slm-cache/SKILL.md +1 -1
  12. package/plugin/skills/slm-compress/SKILL.md +1 -1
  13. package/plugin/skills/slm-governance/SKILL.md +1 -1
  14. package/plugin/skills/slm-graph/SKILL.md +1 -1
  15. package/plugin/skills/slm-loop/SKILL.md +1 -1
  16. package/plugin/skills/slm-mesh/SKILL.md +1 -1
  17. package/plugin/skills/slm-profile/SKILL.md +1 -1
  18. package/plugin/skills/slm-recall/SKILL.md +1 -1
  19. package/plugin/skills/slm-remember/SKILL.md +1 -1
  20. package/plugin/skills/slm-scope/SKILL.md +1 -1
  21. package/plugin/skills/slm-session/SKILL.md +1 -1
  22. package/plugin/skills/slm-status/SKILL.md +1 -1
  23. package/plugin-src/rules/AGENTS.md +1 -1
  24. package/plugin-src/skills/slm-cache/SKILL.md +1 -1
  25. package/plugin-src/skills/slm-compress/SKILL.md +1 -1
  26. package/plugin-src/skills/slm-graph/SKILL.md +1 -1
  27. package/plugin-src/skills/slm-recall/SKILL.md +1 -1
  28. package/plugin-src/skills/slm-remember/SKILL.md +1 -1
  29. package/plugin-src/skills/slm-session/SKILL.md +1 -1
  30. package/plugin-src/skills/slm-status/SKILL.md +1 -1
  31. package/pyproject.toml +9 -1
  32. package/src/superlocalmemory/__init__.py +1 -1
  33. package/src/superlocalmemory/cli/commands.py +139 -404
  34. package/src/superlocalmemory/core/backend_orchestrator.py +7 -1
  35. package/src/superlocalmemory/core/component_registry.py +4 -2
  36. package/src/superlocalmemory/core/embeddings.py +33 -6
  37. package/src/superlocalmemory/core/engine.py +94 -49
  38. package/src/superlocalmemory/core/engine_ingestion.py +150 -63
  39. package/src/superlocalmemory/core/ingestion_command.py +133 -21
  40. package/src/superlocalmemory/core/mutations.py +32 -10
  41. package/src/superlocalmemory/core/recall_pipeline.py +111 -77
  42. package/src/superlocalmemory/core/remember_admission.py +152 -0
  43. package/src/superlocalmemory/core/remember_runtime.py +712 -0
  44. package/src/superlocalmemory/graph/cozo_backend.py +5 -5
  45. package/src/superlocalmemory/learning/bandit.py +50 -1
  46. package/src/superlocalmemory/learning/source_quality.py +38 -35
  47. package/src/superlocalmemory/mcp/_daemon_proxy.py +38 -15
  48. package/src/superlocalmemory/mcp/tools_active.py +4 -41
  49. package/src/superlocalmemory/mcp/tools_core.py +26 -87
  50. package/src/superlocalmemory/mcp/tools_evolution.py +5 -10
  51. package/src/superlocalmemory/optimize/proxy/capture.py +196 -8
  52. package/src/superlocalmemory/retrieval/engine.py +8 -3
  53. package/src/superlocalmemory/retrieval/reranker.py +35 -10
  54. package/src/superlocalmemory/server/loopback.py +7 -13
  55. package/src/superlocalmemory/server/profile_runtime.py +14 -0
  56. package/src/superlocalmemory/server/routes/abstraction.py +2 -4
  57. package/src/superlocalmemory/server/routes/agents.py +3 -5
  58. package/src/superlocalmemory/server/routes/behavioral.py +5 -13
  59. package/src/superlocalmemory/server/routes/brain.py +6 -9
  60. package/src/superlocalmemory/server/routes/entity.py +3 -7
  61. package/src/superlocalmemory/server/routes/evolution.py +3 -5
  62. package/src/superlocalmemory/server/routes/helpers.py +44 -23
  63. package/src/superlocalmemory/server/routes/insights.py +2 -4
  64. package/src/superlocalmemory/server/routes/learning.py +2 -5
  65. package/src/superlocalmemory/server/routes/lifecycle.py +2 -4
  66. package/src/superlocalmemory/server/routes/memories.py +122 -100
  67. package/src/superlocalmemory/server/routes/tiers.py +3 -22
  68. package/src/superlocalmemory/server/routes/timeline.py +2 -4
  69. package/src/superlocalmemory/server/routes/v3_api.py +18 -16
  70. package/src/superlocalmemory/server/unified_daemon.py +200 -109
  71. package/src/superlocalmemory/storage/admission_codec.py +119 -0
  72. package/src/superlocalmemory/storage/admission_journal.py +728 -0
  73. package/src/superlocalmemory/storage/database.py +59 -0
  74. package/src/superlocalmemory/storage/deferred_writes.py +67 -11
  75. package/src/superlocalmemory/storage/memory_write.py +8 -12
  76. package/src/superlocalmemory/storage/migration_runner.py +37 -0
  77. package/src/superlocalmemory/storage/migrations/M032_write_coordinator_admission.py +188 -0
  78. package/src/superlocalmemory/storage/read_connection.py +115 -0
  79. package/src/superlocalmemory/storage/write_coordinator.py +756 -0
  80. package/src/superlocalmemory/ui/index.html +1 -1
  81. package/src/superlocalmemory/ui/js/auto-settings.js +14 -1
  82. package/src/superlocalmemory/ui/js/od-settings.js +9 -3
@@ -1578,7 +1578,7 @@
1578
1578
  <script src="static/js/od-skills.js?v=379"></script>
1579
1579
  <script src="static/js/od-mesh.js?v=379"></script>
1580
1580
  <script src="static/js/od-optimize.js?v=379"></script>
1581
- <script src="static/js/od-settings.js?v=382"></script>
1581
+ <script src="static/js/od-settings.js?v=386"></script>
1582
1582
  <script src="static/js/od-backup.js?v=379"></script>
1583
1583
  <!-- MCP & Integrations pane (v3.8.0): shows exposed MCP tool profile + counts -->
1584
1584
  <script src="static/js/od-mcp.js?v=380"></script>
@@ -463,7 +463,10 @@ async function saveAllSettings() {
463
463
  async function loadEmbeddingSettings() {
464
464
  try {
465
465
  var resp = await fetch('/api/v3/embedding/config');
466
- if (!resp.ok) return;
466
+ if (!resp.ok) {
467
+ showEmbeddingConfigUnavailable();
468
+ return;
469
+ }
467
470
  var data = await resp.json();
468
471
 
469
472
  var provEl = document.getElementById('settings-emb-provider');
@@ -495,9 +498,19 @@ async function loadEmbeddingSettings() {
495
498
  }
496
499
  } catch (e) {
497
500
  console.log('Load embedding settings error:', e);
501
+ showEmbeddingConfigUnavailable();
498
502
  }
499
503
  }
500
504
 
505
+ function showEmbeddingConfigUnavailable() {
506
+ var info = document.getElementById('settings-emb-info');
507
+ if (!info) return;
508
+ // Do not alter any form values here: rendering fallback values would make
509
+ // a transient daemon/config failure look like a valid Mode A setup.
510
+ info.textContent = 'Embedding configuration unavailable. Check daemon health and retry.';
511
+ info.className = 'text-warning small';
512
+ }
513
+
501
514
  function updateEmbeddingUI() {
502
515
  var provider = document.getElementById('settings-emb-provider')?.value || 'default';
503
516
  var isCustom = provider === 'openai';
@@ -368,9 +368,12 @@
368
368
  ]);
369
369
  }
370
370
  function loadEmb() {
371
- fetch('/api/v3/embedding/config').then(function (r) { return r.ok ? r.json() : null; })
371
+ fetch('/api/v3/embedding/config').then(function (r) {
372
+ if (!r.ok) throw new Error('embedding config unavailable');
373
+ return r.json();
374
+ })
372
375
  .then(function (d) {
373
- if (!d) return;
376
+ if (!d) throw new Error('embedding config unavailable');
374
377
  var p = q('emb-prov');
375
378
  if (p) { p.value = d.is_openai_compatible ? 'openai' : 'default'; p.dispatchEvent(new Event('change')); }
376
379
  var m = q('emb-model'); if (m) m.value = d.model_name || '';
@@ -378,7 +381,10 @@
378
381
  var ep = q('emb-endpoint'); if (ep) ep.value = d.api_endpoint || '';
379
382
  var inf = q('emb-info');
380
383
  if (inf) inf.textContent = 'Current: ' + (d.model_name || 'nomic-embed-text') + ' (' + (d.dimension || 768) + 'd)';
381
- }).catch(function () {});
384
+ }).catch(function () {
385
+ var inf = q('emb-info');
386
+ if (inf) inf.textContent = 'Embedding configuration unavailable. Check daemon health and retry.';
387
+ });
382
388
  }
383
389
  function saveEmb() {
384
390
  setSt('emb', 'Saving…', null);