/** * Workspace Module * * Provides two-way state synchronization between web clients, gateway, and user containers. * * Key components: * - WorkspaceManager: Per-session state manager with channel-agnostic interface * - SyncRegistry: Handles JSON patch sync protocol * - ContainerSync: Persists state to user containers via MCP * * Usage: * ```typescript * import { WorkspaceManager, ContainerSync, DEFAULT_STORES } from './workspace/index.js'; * * // Create container sync (optional, for persistent stores) * const containerSync = new ContainerSync(mcpClient, logger); * * // Create workspace manager for session * const workspace = new WorkspaceManager({ * userId: 'user-123', * sessionId: 'session-456', * stores: DEFAULT_STORES, * containerSync, * logger, * }); * * // Initialize (loads persistent stores from container) * await workspace.initialize(); * * // Attach channel adapter * workspace.setAdapter({ * sendSnapshot: (msg) => socket.send(JSON.stringify(msg)), * sendPatch: (msg) => socket.send(JSON.stringify(msg)), * getCapabilities: () => ({ supportsSync: true, ... }), * }); * * // Handle sync messages from client * workspace.handleHello(clientSeqs); * workspace.handlePatch(storeName, seq, patch); * * // Access state * const chartState = workspace.getState('chartState'); * await workspace.setState('chartState', newState); * * // Register triggers (future use) * const unsub = workspace.onPathChange('/chartState/symbol', (old, new, ctx) => { * console.log('Symbol changed:', old, '->', new); * }); * * // Cleanup * await workspace.shutdown(); * ``` */ // Types export type { SnapshotMessage, PatchMessage, HelloMessage, InboundSyncMessage, OutboundSyncMessage, StoreConfig, ChannelAdapter, ChannelCapabilities, ImageMessage, TextMessage, PathTrigger, PathTriggerHandler, PathTriggerContext, ChartState, ShapesStore, IndicatorsStore, ChannelState, ChannelInfo, WorkspaceStores, } from './types.js'; export { DEFAULT_STORES } from './types.js'; // Sync registry export { SyncRegistry } from './sync-registry.js'; // Container sync export { ContainerSync } from './container-sync.js'; export type { LoadResult, SaveResult, PatchResult } from './container-sync.js'; // Workspace manager export { WorkspaceManager } from './workspace-manager.js'; export type { WorkspaceManagerConfig } from './workspace-manager.js';