agentdb 1.5.8 โ 1.6.0
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/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 +12 -0
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +6 -0
- package/dist/controllers/index.js.map +1 -1
- package/dist/db-fallback.d.ts.map +1 -1
- package/dist/db-fallback.js +14 -11
- package/dist/db-fallback.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/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 +9 -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/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 +12 -0
- package/src/db-fallback.ts +13 -10
- package/src/examples/quic-sync-example.ts +198 -0
- package/src/types/quic.ts +772 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QUIC Synchronization Example
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates how to use QUICServer, QUICClient, and SyncCoordinator
|
|
5
|
+
* for bidirectional synchronization between AgentDB instances.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { createDatabase } from '../db-fallback.js';
|
|
9
|
+
import {
|
|
10
|
+
QUICServer,
|
|
11
|
+
QUICClient,
|
|
12
|
+
SyncCoordinator,
|
|
13
|
+
ReflexionMemory,
|
|
14
|
+
SkillLibrary,
|
|
15
|
+
EmbeddingService,
|
|
16
|
+
} from '../controllers/index.js';
|
|
17
|
+
|
|
18
|
+
async function exampleQUICSync() {
|
|
19
|
+
console.log('๐ QUIC Synchronization Example\n');
|
|
20
|
+
|
|
21
|
+
// Initialize two database instances (simulating local and remote)
|
|
22
|
+
const localDB = createDatabase('./local-agent.db');
|
|
23
|
+
const remoteDB = createDatabase('./remote-agent.db');
|
|
24
|
+
|
|
25
|
+
// Initialize embedding services
|
|
26
|
+
const localEmbedder = new EmbeddingService({
|
|
27
|
+
model: 'Xenova/all-MiniLM-L6-v2',
|
|
28
|
+
dimension: 384,
|
|
29
|
+
provider: 'transformers',
|
|
30
|
+
});
|
|
31
|
+
const remoteEmbedder = new EmbeddingService({
|
|
32
|
+
model: 'Xenova/all-MiniLM-L6-v2',
|
|
33
|
+
dimension: 384,
|
|
34
|
+
provider: 'transformers',
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Initialize memory controllers
|
|
38
|
+
const localReflexion = new ReflexionMemory(localDB, localEmbedder);
|
|
39
|
+
const remoteReflexion = new ReflexionMemory(remoteDB, remoteEmbedder);
|
|
40
|
+
const remoteSkillLib = new SkillLibrary(remoteDB, remoteEmbedder);
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
// ===== Setup Remote Server =====
|
|
44
|
+
console.log('๐ก Setting up remote QUIC server...');
|
|
45
|
+
const server = new QUICServer(remoteDB, {
|
|
46
|
+
host: '0.0.0.0',
|
|
47
|
+
port: 4433,
|
|
48
|
+
authToken: 'secret-token-123',
|
|
49
|
+
maxConnections: 10,
|
|
50
|
+
rateLimit: {
|
|
51
|
+
maxRequestsPerMinute: 60,
|
|
52
|
+
maxBytesPerMinute: 10 * 1024 * 1024,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
await server.start();
|
|
57
|
+
console.log('โ Server started\n');
|
|
58
|
+
|
|
59
|
+
// ===== Setup Local Client =====
|
|
60
|
+
console.log('๐ฑ Setting up local QUIC client...');
|
|
61
|
+
const client = new QUICClient({
|
|
62
|
+
serverHost: 'localhost',
|
|
63
|
+
serverPort: 4433,
|
|
64
|
+
authToken: 'secret-token-123',
|
|
65
|
+
maxRetries: 3,
|
|
66
|
+
retryDelayMs: 1000,
|
|
67
|
+
timeoutMs: 30000,
|
|
68
|
+
poolSize: 5,
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
await client.connect();
|
|
72
|
+
console.log('โ Client connected\n');
|
|
73
|
+
|
|
74
|
+
// Test ping
|
|
75
|
+
console.log('๐ Testing connection...');
|
|
76
|
+
const pingResult = await client.ping();
|
|
77
|
+
console.log(`โ Ping: ${pingResult.latencyMs}ms\n`);
|
|
78
|
+
|
|
79
|
+
// ===== Add some data to remote =====
|
|
80
|
+
console.log('๐ Adding test data to remote database...');
|
|
81
|
+
await remoteReflexion.storeEpisode({
|
|
82
|
+
sessionId: 'test-session',
|
|
83
|
+
task: 'Calculate fibonacci',
|
|
84
|
+
input: 'n=10',
|
|
85
|
+
output: '55',
|
|
86
|
+
critique: 'Efficient implementation',
|
|
87
|
+
reward: 1.0,
|
|
88
|
+
success: true,
|
|
89
|
+
latencyMs: 150,
|
|
90
|
+
tokensUsed: 200,
|
|
91
|
+
tags: ['math', 'algorithm'],
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
await remoteSkillLib.createSkill({
|
|
95
|
+
name: 'fibonacci',
|
|
96
|
+
description: 'Calculate fibonacci numbers',
|
|
97
|
+
signature: {
|
|
98
|
+
inputs: { n: 'number' },
|
|
99
|
+
outputs: { result: 'number' },
|
|
100
|
+
},
|
|
101
|
+
code: 'function fib(n) { ... }',
|
|
102
|
+
successRate: 1.0,
|
|
103
|
+
uses: 5,
|
|
104
|
+
avgReward: 0.95,
|
|
105
|
+
avgLatencyMs: 100,
|
|
106
|
+
});
|
|
107
|
+
console.log('โ Test data added\n');
|
|
108
|
+
|
|
109
|
+
// ===== Setup Sync Coordinator =====
|
|
110
|
+
console.log('๐ Setting up sync coordinator...');
|
|
111
|
+
const coordinator = new SyncCoordinator({
|
|
112
|
+
db: localDB,
|
|
113
|
+
client: client,
|
|
114
|
+
server: server,
|
|
115
|
+
conflictStrategy: 'latest-wins',
|
|
116
|
+
batchSize: 100,
|
|
117
|
+
autoSync: false,
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
// ===== Perform Manual Sync =====
|
|
121
|
+
console.log('๐ Starting synchronization...\n');
|
|
122
|
+
const syncReport = await coordinator.sync((progress) => {
|
|
123
|
+
console.log(` [${progress.phase}] ${progress.message || ''}`);
|
|
124
|
+
if (progress.itemType) {
|
|
125
|
+
console.log(` Syncing ${progress.itemType}: ${progress.current}/${progress.total}`);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
console.log('\n๐ Sync Report:');
|
|
130
|
+
console.log(` Success: ${syncReport.success}`);
|
|
131
|
+
console.log(` Duration: ${syncReport.durationMs}ms`);
|
|
132
|
+
console.log(` Items pulled: ${syncReport.itemsPulled}`);
|
|
133
|
+
console.log(` Items pushed: ${syncReport.itemsPushed}`);
|
|
134
|
+
console.log(` Conflicts resolved: ${syncReport.conflictsResolved}`);
|
|
135
|
+
console.log(` Bytes transferred: ${syncReport.bytesTransferred}`);
|
|
136
|
+
if (syncReport.errors.length > 0) {
|
|
137
|
+
console.log(` Errors: ${syncReport.errors.join(', ')}`);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// ===== Check Sync State =====
|
|
141
|
+
console.log('\n๐ Sync State:');
|
|
142
|
+
const state = coordinator.getSyncState();
|
|
143
|
+
console.log(` Last sync: ${new Date(state.lastSyncAt).toISOString()}`);
|
|
144
|
+
console.log(` Total items synced: ${state.totalItemsSynced}`);
|
|
145
|
+
console.log(` Total bytes synced: ${state.totalBytesSynced}`);
|
|
146
|
+
console.log(` Sync count: ${state.syncCount}`);
|
|
147
|
+
|
|
148
|
+
// ===== Server Status =====
|
|
149
|
+
console.log('\n๐ก Server Status:');
|
|
150
|
+
const serverStatus = server.getStatus();
|
|
151
|
+
console.log(` Running: ${serverStatus.isRunning}`);
|
|
152
|
+
console.log(` Active connections: ${serverStatus.activeConnections}`);
|
|
153
|
+
console.log(` Total requests: ${serverStatus.totalRequests}`);
|
|
154
|
+
|
|
155
|
+
// ===== Client Status =====
|
|
156
|
+
console.log('\n๐ฑ Client Status:');
|
|
157
|
+
const clientStatus = client.getStatus();
|
|
158
|
+
console.log(` Connected: ${clientStatus.isConnected}`);
|
|
159
|
+
console.log(` Pool size: ${clientStatus.poolSize}`);
|
|
160
|
+
console.log(` Active connections: ${clientStatus.activeConnections}`);
|
|
161
|
+
console.log(` Total requests: ${clientStatus.totalRequests}`);
|
|
162
|
+
|
|
163
|
+
// ===== Enable Auto-Sync =====
|
|
164
|
+
console.log('\n๐ Testing auto-sync...');
|
|
165
|
+
coordinator['config'].autoSync = true;
|
|
166
|
+
coordinator['config'].syncIntervalMs = 5000; // 5 seconds
|
|
167
|
+
coordinator['startAutoSync']();
|
|
168
|
+
console.log('โ Auto-sync enabled (5s interval)');
|
|
169
|
+
|
|
170
|
+
// Wait for one auto-sync cycle
|
|
171
|
+
await new Promise((resolve) => setTimeout(resolve, 6000));
|
|
172
|
+
coordinator.stopAutoSync();
|
|
173
|
+
console.log('โ Auto-sync disabled');
|
|
174
|
+
|
|
175
|
+
// ===== Cleanup =====
|
|
176
|
+
console.log('\n๐งน Cleaning up...');
|
|
177
|
+
await client.disconnect();
|
|
178
|
+
await server.stop();
|
|
179
|
+
console.log('โ Cleanup complete');
|
|
180
|
+
|
|
181
|
+
console.log('\nโ
QUIC Sync example completed successfully!');
|
|
182
|
+
} catch (error) {
|
|
183
|
+
console.error('\nโ Error:', error);
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Run example if executed directly
|
|
189
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
190
|
+
exampleQUICSync()
|
|
191
|
+
.then(() => process.exit(0))
|
|
192
|
+
.catch((error) => {
|
|
193
|
+
console.error('Fatal error:', error);
|
|
194
|
+
process.exit(1);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export { exampleQUICSync };
|