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.
- package/README.md +11 -11
- package/dist/agentdb.min.js +4 -4
- package/dist/cli/agentdb-cli.d.ts +29 -0
- package/dist/cli/agentdb-cli.d.ts.map +1 -1
- package/dist/cli/agentdb-cli.js +1009 -34
- package/dist/cli/agentdb-cli.js.map +1 -1
- package/dist/controllers/ContextSynthesizer.d.ts +65 -0
- package/dist/controllers/ContextSynthesizer.d.ts.map +1 -0
- package/dist/controllers/ContextSynthesizer.js +208 -0
- package/dist/controllers/ContextSynthesizer.js.map +1 -0
- package/dist/controllers/HNSWIndex.d.ts +128 -0
- package/dist/controllers/HNSWIndex.d.ts.map +1 -0
- package/dist/controllers/HNSWIndex.js +361 -0
- package/dist/controllers/HNSWIndex.js.map +1 -0
- package/dist/controllers/MMRDiversityRanker.d.ts +50 -0
- package/dist/controllers/MMRDiversityRanker.d.ts.map +1 -0
- package/dist/controllers/MMRDiversityRanker.js +130 -0
- package/dist/controllers/MMRDiversityRanker.js.map +1 -0
- package/dist/controllers/MetadataFilter.d.ts +70 -0
- package/dist/controllers/MetadataFilter.d.ts.map +1 -0
- package/dist/controllers/MetadataFilter.js +243 -0
- package/dist/controllers/MetadataFilter.js.map +1 -0
- package/dist/controllers/QUICClient.d.ts +109 -0
- package/dist/controllers/QUICClient.d.ts.map +1 -0
- package/dist/controllers/QUICClient.js +299 -0
- package/dist/controllers/QUICClient.js.map +1 -0
- package/dist/controllers/QUICServer.d.ts +121 -0
- package/dist/controllers/QUICServer.d.ts.map +1 -0
- package/dist/controllers/QUICServer.js +383 -0
- package/dist/controllers/QUICServer.js.map +1 -0
- package/dist/controllers/SyncCoordinator.d.ts +120 -0
- package/dist/controllers/SyncCoordinator.d.ts.map +1 -0
- package/dist/controllers/SyncCoordinator.js +441 -0
- package/dist/controllers/SyncCoordinator.js.map +1 -0
- package/dist/controllers/WASMVectorSearch.d.ts.map +1 -1
- package/dist/controllers/WASMVectorSearch.js +10 -2
- package/dist/controllers/WASMVectorSearch.js.map +1 -1
- package/dist/controllers/index.d.ts +14 -0
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +7 -0
- package/dist/controllers/index.js.map +1 -1
- package/dist/examples/quic-sync-example.d.ts +9 -0
- package/dist/examples/quic-sync-example.d.ts.map +1 -0
- package/dist/examples/quic-sync-example.js +169 -0
- package/dist/examples/quic-sync-example.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/types/quic.d.ts +518 -0
- package/dist/types/quic.d.ts.map +1 -0
- package/dist/types/quic.js +272 -0
- package/dist/types/quic.js.map +1 -0
- package/package.json +11 -3
- package/src/browser-entry.js +41 -6
- package/src/cli/agentdb-cli.ts +1114 -33
- package/src/controllers/ContextSynthesizer.ts +285 -0
- package/src/controllers/HNSWIndex.ts +495 -0
- package/src/controllers/MMRDiversityRanker.ts +187 -0
- package/src/controllers/MetadataFilter.ts +280 -0
- package/src/controllers/QUICClient.ts +413 -0
- package/src/controllers/QUICServer.ts +498 -0
- package/src/controllers/SyncCoordinator.ts +597 -0
- package/src/controllers/WASMVectorSearch.ts +11 -2
- package/src/controllers/index.ts +14 -0
- package/src/examples/quic-sync-example.ts +198 -0
- package/src/index.ts +2 -1
- 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":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentdb",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "AgentDB - Frontier Memory Features with MCP Integration: Causal reasoning, reflexion memory, skill library, and
|
|
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
|
},
|
package/src/browser-entry.js
CHANGED
|
@@ -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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
24
|
-
|
|
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(`
|