@t0ken.ai/memoryx-sdk 1.0.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.
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SQLiteStorage = void 0;
37
+ exports.setStorageDir = setStorageDir;
38
+ exports.getStorageDir = getStorageDir;
39
+ exports.getDb = getDb;
40
+ const path = __importStar(require("path"));
41
+ const os = __importStar(require("os"));
42
+ const fs = __importStar(require("fs"));
43
+ let dbPromise = null;
44
+ let storageDir = null;
45
+ function setStorageDir(dir) {
46
+ storageDir = dir;
47
+ }
48
+ function getStorageDir() {
49
+ if (storageDir)
50
+ return storageDir;
51
+ return path.join(os.homedir(), ".memoryx", "sdk");
52
+ }
53
+ async function getDb() {
54
+ if (dbPromise)
55
+ return dbPromise;
56
+ dbPromise = (async () => {
57
+ const dir = getStorageDir();
58
+ if (!fs.existsSync(dir)) {
59
+ fs.mkdirSync(dir, { recursive: true });
60
+ }
61
+ const Database = (await Promise.resolve().then(() => __importStar(require("better-sqlite3")))).default;
62
+ const dbPath = path.join(dir, "memoryx.db");
63
+ const db = new Database(dbPath);
64
+ db.exec(`
65
+ CREATE TABLE IF NOT EXISTS config (
66
+ key TEXT PRIMARY KEY,
67
+ value TEXT
68
+ );
69
+
70
+ CREATE TABLE IF NOT EXISTS memory_queue (
71
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
72
+ content TEXT NOT NULL,
73
+ metadata TEXT DEFAULT '{}',
74
+ timestamp INTEGER NOT NULL,
75
+ retry_count INTEGER DEFAULT 0
76
+ );
77
+
78
+ CREATE TABLE IF NOT EXISTS conversation_queue (
79
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
80
+ conversation_id TEXT NOT NULL,
81
+ conversation_created_at INTEGER NOT NULL,
82
+ role TEXT NOT NULL,
83
+ content TEXT NOT NULL,
84
+ timestamp INTEGER NOT NULL,
85
+ retry_count INTEGER DEFAULT 0
86
+ );
87
+
88
+ CREATE INDEX IF NOT EXISTS idx_memory_queue_timestamp ON memory_queue(timestamp);
89
+ CREATE INDEX IF NOT EXISTS idx_conversation_created ON conversation_queue(conversation_created_at);
90
+ CREATE INDEX IF NOT EXISTS idx_conversation_id ON conversation_queue(conversation_id);
91
+
92
+ CREATE TABLE IF NOT EXISTS dead_letter_queue (
93
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
94
+ queue_type TEXT NOT NULL,
95
+ conversation_id TEXT,
96
+ data TEXT NOT NULL,
97
+ retry_count INTEGER DEFAULT 0,
98
+ error_message TEXT,
99
+ created_at INTEGER NOT NULL
100
+ );
101
+
102
+ CREATE INDEX IF NOT EXISTS idx_dlq_type ON dead_letter_queue(queue_type);
103
+ CREATE INDEX IF NOT EXISTS idx_dlq_created ON dead_letter_queue(created_at);
104
+ `);
105
+ return db;
106
+ })();
107
+ return dbPromise;
108
+ }
109
+ class SQLiteStorage {
110
+ static async loadConfig() {
111
+ try {
112
+ const db = await getDb();
113
+ const row = db.prepare("SELECT value FROM config WHERE key = 'config'").get();
114
+ if (row) {
115
+ return JSON.parse(row.value);
116
+ }
117
+ }
118
+ catch (e) {
119
+ // ignore
120
+ }
121
+ return null;
122
+ }
123
+ static async saveConfig(config) {
124
+ try {
125
+ const db = await getDb();
126
+ db.prepare("INSERT OR REPLACE INTO config (key, value) VALUES ('config', ?)").run(JSON.stringify(config));
127
+ }
128
+ catch (e) {
129
+ // ignore
130
+ }
131
+ }
132
+ // Memory queue operations
133
+ static async addToMemoryQueue(content, metadata = {}) {
134
+ const db = await getDb();
135
+ const result = db.prepare(`
136
+ INSERT INTO memory_queue (content, metadata, timestamp)
137
+ VALUES (?, ?, ?)
138
+ `).run(content, JSON.stringify(metadata), Date.now());
139
+ return result.lastInsertRowid;
140
+ }
141
+ static async getMemoryQueueItems(limit = 100) {
142
+ const db = await getDb();
143
+ return db.prepare(`
144
+ SELECT id, content, metadata, timestamp, retry_count
145
+ FROM memory_queue
146
+ ORDER BY id ASC
147
+ LIMIT ?
148
+ `).all(limit);
149
+ }
150
+ static async deleteMemoryItems(ids) {
151
+ if (ids.length === 0)
152
+ return;
153
+ const db = await getDb();
154
+ const placeholders = ids.map(() => '?').join(',');
155
+ db.prepare(`DELETE FROM memory_queue WHERE id IN (${placeholders})`).run(...ids);
156
+ }
157
+ static async incrementMemoryRetry(ids) {
158
+ if (ids.length === 0)
159
+ return;
160
+ const db = await getDb();
161
+ const placeholders = ids.map(() => '?').join(',');
162
+ db.prepare(`UPDATE memory_queue SET retry_count = retry_count + 1 WHERE id IN (${placeholders})`).run(...ids);
163
+ }
164
+ static async deleteOldMemoryRetries(maxRetry = 5, maxAgeSeconds = 7 * 24 * 60 * 60) {
165
+ const db = await getDb();
166
+ const cutoffMs = Date.now() - maxAgeSeconds * 1000;
167
+ db.prepare("DELETE FROM memory_queue WHERE retry_count >= ? OR timestamp < ?").run(maxRetry, cutoffMs);
168
+ }
169
+ static async getMemoryQueueLength() {
170
+ const db = await getDb();
171
+ const row = db.prepare("SELECT COUNT(*) as count FROM memory_queue").get();
172
+ return row?.count || 0;
173
+ }
174
+ static async getMemoryQueueItemsExceedingRetry(maxRetry) {
175
+ const db = await getDb();
176
+ return db.prepare(`
177
+ SELECT id, content, metadata, retry_count
178
+ FROM memory_queue
179
+ WHERE retry_count >= ?
180
+ `).all(maxRetry);
181
+ }
182
+ static async moveMemoryToDeadLetterQueue(id, queueType = 'memory', errorMessage = '') {
183
+ const db = await getDb();
184
+ // 获取 memory 数据
185
+ const row = db.prepare("SELECT content, metadata, retry_count FROM memory_queue WHERE id = ?").get(id);
186
+ if (!row)
187
+ return;
188
+ // 插入死信队列
189
+ db.prepare(`
190
+ INSERT INTO dead_letter_queue (queue_type, conversation_id, data, retry_count, error_message, created_at)
191
+ VALUES (?, ?, ?, ?, ?, ?)
192
+ `).run(queueType, null, JSON.stringify({ content: row.content, metadata: row.metadata }), row.retry_count, errorMessage, Date.now());
193
+ }
194
+ // Conversation queue operations
195
+ static async addToConversationQueue(conversationId, conversationCreatedAt, role, content) {
196
+ const db = await getDb();
197
+ const result = db.prepare(`
198
+ INSERT INTO conversation_queue (conversation_id, conversation_created_at, role, content, timestamp)
199
+ VALUES (?, ?, ?, ?, ?)
200
+ `).run(conversationId, conversationCreatedAt, role, content, Date.now());
201
+ return result.lastInsertRowid;
202
+ }
203
+ static async getConversationStats(conversationId) {
204
+ const db = await getDb();
205
+ const rows = db.prepare(`
206
+ SELECT role FROM conversation_queue
207
+ WHERE conversation_id = ?
208
+ ORDER BY id ASC
209
+ `).all(conversationId);
210
+ let rounds = 0;
211
+ let i = 0;
212
+ while (i < rows.length) {
213
+ if (rows[i].role === 'user') {
214
+ if (i + 1 < rows.length && rows[i + 1].role === 'assistant') {
215
+ rounds++;
216
+ i += 2;
217
+ }
218
+ else {
219
+ i++;
220
+ }
221
+ }
222
+ else {
223
+ i++;
224
+ }
225
+ }
226
+ return { count: rows.length, rounds };
227
+ }
228
+ static async getConversationMessages(conversationId) {
229
+ const db = await getDb();
230
+ return db.prepare(`
231
+ SELECT id, role, content, timestamp, retry_count
232
+ FROM conversation_queue
233
+ WHERE conversation_id = ?
234
+ ORDER BY id ASC
235
+ `).all(conversationId);
236
+ }
237
+ static async getNextConversation() {
238
+ const db = await getDb();
239
+ const row = db.prepare(`
240
+ SELECT conversation_id, MIN(conversation_created_at) as conversation_created_at
241
+ FROM conversation_queue
242
+ GROUP BY conversation_id
243
+ ORDER BY MIN(conversation_created_at) ASC
244
+ LIMIT 1
245
+ `).get();
246
+ return row ? { conversationId: row.conversation_id, conversationCreatedAt: row.conversation_created_at } : null;
247
+ }
248
+ static async deleteConversation(conversationId) {
249
+ const db = await getDb();
250
+ db.prepare("DELETE FROM conversation_queue WHERE conversation_id = ?").run(conversationId);
251
+ }
252
+ static async incrementConversationRetry(conversationId) {
253
+ const db = await getDb();
254
+ db.prepare("UPDATE conversation_queue SET retry_count = retry_count + 1 WHERE conversation_id = ?").run(conversationId);
255
+ }
256
+ static async getConversationMaxRetry(conversationId) {
257
+ const db = await getDb();
258
+ const row = db.prepare("SELECT MAX(retry_count) as max_retry FROM conversation_queue WHERE conversation_id = ?").get(conversationId);
259
+ return row?.max_retry || 0;
260
+ }
261
+ static async clearOldConversations(maxAgeSeconds = 7 * 24 * 60 * 60) {
262
+ const db = await getDb();
263
+ const cutoff = Math.floor(Date.now() / 1000) - maxAgeSeconds;
264
+ db.prepare("DELETE FROM conversation_queue WHERE conversation_created_at < ?").run(cutoff);
265
+ }
266
+ static async getConversationQueueLength() {
267
+ const db = await getDb();
268
+ const row = db.prepare("SELECT COUNT(DISTINCT conversation_id) as count FROM conversation_queue").get();
269
+ return row?.count || 0;
270
+ }
271
+ static async getOldestMessageAge(conversationId) {
272
+ const db = await getDb();
273
+ const row = db.prepare("SELECT MIN(timestamp) as oldest FROM conversation_queue WHERE conversation_id = ?").get(conversationId);
274
+ if (!row?.oldest)
275
+ return 0;
276
+ return Date.now() - row.oldest;
277
+ }
278
+ // Dead Letter Queue operations
279
+ static async moveToDeadLetterQueue(conversationId, queueType = 'conversation', errorMessage = '') {
280
+ const db = await getDb();
281
+ // 获取会话的所有消息
282
+ const messages = await this.getConversationMessages(conversationId);
283
+ if (messages.length === 0)
284
+ return;
285
+ const maxRetry = await this.getConversationMaxRetry(conversationId);
286
+ // 插入死信队列
287
+ db.prepare(`
288
+ INSERT INTO dead_letter_queue (queue_type, conversation_id, data, retry_count, error_message, created_at)
289
+ VALUES (?, ?, ?, ?, ?, ?)
290
+ `).run(queueType, conversationId, JSON.stringify(messages), maxRetry, errorMessage, Date.now());
291
+ }
292
+ static async getDeadLetterQueueItems(limit = 100) {
293
+ const db = await getDb();
294
+ return db.prepare(`
295
+ SELECT id, queue_type, conversation_id, data, retry_count, error_message, created_at
296
+ FROM dead_letter_queue
297
+ ORDER BY created_at DESC
298
+ LIMIT ?
299
+ `).all(limit);
300
+ }
301
+ static async getDeadLetterQueueCount() {
302
+ const db = await getDb();
303
+ const row = db.prepare("SELECT COUNT(*) as count FROM dead_letter_queue").get();
304
+ return row?.count || 0;
305
+ }
306
+ static async deleteDeadLetterItem(id) {
307
+ const db = await getDb();
308
+ db.prepare("DELETE FROM dead_letter_queue WHERE id = ?").run(id);
309
+ }
310
+ static async clearDeadLetterQueue(maxAgeSeconds = 30 * 24 * 60 * 60) {
311
+ const db = await getDb();
312
+ const cutoff = Date.now() - maxAgeSeconds * 1000;
313
+ db.prepare("DELETE FROM dead_letter_queue WHERE created_at < ?").run(cutoff);
314
+ }
315
+ }
316
+ exports.SQLiteStorage = SQLiteStorage;
317
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ export interface FlushStrategy {
2
+ rounds?: number;
3
+ batchSize?: number;
4
+ intervalMs?: number;
5
+ maxTokens?: number;
6
+ customTrigger?: (stats: QueueStats) => boolean;
7
+ }
8
+ export type PresetMode = 'realtime' | 'batch' | 'conversation';
9
+ export interface MemoryXSDKOptions {
10
+ apiKey?: string;
11
+ apiUrl?: string;
12
+ projectId?: string;
13
+ strategy?: FlushStrategy;
14
+ preset?: PresetMode;
15
+ storageDir?: string;
16
+ autoRegister?: boolean;
17
+ agentType?: string;
18
+ }
19
+ export interface QueueStats {
20
+ messageCount: number;
21
+ rounds: number;
22
+ totalTokens: number;
23
+ oldestMessageAge: number;
24
+ conversationId: string;
25
+ }
26
+ export interface QueueItem {
27
+ id: number;
28
+ content: string;
29
+ metadata: string;
30
+ timestamp: number;
31
+ retry_count: number;
32
+ }
33
+ export interface ConversationItem {
34
+ id: number;
35
+ conversation_id: string;
36
+ conversation_created_at: number;
37
+ role: string;
38
+ content: string;
39
+ timestamp: number;
40
+ retry_count: number;
41
+ }
42
+ export interface Memory {
43
+ content: string;
44
+ metadata?: Record<string, any>;
45
+ }
46
+ export interface Message {
47
+ role: 'user' | 'assistant';
48
+ content: string;
49
+ timestamp?: number;
50
+ tokens?: number;
51
+ }
52
+ export interface SearchResult {
53
+ id: string;
54
+ content: string;
55
+ category: string;
56
+ score: number;
57
+ }
58
+ export interface SearchResponse {
59
+ success: boolean;
60
+ data: SearchResult[];
61
+ related_memories?: SearchResult[];
62
+ remaining_quota?: number;
63
+ }
64
+ export interface AddResponse {
65
+ success: boolean;
66
+ task_id?: string;
67
+ status?: string;
68
+ }
69
+ export interface AccountInfo {
70
+ agent_id: string;
71
+ api_key: string;
72
+ project_id: string;
73
+ }
74
+ export interface StoredConfig {
75
+ apiKey: string | null;
76
+ projectId: string;
77
+ userId: string | null;
78
+ apiBaseUrl: string;
79
+ }
80
+ export declare const PRESETS: Record<PresetMode, FlushStrategy>;
81
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PRESETS = void 0;
4
+ exports.PRESETS = {
5
+ realtime: { batchSize: 1, intervalMs: 0 },
6
+ batch: { batchSize: 50, intervalMs: 5000 },
7
+ conversation: { maxTokens: 30000, intervalMs: 5 * 60 * 1000 }
8
+ };
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA4Fa,QAAA,OAAO,GAAsC;IACxD,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;IACzC,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC1C,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE;CAC9D,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@t0ken.ai/memoryx-sdk",
3
+ "version": "1.0.0",
4
+ "description": "MemoryX Node.js SDK - 让 AI Agents 轻松拥有持久记忆",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "prepublishOnly": "npm run build"
10
+ },
11
+ "keywords": [
12
+ "memory",
13
+ "ai",
14
+ "agent",
15
+ "llm",
16
+ "cognitive",
17
+ "memoryx",
18
+ "mcp"
19
+ ],
20
+ "author": "MemoryX Team",
21
+ "license": "MIT",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/CensorKo/MemoryX"
25
+ },
26
+ "homepage": "https://t0ken.ai",
27
+ "dependencies": {
28
+ "better-sqlite3": "^11.0.0",
29
+ "js-tiktoken": "^1.0.0"
30
+ },
31
+ "devDependencies": {
32
+ "@types/better-sqlite3": "^7.6.11",
33
+ "@types/node": "^20.0.0",
34
+ "typescript": "^5.0.0"
35
+ },
36
+ "engines": {
37
+ "node": ">=18.0.0"
38
+ },
39
+ "files": [
40
+ "dist",
41
+ "README.md"
42
+ ]
43
+ }