aifastdb 2.9.8 → 3.1.3

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 (44) hide show
  1. package/aifastdb.win32-x64-msvc.node +0 -0
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/llm-gateway.d.ts +73 -0
  6. package/dist/llm-gateway.d.ts.map +1 -1
  7. package/dist/llm-gateway.js.map +1 -1
  8. package/dist/mcp-server/index.d.ts +3 -1
  9. package/dist/mcp-server/index.d.ts.map +1 -1
  10. package/dist/mcp-server/index.js +146 -1
  11. package/dist/mcp-server/index.js.map +1 -1
  12. package/dist/social-graph-v2.d.ts +2 -1
  13. package/dist/social-graph-v2.d.ts.map +1 -1
  14. package/dist/social-graph-v2.js +14 -3
  15. package/dist/social-graph-v2.js.map +1 -1
  16. package/package.json +4 -1
  17. package/dist/carpool/carpool-matcher.test.d.ts +0 -9
  18. package/dist/carpool/carpool-matcher.test.d.ts.map +0 -1
  19. package/dist/carpool/carpool-matcher.test.js +0 -403
  20. package/dist/carpool/carpool-matcher.test.js.map +0 -1
  21. package/dist/carpool/carpool-repo.test.d.ts +0 -9
  22. package/dist/carpool/carpool-repo.test.d.ts.map +0 -1
  23. package/dist/carpool/carpool-repo.test.js +0 -452
  24. package/dist/carpool/carpool-repo.test.js.map +0 -1
  25. package/dist/carpool/carpool-service.test.d.ts +0 -9
  26. package/dist/carpool/carpool-service.test.d.ts.map +0 -1
  27. package/dist/carpool/carpool-service.test.js +0 -455
  28. package/dist/carpool/carpool-service.test.js.map +0 -1
  29. package/dist/carpool/vehicle.test.d.ts +0 -8
  30. package/dist/carpool/vehicle.test.d.ts.map +0 -1
  31. package/dist/carpool/vehicle.test.js +0 -540
  32. package/dist/carpool/vehicle.test.js.map +0 -1
  33. package/dist/social-graph-v2-traversal.test.d.ts +0 -14
  34. package/dist/social-graph-v2-traversal.test.d.ts.map +0 -1
  35. package/dist/social-graph-v2-traversal.test.js +0 -202
  36. package/dist/social-graph-v2-traversal.test.js.map +0 -1
  37. package/dist/social-graph-v2-uri.test.d.ts +0 -12
  38. package/dist/social-graph-v2-uri.test.d.ts.map +0 -1
  39. package/dist/social-graph-v2-uri.test.js +0 -131
  40. package/dist/social-graph-v2-uri.test.js.map +0 -1
  41. package/dist/social-graph-v2-vector.test.d.ts +0 -14
  42. package/dist/social-graph-v2-vector.test.d.ts.map +0 -1
  43. package/dist/social-graph-v2-vector.test.js +0 -241
  44. package/dist/social-graph-v2-vector.test.js.map +0 -1
