Cleanup worker-service.ts: remove dead code and fallback concept (#706)

* refactor(worker): remove dead code from worker-service.ts

Remove ~216 lines of unreachable code:
- Delete `runInteractiveSetup` function (defined but never called)
- Remove unused imports: fs namespace, spawn, homedir, readline,
  existsSync/writeFileSync/readFileSync/mkdirSync
- Clean up CursorHooksInstaller imports (keep only used exports)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(worker): only enable SDK fallback when Claude is configured

Add isConfigured() method to SDKAgent that checks for ANTHROPIC_API_KEY
or claude CLI availability. Worker now only sets SDK agent as fallback
for third-party providers when credentials exist, preventing cascading
failures for users who intentionally use Gemini/OpenRouter without Claude.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor(worker): remove misleading re-export indirection

Remove unnecessary re-export of updateCursorContextForProject from
worker-service.ts. ResponseProcessor now imports directly from
CursorHooksInstaller.ts where the function is defined. This eliminates
misleading indirection that suggested a circular dependency existed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor(mcp): use build-time injected version instead of hardcoded strings

Replace hardcoded '1.0.0' version strings with __DEFAULT_PACKAGE_VERSION__
constant that esbuild replaces at build time. This ensures MCP server and
client versions stay synchronized with package.json.

- worker-service.ts: MCP client version now uses packageVersion
- ChromaSync.ts: MCP client version now uses packageVersion
- mcp-server.ts: MCP server version now uses packageVersion
- Added clarifying comments for empty MCP capabilities objects

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat: Implement cleanup and validation plans for worker-service.ts

- Added a comprehensive cleanup plan addressing 23 identified issues in worker-service.ts, focusing on safe deletions, low-risk simplifications, and medium-risk improvements.
- Created an execution plan for validating intentional patterns in worker-service.ts, detailing necessary actions and priorities.
- Generated a report on unjustified logic in worker-service.ts, categorizing issues by severity and providing recommendations for immediate and short-term actions.
- Introduced documentation for recent activity in the mem-search plugin, enhancing traceability and context for changes.

* fix(sdk): remove dangerous ANTHROPIC_API_KEY check from isConfigured

Claude Code uses CLI authentication, not direct API calls. Checking for
ANTHROPIC_API_KEY could accidentally use a user's API key (from other
projects) which costs 20x more than Claude Code's pricing.

Now only checks for claude CLI availability.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(worker): remove fallback agent concept entirely

