@nahisaho/yata-global 1.6.6

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.
Files changed (45) hide show
  1. package/dist/api-client.d.ts +71 -0
  2. package/dist/api-client.d.ts.map +1 -0
  3. package/dist/api-client.js +165 -0
  4. package/dist/api-client.js.map +1 -0
  5. package/dist/cache-manager.d.ts +122 -0
  6. package/dist/cache-manager.d.ts.map +1 -0
  7. package/dist/cache-manager.js +376 -0
  8. package/dist/cache-manager.js.map +1 -0
  9. package/dist/index.d.ts +138 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +548 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/kgpr/index.d.ts +12 -0
  14. package/dist/kgpr/index.d.ts.map +1 -0
  15. package/dist/kgpr/index.js +12 -0
  16. package/dist/kgpr/index.js.map +1 -0
  17. package/dist/kgpr/kgpr-manager.d.ts +162 -0
  18. package/dist/kgpr/kgpr-manager.d.ts.map +1 -0
  19. package/dist/kgpr/kgpr-manager.js +465 -0
  20. package/dist/kgpr/kgpr-manager.js.map +1 -0
  21. package/dist/kgpr/merge-engine.d.ts +269 -0
  22. package/dist/kgpr/merge-engine.d.ts.map +1 -0
  23. package/dist/kgpr/merge-engine.js +451 -0
  24. package/dist/kgpr/merge-engine.js.map +1 -0
  25. package/dist/kgpr/notification-service.d.ts +227 -0
  26. package/dist/kgpr/notification-service.d.ts.map +1 -0
  27. package/dist/kgpr/notification-service.js +440 -0
  28. package/dist/kgpr/notification-service.js.map +1 -0
  29. package/dist/kgpr/privacy-filter.d.ts +61 -0
  30. package/dist/kgpr/privacy-filter.d.ts.map +1 -0
  31. package/dist/kgpr/privacy-filter.js +191 -0
  32. package/dist/kgpr/privacy-filter.js.map +1 -0
  33. package/dist/kgpr/types.d.ts +303 -0
  34. package/dist/kgpr/types.d.ts.map +1 -0
  35. package/dist/kgpr/types.js +40 -0
  36. package/dist/kgpr/types.js.map +1 -0
  37. package/dist/sync-engine.d.ts +104 -0
  38. package/dist/sync-engine.d.ts.map +1 -0
  39. package/dist/sync-engine.js +275 -0
  40. package/dist/sync-engine.js.map +1 -0
  41. package/dist/types.d.ts +353 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +19 -0
  44. package/dist/types.js.map +1 -0
  45. package/package.json +59 -0