@@ -1,202 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- /**
4
- * SocialGraphV2 Graph Traversal & Mutations — Integration Test (T107.4)
5
- *
6
- * Covers:
7
- * - outgoingByType / incomingByType (typed relation queries)
8
- * - extractSubgraph (N-hop sub-graph extraction)
9
- * - traverse (BFS/DFS/WeightedBFS)
10
- * - applyMutations (batch graph mutations)
11
- * - updateRelationWeight / adjustRelationWeight / updateRelationMetadata
12
- * - dynamicRecordAccess / dynamicDemote / dynamicPromote / dynamicScan
13
- */
14
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- var desc = Object.getOwnPropertyDescriptor(m, k);
17
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
- desc = { enumerable: true, get: function() { return m[k]; } };
19
- }
20
- Object.defineProperty(o, k2, desc);
21
- }) : (function(o, m, k, k2) {
22
- if (k2 === undefined) k2 = k;
23
- o[k2] = m[k];
24
- }));
25
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
- Object.defineProperty(o, "default", { enumerable: true, value: v });
27
- }) : function(o, v) {
28
- o["default"] = v;
29
- });
30
- var __importStar = (this && this.__importStar) || (function () {
31
- var ownKeys = function(o) {
32
- ownKeys = Object.getOwnPropertyNames || function (o) {
33
- var ar = [];
34
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
- return ar;
36
- };
37
- return ownKeys(o);
38
- };
39
- return function (mod) {
40
- if (mod && mod.__esModule) return mod;
41
- var result = {};
42
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
- __setModuleDefault(result, mod);
44
- return result;
45
- };
46
- })();
47
- Object.defineProperty(exports, "__esModule", { value: true });
48
- const os = __importStar(require("os"));
49
- const path = __importStar(require("path"));
50
- const fs = __importStar(require("fs"));
51
- const social_graph_v2_1 = require("./social-graph-v2");
52
- // ============================================================================
53
- // Test Utilities
54
- // ============================================================================
55
- let passed = 0;
56
- let failed = 0;
57
- const failures = [];
58
- function assert(condition, message) {
59
- if (condition) {
60
- passed++;
61
- console.log(` ✅ ${message}`);
62
- }
63
- else {
64
- failed++;
65
- failures.push(message);
66
- console.log(` ❌ ${message}`);
67
- }
68
- }
69
- function section(name) {
70
- console.log(`\n── ${name} ──`);
71
- }
72
- function createTempDir() {
73
- const dir = path.join(os.tmpdir(), `sgv2-traversal-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
74
- fs.mkdirSync(dir, { recursive: true });
75
- return dir;
76
- }
77
- function cleanup(dir) {
78
- try {
79
- fs.rmSync(dir, { recursive: true, force: true });
80
- }
81
- catch { /* ignore */ }
82
- }
83
- // ============================================================================
84
- // Main Test
85
- // ============================================================================
86
- async function main() {
87
- console.log('=== SocialGraphV2 Traversal & Mutations Tests (Phase-107) ===\n');
88
- const dir = createTempDir();
89
- let sg;
90
- try {
91
- sg = social_graph_v2_1.SocialGraphV2.open(dir);
92
- // Build a small test graph:
93
- // Alice --FRIEND--> Bob --FRIEND--> Charlie
94
- // Alice --COLLEAGUE--> Dave
95
- // Bob --COLLEAGUE--> Eve
96
- sg.addPerson({ id: 'alice', name: 'Alice', properties: { gender: 'F' } });
97
- sg.addPerson({ id: 'bob', name: 'Bob', properties: { gender: 'M' } });
98
- sg.addPerson({ id: 'charlie', name: 'Charlie', properties: { gender: 'M' } });
99
- sg.addPerson({ id: 'dave', name: 'Dave', properties: { gender: 'M' } });
100
- sg.addPerson({ id: 'eve', name: 'Eve', properties: { gender: 'F' } });
101
- sg.addFriend('alice', 'bob', { relationType: 'friend', weight: 0.9 });
102
- sg.addFriend('bob', 'charlie', { relationType: 'friend', weight: 0.8 });
103
- sg.addFriend('alice', 'dave', { relationType: 'colleague', weight: 0.5 });
104
- sg.addFriend('bob', 'eve', { relationType: 'colleague', weight: 0.3 });
105
- // ── Typed Relation Queries ──
106
- section('outgoingByType / incomingByType');
107
- const friendsFromAlice = sg.outgoingByType('alice', 'FRIEND');
108
- assert(friendsFromAlice.length >= 1, `outgoingByType FRIEND from Alice found ${friendsFromAlice.length} relation(s)`);
109
- const colleaguesFromAlice = sg.outgoingByType('alice', 'COLLEAGUE');
110
- assert(colleaguesFromAlice.length >= 1, `outgoingByType COLLEAGUE from Alice found ${colleaguesFromAlice.length} relation(s)`);
111
- const incomingToBob = sg.incomingByType('bob', 'FRIEND');
112
- assert(incomingToBob.length >= 1, `incomingByType FRIEND to Bob found ${incomingToBob.length} relation(s)`);
113
- // ── Sub-graph Extraction ──
114
- section('extractSubgraph');
115
- const subgraph1 = sg.extractSubgraph('alice', { max_hops: 1 });
116
- assert(subgraph1 != null, 'extractSubgraph returned a result');
117
- assert(subgraph1.root_id === 'alice', 'subgraph root_id is alice');
118
- assert(subgraph1.entity_count >= 3, `subgraph 1-hop has ${subgraph1.entity_count} entities (≥3 expected: alice+bob+dave)`);
119
- const subgraph2 = sg.extractSubgraph('alice', { max_hops: 2 });
120
- assert(subgraph2.entity_count >= 4, `subgraph 2-hop has ${subgraph2.entity_count} entities (≥4 expected)`);
121
- const subgraphFiltered = sg.extractSubgraph('alice', { max_hops: 2, relation_type_filter: ['FRIEND'] });
122
- // With FRIEND filter: alice → bob → charlie, should not include dave/eve (COLLEAGUE)
123
- assert(subgraphFiltered.entity_count >= 2, `subgraph FRIEND-only has ${subgraphFiltered.entity_count} entities`);
124
- // ── Graph Traversal ──
125
- section('traverse');
126
- const bfsResult = sg.traverse('alice', { max_hops: 3, strategy: 'BFS' });
127
- assert(bfsResult != null, 'BFS traverse returned a result');
128
- assert(bfsResult.visited_order.length >= 3, `BFS visited ${bfsResult.visited_order.length} entities`);
129
- assert(bfsResult.visited_order[0] === 'alice', 'BFS starts with alice');
130
- const dfsResult = sg.traverse('alice', { max_hops: 3, strategy: 'DFS' });
131
- assert(dfsResult != null, 'DFS traverse returned a result');
132
- assert(dfsResult.visited_order.length >= 3, `DFS visited ${dfsResult.visited_order.length} entities`);
133
- const weightedResult = sg.traverse('alice', { max_hops: 2, strategy: 'WeightedBFS' });
134
- assert(weightedResult != null, 'WeightedBFS traverse returned a result');
135
- assert(weightedResult.visited_order.length >= 2, `WeightedBFS visited ${weightedResult.visited_order.length} entities`);
136
- // ── Relation Weight Updates ──
137
- section('updateRelationWeight / adjustRelationWeight / updateRelationMetadata');
138
- // Find a relation to update
139
- const aliceRels = sg.getEntityRelations('alice');
140
- const friendRel = aliceRels.find((r) => r.relation_type === 'FRIEND' || r.relationType === 'FRIEND');
141
- if (friendRel) {
142
- const relId = friendRel.id;
143
- await sg.updateRelationWeight(relId, 'alice', 0.95);
144
- assert(true, `updateRelationWeight succeeded for relation ${relId}`);
145
- await sg.adjustRelationWeight(relId, 'alice', 0.02);
146
- assert(true, `adjustRelationWeight succeeded for relation ${relId}`);
147
- await sg.updateRelationMetadata(relId, 'alice', 'note', 'best-friend');
148
- assert(true, `updateRelationMetadata succeeded for relation ${relId}`);
149
- }
150
- else {
151
- assert(false, 'Could not find a FRIEND relation to test updates on');
152
- }
153
- // ── Batch Mutations ──
154
- section('applyMutations');
155
- const mutCount = await sg.applyMutations([
156
- {
157
- type: 'PutEntity',
158
- entity: { id: 'frank', name: 'Frank', entity_type: 'person', properties: {}, memory_refs: [], created_at: Date.now(), updated_at: Date.now() },
159
- },
160
- {
161
- type: 'PutRelation',
162
- relation: { id: 'rel-frank-alice', source: 'frank', target: 'alice', relation_type: 'FRIEND', weight: 0.7, bidirectional: false, metadata: {}, created_at: Date.now() },
163
- },
164
- ]);
165
- assert(mutCount === 2, `applyMutations applied ${mutCount} mutations (expected 2)`);
166
- // Verify the entity was created
167
- const frank = sg.getEntity('frank');
168
- assert(frank != null, 'Frank entity exists after PutEntity mutation');
169
- // ── Dynamic Node Management ──
170
- section('dynamicRecordAccess / dynamicDemote / dynamicPromote');
171
- const stats = sg.dynamicRecordAccess('alice');
172
- assert(stats != null, 'dynamicRecordAccess returned stats for alice');
173
- if (stats) {
174
- assert(stats.hit_count >= 1, `alice hit_count=${stats.hit_count} after recordAccess`);
175
- }
176
- const demoted = sg.dynamicDemote('charlie');
177
- assert(typeof demoted === 'boolean', `dynamicDemote returned boolean: ${demoted}`);
178
- const isShadow = sg.isShadowEntity('charlie');
179
- assert(typeof isShadow === 'boolean', `isShadowEntity returned boolean: ${isShadow}`);
180
- if (isShadow) {
181
- const promoted = sg.dynamicPromote('charlie');
182
- assert(typeof promoted === 'boolean', `dynamicPromote returned boolean: ${promoted}`);
183
- }
184
- // ── Summary ──
185
- console.log(`\n${'═'.repeat(50)}`);
186
- console.log(`Total: ${passed + failed} | ✅ Passed: ${passed} | ❌ Failed: ${failed}`);
187
- if (failures.length > 0) {
188
- console.log('\nFailures:');
189
- failures.forEach((f) => console.log(` - ${f}`));
190
- }
191
- console.log(`${'═'.repeat(50)}`);
192
- }
193
- finally {
194
- cleanup(dir);
195
- }
196
- process.exit(failed > 0 ? 1 : 0);
197
- }
198
- main().catch((err) => {
199
- console.error('Fatal error:', err);
200
- process.exit(2);
201
- });
202
- //# sourceMappingURL=social-graph-v2-traversal.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"social-graph-v2-traversal.test.js","sourceRoot":"","sources":["../ts/social-graph-v2-traversal.test.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,uDAAkD;AAElD,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,MAAM,QAAQ,GAAa,EAAE,CAAC;AAE9B,SAAS,MAAM,CAAC,SAAkB,EAAE,OAAe;IACjD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,CAAC;QACT,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,uBAAuB,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/G,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IAE/E,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,EAAiB,CAAC;IAEtB,IAAI,CAAC;QACH,EAAE,GAAG,+BAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7B,4BAA4B;QAC5B,8CAA8C;QAC9C,8BAA8B;QAC9B,2BAA2B;QAC3B,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1E,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACtE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9E,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACxE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAEtE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACtE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAEvE,+BAA+B;QAC/B,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAE3C,MAAM,gBAAgB,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9D,MAAM,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,EAAE,0CAA0C,gBAAgB,CAAC,MAAM,cAAc,CAAC,CAAC;QAEtH,MAAM,mBAAmB,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpE,MAAM,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,EAAE,6CAA6C,mBAAmB,CAAC,MAAM,cAAc,CAAC,CAAC;QAE/H,MAAM,aAAa,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACzD,MAAM,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE,sCAAsC,aAAa,CAAC,MAAM,cAAc,CAAC,CAAC;QAE5G,6BAA6B;QAC7B,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAE3B,MAAM,SAAS,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,mCAAmC,CAAC,CAAC;QAC/D,MAAM,CAAC,SAAS,CAAC,OAAO,KAAK,OAAO,EAAE,2BAA2B,CAAC,CAAC;QACnE,MAAM,CAAC,SAAS,CAAC,YAAY,IAAI,CAAC,EAAE,sBAAsB,SAAS,CAAC,YAAY,yCAAyC,CAAC,CAAC;QAE3H,MAAM,SAAS,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,SAAS,CAAC,YAAY,IAAI,CAAC,EAAE,sBAAsB,SAAS,CAAC,YAAY,yBAAyB,CAAC,CAAC;QAE3G,MAAM,gBAAgB,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,oBAAoB,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxG,qFAAqF;QACrF,MAAM,CAAC,gBAAgB,CAAC,YAAY,IAAI,CAAC,EAAE,4BAA4B,gBAAgB,CAAC,YAAY,WAAW,CAAC,CAAC;QAEjH,wBAAwB;QACxB,OAAO,CAAC,UAAU,CAAC,CAAC;QAEpB,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,gCAAgC,CAAC,CAAC;QAC5D,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE,eAAe,SAAS,CAAC,aAAa,CAAC,MAAM,WAAW,CAAC,CAAC;QACtG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,uBAAuB,CAAC,CAAC;QAExE,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,gCAAgC,CAAC,CAAC;QAC5D,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE,eAAe,SAAS,CAAC,aAAa,CAAC,MAAM,WAAW,CAAC,CAAC;QAEtG,MAAM,cAAc,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;QACtF,MAAM,CAAC,cAAc,IAAI,IAAI,EAAE,wCAAwC,CAAC,CAAC;QACzE,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE,uBAAuB,cAAc,CAAC,aAAa,CAAC,MAAM,WAAW,CAAC,CAAC;QAExH,gCAAgC;QAChC,OAAO,CAAC,sEAAsE,CAAC,CAAC;QAEhF,4BAA4B;QAC5B,MAAM,SAAS,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,QAAQ,IAAI,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC;QAC1G,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC;YAE3B,MAAM,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,EAAE,+CAA+C,KAAK,EAAE,CAAC,CAAC;YAErE,MAAM,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,EAAE,+CAA+C,KAAK,EAAE,CAAC,CAAC;YAErE,MAAM,EAAE,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YACvE,MAAM,CAAC,IAAI,EAAE,iDAAiD,KAAK,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,EAAE,qDAAqD,CAAC,CAAC;QACvE,CAAC;QAED,wBAAwB;QACxB,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAE1B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,cAAc,CAAC;YACvC;gBACE,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE;aAC/I;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,QAAQ,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE;aACxK;SACF,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,0BAA0B,QAAQ,yBAAyB,CAAC,CAAC;QAEpF,gCAAgC;QAChC,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,8CAA8C,CAAC,CAAC;QAEtE,gCAAgC;QAChC,OAAO,CAAC,sDAAsD,CAAC,CAAC;QAEhE,MAAM,KAAK,GAAG,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,8CAA8C,CAAC,CAAC;QACtE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,mBAAmB,KAAK,CAAC,SAAS,qBAAqB,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,OAAO,KAAK,SAAS,EAAE,mCAAmC,OAAO,EAAE,CAAC,CAAC;QAEnF,MAAM,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,QAAQ,KAAK,SAAS,EAAE,oCAAoC,QAAQ,EAAE,CAAC,CAAC;QAEtF,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,QAAQ,KAAK,SAAS,EAAE,oCAAoC,QAAQ,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,gBAAgB;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,GAAG,MAAM,gBAAgB,MAAM,gBAAgB,MAAM,EAAE,CAAC,CAAC;QACrF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEnC,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * SocialGraphV2 URI / Path Indexing — Integration Test (T132.5)
4
- *
5
- * Covers:
6
- * - anchorUpsert() auto URI/path generation
7
- * - anchorFindByUri() direct URI lookup
8
- * - anchorListByPath() directory-style browsing
9
- * - anchorBackfillUriPath() idempotent migration API
10
- */
11
- export {};
12
- //# sourceMappingURL=social-graph-v2-uri.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"social-graph-v2-uri.test.d.ts","sourceRoot":"","sources":["../ts/social-graph-v2-uri.test.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
@@ -1,131 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- /**
4
- * SocialGraphV2 URI / Path Indexing — Integration Test (T132.5)
5
- *
6
- * Covers:
7
- * - anchorUpsert() auto URI/path generation
8
- * - anchorFindByUri() direct URI lookup
9
- * - anchorListByPath() directory-style browsing
10
- * - anchorBackfillUriPath() idempotent migration API
11
- */
12
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- var desc = Object.getOwnPropertyDescriptor(m, k);
15
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
- desc = { enumerable: true, get: function() { return m[k]; } };
17
- }
18
- Object.defineProperty(o, k2, desc);
19
- }) : (function(o, m, k, k2) {
20
- if (k2 === undefined) k2 = k;
21
- o[k2] = m[k];
22
- }));
23
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
- Object.defineProperty(o, "default", { enumerable: true, value: v });
25
- }) : function(o, v) {
26
- o["default"] = v;
27
- });
28
- var __importStar = (this && this.__importStar) || (function () {
29
- var ownKeys = function(o) {
30
- ownKeys = Object.getOwnPropertyNames || function (o) {
31
- var ar = [];
32
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
- return ar;
34
- };
35
- return ownKeys(o);
36
- };
37
- return function (mod) {
38
- if (mod && mod.__esModule) return mod;
39
- var result = {};
40
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
- __setModuleDefault(result, mod);
42
- return result;
43
- };
44
- })();
45
- Object.defineProperty(exports, "__esModule", { value: true });
46
- const os = __importStar(require("os"));
47
- const path = __importStar(require("path"));
48
- const fs = __importStar(require("fs"));
49
- const social_graph_v2_1 = require("./social-graph-v2");
50
- let passed = 0;
51
- let failed = 0;
52
- const failures = [];
53
- function assert(condition, message) {
54
- if (condition) {
55
- passed++;
56
- console.log(` OK ${message}`);
57
- }
58
- else {
59
- failed++;
60
- failures.push(message);
61
- console.log(` FAIL ${message}`);
62
- }
63
- }
64
- function section(name) {
65
- console.log(`\n-- ${name} --`);
66
- }
67
- function createTempDir() {
68
- const dir = path.join(os.tmpdir(), `sgv2-uri-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
69
- fs.mkdirSync(dir, { recursive: true });
70
- return dir;
71
- }
72
- function cleanup(dir) {
73
- try {
74
- fs.rmSync(dir, { recursive: true, force: true });
75
- }
76
- catch {
77
- // ignore
78
- }
79
- }
80
- async function main() {
81
- console.log('=== SocialGraphV2 URI / Path Integration Test (Phase-132) ===');
82
- const dir = createTempDir();
83
- let sg = null;
84
- try {
85
- sg = social_graph_v2_1.SocialGraphV2.open(dir);
86
- section('anchorUpsert auto URI/path');
87
- const rag = sg.anchorUpsert('RagChat', 'module', 'RAG chat module');
88
- const planner = sg.anchorUpsert('Query Planner', 'module', 'planner module');
89
- const concept = sg.anchorUpsert('Score Propagation', 'concept', 'ranking strategy');
90
- assert(!!rag.uri && rag.uri.startsWith('aidb://memory/anchors/module/'), 'rag.uri generated');
91
- assert(rag.path === 'anchors/module/ragchat', 'rag.path normalized to anchors/module/ragchat');
92
- assert(planner.path === 'anchors/module/query-planner', 'planner.path slug normalized');
93
- assert(concept.path === 'anchors/concept/score-propagation', 'concept.path slug normalized');
94
- section('anchorFindByUri direct lookup');
95
- const foundByUri = rag.uri ? sg.anchorFindByUri(rag.uri) : null;
96
- assert(foundByUri !== null, 'anchorFindByUri returns anchor');
97
- assert(foundByUri?.id === rag.id, 'anchorFindByUri returns expected anchor id');
98
- section('anchorListByPath directory browsing');
99
- const moduleAnchors = sg.anchorListByPath('anchors/module');
100
- assert(moduleAnchors.length >= 2, 'path prefix anchors/module returns module anchors');
101
- assert(moduleAnchors.some((a) => a.id === rag.id) &&
102
- moduleAnchors.some((a) => a.id === planner.id), 'module path contains rag and planner anchors');
103
- assert(moduleAnchors.every((a) => (a.path ?? '').startsWith('anchors/module/')), 'module path result items keep module prefix');
104
- const moduleAnchorsByUri = sg.anchorListByPath('aidb://memory/anchors/module');
105
- assert(moduleAnchorsByUri.length >= 2, 'URI prefix works for directory listing');
106
- section('anchorBackfillUriPath idempotent migration API');
107
- const first = sg.anchorBackfillUriPath();
108
- assert(first.total_anchors >= 3, 'backfill report total_anchors is valid');
109
- assert(first.updated_anchors === 0, 'fresh data should not need backfill updates');
110
- const second = sg.anchorBackfillUriPath();
111
- assert(second.updated_anchors === 0, 'second backfill remains zero updates (idempotent)');
112
- assert(second.unchanged_anchors >= 3, 'second backfill unchanged_anchors is valid');
113
- console.log(`\nTotal: ${passed + failed} | Passed: ${passed} | Failed: ${failed}`);
114
- if (failures.length > 0) {
115
- console.log('Failures:');
116
- for (const f of failures)
117
- console.log(` - ${f}`);
118
- }
119
- }
120
- finally {
121
- if (sg)
122
- sg.shutdown();
123
- cleanup(dir);
124
- }
125
- process.exit(failed > 0 ? 1 : 0);
126
- }
127
- main().catch((err) => {
128
- console.error('Fatal error:', err);
129
- process.exit(2);
130
- });
131
- //# sourceMappingURL=social-graph-v2-uri.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"social-graph-v2-uri.test.js","sourceRoot":"","sources":["../ts/social-graph-v2-uri.test.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * SocialGraphV2 Vector Search — Integration Test (T32.4)
4
- *
5
- * Covers:
6
- * - Vector search configuration via constructor
7
- * - isVectorSearchEnabled / vectorCount
8
- * - indexEntity / removeEntityVector
9
- * - searchEntitiesByVector (k-NN)
10
- * - hybridSearch (vector + text fusion)
11
- * - Entity type filtering
12
- */
13
- export {};
14
- //# sourceMappingURL=social-graph-v2-vector.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"social-graph-v2-vector.test.d.ts","sourceRoot":"","sources":["../ts/social-graph-v2-vector.test.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
@@ -1,241 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- /**
4
- * SocialGraphV2 Vector Search — Integration Test (T32.4)
5
- *
6
- * Covers:
7
- * - Vector search configuration via constructor
8
- * - isVectorSearchEnabled / vectorCount
9
- * - indexEntity / removeEntityVector
10
- * - searchEntitiesByVector (k-NN)
11
- * - hybridSearch (vector + text fusion)
12
- * - Entity type filtering
13
- */
14
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- var desc = Object.getOwnPropertyDescriptor(m, k);
17
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
- desc = { enumerable: true, get: function() { return m[k]; } };
19
- }
20
- Object.defineProperty(o, k2, desc);
21
- }) : (function(o, m, k, k2) {
22
- if (k2 === undefined) k2 = k;
23
- o[k2] = m[k];
24
- }));
25
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
- Object.defineProperty(o, "default", { enumerable: true, value: v });
27
- }) : function(o, v) {
28
- o["default"] = v;
29
- });
30
- var __importStar = (this && this.__importStar) || (function () {
31
- var ownKeys = function(o) {
32
- ownKeys = Object.getOwnPropertyNames || function (o) {
33
- var ar = [];
34
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
- return ar;
36
- };
37
- return ownKeys(o);
38
- };
39
- return function (mod) {
40
- if (mod && mod.__esModule) return mod;
41
- var result = {};
42
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
- __setModuleDefault(result, mod);
44
- return result;
45
- };
46
- })();
47
- Object.defineProperty(exports, "__esModule", { value: true });
48
- const os = __importStar(require("os"));
49
- const path = __importStar(require("path"));
50
- const fs = __importStar(require("fs"));
51
- const social_graph_v2_1 = require("./social-graph-v2");
52
- // ============================================================================
53
- // Test Utilities
54
- // ============================================================================
55
- let passed = 0;
56
- let failed = 0;
57
- const failures = [];
58
- function assert(condition, message) {
59
- if (condition) {
60
- passed++;
61
- console.log(` ✅ ${message}`);
62
- }
63
- else {
64
- failed++;
65
- failures.push(message);
66
- console.log(` ❌ ${message}`);
67
- }
68
- }
69
- function assertThrows(fn, message) {
70
- try {
71
- fn();
72
- failed++;
73
- failures.push(`${message} (no error thrown)`);
74
- console.log(` ❌ ${message} (no error thrown)`);
75
- }
76
- catch {
77
- passed++;
78
- console.log(` ✅ ${message}`);
79
- }
80
- }
81
- function section(name) {
82
- console.log(`\n━━━ ${name} ━━━`);
83
- }
84
- /** Create a simple embedding vector of given dimension filled with a base value */
85
- function makeEmbedding(dim, base) {
86
- const vec = [];
87
- for (let i = 0; i < dim; i++) {
88
- vec.push(base + i * 0.001);
89
- }
90
- return vec;
91
- }
92
- // ============================================================================
93
- // Main Test
94
- // ============================================================================
95
- async function main() {
96
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sg-vector-test-'));
97
- console.log(`Test directory: ${tmpDir}`);
98
- try {
99
- // ================================================================
100
- // 1. Vector search disabled (default)
101
- // ================================================================
102
- section('1. Vector search disabled by default');
103
- {
104
- const sg = social_graph_v2_1.SocialGraphV2.open(path.join(tmpDir, 'no-vector'));
105
- assert(sg.isVectorSearchEnabled() === false, 'isVectorSearchEnabled() should be false');
106
- assert(sg.vectorCount() === 0, 'vectorCount() should be 0');
107
- sg.shutdown();
108
- }
109
- // ================================================================
110
- // 2. Vector search enabled via config
111
- // ================================================================
112
- section('2. Enable vector search via config');
113
- const DIM = 4;
114
- const sg = new social_graph_v2_1.SocialGraphV2({
115
- path: path.join(tmpDir, 'with-vector'),
116
- walEnabled: true,
117
- vectorSearch: { dimension: DIM },
118
- });
119
- assert(sg.isVectorSearchEnabled() === true, 'isVectorSearchEnabled() should be true');
120
- assert(sg.vectorCount() === 0, 'vectorCount() should be 0 initially');
121
- // ================================================================
122
- // 3. Add entities and index them
123
- // ================================================================
124
- section('3. Index entities with vectors');
125
- const alice = sg.addPerson({ name: 'Alice' });
126
- const bob = sg.addPerson({ name: 'Bob' });
127
- const charlie = sg.addPerson({ name: 'Charlie' });
128
- const embAlice = makeEmbedding(DIM, 0.1); // close to 0.1
129
- const embBob = makeEmbedding(DIM, 0.5); // close to 0.5
130
- const embCharlie = makeEmbedding(DIM, 0.9); // close to 0.9
131
- sg.indexEntity(alice.id, embAlice);
132
- assert(sg.vectorCount() === 1, 'vectorCount() should be 1 after indexing Alice');
133
- sg.indexEntity(bob.id, embBob);
134
- sg.indexEntity(charlie.id, embCharlie);
135
- assert(sg.vectorCount() === 3, 'vectorCount() should be 3 after indexing all');
136
- // ================================================================
137
- // 4. indexEntity on non-existent entity should throw
138
- // ================================================================
139
- section('4. indexEntity error cases');
140
- assertThrows(() => sg.indexEntity('non-existent-id', makeEmbedding(DIM, 0.0)), 'indexEntity on non-existent entity should throw');
141
- // ================================================================
142
- // 5. searchEntitiesByVector — basic k-NN
143
- // ================================================================
144
- section('5. searchEntitiesByVector (k-NN)');
145
- // Query close to Alice's embedding
146
- const queryNearAlice = makeEmbedding(DIM, 0.11);
147
- const results1 = sg.searchEntitiesByVector(queryNearAlice, 3);
148
- assert(results1.length === 3, 'Should return 3 results');
149
- assert(results1[0].entityId === alice.id, 'Closest to Alice query should be Alice');
150
- assert(typeof results1[0].score === 'number', 'Result should have numeric score');
151
- assert(results1[0].entity !== null, 'Result should have entity data');
152
- console.log(` Top result: ${results1[0].entity.name} (score=${results1[0].score.toFixed(4)})`);
153
- // Query close to Charlie's embedding
154
- const queryNearCharlie = makeEmbedding(DIM, 0.89);
155
- const results2 = sg.searchEntitiesByVector(queryNearCharlie, 1);
156
- assert(results2.length === 1, 'Should return 1 result with k=1');
157
- assert(results2[0].entityId === charlie.id, 'Closest to Charlie query should be Charlie');
158
- // ================================================================
159
- // 6. searchEntitiesByVector — with entity type filter
160
- // ================================================================
161
- section('6. Entity type filtering');
162
- // Add a non-person entity
163
- const techTag = sg.addTag({ name: 'Tech', tagType: 'skill' });
164
- sg.indexEntity(techTag.id, makeEmbedding(DIM, 0.12)); // close to Alice
165
- const personResults = sg.searchEntitiesByVector(queryNearAlice, 10, 'person');
166
- assert(personResults.every(r => r.entity.entity_type === 'person'), 'Filtering by person should only return person entities');
167
- console.log(` person-only results: ${personResults.length}`);
168
- // ================================================================
169
- // 7. removeEntityVector
170
- // ================================================================
171
- section('7. removeEntityVector');
172
- const countBefore = sg.vectorCount();
173
- sg.removeEntityVector(alice.id);
174
- // HNSW soft-delete: count may or may not decrease, but search should not return removed entity
175
- const resultsAfterRemove = sg.searchEntitiesByVector(embAlice, 10);
176
- assert(resultsAfterRemove.every(r => r.entityId !== alice.id), 'Removed entity should not appear in search results');
177
- console.log(` vectorCount before=${countBefore}, after=${sg.vectorCount()}`);
178
- // ================================================================
179
- // 8. Idempotent re-index
180
- // ================================================================
181
- section('8. Idempotent re-index');
182
- // Re-indexing same entity should not error
183
- sg.indexEntity(bob.id, makeEmbedding(DIM, 0.6));
184
- assert(true, 'Re-indexing Bob should not throw');
185
- // Bob should still be searchable
186
- const reindexResults = sg.searchEntitiesByVector(makeEmbedding(DIM, 0.6), 1);
187
- assert(reindexResults.length >= 1, 'Bob should be searchable after re-index');
188
- // ================================================================
189
- // 9. hybridSearch
190
- // ================================================================
191
- section('9. hybridSearch');
192
- // Vector + text hybrid
193
- const hybridResults = sg.hybridSearch(embBob, 'Bob', 5);
194
- assert(hybridResults.length > 0, 'hybridSearch should return results');
195
- console.log(` hybridSearch results: ${hybridResults.length}`);
196
- for (const r of hybridResults.slice(0, 3)) {
197
- console.log(` ${r.entityId}: score=${r.score.toFixed(4)}, name=${r.entity?.name}`);
198
- }
199
- // Text-only hybrid
200
- const textOnlyResults = sg.hybridSearch(null, 'Charlie', 5);
201
- assert(textOnlyResults.length > 0, 'Text-only hybridSearch should return results');
202
- // Vector-only hybrid
203
- const vecOnlyResults = sg.hybridSearch(embCharlie, null, 5);
204
- assert(vecOnlyResults.length > 0, 'Vector-only hybridSearch should return results');
205
- // ================================================================
206
- // 10. Async indexEntity
207
- // ================================================================
208
- section('10. Async API');
209
- const dave = sg.addPerson({ name: 'Dave' });
210
- await sg.indexEntityAsync(dave.id, makeEmbedding(DIM, 0.3));
211
- assert(true, 'indexEntityAsync should complete without error');
212
- const asyncResults = sg.searchEntitiesByVector(makeEmbedding(DIM, 0.3), 1);
213
- assert(asyncResults.length >= 1, 'Dave should be found after async indexing');
214
- // ================================================================
215
- // Cleanup
216
- // ================================================================
217
- sg.flush();
218
- sg.shutdown();
219
- // ================================================================
220
- // Summary
221
- // ================================================================
222
- console.log('\n' + '='.repeat(60));
223
- console.log(`T32.4 Results: ${passed} passed, ${failed} failed`);
224
- if (failures.length > 0) {
225
- console.log('Failures:');
226
- for (const f of failures) {
227
- console.log(` - ${f}`);
228
- }
229
- }
230
- console.log('='.repeat(60));
231
- process.exit(failed > 0 ? 1 : 0);
232
- }
233
- finally {
234
- fs.rmSync(tmpDir, { recursive: true, force: true });
235
- }
236
- }
237
- main().catch(err => {
238
- console.error('Test error:', err);
239
- process.exit(1);
240
- });
241
- //# sourceMappingURL=social-graph-v2-vector.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"social-graph-v2-vector.test.js","sourceRoot":"","sources":["../ts/social-graph-v2-vector.test.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,uDAAkD;AAElD,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,MAAM,QAAQ,GAAa,EAAE,CAAC;AAE9B,SAAS,MAAM,CAAC,SAAkB,EAAE,OAAe;IACjD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,CAAC;QACT,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAc,EAAE,OAAe;IACnD,IAAI,CAAC;QACH,EAAE,EAAE,CAAC;QACL,MAAM,EAAE,CAAC;QACT,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,oBAAoB,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,oBAAoB,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,mFAAmF;AACnF,SAAS,aAAa,CAAC,GAAW,EAAE,IAAY;IAC9C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;IAEzC,IAAI,CAAC;QACH,mEAAmE;QACnE,sCAAsC;QACtC,mEAAmE;QACnE,OAAO,CAAC,sCAAsC,CAAC,CAAC;QAChD,CAAC;YACC,MAAM,EAAE,GAAG,+BAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;YAC9D,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,KAAK,KAAK,EAAE,yCAAyC,CAAC,CAAC;YACxF,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,2BAA2B,CAAC,CAAC;YAC5D,EAAE,CAAC,QAAQ,EAAE,CAAC;QAChB,CAAC;QAED,mEAAmE;QACnE,sCAAsC;QACtC,mEAAmE;QACnE,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,CAAC,CAAC;QACd,MAAM,EAAE,GAAG,IAAI,+BAAa,CAAC;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;YACtC,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE;SACjC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE,wCAAwC,CAAC,CAAC;QACtF,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,qCAAqC,CAAC,CAAC;QAEtE,mEAAmE;QACnE,iCAAiC;QACjC,mEAAmE;QACnE,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAE1C,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAElD,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAG,eAAe;QAC3D,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAK,eAAe;QAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,eAAe;QAE3D,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,gDAAgD,CAAC,CAAC;QAEjF,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/B,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,8CAA8C,CAAC,CAAC;QAE/E,mEAAmE;QACnE,qDAAqD;QACrD,mEAAmE;QACnE,OAAO,CAAC,4BAA4B,CAAC,CAAC;QACtC,YAAY,CACV,GAAG,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAChE,iDAAiD,CAClD,CAAC;QAEF,mEAAmE;QACnE,yCAAyC;QACzC,mEAAmE;QACnE,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAE5C,mCAAmC;QACnC,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,EAAE,CAAC,sBAAsB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,yBAAyB,CAAC,CAAC;QACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,EAAE,EAAE,wCAAwC,CAAC,CAAC;QACpF,MAAM,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,kCAAkC,CAAC,CAAC;QAClF,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,EAAE,gCAAgC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,WAAW,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAElG,qCAAqC;QACrC,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,EAAE,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,iCAAiC,CAAC,CAAC;QACjE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,EAAE,4CAA4C,CAAC,CAAC;QAE1F,mEAAmE;QACnE,sDAAsD;QACtD,mEAAmE;QACnE,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAEpC,0BAA0B;QAC1B,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9D,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB;QAEvE,MAAM,aAAa,GAAG,EAAE,CAAC,sBAAsB,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC9E,MAAM,CACJ,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,EAC3D,wDAAwD,CACzD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,4BAA4B,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QAEhE,mEAAmE;QACnE,wBAAwB;QACxB,mEAAmE;QACnE,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAEjC,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,+FAA+F;QAC/F,MAAM,kBAAkB,GAAG,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnE,MAAM,CACJ,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,EAAE,CAAC,EACtD,oDAAoD,CACrD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,0BAA0B,WAAW,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAEhF,mEAAmE;QACnE,yBAAyB;QACzB,mEAAmE;QACnE,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAElC,2CAA2C;QAC3C,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAC;QAEjD,iCAAiC;QACjC,MAAM,cAAc,GAAG,EAAE,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,EAAE,yCAAyC,CAAC,CAAC;QAE9E,mEAAmE;QACnE,kBAAkB;QAClB,mEAAmE;QACnE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAE3B,uBAAuB;QACvB,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,oCAAoC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,6BAA6B,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,KAAK,MAAM,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,mBAAmB;QACnB,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,8CAA8C,CAAC,CAAC;QAEnF,qBAAqB;QACrB,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,gDAAgD,CAAC,CAAC;QAEpF,mEAAmE;QACnE,wBAAwB;QACxB,mEAAmE;QACnE,OAAO,CAAC,eAAe,CAAC,CAAC;QAEzB,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5C,MAAM,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,EAAE,gDAAgD,CAAC,CAAC;QAE/D,MAAM,YAAY,GAAG,EAAE,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,2CAA2C,CAAC,CAAC;QAE9E,mEAAmE;QACnE,UAAU;QACV,mEAAmE;QACnE,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,CAAC,QAAQ,EAAE,CAAC;QAEd,mEAAmE;QACnE,UAAU;QACV,mEAAmE;QACnE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,YAAY,MAAM,SAAS,CAAC,CAAC;QACjE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5B,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}