Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7fe34e2a99 | |||
| 0cbcbd970a | |||
| 8bca13a9ad | |||
| 73d6745dc2 | |||
| 56805b4c26 | |||
| b7d43e3247 | |||
| e32f2d7b6c |
@@ -10,7 +10,7 @@
|
|||||||
"plugins": [
|
"plugins": [
|
||||||
{
|
{
|
||||||
"name": "claude-mem",
|
"name": "claude-mem",
|
||||||
"version": "8.0.4",
|
"version": "8.0.6",
|
||||||
"source": "./plugin",
|
"source": "./plugin",
|
||||||
"description": "Persistent memory system for Claude Code - context compression across sessions"
|
"description": "Persistent memory system for Claude Code - context compression across sessions"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,22 @@ 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/).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
|
|
||||||
|
## [8.0.5] - 2025-12-24
|
||||||
|
|
||||||
|
## Bug Fixes
|
||||||
|
|
||||||
|
- **Context Loading**: Fixed observation filtering for non-code modes, ensuring observations are properly retrieved across all mode types
|
||||||
|
|
||||||
|
## Technical Details
|
||||||
|
|
||||||
|
Refactored context loading logic to differentiate between code and non-code modes, resolving issues where mode-specific observations were filtered by stale settings.
|
||||||
|
|
||||||
|
## [8.0.4] - 2025-12-23
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- Changed worker start script
|
||||||
|
|
||||||
## [8.0.3] - 2025-12-23
|
## [8.0.3] - 2025-12-23
|
||||||
|
|
||||||
Fix critical worker crashes on startup (v8.0.2 regression)
|
Fix critical worker crashes on startup (v8.0.2 regression)
|
||||||
|
|||||||
+2
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "claude-mem",
|
"name": "claude-mem",
|
||||||
"version": "8.0.4",
|
"version": "8.0.6",
|
||||||
"description": "Memory compression system for Claude Code - persist context across sessions",
|
"description": "Memory compression system for Claude Code - persist context across sessions",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"claude",
|
"claude",
|
||||||
@@ -37,6 +37,7 @@
|
|||||||
"sync-marketplace:force": "node scripts/sync-marketplace.cjs --force",
|
"sync-marketplace:force": "node scripts/sync-marketplace.cjs --force",
|
||||||
"build:binaries": "node scripts/build-worker-binary.js",
|
"build:binaries": "node scripts/build-worker-binary.js",
|
||||||
"worker:logs": "tail -n 50 ~/.claude-mem/logs/worker-$(date +%Y-%m-%d).log",
|
"worker:logs": "tail -n 50 ~/.claude-mem/logs/worker-$(date +%Y-%m-%d).log",
|
||||||
|
"worker:tail": "tail -f 50 ~/.claude-mem/logs/worker-$(date +%Y-%m-%d).log",
|
||||||
"changelog:generate": "node scripts/generate-changelog.js",
|
"changelog:generate": "node scripts/generate-changelog.js",
|
||||||
"discord:notify": "node scripts/discord-release-notify.js",
|
"discord:notify": "node scripts/discord-release-notify.js",
|
||||||
"worker:start": "bun plugin/scripts/worker-cli.js start",
|
"worker:start": "bun plugin/scripts/worker-cli.js start",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "claude-mem",
|
"name": "claude-mem",
|
||||||
"version": "8.0.4",
|
"version": "8.0.6",
|
||||||
"description": "Persistent memory system for Claude Code - seamlessly preserve context across sessions",
|
"description": "Persistent memory system for Claude Code - seamlessly preserve context across sessions",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Alex Newman"
|
"name": "Alex Newman"
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "claude-mem-plugin",
|
"name": "claude-mem-plugin",
|
||||||
"version": "8.0.4",
|
"version": "8.0.6",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Runtime dependencies for claude-mem bundled hooks",
|
"description": "Runtime dependencies for claude-mem bundled hooks",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,39 @@
|
|||||||
|
import { query } from "@anthropic-ai/claude-agent-sdk";
|
||||||
|
import * as fs from "fs";
|
||||||
|
import * as path from "path";
|
||||||
|
|
||||||
|
const pathToFolder = "/Users/alexnewman/Scripts/claude-mem/datasets/epstein-mode/";
|
||||||
|
const pathToPlugin = "/Users/alexnewman/Scripts/claude-mem/plugin/";
|
||||||
|
|
||||||
|
// Or read from a directory
|
||||||
|
const filesToProcess = fs
|
||||||
|
.readdirSync(pathToFolder)
|
||||||
|
.filter((f) => f.endsWith(".md"))
|
||||||
|
.map((f) => path.join(pathToFolder, f));
|
||||||
|
|
||||||
|
// var i = 0;
|
||||||
|
|
||||||
|
for (const file of filesToProcess) {
|
||||||
|
// i++;
|
||||||
|
// Limit for testing
|
||||||
|
// if (i > 3) break;
|
||||||
|
|
||||||
|
console.log(`\n=== Processing ${file} ===\n`);
|
||||||
|
|
||||||
|
for await (const message of query({
|
||||||
|
prompt: `Read ${file} and think about how it relates to the injected context above (if any).`,
|
||||||
|
options: {
|
||||||
|
cwd: pathToFolder,
|
||||||
|
plugins: [{ type: "local", path: pathToPlugin }],
|
||||||
|
},
|
||||||
|
})) {
|
||||||
|
if (message.type === "system" && message.subtype === "init") {
|
||||||
|
console.log("Plugins:", message.plugins);
|
||||||
|
console.log("Commands:", message.slash_commands);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (message.type === "assistant") {
|
||||||
|
console.log("Assistant:", message.message.content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -55,6 +55,28 @@ function loadContextConfig(): ContextConfig {
|
|||||||
const settingsPath = path.join(homedir(), '.claude-mem', 'settings.json');
|
const settingsPath = path.join(homedir(), '.claude-mem', 'settings.json');
|
||||||
const settings = SettingsDefaultsManager.loadFromFile(settingsPath);
|
const settings = SettingsDefaultsManager.loadFromFile(settingsPath);
|
||||||
|
|
||||||
|
// For non-code modes, use all types/concepts from active mode instead of settings
|
||||||
|
const modeId = settings.CLAUDE_MEM_MODE;
|
||||||
|
const isCodeMode = modeId === 'code' || modeId.startsWith('code--');
|
||||||
|
|
||||||
|
let observationTypes: Set<string>;
|
||||||
|
let observationConcepts: Set<string>;
|
||||||
|
|
||||||
|
if (isCodeMode) {
|
||||||
|
// Code mode: use settings-based filtering
|
||||||
|
observationTypes = new Set(
|
||||||
|
settings.CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES.split(',').map((t: string) => t.trim()).filter(Boolean)
|
||||||
|
);
|
||||||
|
observationConcepts = new Set(
|
||||||
|
settings.CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS.split(',').map((c: string) => c.trim()).filter(Boolean)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// Non-code modes: use all types/concepts from active mode
|
||||||
|
const mode = ModeManager.getInstance().getActiveMode();
|
||||||
|
observationTypes = new Set(mode.observation_types.map(t => t.id));
|
||||||
|
observationConcepts = new Set(mode.observation_concepts.map(c => c.id));
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
totalObservationCount: parseInt(settings.CLAUDE_MEM_CONTEXT_OBSERVATIONS, 10),
|
totalObservationCount: parseInt(settings.CLAUDE_MEM_CONTEXT_OBSERVATIONS, 10),
|
||||||
fullObservationCount: parseInt(settings.CLAUDE_MEM_CONTEXT_FULL_COUNT, 10),
|
fullObservationCount: parseInt(settings.CLAUDE_MEM_CONTEXT_FULL_COUNT, 10),
|
||||||
@@ -63,12 +85,8 @@ function loadContextConfig(): ContextConfig {
|
|||||||
showWorkTokens: settings.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS === 'true',
|
showWorkTokens: settings.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS === 'true',
|
||||||
showSavingsAmount: settings.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT === 'true',
|
showSavingsAmount: settings.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT === 'true',
|
||||||
showSavingsPercent: settings.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT === 'true',
|
showSavingsPercent: settings.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT === 'true',
|
||||||
observationTypes: new Set(
|
observationTypes,
|
||||||
settings.CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES.split(',').map((t: string) => t.trim()).filter(Boolean)
|
observationConcepts,
|
||||||
),
|
|
||||||
observationConcepts: new Set(
|
|
||||||
settings.CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS.split(',').map((c: string) => c.trim()).filter(Boolean)
|
|
||||||
),
|
|
||||||
fullObservationField: settings.CLAUDE_MEM_CONTEXT_FULL_FIELD as 'narrative' | 'facts',
|
fullObservationField: settings.CLAUDE_MEM_CONTEXT_FULL_FIELD as 'narrative' | 'facts',
|
||||||
showLastSummary: settings.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY === 'true',
|
showLastSummary: settings.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY === 'true',
|
||||||
showLastMessage: settings.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE === 'true',
|
showLastMessage: settings.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE === 'true',
|
||||||
|
|||||||
@@ -300,6 +300,12 @@ export class SDKAgent {
|
|||||||
type: obsType,
|
type: obsType,
|
||||||
title: obsTitle
|
title: obsTitle
|
||||||
});
|
});
|
||||||
|
}).catch((error) => {
|
||||||
|
logger.warn('CHROMA', 'Observation sync failed, continuing without vector search', {
|
||||||
|
obsId,
|
||||||
|
type: obsType,
|
||||||
|
title: obsTitle
|
||||||
|
}, error);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Broadcast to SSE clients (for web UI)
|
// Broadcast to SSE clients (for web UI)
|
||||||
@@ -367,6 +373,11 @@ export class SDKAgent {
|
|||||||
duration: `${chromaDuration}ms`,
|
duration: `${chromaDuration}ms`,
|
||||||
request: summaryRequest
|
request: summaryRequest
|
||||||
});
|
});
|
||||||
|
}).catch((error) => {
|
||||||
|
logger.warn('CHROMA', 'Summary sync failed, continuing without vector search', {
|
||||||
|
summaryId,
|
||||||
|
request: summaryRequest
|
||||||
|
}, error);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Broadcast to SSE clients (for web UI)
|
// Broadcast to SSE clients (for web UI)
|
||||||
|
|||||||
@@ -119,6 +119,11 @@ export class SessionRoutes extends BaseRouteHandler {
|
|||||||
duration: `${chromaDuration}ms`,
|
duration: `${chromaDuration}ms`,
|
||||||
prompt: truncatedPrompt
|
prompt: truncatedPrompt
|
||||||
});
|
});
|
||||||
|
}).catch((error) => {
|
||||||
|
logger.warn('CHROMA', 'User prompt sync failed, continuing without vector search', {
|
||||||
|
promptId: latestPrompt.id,
|
||||||
|
prompt: promptText.length > 60 ? promptText.substring(0, 60) + '...' : promptText
|
||||||
|
}, error);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user