* Create a diff from workflow state
(jsonContent: string, diffAnalysis?: DiffAnalysis)
| 160 | * Create a diff from workflow state |
| 161 | */ |
| 162 | async createDiff(jsonContent: string, diffAnalysis?: DiffAnalysis): Promise<DiffResult> { |
| 163 | try { |
| 164 | logger.info('WorkflowDiffEngine.createDiff called with:', { |
| 165 | jsonContentLength: jsonContent.length, |
| 166 | diffAnalysis: diffAnalysis, |
| 167 | diffAnalysisType: typeof diffAnalysis, |
| 168 | diffAnalysisUndefined: diffAnalysis === undefined, |
| 169 | diffAnalysisNull: diffAnalysis === null, |
| 170 | }) |
| 171 | |
| 172 | // Get current workflow state for comparison |
| 173 | const { useWorkflowStore } = await import('@/stores/workflows/workflow/store') |
| 174 | const currentWorkflowState = useWorkflowStore.getState().getWorkflowState() |
| 175 | |
| 176 | logger.info('WorkflowDiffEngine current workflow state:', { |
| 177 | blockCount: Object.keys(currentWorkflowState.blocks || {}).length, |
| 178 | edgeCount: currentWorkflowState.edges?.length || 0, |
| 179 | hasLoops: Object.keys(currentWorkflowState.loops || {}).length > 0, |
| 180 | hasParallels: Object.keys(currentWorkflowState.parallels || {}).length > 0, |
| 181 | }) |
| 182 | |
| 183 | // Merge subblock values from subblock store to ensure manual edits are included in baseline |
| 184 | let mergedBaseline: WorkflowState = currentWorkflowState |
| 185 | try { |
| 186 | mergedBaseline = { |
| 187 | ...currentWorkflowState, |
| 188 | blocks: mergeSubblockState(currentWorkflowState.blocks), |
| 189 | } |
| 190 | logger.info('Merged subblock values into baseline for diff creation', { |
| 191 | blockCount: Object.keys(mergedBaseline.blocks || {}).length, |
| 192 | }) |
| 193 | } catch (mergeError) { |
| 194 | logger.warn('Failed to merge subblock values into baseline; proceeding with raw state', { |
| 195 | error: toError(mergeError).message, |
| 196 | }) |
| 197 | } |
| 198 | |
| 199 | const proposedState = parseWorkflowStateJson(jsonContent) |
| 200 | return this.createDiffFromWorkflowState(proposedState, diffAnalysis, mergedBaseline) |
| 201 | } catch (error) { |
| 202 | logger.error('Failed to create diff:', error) |
| 203 | return { |
| 204 | success: false, |
| 205 | errors: [getErrorMessage(error, 'Failed to create diff')], |
| 206 | } |
| 207 | } |
| 208 | } |
| 209 | |
| 210 | /** |
| 211 | * Create a diff from a WorkflowState object directly (more efficient than YAML) |
no test coverage detected