diff --git a/src/config/feature-flags.ts b/src/config/feature-flags.ts index dfb4954a2..730eb07e1 100644 --- a/src/config/feature-flags.ts +++ b/src/config/feature-flags.ts @@ -21,7 +21,10 @@ export interface FeatureFlags { enableKuzuDB: boolean; enableKuzuDBPersistence: boolean; enableKuzuDBPerformanceMonitoring: boolean; +<<<<<<< HEAD enableKuzuDBDirectWrites: boolean; +======= +>>>>>>> f8ce76cfe1df1b6682e8f921e51c532978b30f84 // Debug Features enableDebugMode: boolean; @@ -47,7 +50,10 @@ export const DEFAULT_FEATURE_FLAGS: FeatureFlags = { enableKuzuDB: false, enableKuzuDBPersistence: false, enableKuzuDBPerformanceMonitoring: false, +<<<<<<< HEAD enableKuzuDBDirectWrites: false, +======= +>>>>>>> f8ce76cfe1df1b6682e8f921e51c532978b30f84 // Debug Features enableDebugMode: false, @@ -115,6 +121,7 @@ class FeatureFlagManager { console.log(`⚠️ Warning: KuzuDB env var not recognized: "${kuzuEnabled}" - using default: ${flags.enableKuzuDB}`); } +<<<<<<< HEAD // Handle KuzuDB Direct Writes settings let directWritesEnabled: string | undefined; try { @@ -139,6 +146,8 @@ class FeatureFlagManager { console.log(`⚠️ Warning: KuzuDB direct writes env var not recognized: "${directWritesEnabled}" - using default: ${flags.enableKuzuDBDirectWrites}`); } +======= +>>>>>>> f8ce76cfe1df1b6682e8f921e51c532978b30f84 // Then, try to load from localStorage (can override environment) // Only try localStorage if we're in a browser context (not in workers) try { @@ -337,7 +346,10 @@ export const setFeatureFlag = (key: K, value: Feat export const isKuzuDBEnabled = (): boolean => featureFlags.isKuzuDBEnabled(); export const isKuzuDBPersistenceEnabled = (): boolean => featureFlags.getFlag('enableKuzuDBPersistence'); +<<<<<<< HEAD export const isKuzuDBDirectWritesEnabled = (): boolean => featureFlags.getFlag('enableKuzuDBDirectWrites'); +======= +>>>>>>> f8ce76cfe1df1b6682e8f921e51c532978b30f84 export const isDebugModeEnabled = (): boolean => featureFlags.isDebugModeEnabled(); export const isPerformanceMonitoringEnabled = (): boolean => featureFlags.isPerformanceMonitoringEnabled(); export const isWorkerPoolEnabled = (): boolean => featureFlags.getFlag('enableWorkerPool'); diff --git a/src/core/graph/kuzu-knowledge-graph.ts b/src/core/graph/kuzu-knowledge-graph.ts index 01f858da2..6949fa9ae 100644 --- a/src/core/graph/kuzu-knowledge-graph.ts +++ b/src/core/graph/kuzu-knowledge-graph.ts @@ -24,6 +24,10 @@ export interface KuzuGraphOptions { */ export class KuzuKnowledgeGraph implements KnowledgeGraph { private queryEngine: KuzuQueryEngine; +<<<<<<< HEAD +======= + private options: KuzuGraphOptions; +>>>>>>> f8ce76cfe1df1b6682e8f921e51c532978b30f84 private pendingNodes: GraphNode[] = []; private pendingRelationships: GraphRelationship[] = []; private nodeCache: Map = new Map(); @@ -71,7 +75,11 @@ export class KuzuKnowledgeGraph implements KnowledgeGraph { /** * Commit a single node with auto-recovery for missing tables */ +<<<<<<< HEAD public async commitSingleNode(node: GraphNode): Promise { +======= + private async commitSingleNode(node: GraphNode): Promise { +>>>>>>> f8ce76cfe1df1b6682e8f921e51c532978b30f84 try { const tableName = node.label; @@ -121,7 +129,11 @@ export class KuzuKnowledgeGraph implements KnowledgeGraph { /** * Commit a single relationship with auto-recovery for missing tables */ +<<<<<<< HEAD public async commitSingleRelationship(rel: GraphRelationship): Promise { +======= + private async commitSingleRelationship(rel: GraphRelationship): Promise { +>>>>>>> f8ce76cfe1df1b6682e8f921e51c532978b30f84 try { await this.queryEngine.executeQuery( `MATCH (a {id: '${rel.source}'}), (b {id: '${rel.target}'}) MERGE (a)-[:${rel.type} ${this.formatPropertiesForQuery(rel.properties)}]->(b)` diff --git a/src/core/ingestion/parallel-pipeline.ts b/src/core/ingestion/parallel-pipeline.ts index 31a72d039..b2682b7aa 100644 --- a/src/core/ingestion/parallel-pipeline.ts +++ b/src/core/ingestion/parallel-pipeline.ts @@ -5,7 +5,11 @@ import { ParallelParsingProcessor } from './parallel-parsing-processor.ts'; import { ImportProcessor } from './import-processor.ts'; import { CallProcessor } from './call-processor.ts'; import { WebWorkerPoolUtils } from '../../lib/web-worker-pool.js'; +<<<<<<< HEAD import { isKuzuDBEnabled, isKuzuDBDirectWritesEnabled } from '../../config/feature-flags.ts'; +======= +import { isKuzuDBEnabled } from '../../config/feature-flags.ts'; +>>>>>>> f8ce76cfe1df1b6682e8f921e51c532978b30f84 export interface PipelineInput { projectRoot: string; @@ -134,6 +138,7 @@ export class ParallelGraphPipeline { console.log('🔧 Worker Pool Statistics:', workerStats); } +<<<<<<< HEAD // Handle post-processing based on graph type if ('flushPendingOperations' in graph) { // DirectWriteKnowledgeGraph - flush any remaining operations @@ -143,6 +148,10 @@ export class ParallelGraphPipeline { } else if ('flushKuzuDB' in graph) { // DualWriteKnowledgeGraph - traditional batch flush console.log('🔄 Flushing batched KuzuDB operations...'); +======= + // Flush KuzuDB operations and log dual-write statistics if using DualWriteKnowledgeGraph + if ('flushKuzuDB' in graph) { +>>>>>>> f8ce76cfe1df1b6682e8f921e51c532978b30f84 await (graph as any).flushKuzuDB(); (graph as any).logDualWriteStats(); } @@ -262,7 +271,10 @@ export class ParallelGraphPipeline { */ private async createGraph(): Promise { console.log(`🔍 KuzuDB enabled check: ${isKuzuDBEnabled()}`); +<<<<<<< HEAD console.log(`⚡ KuzuDB direct writes check: ${isKuzuDBDirectWritesEnabled()}`); +======= +>>>>>>> f8ce76cfe1df1b6682e8f921e51c532978b30f84 if (isKuzuDBEnabled()) { try { @@ -286,6 +298,7 @@ export class ParallelGraphPipeline { autoCommit: false }); +<<<<<<< HEAD // Choose between direct-write and dual-write based on feature flag if (isKuzuDBDirectWritesEnabled()) { const { DirectWriteKnowledgeGraph } = await import('../graph/direct-write-knowledge-graph.ts'); @@ -301,6 +314,12 @@ export class ParallelGraphPipeline { console.log('✅ KuzuDB integration initialized - using dual-write mode (with flush)'); return new DualWriteKnowledgeGraph(kuzuGraph); } +======= + // Return transparent dual-write graph + const { DualWriteKnowledgeGraph } = await import('../graph/dual-write-knowledge-graph.ts'); + console.log('✅ KuzuDB integration initialized - using dual-write mode'); + return new DualWriteKnowledgeGraph(kuzuGraph); +>>>>>>> f8ce76cfe1df1b6682e8f921e51c532978b30f84 } catch (error) { console.warn('❌ KuzuDB initialization failed, falling back to JSON-only mode:', error);