/**
 * 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';
