@elizaos/plugin-memory 1.0.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.
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Session summaries table
3
+ * Stores condensed summaries of conversation sessions
4
+ */
5
+ export declare const sessionSummaries: import("drizzle-orm/pg-core").PgTableWithColumns<{
6
+ name: "session_summaries";
7
+ schema: undefined;
8
+ columns: {
9
+ id: import("drizzle-orm/pg-core").PgColumn<{
10
+ name: "id";
11
+ tableName: "session_summaries";
12
+ dataType: "string";
13
+ columnType: "PgVarchar";
14
+ data: string;
15
+ driverParam: string;
16
+ notNull: true;
17
+ hasDefault: false;
18
+ isPrimaryKey: true;
19
+ isAutoincrement: false;
20
+ hasRuntimeDefault: false;
21
+ enumValues: [string, ...string[]];
22
+ baseColumn: never;
23
+ identity: undefined;
24
+ generated: undefined;
25
+ }, {}, {
26
+ length: 36;
27
+ }>;
28
+ agentId: import("drizzle-orm/pg-core").PgColumn<{
29
+ name: "agent_id";
30
+ tableName: "session_summaries";
31
+ dataType: "string";
32
+ columnType: "PgVarchar";
33
+ data: string;
34
+ driverParam: string;
35
+ notNull: true;
36
+ hasDefault: false;
37
+ isPrimaryKey: false;
38
+ isAutoincrement: false;
39
+ hasRuntimeDefault: false;
40
+ enumValues: [string, ...string[]];
41
+ baseColumn: never;
42
+ identity: undefined;
43
+ generated: undefined;
44
+ }, {}, {
45
+ length: 36;
46
+ }>;
47
+ roomId: import("drizzle-orm/pg-core").PgColumn<{
48
+ name: "room_id";
49
+ tableName: "session_summaries";
50
+ dataType: "string";
51
+ columnType: "PgVarchar";
52
+ data: string;
53
+ driverParam: string;
54
+ notNull: true;
55
+ hasDefault: false;
56
+ isPrimaryKey: false;
57
+ isAutoincrement: false;
58
+ hasRuntimeDefault: false;
59
+ enumValues: [string, ...string[]];
60
+ baseColumn: never;
61
+ identity: undefined;
62
+ generated: undefined;
63
+ }, {}, {
64
+ length: 36;
65
+ }>;
66
+ entityId: import("drizzle-orm/pg-core").PgColumn<{
67
+ name: "entity_id";
68
+ tableName: "session_summaries";
69
+ dataType: "string";
70
+ columnType: "PgVarchar";
71
+ data: string;
72
+ driverParam: string;
73
+ notNull: false;
74
+ hasDefault: false;
75
+ isPrimaryKey: false;
76
+ isAutoincrement: false;
77
+ hasRuntimeDefault: false;
78
+ enumValues: [string, ...string[]];
79
+ baseColumn: never;
80
+ identity: undefined;
81
+ generated: undefined;
82
+ }, {}, {
83
+ length: 36;
84
+ }>;
85
+ summary: import("drizzle-orm/pg-core").PgColumn<{
86
+ name: "summary";
87
+ tableName: "session_summaries";
88
+ dataType: "string";
89
+ columnType: "PgText";
90
+ data: string;
91
+ driverParam: string;
92
+ notNull: true;
93
+ hasDefault: false;
94
+ isPrimaryKey: false;
95
+ isAutoincrement: false;
96
+ hasRuntimeDefault: false;
97
+ enumValues: [string, ...string[]];
98
+ baseColumn: never;
99
+ identity: undefined;
100
+ generated: undefined;
101
+ }, {}, {}>;
102
+ messageCount: import("drizzle-orm/pg-core").PgColumn<{
103
+ name: "message_count";
104
+ tableName: "session_summaries";
105
+ dataType: "number";
106
+ columnType: "PgInteger";
107
+ data: number;
108
+ driverParam: string | number;
109
+ notNull: true;
110
+ hasDefault: false;
111
+ isPrimaryKey: false;
112
+ isAutoincrement: false;
113
+ hasRuntimeDefault: false;
114
+ enumValues: undefined;
115
+ baseColumn: never;
116
+ identity: undefined;
117
+ generated: undefined;
118
+ }, {}, {}>;
119
+ lastMessageOffset: import("drizzle-orm/pg-core").PgColumn<{
120
+ name: "last_message_offset";
121
+ tableName: "session_summaries";
122
+ dataType: "number";
123
+ columnType: "PgInteger";
124
+ data: number;
125
+ driverParam: string | number;
126
+ notNull: true;
127
+ hasDefault: true;
128
+ isPrimaryKey: false;
129
+ isAutoincrement: false;
130
+ hasRuntimeDefault: false;
131
+ enumValues: undefined;
132
+ baseColumn: never;
133
+ identity: undefined;
134
+ generated: undefined;
135
+ }, {}, {}>;
136
+ startTime: import("drizzle-orm/pg-core").PgColumn<{
137
+ name: "start_time";
138
+ tableName: "session_summaries";
139
+ dataType: "date";
140
+ columnType: "PgTimestamp";
141
+ data: Date;
142
+ driverParam: string;
143
+ notNull: true;
144
+ hasDefault: false;
145
+ isPrimaryKey: false;
146
+ isAutoincrement: false;
147
+ hasRuntimeDefault: false;
148
+ enumValues: undefined;
149
+ baseColumn: never;
150
+ identity: undefined;
151
+ generated: undefined;
152
+ }, {}, {}>;
153
+ endTime: import("drizzle-orm/pg-core").PgColumn<{
154
+ name: "end_time";
155
+ tableName: "session_summaries";
156
+ dataType: "date";
157
+ columnType: "PgTimestamp";
158
+ data: Date;
159
+ driverParam: string;
160
+ notNull: true;
161
+ hasDefault: false;
162
+ isPrimaryKey: false;
163
+ isAutoincrement: false;
164
+ hasRuntimeDefault: false;
165
+ enumValues: undefined;
166
+ baseColumn: never;
167
+ identity: undefined;
168
+ generated: undefined;
169
+ }, {}, {}>;
170
+ topics: import("drizzle-orm/pg-core").PgColumn<{
171
+ name: "topics";
172
+ tableName: "session_summaries";
173
+ dataType: "json";
174
+ columnType: "PgJsonb";
175
+ data: unknown;
176
+ driverParam: unknown;
177
+ notNull: false;
178
+ hasDefault: false;
179
+ isPrimaryKey: false;
180
+ isAutoincrement: false;
181
+ hasRuntimeDefault: false;
182
+ enumValues: undefined;
183
+ baseColumn: never;
184
+ identity: undefined;
185
+ generated: undefined;
186
+ }, {}, {}>;
187
+ metadata: import("drizzle-orm/pg-core").PgColumn<{
188
+ name: "metadata";
189
+ tableName: "session_summaries";
190
+ dataType: "json";
191
+ columnType: "PgJsonb";
192
+ data: unknown;
193
+ driverParam: unknown;
194
+ notNull: false;
195
+ hasDefault: false;
196
+ isPrimaryKey: false;
197
+ isAutoincrement: false;
198
+ hasRuntimeDefault: false;
199
+ enumValues: undefined;
200
+ baseColumn: never;
201
+ identity: undefined;
202
+ generated: undefined;
203
+ }, {}, {}>;
204
+ embedding: import("drizzle-orm/pg-core").PgColumn<{
205
+ name: "embedding";
206
+ tableName: "session_summaries";
207
+ dataType: "array";
208
+ columnType: "PgArray";
209
+ data: number[];
210
+ driverParam: string | (string | number)[];
211
+ notNull: false;
212
+ hasDefault: false;
213
+ isPrimaryKey: false;
214
+ isAutoincrement: false;
215
+ hasRuntimeDefault: false;
216
+ enumValues: undefined;
217
+ baseColumn: import("drizzle-orm").Column<{
218
+ name: "embedding";
219
+ tableName: "session_summaries";
220
+ dataType: "number";
221
+ columnType: "PgReal";
222
+ data: number;
223
+ driverParam: string | number;
224
+ notNull: false;
225
+ hasDefault: false;
226
+ isPrimaryKey: false;
227
+ isAutoincrement: false;
228
+ hasRuntimeDefault: false;
229
+ enumValues: undefined;
230
+ baseColumn: never;
231
+ identity: undefined;
232
+ generated: undefined;
233
+ }, {}, {}>;
234
+ identity: undefined;
235
+ generated: undefined;
236
+ }, {}, {
237
+ baseBuilder: import("drizzle-orm/pg-core").PgColumnBuilder<{
238
+ name: "embedding";
239
+ dataType: "number";
240
+ columnType: "PgReal";
241
+ data: number;
242
+ driverParam: string | number;
243
+ enumValues: undefined;
244
+ }, {}, {}, import("drizzle-orm").ColumnBuilderExtraConfig>;
245
+ size: undefined;
246
+ }>;
247
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
248
+ name: "created_at";
249
+ tableName: "session_summaries";
250
+ dataType: "date";
251
+ columnType: "PgTimestamp";
252
+ data: Date;
253
+ driverParam: string;
254
+ notNull: true;
255
+ hasDefault: true;
256
+ isPrimaryKey: false;
257
+ isAutoincrement: false;
258
+ hasRuntimeDefault: false;
259
+ enumValues: undefined;
260
+ baseColumn: never;
261
+ identity: undefined;
262
+ generated: undefined;
263
+ }, {}, {}>;
264
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
265
+ name: "updated_at";
266
+ tableName: "session_summaries";
267
+ dataType: "date";
268
+ columnType: "PgTimestamp";
269
+ data: Date;
270
+ driverParam: string;
271
+ notNull: true;
272
+ hasDefault: true;
273
+ isPrimaryKey: false;
274
+ isAutoincrement: false;
275
+ hasRuntimeDefault: false;
276
+ enumValues: undefined;
277
+ baseColumn: never;
278
+ identity: undefined;
279
+ generated: undefined;
280
+ }, {}, {}>;
281
+ };
282
+ dialect: "pg";
283
+ }>;
@@ -0,0 +1,99 @@
1
+ import { type IAgentRuntime, Service, type UUID, type ServiceTypeName } from '@elizaos/core';
2
+ import { type LongTermMemory, type SessionSummary, type MemoryConfig, LongTermMemoryCategory } from '../types/index';
3
+ /**
4
+ * Memory Service
5
+ * Manages both short-term (session summaries) and long-term (persistent facts) memory
6
+ */
7
+ export declare class MemoryService extends Service {
8
+ static serviceType: ServiceTypeName;
9
+ private sessionMessageCounts;
10
+ private memoryConfig;
11
+ private lastExtractionCheckpoints;
12
+ capabilityDescription: string;
13
+ constructor(runtime?: IAgentRuntime);
14
+ static start(runtime: IAgentRuntime): Promise<Service>;
15
+ stop(): Promise<void>;
16
+ initialize(runtime: IAgentRuntime): Promise<void>;
17
+ /**
18
+ * Get the Drizzle database instance
19
+ */
20
+ private getDb;
21
+ /**
22
+ * Get configuration
23
+ */
24
+ getConfig(): MemoryConfig;
25
+ /**
26
+ * Update configuration
27
+ */
28
+ updateConfig(updates: Partial<MemoryConfig>): void;
29
+ /**
30
+ * Track message count for a room
31
+ */
32
+ incrementMessageCount(roomId: UUID): number;
33
+ /**
34
+ * Reset message count for a room
35
+ */
36
+ resetMessageCount(roomId: UUID): void;
37
+ /**
38
+ * Check if summarization is needed for a room
39
+ */
40
+ shouldSummarize(roomId: UUID): Promise<boolean>;
41
+ /**
42
+ * Generate cache key for tracking extraction checkpoints per entity-room pair
43
+ */
44
+ private getExtractionKey;
45
+ /**
46
+ * Get the last extraction checkpoint for an entity in a room
47
+ * Uses the cache table via adapter
48
+ */
49
+ getLastExtractionCheckpoint(entityId: UUID, roomId: UUID): Promise<number>;
50
+ /**
51
+ * Set the last extraction checkpoint for an entity in a room
52
+ * Uses the cache table via adapter
53
+ */
54
+ setLastExtractionCheckpoint(entityId: UUID, roomId: UUID, messageCount: number): Promise<void>;
55
+ /**
56
+ * Check if long-term extraction should run based on message count and interval
57
+ */
58
+ shouldRunExtraction(entityId: UUID, roomId: UUID, currentMessageCount: number): Promise<boolean>;
59
+ /**
60
+ * Store a long-term memory
61
+ */
62
+ storeLongTermMemory(memory: Omit<LongTermMemory, 'id' | 'createdAt' | 'updatedAt'>): Promise<LongTermMemory>;
63
+ /**
64
+ * Retrieve long-term memories for an entity
65
+ */
66
+ getLongTermMemories(entityId: UUID, category?: LongTermMemoryCategory, limit?: number): Promise<LongTermMemory[]>;
67
+ /**
68
+ * Update a long-term memory
69
+ */
70
+ updateLongTermMemory(id: UUID, updates: Partial<Omit<LongTermMemory, 'id' | 'agentId' | 'createdAt'>>): Promise<void>;
71
+ /**
72
+ * Delete a long-term memory
73
+ */
74
+ deleteLongTermMemory(id: UUID): Promise<void>;
75
+ /**
76
+ * Get the current session summary for a room (latest one)
77
+ */
78
+ getCurrentSessionSummary(roomId: UUID): Promise<SessionSummary | null>;
79
+ /**
80
+ * Store a session summary (initial creation)
81
+ */
82
+ storeSessionSummary(summary: Omit<SessionSummary, 'id' | 'createdAt' | 'updatedAt'>): Promise<SessionSummary>;
83
+ /**
84
+ * Update an existing session summary
85
+ */
86
+ updateSessionSummary(id: UUID, updates: Partial<Omit<SessionSummary, 'id' | 'agentId' | 'roomId' | 'createdAt' | 'updatedAt'>>): Promise<void>;
87
+ /**
88
+ * Get session summaries for a room
89
+ */
90
+ getSessionSummaries(roomId: UUID, limit?: number): Promise<SessionSummary[]>;
91
+ /**
92
+ * Search long-term memories by semantic similarity (if embeddings are available)
93
+ */
94
+ searchLongTermMemories(entityId: UUID, queryEmbedding: number[], limit?: number, matchThreshold?: number): Promise<LongTermMemory[]>;
95
+ /**
96
+ * Get all long-term memories formatted for context
97
+ */
98
+ getFormattedLongTermMemories(entityId: UUID): Promise<string>;
99
+ }
@@ -0,0 +1,83 @@
1
+ import type { UUID } from '@elizaos/core';
2
+ /**
3
+ * Categories of long-term memory
4
+ */
5
+ export declare enum LongTermMemoryCategory {
6
+ IDENTITY = "identity",// User identity, name, roles
7
+ EXPERTISE = "expertise",// Domain knowledge and familiarity
8
+ PROJECTS = "projects",// Past interactions and recurring topics
9
+ PREFERENCES = "preferences",// User preferences for interaction style
10
+ DATA_SOURCES = "data_sources",// Frequently used files, databases, APIs
11
+ GOALS = "goals",// User's broader intentions and objectives
12
+ CONSTRAINTS = "constraints",// User-defined rules and limitations
13
+ DEFINITIONS = "definitions",// Custom terms, acronyms, glossaries
14
+ BEHAVIORAL_PATTERNS = "behavioral_patterns"
15
+ }
16
+ /**
17
+ * Long-term memory entry
18
+ */
19
+ export interface LongTermMemory {
20
+ id: UUID;
21
+ agentId: UUID;
22
+ entityId: UUID;
23
+ category: LongTermMemoryCategory;
24
+ content: string;
25
+ metadata?: Record<string, unknown>;
26
+ embedding?: number[];
27
+ confidence?: number;
28
+ source?: string;
29
+ createdAt: Date;
30
+ updatedAt: Date;
31
+ lastAccessedAt?: Date;
32
+ accessCount?: number;
33
+ similarity?: number;
34
+ }
35
+ /**
36
+ * Short-term memory session summary
37
+ */
38
+ export interface SessionSummary {
39
+ id: UUID;
40
+ agentId: UUID;
41
+ roomId: UUID;
42
+ entityId?: UUID;
43
+ summary: string;
44
+ messageCount: number;
45
+ lastMessageOffset: number;
46
+ startTime: Date;
47
+ endTime: Date;
48
+ topics?: string[];
49
+ metadata?: Record<string, unknown>;
50
+ embedding?: number[];
51
+ createdAt: Date;
52
+ updatedAt: Date;
53
+ }
54
+ /**
55
+ * Configuration for memory plugin
56
+ */
57
+ export interface MemoryConfig {
58
+ shortTermSummarizationThreshold: number;
59
+ shortTermRetainRecent: number;
60
+ longTermExtractionEnabled: boolean;
61
+ longTermVectorSearchEnabled: boolean;
62
+ longTermConfidenceThreshold: number;
63
+ longTermExtractionInterval: number;
64
+ summaryModelType?: string;
65
+ summaryMaxTokens?: number;
66
+ }
67
+ /**
68
+ * Memory extraction result from evaluator
69
+ */
70
+ export interface MemoryExtraction {
71
+ category: LongTermMemoryCategory;
72
+ content: string;
73
+ confidence: number;
74
+ metadata?: Record<string, unknown>;
75
+ }
76
+ /**
77
+ * Summary generation result
78
+ */
79
+ export interface SummaryResult {
80
+ summary: string;
81
+ topics: string[];
82
+ keyPoints: string[];
83
+ }
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@elizaos/plugin-memory",
3
+ "version": "1.0.2",
4
+ "description": "Advanced memory management plugin with short-term summarization and long-term persistent memory",
5
+ "type": "module",
6
+ "main": "dist/cjs/index.node.cjs",
7
+ "module": "dist/node/index.node.js",
8
+ "types": "dist/index.d.ts",
9
+ "browser": "dist/browser/index.browser.js",
10
+ "sideEffects": false,
11
+ "exports": {
12
+ "./package.json": "./package.json",
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "browser": {
16
+ "types": "./dist/browser/index.d.ts",
17
+ "import": "./dist/browser/index.browser.js",
18
+ "default": "./dist/browser/index.browser.js"
19
+ },
20
+ "node": {
21
+ "types": "./dist/node/index.d.ts",
22
+ "import": "./dist/node/index.node.js",
23
+ "require": "./dist/cjs/index.node.cjs",
24
+ "default": "./dist/node/index.node.js"
25
+ },
26
+ "default": "./dist/node/index.node.js"
27
+ },
28
+ "./node": {
29
+ "types": "./dist/node/index.d.ts",
30
+ "import": "./dist/node/index.node.js",
31
+ "default": "./dist/node/index.node.js"
32
+ },
33
+ "./browser": {
34
+ "types": "./dist/browser/index.d.ts",
35
+ "import": "./dist/browser/index.browser.js",
36
+ "default": "./dist/browser/index.browser.js"
37
+ }
38
+ },
39
+ "files": [
40
+ "dist"
41
+ ],
42
+ "scripts": {
43
+ "build": "bun run build.ts",
44
+ "dev": "bun run build --watch",
45
+ "test": "bun test",
46
+ "lint": "eslint . --ext .ts",
47
+ "format": "prettier --write \"src/**/*.ts\""
48
+ },
49
+ "dependencies": {
50
+ "@elizaos/core": "latest",
51
+ "drizzle-orm": "^0.38.3"
52
+ },
53
+ "devDependencies": {
54
+ "@types/bun": "latest",
55
+ "typescript": "^5.7.2"
56
+ },
57
+ "keywords": [
58
+ "eliza",
59
+ "plugin",
60
+ "memory",
61
+ "long-term-memory",
62
+ "short-term-memory",
63
+ "summarization"
64
+ ],
65
+ "author": "ElizaOS Team",
66
+ "license": "MIT",
67
+ "publishConfig": {
68
+ "access": "public"
69
+ }
70
+ }