agentdb 1.5.9 → 1.6.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.
Files changed (68) hide show
  1. package/README.md +11 -11
  2. package/dist/agentdb.min.js +4 -4
  3. package/dist/cli/agentdb-cli.d.ts +29 -0
  4. package/dist/cli/agentdb-cli.d.ts.map +1 -1
  5. package/dist/cli/agentdb-cli.js +1009 -34
  6. package/dist/cli/agentdb-cli.js.map +1 -1
  7. package/dist/controllers/ContextSynthesizer.d.ts +65 -0
  8. package/dist/controllers/ContextSynthesizer.d.ts.map +1 -0
  9. package/dist/controllers/ContextSynthesizer.js +208 -0
  10. package/dist/controllers/ContextSynthesizer.js.map +1 -0
  11. package/dist/controllers/HNSWIndex.d.ts +128 -0
  12. package/dist/controllers/HNSWIndex.d.ts.map +1 -0
  13. package/dist/controllers/HNSWIndex.js +361 -0
  14. package/dist/controllers/HNSWIndex.js.map +1 -0
  15. package/dist/controllers/MMRDiversityRanker.d.ts +50 -0
  16. package/dist/controllers/MMRDiversityRanker.d.ts.map +1 -0
  17. package/dist/controllers/MMRDiversityRanker.js +130 -0
  18. package/dist/controllers/MMRDiversityRanker.js.map +1 -0
  19. package/dist/controllers/MetadataFilter.d.ts +70 -0
  20. package/dist/controllers/MetadataFilter.d.ts.map +1 -0
  21. package/dist/controllers/MetadataFilter.js +243 -0
  22. package/dist/controllers/MetadataFilter.js.map +1 -0
  23. package/dist/controllers/QUICClient.d.ts +109 -0
  24. package/dist/controllers/QUICClient.d.ts.map +1 -0
  25. package/dist/controllers/QUICClient.js +299 -0
  26. package/dist/controllers/QUICClient.js.map +1 -0
  27. package/dist/controllers/QUICServer.d.ts +121 -0
  28. package/dist/controllers/QUICServer.d.ts.map +1 -0
  29. package/dist/controllers/QUICServer.js +383 -0
  30. package/dist/controllers/QUICServer.js.map +1 -0
  31. package/dist/controllers/SyncCoordinator.d.ts +120 -0
  32. package/dist/controllers/SyncCoordinator.d.ts.map +1 -0
  33. package/dist/controllers/SyncCoordinator.js +441 -0
  34. package/dist/controllers/SyncCoordinator.js.map +1 -0
  35. package/dist/controllers/WASMVectorSearch.d.ts.map +1 -1
  36. package/dist/controllers/WASMVectorSearch.js +10 -2
  37. package/dist/controllers/WASMVectorSearch.js.map +1 -1
  38. package/dist/controllers/index.d.ts +14 -0
  39. package/dist/controllers/index.d.ts.map +1 -1
  40. package/dist/controllers/index.js +7 -0
  41. package/dist/controllers/index.js.map +1 -1
  42. package/dist/examples/quic-sync-example.d.ts +9 -0
  43. package/dist/examples/quic-sync-example.d.ts.map +1 -0
  44. package/dist/examples/quic-sync-example.js +169 -0
  45. package/dist/examples/quic-sync-example.js.map +1 -0
  46. package/dist/index.d.ts +1 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +2 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/types/quic.d.ts +518 -0
  51. package/dist/types/quic.d.ts.map +1 -0
  52. package/dist/types/quic.js +272 -0
  53. package/dist/types/quic.js.map +1 -0
  54. package/package.json +11 -3
  55. package/src/browser-entry.js +41 -6
  56. package/src/cli/agentdb-cli.ts +1114 -33
  57. package/src/controllers/ContextSynthesizer.ts +285 -0
  58. package/src/controllers/HNSWIndex.ts +495 -0
  59. package/src/controllers/MMRDiversityRanker.ts +187 -0
  60. package/src/controllers/MetadataFilter.ts +280 -0
  61. package/src/controllers/QUICClient.ts +413 -0
  62. package/src/controllers/QUICServer.ts +498 -0
  63. package/src/controllers/SyncCoordinator.ts +597 -0
  64. package/src/controllers/WASMVectorSearch.ts +11 -2
  65. package/src/controllers/index.ts +14 -0
  66. package/src/examples/quic-sync-example.ts +198 -0
  67. package/src/index.ts +2 -1
  68. package/src/types/quic.ts +772 -0
