@agenticc/storage-memory 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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 AI Agent Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,135 @@
1
+ # @ai-agent/storage-memory
2
+
3
+ In-memory storage adapter for the AI Agent framework. This package provides simple, fast storage for conversation sessions and messages, suitable for development, testing, and simple applications.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @ai-agent/storage-memory
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### Session Management
14
+
15
+ ```typescript
16
+ import { Agent } from '@ai-agent/core';
17
+ import { SessionManager } from '@ai-agent/storage-memory';
18
+
19
+ // Create agent
20
+ const agent = new Agent(config);
21
+
22
+ // Create session manager
23
+ const sessionManager = new SessionManager();
24
+
25
+ // Create a new session
26
+ const sessionId = sessionManager.createSession({
27
+ metadata: { userId: '123' }
28
+ });
29
+
30
+ // Process a message
31
+ const userMessage = 'Hello, agent!';
32
+ sessionManager.addUserMessage(sessionId, userMessage);
33
+
34
+ const response = await agent.chat(userMessage, {
35
+ sessionId,
36
+ history: sessionManager.getHistory(sessionId)
37
+ });
38
+
39
+ // Store the response
40
+ sessionManager.addAssistantMessage(sessionId, response);
41
+ ```
42
+
43
+ ### Message Storage
44
+
45
+ ```typescript
46
+ import { MessageStore } from '@ai-agent/storage-memory';
47
+
48
+ // Create message store
49
+ const messageStore = new MessageStore();
50
+
51
+ // Store messages
52
+ messageStore.storeUserMessage(sessionId, 'Hello!');
53
+ const response = await agent.chat('Hello!', { sessionId });
54
+ messageStore.storeAssistantMessage(sessionId, response);
55
+
56
+ // Query messages
57
+ const history = messageStore.getSessionHistory(sessionId);
58
+ const recentMessages = messageStore.queryMessages({
59
+ sessionId,
60
+ limit: 10,
61
+ order: 'desc'
62
+ });
63
+
64
+ // Query tool calls
65
+ const toolCalls = messageStore.queryToolCalls({
66
+ sessionId,
67
+ toolName: 'search',
68
+ success: true
69
+ });
70
+ ```
71
+
72
+ ## Features
73
+
74
+ - **Fast**: All data stored in memory for instant access
75
+ - **Simple**: No database setup required
76
+ - **Flexible**: Rich query API for messages and tool calls
77
+ - **Type-safe**: Full TypeScript support
78
+
79
+ ## Limitations
80
+
81
+ - **Not persistent**: Data is lost when the process exits
82
+ - **Memory-bound**: Not suitable for large-scale applications
83
+ - **Single-process**: Cannot share data across multiple processes
84
+
85
+ For production applications, consider:
86
+ - `@ai-agent/storage-prisma` - SQL database support
87
+ - `@ai-agent/storage-mongodb` - MongoDB support
88
+ - `@ai-agent/storage-redis` - Redis support
89
+
90
+ ## API Reference
91
+
92
+ ### SessionManager
93
+
94
+ Manages conversation sessions with message history.
95
+
96
+ #### Methods
97
+
98
+ - `createSession(options?)` - Create a new session
99
+ - `getSession(sessionId)` - Get session by ID
100
+ - `getOrCreateSession(sessionId, options?)` - Get or create session
101
+ - `hasSession(sessionId)` - Check if session exists
102
+ - `querySessions(options?)` - Query sessions with filters
103
+ - `getHistory(sessionId)` - Get conversation history
104
+ - `addUserMessage(sessionId, content, metadata?)` - Add user message
105
+ - `addAssistantMessage(sessionId, response, metadata?)` - Add assistant message
106
+ - `addSystemMessage(sessionId, content)` - Add system message
107
+ - `closeSession(sessionId)` - Mark session as inactive
108
+ - `deleteSession(sessionId)` - Delete session
109
+ - `clearSession(sessionId)` - Clear all messages in session
110
+ - `updateMetadata(sessionId, metadata)` - Update session metadata
111
+
112
+ ### MessageStore
113
+
114
+ Provides persistent storage for messages with rich query capabilities.
115
+
116
+ #### Methods
117
+
118
+ - `storeUserMessage(sessionId, content, metadata?)` - Store user message
119
+ - `storeAssistantMessage(sessionId, response, metadata?)` - Store assistant message
120
+ - `storeSystemMessage(sessionId, content)` - Store system message
121
+ - `getMessage(messageId)` - Get message by ID
122
+ - `queryMessages(options?)` - Query messages with filters
123
+ - `getSessionHistory(sessionId)` - Get conversation history
124
+ - `queryToolCalls(options?)` - Query tool calls with filters
125
+ - `getToolCallsForMessage(messageId)` - Get tool calls for a message
126
+ - `deleteMessage(messageId)` - Delete a message
127
+ - `deleteSessionMessages(sessionId)` - Delete all messages in session
128
+ - `getMessageCount(sessionId)` - Get message count for session
129
+ - `getTotalMessageCount()` - Get total message count
130
+ - `getTotalToolCallCount()` - Get total tool call count
131
+ - `clear()` - Clear all data
132
+
133
+ ## License
134
+
135
+ MIT
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @ai-agent/storage-memory
3
+ *
4
+ * In-memory storage adapter for AI Agent framework.
5
+ * Suitable for development, testing, and simple applications.
6
+ *
7
+ * For production use, consider @ai-agent/storage-prisma or @ai-agent/storage-mongodb.
8
+ */
9
+ export { SessionManager, createSessionManager, type Session, type Message, type CreateSessionOptions, type SessionQueryOptions, } from './session.js';
10
+ export { MessageStore, createMessageStore, type StoredMessage, type StoredSession, type MessageQueryOptions, type ToolCallQueryOptions, type StoredToolCall, } from './message-store.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @ai-agent/storage-memory
3
+ *
4
+ * In-memory storage adapter for AI Agent framework.
5
+ * Suitable for development, testing, and simple applications.
6
+ *
7
+ * For production use, consider @ai-agent/storage-prisma or @ai-agent/storage-mongodb.
8
+ */
9
+ // Session Management
10
+ export { SessionManager, createSessionManager, } from './session.js';
11
+ // Message Storage
12
+ export { MessageStore, createMessageStore, } from './message-store.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,oBAAoB,GAKrB,MAAM,cAAc,CAAC;AAEtB,kBAAkB;AAClB,OAAO,EACL,YAAY,EACZ,kBAAkB,GAMnB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Message Store
3
+ *
4
+ * Provides persistent storage for conversation messages.
5
+ * Supports storing user messages, agent responses, and tool call records.
6
+ *
7
+ * _Requirements: 9.2_
8
+ */
9
+ import type { Message, Session } from './session.js';
10
+ interface ToolCallRecord {
11
+ toolName: string;
12
+ arguments: Record<string, unknown>;
13
+ result: {
14
+ success: boolean;
15
+ content: string;
16
+ data?: unknown;
17
+ };
18
+ }
19
+ type ExecuteResponse = {
20
+ type: 'execute';
21
+ message: string;
22
+ data?: unknown;
23
+ toolCalls?: ToolCallRecord[];
24
+ };
25
+ type GenericAgentResponse = {
26
+ type: string;
27
+ message?: string;
28
+ data?: unknown;
29
+ toolCalls?: ToolCallRecord[];
30
+ };
31
+ type AgentResponse = ExecuteResponse | GenericAgentResponse;
32
+ /**
33
+ * Stored message with additional persistence metadata
34
+ */
35
+ export interface StoredMessage extends Message {
36
+ /** Session ID this message belongs to */
37
+ sessionId: string;
38
+ /** Whether the message has been persisted */
39
+ persisted: boolean;
40
+ /** Persistence timestamp */
41
+ persistedAt?: Date;
42
+ }
43
+ /**
44
+ * Stored session with persistence metadata
45
+ */
46
+ export interface StoredSession extends Session {
47
+ /** Whether the session has been persisted */
48
+ persisted: boolean;
49
+ /** Persistence timestamp */
50
+ persistedAt?: Date;
51
+ }
52
+ /**
53
+ * Message query options
54
+ */
55
+ export interface MessageQueryOptions {
56
+ /** Filter by session ID */
57
+ sessionId?: string;
58
+ /** Filter by role */
59
+ role?: 'user' | 'assistant' | 'system';
60
+ /** Filter by response type (for assistant messages) */
61
+ responseType?: string;
62
+ /** Filter by timestamp (after) */
63
+ after?: Date;
64
+ /** Filter by timestamp (before) */
65
+ before?: Date;
66
+ /** Include tool calls in results */
67
+ includeToolCalls?: boolean;
68
+ /** Maximum number of messages to return */
69
+ limit?: number;
70
+ /** Offset for pagination */
71
+ offset?: number;
72
+ /** Sort order */
73
+ order?: 'asc' | 'desc';
74
+ }
75
+ /**
76
+ * Tool call query options
77
+ */
78
+ export interface ToolCallQueryOptions {
79
+ /** Filter by session ID */
80
+ sessionId?: string;
81
+ /** Filter by tool name */
82
+ toolName?: string;
83
+ /** Filter by success status */
84
+ success?: boolean;
85
+ /** Filter by timestamp (after) */
86
+ after?: Date;
87
+ /** Filter by timestamp (before) */
88
+ before?: Date;
89
+ /** Maximum number of results */
90
+ limit?: number;
91
+ }
92
+ /**
93
+ * Stored tool call record with additional metadata
94
+ */
95
+ export interface StoredToolCall extends ToolCallRecord {
96
+ /** Unique ID for this tool call */
97
+ id: string;
98
+ /** Session ID */
99
+ sessionId: string;
100
+ /** Message ID this tool call belongs to */
101
+ messageId: string;
102
+ /** Timestamp of the tool call */
103
+ timestamp: Date;
104
+ }
105
+ /**
106
+ * Message Store
107
+ *
108
+ * In-memory message store with support for persistence hooks.
109
+ * Can be extended with database persistence by implementing the
110
+ * MessagePersistence interface.
111
+ */
112
+ export declare class MessageStore {
113
+ private messages;
114
+ private sessions;
115
+ private toolCalls;
116
+ private messagesBySession;
117
+ private toolCallsBySession;
118
+ private toolCallsByMessage;
119
+ /**
120
+ * Store a user message
121
+ *
122
+ * @param sessionId - Session ID
123
+ * @param content - Message content
124
+ * @param metadata - Optional metadata
125
+ * @returns The stored message
126
+ */
127
+ storeUserMessage(sessionId: string, content: string, metadata?: Record<string, unknown>): StoredMessage;
128
+ /**
129
+ * Store an assistant message with agent response
130
+ *
131
+ * @param sessionId - Session ID
132
+ * @param response - Agent response
133
+ * @param metadata - Optional metadata
134
+ * @returns The stored message
135
+ */
136
+ storeAssistantMessage(sessionId: string, response: AgentResponse, metadata?: Record<string, unknown>): StoredMessage;
137
+ /**
138
+ * Store a system message
139
+ *
140
+ * @param sessionId - Session ID
141
+ * @param content - Message content
142
+ * @returns The stored message
143
+ */
144
+ storeSystemMessage(sessionId: string, content: string): StoredMessage;
145
+ /**
146
+ * Store tool call records
147
+ *
148
+ * @param sessionId - Session ID
149
+ * @param messageId - Message ID
150
+ * @param toolCalls - Tool call records
151
+ */
152
+ private storeToolCalls;
153
+ /**
154
+ * Get a message by ID
155
+ *
156
+ * @param messageId - Message ID
157
+ * @returns The message or undefined
158
+ */
159
+ getMessage(messageId: string): StoredMessage | undefined;
160
+ /**
161
+ * Query messages with filters
162
+ *
163
+ * @param options - Query options
164
+ * @returns Array of matching messages
165
+ */
166
+ queryMessages(options?: MessageQueryOptions): StoredMessage[];
167
+ /**
168
+ * Get conversation history for a session
169
+ * Messages are returned in chronological order
170
+ *
171
+ * @param sessionId - Session ID
172
+ * @returns Array of messages ordered by timestamp
173
+ */
174
+ getSessionHistory(sessionId: string): StoredMessage[];
175
+ /**
176
+ * Query tool calls with filters
177
+ *
178
+ * @param options - Query options
179
+ * @returns Array of matching tool calls
180
+ */
181
+ queryToolCalls(options?: ToolCallQueryOptions): StoredToolCall[];
182
+ /**
183
+ * Get tool calls for a specific message
184
+ *
185
+ * @param messageId - Message ID
186
+ * @returns Array of tool calls
187
+ */
188
+ getToolCallsForMessage(messageId: string): StoredToolCall[];
189
+ /**
190
+ * Get a session by ID
191
+ *
192
+ * @param sessionId - Session ID
193
+ * @returns The session or undefined
194
+ */
195
+ getSession(sessionId: string): StoredSession | undefined;
196
+ /**
197
+ * Get all sessions
198
+ *
199
+ * @returns Array of all sessions
200
+ */
201
+ getAllSessions(): StoredSession[];
202
+ /**
203
+ * Delete a message
204
+ *
205
+ * @param messageId - Message ID
206
+ * @returns True if deleted
207
+ */
208
+ deleteMessage(messageId: string): boolean;
209
+ /**
210
+ * Delete all messages in a session
211
+ *
212
+ * @param sessionId - Session ID
213
+ * @returns Number of messages deleted
214
+ */
215
+ deleteSessionMessages(sessionId: string): number;
216
+ /**
217
+ * Get message count for a session
218
+ *
219
+ * @param sessionId - Session ID
220
+ * @returns Number of messages
221
+ */
222
+ getMessageCount(sessionId: string): number;
223
+ /**
224
+ * Get total message count across all sessions
225
+ *
226
+ * @returns Total number of messages
227
+ */
228
+ getTotalMessageCount(): number;
229
+ /**
230
+ * Get total tool call count
231
+ *
232
+ * @returns Total number of tool calls
233
+ */
234
+ getTotalToolCallCount(): number;
235
+ /**
236
+ * Clear all data
237
+ */
238
+ clear(): void;
239
+ /**
240
+ * Ensure a session exists
241
+ */
242
+ private ensureSession;
243
+ /**
244
+ * Add a message to storage
245
+ */
246
+ private addMessage;
247
+ }
248
+ /**
249
+ * Create a new MessageStore instance
250
+ */
251
+ export declare function createMessageStore(): MessageStore;
252
+ export {};
253
+ //# sourceMappingURL=message-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-store.d.ts","sourceRoot":"","sources":["../src/message-store.ts"],"names":[],"mappings":"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"}