claude-memory-layer 1.0.17 → 1.0.19

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 (40) hide show
  1. package/config/kpi-thresholds.json +7 -0
  2. package/dist/cli/index.js +372 -74
  3. package/dist/cli/index.js.map +3 -3
  4. package/dist/hooks/post-tool-use.js +6 -0
  5. package/dist/hooks/post-tool-use.js.map +2 -2
  6. package/dist/hooks/session-end.js +6 -0
  7. package/dist/hooks/session-end.js.map +2 -2
  8. package/dist/hooks/session-start.js +29 -13
  9. package/dist/hooks/session-start.js.map +2 -2
  10. package/dist/hooks/stop.js +6 -0
  11. package/dist/hooks/stop.js.map +2 -2
  12. package/dist/hooks/user-prompt-submit.js +245 -31
  13. package/dist/hooks/user-prompt-submit.js.map +3 -3
  14. package/dist/server/api/index.js +329 -31
  15. package/dist/server/api/index.js.map +3 -3
  16. package/dist/server/index.js +336 -38
  17. package/dist/server/index.js.map +3 -3
  18. package/dist/services/memory-service.js +6 -0
  19. package/dist/services/memory-service.js.map +2 -2
  20. package/dist/ui/app.js +236 -4
  21. package/dist/ui/index.html +51 -0
  22. package/dist/ui/style.css +34 -0
  23. package/memory/_index.md +4 -0
  24. package/memory/agent_response/uncategorized/2026-02-26.md +151 -1
  25. package/memory/agent_response/uncategorized/2026-03-03.md +14 -0
  26. package/memory/session_summary/uncategorized/2026-02-26.md +13 -0
  27. package/memory/session_summary/uncategorized/2026-03-03.md +5 -0
  28. package/memory/tool_observation/uncategorized/2026-02-26.md +9 -1
  29. package/memory/tool_observation/uncategorized/2026-03-03.md +21 -0
  30. package/memory/user_prompt/uncategorized/2026-02-26.md +9 -0
  31. package/package.json +3 -2
  32. package/scripts/delete-unknown-projects.js +154 -0
  33. package/src/hooks/session-start.ts +9 -3
  34. package/src/hooks/user-prompt-submit.ts +225 -29
  35. package/src/server/api/events.ts +1 -0
  36. package/src/server/api/stats.ts +346 -0
  37. package/src/services/memory-service.ts +7 -0
  38. package/src/ui/app.js +236 -4
  39. package/src/ui/index.html +51 -0
  40. package/src/ui/style.css +34 -0
@@ -5886,6 +5886,10 @@ function registerSession(sessionId, projectPath) {
5886
5886
  }
5887
5887
  saveSessionRegistry(registry);
5888
5888
  }
5889
+ function getSessionProject(sessionId) {
5890
+ const registry = loadSessionRegistry();
5891
+ return registry.sessions[sessionId] || null;
5892
+ }
5889
5893
  var MemoryService = class {
5890
5894
  // Primary store: SQLite (WAL mode) - for hooks, always available
5891
5895
  sqliteStore;
@@ -6899,6 +6903,12 @@ var MemoryService = class {
6899
6903
  recordMemoryAccess(eventId, sessionId, confidence = 1) {
6900
6904
  this.graduation.recordAccess(eventId, sessionId, confidence);
6901
6905
  }
6906
+ /**
6907
+ * Backward-compatible alias used by some hooks
6908
+ */
6909
+ async close() {
6910
+ await this.shutdown();
6911
+ }
6902
6912
  /**
6903
6913
  * Shutdown service
6904
6914
  */
@@ -6934,21 +6944,22 @@ var MemoryService = class {
6934
6944
  }
6935
6945
  };
6936
6946
  var serviceCache = /* @__PURE__ */ new Map();
6937
- function getMemoryServiceForProject(projectPath, sharedStoreConfig) {
6938
- const hash = hashProjectPath(projectPath);
6939
- if (!serviceCache.has(hash)) {
6940
- const storagePath = getProjectStoragePath(projectPath);
6941
- serviceCache.set(hash, new MemoryService({
6947
+ function getLightweightMemoryService(sessionId) {
6948
+ const projectInfo = getSessionProject(sessionId);
6949
+ const key = projectInfo ? `lightweight_${projectInfo.projectHash}` : "lightweight_global";
6950
+ if (!serviceCache.has(key)) {
6951
+ const storagePath = projectInfo ? getProjectStoragePath(projectInfo.projectPath) : path3.join(os.homedir(), ".claude-code", "memory");
6952
+ serviceCache.set(key, new MemoryService({
6942
6953
  storagePath,
6943
- projectHash: hash,
6944
- projectPath,
6945
- // Override shared store config - hooks don't need DuckDB
6946
- sharedStoreConfig: sharedStoreConfig ?? { enabled: false },
6947
- analyticsEnabled: false
6948
- // Hooks don't need DuckDB
6954
+ projectHash: projectInfo?.projectHash,
6955
+ projectPath: projectInfo?.projectPath,
6956
+ lightweightMode: true,
6957
+ // Skip embedder/vector/workers
6958
+ analyticsEnabled: false,
6959
+ sharedStoreConfig: { enabled: false }
6949
6960
  }));
6950
6961
  }
6951
- return serviceCache.get(hash);
6962
+ return serviceCache.get(key);
6952
6963
  }
6953
6964
 
6954
6965
  // src/hooks/session-start.ts
@@ -6956,7 +6967,7 @@ async function main() {
6956
6967
  const inputData = await readStdin();
6957
6968
  const input = JSON.parse(inputData);
6958
6969
  registerSession(input.session_id, input.cwd);
6959
- const memoryService = getMemoryServiceForProject(input.cwd);
6970
+ const memoryService = getLightweightMemoryService(input.session_id);
6960
6971
  try {
6961
6972
  await memoryService.startSession(input.session_id, input.cwd);
6962
6973
  const recentEvents = await memoryService.getRecentEvents(10);
@@ -6978,6 +6989,11 @@ You have worked on this project before. Here are some relevant memories:
6978
6989
  } catch (error) {
6979
6990
  console.error("Memory hook error:", error);
6980
6991
  console.log(JSON.stringify({ context: "" }));
6992
+ } finally {
6993
+ try {
6994
+ await memoryService.close();
6995
+ } catch {
6996
+ }
6981
6997
  }
6982
6998
  }
6983
6999
  function readStdin() {