Skip to content

Commit d86a150

Browse files
refactor(frame-manager): extract WhatsApp sync into lifecycle hooks (#6)
* refactor(frame-manager): extract WhatsApp sync into lifecycle hooks - Create new frame-lifecycle-hooks.ts module for extensible frame events - Remove WhatsApp-specific code from FrameManager (was 20 lines of tight coupling) - FrameManager now calls frameLifecycleHooks.triggerClose() instead - WhatsApp sync registers itself as a hook via registerWhatsAppSyncHook() - Benefits: - FrameManager no longer knows about WhatsApp - Other integrations can subscribe to frame events - Better testability and separation of concerns - Fire-and-forget hooks don't block frame operations https://claude.ai/code/session_014ojs76858uGzWb6Hrbs4VG * refactor(errors): consolidate error codes and handler into single module - Merge duplicate ErrorCode enums into src/core/errors/index.ts - Add new error codes: AUTH_*, FS_*, GIT_*, NET_* categories - Add getUserFriendlyMessage() for user-facing error messages - Move ErrorHandler class with retry/circuit breaker to errors module - Move validation utilities (validateInput, validateEmail, validatePath) - error-handler.ts now re-exports from errors for backwards compatibility Benefits: - Single source of truth for all error codes - Consistent error handling across CLI and core - No more conflicting StackMemoryError class definitions - Better organization with categorized error codes https://claude.ai/code/session_014ojs76858uGzWb6Hrbs4VG * chore: update package-lock.json https://claude.ai/code/session_014ojs76858uGzWb6Hrbs4VG * refactor(frame-manager): add lifecycle hooks and missing methods to RefactoredFrameManager - Add frameLifecycleHooks integration to RefactoredFrameManager.closeFrame() - Add missing methods for feature parity with legacy FrameManager: - setQueryMode() - change query mode for frame retrieval - getRecentFrames() - get recent frames with metadata - addContext() - add context metadata to current frame - deleteFrame() - delete frame completely (for handoffs) - extractTagsFromFrame() - extract tags for categorization - calculateFrameImportance() - calculate frame importance - Add setQueryMode() and removeFrame() to FrameStack This brings RefactoredFrameManager to feature parity with legacy FrameManager, enabling eventual removal of the legacy implementation. https://claude.ai/code/session_014ojs76858uGzWb6Hrbs4VG * refactor(context): migrate all imports to use index.js and fix type exports - Update all direct imports from frame-manager.ts to use index.js - Update type-only imports to use frame-types.ts - Fix type exports to use `export type` for pure type definitions (required because esbuild strips type-only modules at runtime) - Update tests to use new import paths: - FrameManager now refers to RefactoredFrameManager - LegacyFrameManager available for backwards compatibility tests All code now imports FrameManager from index.js, which provides the RefactoredFrameManager as the primary implementation. https://claude.ai/code/session_014ojs76858uGzWb6Hrbs4VG * refactor(context): remove legacy FrameManager and consolidate imports - Delete frame-manager.ts (1,391 lines) - legacy implementation - Update all imports to use index.js centralized exports - Fix updateParentFrame to properly update parent_frame_id and depth - Add validation for non-existent parent frames - Support parent_frame_id and depth updates in FrameDatabase - Rewrite cycle detection tests to use unified FrameManager https://claude.ai/code/session_014ojs76858uGzWb6Hrbs4VG --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent eba2a74 commit d86a150

File tree

84 files changed

+1003
-2047
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+1003
-2047
lines changed

package-lock.json

Lines changed: 37 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/__tests__/generated/frame-manager.bench.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
import { bench, describe } from 'vitest';
7-
import { FrameManager } from '../../core/context/frame-manager.js';
7+
import { FrameManager } from '../../core/context/index.js';
88
import Database from 'better-sqlite3';
99
import { join } from 'path';
1010
import { mkdtempSync, rmSync } from 'fs';

src/__tests__/generated/frame-manager.generated.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
7-
import { FrameManager } from '../../core/context/frame-manager.js';
7+
import { FrameManager } from '../../core/context/index.js';
88
import Database from 'better-sqlite3';
99
import { join } from 'path';
1010
import { mkdtempSync, rmSync } from 'fs';

src/__tests__/integration/fixtures/test-data-generator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Creates realistic test data for integration testing
44
*/
55

6-
import type { Frame, Event } from '../../../core/context/frame-manager.js';
6+
import type { Frame, Event } from '../../../core/context/index.js';
77

88
export interface TestFrameOptions {
99
count?: number;

src/__tests__/integration/helpers/test-environment.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
import { SQLiteAdapter, SQLiteConfig } from '../../../core/database/sqlite-adapter.js';
7-
import { FrameManager } from '../../../core/context/frame-manager.js';
7+
import { FrameManager } from '../../../core/context/index.js';
88
import { SharedContextLayer } from '../../../core/context/shared-context-layer.js';
99
import { ContextBridge } from '../../../core/context/context-bridge.js';
1010
import { ContextRetriever } from '../../../core/retrieval/context-retriever.js';

src/agents/core/agent-task-manager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
TaskPriority,
1616
} from '../../features/tasks/linear-task-manager.js';
1717
import { logger } from '../../core/monitoring/logger.js';
18-
import { FrameManager } from '../../core/context/frame-manager.js';
18+
import { FrameManager } from '../../core/context/index.js';
1919
import { TaskError, ErrorCode } from '../../core/errors/index.js';
2020

2121
export interface AgentTaskSession {

src/cli/commands/clear.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import * as path from 'path';
1212
import Database from 'better-sqlite3';
1313
import { existsSync } from 'fs';
1414
import { ClearSurvival } from '../../core/session/clear-survival.js';
15-
import { FrameManager } from '../../core/context/frame-manager.js';
15+
import { FrameManager } from '../../core/context/index.js';
1616
import { HandoffGenerator } from '../../core/session/handoff-generator.js';
1717
import { sessionManager } from '../../core/session/session-manager.js';
1818
import { getEnv, getOptionalEnv } from '../../utils/env.js';

src/cli/commands/context.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Command } from 'commander';
77
import Database from 'better-sqlite3';
88
import { join } from 'path';
99
import { existsSync } from 'fs';
10-
import { FrameManager, FrameType } from '../../core/context/frame-manager.js';
10+
import { FrameManager, FrameType } from '../../core/context/index.js';
1111
import { createContextRehydrateCommand } from './context-rehydrate.js';
1212

1313
// Type-safe environment variable access

src/cli/commands/dashboard.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import chalk from 'chalk';
77
import Table from 'cli-table3';
88
import { SessionManager } from '../../core/session/session-manager.js';
9-
import { FrameManager } from '../../core/context/frame-manager.js';
9+
import { FrameManager } from '../../core/context/index.js';
1010
import Database from 'better-sqlite3';
1111
import { join } from 'path';
1212
import { existsSync } from 'fs';

src/cli/commands/discovery.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import Database from 'better-sqlite3';
88
import { join } from 'path';
99
import { existsSync } from 'fs';
1010
import chalk from 'chalk';
11-
import { FrameManager } from '../../core/context/frame-manager.js';
11+
import { FrameManager } from '../../core/context/index.js';
1212
import { LLMContextRetrieval } from '../../core/retrieval/index.js';
1313
import { DiscoveryHandlers } from '../../integrations/mcp/handlers/discovery-handlers.js';
1414

0 commit comments

Comments
 (0)