/** * PortfolioSyncManager - Handles synchronization between local and GitHub portfolios * * Features: * - Download elements from GitHub portfolio * - Upload elements with consent * - Version comparison and diff viewing * - Privacy-first with explicit permissions * - Conflict resolution strategies * - Bulk operations with configuration checks */ import { ConfigManager } from '../config/ConfigManager.js'; import { PortfolioManager } from './PortfolioManager.js'; import { PortfolioRepoManager } from './PortfolioRepoManager.js'; import { GitHubPortfolioIndexer } from './GitHubPortfolioIndexer.js'; import { TokenManager } from '../security/tokenManager.js'; import { ElementType } from './types.js'; import { IFileOperationsService } from '../services/FileOperationsService.js'; export interface SyncOperation { operation: 'download' | 'upload' | 'compare' | 'list-remote'; element_name?: string; element_type?: ElementType; bulk?: boolean; version?: string; show_diff?: boolean; force?: boolean; confirm?: boolean; } export interface SyncResult { success: boolean; message: string; data?: any; elements?: SyncElementInfo[]; conflicts?: ConflictInfo[]; } export interface SyncElementInfo { name: string; type: ElementType; localVersion?: string; remoteVersion?: string; status: 'new' | 'updated' | 'conflict' | 'unchanged' | 'local-only'; action?: 'download' | 'upload' | 'skip'; } export interface ConflictInfo { element: string; type: ElementType; localVersion: string; remoteVersion: string; localModified: Date; remoteModified: Date; resolution?: 'local' | 'remote' | 'manual'; } export interface VersionInfo { version: string; timestamp: Date; author: string; hash: string; size: number; source: 'local' | 'remote'; } export interface ElementDiff { element: string; type: ElementType; changes: { metadata?: { field: string; oldValue: any; newValue: any; }[]; content?: { additions: number; deletions: number; diff: string; }; }; } export interface PortfolioSyncManagerDependencies { configManager: ConfigManager; portfolioManager: PortfolioManager; portfolioRepoManager: PortfolioRepoManager; indexer: GitHubPortfolioIndexer; fileOperations: IFileOperationsService; tokenManager: TokenManager; } export declare class PortfolioSyncManager { private configManager; private portfolioManager; private repoManager; private indexer; private fileOperations; private tokenManager; constructor(dependencies: PortfolioSyncManagerDependencies); /** * Main handler for sync operations */ handleSyncOperation(params: SyncOperation): Promise; /** * Check if bulk operation is allowed */ private isBulkOperationAllowed; /** * List elements available in GitHub portfolio */ private listRemoteElements; /** * Download a specific element from GitHub */ private downloadElement; /** * Upload a specific element to GitHub */ private uploadElement; /** * Compare local and remote versions */ private compareVersions; /** * Bulk download elements */ private bulkDownload; /** * Bulk upload elements */ private bulkUpload; /** * Generate diff between two content versions */ private generateDiff; /** * Build conflict metadata for UX/logging */ private buildConflictInfo; private extractMetadata; /** * Find a fuzzy match for an element name */ private findFuzzyMatch; /** * Get suggestions for similar element names */ private getSuggestions; /** * Calculate similarity between two strings * Returns a score between 0 and 1 */ private calculateSimilarity; } //# sourceMappingURL=PortfolioSyncManager.d.ts.map