Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 822cf796e1 | |||
| 53314d9c38 | |||
| 3a1ed0d299 |
@@ -10,7 +10,7 @@
|
||||
"plugins": [
|
||||
{
|
||||
"name": "claude-mem",
|
||||
"version": "7.0.8",
|
||||
"version": "7.0.9",
|
||||
"source": "./plugin",
|
||||
"description": "Persistent memory system for Claude Code - context compression across sessions"
|
||||
}
|
||||
|
||||
@@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
|
||||
## [7.0.8] - 2025-12-10
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
- **Critical**: Filter out meta-observations for session-memory files to prevent recursive timeline pollution
|
||||
- Memory agent was creating observations about editing Agent SDK's session-memory/summary.md files
|
||||
- This created a recursive loop where investigating timeline pollution caused more pollution
|
||||
- Filter now skips Edit/Write/Read/NotebookEdit operations on any file path containing 'session-memory'
|
||||
- Eliminates 91+ meta-observations that were polluting the timeline
|
||||
|
||||
## Technical Details
|
||||
|
||||
Added filtering logic in SessionRoutes.ts to detect and skip file operations on session-memory files before observations are queued to the SDK agent. This prevents the memory agent from observing its own observation metadata files.
|
||||
|
||||
## [7.0.7] - 2025-12-10
|
||||
|
||||
## What's Changed
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
Claude-mem is a Claude Code plugin providing persistent memory across sessions. It captures tool usage, compresses observations using the Claude Agent SDK, and injects relevant context into future sessions.
|
||||
|
||||
**Current Version**: 7.0.8
|
||||
**Current Version**: 7.0.9
|
||||
|
||||
## Architecture
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "claude-mem",
|
||||
"version": "7.0.8",
|
||||
"version": "7.0.9",
|
||||
"description": "Memory compression system for Claude Code - persist context across sessions",
|
||||
"keywords": [
|
||||
"claude",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "claude-mem",
|
||||
"version": "7.0.8",
|
||||
"version": "7.0.9",
|
||||
"description": "Persistent memory system for Claude Code - seamlessly preserve context across sessions",
|
||||
"author": {
|
||||
"name": "Alex Newman"
|
||||
|
||||
@@ -49,7 +49,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleUnifiedSearch = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.search(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -58,7 +58,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleUnifiedTimeline = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.timeline(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -67,7 +67,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleDecisions = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.decisions(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -76,7 +76,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleChanges = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.changes(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -85,7 +85,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleHowItWorks = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.howItWorks(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -94,7 +94,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleSearchObservations = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.searchObservations(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -103,7 +103,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleSearchSessions = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.searchSessions(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -112,7 +112,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleSearchPrompts = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.searchUserPrompts(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -121,7 +121,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleSearchByConcept = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.findByConcept(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -130,7 +130,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleSearchByFile = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.findByFile(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -139,7 +139,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleSearchByType = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.findByType(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -148,7 +148,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleGetRecentContext = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.getRecentContext(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -157,7 +157,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleGetContextTimeline = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.getContextTimeline(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -234,7 +234,7 @@ export class SearchRoutes extends BaseRouteHandler {
|
||||
*/
|
||||
private handleGetTimelineByQuery = this.wrapHandler(async (req: Request, res: Response): Promise<void> => {
|
||||
const result = await this.searchManager.getTimelineByQuery(req.query);
|
||||
res.json(result.content);
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user