cmp-standards 2.8.1 → 3.1.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.
Files changed (119) hide show
  1. package/dist/analytics/CrossProjectAnalytics.d.ts +128 -0
  2. package/dist/analytics/CrossProjectAnalytics.d.ts.map +1 -0
  3. package/dist/analytics/CrossProjectAnalytics.js +434 -0
  4. package/dist/analytics/CrossProjectAnalytics.js.map +1 -0
  5. package/dist/analytics/index.d.ts +1 -0
  6. package/dist/analytics/index.d.ts.map +1 -1
  7. package/dist/analytics/index.js +2 -0
  8. package/dist/analytics/index.js.map +1 -1
  9. package/dist/cache/EmbeddingCache.d.ts +6 -4
  10. package/dist/cache/EmbeddingCache.d.ts.map +1 -1
  11. package/dist/cache/EmbeddingCache.js +28 -17
  12. package/dist/cache/EmbeddingCache.js.map +1 -1
  13. package/dist/cli/index.js +658 -141
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/ui.d.ts +134 -0
  16. package/dist/cli/ui.d.ts.map +1 -0
  17. package/dist/cli/ui.js +311 -0
  18. package/dist/cli/ui.js.map +1 -0
  19. package/dist/dashboard/tokens.d.ts +228 -0
  20. package/dist/dashboard/tokens.d.ts.map +1 -0
  21. package/dist/dashboard/tokens.js +450 -0
  22. package/dist/dashboard/tokens.js.map +1 -0
  23. package/dist/dashboard/ui.d.ts +3 -0
  24. package/dist/dashboard/ui.d.ts.map +1 -1
  25. package/dist/dashboard/ui.js +95 -61
  26. package/dist/dashboard/ui.js.map +1 -1
  27. package/dist/db/cloud.d.ts +11 -0
  28. package/dist/db/cloud.d.ts.map +1 -1
  29. package/dist/db/cloud.js +49 -1
  30. package/dist/db/cloud.js.map +1 -1
  31. package/dist/db/migrations.d.ts +1 -0
  32. package/dist/db/migrations.d.ts.map +1 -1
  33. package/dist/db/migrations.js +109 -0
  34. package/dist/db/migrations.js.map +1 -1
  35. package/dist/db/turso-client.d.ts.map +1 -1
  36. package/dist/db/turso-client.js +3 -0
  37. package/dist/db/turso-client.js.map +1 -1
  38. package/dist/events/EventBus.d.ts +21 -0
  39. package/dist/events/EventBus.d.ts.map +1 -1
  40. package/dist/events/EventBus.js +81 -30
  41. package/dist/events/EventBus.js.map +1 -1
  42. package/dist/events/index.d.ts +1 -1
  43. package/dist/events/index.d.ts.map +1 -1
  44. package/dist/events/index.js +1 -1
  45. package/dist/events/index.js.map +1 -1
  46. package/dist/hooks/index.d.ts +1 -0
  47. package/dist/hooks/index.d.ts.map +1 -1
  48. package/dist/hooks/index.js +2 -0
  49. package/dist/hooks/index.js.map +1 -1
  50. package/dist/hooks/startup-verify.d.ts +31 -0
  51. package/dist/hooks/startup-verify.d.ts.map +1 -0
  52. package/dist/hooks/startup-verify.js +360 -0
  53. package/dist/hooks/startup-verify.js.map +1 -0
  54. package/dist/plugins/PluginManager.d.ts +160 -0
  55. package/dist/plugins/PluginManager.d.ts.map +1 -0
  56. package/dist/plugins/PluginManager.js +417 -0
  57. package/dist/plugins/PluginManager.js.map +1 -0
  58. package/dist/plugins/index.d.ts +7 -0
  59. package/dist/plugins/index.d.ts.map +1 -0
  60. package/dist/plugins/index.js +7 -0
  61. package/dist/plugins/index.js.map +1 -0
  62. package/dist/schema/expert-types.d.ts +2 -2
  63. package/dist/services/AuditLog.d.ts +205 -0
  64. package/dist/services/AuditLog.d.ts.map +1 -0
  65. package/dist/services/AuditLog.js +352 -0
  66. package/dist/services/AuditLog.js.map +1 -0
  67. package/dist/services/FeedbackCollector.d.ts +8 -0
  68. package/dist/services/FeedbackCollector.d.ts.map +1 -1
  69. package/dist/services/FeedbackCollector.js +19 -2
  70. package/dist/services/FeedbackCollector.js.map +1 -1
  71. package/dist/services/GitIntegration.d.ts +140 -0
  72. package/dist/services/GitIntegration.d.ts.map +1 -0
  73. package/dist/services/GitIntegration.js +423 -0
  74. package/dist/services/GitIntegration.js.map +1 -0
  75. package/dist/services/HookVerifier.d.ts +95 -0
  76. package/dist/services/HookVerifier.d.ts.map +1 -0
  77. package/dist/services/HookVerifier.js +493 -0
  78. package/dist/services/HookVerifier.js.map +1 -0
  79. package/dist/services/MemoryRelationshipService.d.ts +187 -0
  80. package/dist/services/MemoryRelationshipService.d.ts.map +1 -0
  81. package/dist/services/MemoryRelationshipService.js +375 -0
  82. package/dist/services/MemoryRelationshipService.js.map +1 -0
  83. package/dist/services/MemoryVersioning.d.ts +108 -0
  84. package/dist/services/MemoryVersioning.d.ts.map +1 -0
  85. package/dist/services/MemoryVersioning.js +281 -0
  86. package/dist/services/MemoryVersioning.js.map +1 -0
  87. package/dist/services/context-injector.d.ts +8 -0
  88. package/dist/services/context-injector.d.ts.map +1 -1
  89. package/dist/services/context-injector.js +19 -2
  90. package/dist/services/context-injector.js.map +1 -1
  91. package/dist/services/index.d.ts +5 -0
  92. package/dist/services/index.d.ts.map +1 -1
  93. package/dist/services/index.js +7 -0
  94. package/dist/services/index.js.map +1 -1
  95. package/dist/services/memory-router.d.ts +8 -0
  96. package/dist/services/memory-router.d.ts.map +1 -1
  97. package/dist/services/memory-router.js +19 -2
  98. package/dist/services/memory-router.js.map +1 -1
  99. package/dist/services/pattern-tracker.d.ts +13 -0
  100. package/dist/services/pattern-tracker.d.ts.map +1 -1
  101. package/dist/services/pattern-tracker.js +33 -3
  102. package/dist/services/pattern-tracker.js.map +1 -1
  103. package/dist/services/semantic-search.d.ts +12 -0
  104. package/dist/services/semantic-search.d.ts.map +1 -1
  105. package/dist/services/semantic-search.js +93 -17
  106. package/dist/services/semantic-search.js.map +1 -1
  107. package/dist/testing/index.d.ts +148 -0
  108. package/dist/testing/index.d.ts.map +1 -0
  109. package/dist/testing/index.js +370 -0
  110. package/dist/testing/index.js.map +1 -0
  111. package/dist/types/index.d.ts +1 -0
  112. package/dist/types/index.d.ts.map +1 -1
  113. package/dist/types/index.js +1 -0
  114. package/dist/types/index.js.map +1 -1
  115. package/dist/utils/resilience.d.ts +256 -0
  116. package/dist/utils/resilience.d.ts.map +1 -0
  117. package/dist/utils/resilience.js +499 -0
  118. package/dist/utils/resilience.js.map +1 -0
  119. package/package.json +12 -1
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Memory Relationship Service
3
+ *
4
+ * Tracks and manages relationships between memory items:
5
+ * - related_to: General relationship
6
+ * - derived_from: Source/origin relationship
7
+ * - supersedes: Replacement relationship
8
+ * - references: Citation relationship
9
+ * - depends_on: Dependency relationship
10
+ *
11
+ * @version 3.1.0
12
+ */
13
+ /**
14
+ * Relationship types between memories
15
+ */
16
+ export type RelationshipType = 'related_to' | 'derived_from' | 'supersedes' | 'references' | 'depends_on' | 'parent_of' | 'child_of' | 'blocks' | 'blocked_by';
17
+ /**
18
+ * A relationship between two memories
19
+ */
20
+ export interface MemoryRelationship {
21
+ id: string;
22
+ sourceId: string;
23
+ targetId: string;
24
+ type: RelationshipType;
25
+ metadata?: Record<string, unknown>;
26
+ createdAt: Date;
27
+ createdBy?: string;
28
+ }
29
+ /**
30
+ * Configuration for the relationship service
31
+ */
32
+ export interface RelationshipServiceConfig {
33
+ /** Enable debug logging */
34
+ debug?: boolean;
35
+ /** Maximum relationships per memory */
36
+ maxRelationshipsPerItem?: number;
37
+ /** Store backend (in-memory for now) */
38
+ store?: RelationshipStore;
39
+ }
40
+ /**
41
+ * Interface for relationship storage backends
42
+ */
43
+ export interface RelationshipStore {
44
+ save(relationship: MemoryRelationship): Promise<void>;
45
+ delete(id: string): Promise<boolean>;
46
+ findBySource(sourceId: string): Promise<MemoryRelationship[]>;
47
+ findByTarget(targetId: string): Promise<MemoryRelationship[]>;
48
+ findByType(type: RelationshipType): Promise<MemoryRelationship[]>;
49
+ findBetween(sourceId: string, targetId: string): Promise<MemoryRelationship[]>;
50
+ getAll(): Promise<MemoryRelationship[]>;
51
+ clear(): Promise<void>;
52
+ }
53
+ /**
54
+ * Error thrown when relationship operations fail
55
+ */
56
+ export declare class RelationshipError extends Error {
57
+ readonly code: 'MAX_RELATIONSHIPS' | 'DUPLICATE' | 'NOT_FOUND' | 'INVALID_SELF_REFERENCE' | 'CYCLE_DETECTED';
58
+ constructor(message: string, code: 'MAX_RELATIONSHIPS' | 'DUPLICATE' | 'NOT_FOUND' | 'INVALID_SELF_REFERENCE' | 'CYCLE_DETECTED');
59
+ }
60
+ /**
61
+ * Simple in-memory store for relationships
62
+ */
63
+ export declare class InMemoryRelationshipStore implements RelationshipStore {
64
+ private relationships;
65
+ save(relationship: MemoryRelationship): Promise<void>;
66
+ delete(id: string): Promise<boolean>;
67
+ findBySource(sourceId: string): Promise<MemoryRelationship[]>;
68
+ findByTarget(targetId: string): Promise<MemoryRelationship[]>;
69
+ findByType(type: RelationshipType): Promise<MemoryRelationship[]>;
70
+ findBetween(sourceId: string, targetId: string): Promise<MemoryRelationship[]>;
71
+ getAll(): Promise<MemoryRelationship[]>;
72
+ clear(): Promise<void>;
73
+ }
74
+ /**
75
+ * Service for managing relationships between memory items
76
+ */
77
+ export declare class MemoryRelationshipService {
78
+ private config;
79
+ private store;
80
+ constructor(config?: RelationshipServiceConfig);
81
+ /**
82
+ * Create a relationship between two memories
83
+ */
84
+ createRelationship(sourceId: string, targetId: string, type: RelationshipType, options?: {
85
+ metadata?: Record<string, unknown>;
86
+ createdBy?: string;
87
+ }): Promise<MemoryRelationship>;
88
+ /**
89
+ * Remove a relationship by ID
90
+ */
91
+ removeRelationship(id: string): Promise<boolean>;
92
+ /**
93
+ * Remove all relationships between two items
94
+ */
95
+ removeRelationshipsBetween(sourceId: string, targetId: string): Promise<number>;
96
+ /**
97
+ * Get all relationships for a memory item (both as source and target)
98
+ */
99
+ getRelationshipsFor(itemId: string): Promise<{
100
+ outgoing: MemoryRelationship[];
101
+ incoming: MemoryRelationship[];
102
+ }>;
103
+ /**
104
+ * Get related items by relationship type
105
+ */
106
+ getRelatedItems(itemId: string, type: RelationshipType, direction?: 'outgoing' | 'incoming' | 'both'): Promise<string[]>;
107
+ /**
108
+ * Find all descendants (transitive closure) of an item
109
+ * Useful for hierarchical relationships
110
+ */
111
+ getDescendants(itemId: string, type?: RelationshipType, maxDepth?: number): Promise<Map<string, number>>;
112
+ /**
113
+ * Find all ancestors (inverse transitive closure) of an item
114
+ */
115
+ getAncestors(itemId: string, type?: RelationshipType, maxDepth?: number): Promise<Map<string, number>>;
116
+ /**
117
+ * Check if a relationship exists
118
+ */
119
+ hasRelationship(sourceId: string, targetId: string, type?: RelationshipType): Promise<boolean>;
120
+ /**
121
+ * Get all relationships of a specific type
122
+ */
123
+ getRelationshipsByType(type: RelationshipType): Promise<MemoryRelationship[]>;
124
+ /**
125
+ * Build a relationship graph for visualization
126
+ */
127
+ buildGraph(options?: {
128
+ types?: RelationshipType[];
129
+ rootItems?: string[];
130
+ }): Promise<{
131
+ nodes: Array<{
132
+ id: string;
133
+ relationshipCount: number;
134
+ }>;
135
+ edges: Array<{
136
+ source: string;
137
+ target: string;
138
+ type: RelationshipType;
139
+ }>;
140
+ }>;
141
+ /**
142
+ * Detect cycles in directed relationships
143
+ */
144
+ private detectCycle;
145
+ /**
146
+ * Get statistics about relationships
147
+ */
148
+ getStats(): Promise<{
149
+ totalRelationships: number;
150
+ byType: Record<RelationshipType, number>;
151
+ uniqueItems: number;
152
+ }>;
153
+ /**
154
+ * Clear all relationships
155
+ */
156
+ clear(): Promise<void>;
157
+ }
158
+ /**
159
+ * Get the global relationship service instance
160
+ */
161
+ export declare function getRelationshipService(config?: RelationshipServiceConfig): MemoryRelationshipService;
162
+ /**
163
+ * Reset the global relationship service instance
164
+ */
165
+ export declare function resetRelationshipService(): void;
166
+ /**
167
+ * Create bidirectional relationship (e.g., A related_to B and B related_to A)
168
+ */
169
+ export declare function createBidirectionalRelationship(service: MemoryRelationshipService, itemA: string, itemB: string, type: RelationshipType, options?: {
170
+ metadata?: Record<string, unknown>;
171
+ createdBy?: string;
172
+ }): Promise<[MemoryRelationship, MemoryRelationship]>;
173
+ /**
174
+ * Create parent-child relationship (creates both parent_of and child_of)
175
+ */
176
+ export declare function createHierarchy(service: MemoryRelationshipService, parentId: string, childId: string, options?: {
177
+ metadata?: Record<string, unknown>;
178
+ createdBy?: string;
179
+ }): Promise<[MemoryRelationship, MemoryRelationship]>;
180
+ /**
181
+ * Mark a memory as superseding another (deprecation pattern)
182
+ */
183
+ export declare function supersede(service: MemoryRelationshipService, newItemId: string, oldItemId: string, options?: {
184
+ metadata?: Record<string, unknown>;
185
+ createdBy?: string;
186
+ }): Promise<MemoryRelationship>;
187
+ //# sourceMappingURL=MemoryRelationshipService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryRelationshipService.d.ts","sourceRoot":"","sources":["../../src/services/MemoryRelationshipService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,375 @@
1
+ /**
2
+ * Memory Relationship Service
3
+ *
4
+ * Tracks and manages relationships between memory items:
5
+ * - related_to: General relationship
6
+ * - derived_from: Source/origin relationship
7
+ * - supersedes: Replacement relationship
8
+ * - references: Citation relationship
9
+ * - depends_on: Dependency relationship
10
+ *
11
+ * @version 3.1.0
12
+ */
13
+ import { ulid } from 'ulid';
14
+ /**
15
+ * Error thrown when relationship operations fail
16
+ */
17
+ export class RelationshipError extends Error {
18
+ code;
19
+ constructor(message, code) {
20
+ super(message);
21
+ this.code = code;
22
+ this.name = 'RelationshipError';
23
+ }
24
+ }
25
+ // =============================================================================
26
+ // In-Memory Store Implementation
27
+ // =============================================================================
28
+ /**
29
+ * Simple in-memory store for relationships
30
+ */
31
+ export class InMemoryRelationshipStore {
32
+ relationships = new Map();
33
+ async save(relationship) {
34
+ this.relationships.set(relationship.id, relationship);
35
+ }
36
+ async delete(id) {
37
+ return this.relationships.delete(id);
38
+ }
39
+ async findBySource(sourceId) {
40
+ return Array.from(this.relationships.values())
41
+ .filter(r => r.sourceId === sourceId);
42
+ }
43
+ async findByTarget(targetId) {
44
+ return Array.from(this.relationships.values())
45
+ .filter(r => r.targetId === targetId);
46
+ }
47
+ async findByType(type) {
48
+ return Array.from(this.relationships.values())
49
+ .filter(r => r.type === type);
50
+ }
51
+ async findBetween(sourceId, targetId) {
52
+ return Array.from(this.relationships.values())
53
+ .filter(r => r.sourceId === sourceId && r.targetId === targetId);
54
+ }
55
+ async getAll() {
56
+ return Array.from(this.relationships.values());
57
+ }
58
+ async clear() {
59
+ this.relationships.clear();
60
+ }
61
+ }
62
+ // =============================================================================
63
+ // Memory Relationship Service
64
+ // =============================================================================
65
+ /**
66
+ * Service for managing relationships between memory items
67
+ */
68
+ export class MemoryRelationshipService {
69
+ config;
70
+ store;
71
+ constructor(config = {}) {
72
+ this.config = {
73
+ debug: config.debug ?? false,
74
+ maxRelationshipsPerItem: config.maxRelationshipsPerItem ?? 100,
75
+ store: config.store ?? new InMemoryRelationshipStore(),
76
+ };
77
+ this.store = this.config.store;
78
+ }
79
+ /**
80
+ * Create a relationship between two memories
81
+ */
82
+ async createRelationship(sourceId, targetId, type, options) {
83
+ // Validate: no self-references
84
+ if (sourceId === targetId) {
85
+ throw new RelationshipError('Cannot create self-referencing relationship', 'INVALID_SELF_REFERENCE');
86
+ }
87
+ // Check for duplicates
88
+ const existing = await this.store.findBetween(sourceId, targetId);
89
+ if (existing.some(r => r.type === type)) {
90
+ throw new RelationshipError(`Relationship of type '${type}' already exists between these items`, 'DUPLICATE');
91
+ }
92
+ // Check max relationships limit
93
+ const sourceRelationships = await this.store.findBySource(sourceId);
94
+ if (sourceRelationships.length >= this.config.maxRelationshipsPerItem) {
95
+ throw new RelationshipError(`Source item has reached maximum relationships (${this.config.maxRelationshipsPerItem})`, 'MAX_RELATIONSHIPS');
96
+ }
97
+ // Check for cycles in hierarchical relationships
98
+ if (type === 'parent_of' || type === 'child_of' || type === 'depends_on') {
99
+ const hasCycle = await this.detectCycle(sourceId, targetId, type);
100
+ if (hasCycle) {
101
+ throw new RelationshipError(`Creating this relationship would introduce a cycle`, 'CYCLE_DETECTED');
102
+ }
103
+ }
104
+ const relationship = {
105
+ id: ulid(),
106
+ sourceId,
107
+ targetId,
108
+ type,
109
+ metadata: options?.metadata,
110
+ createdAt: new Date(),
111
+ createdBy: options?.createdBy,
112
+ };
113
+ await this.store.save(relationship);
114
+ if (this.config.debug) {
115
+ console.log(`[Relationship] Created: ${sourceId} --${type}--> ${targetId}`);
116
+ }
117
+ return relationship;
118
+ }
119
+ /**
120
+ * Remove a relationship by ID
121
+ */
122
+ async removeRelationship(id) {
123
+ const deleted = await this.store.delete(id);
124
+ if (this.config.debug && deleted) {
125
+ console.log(`[Relationship] Removed: ${id}`);
126
+ }
127
+ return deleted;
128
+ }
129
+ /**
130
+ * Remove all relationships between two items
131
+ */
132
+ async removeRelationshipsBetween(sourceId, targetId) {
133
+ const relationships = await this.store.findBetween(sourceId, targetId);
134
+ for (const rel of relationships) {
135
+ await this.store.delete(rel.id);
136
+ }
137
+ return relationships.length;
138
+ }
139
+ /**
140
+ * Get all relationships for a memory item (both as source and target)
141
+ */
142
+ async getRelationshipsFor(itemId) {
143
+ const [outgoing, incoming] = await Promise.all([
144
+ this.store.findBySource(itemId),
145
+ this.store.findByTarget(itemId),
146
+ ]);
147
+ return { outgoing, incoming };
148
+ }
149
+ /**
150
+ * Get related items by relationship type
151
+ */
152
+ async getRelatedItems(itemId, type, direction = 'both') {
153
+ const relatedIds = new Set();
154
+ if (direction === 'outgoing' || direction === 'both') {
155
+ const outgoing = await this.store.findBySource(itemId);
156
+ for (const rel of outgoing) {
157
+ if (rel.type === type) {
158
+ relatedIds.add(rel.targetId);
159
+ }
160
+ }
161
+ }
162
+ if (direction === 'incoming' || direction === 'both') {
163
+ const incoming = await this.store.findByTarget(itemId);
164
+ for (const rel of incoming) {
165
+ if (rel.type === type) {
166
+ relatedIds.add(rel.sourceId);
167
+ }
168
+ }
169
+ }
170
+ return Array.from(relatedIds);
171
+ }
172
+ /**
173
+ * Find all descendants (transitive closure) of an item
174
+ * Useful for hierarchical relationships
175
+ */
176
+ async getDescendants(itemId, type = 'parent_of', maxDepth = 10) {
177
+ const descendants = new Map();
178
+ const visited = new Set();
179
+ const queue = [{ id: itemId, depth: 0 }];
180
+ while (queue.length > 0) {
181
+ const current = queue.shift();
182
+ if (visited.has(current.id) || current.depth > maxDepth) {
183
+ continue;
184
+ }
185
+ visited.add(current.id);
186
+ const children = await this.getRelatedItems(current.id, type, 'outgoing');
187
+ const childDepth = current.depth + 1;
188
+ for (const childId of children) {
189
+ if (!visited.has(childId) && childDepth <= maxDepth) {
190
+ descendants.set(childId, childDepth);
191
+ queue.push({ id: childId, depth: childDepth });
192
+ }
193
+ }
194
+ }
195
+ return descendants;
196
+ }
197
+ /**
198
+ * Find all ancestors (inverse transitive closure) of an item
199
+ */
200
+ async getAncestors(itemId, type = 'child_of', maxDepth = 10) {
201
+ const ancestors = new Map();
202
+ const visited = new Set();
203
+ const queue = [{ id: itemId, depth: 0 }];
204
+ while (queue.length > 0) {
205
+ const current = queue.shift();
206
+ if (visited.has(current.id) || current.depth > maxDepth) {
207
+ continue;
208
+ }
209
+ visited.add(current.id);
210
+ const parents = await this.getRelatedItems(current.id, type, 'outgoing');
211
+ const parentDepth = current.depth + 1;
212
+ for (const parentId of parents) {
213
+ if (!visited.has(parentId) && parentDepth <= maxDepth) {
214
+ ancestors.set(parentId, parentDepth);
215
+ queue.push({ id: parentId, depth: parentDepth });
216
+ }
217
+ }
218
+ }
219
+ return ancestors;
220
+ }
221
+ /**
222
+ * Check if a relationship exists
223
+ */
224
+ async hasRelationship(sourceId, targetId, type) {
225
+ const relationships = await this.store.findBetween(sourceId, targetId);
226
+ if (type) {
227
+ return relationships.some(r => r.type === type);
228
+ }
229
+ return relationships.length > 0;
230
+ }
231
+ /**
232
+ * Get all relationships of a specific type
233
+ */
234
+ async getRelationshipsByType(type) {
235
+ return this.store.findByType(type);
236
+ }
237
+ /**
238
+ * Build a relationship graph for visualization
239
+ */
240
+ async buildGraph(options) {
241
+ let relationships = await this.store.getAll();
242
+ if (options?.types) {
243
+ relationships = relationships.filter(r => options.types.includes(r.type));
244
+ }
245
+ if (options?.rootItems) {
246
+ const connected = new Set(options.rootItems);
247
+ // Find all connected items
248
+ for (const rel of relationships) {
249
+ if (connected.has(rel.sourceId) || connected.has(rel.targetId)) {
250
+ connected.add(rel.sourceId);
251
+ connected.add(rel.targetId);
252
+ }
253
+ }
254
+ relationships = relationships.filter(r => connected.has(r.sourceId) && connected.has(r.targetId));
255
+ }
256
+ // Build nodes
257
+ const nodeCounts = new Map();
258
+ for (const rel of relationships) {
259
+ nodeCounts.set(rel.sourceId, (nodeCounts.get(rel.sourceId) ?? 0) + 1);
260
+ nodeCounts.set(rel.targetId, (nodeCounts.get(rel.targetId) ?? 0) + 1);
261
+ }
262
+ const nodes = Array.from(nodeCounts.entries()).map(([id, count]) => ({
263
+ id,
264
+ relationshipCount: count,
265
+ }));
266
+ const edges = relationships.map(rel => ({
267
+ source: rel.sourceId,
268
+ target: rel.targetId,
269
+ type: rel.type,
270
+ }));
271
+ return { nodes, edges };
272
+ }
273
+ /**
274
+ * Detect cycles in directed relationships
275
+ */
276
+ async detectCycle(sourceId, targetId, type) {
277
+ // If adding source -> target, check if target can reach source
278
+ const visited = new Set();
279
+ const queue = [targetId];
280
+ while (queue.length > 0) {
281
+ const current = queue.shift();
282
+ if (visited.has(current))
283
+ continue;
284
+ visited.add(current);
285
+ if (current === sourceId) {
286
+ return true; // Cycle detected
287
+ }
288
+ const outgoing = await this.store.findBySource(current);
289
+ for (const rel of outgoing) {
290
+ if (rel.type === type && !visited.has(rel.targetId)) {
291
+ queue.push(rel.targetId);
292
+ }
293
+ }
294
+ }
295
+ return false;
296
+ }
297
+ /**
298
+ * Get statistics about relationships
299
+ */
300
+ async getStats() {
301
+ const relationships = await this.store.getAll();
302
+ const byType = {};
303
+ const items = new Set();
304
+ for (const rel of relationships) {
305
+ byType[rel.type] = (byType[rel.type] ?? 0) + 1;
306
+ items.add(rel.sourceId);
307
+ items.add(rel.targetId);
308
+ }
309
+ return {
310
+ totalRelationships: relationships.length,
311
+ byType: byType,
312
+ uniqueItems: items.size,
313
+ };
314
+ }
315
+ /**
316
+ * Clear all relationships
317
+ */
318
+ async clear() {
319
+ await this.store.clear();
320
+ if (this.config.debug) {
321
+ console.log('[Relationship] All relationships cleared');
322
+ }
323
+ }
324
+ }
325
+ // =============================================================================
326
+ // Global Instance
327
+ // =============================================================================
328
+ let globalInstance = null;
329
+ /**
330
+ * Get the global relationship service instance
331
+ */
332
+ export function getRelationshipService(config) {
333
+ if (!globalInstance) {
334
+ globalInstance = new MemoryRelationshipService(config);
335
+ }
336
+ return globalInstance;
337
+ }
338
+ /**
339
+ * Reset the global relationship service instance
340
+ */
341
+ export function resetRelationshipService() {
342
+ globalInstance = null;
343
+ }
344
+ // =============================================================================
345
+ // Helper Functions
346
+ // =============================================================================
347
+ /**
348
+ * Create bidirectional relationship (e.g., A related_to B and B related_to A)
349
+ */
350
+ export async function createBidirectionalRelationship(service, itemA, itemB, type, options) {
351
+ const relA = await service.createRelationship(itemA, itemB, type, options);
352
+ const relB = await service.createRelationship(itemB, itemA, type, options);
353
+ return [relA, relB];
354
+ }
355
+ /**
356
+ * Create parent-child relationship (creates both parent_of and child_of)
357
+ */
358
+ export async function createHierarchy(service, parentId, childId, options) {
359
+ const parentRel = await service.createRelationship(parentId, childId, 'parent_of', options);
360
+ const childRel = await service.createRelationship(childId, parentId, 'child_of', options);
361
+ return [parentRel, childRel];
362
+ }
363
+ /**
364
+ * Mark a memory as superseding another (deprecation pattern)
365
+ */
366
+ export async function supersede(service, newItemId, oldItemId, options) {
367
+ return service.createRelationship(newItemId, oldItemId, 'supersedes', {
368
+ ...options,
369
+ metadata: {
370
+ ...options?.metadata,
371
+ supersededAt: new Date().toISOString(),
372
+ },
373
+ });
374
+ }
375
+ //# sourceMappingURL=MemoryRelationshipService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryRelationshipService.js","sourceRoot":"","sources":["../../src/services/MemoryRelationshipService.ts"],"names":[],"mappings":"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"}