@openweave/weave-graph 0.2.0 → 0.2.1
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/cjs/compression.d.ts +94 -0
- package/dist/cjs/compression.d.ts.map +1 -0
- package/dist/cjs/compression.js +215 -0
- package/dist/cjs/compression.js.map +1 -0
- package/dist/cjs/edge.d.ts +43 -0
- package/dist/cjs/edge.d.ts.map +1 -0
- package/dist/cjs/edge.js +83 -0
- package/dist/cjs/edge.js.map +1 -0
- package/dist/cjs/hebbian-weights.d.ts +100 -0
- package/dist/cjs/hebbian-weights.d.ts.map +1 -0
- package/dist/cjs/hebbian-weights.js +152 -0
- package/dist/cjs/hebbian-weights.js.map +1 -0
- package/dist/cjs/index.d.ts +193 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +417 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/node.d.ts +43 -0
- package/dist/cjs/node.d.ts.map +1 -0
- package/dist/cjs/node.js +83 -0
- package/dist/cjs/node.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/persistence.d.ts +86 -0
- package/dist/cjs/persistence.d.ts.map +1 -0
- package/dist/cjs/persistence.js +215 -0
- package/dist/cjs/persistence.js.map +1 -0
- package/dist/cjs/synaptic-engine.d.ts +126 -0
- package/dist/cjs/synaptic-engine.d.ts.map +1 -0
- package/dist/cjs/synaptic-engine.js +243 -0
- package/dist/cjs/synaptic-engine.js.map +1 -0
- package/dist/cjs/types.d.ts +74 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +30 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/hebbian-weights.d.ts +100 -0
- package/dist/hebbian-weights.d.ts.map +1 -0
- package/dist/hebbian-weights.js +148 -0
- package/dist/hebbian-weights.js.map +1 -0
- package/dist/index.d.ts +36 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +65 -3
- package/dist/index.js.map +1 -1
- package/dist/persistence.d.ts +43 -15
- package/dist/persistence.d.ts.map +1 -1
- package/dist/persistence.js +109 -119
- package/dist/persistence.js.map +1 -1
- package/dist/synaptic-engine.d.ts +126 -0
- package/dist/synaptic-engine.d.ts.map +1 -0
- package/dist/synaptic-engine.js +236 -0
- package/dist/synaptic-engine.js.map +1 -0
- package/package.json +6 -4
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Node, Edge } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* CompressionStats tracks metrics about graph compression
|
|
4
|
+
*/
|
|
5
|
+
export interface CompressionStats {
|
|
6
|
+
originalNodeCount: number;
|
|
7
|
+
originalEdgeCount: number;
|
|
8
|
+
compressedNodeCount: number;
|
|
9
|
+
compressedEdgeCount: number;
|
|
10
|
+
archivedNodeCount: number;
|
|
11
|
+
compressionRatio: number;
|
|
12
|
+
estimatedContextSize: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* CompressionManager handles graph compression and context optimization
|
|
16
|
+
* Keeps high-value nodes in active memory, archives low-frequency nodes
|
|
17
|
+
*/
|
|
18
|
+
export declare class CompressionManager {
|
|
19
|
+
private archivedNodes;
|
|
20
|
+
private archivedEdges;
|
|
21
|
+
/**
|
|
22
|
+
* Calculate approximate size of a node in bytes (for context window estimation)
|
|
23
|
+
*/
|
|
24
|
+
static estimateNodeSize(node: Node): number;
|
|
25
|
+
/**
|
|
26
|
+
* Calculate approximate size of an edge in bytes
|
|
27
|
+
*/
|
|
28
|
+
static estimateEdgeSize(edge: Edge): number;
|
|
29
|
+
/**
|
|
30
|
+
* Calculate total estimated context window usage
|
|
31
|
+
*/
|
|
32
|
+
static calculateContextSize(nodes: Node[], edges: Edge[]): number;
|
|
33
|
+
/**
|
|
34
|
+
* Calculate context window usage as a percentage (0-1)
|
|
35
|
+
* Assumes ~100KB max context for graph data (typical LLM context budget)
|
|
36
|
+
*/
|
|
37
|
+
static calculateContextUsagePercentage(contextSize: number): number;
|
|
38
|
+
/**
|
|
39
|
+
* Identify nodes that should be archived (low frequency, old, not critical)
|
|
40
|
+
* Returns nodeIds sorted by priority for archival
|
|
41
|
+
*/
|
|
42
|
+
static identifyArchiveCandidates(nodes: Node[], edges: Edge[], targetReductionPercentage?: number): string[];
|
|
43
|
+
/**
|
|
44
|
+
* Archive nodes and their dependent edges
|
|
45
|
+
*/
|
|
46
|
+
archiveNodes(nodeIds: string[], nodes: Map<string, Node>, edges: Map<string, Edge>): void;
|
|
47
|
+
/**
|
|
48
|
+
* Restore archived nodes back to active graph
|
|
49
|
+
*/
|
|
50
|
+
restoreNodes(nodeIds: string[]): Map<string, Node>;
|
|
51
|
+
/**
|
|
52
|
+
* Get archive statistics
|
|
53
|
+
*/
|
|
54
|
+
getArchiveStats(): {
|
|
55
|
+
archivedNodeCount: number;
|
|
56
|
+
archivedEdgeCount: number;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Clear all archives
|
|
60
|
+
*/
|
|
61
|
+
clearArchives(): void;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* ErrorSuppression handles marking errors and their corrections
|
|
65
|
+
*/
|
|
66
|
+
export declare class ErrorSuppression {
|
|
67
|
+
/**
|
|
68
|
+
* Mark a node as suppressed (contains an error)
|
|
69
|
+
*/
|
|
70
|
+
static suppressNode(node: Node): Node;
|
|
71
|
+
/**
|
|
72
|
+
* Check if a node is suppressed
|
|
73
|
+
*/
|
|
74
|
+
static isSuppressed(node: Node): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Create a correction node linked to an error node
|
|
77
|
+
*/
|
|
78
|
+
static createCorrection(errorNodeId: string, correctionLabel: string, correctionDescription?: string): {
|
|
79
|
+
correctionNode: Node;
|
|
80
|
+
correctionEdge: Edge;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Get all error nodes that have corrections
|
|
84
|
+
*/
|
|
85
|
+
static findCorrectedErrors(nodes: Map<string, Node>, edges: Map<string, Edge>): Map<string, {
|
|
86
|
+
error: Node;
|
|
87
|
+
corrections: Node[];
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* Get uncorrected error nodes
|
|
91
|
+
*/
|
|
92
|
+
static findUncorrectedErrors(nodes: Map<string, Node>, edges: Map<string, Edge>): Node[];
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=compression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../src/compression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAsB,MAAM,SAAS,CAAC;AAIzD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,aAAa,CAAgC;IAErD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAQ3C;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAM3C;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM;IAMjE;;;OAGG;IACH,MAAM,CAAC,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAKnE;;;OAGG;IACH,MAAM,CAAC,yBAAyB,CAC9B,KAAK,EAAE,IAAI,EAAE,EACb,KAAK,EAAE,IAAI,EAAE,EACb,yBAAyB,GAAE,MAAY,GACtC,MAAM,EAAE;IA8CX;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI;IAmBzF;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;IAYlD;;OAEG;IACH,eAAe,IAAI;QACjB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IAOD;;OAEG;IACH,aAAa,IAAI,IAAI;CAItB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAcrC;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAIxC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CACrB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,qBAAqB,CAAC,EAAE,MAAM,GAC7B;QAAE,cAAc,EAAE,IAAI,CAAC;QAAC,cAAc,EAAE,IAAI,CAAA;KAAE;IAUjD;;OAEG;IACH,MAAM,CAAC,mBAAmB,CACxB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EACxB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GACvB,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,WAAW,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC;IAuBpD;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;CAYzF"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorSuppression = exports.CompressionManager = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const node_1 = require("./node");
|
|
6
|
+
const edge_1 = require("./edge");
|
|
7
|
+
/**
|
|
8
|
+
* CompressionManager handles graph compression and context optimization
|
|
9
|
+
* Keeps high-value nodes in active memory, archives low-frequency nodes
|
|
10
|
+
*/
|
|
11
|
+
class CompressionManager {
|
|
12
|
+
archivedNodes = new Map();
|
|
13
|
+
archivedEdges = new Map();
|
|
14
|
+
/**
|
|
15
|
+
* Calculate approximate size of a node in bytes (for context window estimation)
|
|
16
|
+
*/
|
|
17
|
+
static estimateNodeSize(node) {
|
|
18
|
+
// Rough estimation: labels ~50 bytes + metadata ~100 bytes
|
|
19
|
+
const labelSize = node.label.length * 2;
|
|
20
|
+
const descSize = (node.description || "").length * 2;
|
|
21
|
+
const metadataSize = JSON.stringify(node.metadata || {}).length;
|
|
22
|
+
return 50 + labelSize + descSize + metadataSize;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Calculate approximate size of an edge in bytes
|
|
26
|
+
*/
|
|
27
|
+
static estimateEdgeSize(edge) {
|
|
28
|
+
// Edge size: sourceId ~ 36 bytes + targetId ~ 36 bytes + type ~ 20 bytes + metadata
|
|
29
|
+
const metadataSize = JSON.stringify(edge.metadata || {}).length;
|
|
30
|
+
return 100 + metadataSize;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Calculate total estimated context window usage
|
|
34
|
+
*/
|
|
35
|
+
static calculateContextSize(nodes, edges) {
|
|
36
|
+
const nodesSize = nodes.reduce((sum, node) => sum + this.estimateNodeSize(node), 0);
|
|
37
|
+
const edgesSize = edges.reduce((sum, edge) => sum + this.estimateEdgeSize(edge), 0);
|
|
38
|
+
return nodesSize + edgesSize;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Calculate context window usage as a percentage (0-1)
|
|
42
|
+
* Assumes ~100KB max context for graph data (typical LLM context budget)
|
|
43
|
+
*/
|
|
44
|
+
static calculateContextUsagePercentage(contextSize) {
|
|
45
|
+
const MAX_CONTEXT_BYTES = 100_000; // ~100KB for graph data
|
|
46
|
+
return Math.min(contextSize / MAX_CONTEXT_BYTES, 1);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Identify nodes that should be archived (low frequency, old, not critical)
|
|
50
|
+
* Returns nodeIds sorted by priority for archival
|
|
51
|
+
*/
|
|
52
|
+
static identifyArchiveCandidates(nodes, edges, targetReductionPercentage = 0.3) {
|
|
53
|
+
// Build a map of node importance
|
|
54
|
+
const nodeImportance = new Map();
|
|
55
|
+
// Initialize with frequency
|
|
56
|
+
for (const node of nodes) {
|
|
57
|
+
nodeImportance.set(node.id, node.frequency ?? 1);
|
|
58
|
+
}
|
|
59
|
+
// Increase importance of nodes with many connections
|
|
60
|
+
const connectionCount = new Map();
|
|
61
|
+
for (const edge of edges) {
|
|
62
|
+
connectionCount.set(edge.sourceId, (connectionCount.get(edge.sourceId) ?? 0) + 1);
|
|
63
|
+
connectionCount.set(edge.targetId, (connectionCount.get(edge.targetId) ?? 0) + 1);
|
|
64
|
+
}
|
|
65
|
+
for (const [nodeId, count] of connectionCount) {
|
|
66
|
+
const current = nodeImportance.get(nodeId) ?? 1;
|
|
67
|
+
nodeImportance.set(nodeId, current + count * 2);
|
|
68
|
+
}
|
|
69
|
+
// Mark ERROR nodes as candidates (they can be archived after corrections exist)
|
|
70
|
+
for (const node of nodes) {
|
|
71
|
+
if (node.type === types_1.NodeType.ERROR) {
|
|
72
|
+
nodeImportance.set(node.id, Math.max(0.1, (nodeImportance.get(node.id) ?? 1) - 5));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Mark old nodes with low frequency as less important
|
|
76
|
+
const now = new Date();
|
|
77
|
+
for (const node of nodes) {
|
|
78
|
+
const ageHours = (now.getTime() - node.updatedAt.getTime()) / (1000 * 60 * 60);
|
|
79
|
+
if (ageHours > 24 && (node.frequency ?? 1) < 3) {
|
|
80
|
+
nodeImportance.set(node.id, (nodeImportance.get(node.id) ?? 1) * 0.5);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Sort by importance and select bottom candidates
|
|
84
|
+
const sorted = Array.from(nodeImportance.entries())
|
|
85
|
+
.sort((a, b) => a[1] - b[1])
|
|
86
|
+
.map(([id]) => id);
|
|
87
|
+
const targetCount = Math.ceil(nodes.length * targetReductionPercentage);
|
|
88
|
+
return sorted.slice(0, targetCount);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Archive nodes and their dependent edges
|
|
92
|
+
*/
|
|
93
|
+
archiveNodes(nodeIds, nodes, edges) {
|
|
94
|
+
const nodeIdSet = new Set(nodeIds);
|
|
95
|
+
// Archive nodes
|
|
96
|
+
for (const nodeId of nodeIds) {
|
|
97
|
+
const node = nodes.get(nodeId);
|
|
98
|
+
if (node) {
|
|
99
|
+
this.archivedNodes.set(nodeId, node);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Archive edges connected to archived nodes
|
|
103
|
+
for (const [edgeId, edge] of edges) {
|
|
104
|
+
if (nodeIdSet.has(edge.sourceId) || nodeIdSet.has(edge.targetId)) {
|
|
105
|
+
this.archivedEdges.set(edgeId, edge);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Restore archived nodes back to active graph
|
|
111
|
+
*/
|
|
112
|
+
restoreNodes(nodeIds) {
|
|
113
|
+
const restored = new Map();
|
|
114
|
+
for (const nodeId of nodeIds) {
|
|
115
|
+
const node = this.archivedNodes.get(nodeId);
|
|
116
|
+
if (node) {
|
|
117
|
+
restored.set(nodeId, node);
|
|
118
|
+
this.archivedNodes.delete(nodeId);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return restored;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get archive statistics
|
|
125
|
+
*/
|
|
126
|
+
getArchiveStats() {
|
|
127
|
+
return {
|
|
128
|
+
archivedNodeCount: this.archivedNodes.size,
|
|
129
|
+
archivedEdgeCount: this.archivedEdges.size,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Clear all archives
|
|
134
|
+
*/
|
|
135
|
+
clearArchives() {
|
|
136
|
+
this.archivedNodes.clear();
|
|
137
|
+
this.archivedEdges.clear();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.CompressionManager = CompressionManager;
|
|
141
|
+
/**
|
|
142
|
+
* ErrorSuppression handles marking errors and their corrections
|
|
143
|
+
*/
|
|
144
|
+
class ErrorSuppression {
|
|
145
|
+
/**
|
|
146
|
+
* Mark a node as suppressed (contains an error)
|
|
147
|
+
*/
|
|
148
|
+
static suppressNode(node) {
|
|
149
|
+
if (node.type !== types_1.NodeType.ERROR) {
|
|
150
|
+
throw new Error("Only ERROR type nodes can be suppressed");
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
...node,
|
|
154
|
+
metadata: {
|
|
155
|
+
...node.metadata,
|
|
156
|
+
suppressed: true,
|
|
157
|
+
suppressedAt: new Date().toISOString(),
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if a node is suppressed
|
|
163
|
+
*/
|
|
164
|
+
static isSuppressed(node) {
|
|
165
|
+
return node.metadata?.suppressed ?? false;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Create a correction node linked to an error node
|
|
169
|
+
*/
|
|
170
|
+
static createCorrection(errorNodeId, correctionLabel, correctionDescription) {
|
|
171
|
+
const correctionNode = node_1.NodeBuilder.correction(correctionLabel, correctionDescription);
|
|
172
|
+
const correctionEdge = edge_1.EdgeBuilder.corrects(correctionNode.id, errorNodeId);
|
|
173
|
+
return {
|
|
174
|
+
correctionNode,
|
|
175
|
+
correctionEdge,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get all error nodes that have corrections
|
|
180
|
+
*/
|
|
181
|
+
static findCorrectedErrors(nodes, edges) {
|
|
182
|
+
const correctedErrors = new Map();
|
|
183
|
+
for (const [, edge] of edges) {
|
|
184
|
+
if (edge.type === types_1.EdgeType.CORRECTS) {
|
|
185
|
+
const correctionNode = nodes.get(edge.sourceId);
|
|
186
|
+
const errorNode = nodes.get(edge.targetId);
|
|
187
|
+
if (correctionNode && errorNode && errorNode.type === types_1.NodeType.ERROR) {
|
|
188
|
+
if (!correctedErrors.has(errorNode.id)) {
|
|
189
|
+
correctedErrors.set(errorNode.id, {
|
|
190
|
+
error: errorNode,
|
|
191
|
+
corrections: [],
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
correctedErrors.get(errorNode.id).corrections.push(correctionNode);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return correctedErrors;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get uncorrected error nodes
|
|
202
|
+
*/
|
|
203
|
+
static findUncorrectedErrors(nodes, edges) {
|
|
204
|
+
const errorNodes = Array.from(nodes.values()).filter((n) => n.type === types_1.NodeType.ERROR);
|
|
205
|
+
const correctedErrorIds = new Set();
|
|
206
|
+
for (const [, edge] of edges) {
|
|
207
|
+
if (edge.type === types_1.EdgeType.CORRECTS) {
|
|
208
|
+
correctedErrorIds.add(edge.targetId);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return errorNodes.filter((n) => !correctedErrorIds.has(n.id));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
exports.ErrorSuppression = ErrorSuppression;
|
|
215
|
+
//# sourceMappingURL=compression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compression.js","sourceRoot":"","sources":["../../src/compression.ts"],"names":[],"mappings":";;;AAAA,mCAAyD;AACzD,iCAAqC;AACrC,iCAAqC;AAerC;;;GAGG;AACH,MAAa,kBAAkB;IACrB,aAAa,GAAsB,IAAI,GAAG,EAAE,CAAC;IAC7C,aAAa,GAAsB,IAAI,GAAG,EAAE,CAAC;IAErD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAU;QAChC,2DAA2D;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAChE,OAAO,EAAE,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAU;QAChC,oFAAoF;QACpF,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAChE,OAAO,GAAG,GAAG,YAAY,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,KAAa,EAAE,KAAa;QACtD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACpF,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACpF,OAAO,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,+BAA+B,CAAC,WAAmB;QACxD,MAAM,iBAAiB,GAAG,OAAO,CAAC,CAAC,wBAAwB;QAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,yBAAyB,CAC9B,KAAa,EACb,KAAa,EACb,4BAAoC,GAAG;QAEvC,iCAAiC;QACjC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEjD,4BAA4B;QAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,qDAAqD;QACrD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAClF,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpF,CAAC;QAED,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChD,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,gFAAgF;QAChF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAQ,CAAC,KAAK,EAAE,CAAC;gBACjC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/E,IAAI,QAAQ,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;aAChD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAErB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,yBAAyB,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAiB,EAAE,KAAwB,EAAE,KAAwB;QAChF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAEnC,gBAAgB;QAChB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YACnC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAiB;QAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgB,CAAC;QACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,IAAI,EAAE,CAAC;gBACT,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,eAAe;QAIb,OAAO;YACL,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;YAC1C,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;SAC3C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF;AAzJD,gDAyJC;AAED;;GAEG;AACH,MAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,IAAU;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO;YACL,GAAG,IAAI;YACP,QAAQ,EAAE;gBACR,GAAG,IAAI,CAAC,QAAQ;gBAChB,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACvC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,IAAU;QAC5B,OAAQ,IAAI,CAAC,QAAQ,EAAE,UAAsB,IAAI,KAAK,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CACrB,WAAmB,EACnB,eAAuB,EACvB,qBAA8B;QAE9B,MAAM,cAAc,GAAG,kBAAW,CAAC,UAAU,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;QACtF,MAAM,cAAc,GAAG,kBAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAE5E,OAAO;YACL,cAAc;YACd,cAAc;SACf,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,mBAAmB,CACxB,KAAwB,EACxB,KAAwB;QAExB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAgD,CAAC;QAEhF,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAQ,CAAC,QAAQ,EAAE,CAAC;gBACpC,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAChD,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAE3C,IAAI,cAAc,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAQ,CAAC,KAAK,EAAE,CAAC;oBACrE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;wBACvC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE;4BAChC,KAAK,EAAE,SAAS;4BAChB,WAAW,EAAE,EAAE;yBAChB,CAAC,CAAC;oBACL,CAAC;oBACD,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAE,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,KAAwB,EAAE,KAAwB;QAC7E,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAQ,CAAC,KAAK,CAAC,CAAC;QACvF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE5C,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAQ,CAAC,QAAQ,EAAE,CAAC;gBACpC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;CACF;AAtFD,4CAsFC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Edge, EdgeType } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* EdgeBuilder utility for creating and managing graph edges
|
|
4
|
+
*/
|
|
5
|
+
export declare class EdgeBuilder {
|
|
6
|
+
/**
|
|
7
|
+
* Create a new edge between two nodes
|
|
8
|
+
*/
|
|
9
|
+
static create(sourceId: string, targetId: string, type: EdgeType, weight?: number, metadata?: Record<string, unknown>): Edge;
|
|
10
|
+
/**
|
|
11
|
+
* Create a RELATES edge
|
|
12
|
+
*/
|
|
13
|
+
static relates(sourceId: string, targetId: string, weight?: number): Edge;
|
|
14
|
+
/**
|
|
15
|
+
* Create a CAUSES edge
|
|
16
|
+
*/
|
|
17
|
+
static causes(sourceId: string, targetId: string, weight?: number): Edge;
|
|
18
|
+
/**
|
|
19
|
+
* Create a CORRECTS edge (links CORRECTION to ERROR)
|
|
20
|
+
*/
|
|
21
|
+
static corrects(correctionId: string, errorId: string, weight?: number): Edge;
|
|
22
|
+
/**
|
|
23
|
+
* Create an IMPLEMENTS edge (code → decision)
|
|
24
|
+
*/
|
|
25
|
+
static implements(codeEntityId: string, decisionId: string, weight?: number): Edge;
|
|
26
|
+
/**
|
|
27
|
+
* Create a DEPENDS_ON edge
|
|
28
|
+
*/
|
|
29
|
+
static dependsOn(sourceId: string, targetId: string, weight?: number): Edge;
|
|
30
|
+
/**
|
|
31
|
+
* Create a BLOCKS edge
|
|
32
|
+
*/
|
|
33
|
+
static blocks(blockerId: string, blockedId: string, weight?: number): Edge;
|
|
34
|
+
/**
|
|
35
|
+
* Clone an edge with updated values
|
|
36
|
+
*/
|
|
37
|
+
static clone(edge: Edge, updates?: Partial<Edge>): Edge;
|
|
38
|
+
/**
|
|
39
|
+
* Increase the weight (confidence) of an edge
|
|
40
|
+
*/
|
|
41
|
+
static reinforceWeight(edge: Edge, factor?: number): Edge;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=edge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../src/edge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGzC;;GAEG;AACH,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,EACd,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,IAAI;IAaP;;OAEG;IACH,MAAM,CAAC,OAAO,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAIP;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAIP;;OAEG;IACH,MAAM,CAAC,QAAQ,CACb,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAIP;;OAEG;IACH,MAAM,CAAC,UAAU,CACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAIP;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAIP;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAIP;;OAEG;IACH,MAAM,CAAC,KAAK,CACV,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GACtB,IAAI;IAQP;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAE,MAAY,GAAG,IAAI;CAO/D"}
|
package/dist/cjs/edge.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EdgeBuilder = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const crypto_1 = require("crypto");
|
|
6
|
+
/**
|
|
7
|
+
* EdgeBuilder utility for creating and managing graph edges
|
|
8
|
+
*/
|
|
9
|
+
class EdgeBuilder {
|
|
10
|
+
/**
|
|
11
|
+
* Create a new edge between two nodes
|
|
12
|
+
*/
|
|
13
|
+
static create(sourceId, targetId, type, weight, metadata) {
|
|
14
|
+
return {
|
|
15
|
+
id: (0, crypto_1.randomUUID)(),
|
|
16
|
+
sourceId,
|
|
17
|
+
targetId,
|
|
18
|
+
type,
|
|
19
|
+
weight: weight ?? 1.0,
|
|
20
|
+
metadata: metadata ?? {},
|
|
21
|
+
createdAt: new Date(),
|
|
22
|
+
updatedAt: new Date(),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a RELATES edge
|
|
27
|
+
*/
|
|
28
|
+
static relates(sourceId, targetId, weight) {
|
|
29
|
+
return this.create(sourceId, targetId, types_1.EdgeType.RELATES, weight);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a CAUSES edge
|
|
33
|
+
*/
|
|
34
|
+
static causes(sourceId, targetId, weight) {
|
|
35
|
+
return this.create(sourceId, targetId, types_1.EdgeType.CAUSES, weight);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create a CORRECTS edge (links CORRECTION to ERROR)
|
|
39
|
+
*/
|
|
40
|
+
static corrects(correctionId, errorId, weight) {
|
|
41
|
+
return this.create(correctionId, errorId, types_1.EdgeType.CORRECTS, weight);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create an IMPLEMENTS edge (code → decision)
|
|
45
|
+
*/
|
|
46
|
+
static implements(codeEntityId, decisionId, weight) {
|
|
47
|
+
return this.create(codeEntityId, decisionId, types_1.EdgeType.IMPLEMENTS, weight);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create a DEPENDS_ON edge
|
|
51
|
+
*/
|
|
52
|
+
static dependsOn(sourceId, targetId, weight) {
|
|
53
|
+
return this.create(sourceId, targetId, types_1.EdgeType.DEPENDS_ON, weight);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Create a BLOCKS edge
|
|
57
|
+
*/
|
|
58
|
+
static blocks(blockerId, blockedId, weight) {
|
|
59
|
+
return this.create(blockerId, blockedId, types_1.EdgeType.BLOCKS, weight);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Clone an edge with updated values
|
|
63
|
+
*/
|
|
64
|
+
static clone(edge, updates) {
|
|
65
|
+
return {
|
|
66
|
+
...edge,
|
|
67
|
+
updatedAt: new Date(),
|
|
68
|
+
...updates,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Increase the weight (confidence) of an edge
|
|
73
|
+
*/
|
|
74
|
+
static reinforceWeight(edge, factor = 1.1) {
|
|
75
|
+
return {
|
|
76
|
+
...edge,
|
|
77
|
+
weight: (edge.weight ?? 1.0) * factor,
|
|
78
|
+
updatedAt: new Date(),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.EdgeBuilder = EdgeBuilder;
|
|
83
|
+
//# sourceMappingURL=edge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/edge.ts"],"names":[],"mappings":";;;AAAA,mCAAyC;AACzC,mCAAoC;AAEpC;;GAEG;AACH,MAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,QAAgB,EAChB,QAAgB,EAChB,IAAc,EACd,MAAe,EACf,QAAkC;QAElC,OAAO;YACL,EAAE,EAAE,IAAA,mBAAU,GAAE;YAChB,QAAQ;YACR,QAAQ;YACR,IAAI;YACJ,MAAM,EAAE,MAAM,IAAI,GAAG;YACrB,QAAQ,EAAE,QAAQ,IAAI,EAAE;YACxB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CACZ,QAAgB,EAChB,QAAgB,EAChB,MAAe;QAEf,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,QAAgB,EAChB,QAAgB,EAChB,MAAe;QAEf,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CACb,YAAoB,EACpB,OAAe,EACf,MAAe;QAEf,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,gBAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CACf,YAAoB,EACpB,UAAkB,EAClB,MAAe;QAEf,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,gBAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,QAAgB,EAChB,QAAgB,EAChB,MAAe;QAEf,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,SAAiB,EACjB,SAAiB,EACjB,MAAe;QAEf,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CACV,IAAU,EACV,OAAuB;QAEvB,OAAO;YACL,GAAG,IAAI;YACP,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAU,EAAE,SAAiB,GAAG;QACrD,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM;YACrC,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;CACF;AAjHD,kCAiHC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { Edge } from "./types.js";
|
|
2
|
+
export interface HebbianOptions {
|
|
3
|
+
/** Amount added to edge.weight on co-activation. Default: 0.1 */
|
|
4
|
+
hebbianStrength?: number;
|
|
5
|
+
/** Multiplicative factor applied to all weights per decay cycle. Default: 0.99 */
|
|
6
|
+
decayRate?: number;
|
|
7
|
+
/** Edges whose weight falls below this are pruned. Default: 0.05 */
|
|
8
|
+
pruneThreshold?: number;
|
|
9
|
+
/** Hard ceiling on edge.weight after strengthening. Default: 5.0 */
|
|
10
|
+
maxWeight?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Minimal structural interface that ContextGraphManager satisfies.
|
|
14
|
+
* HebbianWeights only needs these methods — no import of the full class.
|
|
15
|
+
*/
|
|
16
|
+
export interface HebbianGraph {
|
|
17
|
+
getEdge(edgeId: string): Edge | undefined;
|
|
18
|
+
updateEdge(edgeId: string, updates: Partial<Edge>): Edge | undefined;
|
|
19
|
+
getAllEdges(): Edge[];
|
|
20
|
+
deleteEdge(edgeId: string): boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* HebbianWeights — Hebbian learning + temporal decay for graph edges.
|
|
24
|
+
*
|
|
25
|
+
* Models three neuronal behaviours:
|
|
26
|
+
*
|
|
27
|
+
* 1. **Strengthen** (`strengthen`): When two nodes are co-activated (both
|
|
28
|
+
* appear in the same query result), every edge connecting them gains
|
|
29
|
+
* `hebbianStrength` weight — "neurons that fire together, wire together."
|
|
30
|
+
*
|
|
31
|
+
* 2. **Decay** (`decay`): Every edge weight is multiplied by `decayRate`
|
|
32
|
+
* each cycle. Edges not reinforced by co-activation gradually weaken.
|
|
33
|
+
*
|
|
34
|
+
* 3. **Prune** (`prune`): Edges whose weight drops below `pruneThreshold`
|
|
35
|
+
* are deleted, keeping the graph clean and preventing stale connections
|
|
36
|
+
* from accumulating indefinitely.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const hebb = new HebbianWeights({ hebbianStrength: 0.1, decayRate: 0.99 });
|
|
41
|
+
* graph.setHebbianWeights(hebb);
|
|
42
|
+
*
|
|
43
|
+
* // queryNodesByLabel() auto-strengthens edges between co-activated nodes
|
|
44
|
+
* graph.queryNodesByLabel("TypeScript");
|
|
45
|
+
*
|
|
46
|
+
* // Run decay once per session cycle
|
|
47
|
+
* hebb.decay(graph);
|
|
48
|
+
*
|
|
49
|
+
* // Prune weak edges
|
|
50
|
+
* hebb.prune(graph);
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare class HebbianWeights {
|
|
54
|
+
private readonly hebbianStrength;
|
|
55
|
+
private readonly decayRate;
|
|
56
|
+
private readonly pruneThreshold;
|
|
57
|
+
private readonly maxWeight;
|
|
58
|
+
constructor(options?: HebbianOptions);
|
|
59
|
+
/** Read-only view of the resolved configuration. */
|
|
60
|
+
get config(): Required<HebbianOptions>;
|
|
61
|
+
/**
|
|
62
|
+
* Strengthen a single edge by `hebbianStrength`, capped at `maxWeight`.
|
|
63
|
+
*
|
|
64
|
+
* Intended to be called for every edge that connects two nodes that were
|
|
65
|
+
* co-activated (both appeared in the same query result).
|
|
66
|
+
*
|
|
67
|
+
* @returns The updated edge, or `undefined` if the edge was not found.
|
|
68
|
+
*/
|
|
69
|
+
strengthen(edgeId: string, graph: HebbianGraph): Edge | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Strengthen all edges that connect pairs of nodes within `nodeIds`.
|
|
72
|
+
*
|
|
73
|
+
* This is the batch form used by `ContextGraphManager` after a query:
|
|
74
|
+
* every edge whose `sourceId` AND `targetId` both appear in the result
|
|
75
|
+
* set gets strengthened once.
|
|
76
|
+
*
|
|
77
|
+
* @returns The list of edge ids that were strengthened.
|
|
78
|
+
*/
|
|
79
|
+
strengthenCoActivated(nodeIds: string[], graph: HebbianGraph): string[];
|
|
80
|
+
/**
|
|
81
|
+
* Apply temporal decay to every edge in the graph.
|
|
82
|
+
*
|
|
83
|
+
* Each edge weight is multiplied by `decayRate` (< 1.0).
|
|
84
|
+
* Edges reinforced by recent co-activation decay slower relative
|
|
85
|
+
* to their higher baseline weight.
|
|
86
|
+
*
|
|
87
|
+
* @returns The number of edges decayed.
|
|
88
|
+
*/
|
|
89
|
+
decay(graph: HebbianGraph): number;
|
|
90
|
+
/**
|
|
91
|
+
* Delete all edges whose weight has fallen below `pruneThreshold`.
|
|
92
|
+
*
|
|
93
|
+
* Can be called after `decay()` to clean up stale connections.
|
|
94
|
+
*
|
|
95
|
+
* @param minWeight Override the instance's `pruneThreshold` for this call.
|
|
96
|
+
* @returns The number of edges deleted.
|
|
97
|
+
*/
|
|
98
|
+
prune(graph: HebbianGraph, minWeight?: number): number;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=hebbian-weights.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hebbian-weights.d.ts","sourceRoot":"","sources":["../../src/hebbian-weights.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAMlC,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACrE,WAAW,IAAI,IAAI,EAAE,CAAC;IACtB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CACrC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,GAAE,cAAmB;IAOxC,oDAAoD;IACpD,IAAI,MAAM,IAAI,QAAQ,CAAC,cAAc,CAAC,CAOrC;IAMD;;;;;;;OAOG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS;IAUjE;;;;;;;;OAQG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE;IAoBvE;;;;;;;;OAQG;IACH,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;IAkBlC;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;CAgBvD"}
|