@lantanios/agentic-server 0.1.1 → 0.2.2
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/.env.example +16 -16
- package/README.md +684 -397
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -3
- package/dist/index.js.map +1 -1
- package/dist/namespaces/context.d.ts +9 -0
- package/dist/namespaces/context.d.ts.map +1 -0
- package/dist/namespaces/context.js +247 -0
- package/dist/namespaces/context.js.map +1 -0
- package/dist/namespaces/index.d.ts +2 -0
- package/dist/namespaces/index.d.ts.map +1 -1
- package/dist/namespaces/index.js +5 -1
- package/dist/namespaces/index.js.map +1 -1
- package/dist/namespaces/sync.d.ts +13 -0
- package/dist/namespaces/sync.d.ts.map +1 -0
- package/dist/namespaces/sync.js +140 -0
- package/dist/namespaces/sync.js.map +1 -0
- package/package.json +42 -41
- package/src/config.ts +6 -3
- package/src/index.ts +31 -5
- package/src/namespaces/context.ts +283 -0
- package/src/namespaces/index.ts +2 -0
- package/src/namespaces/sync.ts +155 -0
- package/tsconfig.json +13 -13
- package/tsconfig.tsbuildinfo +1 -1
package/dist/config.d.ts
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;CA0BlB,CAAC;AAEF,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAWzC"}
|
package/dist/config.js
CHANGED
|
@@ -11,6 +11,8 @@ exports.config = {
|
|
|
11
11
|
port: parseInt(process.env.PORT || '3847', 10),
|
|
12
12
|
// MongoDB
|
|
13
13
|
mongoUri: process.env.MONGODB_URI || '',
|
|
14
|
+
// Redis (optional — system degrades gracefully without it)
|
|
15
|
+
redisUrl: process.env.REDIS_URL || '',
|
|
14
16
|
// OpenAI (for embeddings)
|
|
15
17
|
openaiApiKey: process.env.OPENAI_API_KEY || '',
|
|
16
18
|
// CORS
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;AA+BA,wCAWC;AA1CD,oDAA4B;AAC5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEH,QAAA,MAAM,GAAG;IACpB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC;IAE9C,UAAU;IACV,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;IAEvC,2DAA2D;IAC3D,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE;IAErC,0BAA0B;IAC1B,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;IAE9C,OAAO;IACP,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC;IAE9E,kBAAkB;IAClB,KAAK,EAAE;QACL,GAAG,EAAE;YACH,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,uBAAuB;YACxE,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE;SACnD;QACD,GAAG,EAAE;YACH,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,uBAAuB;YACxE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;SAC/C;KACF;CACF,CAAC;AAEF,SAAgB,cAAc;IAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,cAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,cAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAQnC,QAAA,MAAM,GAAG,EAAE,WAAuB,CAAC;AAInC,QAAA,MAAM,UAAU,oGAAoB,CAAC;AAErC,QAAA,MAAM,EAAE,+HAMN,CAAC;AAiJH,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ const mongoose_1 = __importDefault(require("mongoose"));
|
|
|
12
12
|
const config_1 = require("./config");
|
|
13
13
|
const namespaces_1 = require("./namespaces");
|
|
14
14
|
const agentic_audio_1 = require("@lantanios/agentic-audio");
|
|
15
|
+
const agentic_redis_1 = require("@lantanios/agentic-redis");
|
|
15
16
|
const app = (0, express_1.default)();
|
|
16
17
|
exports.app = app;
|
|
17
18
|
app.use((0, cors_1.default)({ origin: config_1.config.corsOrigins }));
|
|
@@ -77,10 +78,19 @@ function createAudioService() {
|
|
|
77
78
|
// Health check
|
|
78
79
|
app.get('/health', async (_req, res) => {
|
|
79
80
|
const mongoStatus = mongoose_1.default.connection.readyState === 1 ? 'connected' : 'disconnected';
|
|
81
|
+
let redisHealth = { connected: false, latencyMs: null };
|
|
82
|
+
try {
|
|
83
|
+
redisHealth = await (0, agentic_redis_1.checkRedisHealth)();
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Redis not available
|
|
87
|
+
}
|
|
80
88
|
res.json({
|
|
81
89
|
status: 'ok',
|
|
82
90
|
timestamp: new Date().toISOString(),
|
|
83
91
|
mongodb: mongoStatus,
|
|
92
|
+
redis: redisHealth.connected ? 'connected' : 'disconnected',
|
|
93
|
+
redisLatencyMs: redisHealth.latencyMs,
|
|
84
94
|
sockets: io.engine.clientsCount,
|
|
85
95
|
});
|
|
86
96
|
});
|
|
@@ -114,20 +124,38 @@ async function start() {
|
|
|
114
124
|
console.error('✗ MongoDB connection failed:', err);
|
|
115
125
|
}
|
|
116
126
|
}
|
|
127
|
+
// Connect to Redis (optional — degrades gracefully)
|
|
128
|
+
if (config_1.config.redisUrl) {
|
|
129
|
+
try {
|
|
130
|
+
(0, agentic_redis_1.initRedis)({ url: config_1.config.redisUrl });
|
|
131
|
+
await (0, agentic_redis_1.connectRedis)();
|
|
132
|
+
console.log('✓ Connected to Redis');
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
console.warn('✗ Redis connection failed (continuing without):', err.message);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.log('⊘ Redis not configured (set REDIS_URL to enable caching)');
|
|
140
|
+
}
|
|
117
141
|
// Create audio service
|
|
118
142
|
const audioService = createAudioService();
|
|
119
143
|
// Setup Socket.IO namespaces
|
|
120
144
|
(0, namespaces_1.setupMemoryNamespace)(io.of('/memory'));
|
|
121
145
|
(0, namespaces_1.setupAudioNamespace)(io.of('/audio'), { audioService });
|
|
122
146
|
(0, namespaces_1.setupEventsNamespace)(io.of('/events'));
|
|
147
|
+
(0, namespaces_1.setupContextNamespace)(io.of('/context'));
|
|
148
|
+
(0, namespaces_1.setupSyncNamespace)(io.of('/sync'));
|
|
123
149
|
console.log('✓ Socket.IO namespaces configured');
|
|
124
150
|
// Start server
|
|
125
151
|
httpServer.listen(config_1.config.port, () => {
|
|
126
152
|
console.log(`\n✓ @lantanios/agentic-server running on http://localhost:${config_1.config.port}`);
|
|
127
153
|
console.log('\nNamespaces:');
|
|
128
|
-
console.log(' /memory
|
|
129
|
-
console.log(' /
|
|
130
|
-
console.log(' /
|
|
154
|
+
console.log(' /memory - Memory CRUD + vector search');
|
|
155
|
+
console.log(' /context - Context assembly + goals + search');
|
|
156
|
+
console.log(' /sync - Bidirectional SQLite ↔ MongoDB sync');
|
|
157
|
+
console.log(' /audio - STT/TTS streaming');
|
|
158
|
+
console.log(' /events - Pub/sub + direct messaging');
|
|
131
159
|
console.log('\nREST endpoints:');
|
|
132
160
|
console.log(' GET /health - Health check');
|
|
133
161
|
console.log(' GET /providers - Audio provider status');
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA+C;AAC/C,gDAAwB;AACxB,+BAAoC;AACpC,yCAAmC;AACnC,wDAAgC;AAEhC,qCAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* /context Namespace
|
|
3
|
+
*
|
|
4
|
+
* Context assembly, search, goal management, and state tracking
|
|
5
|
+
* via Socket.IO. Central coordination point for the Context Engine.
|
|
6
|
+
*/
|
|
7
|
+
import { Namespace } from 'socket.io';
|
|
8
|
+
export declare function setupContextNamespace(io: Namespace): void;
|
|
9
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/namespaces/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAU,MAAM,WAAW,CAAC;AAqB9C,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,SAAS,QA8PlD"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* /context Namespace
|
|
4
|
+
*
|
|
5
|
+
* Context assembly, search, goal management, and state tracking
|
|
6
|
+
* via Socket.IO. Central coordination point for the Context Engine.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.setupContextNamespace = setupContextNamespace;
|
|
10
|
+
const agentic_memory_1 = require("@lantanios/agentic-memory");
|
|
11
|
+
const agentic_memory_2 = require("@lantanios/agentic-memory");
|
|
12
|
+
const agentic_memory_3 = require("@lantanios/agentic-memory");
|
|
13
|
+
function getAgentId(socket) {
|
|
14
|
+
return socket.data.agentId;
|
|
15
|
+
}
|
|
16
|
+
function setupContextNamespace(io) {
|
|
17
|
+
io.use((socket, next) => {
|
|
18
|
+
const agentId = socket.handshake.auth.agentId;
|
|
19
|
+
if (!agentId) {
|
|
20
|
+
return next(new Error('agentId is required'));
|
|
21
|
+
}
|
|
22
|
+
socket.data.agentId = agentId;
|
|
23
|
+
next();
|
|
24
|
+
});
|
|
25
|
+
io.on('connection', (socket) => {
|
|
26
|
+
const agentId = getAgentId(socket);
|
|
27
|
+
console.log(`[context] Agent connected: ${agentId}`);
|
|
28
|
+
// =========================================================================
|
|
29
|
+
// Search
|
|
30
|
+
// =========================================================================
|
|
31
|
+
/**
|
|
32
|
+
* search:memories — Atlas Vector Search on memories collection
|
|
33
|
+
*/
|
|
34
|
+
socket.on('search:memories', async (data, callback) => {
|
|
35
|
+
try {
|
|
36
|
+
const results = await (0, agentic_memory_1.vectorSearch)({
|
|
37
|
+
agentId,
|
|
38
|
+
query: data.query,
|
|
39
|
+
type: data.type,
|
|
40
|
+
limit: data.limit,
|
|
41
|
+
minScore: data.minScore,
|
|
42
|
+
});
|
|
43
|
+
callback({ success: true, results });
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
callback({ success: false, error: error.message });
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* search:summaries — Atlas Vector Search on conversationSummaries
|
|
51
|
+
*/
|
|
52
|
+
socket.on('search:summaries', async (data, callback) => {
|
|
53
|
+
try {
|
|
54
|
+
const results = await (0, agentic_memory_2.searchSummaries)({
|
|
55
|
+
agentId,
|
|
56
|
+
query: data.query,
|
|
57
|
+
limit: data.limit,
|
|
58
|
+
minScore: data.minScore,
|
|
59
|
+
});
|
|
60
|
+
callback({ success: true, results });
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
callback({ success: false, error: error.message });
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* recall — Hybrid recall: important + recent + semantic
|
|
68
|
+
*/
|
|
69
|
+
socket.on('recall', async (data, callback) => {
|
|
70
|
+
try {
|
|
71
|
+
const [memories, context] = await Promise.all([
|
|
72
|
+
(0, agentic_memory_1.recall)({
|
|
73
|
+
agentId,
|
|
74
|
+
context: data.context,
|
|
75
|
+
limit: data.limit,
|
|
76
|
+
}),
|
|
77
|
+
(0, agentic_memory_2.recallContext)({
|
|
78
|
+
agentId,
|
|
79
|
+
sessionId: data.sessionId,
|
|
80
|
+
context: data.context,
|
|
81
|
+
limit: data.summaryLimit || 5,
|
|
82
|
+
}),
|
|
83
|
+
]);
|
|
84
|
+
callback({
|
|
85
|
+
success: true,
|
|
86
|
+
memories: memories.memories,
|
|
87
|
+
breakdown: memories.breakdown,
|
|
88
|
+
summaries: context,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
callback({ success: false, error: error.message });
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
// =========================================================================
|
|
96
|
+
// Compression / Storage
|
|
97
|
+
// =========================================================================
|
|
98
|
+
/**
|
|
99
|
+
* compress:store — Store summary + extracted facts
|
|
100
|
+
*/
|
|
101
|
+
socket.on('compress:store', async (data, callback) => {
|
|
102
|
+
try {
|
|
103
|
+
const summary = await (0, agentic_memory_2.createSummary)({
|
|
104
|
+
sessionId: data.sessionId,
|
|
105
|
+
agentId,
|
|
106
|
+
summary: data.summary,
|
|
107
|
+
sections: data.sections,
|
|
108
|
+
messagesDigested: data.messagesDigested,
|
|
109
|
+
tokensBefore: data.tokensBefore,
|
|
110
|
+
tokensAfter: data.tokensAfter,
|
|
111
|
+
triggerReason: data.triggerReason,
|
|
112
|
+
});
|
|
113
|
+
// Extract and store facts if provided
|
|
114
|
+
if (data.extractedFacts && Array.isArray(data.extractedFacts)) {
|
|
115
|
+
const factPromises = data.extractedFacts.map((fact) => (0, agentic_memory_1.createMemory)({
|
|
116
|
+
agentId,
|
|
117
|
+
type: (fact.type || 'fact'),
|
|
118
|
+
content: fact.content,
|
|
119
|
+
metadata: fact.metadata,
|
|
120
|
+
}).catch(err => {
|
|
121
|
+
console.warn('[context] Failed to store extracted fact:', err.message);
|
|
122
|
+
return null;
|
|
123
|
+
}));
|
|
124
|
+
await Promise.all(factPromises);
|
|
125
|
+
}
|
|
126
|
+
callback({ success: true, summary });
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
callback({ success: false, error: error.message });
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
// =========================================================================
|
|
133
|
+
// State Management
|
|
134
|
+
// =========================================================================
|
|
135
|
+
/**
|
|
136
|
+
* state:get — Get context state for session
|
|
137
|
+
*/
|
|
138
|
+
socket.on('state:get', async (data, callback) => {
|
|
139
|
+
try {
|
|
140
|
+
const state = await (0, agentic_memory_2.getContextState)(agentId, data.sessionId);
|
|
141
|
+
callback({ success: true, state });
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
callback({ success: false, error: error.message });
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
/**
|
|
148
|
+
* state:update — Update context state
|
|
149
|
+
*/
|
|
150
|
+
socket.on('state:update', async (data, callback) => {
|
|
151
|
+
try {
|
|
152
|
+
const state = await (0, agentic_memory_2.updateContextState)({
|
|
153
|
+
sessionId: data.sessionId,
|
|
154
|
+
agentId,
|
|
155
|
+
tokensUsed: data.tokensUsed,
|
|
156
|
+
contextWindow: data.contextWindow,
|
|
157
|
+
modelName: data.modelName,
|
|
158
|
+
messagesCount: data.messagesCount,
|
|
159
|
+
});
|
|
160
|
+
callback({ success: true, state });
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
callback({ success: false, error: error.message });
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
// =========================================================================
|
|
167
|
+
// Goals
|
|
168
|
+
// =========================================================================
|
|
169
|
+
/**
|
|
170
|
+
* goals:get — Get active goals
|
|
171
|
+
*/
|
|
172
|
+
socket.on('goals:get', async (data, callback) => {
|
|
173
|
+
try {
|
|
174
|
+
const filter = {
|
|
175
|
+
agentId: agentId.toLowerCase(),
|
|
176
|
+
};
|
|
177
|
+
if (data?.sessionKey)
|
|
178
|
+
filter.sessionKey = data.sessionKey;
|
|
179
|
+
if (data?.status) {
|
|
180
|
+
filter.status = data.status;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
filter.status = { $in: ['active', 'blocked'] };
|
|
184
|
+
}
|
|
185
|
+
const goals = await agentic_memory_3.Goal.find(filter)
|
|
186
|
+
.sort({ priority: -1, createdAt: -1 })
|
|
187
|
+
.limit(data?.limit || 20)
|
|
188
|
+
.lean();
|
|
189
|
+
callback({ success: true, goals });
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
callback({ success: false, error: error.message });
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
/**
|
|
196
|
+
* goals:update — Update goal status
|
|
197
|
+
*/
|
|
198
|
+
socket.on('goals:update', async (data, callback) => {
|
|
199
|
+
try {
|
|
200
|
+
const updates = {};
|
|
201
|
+
if (data.status)
|
|
202
|
+
updates.status = data.status;
|
|
203
|
+
if (data.priority !== undefined)
|
|
204
|
+
updates.priority = data.priority;
|
|
205
|
+
if (data.description)
|
|
206
|
+
updates.description = data.description;
|
|
207
|
+
if (data.blockedBy)
|
|
208
|
+
updates.blockedBy = data.blockedBy;
|
|
209
|
+
if (data.status === 'completed')
|
|
210
|
+
updates.completedAt = new Date();
|
|
211
|
+
const goal = await agentic_memory_3.Goal.findOneAndUpdate({ _id: data.goalId, agentId: agentId.toLowerCase() }, { $set: updates }, { new: true }).lean();
|
|
212
|
+
if (!goal) {
|
|
213
|
+
return callback({ success: false, error: 'Goal not found' });
|
|
214
|
+
}
|
|
215
|
+
callback({ success: true, goal });
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
callback({ success: false, error: error.message });
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
/**
|
|
222
|
+
* goals:create — Create a new goal
|
|
223
|
+
*/
|
|
224
|
+
socket.on('goals:create', async (data, callback) => {
|
|
225
|
+
try {
|
|
226
|
+
const goal = new agentic_memory_3.Goal({
|
|
227
|
+
agentId: agentId.toLowerCase(),
|
|
228
|
+
sessionKey: data.sessionKey,
|
|
229
|
+
parentGoalId: data.parentGoalId,
|
|
230
|
+
description: data.description,
|
|
231
|
+
status: 'active',
|
|
232
|
+
priority: data.priority || 3,
|
|
233
|
+
metadata: data.metadata || {},
|
|
234
|
+
});
|
|
235
|
+
await goal.save();
|
|
236
|
+
callback({ success: true, goal: goal.toObject() });
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
callback({ success: false, error: error.message });
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
socket.on('disconnect', () => {
|
|
243
|
+
console.log(`[context] Agent disconnected: ${agentId}`);
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/namespaces/context.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAuBH,sDA8PC;AAlRD,8DAImC;AACnC,8DAMmC;AACnC,8DAEmC;AAEnC,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAiB,CAAC;AACvC,CAAC;AAED,SAAgB,qBAAqB,CAAC,EAAa;IACjD,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAC9B,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;QAErD,4EAA4E;QAC5E,SAAS;QACT,4EAA4E;QAE5E;;WAEG;QACH,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACpD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAA,6BAAY,EAAC;oBACjC,OAAO;oBACP,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACxB,CAAC,CAAC;gBACH,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;WAEG;QACH,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACrD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAA,gCAAe,EAAC;oBACpC,OAAO;oBACP,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACxB,CAAC,CAAC;gBACH,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;WAEG;QACH,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC3C,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC5C,IAAA,uBAAM,EAAC;wBACL,OAAO;wBACP,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;qBAClB,CAAC;oBACF,IAAA,8BAAa,EAAC;wBACZ,OAAO;wBACP,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,KAAK,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC;qBAC9B,CAAC;iBACH,CAAC,CAAC;gBAEH,QAAQ,CAAC;oBACP,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,SAAS,EAAE,OAAO;iBACnB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,wBAAwB;QACxB,4EAA4E;QAE5E;;WAEG;QACH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACnD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAA,8BAAa,EAAC;oBAClC,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,OAAO;oBACP,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;oBACvC,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;iBAClC,CAAC,CAAC;gBAEH,sCAAsC;gBACtC,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAI7C,EAAE,EAAE,CACH,IAAA,6BAAY,EAAC;wBACX,OAAO;wBACP,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAmD;wBAC7E,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,QAAQ,EAAE,IAAI,CAAC,QAMd;qBACF,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;wBACb,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;wBACvE,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,CACH,CAAC;oBACF,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAClC,CAAC;gBAED,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,mBAAmB;QACnB,4EAA4E;QAE5E;;WAEG;QACH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC9C,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAA,gCAAe,EAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7D,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;WAEG;QACH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACjD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAA,mCAAkB,EAAC;oBACrC,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,OAAO;oBACP,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,aAAa,EAAE,IAAI,CAAC,aAAa;iBAClC,CAAC,CAAC;gBACH,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,QAAQ;QACR,4EAA4E;QAE5E;;WAEG;QACH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC9C,IAAI,CAAC;gBACH,MAAM,MAAM,GAA4B;oBACtC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE;iBAC/B,CAAC;gBACF,IAAI,IAAI,EAAE,UAAU;oBAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC1D,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;oBACjB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;gBACjD,CAAC;gBAED,MAAM,KAAK,GAAG,MAAM,qBAAI,CAAC,IAAI,CAAC,MAAM,CAAC;qBAClC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC;qBACrC,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;qBACxB,IAAI,EAAE,CAAC;gBAEV,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;WAEG;QACH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACjD,IAAI,CAAC;gBACH,MAAM,OAAO,GAA4B,EAAE,CAAC;gBAC5C,IAAI,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC9C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;oBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAClE,IAAI,IAAI,CAAC,WAAW;oBAAE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC7D,IAAI,IAAI,CAAC,SAAS;oBAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBACvD,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW;oBAAE,OAAO,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;gBAElE,MAAM,IAAI,GAAG,MAAM,qBAAI,CAAC,gBAAgB,CACtC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,EACpD,EAAE,IAAI,EAAE,OAAO,EAAE,EACjB,EAAE,GAAG,EAAE,IAAI,EAAE,CACd,CAAC,IAAI,EAAE,CAAC;gBAET,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBAED,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;WAEG;QACH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACjD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,qBAAI,CAAC;oBACpB,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE;oBAC9B,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,MAAM,EAAE,QAAQ;oBAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC;oBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;iBAC9B,CAAC,CAAC;gBAEH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAC3B,OAAO,CAAC,GAAG,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { setupMemoryNamespace } from './memory';
|
|
2
2
|
export { setupAudioNamespace } from './audio';
|
|
3
3
|
export { setupEventsNamespace } from './events';
|
|
4
|
+
export { setupContextNamespace } from './context';
|
|
5
|
+
export { setupSyncNamespace } from './sync';
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/namespaces/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/namespaces/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC"}
|
package/dist/namespaces/index.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setupEventsNamespace = exports.setupAudioNamespace = exports.setupMemoryNamespace = void 0;
|
|
3
|
+
exports.setupSyncNamespace = exports.setupContextNamespace = exports.setupEventsNamespace = exports.setupAudioNamespace = exports.setupMemoryNamespace = void 0;
|
|
4
4
|
var memory_1 = require("./memory");
|
|
5
5
|
Object.defineProperty(exports, "setupMemoryNamespace", { enumerable: true, get: function () { return memory_1.setupMemoryNamespace; } });
|
|
6
6
|
var audio_1 = require("./audio");
|
|
7
7
|
Object.defineProperty(exports, "setupAudioNamespace", { enumerable: true, get: function () { return audio_1.setupAudioNamespace; } });
|
|
8
8
|
var events_1 = require("./events");
|
|
9
9
|
Object.defineProperty(exports, "setupEventsNamespace", { enumerable: true, get: function () { return events_1.setupEventsNamespace; } });
|
|
10
|
+
var context_1 = require("./context");
|
|
11
|
+
Object.defineProperty(exports, "setupContextNamespace", { enumerable: true, get: function () { return context_1.setupContextNamespace; } });
|
|
12
|
+
var sync_1 = require("./sync");
|
|
13
|
+
Object.defineProperty(exports, "setupSyncNamespace", { enumerable: true, get: function () { return sync_1.setupSyncNamespace; } });
|
|
10
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/namespaces/index.ts"],"names":[],"mappings":";;;AAAA,mCAAgD;AAAvC,8GAAA,oBAAoB,OAAA;AAC7B,iCAA8C;AAArC,4GAAA,mBAAmB,OAAA;AAC5B,mCAAgD;AAAvC,8GAAA,oBAAoB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/namespaces/index.ts"],"names":[],"mappings":";;;AAAA,mCAAgD;AAAvC,8GAAA,oBAAoB,OAAA;AAC7B,iCAA8C;AAArC,4GAAA,mBAAmB,OAAA;AAC5B,mCAAgD;AAAvC,8GAAA,oBAAoB,OAAA;AAC7B,qCAAkD;AAAzC,gHAAA,qBAAqB,OAAA;AAC9B,+BAA4C;AAAnC,0GAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* /sync Namespace
|
|
3
|
+
*
|
|
4
|
+
* Bidirectional sync between local SQLite caches and MongoDB source of truth.
|
|
5
|
+
*
|
|
6
|
+
* Events:
|
|
7
|
+
* sync:pull — Get memories updated since timestamp
|
|
8
|
+
* sync:push — Push locally-created memories to MongoDB
|
|
9
|
+
* sync:status — Get sync state
|
|
10
|
+
*/
|
|
11
|
+
import { Namespace } from 'socket.io';
|
|
12
|
+
export declare function setupSyncNamespace(io: Namespace): void;
|
|
13
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/namespaces/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAU,MAAM,WAAW,CAAC;AAW9C,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,SAAS,QAoI/C"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* /sync Namespace
|
|
4
|
+
*
|
|
5
|
+
* Bidirectional sync between local SQLite caches and MongoDB source of truth.
|
|
6
|
+
*
|
|
7
|
+
* Events:
|
|
8
|
+
* sync:pull — Get memories updated since timestamp
|
|
9
|
+
* sync:push — Push locally-created memories to MongoDB
|
|
10
|
+
* sync:status — Get sync state
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.setupSyncNamespace = setupSyncNamespace;
|
|
14
|
+
const agentic_memory_1 = require("@lantanios/agentic-memory");
|
|
15
|
+
function getAgentId(socket) {
|
|
16
|
+
return socket.data.agentId;
|
|
17
|
+
}
|
|
18
|
+
function setupSyncNamespace(io) {
|
|
19
|
+
io.use((socket, next) => {
|
|
20
|
+
const agentId = socket.handshake.auth.agentId;
|
|
21
|
+
if (!agentId) {
|
|
22
|
+
return next(new Error('agentId is required'));
|
|
23
|
+
}
|
|
24
|
+
socket.data.agentId = agentId;
|
|
25
|
+
next();
|
|
26
|
+
});
|
|
27
|
+
io.on('connection', (socket) => {
|
|
28
|
+
const agentId = getAgentId(socket);
|
|
29
|
+
console.log(`[sync] Agent connected: ${agentId}`);
|
|
30
|
+
/**
|
|
31
|
+
* sync:pull — Get all memories updated since a given timestamp.
|
|
32
|
+
* Used by clients to pull changes from MongoDB into their local SQLite cache.
|
|
33
|
+
*/
|
|
34
|
+
socket.on('sync:pull', async (data, callback) => {
|
|
35
|
+
try {
|
|
36
|
+
const since = data.since ? new Date(data.since) : new Date(0);
|
|
37
|
+
const limit = data.limit || 500;
|
|
38
|
+
const memories = await agentic_memory_1.Memory.find({
|
|
39
|
+
agentId: agentId.toLowerCase(),
|
|
40
|
+
updatedAt: { $gt: since },
|
|
41
|
+
})
|
|
42
|
+
.sort({ updatedAt: 1 })
|
|
43
|
+
.limit(limit)
|
|
44
|
+
.lean();
|
|
45
|
+
// Get the watermark (latest updatedAt in the batch)
|
|
46
|
+
const watermark = memories.length > 0
|
|
47
|
+
? memories[memories.length - 1].updatedAt
|
|
48
|
+
: since;
|
|
49
|
+
callback({
|
|
50
|
+
success: true,
|
|
51
|
+
memories,
|
|
52
|
+
count: memories.length,
|
|
53
|
+
watermark: watermark.toISOString(),
|
|
54
|
+
hasMore: memories.length === limit,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
callback({ success: false, error: error.message });
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
/**
|
|
62
|
+
* sync:push — Push locally-created memories to MongoDB.
|
|
63
|
+
* Used when client creates memories offline or for bulk upload.
|
|
64
|
+
*/
|
|
65
|
+
socket.on('sync:push', async (data, callback) => {
|
|
66
|
+
try {
|
|
67
|
+
if (!Array.isArray(data.memories)) {
|
|
68
|
+
return callback({ success: false, error: 'memories must be an array' });
|
|
69
|
+
}
|
|
70
|
+
const results = [];
|
|
71
|
+
for (const mem of data.memories) {
|
|
72
|
+
try {
|
|
73
|
+
const created = await (0, agentic_memory_1.createMemory)({
|
|
74
|
+
agentId,
|
|
75
|
+
type: mem.type,
|
|
76
|
+
content: mem.content,
|
|
77
|
+
metadata: mem.metadata,
|
|
78
|
+
expiresAt: mem.expiresAt ? new Date(mem.expiresAt) : undefined,
|
|
79
|
+
});
|
|
80
|
+
results.push({
|
|
81
|
+
localId: mem.localId || mem._id || '',
|
|
82
|
+
remoteId: created._id,
|
|
83
|
+
success: true,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
results.push({
|
|
88
|
+
localId: mem.localId || mem._id || '',
|
|
89
|
+
remoteId: '',
|
|
90
|
+
success: false,
|
|
91
|
+
error: err.message,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const succeeded = results.filter((r) => r.success).length;
|
|
96
|
+
const failed = results.filter((r) => !r.success).length;
|
|
97
|
+
callback({
|
|
98
|
+
success: true,
|
|
99
|
+
results,
|
|
100
|
+
summary: { total: results.length, succeeded, failed },
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
callback({ success: false, error: error.message });
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
/**
|
|
108
|
+
* sync:status — Get sync state information.
|
|
109
|
+
*/
|
|
110
|
+
socket.on('sync:status', async (callback) => {
|
|
111
|
+
try {
|
|
112
|
+
const totalMemories = await agentic_memory_1.Memory.countDocuments({
|
|
113
|
+
agentId: agentId.toLowerCase(),
|
|
114
|
+
deleted: false,
|
|
115
|
+
});
|
|
116
|
+
const latestMemory = await agentic_memory_1.Memory.findOne({
|
|
117
|
+
agentId: agentId.toLowerCase(),
|
|
118
|
+
})
|
|
119
|
+
.sort({ updatedAt: -1 })
|
|
120
|
+
.lean();
|
|
121
|
+
callback({
|
|
122
|
+
success: true,
|
|
123
|
+
status: {
|
|
124
|
+
agentId,
|
|
125
|
+
totalMemories,
|
|
126
|
+
latestUpdate: latestMemory?.updatedAt?.toISOString() || null,
|
|
127
|
+
serverTime: new Date().toISOString(),
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
callback({ success: false, error: error.message });
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
socket.on('disconnect', () => {
|
|
136
|
+
console.log(`[sync] Agent disconnected: ${agentId}`);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/namespaces/sync.ts"],"names":[],"mappings":"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"}
|