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.
- package/dist/analytics/CrossProjectAnalytics.d.ts +128 -0
- package/dist/analytics/CrossProjectAnalytics.d.ts.map +1 -0
- package/dist/analytics/CrossProjectAnalytics.js +434 -0
- package/dist/analytics/CrossProjectAnalytics.js.map +1 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +2 -0
- package/dist/analytics/index.js.map +1 -1
- package/dist/cache/EmbeddingCache.d.ts +6 -4
- package/dist/cache/EmbeddingCache.d.ts.map +1 -1
- package/dist/cache/EmbeddingCache.js +28 -17
- package/dist/cache/EmbeddingCache.js.map +1 -1
- package/dist/cli/index.js +658 -141
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ui.d.ts +134 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +311 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/dashboard/tokens.d.ts +228 -0
- package/dist/dashboard/tokens.d.ts.map +1 -0
- package/dist/dashboard/tokens.js +450 -0
- package/dist/dashboard/tokens.js.map +1 -0
- package/dist/dashboard/ui.d.ts +3 -0
- package/dist/dashboard/ui.d.ts.map +1 -1
- package/dist/dashboard/ui.js +95 -61
- package/dist/dashboard/ui.js.map +1 -1
- package/dist/db/cloud.d.ts +11 -0
- package/dist/db/cloud.d.ts.map +1 -1
- package/dist/db/cloud.js +49 -1
- package/dist/db/cloud.js.map +1 -1
- package/dist/db/migrations.d.ts +1 -0
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +109 -0
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/turso-client.d.ts.map +1 -1
- package/dist/db/turso-client.js +3 -0
- package/dist/db/turso-client.js.map +1 -1
- package/dist/events/EventBus.d.ts +21 -0
- package/dist/events/EventBus.d.ts.map +1 -1
- package/dist/events/EventBus.js +81 -30
- package/dist/events/EventBus.js.map +1 -1
- package/dist/events/index.d.ts +1 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/startup-verify.d.ts +31 -0
- package/dist/hooks/startup-verify.d.ts.map +1 -0
- package/dist/hooks/startup-verify.js +360 -0
- package/dist/hooks/startup-verify.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +160 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +417 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +7 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/schema/expert-types.d.ts +2 -2
- package/dist/services/AuditLog.d.ts +205 -0
- package/dist/services/AuditLog.d.ts.map +1 -0
- package/dist/services/AuditLog.js +352 -0
- package/dist/services/AuditLog.js.map +1 -0
- package/dist/services/FeedbackCollector.d.ts +8 -0
- package/dist/services/FeedbackCollector.d.ts.map +1 -1
- package/dist/services/FeedbackCollector.js +19 -2
- package/dist/services/FeedbackCollector.js.map +1 -1
- package/dist/services/GitIntegration.d.ts +140 -0
- package/dist/services/GitIntegration.d.ts.map +1 -0
- package/dist/services/GitIntegration.js +423 -0
- package/dist/services/GitIntegration.js.map +1 -0
- package/dist/services/HookVerifier.d.ts +95 -0
- package/dist/services/HookVerifier.d.ts.map +1 -0
- package/dist/services/HookVerifier.js +493 -0
- package/dist/services/HookVerifier.js.map +1 -0
- package/dist/services/MemoryRelationshipService.d.ts +187 -0
- package/dist/services/MemoryRelationshipService.d.ts.map +1 -0
- package/dist/services/MemoryRelationshipService.js +375 -0
- package/dist/services/MemoryRelationshipService.js.map +1 -0
- package/dist/services/MemoryVersioning.d.ts +108 -0
- package/dist/services/MemoryVersioning.d.ts.map +1 -0
- package/dist/services/MemoryVersioning.js +281 -0
- package/dist/services/MemoryVersioning.js.map +1 -0
- package/dist/services/context-injector.d.ts +8 -0
- package/dist/services/context-injector.d.ts.map +1 -1
- package/dist/services/context-injector.js +19 -2
- package/dist/services/context-injector.js.map +1 -1
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +7 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/memory-router.d.ts +8 -0
- package/dist/services/memory-router.d.ts.map +1 -1
- package/dist/services/memory-router.js +19 -2
- package/dist/services/memory-router.js.map +1 -1
- package/dist/services/pattern-tracker.d.ts +13 -0
- package/dist/services/pattern-tracker.d.ts.map +1 -1
- package/dist/services/pattern-tracker.js +33 -3
- package/dist/services/pattern-tracker.js.map +1 -1
- package/dist/services/semantic-search.d.ts +12 -0
- package/dist/services/semantic-search.d.ts.map +1 -1
- package/dist/services/semantic-search.js +93 -17
- package/dist/services/semantic-search.js.map +1 -1
- package/dist/testing/index.d.ts +148 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +370 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/resilience.d.ts +256 -0
- package/dist/utils/resilience.d.ts.map +1 -0
- package/dist/utils/resilience.js +499 -0
- package/dist/utils/resilience.js.map +1 -0
- 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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"}
|