@sudocode-ai/cli 0.1.16 → 0.1.18-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/better-sqlite3-loader.d.ts +9 -0
- package/dist/better-sqlite3-loader.d.ts.map +1 -0
- package/dist/better-sqlite3-loader.js +24 -0
- package/dist/better-sqlite3-loader.js.map +1 -0
- package/dist/cli/merge-commands.d.ts.map +1 -1
- package/dist/cli/merge-commands.js +290 -15
- package/dist/cli/merge-commands.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/db.d.ts +1 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +2 -2
- package/dist/db.js.map +1 -1
- package/dist/git-merge.d.ts +88 -0
- package/dist/git-merge.d.ts.map +1 -0
- package/dist/git-merge.js +214 -0
- package/dist/git-merge.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/merge-resolver.d.ts +73 -1
- package/dist/merge-resolver.d.ts.map +1 -1
- package/dist/merge-resolver.js +420 -5
- package/dist/merge-resolver.js.map +1 -1
- package/dist/watcher.d.ts +6 -0
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +15 -1
- package/dist/watcher.js.map +1 -1
- package/dist/yaml-conflict-resolver.d.ts +91 -0
- package/dist/yaml-conflict-resolver.d.ts.map +1 -0
- package/dist/yaml-conflict-resolver.js +197 -0
- package/dist/yaml-conflict-resolver.js.map +1 -0
- package/dist/yaml-converter.d.ts +68 -0
- package/dist/yaml-converter.d.ts.map +1 -0
- package/dist/yaml-converter.js +109 -0
- package/dist/yaml-converter.js.map +1 -0
- package/package.json +9 -3
package/dist/merge-resolver.js
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* - Metadata merging (relationships, tags)
|
|
8
8
|
*/
|
|
9
9
|
import * as fs from "fs";
|
|
10
|
+
import { toYaml, fromYaml } from "./yaml-converter.js";
|
|
11
|
+
import { mergeYamlContent } from "./git-merge.js";
|
|
10
12
|
/**
|
|
11
13
|
* Check if file contains git conflict markers
|
|
12
14
|
*/
|
|
@@ -135,6 +137,9 @@ function generateConflictId(originalId, uuid) {
|
|
|
135
137
|
}
|
|
136
138
|
/**
|
|
137
139
|
* Merge metadata from multiple versions of same entity
|
|
140
|
+
*
|
|
141
|
+
* USE FOR: Two-way merge scenarios (manual conflict resolution)
|
|
142
|
+
* Merges both array fields (union) and scalar fields (latest-wins)
|
|
138
143
|
*/
|
|
139
144
|
export function mergeMetadata(entities) {
|
|
140
145
|
// Sort by updated_at, keep most recent as base
|
|
@@ -182,9 +187,114 @@ export function mergeMetadata(entities) {
|
|
|
182
187
|
}
|
|
183
188
|
return base;
|
|
184
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Merge ONLY array fields from multiple versions (union semantics)
|
|
192
|
+
*
|
|
193
|
+
* USE FOR: Three-way merge scenarios (git merge driver)
|
|
194
|
+
* Only merges array fields (relationships, tags, feedback)
|
|
195
|
+
* Scalar fields (status, priority, title, etc.) are NOT merged
|
|
196
|
+
*
|
|
197
|
+
* This allows git merge-file to see actual differences in scalar fields
|
|
198
|
+
* for proper three-way merge semantics.
|
|
199
|
+
*/
|
|
200
|
+
export function mergeArrayFields(entities) {
|
|
201
|
+
const result = {};
|
|
202
|
+
// Merge relationships (union of unique)
|
|
203
|
+
const relationshipSet = new Set();
|
|
204
|
+
for (const entity of entities) {
|
|
205
|
+
if (entity.relationships) {
|
|
206
|
+
for (const rel of entity.relationships) {
|
|
207
|
+
relationshipSet.add(JSON.stringify(rel));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (relationshipSet.size > 0) {
|
|
212
|
+
result.relationships = Array.from(relationshipSet).map((r) => JSON.parse(r));
|
|
213
|
+
}
|
|
214
|
+
// Merge tags (union of unique)
|
|
215
|
+
const tagSet = new Set();
|
|
216
|
+
for (const entity of entities) {
|
|
217
|
+
if (entity.tags) {
|
|
218
|
+
for (const tag of entity.tags) {
|
|
219
|
+
tagSet.add(tag);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (tagSet.size > 0) {
|
|
224
|
+
result.tags = Array.from(tagSet);
|
|
225
|
+
}
|
|
226
|
+
// Merge feedback if present (union of unique by id)
|
|
227
|
+
const hasFeedback = entities.some((e) => e.feedback);
|
|
228
|
+
if (hasFeedback) {
|
|
229
|
+
const feedbackMap = new Map();
|
|
230
|
+
for (const entity of entities) {
|
|
231
|
+
if (entity.feedback) {
|
|
232
|
+
for (const fb of entity.feedback) {
|
|
233
|
+
if (!feedbackMap.has(fb.id)) {
|
|
234
|
+
feedbackMap.set(fb.id, fb);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (feedbackMap.size > 0) {
|
|
240
|
+
result.feedback = Array.from(feedbackMap.values());
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return result;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Resolve git conflict markers in YAML content using latest-wins per block
|
|
247
|
+
*
|
|
248
|
+
* When git merge-file produces conflicts in YAML, this function resolves
|
|
249
|
+
* each conflict block individually while preserving cleanly merged sections.
|
|
250
|
+
*
|
|
251
|
+
* @param yamlWithConflicts - YAML content containing git conflict markers
|
|
252
|
+
* @param useOurs - If true, use "ours" side for conflicts; if false, use "theirs"
|
|
253
|
+
* @returns Resolved YAML content without conflict markers
|
|
254
|
+
*
|
|
255
|
+
* @example
|
|
256
|
+
* ```typescript
|
|
257
|
+
* const yaml = `title: test
|
|
258
|
+
* <<<<<<< ours
|
|
259
|
+
* content: ours text
|
|
260
|
+
* =======
|
|
261
|
+
* content: theirs text
|
|
262
|
+
* >>>>>>> theirs
|
|
263
|
+
* priority: 3`;
|
|
264
|
+
*
|
|
265
|
+
* const resolved = resolveYamlConflicts(yaml, true);
|
|
266
|
+
* // Returns: "title: test\ncontent: ours text\npriority: 3"
|
|
267
|
+
* ```
|
|
268
|
+
*/
|
|
269
|
+
export function resolveYamlConflicts(yamlWithConflicts, useOurs) {
|
|
270
|
+
const sections = parseMergeConflictFile(yamlWithConflicts);
|
|
271
|
+
const resolved = [];
|
|
272
|
+
for (const section of sections) {
|
|
273
|
+
if (section.type === 'clean') {
|
|
274
|
+
// Keep cleanly merged content
|
|
275
|
+
resolved.push(...section.lines);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Conflict block - apply latest-wins
|
|
279
|
+
const chosen = useOurs ? section.ours : section.theirs;
|
|
280
|
+
resolved.push(...chosen);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return resolved.join('\n');
|
|
284
|
+
}
|
|
185
285
|
/**
|
|
186
286
|
* Resolve all entities using UUID-based deduplication
|
|
187
287
|
* Handles different UUIDs, same UUID conflicts, and metadata merging
|
|
288
|
+
*
|
|
289
|
+
* USE CASE: TWO-WAY MERGE
|
|
290
|
+
* - Manual conflict resolution (sudocode resolve-conflicts)
|
|
291
|
+
* - Conflicts already isolated by git conflict markers
|
|
292
|
+
* - No base version available (git index cleared after conflict)
|
|
293
|
+
* - Simple UUID deduplication is sufficient and faster
|
|
294
|
+
* - No benefit from YAML expansion overhead
|
|
295
|
+
*
|
|
296
|
+
* DO NOT USE FOR: Three-way merge with base/ours/theirs
|
|
297
|
+
* For that case, use mergeThreeWay() instead.
|
|
188
298
|
*/
|
|
189
299
|
export function resolveEntities(entities, options = {}) {
|
|
190
300
|
const stats = {
|
|
@@ -288,14 +398,319 @@ export function resolveEntities(entities, options = {}) {
|
|
|
288
398
|
stats.totalOutput = finalResolved.length;
|
|
289
399
|
return { entities: finalResolved, stats };
|
|
290
400
|
}
|
|
401
|
+
/**
|
|
402
|
+
* Helper function to merge entities using YAML + git merge-file for line-level merging
|
|
403
|
+
*/
|
|
404
|
+
function mergeYamlWithGit(versions, originalTimestamps) {
|
|
405
|
+
const { base, ours, theirs } = versions;
|
|
406
|
+
// Convert to YAML
|
|
407
|
+
const baseYaml = base ? toYaml(base) : "";
|
|
408
|
+
const oursYaml = ours ? toYaml(ours) : "";
|
|
409
|
+
const theirsYaml = theirs ? toYaml(theirs) : "";
|
|
410
|
+
// Run git merge-file for line-level merging
|
|
411
|
+
const mergeResult = mergeYamlContent({
|
|
412
|
+
base: baseYaml,
|
|
413
|
+
ours: oursYaml,
|
|
414
|
+
theirs: theirsYaml,
|
|
415
|
+
});
|
|
416
|
+
if (mergeResult.success && !mergeResult.hasConflicts) {
|
|
417
|
+
// Clean merge - parse YAML back to JSON
|
|
418
|
+
const mergedEntity = fromYaml(mergeResult.content);
|
|
419
|
+
return { success: true, entity: mergedEntity, hadConflicts: false };
|
|
420
|
+
}
|
|
421
|
+
else if (mergeResult.hasConflicts) {
|
|
422
|
+
// YAML has conflicts - resolve each conflict block individually
|
|
423
|
+
// Determine which side is newer for latest-wins decision
|
|
424
|
+
// Use original timestamps if provided (since versions may have updated_at stripped)
|
|
425
|
+
// When timestamps are identical, prefer ours for stability
|
|
426
|
+
const oursTimestamp = originalTimestamps?.ours ?? ours?.updated_at;
|
|
427
|
+
const theirsTimestamp = originalTimestamps?.theirs ?? theirs?.updated_at;
|
|
428
|
+
const oursNewer = compareTimestamps(oursTimestamp, theirsTimestamp) >= 0;
|
|
429
|
+
// Resolve conflict blocks, preserving cleanly merged sections
|
|
430
|
+
const resolvedYaml = resolveYamlConflicts(mergeResult.content, oursNewer);
|
|
431
|
+
const mergedEntity = fromYaml(resolvedYaml);
|
|
432
|
+
return { success: true, entity: mergedEntity, hadConflicts: true };
|
|
433
|
+
}
|
|
434
|
+
else {
|
|
435
|
+
// Fatal error during merge
|
|
436
|
+
return { success: false, entity: ours, hadConflicts: false };
|
|
437
|
+
}
|
|
438
|
+
}
|
|
291
439
|
/**
|
|
292
440
|
* Three-way merge for git merge driver
|
|
293
|
-
*
|
|
441
|
+
* Uses hybrid approach: field-level merge for scalars + line-level merge for multi-line text
|
|
442
|
+
*
|
|
443
|
+
* USE CASE: THREE-WAY MERGE
|
|
444
|
+
* - Git merge driver operations (automatic merge)
|
|
445
|
+
* - Worktree sync with true base/ours/theirs versions
|
|
446
|
+
* - Field-level merging preserves changes from either branch
|
|
447
|
+
*
|
|
448
|
+
* DO NOT USE FOR: Manual conflict resolution (use resolveEntities)
|
|
449
|
+
*
|
|
450
|
+
* This function implements true three-way merge semantics:
|
|
451
|
+
* 1. Group entities by UUID across base/ours/theirs
|
|
452
|
+
* 2. Handle deletion cases (modification wins over deletion)
|
|
453
|
+
* 3. Merge array fields FIRST (tags, relationships, feedback) with union semantics
|
|
454
|
+
* 4. Field-level three-way merge for SCALAR fields only (status, priority, etc.)
|
|
455
|
+
* 5. YAML + git merge-file for multi-line text fields (content, description)
|
|
456
|
+
* 6. Handle ID collisions (hash conflicts with .1, .2 suffixes)
|
|
457
|
+
* 7. Sort by created_at (git-friendly)
|
|
458
|
+
*
|
|
459
|
+
* Field-level three-way merge logic:
|
|
460
|
+
* - If base == ours == theirs: use any value (no changes)
|
|
461
|
+
* - If base == ours && base != theirs: use theirs (only theirs changed)
|
|
462
|
+
* - If base == theirs && base != ours: use ours (only ours changed)
|
|
463
|
+
* - If base != ours && base != theirs && ours == theirs: use either (both made same change)
|
|
464
|
+
* - If base != ours && base != theirs && ours != theirs: conflict -> latest wins
|
|
294
465
|
*/
|
|
295
466
|
export function mergeThreeWay(base, ours, theirs) {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
467
|
+
const stats = {
|
|
468
|
+
totalInput: base.length + ours.length + theirs.length,
|
|
469
|
+
totalOutput: 0,
|
|
470
|
+
conflicts: [],
|
|
471
|
+
};
|
|
472
|
+
// Step 1: Group entities by UUID across all three versions
|
|
473
|
+
const byUuid = new Map();
|
|
474
|
+
// Populate from all three versions
|
|
475
|
+
for (const entity of base) {
|
|
476
|
+
const existing = byUuid.get(entity.uuid) || {};
|
|
477
|
+
byUuid.set(entity.uuid, { ...existing, base: entity });
|
|
478
|
+
}
|
|
479
|
+
for (const entity of ours) {
|
|
480
|
+
const existing = byUuid.get(entity.uuid) || {};
|
|
481
|
+
byUuid.set(entity.uuid, { ...existing, ours: entity });
|
|
482
|
+
}
|
|
483
|
+
for (const entity of theirs) {
|
|
484
|
+
const existing = byUuid.get(entity.uuid) || {};
|
|
485
|
+
byUuid.set(entity.uuid, { ...existing, theirs: entity });
|
|
486
|
+
}
|
|
487
|
+
const mergedEntities = [];
|
|
488
|
+
// Step 2: Process each UUID group
|
|
489
|
+
for (const [uuid, versions] of Array.from(byUuid.entries())) {
|
|
490
|
+
const { base: baseEntity, ours: oursEntity, theirs: theirsEntity } = versions;
|
|
491
|
+
// Step 2a: Handle deletion cases
|
|
492
|
+
// Deleted in both → skip
|
|
493
|
+
if (!oursEntity && !theirsEntity) {
|
|
494
|
+
continue;
|
|
495
|
+
}
|
|
496
|
+
// Deleted in theirs, modified in ours → modification wins
|
|
497
|
+
if (baseEntity && !theirsEntity && oursEntity) {
|
|
498
|
+
mergedEntities.push(oursEntity);
|
|
499
|
+
stats.conflicts.push({
|
|
500
|
+
type: "same-uuid-same-id",
|
|
501
|
+
uuid,
|
|
502
|
+
originalIds: [baseEntity.id],
|
|
503
|
+
resolvedIds: [oursEntity.id],
|
|
504
|
+
action: `Kept ours (deleted in theirs, modified in ours)`,
|
|
505
|
+
});
|
|
506
|
+
continue;
|
|
507
|
+
}
|
|
508
|
+
// Deleted in ours, modified in theirs → modification wins
|
|
509
|
+
if (baseEntity && !oursEntity && theirsEntity) {
|
|
510
|
+
mergedEntities.push(theirsEntity);
|
|
511
|
+
stats.conflicts.push({
|
|
512
|
+
type: "same-uuid-same-id",
|
|
513
|
+
uuid,
|
|
514
|
+
originalIds: [baseEntity.id],
|
|
515
|
+
resolvedIds: [theirsEntity.id],
|
|
516
|
+
action: `Kept theirs (deleted in ours, modified in theirs)`,
|
|
517
|
+
});
|
|
518
|
+
continue;
|
|
519
|
+
}
|
|
520
|
+
// Added in only one side (no base)
|
|
521
|
+
if (!baseEntity && oursEntity && !theirsEntity) {
|
|
522
|
+
mergedEntities.push(oursEntity);
|
|
523
|
+
continue;
|
|
524
|
+
}
|
|
525
|
+
if (!baseEntity && !oursEntity && theirsEntity) {
|
|
526
|
+
mergedEntities.push(theirsEntity);
|
|
527
|
+
continue;
|
|
528
|
+
}
|
|
529
|
+
// Added in both sides (no base) → use standard resolution
|
|
530
|
+
if (!baseEntity && oursEntity && theirsEntity) {
|
|
531
|
+
const resolved = resolveEntities([oursEntity, theirsEntity]);
|
|
532
|
+
mergedEntities.push(...resolved.entities);
|
|
533
|
+
stats.conflicts.push(...resolved.stats.conflicts);
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
// Check if IDs match - if not, this is an ID conflict
|
|
537
|
+
// In three-way merge, keep ours and theirs (they both moved from base)
|
|
538
|
+
const ids = new Set([baseEntity?.id, oursEntity?.id, theirsEntity?.id].filter(Boolean));
|
|
539
|
+
if (ids.size > 1) {
|
|
540
|
+
// IDs don't match - ID conflict
|
|
541
|
+
// Only keep ours and theirs (not base, since both sides moved away from it)
|
|
542
|
+
const versionsToResolve = [oursEntity, theirsEntity].filter((e) => e !== undefined);
|
|
543
|
+
const resolved = resolveEntities(versionsToResolve);
|
|
544
|
+
mergedEntities.push(...resolved.entities);
|
|
545
|
+
stats.conflicts.push(...resolved.stats.conflicts);
|
|
546
|
+
continue;
|
|
547
|
+
}
|
|
548
|
+
// Step 2b: Merge array fields FIRST (union semantics)
|
|
549
|
+
const versionsForMetadata = [baseEntity, oursEntity, theirsEntity].filter((e) => e !== undefined);
|
|
550
|
+
const arrayFieldsMerged = mergeArrayFields(versionsForMetadata);
|
|
551
|
+
// Step 2c: Get all fields from any of the three versions (except array fields)
|
|
552
|
+
const allFields = new Set();
|
|
553
|
+
for (const entity of [baseEntity, oursEntity, theirsEntity]) {
|
|
554
|
+
if (entity) {
|
|
555
|
+
for (const key of Object.keys(entity)) {
|
|
556
|
+
// Skip array fields (already merged via mergeArrayFields)
|
|
557
|
+
if (key === 'relationships' || key === 'tags' || key === 'feedback')
|
|
558
|
+
continue;
|
|
559
|
+
allFields.add(key);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
// Step 2d: Perform field-level three-way merge for SCALAR fields only
|
|
564
|
+
// Multi-line text fields (content, description) will be handled by git merge-file
|
|
565
|
+
const fieldsMerged = { ...arrayFieldsMerged };
|
|
566
|
+
const scalarConflicts = [];
|
|
567
|
+
// Multi-line text fields that should go through git merge-file
|
|
568
|
+
const multiLineFields = new Set(['content', 'description']);
|
|
569
|
+
// updated_at always differs and causes spurious conflicts - extract latest value
|
|
570
|
+
const latestUpdatedAt = compareTimestamps(oursEntity?.updated_at, theirsEntity?.updated_at) > 0 ? oursEntity?.updated_at : theirsEntity?.updated_at;
|
|
571
|
+
for (const field of allFields) {
|
|
572
|
+
// Skip multi-line text fields - they'll be handled by git merge-file
|
|
573
|
+
if (multiLineFields.has(field)) {
|
|
574
|
+
continue;
|
|
575
|
+
}
|
|
576
|
+
// Skip updated_at - we'll add it back at the end
|
|
577
|
+
if (field === 'updated_at') {
|
|
578
|
+
continue;
|
|
579
|
+
}
|
|
580
|
+
const baseValue = baseEntity?.[field];
|
|
581
|
+
const oursValue = oursEntity?.[field];
|
|
582
|
+
const theirsValue = theirsEntity?.[field];
|
|
583
|
+
// Three-way merge logic for scalar fields:
|
|
584
|
+
// - If base == ours == theirs: use any value
|
|
585
|
+
// - If base == ours && base != theirs: use theirs (they changed it)
|
|
586
|
+
// - If base == theirs && base != ours: use ours (we changed it)
|
|
587
|
+
// - If base != ours && base != theirs && ours == theirs: use either (both made same change)
|
|
588
|
+
// - If base != ours && base != theirs && ours != theirs: conflict -> latest wins
|
|
589
|
+
if (baseValue === oursValue && baseValue === theirsValue) {
|
|
590
|
+
// No changes
|
|
591
|
+
fieldsMerged[field] = baseValue;
|
|
592
|
+
}
|
|
593
|
+
else if (baseValue === oursValue && baseValue !== theirsValue) {
|
|
594
|
+
// Only theirs changed
|
|
595
|
+
fieldsMerged[field] = theirsValue;
|
|
596
|
+
}
|
|
597
|
+
else if (baseValue === theirsValue && baseValue !== oursValue) {
|
|
598
|
+
// Only ours changed
|
|
599
|
+
fieldsMerged[field] = oursValue;
|
|
600
|
+
}
|
|
601
|
+
else if (oursValue === theirsValue) {
|
|
602
|
+
// Both made same change
|
|
603
|
+
fieldsMerged[field] = oursValue;
|
|
604
|
+
}
|
|
605
|
+
else {
|
|
606
|
+
// Conflict: both changed to different values -> latest wins
|
|
607
|
+
// When timestamps are identical, prefer ours for stability
|
|
608
|
+
const oursNewer = compareTimestamps(oursEntity?.updated_at, theirsEntity?.updated_at) >= 0;
|
|
609
|
+
fieldsMerged[field] = oursNewer ? oursValue : theirsValue;
|
|
610
|
+
scalarConflicts.push(field);
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
// Step 2e: FAST PATH - Skip expensive YAML merge if entity is unchanged
|
|
614
|
+
// Check if all multi-line text fields are identical across versions
|
|
615
|
+
const multiLineFieldsIdentical = Array.from(multiLineFields).every(field => {
|
|
616
|
+
const baseValue = baseEntity?.[field];
|
|
617
|
+
const oursValue = oursEntity?.[field];
|
|
618
|
+
const theirsValue = theirsEntity?.[field];
|
|
619
|
+
return baseValue === oursValue && oursValue === theirsValue;
|
|
620
|
+
});
|
|
621
|
+
let mergedEntity;
|
|
622
|
+
let hadYamlConflicts = false;
|
|
623
|
+
// If no scalar conflicts and multi-line fields are identical, skip YAML merge
|
|
624
|
+
if (scalarConflicts.length === 0 && multiLineFieldsIdentical) {
|
|
625
|
+
// Fast path: Entity unchanged, use any version (prefer ours)
|
|
626
|
+
mergedEntity = { ...oursEntity, ...fieldsMerged };
|
|
627
|
+
}
|
|
628
|
+
else {
|
|
629
|
+
// Slow path: Need YAML merge for multi-line fields or scalar conflicts exist
|
|
630
|
+
// For multi-line fields, keep original values for YAML conversion
|
|
631
|
+
// Git merge-file will handle the line-level merge
|
|
632
|
+
// Remove updated_at to avoid spurious conflicts in YAML
|
|
633
|
+
const versionsForYaml = {
|
|
634
|
+
base: baseEntity ? { ...baseEntity, ...fieldsMerged, updated_at: undefined } : undefined,
|
|
635
|
+
ours: oursEntity ? { ...oursEntity, ...fieldsMerged, updated_at: undefined } : undefined,
|
|
636
|
+
theirs: theirsEntity ? { ...theirsEntity, ...fieldsMerged, updated_at: undefined } : undefined,
|
|
637
|
+
};
|
|
638
|
+
// Step 2f: Convert to YAML and run git merge-file for line-level merging
|
|
639
|
+
// Pass original timestamps for conflict resolution (since we stripped updated_at from versions)
|
|
640
|
+
const yamlMergeResult = mergeYamlWithGit(versionsForYaml, {
|
|
641
|
+
ours: oursEntity?.updated_at,
|
|
642
|
+
theirs: theirsEntity?.updated_at,
|
|
643
|
+
});
|
|
644
|
+
hadYamlConflicts = yamlMergeResult.hadConflicts;
|
|
645
|
+
if (yamlMergeResult.success) {
|
|
646
|
+
mergedEntity = yamlMergeResult.entity;
|
|
647
|
+
}
|
|
648
|
+
else {
|
|
649
|
+
// Fatal error during merge - fallback to latest-wins for entire entity
|
|
650
|
+
// When timestamps are identical, prefer ours for stability
|
|
651
|
+
const oursNewer = compareTimestamps(oursEntity?.updated_at, theirsEntity?.updated_at) >= 0;
|
|
652
|
+
mergedEntity = (oursNewer ? versionsForYaml.ours : versionsForYaml.theirs);
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
// Add back the latest updated_at timestamp
|
|
656
|
+
mergedEntity.updated_at = latestUpdatedAt;
|
|
657
|
+
// Record conflicts if any
|
|
658
|
+
if (scalarConflicts.length > 0 || hadYamlConflicts) {
|
|
659
|
+
const conflictParts = [];
|
|
660
|
+
if (scalarConflicts.length > 0) {
|
|
661
|
+
conflictParts.push(`${scalarConflicts.length} scalar field conflicts (${scalarConflicts.join(', ')})`);
|
|
662
|
+
}
|
|
663
|
+
if (hadYamlConflicts) {
|
|
664
|
+
conflictParts.push('YAML conflict blocks (latest-wins per block)');
|
|
665
|
+
}
|
|
666
|
+
stats.conflicts.push({
|
|
667
|
+
type: "same-uuid-same-id",
|
|
668
|
+
uuid,
|
|
669
|
+
originalIds: [baseEntity?.id || oursEntity?.id || theirsEntity?.id || "unknown"],
|
|
670
|
+
resolvedIds: [mergedEntity.id || "unknown"],
|
|
671
|
+
action: `Resolved ${conflictParts.join(', ')}`,
|
|
672
|
+
});
|
|
673
|
+
}
|
|
674
|
+
mergedEntities.push(mergedEntity);
|
|
675
|
+
}
|
|
676
|
+
// Step 3: Handle ID collisions (hash conflicts)
|
|
677
|
+
const idCounts = new Map();
|
|
678
|
+
const finalResolved = [];
|
|
679
|
+
for (const entity of mergedEntities) {
|
|
680
|
+
const currentId = entity.id;
|
|
681
|
+
if (!idCounts.has(currentId)) {
|
|
682
|
+
// First entity with this ID
|
|
683
|
+
idCounts.set(currentId, 1);
|
|
684
|
+
finalResolved.push(entity);
|
|
685
|
+
}
|
|
686
|
+
else {
|
|
687
|
+
// ID collision - rename with suffix
|
|
688
|
+
const count = idCounts.get(currentId);
|
|
689
|
+
const newEntity = { ...entity };
|
|
690
|
+
const newId = `${currentId}.${count}`;
|
|
691
|
+
newEntity.id = newId;
|
|
692
|
+
idCounts.set(currentId, count + 1);
|
|
693
|
+
finalResolved.push(newEntity);
|
|
694
|
+
stats.conflicts.push({
|
|
695
|
+
type: "different-uuids",
|
|
696
|
+
uuid: entity.uuid,
|
|
697
|
+
originalIds: [currentId],
|
|
698
|
+
resolvedIds: [newId],
|
|
699
|
+
action: `Renamed ID to resolve hash collision (different UUIDs)`,
|
|
700
|
+
});
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
// Step 4: Sort by created_at (git-friendly)
|
|
704
|
+
finalResolved.sort((a, b) => {
|
|
705
|
+
const aDate = a.created_at || "";
|
|
706
|
+
const bDate = b.created_at || "";
|
|
707
|
+
if (aDate < bDate)
|
|
708
|
+
return -1;
|
|
709
|
+
if (aDate > bDate)
|
|
710
|
+
return 1;
|
|
711
|
+
return (a.id || "").localeCompare(b.id || "");
|
|
712
|
+
});
|
|
713
|
+
stats.totalOutput = finalResolved.length;
|
|
714
|
+
return { entities: finalResolved, stats };
|
|
300
715
|
}
|
|
301
716
|
//# sourceMappingURL=merge-resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-resolver.js","sourceRoot":"","sources":["../src/merge-resolver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"merge-resolver.js","sourceRoot":"","sources":["../src/merge-resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/watcher.d.ts
CHANGED
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type Database from "better-sqlite3";
|
|
6
6
|
import type { EntitySyncEvent, FileChangeEvent } from "@sudocode-ai/types/events";
|
|
7
|
+
/**
|
|
8
|
+
* Parse a timestamp string to milliseconds, handling both ISO and SQLite formats
|
|
9
|
+
* SQLite's CURRENT_TIMESTAMP returns 'YYYY-MM-DD HH:MM:SS' (no timezone)
|
|
10
|
+
* which JavaScript incorrectly parses as local time. We need to treat it as UTC.
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseTimestampAsUTC(timestamp: string): number;
|
|
7
13
|
export interface WatcherOptions {
|
|
8
14
|
/**
|
|
9
15
|
* Database instance
|
package/dist/watcher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAkB3C,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAkB3C,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAuClF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAiCD,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,MAAM,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc,CAszBpE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CA+BnE"}
|
package/dist/watcher.js
CHANGED
|
@@ -46,6 +46,20 @@ class AsyncMutex {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
const processingMutex = new AsyncMutex();
|
|
49
|
+
/**
|
|
50
|
+
* Parse a timestamp string to milliseconds, handling both ISO and SQLite formats
|
|
51
|
+
* SQLite's CURRENT_TIMESTAMP returns 'YYYY-MM-DD HH:MM:SS' (no timezone)
|
|
52
|
+
* which JavaScript incorrectly parses as local time. We need to treat it as UTC.
|
|
53
|
+
*/
|
|
54
|
+
export function parseTimestampAsUTC(timestamp) {
|
|
55
|
+
// If it's already ISO format with Z, parse directly
|
|
56
|
+
if (timestamp.includes('T') && timestamp.endsWith('Z')) {
|
|
57
|
+
return new Date(timestamp).getTime();
|
|
58
|
+
}
|
|
59
|
+
// SQLite format: "YYYY-MM-DD HH:MM:SS" - convert to ISO and append Z for UTC
|
|
60
|
+
const isoFormat = timestamp.replace(' ', 'T') + 'Z';
|
|
61
|
+
return new Date(isoFormat).getTime();
|
|
62
|
+
}
|
|
49
63
|
/**
|
|
50
64
|
* Compute SHA256 hash of file content for change detection
|
|
51
65
|
*/
|
|
@@ -361,7 +375,7 @@ export function startWatcher(options) {
|
|
|
361
375
|
else {
|
|
362
376
|
const fileStat = fs.statSync(filePath);
|
|
363
377
|
const fileTime = fileStat.mtimeMs;
|
|
364
|
-
const dbTime =
|
|
378
|
+
const dbTime = parseTimestampAsUTC(dbEntity.updated_at);
|
|
365
379
|
if (dbTime > fileTime) {
|
|
366
380
|
// DB is newer than file - sync DB → markdown
|
|
367
381
|
syncDirection = "db-to-markdown";
|