@@ -0,0 +1,272 @@
1
+ /**
2
+ * QUIC Synchronization Types for AgentDB
3
+ *
4
+ * This file contains TypeScript interfaces and types for the QUIC-based
5
+ * multi-node synchronization system. These types mirror the Protocol Buffer
6
+ * definitions and provide type safety for the sync implementation.
7
+ */
8
+ // ============================================================================
9
+ // Episode Synchronization
10
+ // ============================================================================
11
+ /**
12
+ * Supported operations for episode sync
13
+ */
14
+ export var EpisodeSyncOperation;
15
+ (function (EpisodeSyncOperation) {
16
+ EpisodeSyncOperation["CREATE"] = "CREATE";
17
+ EpisodeSyncOperation["UPDATE"] = "UPDATE";
18
+ EpisodeSyncOperation["DELETE"] = "DELETE";
19
+ })(EpisodeSyncOperation || (EpisodeSyncOperation = {}));
20
+ /**
21
+ * User roles
22
+ */
23
+ export var UserRole;
24
+ (function (UserRole) {
25
+ UserRole["ADMIN"] = "admin";
26
+ UserRole["AGENT"] = "agent";
27
+ UserRole["OBSERVER"] = "observer";
28
+ UserRole["LEARNER"] = "learner";
29
+ })(UserRole || (UserRole = {}));
30
+ // ============================================================================
31
+ // Configuration
32
+ // ============================================================================
33
+ /**
34
+ * Network topology types
35
+ */
36
+ export var NetworkTopology;
37
+ (function (NetworkTopology) {
38
+ NetworkTopology["HUB_AND_SPOKE"] = "hub_and_spoke";
39
+ NetworkTopology["MESH"] = "mesh";
40
+ NetworkTopology["HIERARCHICAL"] = "hierarchical";
41
+ })(NetworkTopology || (NetworkTopology = {}));
42
+ /**
43
+ * Conflict resolution strategies
44
+ */
45
+ export var ConflictResolutionStrategy;
46
+ (function (ConflictResolutionStrategy) {
47
+ ConflictResolutionStrategy["AUTO"] = "auto";
48
+ ConflictResolutionStrategy["MANUAL"] = "manual";
49
+ ConflictResolutionStrategy["INTERACTIVE"] = "interactive"; // Prompt user for resolution
50
+ })(ConflictResolutionStrategy || (ConflictResolutionStrategy = {}));
51
+ /**
52
+ * Sync mode
53
+ */
54
+ export var SyncMode;
55
+ (function (SyncMode) {
56
+ SyncMode["INCREMENTAL"] = "incremental";
57
+ SyncMode["FULL"] = "full";
58
+ SyncMode["HYBRID"] = "hybrid";
59
+ })(SyncMode || (SyncMode = {}));
60
+ // ============================================================================
61
+ // Helper Functions (Type Guards & Utilities)
62
+ // ============================================================================
63
+ /**
64
+ * Type guard for episode sync
65
+ */
66
+ export function isEpisodeSync(payload) {
67
+ return payload.type === 'episode_sync';
68
+ }
69
+ /**
70
+ * Type guard for skill sync
71
+ */
72
+ export function isSkillSync(payload) {
73
+ return payload.type === 'skill_sync';
74
+ }
75
+ /**
76
+ * Type guard for causal edge sync
77
+ */
78
+ export function isCausalEdgeSync(payload) {
79
+ return payload.type === 'causal_edge_sync';
80
+ }
81
+ /**
82
+ * Compare two vector clocks
83
+ */
84
+ export function compareVectorClocks(a, b) {
85
+ const allNodes = new Set([...a.clocks.keys(), ...b.clocks.keys()]);
86
+ let aGreater = false;
87
+ let bGreater = false;
88
+ for (const node of allNodes) {
89
+ const aClock = a.clocks.get(node) || 0;
90
+ const bClock = b.clocks.get(node) || 0;
91
+ if (aClock > bClock)
92
+ aGreater = true;
93
+ if (bClock > aClock)
94
+ bGreater = true;
95
+ }
96
+ if (aGreater && !bGreater)
97
+ return 'after';
98
+ if (bGreater && !aGreater)
99
+ return 'before';
100
+ if (!aGreater && !bGreater)
101
+ return 'equal';
102
+ return 'concurrent';
103
+ }
104
+ /**
105
+ * Merge two vector clocks (take max of each node)
106
+ */
107
+ export function mergeVectorClocks(a, b) {
108
+ const merged = new Map(a.clocks);
109
+ for (const [node, clock] of b.clocks) {
110
+ const existingClock = merged.get(node) || 0;
111
+ merged.set(node, Math.max(existingClock, clock));
112
+ }
113
+ return { clocks: merged };
114
+ }
115
+ /**
116
+ * Increment vector clock for local node
117
+ */
118
+ export function incrementVectorClock(clock, nodeId) {
119
+ const newClocks = new Map(clock.clocks);
120
+ const currentClock = newClocks.get(nodeId) || 0;
121
+ newClocks.set(nodeId, currentClock + 1);
122
+ return { clocks: newClocks };
123
+ }
124
+ /**
125
+ * Create empty vector clock
126
+ */
127
+ export function createVectorClock() {
128
+ return { clocks: new Map() };
129
+ }
130
+ // ============================================================================
131
+ // CRDT Operations
132
+ // ============================================================================
133
+ /**
134
+ * Increment G-Counter for a node
135
+ */
136
+ export function incrementGCounter(counter, nodeId, delta = 1) {
137
+ const newCounters = new Map(counter.nodeCounters);
138
+ const current = newCounters.get(nodeId) || 0;
139
+ newCounters.set(nodeId, current + delta);
140
+ return { nodeCounters: newCounters };
141
+ }
142
+ /**
143
+ * Get total value of G-Counter
144
+ */
145
+ export function getGCounterValue(counter) {
146
+ return Array.from(counter.nodeCounters.values()).reduce((sum, count) => sum + count, 0);
147
+ }
148
+ /**
149
+ * Merge two G-Counters (take max per node)
150
+ */
151
+ export function mergeGCounter(a, b) {
152
+ const merged = new Map(a.nodeCounters);
153
+ for (const [nodeId, count] of b.nodeCounters) {
154
+ const existingCount = merged.get(nodeId) || 0;
155
+ merged.set(nodeId, Math.max(existingCount, count));
156
+ }
157
+ return { nodeCounters: merged };
158
+ }
159
+ /**
160
+ * Update LWW-Register with new value
161
+ */
162
+ export function updateLWWRegister(register, newValue, nodeId, timestamp = Date.now()) {
163
+ if (timestamp > register.timestamp ||
164
+ (timestamp === register.timestamp && nodeId > register.nodeId)) {
165
+ return { value: newValue, timestamp, nodeId };
166
+ }
167
+ return register;
168
+ }
169
+ /**
170
+ * Merge two LWW-Registers (keep most recent)
171
+ */
172
+ export function mergeLWWRegister(a, b) {
173
+ if (b.timestamp > a.timestamp) {
174
+ return b;
175
+ }
176
+ else if (b.timestamp === a.timestamp) {
177
+ return b.nodeId > a.nodeId ? b : a;
178
+ }
179
+ return a;
180
+ }
181
+ /**
182
+ * Add element to OR-Set
183
+ */
184
+ export function addToORSet(set, element, uniqueTag) {
185
+ const newAdds = new Map(set.adds);
186
+ if (!newAdds.has(element)) {
187
+ newAdds.set(element, new Set());
188
+ }
189
+ newAdds.get(element).add(uniqueTag);
190
+ return { adds: newAdds, removes: set.removes };
191
+ }
192
+ /**
193
+ * Remove element from OR-Set
194
+ */
195
+ export function removeFromORSet(set, element) {
196
+ const tags = set.adds.get(element);
197
+ if (!tags)
198
+ return set;
199
+ const newRemoves = new Set(set.removes);
200
+ tags.forEach(tag => newRemoves.add(tag));
201
+ return { adds: set.adds, removes: newRemoves };
202
+ }
203
+ /**
204
+ * Get current elements in OR-Set
205
+ */
206
+ export function getORSetElements(set) {
207
+ const elements = new Set();
208
+ for (const [element, tags] of set.adds) {
209
+ // Check if any tag is not in removes
210
+ for (const tag of tags) {
211
+ if (!set.removes.has(tag)) {
212
+ elements.add(element);
213
+ break;
214
+ }
215
+ }
216
+ }
217
+ return elements;
218
+ }
219
+ /**
220
+ * Merge two OR-Sets
221
+ */
222
+ export function mergeORSet(a, b) {
223
+ const mergedAdds = new Map();
224
+ const mergedRemoves = new Set([...a.removes, ...b.removes]);
225
+ // Merge adds from both sets
226
+ const allElements = new Set([...a.adds.keys(), ...b.adds.keys()]);
227
+ for (const element of allElements) {
228
+ const aTags = a.adds.get(element) || new Set();
229
+ const bTags = b.adds.get(element) || new Set();
230
+ const mergedTags = new Set([...aTags, ...bTags]);
231
+ // Remove tags that are in removes set
232
+ for (const tag of mergedTags) {
233
+ if (mergedRemoves.has(tag)) {
234
+ mergedTags.delete(tag);
235
+ }
236
+ }
237
+ if (mergedTags.size > 0) {
238
+ mergedAdds.set(element, mergedTags);
239
+ }
240
+ }
241
+ return { adds: mergedAdds, removes: mergedRemoves };
242
+ }
243
+ // ============================================================================
244
+ // Conflict Resolution Helpers
245
+ // ============================================================================
246
+ /**
247
+ * Weighted average for numeric conflict resolution
248
+ */
249
+ export function weightedAverage(v1, w1, v2, w2) {
250
+ if (w1 + w2 === 0)
251
+ return 0;
252
+ return (v1 * w1 + v2 * w2) / (w1 + w2);
253
+ }
254
+ /**
255
+ * Determine authorization for operation
256
+ */
257
+ export function isAuthorized(jwt, requiredScope) {
258
+ return jwt.scopes.includes(requiredScope);
259
+ }
260
+ /**
261
+ * Check if JWT is expired
262
+ */
263
+ export function isJWTExpired(jwt) {
264
+ return Date.now() >= jwt.exp * 1000;
265
+ }
266
+ /**
267
+ * Generate unique tag for OR-Set operations
268
+ */
269
+ export function generateUniqueTag(nodeId, timestamp = Date.now()) {
270
+ return `${nodeId}-${timestamp}-${Math.random().toString(36).substr(2, 9)}`;
271
+ }
272
+ //# sourceMappingURL=quic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quic.js","sourceRoot":"","sources":["../../src/types/quic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4CH,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAN,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,yCAAiB,CAAA;IACjB,yCAAiB,CAAA;AACnB,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,QAI/B;AAiND;;GAEG;AACH,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,2BAAe,CAAA;IACf,iCAAqB,CAAA;IACrB,+BAAmB,CAAA;AACrB,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AA+BD,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,kDAA+B,CAAA;IAC/B,gCAAa,CAAA;IACb,gDAA6B,CAAA;AAC/B,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,0BAIX;AAJD,WAAY,0BAA0B;IACpC,2CAAa,CAAA;IACb,+CAAiB,CAAA;IACjB,yDAA2B,CAAA,CAAE,6BAA6B;AAC5D,CAAC,EAJW,0BAA0B,KAA1B,0BAA0B,QAIrC;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,uCAA2B,CAAA;IAC3B,yBAAa,CAAA;IACb,6BAAiB,CAAA;AACnB,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AAoJD,+EAA+E;AAC/E,6CAA6C;AAC7C,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAoB;IAChD,OAAO,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAoB;IAC9C,OAAO,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAoB;IACnD,OAAO,OAAO,CAAC,IAAI,KAAK,kBAAkB,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAc,EAAE,CAAc;IAChE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEnE,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,MAAM,GAAG,MAAM;YAAE,QAAQ,GAAG,IAAI,CAAC;QACrC,IAAI,MAAM,GAAG,MAAM;YAAE,QAAQ,GAAG,IAAI,CAAC;IACvC,CAAC;IAED,IAAI,QAAQ,IAAI,CAAC,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,QAAQ,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC3C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAc,EAAE,CAAc;IAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAEjC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAkB,EAAE,MAAc;IACrE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAC/B,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAiB,EAAE,MAAc,EAAE,QAAgB,CAAC;IACpF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;IACzC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAiB;IAChD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,CAAW,EAAE,CAAW;IACpD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAEvC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAwB,EACxB,QAAW,EACX,MAAc,EACd,YAAoB,IAAI,CAAC,GAAG,EAAE;IAE9B,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS;QAC9B,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAI,CAAiB,EAAE,CAAiB;IACtE,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC;IACX,CAAC;SAAM,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;QACvC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAI,GAAa,EAAE,OAAU,EAAE,SAAiB;IACxE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAErC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAI,GAAa,EAAE,OAAU;IAC1D,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IAEtB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAI,GAAa;IAC/C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAK,CAAC;IAE9B,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACvC,qCAAqC;QACrC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAI,CAAW,EAAE,CAAW;IACpD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAE5D,4BAA4B;IAC5B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAElE,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;QAEjD,sCAAsC;QACtC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACxB,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;AACtD,CAAC;AAED,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;IAC5E,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAc,EAAE,aAAwB;IACnE,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAc;IACzC,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,YAAoB,IAAI,CAAC,GAAG,EAAE;IAC9E,OAAO,GAAG,MAAM,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "agentdb",
3
- "version": "1.5.9",
4
- "description": "AgentDB - Frontier Memory Features with MCP Integration: Causal reasoning, reflexion memory, skill library, and automated learning. 150x faster vector search. Full Claude Desktop support via Model Context Protocol.",
3
+ "version": "1.6.1",
4
+ "description": "AgentDB - Frontier Memory Features with MCP Integration and Direct Vector Search: Causal reasoning, reflexion memory, skill library, automated learning, and raw vector similarity queries. 150x faster vector search. Full Claude Desktop support via Model Context Protocol.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -20,7 +20,14 @@
20
20
  "./controllers/SkillLibrary": "./dist/controllers/SkillLibrary.js",