Users who choose Gemini/OpenRouter want those providers, not secret
fallback behavior. Removed setFallbackAgent calls and the unused
isConfigured() method.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Alex Newman
2026-01-13 23:30:13 -05:00
committed by GitHub
parent c314946204
commit 05323c9db5
18 changed files with 1836 additions and 882 deletions
+6 -2
View File
@@ -6,6 +6,10 @@
* Maintains MCP protocol handling and tool schemas
*/
// Version injected at build time by esbuild define
declare const __DEFAULT_PACKAGE_VERSION__: string;
const packageVersion = typeof __DEFAULT_PACKAGE_VERSION__ !== 'undefined' ? __DEFAULT_PACKAGE_VERSION__ : '0.0.0-dev';
// Import logger first
import { logger } from '../utils/logger.js';
@@ -236,11 +240,11 @@ NEVER fetch full details without filtering first. 10x token savings.`,
const server = new Server(
{
name: 'mcp-search-server',
version: '1.0.0',
version: packageVersion,
},
{
capabilities: {
tools: {},
tools: {}, // Exposes tools capability (handled by ListToolsRequestSchema and CallToolRequestSchema)
},
}
);
+59 -10
View File
@@ -3,17 +3,66 @@
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Jan 7, 2026
### Nov 3, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #38467 | 10:29 PM | ⚖️ | Log Level Audit Strategy: Tighten ERROR Messages for Runtime Issue Discovery | ~464 |
| #38449 | 10:26 PM | 🔵 | ChromaSync Error Handling: Throw After ERROR Log Pattern | ~452 |
| #38437 | 10:24 PM | 🔵 | Claude-mem core functionality and logging patterns identified | ~710 |
| #38432 | " | 🔵 | ChromaSync class architecture and fail-fast design pattern | ~508 |
| #38431 | " | 🔵 | ERROR-Level Logging Used Across 21 Source Files | ~480 |
| #38425 | " | ⚖️ | Log Level Architecture: Fail-Critical Over Fail-Fast for Chroma | ~467 |
| #38418 | 10:22 PM | 🔵 | ChromaDB Operates as Optional Subsystem with Graceful Degradation | ~586 |
| #38416 | " | 🔵 | ChromaDB Is Critical Not Optional - Log Audit Findings Challenged | ~405 |
| #38202 | 7:38 PM | 🔵 | ChromaSync Service Architecture | ~516 |
| #3465 | 6:26 PM | ⚖️ | PR preparation for hybrid search feature ready for submission | ~521 |
| #3460 | 6:18 PM | | Suppressed stderr output from Chroma MCP transport | ~231 |
| #3350 | 3:33 PM | | Document splitting strategy improves semantic search precision by vectorizing field-level content | ~701 |
| #3346 | " | 🟣 | ChromaSync service provides automatic real-time vector database synchronization | ~699 |
| #3345 | " | 🟣 | Completed ChromaDB hybrid search integration with semantic search across all content types | ~762 |
| #3323 | 3:01 PM | 🟣 | Integrated user prompt backfill into ChromaSync.backfill() | ~257 |
| #3322 | " | 🟣 | Implemented real-time user prompt sync to ChromaDB | ~275 |
| #3321 | " | | Added StoredUserPrompt interface to ChromaSync | ~179 |
### Nov 4, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #3645 | 3:03 PM | 🔵 | Observation Counter Removal Validated Safe for Chroma Integration | ~504 |
| #3643 | " | 🔵 | Chroma Document ID Structure and Granular Field Splitting | ~410 |
| #3642 | " | 🔵 | Observation Counter Independence from Chroma Import Process | ~440 |
### Nov 11, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #6992 | 6:28 PM | ⚖️ | Comprehensive Windows Issue Investigation and Fix Strategy | ~631 |
| #6986 | 6:26 PM | 🔵 | ChromaSync UVX Connection Configuration Analysis | ~333 |
| #6953 | 5:49 PM | 🔵 | ChromaSync Relies on uvx Python Package Runner Instead of npx | ~326 |
| #6952 | 5:48 PM | 🔵 | ChromaSync Uses uvx Command for MCP Server on All Platforms | ~368 |
### Dec 5, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #20401 | 7:18 PM | 🔵 | ChromaSync service synchronizes observations and summaries to vector database for semantic search | ~521 |
### Dec 13, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #25190 | 8:04 PM | 🔴 | Enhanced close() Method to Terminate Transport Subprocess | ~417 |
| #25189 | 8:03 PM | 🔄 | Store Transport Reference in ensureConnection Method | ~284 |
| #25188 | " | 🔄 | Added Transport Reference to ChromaSync Class | ~268 |
| #25187 | " | 🔵 | ChromaSync Has close() Method But May Not Be Called | ~277 |
| #25186 | " | 🔵 | ChromaSync Process Spawning via StdioClientTransport | ~355 |
| #25117 | 7:39 PM | 🟣 | Automatic Collection Migration for Embedding Function Changes | ~493 |
| #25116 | " | 🔄 | Collection Name Changed to Lazy Initialization | ~126 |
| #25115 | " | 🔵 | ChromaSync Service Current Implementation Analysis | ~454 |
| #25092 | 7:20 PM | 🟣 | ChromaSync Now Reads Embedding Function from Settings | ~394 |
| #25090 | 7:19 PM | 🔵 | Located Hardcoded Embedding Function in ChromaSync | ~345 |
### Dec 17, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #28547 | 4:49 PM | 🔴 | Fixed Windows subprocess zombie process issue in ChromaSync | ~368 |
| #28546 | " | ✅ | Added child_process import to ChromaSync | ~215 |
| #28545 | 4:48 PM | 🟣 | Subprocess PID Extraction for Windows Process Management | ~385 |
| #28544 | " | ✅ | Child Process PID Tracking Added to ChromaSync | ~239 |
| #28543 | " | 🔵 | ChromaSync Service Architecture | ~337 |
| #28542 | " | 🟣 | Windows Console Window Hiding for Chroma MCP Transport | ~308 |
| #28468 | 4:25 PM | 🔵 | ChromaSync Fail-Fast MCP Vector Database Integration | ~501 |
</claude-mem-context>
+6 -1
View File
@@ -18,6 +18,10 @@ import { USER_SETTINGS_PATH } from '../../shared/paths.js';
import path from 'path';
import os from 'os';
// Version injected at build time by esbuild define
declare const __DEFAULT_PACKAGE_VERSION__: string;
const packageVersion = typeof __DEFAULT_PACKAGE_VERSION__ !== 'undefined' ? __DEFAULT_PACKAGE_VERSION__ : '0.0.0-dev';
interface ChromaDocument {
id: string;
document: string;
@@ -123,9 +127,10 @@ export class ChromaSync {
this.transport = new StdioClientTransport(transportOptions);
// Empty capabilities object: this client only calls Chroma tools, doesn't expose any
this.client = new Client({
name: 'claude-mem-chroma-sync',
version: '1.0.0'
version: packageVersion
}, {
capabilities: {}
});
+8 -222
View File
@@ -10,16 +10,15 @@
*/
import path from 'path';
import * as fs from 'fs';
import { spawn } from 'child_process';
import { homedir } from 'os';
import { existsSync, writeFileSync, readFileSync, mkdirSync } from 'fs';
import * as readline from 'readline';
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
import { getWorkerPort, getWorkerHost } from '../shared/worker-utils.js';
import { logger } from '../utils/logger.js';
// Version injected at build time by esbuild define
declare const __DEFAULT_PACKAGE_VERSION__: string;
const packageVersion = typeof __DEFAULT_PACKAGE_VERSION__ !== 'undefined' ? __DEFAULT_PACKAGE_VERSION__ : '0.0.0-dev';
// Infrastructure imports
import {
writePidFile,
@@ -45,11 +44,7 @@ import { Server } from './server/Server.js';
// Integration imports
import {
updateCursorContextForProject,
handleCursorCommand,
detectClaudeCode,
findCursorHooksDir,
installCursorHooks,
configureCursorMcp
handleCursorCommand
} from './integrations/CursorHooksInstaller.js';
// Service layer imports
@@ -74,9 +69,6 @@ import { SearchRoutes } from './worker/http/routes/SearchRoutes.js';
import { SettingsRoutes } from './worker/http/routes/SettingsRoutes.js';
import { LogsRoutes } from './worker/http/routes/LogsRoutes.js';
// Re-export updateCursorContextForProject for SDK agents
export { updateCursorContextForProject };
/**
* Build JSON status output for hook framework communication.
* This is a pure function extracted for testability.
@@ -141,9 +133,8 @@ export class WorkerService {
this.sseBroadcaster = new SSEBroadcaster();
this.sdkAgent = new SDKAgent(this.dbManager, this.sessionManager);
this.geminiAgent = new GeminiAgent(this.dbManager, this.sessionManager);
this.geminiAgent.setFallbackAgent(this.sdkAgent);
this.openRouterAgent = new OpenRouterAgent(this.dbManager, this.sessionManager);
this.openRouterAgent.setFallbackAgent(this.sdkAgent);
this.paginationHelper = new PaginationHelper(this.dbManager);
this.settingsManager = new SettingsManager(this.dbManager);
this.sessionEventBroadcaster = new SessionEventBroadcaster(this.sseBroadcaster, this);
@@ -154,9 +145,10 @@ export class WorkerService {
});
// Initialize MCP client
// Empty capabilities object: this client only calls tools, doesn't expose any
this.mcpClient = new Client({
name: 'worker-search-proxy',
version: '1.0.0'
version: packageVersion
}, { capabilities: {} });
// Initialize HTTP server with core routes
@@ -432,212 +424,6 @@ export class WorkerService {
}
}
// ============================================================================
// Interactive Setup Wizard
// ============================================================================
async function runInteractiveSetup(): Promise<number> {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const question = (prompt: string): Promise<string> => {
return new Promise(resolve => rl.question(prompt, resolve));
};
console.log(`
╔══════════════════════════════════════════════════════════════════╗
║ Claude-Mem Cursor Setup Wizard ║
║ ║
║ This wizard will guide you through setting up claude-mem ║
║ for use with Cursor IDE. ║
╚══════════════════════════════════════════════════════════════════╝
`);
try {
console.log('Step 1: Checking environment...\n');
const hasClaudeCode = await detectClaudeCode();
const settingsPath = path.join(homedir(), '.claude-mem', 'settings.json');
let settings: Record<string, unknown> = {};
if (existsSync(settingsPath)) {
try {
settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
} catch (error) {
logger.debug('SETUP', 'Corrupt settings file, starting fresh', { path: settingsPath }, error as Error);
}
}
const currentProvider = settings['CLAUDE_MEM_PROVIDER'] as string || (hasClaudeCode ? 'claude-sdk' : 'none');
if (hasClaudeCode) {
console.log('Claude Code detected\n');
} else {
console.log('Claude Code not detected\n');
}
console.log(`Current provider: ${currentProvider}\n`);
console.log('Step 2: Choose AI Provider\n');
if (hasClaudeCode) {
console.log(' [1] Claude SDK (Recommended - uses your Claude Code subscription)');
} else {
console.log(' [1] Claude SDK (requires Claude Code subscription)');
}
console.log(' [2] Gemini (1500 free requests/day)');
console.log(' [3] OpenRouter (100+ models, some free)');
console.log(' [4] Keep current settings\n');
const providerChoice = await question('Enter choice [1-4]: ');
if (providerChoice === '1') {
settings['CLAUDE_MEM_PROVIDER'] = 'claude-sdk';
mkdirSync(path.dirname(settingsPath), { recursive: true });
writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
console.log('\nClaude SDK configured!\n');
} else if (providerChoice === '2') {
console.log('\nConfiguring Gemini...\n');
console.log(' Get your free API key at: https://aistudio.google.com/apikey\n');
const apiKey = await question('Enter your Gemini API key: ');
if (apiKey.trim()) {
settings['CLAUDE_MEM_PROVIDER'] = 'gemini';
settings['CLAUDE_MEM_GEMINI_API_KEY'] = apiKey.trim();
mkdirSync(path.dirname(settingsPath), { recursive: true });
writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
console.log('\nGemini configured successfully!\n');
} else {
console.log('\nNo API key provided. You can add it later in ~/.claude-mem/settings.json\n');
}
} else if (providerChoice === '3') {
console.log('\nConfiguring OpenRouter...\n');
console.log(' Get your API key at: https://openrouter.ai/keys\n');
const apiKey = await question('Enter your OpenRouter API key: ');
if (apiKey.trim()) {
settings['CLAUDE_MEM_PROVIDER'] = 'openrouter';
settings['CLAUDE_MEM_OPENROUTER_API_KEY'] = apiKey.trim();
mkdirSync(path.dirname(settingsPath), { recursive: true });
writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
console.log('\nOpenRouter configured successfully!\n');
} else {
console.log('\nNo API key provided. You can add it later in ~/.claude-mem/settings.json\n');
}
} else {
console.log('\nKeeping current settings.\n');
}
console.log('Step 3: Choose installation scope\n');
console.log(' [1] Project (current directory only) - Recommended');
console.log(' [2] User (all projects for current user)');
console.log(' [3] Skip hook installation\n');
const scopeChoice = await question('Enter choice [1-3]: ');
let installTarget: string | null = null;
if (scopeChoice === '1') {
installTarget = 'project';
} else if (scopeChoice === '2') {
installTarget = 'user';
} else {
console.log('\nSkipping hook installation.\n');
}
if (installTarget) {
console.log(`Step 4: Installing Cursor hooks (${installTarget})...\n`);
const cursorHooksDir = findCursorHooksDir();
if (!cursorHooksDir) {
console.error('Could not find cursor-hooks directory');
console.error(' Make sure you ran npm run build first.');
rl.close();
return 1;
}
const installResult = await installCursorHooks(cursorHooksDir, installTarget as 'project' | 'user');
if (installResult !== 0) {
rl.close();
return installResult;
}
console.log('\nStep 5: Configuring MCP server for memory search...\n');
const mcpResult = configureCursorMcp(installTarget as 'project' | 'user');
if (mcpResult !== 0) {
console.warn('MCP configuration failed, but hooks are installed.');
console.warn(' You can manually configure MCP later.\n');
} else {
console.log('');
}
}
console.log('\nStep 6: Starting claude-mem worker...\n');
const port = getWorkerPort();
const alreadyRunning = await waitForHealth(port, 1000);
if (alreadyRunning) {
console.log('Worker is already running!\n');
} else {
console.log(' Starting worker in background...');
const pid = spawnDaemon(__filename, port);
if (pid === undefined) {
console.error('Failed to start worker');
rl.close();
return 1;
}
writePidFile({ pid, port, startedAt: new Date().toISOString() });
const healthy = await waitForHealth(port, getPlatformTimeout(30000));
if (!healthy) {
removePidFile();
console.error('Worker failed to start');
rl.close();
return 1;
}
console.log('Worker started successfully!\n');
}
console.log(`
╔══════════════════════════════════════════════════════════════════╗
║ Setup Complete! ║
╚══════════════════════════════════════════════════════════════════╝
What's installed:
- Cursor hooks - Automatically capture sessions
- Context injection - Past work injected into new chats
- MCP search server - Ask "what did I work on last week?"
Next steps:
1. Restart Cursor to load the hooks and MCP server
2. Start chatting - your sessions will be remembered!
3. Use natural language to search: "find where I fixed the auth bug"
Useful commands:
npm run cursor:status Check installation status
npm run worker:status Check worker status
npm run worker:logs View worker logs
Memory viewer:
http://localhost:${port}
Documentation:
https://docs.claude-mem.ai/cursor
`);
rl.close();
return 0;
} catch (error) {
rl.close();
console.error(`\nSetup failed: ${(error as Error).message}`);
return 1;
}
}
// ============================================================================
// CLI Entry Point
// ============================================================================
@@ -13,7 +13,7 @@
import { logger } from '../../../utils/logger.js';
import { parseObservations, parseSummary, type ParsedObservation, type ParsedSummary } from '../../../sdk/parser.js';
import { updateCursorContextForProject } from '../../worker-service.js';
import { updateCursorContextForProject } from '../../integrations/CursorHooksInstaller.js';
import { updateFolderClaudeMdFiles } from '../../../utils/claude-md-utils.js';
import { getWorkerPort } from '../../../shared/worker-utils.js';
import type { ActiveSession } from '../../worker-types.js';
+1 -81
View File
@@ -3,85 +3,5 @@
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Dec 7, 2025
**SessionEventBroadcaster.ts**
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #21829 | 11:05 PM | 🔄 | Massive refactor adds 8,671 lines and removes 5,585 lines across 60 files | ~619 |
| #21824 | 10:59 PM | 🔵 | SessionEventBroadcaster methods called 7 times across SessionRoutes and SessionCompletionHandler | ~398 |
| #21822 | " | 🔵 | SessionEventBroadcaster instantiated in WorkerService and injected into routes and handlers | ~372 |
| #21816 | 10:58 PM | 🔵 | SessionEventBroadcaster provides semantic SSE event broadcasting | ~398 |
| #21807 | 10:49 PM | ⚖️ | KISS Audit Identified 587 Lines of Ceremonial Complexity | ~699 |
| #21796 | 10:46 PM | 🔵 | SessionEventBroadcaster Duplicates Processing Status Updates | ~388 |
| #21743 | 10:16 PM | 🟣 | Created SessionEventBroadcaster for Semantic Session Event Broadcasting | ~514 |
### Dec 8, 2025
**SessionEventBroadcaster.ts**
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #22107 | 6:47 PM | 🔵 | SessionEventBroadcaster Has observation_queued But No observation_completed Event | ~429 |
| #22049 | 6:04 PM | 🔵 | broadcastProcessingStatus method synchronizes queue state across six system components | ~477 |
| #22043 | 6:02 PM | 🔵 | SessionEventBroadcaster provides semantic event broadcasting with SSE and processing status updates | ~449 |
| #22036 | 6:00 PM | 🔵 | Found processing_status tracking across UI, hooks, and event systems | ~312 |
### Dec 11, 2025
**SessionEventBroadcaster.ts**
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #23962 | 1:59 PM | 🔵 | Services Layer Implements Full Backend Architecture | ~490 |
### Dec 20, 2025
**session-events.ts**
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #30609 | 5:01 PM | 🔄 | Phase 4: Eliminated Over-Engineering in Hook/Worker System | ~504 |
| #30567 | 4:56 PM | 🟣 | Session Event Broadcasting Utilities | ~313 |
**SessionEventBroadcaster.ts**
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #30593 | 4:59 PM | 🔄 | Deleted SessionEventBroadcaster Class File | ~298 |
| #30548 | 4:53 PM | 🔵 | SessionEventBroadcaster SSE Notification Layer | ~338 |
### Dec 25, 2025
**SessionEventBroadcaster.ts**
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #32597 | 8:40 PM | 🔵 | Identified session completion mechanism and potential method discrepancy | ~470 |
| #32580 | 8:22 PM | 🔵 | Grep for resetStuckMessages and processing | ~242 |
### Dec 28, 2025
**SessionEventBroadcaster.ts**
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #33439 | 10:15 PM | 🔄 | Extended Session ID Renaming to Additional Codebase Components | ~352 |
| #33328 | 3:10 PM | 🟣 | Merged centralized logger and session continuity diagnostics to main | ~397 |
| #33280 | 3:07 PM | 🔄 | Logger coverage refactor for background services | ~428 |
### Dec 30, 2025
**SessionEventBroadcaster.ts**
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #34550 | 4:53 PM | 🔵 | Phase 2 Review Reveals Critical Incomplete Error Handling | ~577 |
### Dec 31, 2025
**SessionEventBroadcaster.ts**
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #34558 | 2:32 PM | 🔵 | Code Quality Fix Plan Created for Seven Identified Issues | ~629 |
### Jan 2, 2026
**SessionEventBroadcaster.ts**
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #35951 | 4:42 PM | 🔵 | Multi-Layer Service Architecture Discovery | ~395 |
*No recent activity*
</claude-mem-context>
+80 -42
View File
@@ -3,57 +3,95 @@
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Jan 4, 2026
### Dec 5, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #37327 | 11:44 PM | | Cleaned Up Auto-Generated CLAUDE.md Files | ~352 |
| #37326 | " | | Staged All Changes for Commit | ~386 |
| #37325 | " | | Staged PR #554 Implementation Files | ~373 |
| #37324 | " | ✅ | Cleaned Up Auto-Generated CLAUDE.md Files | ~392 |
| #37323 | " | ✅ | Cleanup Completed - 31 Auto-Generated CLAUDE.md Files Deleted | ~411 |
| #37286 | 11:07 PM | ✅ | Phase 1 Settings Patch Applied Successfully | ~249 |
| #37282 | 11:06 PM | ✅ | Phase 1 Settings Patch Created | ~284 |
| #37280 | " | 🔵 | Feature Branch Missing FOLDER_CLAUDEMD_ENABLED Setting | ~251 |
| #37272 | 11:02 PM | ✅ | Phase 1 Verification Complete - All Checks Pass | ~275 |
| #37270 | " | 🔵 | Settings Routes Already Include FOLDER_CLAUDEMD_ENABLED | ~333 |
| #37267 | 11:00 PM | ✅ | Added CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED to Settings Validation | ~284 |
| #37266 | 10:59 PM | 🟣 | Added FOLDER_CLAUDEMD_ENABLED to Settings Routes Handler | ~329 |
| #37259 | 10:32 PM | ⚖️ | Implementation Plan Created for PR #554 Enhancements | ~621 |
| #37258 | 10:31 PM | ⚖️ | Comprehensive Implementation Plan Created for PR #554 Review Fixes | ~722 |
| #37257 | 10:29 PM | 🔵 | Regenerate Script and Settings Infrastructure Analyzed | ~563 |
| #37255 | " | 🔵 | Folder CLAUDE.md Integration Flow Mapped | ~550 |
| #20734 | 9:08 PM | 🔵 | SearchRoutes Context Injection Endpoint with Dynamic Import | ~614 |
| #20548 | 8:21 PM | 🔵 | Context generator imported from services directory in worker | ~334 |
| #20547 | " | 🔵 | Context injection route implementation in SearchRoutes.ts | ~289 |
### Jan 5, 2026
### Dec 7, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #37947 | 8:10 PM | 🔵 | Context injection generates formatted context via generateContext function | ~332 |
| #37838 | 6:55 PM | 🔵 | Complete Hook Architecture Technical Specification | ~704 |
| #37836 | 6:54 PM | 🔵 | Worker Service HTTP API Architecture and Hook Integration Pattern | ~639 |
| #37702 | 6:01 PM | 🔵 | Codebase uses path.join() exclusively with known anchors, no project root resolution pattern exists | ~489 |
| #37701 | " | 🔵 | Complete cwd data flow traced from hooks through observation processing | ~447 |
| #37694 | 5:55 PM | 🔵 | Sessions initialized via SessionManager.initializeSession() with cwd from request body | ~361 |
| #37440 | 1:13 AM | 🔵 | Comprehensive Analysis of Settings and Hard-Coded Limit | ~389 |
| #37435 | " | 🔵 | Settings Validation Limits CLAUDE_MEM_CONTEXT_OBSERVATIONS to 1-200 | ~307 |
| #37421 | 1:06 AM | 🔵 | Identified by-file API endpoint usage across codebase | ~406 |
| #37408 | 12:58 AM | 🔵 | SearchRoutes API Architecture with Worktree Support | ~543 |
| #37391 | 12:48 AM | ✅ | Staged 23 CLAUDE.md files with mix of new and modified content | ~400 |
| #37390 | 12:47 AM | ✅ | Regenerated 23 CLAUDE.md files in budapest workspace | ~365 |
| #21742 | 10:16 PM | 🔵 | SessionRoutes Analysis: Identified 10+ Scattered Broadcast Calls | ~540 |
### Jan 7, 2026
### Dec 8, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #38467 | 10:29 PM | ⚖️ | Log Level Audit Strategy: Tighten ERROR Messages for Runtime Issue Discovery | ~464 |
| #38456 | 10:26 PM | 🔵 | happyPathError Inline Fallback: Missing CWD When Queueing Observations | ~463 |
| #38453 | " | 🔵 | Generator Exit Patterns: Distinguishing Aborts from Unexpected Failures | ~454 |
| #38437 | 10:24 PM | 🔵 | Claude-mem core functionality and logging patterns identified | ~710 |
| #38431 | " | 🔵 | ERROR-Level Logging Used Across 21 Source Files | ~480 |
| #38405 | 10:07 PM | ⚖️ | DEBUG Log Level Analysis - One Message Requires WARN Promotion | ~819 |
| #38404 | 10:06 PM | ⚖️ | Log Level Audit Analysis - WARN to ERROR Promotion Criteria Established | ~769 |
| #38372 | 9:43 PM | 🔵 | Logging Anti-Pattern Found: Critical Errors Logged as DEBUG Instead of ERROR | ~464 |
| #38356 | 9:16 PM | 🔴 | Fixed AbortController Leak During Crash Recovery | ~384 |
| #38354 | 9:10 PM | 🔵 | Provider Selection Architecture and Default Settings Location | ~478 |
| #38351 | 9:09 PM | 🔵 | AbortController Replacement Without Abort Confirmed at Line 191 | ~434 |
| #22301 | 9:44 PM | 🔵 | Privacy Validation in Observation Processing | ~399 |
| #22296 | 9:43 PM | 🔵 | SessionRoutes HTTP Endpoints and SDK Agent Lifecycle | ~442 |
| #22222 | 8:29 PM | 🔵 | Found waiting logic in SessionRoutes but it may not be working correctly | ~359 |
| #22005 | 5:40 PM | 🔵 | handleObservationsByClaudeId Current Implementation | ~443 |
| #22004 | " | 🔵 | Legacy Observation Handling Pattern Identified | ~337 |
| #22003 | " | 🔵 | SessionRoutes Architecture Confirmed | ~354 |
| #21969 | 5:22 PM | 🟣 | Worker Routes Pass tool_use_id to SessionManager Queue | ~290 |
| #21968 | " | | Worker Endpoint Extracts toolUseId from Observation Request | ~243 |
| #21962 | 5:21 PM | 🟣 | Implemented handleGetObservationsForToolUse Endpoint Handler | ~325 |
| #21961 | " | 🟣 | Added GET Endpoint for Fetching Observations by Tool Use ID | ~272 |
| #21951 | 5:18 PM | 🔵 | Worker SessionRoutes Architecture and Endpoints Reviewed | ~418 |
| #21948 | 5:09 PM | 🟣 | Implemented PreToolUse Endpoint Handler | ~334 |
| #21947 | 5:07 PM | 🟣 | Added PreToolUse Route Registration | ~287 |
### Dec 9, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #23143 | 6:42 PM | ✅ | Updated Skip Tools Logic to Use USER_SETTINGS_PATH Constant | ~150 |
| #23142 | " | ✅ | Fixed Settings Path Import in SessionRoutes | ~148 |
| #23140 | 6:41 PM | 🟣 | Implemented Skip Tools Filtering in Observations Endpoint | ~386 |
| #23138 | " | ✅ | Added SettingsDefaultsManager and Paths Imports to SessionRoutes | ~222 |
| #23136 | " | 🔵 | SessionRoutes handleObservationsByClaudeId Handler Structure | ~329 |
| #23007 | 4:02 PM | 🔵 | Settings Write Implementation Using Nested Schema | ~398 |
| #22859 | 2:28 PM | 🔴 | Fixed Python Version Validation to Support 3.10+ | ~322 |
| #22854 | 2:27 PM | 🔵 | Located Python Version Validation Regex in SettingsRoutes | ~316 |
### Dec 10, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #23593 | 5:52 PM | 🔵 | SearchRoutes Handler Pattern | ~268 |
| #23588 | 5:51 PM | 🔵 | Search Routes HTTP API Integration | ~281 |
### Dec 14, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #26253 | 8:31 PM | 🔵 | SearchRoutes Confirms Context Endpoints Use generateContext, Search Uses SearchManager | ~397 |
| #25689 | 4:23 PM | 🔵 | SessionRoutes queueSummarize receives messages but doesn't persist them to database | ~496 |
### Dec 15, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #27043 | 6:04 PM | 🔵 | Subagent confirms no version switcher UI exists, only orphaned backend infrastructure | ~539 |
| #27041 | 6:03 PM | 🔵 | Branch switching code isolated to two backend files, no frontend UI components | ~473 |
| #27037 | 6:02 PM | 🔵 | Branch switching functionality exists in SettingsRoutes with UI switcher removal intent | ~463 |
### Dec 16, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #27414 | 3:25 PM | 🔵 | Batch Observations Endpoint Already Implemented | ~330 |
### Dec 19, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #30077 | 8:05 PM | 🔵 | SessionRoutes HTTP API Manages SDK Agent Lifecycle and Message Queue | ~516 |
### Dec 26, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #32949 | 10:55 PM | 🔵 | Complete settings persistence flow for Xiaomi MIMO v2 Flash model | ~320 |
| #32939 | 10:53 PM | 🔵 | Settings API routes handle model configuration persistence | ~288 |
### Dec 30, 2025
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #34491 | 2:28 PM | 🔵 | SessionRoutes Implements Multi-Provider Agent Management | ~635 |
</claude-mem-context>