@@ -0,0 +1,451 @@
1
+ /**
2
+ * Knowledge Graph Pull Request (KGPR) - Merge Engine
3
+ *
4
+ * Handles conflict detection, diff application, and merge audit logging
5
+ *
6
+ * @packageDocumentation
7
+ * @module @nahisaho/yata-global/kgpr
8
+ *
9
+ * @see REQ-KGPR-004
10
+ * @see TSK-KGPR-006
11
+ */
12
+ import { EventEmitter } from 'events';
13
+ /**
14
+ * Merge Engine
15
+ *
16
+ * Handles conflict detection, diff application, and merge audit logging
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const engine = new MergeEngine({ globalKG });
21
+ * const conflicts = await engine.checkConflicts(kgpr.diff);
22
+ * if (conflicts.length === 0) {
23
+ * const result = await engine.merge(kgpr);
24
+ * }
25
+ * ```
26
+ */
27
+ export class MergeEngine extends EventEmitter {
28
+ globalKG = null;
29
+ auditLogs = [];
30
+ conflictIdCounter = 0;
31
+ constructor(options = {}) {
32
+ super();
33
+ this.globalKG = options.globalKG ?? null;
34
+ }
35
+ /**
36
+ * Connect to global knowledge graph
37
+ */
38
+ connectGlobalKG(globalKG) {
39
+ this.globalKG = globalKG;
40
+ }
41
+ /**
42
+ * Generate unique conflict ID
43
+ */
44
+ generateConflictId() {
45
+ return `CONFLICT-${++this.conflictIdCounter}`;
46
+ }
47
+ /**
48
+ * Generate unique audit log ID
49
+ */
50
+ generateAuditLogId() {
51
+ const timestamp = Date.now().toString(36);
52
+ const random = Math.random().toString(36).substring(2, 6);
53
+ return `AUDIT-${timestamp}-${random}`;
54
+ }
55
+ // ============================================================================
56
+ // Conflict Detection
57
+ // ============================================================================
58
+ /**
59
+ * Check for conflicts in a diff
60
+ */
61
+ async checkConflicts(diff) {
62
+ const conflicts = [];
63
+ if (!this.globalKG) {
64
+ // No global KG connected, no conflicts possible
65
+ return conflicts;
66
+ }
67
+ // Check entity additions
68
+ for (const entity of diff.entities.added) {
69
+ const existing = await this.globalKG.getEntity(entity.name, entity.namespace);
70
+ if (existing) {
71
+ conflicts.push({
72
+ id: this.generateConflictId(),
73
+ type: 'entity_exists',
74
+ severity: 'error',
75
+ message: `Entity '${entity.name}' already exists in namespace '${entity.namespace}'`,
76
+ localId: entity.localId,
77
+ globalId: existing.id,
78
+ name: entity.name,
79
+ namespace: entity.namespace,
80
+ itemType: 'entity',
81
+ localValue: entity.metadata,
82
+ globalValue: existing.metadata,
83
+ suggestedResolution: 'rename',
84
+ });
85
+ }
86
+ }
87
+ // Check entity updates
88
+ for (const entity of diff.entities.updated) {
89
+ const existing = await this.globalKG.getEntity(entity.name, entity.namespace);
90
+ if (!existing) {
91
+ conflicts.push({
92
+ id: this.generateConflictId(),
93
+ type: 'entity_deleted',
94
+ severity: 'error',
95
+ message: `Entity '${entity.name}' no longer exists in namespace '${entity.namespace}'`,
96
+ localId: entity.localId,
97
+ name: entity.name,
98
+ namespace: entity.namespace,
99
+ itemType: 'entity',
100
+ localValue: entity.metadata,
101
+ suggestedResolution: 'skip',
102
+ });
103
+ }
104
+ }
105
+ // Check entity deletions
106
+ for (const entity of diff.entities.deleted) {
107
+ const existing = await this.globalKG.getEntity(entity.name, entity.namespace);
108
+ if (!existing) {
109
+ conflicts.push({
110
+ id: this.generateConflictId(),
111
+ type: 'entity_deleted',
112
+ severity: 'warning',
113
+ message: `Entity '${entity.name}' was already deleted from namespace '${entity.namespace}'`,
114
+ localId: entity.localId,
115
+ name: entity.name,
116
+ namespace: entity.namespace,
117
+ itemType: 'entity',
118
+ suggestedResolution: 'skip',
119
+ });
120
+ }
121
+ }
122
+ // Check relationship additions
123
+ for (const rel of diff.relationships.added) {
124
+ // Check if relationship already exists
125
+ const exists = await this.globalKG.relationshipExists(rel.sourceName, rel.sourceNamespace, rel.targetName, rel.targetNamespace, rel.relationshipType);
126
+ if (exists) {
127
+ conflicts.push({
128
+ id: this.generateConflictId(),
129
+ type: 'relationship_exists',
130
+ severity: 'warning',
131
+ message: `Relationship '${rel.sourceName} --[${rel.relationshipType}]--> ${rel.targetName}' already exists`,
132
+ localId: rel.localId ?? `${rel.sourceName}-${rel.targetName}`,
133
+ name: `${rel.sourceName} -> ${rel.targetName}`,
134
+ namespace: rel.sourceNamespace,
135
+ itemType: 'relationship',
136
+ localValue: rel.metadata,
137
+ suggestedResolution: 'skip',
138
+ });
139
+ }
140
+ // Check if source entity exists
141
+ const sourceExists = await this.globalKG.entityExists(rel.sourceName, rel.sourceNamespace);
142
+ if (!sourceExists) {
143
+ conflicts.push({
144
+ id: this.generateConflictId(),
145
+ type: 'relationship_broken',
146
+ severity: 'error',
147
+ message: `Source entity '${rel.sourceName}' does not exist in namespace '${rel.sourceNamespace}'`,
148
+ localId: rel.localId ?? `${rel.sourceName}-${rel.targetName}`,
149
+ name: rel.sourceName,
150
+ namespace: rel.sourceNamespace,
151
+ itemType: 'relationship',
152
+ suggestedResolution: 'skip',
153
+ });
154
+ }
155
+ // Check if target entity exists
156
+ const targetExists = await this.globalKG.entityExists(rel.targetName, rel.targetNamespace);
157
+ if (!targetExists) {
158
+ conflicts.push({
159
+ id: this.generateConflictId(),
160
+ type: 'relationship_broken',
161
+ severity: 'error',
162
+ message: `Target entity '${rel.targetName}' does not exist in namespace '${rel.targetNamespace}'`,
163
+ localId: rel.localId ?? `${rel.sourceName}-${rel.targetName}`,
164
+ name: rel.targetName,
165
+ namespace: rel.targetNamespace,
166
+ itemType: 'relationship',
167
+ suggestedResolution: 'skip',
168
+ });
169
+ }
170
+ // Check for circular dependencies
171
+ if (this.globalKG.wouldCreateCycle) {
172
+ const wouldCycle = await this.globalKG.wouldCreateCycle(rel.sourceName, rel.sourceNamespace, rel.targetName, rel.targetNamespace, rel.relationshipType);
173
+ if (wouldCycle) {
174
+ conflicts.push({
175
+ id: this.generateConflictId(),
176
+ type: 'circular_dependency',
177
+ severity: 'error',
178
+ message: `Adding relationship would create circular dependency: ${rel.sourceName} -> ${rel.targetName}`,
179
+ localId: rel.localId ?? `${rel.sourceName}-${rel.targetName}`,
180
+ name: `${rel.sourceName} -> ${rel.targetName}`,
181
+ namespace: rel.sourceNamespace,
182
+ itemType: 'relationship',
183
+ suggestedResolution: 'skip',
184
+ });
185
+ }
186
+ }
187
+ }
188
+ // Emit conflict events
189
+ for (const conflict of conflicts) {
190
+ this.emit('merge:conflict', { conflict });
191
+ }
192
+ return conflicts;
193
+ }
194
+ // ============================================================================
195
+ // Merge Operations
196
+ // ============================================================================
197
+ /**
198
+ * Merge a KGPR into the global knowledge graph
199
+ */
200
+ async merge(kgpr, options = {}) {
201
+ const startTime = Date.now();
202
+ const { conflictStrategy = 'fail', resolutions = new Map(), dryRun = false, mergerId = 'system', mergerName = 'System', } = options;
203
+ this.emit('merge:started', { kgprId: kgpr.id });
204
+ // Check conflicts
205
+ this.emit('merge:progress', { phase: 'conflict_check', progress: 0, total: 1 });
206
+ const conflicts = await this.checkConflicts(kgpr.diff);
207
+ this.emit('merge:progress', { phase: 'conflict_check', progress: 1, total: 1 });
208
+ // Handle conflicts based on strategy
209
+ const errorConflicts = conflicts.filter((c) => c.severity === 'error');
210
+ if (errorConflicts.length > 0 && conflictStrategy === 'fail') {
211
+ const result = {
212
+ success: false,
213
+ kgprId: kgpr.id,
214
+ conflicts,
215
+ applied: {
216
+ entitiesAdded: 0,
217
+ entitiesUpdated: 0,
218
+ entitiesDeleted: 0,
219
+ relationshipsAdded: 0,
220
+ relationshipsUpdated: 0,
221
+ relationshipsDeleted: 0,
222
+ },
223
+ skipped: { entities: [], relationships: [] },
224
+ auditLog: this.createAuditLog(kgpr, 'conflict_check', 'failed', {
225
+ changes: {
226
+ entitiesAdded: [],
227
+ entitiesUpdated: [],
228
+ entitiesDeleted: [],
229
+ relationshipsAdded: [],
230
+ relationshipsUpdated: [],
231
+ relationshipsDeleted: [],
232
+ },
233
+ conflicts,
234
+ resolutions: [],
235
+ durationMs: Date.now() - startTime,
236
+ mergerId,
237
+ mergerName,
238
+ }),
239
+ error: `${errorConflicts.length} blocking conflict(s) found`,
240
+ };
241
+ this.emit('merge:failed', { kgprId: kgpr.id, error: result.error });
242
+ return result;
243
+ }
244
+ if (dryRun) {
245
+ // Dry run - just return what would happen
246
+ const result = {
247
+ success: true,
248
+ kgprId: kgpr.id,
249
+ conflicts,
250
+ applied: {
251
+ entitiesAdded: kgpr.diff.entities.added.length,
252
+ entitiesUpdated: kgpr.diff.entities.updated.length,
253
+ entitiesDeleted: kgpr.diff.entities.deleted.length,
254
+ relationshipsAdded: kgpr.diff.relationships.added.length,
255
+ relationshipsUpdated: kgpr.diff.relationships.updated.length,
256
+ relationshipsDeleted: kgpr.diff.relationships.deleted.length,
257
+ },
258
+ skipped: { entities: [], relationships: [] },
259
+ auditLog: this.createAuditLog(kgpr, 'dry_run', 'success', {
260
+ changes: {
261
+ entitiesAdded: kgpr.diff.entities.added,
262
+ entitiesUpdated: kgpr.diff.entities.updated,
263
+ entitiesDeleted: kgpr.diff.entities.deleted,
264
+ relationshipsAdded: kgpr.diff.relationships.added,
265
+ relationshipsUpdated: kgpr.diff.relationships.updated,
266
+ relationshipsDeleted: kgpr.diff.relationships.deleted,
267
+ },
268
+ conflicts,
269
+ resolutions: [],
270
+ durationMs: Date.now() - startTime,
271
+ mergerId,
272
+ mergerName,
273
+ }),
274
+ };
275
+ this.emit('merge:completed', { result });
276
+ return result;
277
+ }
278
+ // Actually apply the diff
279
+ return this.applyDiff(kgpr, conflicts, resolutions, conflictStrategy, startTime, mergerId, mergerName);
280
+ }
281
+ /**
282
+ * Apply diff to global KG
283
+ */
284
+ async applyDiff(kgpr, conflicts, resolutions, conflictStrategy, startTime, mergerId, mergerName) {
285
+ if (!this.globalKG) {
286
+ throw new Error('Global knowledge graph not connected');
287
+ }
288
+ const applied = {
289
+ entitiesAdded: 0,
290
+ entitiesUpdated: 0,
291
+ entitiesDeleted: 0,
292
+ relationshipsAdded: 0,
293
+ relationshipsUpdated: 0,
294
+ relationshipsDeleted: 0,
295
+ };
296
+ const skipped = { entities: [], relationships: [] };
297
+ const appliedChanges = {
298
+ entitiesAdded: [],
299
+ entitiesUpdated: [],
300
+ entitiesDeleted: [],
301
+ relationshipsAdded: [],
302
+ relationshipsUpdated: [],
303
+ relationshipsDeleted: [],
304
+ };
305
+ const appliedResolutions = [];
306
+ // Build conflict lookup
307
+ const conflictsByLocalId = new Map();
308
+ for (const conflict of conflicts) {
309
+ conflictsByLocalId.set(conflict.localId, conflict);
310
+ }
311
+ // Apply entity additions
312
+ const totalOps = kgpr.diff.entities.added.length +
313
+ kgpr.diff.entities.updated.length +
314
+ kgpr.diff.entities.deleted.length +
315
+ kgpr.diff.relationships.added.length +
316
+ kgpr.diff.relationships.deleted.length;
317
+ let completedOps = 0;
318
+ for (const entity of kgpr.diff.entities.added) {
319
+ this.emit('merge:progress', { phase: 'apply', progress: ++completedOps, total: totalOps });
320
+ const conflict = conflictsByLocalId.get(entity.localId);
321
+ if (conflict) {
322
+ const resolution = resolutions.get(conflict.id) ?? conflict.suggestedResolution ?? 'skip';
323
+ appliedResolutions.push({ conflictId: conflict.id, resolution });
324
+ if (resolution === 'skip' || (conflictStrategy === 'skip_conflicts' && conflict.severity === 'error')) {
325
+ skipped.entities.push(entity.localId);
326
+ continue;
327
+ }
328
+ }
329
+ await this.globalKG.addEntity({
330
+ name: entity.name,
331
+ type: entity.entityType,
332
+ namespace: entity.namespace,
333
+ metadata: entity.metadata,
334
+ });
335
+ applied.entitiesAdded++;
336
+ appliedChanges.entitiesAdded.push(entity);
337
+ }
338
+ // Apply entity updates
339
+ for (const entity of kgpr.diff.entities.updated) {
340
+ this.emit('merge:progress', { phase: 'apply', progress: ++completedOps, total: totalOps });
341
+ const conflict = conflictsByLocalId.get(entity.localId);
342
+ if (conflict && conflict.severity === 'error') {
343
+ skipped.entities.push(entity.localId);
344
+ continue;
345
+ }
346
+ await this.globalKG.updateEntity(entity.name, entity.namespace, entity.metadata ?? {});
347
+ applied.entitiesUpdated++;
348
+ appliedChanges.entitiesUpdated.push(entity);
349
+ }
350
+ // Apply entity deletions
351
+ for (const entity of kgpr.diff.entities.deleted) {
352
+ this.emit('merge:progress', { phase: 'apply', progress: ++completedOps, total: totalOps });
353
+ const conflict = conflictsByLocalId.get(entity.localId);
354
+ if (conflict) {
355
+ skipped.entities.push(entity.localId);
356
+ continue;
357
+ }
358
+ await this.globalKG.deleteEntity(entity.name, entity.namespace);
359
+ applied.entitiesDeleted++;
360
+ appliedChanges.entitiesDeleted.push(entity);
361
+ }
362
+ // Apply relationship additions
363
+ for (const rel of kgpr.diff.relationships.added) {
364
+ this.emit('merge:progress', { phase: 'apply', progress: ++completedOps, total: totalOps });
365
+ const relId = rel.localId ?? `${rel.sourceName}-${rel.targetName}`;
366
+ const conflict = conflictsByLocalId.get(relId);
367
+ if (conflict && conflict.severity === 'error') {
368
+ skipped.relationships.push(relId);
369
+ continue;
370
+ }
371
+ await this.globalKG.addRelationship({
372
+ sourceName: rel.sourceName,
373
+ sourceNamespace: rel.sourceNamespace,
374
+ targetName: rel.targetName,
375
+ targetNamespace: rel.targetNamespace,
376
+ type: rel.relationshipType,
377
+ metadata: rel.metadata,
378
+ });
379
+ applied.relationshipsAdded++;
380
+ appliedChanges.relationshipsAdded.push(rel);
381
+ }
382
+ // Apply relationship deletions
383
+ for (const rel of kgpr.diff.relationships.deleted) {
384
+ this.emit('merge:progress', { phase: 'apply', progress: ++completedOps, total: totalOps });
385
+ await this.globalKG.deleteRelationship(rel.sourceName, rel.sourceNamespace, rel.targetName, rel.targetNamespace, rel.relationshipType);
386
+ applied.relationshipsDeleted++;
387
+ appliedChanges.relationshipsDeleted.push(rel);
388
+ }
389
+ const result = {
390
+ success: true,
391
+ kgprId: kgpr.id,
392
+ conflicts,
393
+ applied,
394
+ skipped,
395
+ auditLog: this.createAuditLog(kgpr, 'merge', 'success', {
396
+ changes: appliedChanges,
397
+ conflicts,
398
+ resolutions: appliedResolutions,
399
+ durationMs: Date.now() - startTime,
400
+ mergerId,
401
+ mergerName,
402
+ }),
403
+ };
404
+ this.emit('merge:completed', { result });
405
+ return result;
406
+ }
407
+ // ============================================================================
408
+ // Audit Logging
409
+ // ============================================================================
410
+ /**
411
+ * Create an audit log entry
412
+ */
413
+ createAuditLog(kgpr, operation, result, data) {
414
+ const log = {
415
+ id: this.generateAuditLogId(),
416
+ kgprId: kgpr.id,
417
+ kgprTitle: kgpr.title,
418
+ kgprAuthor: kgpr.authorName,
419
+ mergerId: data.mergerId,
420
+ mergerName: data.mergerName,
421
+ operation,
422
+ result,
423
+ timestamp: new Date(),
424
+ changes: data.changes,
425
+ conflicts: data.conflicts,
426
+ resolutions: data.resolutions,
427
+ durationMs: data.durationMs,
428
+ };
429
+ this.auditLogs.push(log);
430
+ return log;
431
+ }
432
+ /**
433
+ * Get all audit logs
434
+ */
435
+ getAuditLogs() {
436
+ return [...this.auditLogs];
437
+ }
438
+ /**
439
+ * Get audit logs for a specific KGPR
440
+ */
441
+ getAuditLogsForKGPR(kgprId) {
442
+ return this.auditLogs.filter((log) => log.kgprId === kgprId);
443
+ }
444
+ /**
445
+ * Clear audit logs
446
+ */
447
+ clearAuditLogs() {
448
+ this.auditLogs = [];
449
+ }
450
+ }
451
+ //# sourceMappingURL=merge-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-engine.js","sourceRoot":"","sources":["../../src/kgpr/merge-engine.ts"],"names":[],"mappings":"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"}