21
21
  "./controllers/EmbeddingService": "./dist/controllers/EmbeddingService.js",
22
22
  "./controllers/WASMVectorSearch": "./dist/controllers/WASMVectorSearch.js",
23
- "./controllers/EnhancedEmbeddingService": "./dist/controllers/EnhancedEmbeddingService.js"
23
+ "./controllers/EnhancedEmbeddingService": "./dist/controllers/EnhancedEmbeddingService.js",
24
+ "./controllers/MMRDiversityRanker": "./dist/controllers/MMRDiversityRanker.js",
25
+ "./controllers/ContextSynthesizer": "./dist/controllers/ContextSynthesizer.js",
26
+ "./controllers/MetadataFilter": "./dist/controllers/MetadataFilter.js",
27
+ "./controllers/QUICServer": "./dist/controllers/QUICServer.js",
28
+ "./controllers/QUICClient": "./dist/controllers/QUICClient.js",
29
+ "./controllers/SyncCoordinator": "./dist/controllers/SyncCoordinator.js",
30
+ "./controllers/HNSWIndex": "./dist/controllers/HNSWIndex.js"
24
31
  },
25
32
  "scripts": {
26
33
  "build": "npm run build:ts && npm run copy:schemas && npm run build:browser",
@@ -74,6 +81,7 @@
74
81
  "@xenova/transformers": "^2.17.2",
75
82
  "chalk": "^5.3.0",
76
83
  "commander": "^12.1.0",
84
+ "hnswlib-node": "^3.0.0",
77
85
  "sql.js": "^1.13.0",
78
86
  "zod": "^3.25.76"
79
87
  },
