@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,236 @@
|
|
|
1
|
+
import { EdgeBuilder } from "./edge.js";
|
|
2
|
+
const DEFAULT_THRESHOLD = 0.72;
|
|
3
|
+
const DEFAULT_MAX_CONNECTIONS = 20;
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Stop-words (excluded from tokenization)
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
const STOP_WORDS = new Set([
|
|
8
|
+
"a", "an", "the", "is", "are", "was", "were", "be", "been", "being",
|
|
9
|
+
"have", "has", "had", "do", "does", "did", "will", "would", "could",
|
|
10
|
+
"should", "may", "might", "shall", "can", "need", "dare", "ought",
|
|
11
|
+
"for", "and", "nor", "but", "or", "yet", "so", "in", "on", "at",
|
|
12
|
+
"to", "of", "by", "up", "as", "if", "it", "its", "with", "this",
|
|
13
|
+
"that", "from", "not", "no", "vs", "via", "than", "then", "use",
|
|
14
|
+
"using", "used",
|
|
15
|
+
]);
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Tokenizer
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
/**
|
|
20
|
+
* Tokenize a text string into a normalised set of meaningful tokens.
|
|
21
|
+
*
|
|
22
|
+
* - Splits camelCase / PascalCase boundaries before lowercasing
|
|
23
|
+
* - Splits on whitespace and common punctuation
|
|
24
|
+
* - Filters tokens shorter than 2 chars
|
|
25
|
+
* - Removes stop-words
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* tokenize("TypeScript generics") → Set { "typescript", "generics" }
|
|
29
|
+
* tokenize("useContextManager") → Set { "context", "manager" }
|
|
30
|
+
*/
|
|
31
|
+
export function tokenize(text) {
|
|
32
|
+
// Split camelCase: "useContext" → "use Context"
|
|
33
|
+
const expanded = text
|
|
34
|
+
.replace(/([a-z])([A-Z])/g, "$1 $2")
|
|
35
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2");
|
|
36
|
+
const tokens = expanded
|
|
37
|
+
.toLowerCase()
|
|
38
|
+
.split(/[\s\-_/\\.,;:()[\]{}'"!?@#$%^&*+=<>|~`]+/)
|
|
39
|
+
.filter((t) => t.length >= 2 && !STOP_WORDS.has(t));
|
|
40
|
+
return new Set(tokens);
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Similarity
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
/**
|
|
46
|
+
* Jaccard similarity coefficient between two token sets.
|
|
47
|
+
* Returns 0 when both sets are empty.
|
|
48
|
+
*
|
|
49
|
+
* J(A,B) = |A ∩ B| / |A ∪ B|
|
|
50
|
+
*/
|
|
51
|
+
export function jaccardSimilarity(a, b) {
|
|
52
|
+
if (a.size === 0 && b.size === 0)
|
|
53
|
+
return 0;
|
|
54
|
+
let intersectionSize = 0;
|
|
55
|
+
for (const token of a) {
|
|
56
|
+
if (b.has(token))
|
|
57
|
+
intersectionSize++;
|
|
58
|
+
}
|
|
59
|
+
const unionSize = a.size + b.size - intersectionSize;
|
|
60
|
+
return intersectionSize / unionSize;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Cosine similarity between two dense embedding vectors.
|
|
64
|
+
* Returns a value in [−1, 1]. Returns 0 when either vector has zero magnitude.
|
|
65
|
+
*
|
|
66
|
+
* cos(θ) = (A · B) / (|A| × |B|)
|
|
67
|
+
*/
|
|
68
|
+
export function cosineSimilarity(a, b) {
|
|
69
|
+
if (a.length === 0 || b.length === 0)
|
|
70
|
+
return 0;
|
|
71
|
+
let dot = 0;
|
|
72
|
+
let magA = 0;
|
|
73
|
+
let magB = 0;
|
|
74
|
+
for (let i = 0; i < a.length; i++) {
|
|
75
|
+
dot += a[i] * b[i];
|
|
76
|
+
magA += a[i] * a[i];
|
|
77
|
+
magB += b[i] * b[i];
|
|
78
|
+
}
|
|
79
|
+
const denom = Math.sqrt(magA) * Math.sqrt(magB);
|
|
80
|
+
return denom === 0 ? 0 : dot / denom;
|
|
81
|
+
}
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// SynapticEngine
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
/**
|
|
86
|
+
* SynapticEngine — retroactive keyword-based linking between nodes.
|
|
87
|
+
*
|
|
88
|
+
* When a new node enters the graph, `linkRetroactively()` scans **all**
|
|
89
|
+
* existing nodes — regardless of when they were created — and creates
|
|
90
|
+
* RELATES edges wherever the Jaccard similarity between tokenised
|
|
91
|
+
* labels/descriptions meets the configured threshold.
|
|
92
|
+
*
|
|
93
|
+
* This gives WeaveGraph its neuronal behaviour: new concepts automatically
|
|
94
|
+
* form connections with historically relevant knowledge.
|
|
95
|
+
*
|
|
96
|
+
* Produced edges carry `metadata.synapse = true` so callers can distinguish
|
|
97
|
+
* auto-generated synaptic edges from manually created ones.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* const engine = new SynapticEngine({ threshold: 0.72, maxConnections: 20 });
|
|
102
|
+
*
|
|
103
|
+
* // Inject into ContextGraphManager
|
|
104
|
+
* graph.setSynapticEngine(engine);
|
|
105
|
+
*
|
|
106
|
+
* // From now on, every addNode() triggers retroactive linking automatically
|
|
107
|
+
* graph.addNode(NodeBuilder.concept("TypeScript generics"));
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export class SynapticEngine {
|
|
111
|
+
threshold;
|
|
112
|
+
maxConnections;
|
|
113
|
+
embeddingService;
|
|
114
|
+
constructor(options = {}) {
|
|
115
|
+
this.threshold = options.threshold ?? DEFAULT_THRESHOLD;
|
|
116
|
+
this.maxConnections = options.maxConnections ?? DEFAULT_MAX_CONNECTIONS;
|
|
117
|
+
this.embeddingService = options.embeddingService;
|
|
118
|
+
}
|
|
119
|
+
/** Read-only view of the resolved configuration. */
|
|
120
|
+
get config() {
|
|
121
|
+
return {
|
|
122
|
+
threshold: this.threshold,
|
|
123
|
+
maxConnections: this.maxConnections,
|
|
124
|
+
hasEmbeddings: this.embeddingService !== undefined,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/** Whether an embedding service is configured. */
|
|
128
|
+
get hasEmbeddingService() {
|
|
129
|
+
return this.embeddingService !== undefined;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Scan all existing nodes in `graph` and create RELATES edges to `newNode`
|
|
133
|
+
* wherever the Jaccard similarity between their tokenised text meets the
|
|
134
|
+
* threshold. At most `maxConnections` edges are created, selecting the
|
|
135
|
+
* highest-similarity candidates first.
|
|
136
|
+
*
|
|
137
|
+
* The new node itself **must already exist** in the graph before calling
|
|
138
|
+
* this method (so that `addEdge` can reference a valid node id).
|
|
139
|
+
*
|
|
140
|
+
* @returns The list of synaptic edges created and added to the graph.
|
|
141
|
+
*/
|
|
142
|
+
linkRetroactively(newNode, graph) {
|
|
143
|
+
const existing = graph.getAllNodes().filter((n) => n.id !== newNode.id);
|
|
144
|
+
if (existing.length === 0)
|
|
145
|
+
return [];
|
|
146
|
+
const newTokens = tokenize(this._nodeText(newNode));
|
|
147
|
+
if (newTokens.size === 0)
|
|
148
|
+
return [];
|
|
149
|
+
// Score every existing node
|
|
150
|
+
const candidates = [];
|
|
151
|
+
for (const node of existing) {
|
|
152
|
+
const tokens = tokenize(this._nodeText(node));
|
|
153
|
+
const score = jaccardSimilarity(newTokens, tokens);
|
|
154
|
+
if (score >= this.threshold) {
|
|
155
|
+
candidates.push({ node, score });
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Select top-maxConnections by descending similarity
|
|
159
|
+
candidates.sort((a, b) => b.score - a.score);
|
|
160
|
+
const selected = candidates.slice(0, this.maxConnections);
|
|
161
|
+
const created = [];
|
|
162
|
+
for (const { node, score } of selected) {
|
|
163
|
+
const base = EdgeBuilder.relates(newNode.id, node.id, score);
|
|
164
|
+
const synapticEdge = {
|
|
165
|
+
...base,
|
|
166
|
+
weight: score,
|
|
167
|
+
metadata: { synapse: true, similarity: score, mode: "keyword" },
|
|
168
|
+
};
|
|
169
|
+
graph.addEdge(synapticEdge);
|
|
170
|
+
created.push(synapticEdge);
|
|
171
|
+
}
|
|
172
|
+
return created;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Embedding-based retroactive linking (async).
|
|
176
|
+
*
|
|
177
|
+
* Requires an `embeddingService` to have been provided at construction time.
|
|
178
|
+
* If none is configured, falls back to keyword-based Jaccard similarity
|
|
179
|
+
* (identical to `linkRetroactively()`).
|
|
180
|
+
*
|
|
181
|
+
* Produced edges carry:
|
|
182
|
+
* - `metadata.synapse: true`
|
|
183
|
+
* - `metadata.similarity: number` — cosine similarity score
|
|
184
|
+
* - `metadata.mode: "embedding"` (or `"keyword"` on fallback)
|
|
185
|
+
*
|
|
186
|
+
* @returns The list of synaptic edges created and added to the graph.
|
|
187
|
+
*/
|
|
188
|
+
async linkRetroactivelyEmbedding(newNode, graph) {
|
|
189
|
+
// No embedding service — fall back to keyword path
|
|
190
|
+
if (!this.embeddingService) {
|
|
191
|
+
return this.linkRetroactively(newNode, graph);
|
|
192
|
+
}
|
|
193
|
+
const existing = graph.getAllNodes().filter((n) => n.id !== newNode.id);
|
|
194
|
+
if (existing.length === 0)
|
|
195
|
+
return [];
|
|
196
|
+
const newText = this._nodeText(newNode);
|
|
197
|
+
if (newText.trim().length === 0)
|
|
198
|
+
return [];
|
|
199
|
+
// Embed new node + all existing nodes concurrently
|
|
200
|
+
const [newEmbed, ...existingEmbeds] = await Promise.all([
|
|
201
|
+
this.embeddingService.embed(newText),
|
|
202
|
+
...existing.map((n) => this.embeddingService.embed(this._nodeText(n))),
|
|
203
|
+
]);
|
|
204
|
+
// Score every existing node via cosine similarity
|
|
205
|
+
const candidates = [];
|
|
206
|
+
for (let i = 0; i < existing.length; i++) {
|
|
207
|
+
const score = cosineSimilarity(newEmbed.embedding, existingEmbeds[i].embedding);
|
|
208
|
+
if (score >= this.threshold) {
|
|
209
|
+
candidates.push({ node: existing[i], score });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// Select top-maxConnections by descending similarity
|
|
213
|
+
candidates.sort((a, b) => b.score - a.score);
|
|
214
|
+
const selected = candidates.slice(0, this.maxConnections);
|
|
215
|
+
const created = [];
|
|
216
|
+
for (const { node, score } of selected) {
|
|
217
|
+
const base = EdgeBuilder.relates(newNode.id, node.id, score);
|
|
218
|
+
const synapticEdge = {
|
|
219
|
+
...base,
|
|
220
|
+
weight: score,
|
|
221
|
+
metadata: { synapse: true, similarity: score, mode: "embedding" },
|
|
222
|
+
};
|
|
223
|
+
graph.addEdge(synapticEdge);
|
|
224
|
+
created.push(synapticEdge);
|
|
225
|
+
}
|
|
226
|
+
return created;
|
|
227
|
+
}
|
|
228
|
+
// ------------------------------------------------------------------
|
|
229
|
+
// Private helpers
|
|
230
|
+
// ------------------------------------------------------------------
|
|
231
|
+
/** Combine label + description into a single text fingerprint for a node. */
|
|
232
|
+
_nodeText(node) {
|
|
233
|
+
return [node.label, node.description ?? ""].join(" ").trim();
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=synaptic-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synaptic-engine.js","sourceRoot":"","sources":["../src/synaptic-engine.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openweave/weave-graph",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "WeaveGraph — Persistent node & edge data model for AI agent context",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
|
-
"main": "./dist/index.js",
|
|
8
|
+
"main": "./dist/cjs/index.js",
|
|
9
|
+
"module": "./dist/index.js",
|
|
9
10
|
"types": "./dist/index.d.ts",
|
|
10
11
|
"files": [
|
|
11
12
|
"dist",
|
|
@@ -13,6 +14,7 @@
|
|
|
13
14
|
],
|
|
14
15
|
"exports": {
|
|
15
16
|
".": {
|
|
17
|
+
"require": "./dist/cjs/index.js",
|
|
16
18
|
"import": "./dist/index.js",
|
|
17
19
|
"types": "./dist/index.d.ts"
|
|
18
20
|
}
|
|
@@ -30,10 +32,10 @@
|
|
|
30
32
|
"vitest": "3.0.0"
|
|
31
33
|
},
|
|
32
34
|
"dependencies": {
|
|
33
|
-
"@openweave/weave-provider": "0.8.
|
|
35
|
+
"@openweave/weave-provider": "0.8.1"
|
|
34
36
|
},
|
|
35
37
|
"scripts": {
|
|
36
|
-
"build": "tsc",
|
|
38
|
+
"build": "tsc && tsc -p tsconfig.cjs.json && node -e \"require('fs').writeFileSync('dist/cjs/package.json', '{\\\"type\\\":\\\"commonjs\\\"}')\"",
|
|
37
39
|
"dev": "tsc --watch",
|
|
38
40
|
"test": "vitest",
|
|
39
41
|
"lint": "eslint src --max-warnings 0",
|