@@ -5,6 +5,34 @@
5
5
 
6
6
  import initSqlJs from 'sql.js';
7
7
 
8
+ /**
9
+ * Detect if running in browser environment
10
+ */
11
+ function isBrowser() {
12
+ return typeof window !== 'undefined' && typeof window.document !== 'undefined';
13
+ }
14
+
15
+ /**
16
+ * Get appropriate WASM file locator based on environment
17
+ */
18
+ function getWASMLocator() {
19
+ if (isBrowser()) {
20
+ // In browser, use CDN
21
+ return (file) => `https://cdn.jsdelivr.net/npm/sql.js@1.13.0/dist/${file}`;
22
+ } else {
23
+ // In Node.js, try to use local file (if available)
24
+ return (file) => {
25
+ try {
26
+ // This will be resolved at runtime
27
+ return new URL(`../../node_modules/sql.js/dist/${file}`, import.meta.url).pathname;
28
+ } catch {
29
+ // Fallback to CDN if local files not found
30
+ return `https://cdn.jsdelivr.net/npm/sql.js@1.13.0/dist/${file}`;
31
+ }
32
+ };
33
+ }
34
+ }
35
+
8
36
  class AgentDBBrowser {
9
37
  constructor() {
10
38
  this.db = null;
@@ -15,13 +43,20 @@ class AgentDBBrowser {
15
43
  async init() {
16
44
  if (this.initialized) return;
17
45
 
18
- // Initialize sql.js WASM
19
- this.SQL = await initSqlJs({
20
- locateFile: file => `https://sql.js.org/dist/${file}`
21
- });
46
+ try {
47
+ // Initialize sql.js WASM with environment-appropriate path
48
+ this.SQL = await initSqlJs({
49
+ locateFile: getWASMLocator()
50
+ });
51
+
52
+ this.db = new this.SQL.Database();
53
+ this.initialized = true;
22
54
 
23
- this.db = new this.SQL.Database();
24
- this.initialized = true;
55
+ console.log('[AgentDB Browser] Initialized successfully');
56
+ } catch (error) {
57
+ console.error('[AgentDB Browser] Failed to initialize:', error.message);
58
+ throw new Error(`AgentDB initialization failed: ${error.message}`);
59
+ }
25
60
 
26
61
  // Create basic schema
27
62
  this.db.run(`