@hashgraphonline/conversational-agent 0.1.204 → 0.1.206
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/dist/cjs/base-agent.d.ts +6 -0
- package/dist/cjs/context/ReferenceContextManager.d.ts +84 -0
- package/dist/cjs/context/ReferenceResponseProcessor.d.ts +76 -0
- package/dist/cjs/conversational-agent.d.ts +34 -0
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/langchain-agent.d.ts +1 -0
- package/dist/cjs/mcp/ContentProcessor.d.ts +37 -0
- package/dist/cjs/mcp/MCPClientManager.d.ts +19 -1
- package/dist/cjs/memory/ContentStorage.d.ts +205 -0
- package/dist/cjs/memory/MemoryWindow.d.ts +114 -0
- package/dist/cjs/memory/ReferenceIdGenerator.d.ts +45 -0
- package/dist/cjs/memory/SmartMemoryManager.d.ts +201 -0
- package/dist/cjs/memory/TokenCounter.d.ts +61 -0
- package/dist/cjs/memory/index.d.ts +7 -0
- package/dist/cjs/plugins/hbar-transfer/TransferHbarTool.d.ts +18 -0
- package/dist/cjs/services/ContentStoreManager.d.ts +54 -0
- package/dist/cjs/types/content-reference.d.ts +213 -0
- package/dist/cjs/types/index.d.ts +4 -0
- package/dist/esm/index12.js +15 -2
- package/dist/esm/index12.js.map +1 -1
- package/dist/esm/index14.js +119 -95
- package/dist/esm/index14.js.map +1 -1
- package/dist/esm/index15.js +159 -114
- package/dist/esm/index15.js.map +1 -1
- package/dist/esm/index16.js +122 -81
- package/dist/esm/index16.js.map +1 -1
- package/dist/esm/index17.js +236 -0
- package/dist/esm/index17.js.map +1 -0
- package/dist/esm/index18.js +95 -0
- package/dist/esm/index18.js.map +1 -0
- package/dist/esm/index19.js +663 -0
- package/dist/esm/index19.js.map +1 -0
- package/dist/esm/index2.js +3 -1
- package/dist/esm/index2.js.map +1 -1
- package/dist/esm/index20.js +233 -0
- package/dist/esm/index20.js.map +1 -0
- package/dist/esm/index21.js +182 -0
- package/dist/esm/index21.js.map +1 -0
- package/dist/esm/index22.js +126 -0
- package/dist/esm/index22.js.map +1 -0
- package/dist/esm/index23.js +68 -0
- package/dist/esm/index23.js.map +1 -0
- package/dist/esm/index24.js +38 -0
- package/dist/esm/index24.js.map +1 -0
- package/dist/esm/index6.js +143 -84
- package/dist/esm/index6.js.map +1 -1
- package/dist/esm/index7.js.map +1 -1
- package/dist/esm/index8.js +69 -5
- package/dist/esm/index8.js.map +1 -1
- package/dist/types/base-agent.d.ts +6 -0
- package/dist/types/context/ReferenceContextManager.d.ts +84 -0
- package/dist/types/context/ReferenceResponseProcessor.d.ts +76 -0
- package/dist/types/conversational-agent.d.ts +34 -0
- package/dist/types/langchain-agent.d.ts +1 -0
- package/dist/types/mcp/ContentProcessor.d.ts +37 -0
- package/dist/types/mcp/MCPClientManager.d.ts +19 -1
- package/dist/types/memory/ContentStorage.d.ts +205 -0
- package/dist/types/memory/MemoryWindow.d.ts +114 -0
- package/dist/types/memory/ReferenceIdGenerator.d.ts +45 -0
- package/dist/types/memory/SmartMemoryManager.d.ts +201 -0
- package/dist/types/memory/TokenCounter.d.ts +61 -0
- package/dist/types/memory/index.d.ts +7 -0
- package/dist/types/plugins/hbar-transfer/TransferHbarTool.d.ts +18 -0
- package/dist/types/services/ContentStoreManager.d.ts +54 -0
- package/dist/types/types/content-reference.d.ts +213 -0
- package/dist/types/types/index.d.ts +4 -0
- package/package.json +30 -26
- package/src/base-agent.ts +6 -0
- package/src/context/ReferenceContextManager.ts +345 -0
- package/src/context/ReferenceResponseProcessor.ts +296 -0
- package/src/conversational-agent.ts +166 -92
- package/src/langchain-agent.ts +89 -2
- package/src/mcp/ContentProcessor.ts +317 -0
- package/src/mcp/MCPClientManager.ts +61 -1
- package/src/mcp/adapters/langchain.ts +9 -4
- package/src/memory/ContentStorage.ts +954 -0
- package/src/memory/MemoryWindow.ts +247 -0
- package/src/memory/ReferenceIdGenerator.ts +84 -0
- package/src/memory/SmartMemoryManager.ts +323 -0
- package/src/memory/TokenCounter.ts +152 -0
- package/src/memory/index.ts +8 -0
- package/src/plugins/hbar-transfer/TransferHbarTool.ts +19 -1
- package/src/plugins/hcs-10/HCS10Plugin.ts +5 -4
- package/src/services/ContentStoreManager.ts +199 -0
- package/src/types/content-reference.ts +281 -0
- package/src/types/index.ts +6 -0
|
@@ -4,6 +4,7 @@ export declare class LangChainAgent extends BaseAgent {
|
|
|
4
4
|
private executor;
|
|
5
5
|
private systemMessage;
|
|
6
6
|
private mcpManager?;
|
|
7
|
+
private smartMemory;
|
|
7
8
|
boot(): Promise<void>;
|
|
8
9
|
chat(message: string, context?: ConversationContext): Promise<ChatResponse>;
|
|
9
10
|
shutdown(): Promise<void>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ContentStorage } from '../memory/ContentStorage';
|
|
2
|
+
import { Logger } from '@hashgraphonline/standards-sdk';
|
|
3
|
+
|
|
4
|
+
export interface MCPResponseContent {
|
|
5
|
+
content: unknown;
|
|
6
|
+
type: 'text' | 'image' | 'resource' | 'text[]' | 'image[]';
|
|
7
|
+
sizeBytes: number;
|
|
8
|
+
mimeType?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ProcessedResponse {
|
|
11
|
+
content: unknown;
|
|
12
|
+
wasProcessed: boolean;
|
|
13
|
+
referenceCreated?: boolean;
|
|
14
|
+
referenceId?: string;
|
|
15
|
+
originalSize?: number;
|
|
16
|
+
errors?: string[];
|
|
17
|
+
}
|
|
18
|
+
export interface ContentAnalysis {
|
|
19
|
+
shouldProcess: boolean;
|
|
20
|
+
contents: MCPResponseContent[];
|
|
21
|
+
totalSize: number;
|
|
22
|
+
largestContentSize: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class MCPContentProcessor {
|
|
25
|
+
private contentStorage;
|
|
26
|
+
private logger;
|
|
27
|
+
constructor(contentStorage: ContentStorage, logger: Logger);
|
|
28
|
+
analyzeResponse(response: unknown): ContentAnalysis;
|
|
29
|
+
processResponse(response: unknown, serverName: string, toolName: string): Promise<ProcessedResponse>;
|
|
30
|
+
private extractContentFromResponse;
|
|
31
|
+
private createReferencedResponse;
|
|
32
|
+
private createLightweightReference;
|
|
33
|
+
private replaceContentInResponse;
|
|
34
|
+
private detectMimeType;
|
|
35
|
+
private mapMimeTypeToContentType;
|
|
36
|
+
private deepClone;
|
|
37
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { MCPServerConfig, MCPToolInfo, MCPConnectionStatus } from './types';
|
|
2
2
|
import { Logger } from '@hashgraphonline/standards-sdk';
|
|
3
|
+
import { ContentStorage } from '../memory/ContentStorage';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Manages connections to MCP servers and tool discovery
|
|
@@ -8,7 +9,8 @@ export declare class MCPClientManager {
|
|
|
8
9
|
private clients;
|
|
9
10
|
private tools;
|
|
10
11
|
private logger;
|
|
11
|
-
|
|
12
|
+
private contentProcessor?;
|
|
13
|
+
constructor(logger: Logger, contentStorage?: ContentStorage);
|
|
12
14
|
/**
|
|
13
15
|
* Connect to an MCP server and discover its tools
|
|
14
16
|
*/
|
|
@@ -37,4 +39,20 @@ export declare class MCPClientManager {
|
|
|
37
39
|
* Get list of connected server names
|
|
38
40
|
*/
|
|
39
41
|
getConnectedServers(): string[];
|
|
42
|
+
/**
|
|
43
|
+
* Enable content processing with content storage
|
|
44
|
+
*/
|
|
45
|
+
enableContentProcessing(contentStorage: ContentStorage): void;
|
|
46
|
+
/**
|
|
47
|
+
* Disable content processing
|
|
48
|
+
*/
|
|
49
|
+
disableContentProcessing(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Check if content processing is enabled
|
|
52
|
+
*/
|
|
53
|
+
isContentProcessingEnabled(): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Analyze a response without processing it (for testing/debugging)
|
|
56
|
+
*/
|
|
57
|
+
analyzeResponseContent(response: unknown): unknown;
|
|
40
58
|
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { BaseMessage } from '@langchain/core/messages';
|
|
2
|
+
import { ReferenceId, ContentReference, ContentMetadata, ReferenceResolutionResult, ContentReferenceConfig, ContentReferenceStore, ContentReferenceStats, ContentType, ContentSource } from '../types/content-reference';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Search options for message queries
|
|
6
|
+
*/
|
|
7
|
+
interface SearchOptions {
|
|
8
|
+
/** Whether to perform case-sensitive search */
|
|
9
|
+
caseSensitive?: boolean;
|
|
10
|
+
/** Maximum number of results to return */
|
|
11
|
+
limit?: number;
|
|
12
|
+
/** Whether to use regex pattern matching */
|
|
13
|
+
useRegex?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Result of storing messages
|
|
17
|
+
*/
|
|
18
|
+
interface StoreResult {
|
|
19
|
+
/** Number of messages successfully stored */
|
|
20
|
+
stored: number;
|
|
21
|
+
/** Number of old messages dropped to make room */
|
|
22
|
+
dropped: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Storage statistics
|
|
26
|
+
*/
|
|
27
|
+
export interface StorageStats {
|
|
28
|
+
/** Total number of messages currently stored */
|
|
29
|
+
totalMessages: number;
|
|
30
|
+
/** Maximum storage capacity */
|
|
31
|
+
maxStorageLimit: number;
|
|
32
|
+
/** Percentage of storage used */
|
|
33
|
+
usagePercentage: number;
|
|
34
|
+
/** Timestamp of oldest message */
|
|
35
|
+
oldestMessageTime: Date | undefined;
|
|
36
|
+
/** Timestamp of newest message */
|
|
37
|
+
newestMessageTime: Date | undefined;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Content storage for managing pruned conversation messages and large content references
|
|
41
|
+
* Provides searchable storage with time-based querying and automatic cleanup.
|
|
42
|
+
*
|
|
43
|
+
* Extended to support reference-based storage for large content to optimize context window usage.
|
|
44
|
+
*/
|
|
45
|
+
export declare class ContentStorage implements ContentReferenceStore {
|
|
46
|
+
private messages;
|
|
47
|
+
private maxStorage;
|
|
48
|
+
private idCounter;
|
|
49
|
+
private contentStore;
|
|
50
|
+
private referenceConfig;
|
|
51
|
+
private cleanupTimer?;
|
|
52
|
+
private referenceStats;
|
|
53
|
+
static readonly DEFAULT_MAX_STORAGE = 1000;
|
|
54
|
+
constructor(maxStorage?: number, referenceConfig?: Partial<ContentReferenceConfig>);
|
|
55
|
+
/**
|
|
56
|
+
* Store messages in the content storage
|
|
57
|
+
* Automatically drops oldest messages if storage limit is exceeded
|
|
58
|
+
* @param messages - Messages to store
|
|
59
|
+
* @returns Result indicating how many messages were stored and dropped
|
|
60
|
+
*/
|
|
61
|
+
storeMessages(messages: BaseMessage[]): StoreResult;
|
|
62
|
+
/**
|
|
63
|
+
* Get the most recent messages from storage
|
|
64
|
+
* @param count - Number of recent messages to retrieve
|
|
65
|
+
* @returns Array of recent messages in chronological order
|
|
66
|
+
*/
|
|
67
|
+
getRecentMessages(count: number): BaseMessage[];
|
|
68
|
+
/**
|
|
69
|
+
* Search for messages containing specific text or patterns
|
|
70
|
+
* @param query - Search term or regex pattern
|
|
71
|
+
* @param options - Search configuration options
|
|
72
|
+
* @returns Array of matching messages
|
|
73
|
+
*/
|
|
74
|
+
searchMessages(query: string, options?: SearchOptions): BaseMessage[];
|
|
75
|
+
/**
|
|
76
|
+
* Get messages from a specific time range
|
|
77
|
+
* @param startTime - Start of time range (inclusive)
|
|
78
|
+
* @param endTime - End of time range (inclusive)
|
|
79
|
+
* @returns Array of messages within the time range
|
|
80
|
+
*/
|
|
81
|
+
getMessagesFromTimeRange(startTime: Date, endTime: Date): BaseMessage[];
|
|
82
|
+
/**
|
|
83
|
+
* Get storage statistics and usage information
|
|
84
|
+
* @returns Current storage statistics
|
|
85
|
+
*/
|
|
86
|
+
getStorageStats(): StorageStats;
|
|
87
|
+
/**
|
|
88
|
+
* Clear all stored messages
|
|
89
|
+
*/
|
|
90
|
+
clear(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Get total number of stored messages
|
|
93
|
+
* @returns Number of messages currently in storage
|
|
94
|
+
*/
|
|
95
|
+
getTotalStoredMessages(): number;
|
|
96
|
+
/**
|
|
97
|
+
* Update the maximum storage limit
|
|
98
|
+
* @param newLimit - New maximum storage limit
|
|
99
|
+
*/
|
|
100
|
+
updateStorageLimit(newLimit: number): void;
|
|
101
|
+
/**
|
|
102
|
+
* Get messages by message type
|
|
103
|
+
* @param messageType - Type of messages to retrieve ('human', 'ai', 'system', etc.)
|
|
104
|
+
* @param limit - Maximum number of messages to return
|
|
105
|
+
* @returns Array of messages of the specified type
|
|
106
|
+
*/
|
|
107
|
+
getMessagesByType(messageType: string, limit?: number): BaseMessage[];
|
|
108
|
+
/**
|
|
109
|
+
* Get the current storage configuration
|
|
110
|
+
* @returns Storage configuration object
|
|
111
|
+
*/
|
|
112
|
+
getConfig(): {
|
|
113
|
+
maxStorage: number;
|
|
114
|
+
currentUsage: number;
|
|
115
|
+
utilizationPercentage: number;
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Generate a unique ID for stored messages
|
|
119
|
+
* @returns Unique string identifier
|
|
120
|
+
*/
|
|
121
|
+
private generateId;
|
|
122
|
+
/**
|
|
123
|
+
* Get messages stored within the last N minutes
|
|
124
|
+
* @param minutes - Number of minutes to look back
|
|
125
|
+
* @returns Array of messages from the last N minutes
|
|
126
|
+
*/
|
|
127
|
+
getRecentMessagesByTime(minutes: number): BaseMessage[];
|
|
128
|
+
/**
|
|
129
|
+
* Export messages to a JSON-serializable format
|
|
130
|
+
* @returns Serializable representation of stored messages
|
|
131
|
+
*/
|
|
132
|
+
exportMessages(): {
|
|
133
|
+
content: import('@langchain/core/messages').MessageContent;
|
|
134
|
+
type: import('@langchain/core/messages').MessageType;
|
|
135
|
+
storedAt: string;
|
|
136
|
+
id: string;
|
|
137
|
+
}[];
|
|
138
|
+
/**
|
|
139
|
+
* Determine if content should be stored as a reference based on size
|
|
140
|
+
*/
|
|
141
|
+
shouldUseReference(content: Buffer | string): boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Store content and return a reference if it exceeds the size threshold
|
|
144
|
+
* Otherwise returns null to indicate direct content should be used
|
|
145
|
+
*/
|
|
146
|
+
storeContentIfLarge(content: Buffer | string, metadata: {
|
|
147
|
+
contentType?: ContentType;
|
|
148
|
+
mimeType?: string;
|
|
149
|
+
source: ContentSource;
|
|
150
|
+
mcpToolName?: string;
|
|
151
|
+
fileName?: string;
|
|
152
|
+
tags?: string[];
|
|
153
|
+
customMetadata?: Record<string, unknown>;
|
|
154
|
+
}): Promise<ContentReference | null>;
|
|
155
|
+
/**
|
|
156
|
+
* Store content and return a reference (implements ContentReferenceStore)
|
|
157
|
+
*/
|
|
158
|
+
storeContent(content: Buffer, metadata: Omit<ContentMetadata, 'createdAt' | 'lastAccessedAt' | 'accessCount'>): Promise<ContentReference>;
|
|
159
|
+
/**
|
|
160
|
+
* Resolve a reference to its content (implements ContentReferenceStore)
|
|
161
|
+
*/
|
|
162
|
+
resolveReference(referenceId: ReferenceId): Promise<ReferenceResolutionResult>;
|
|
163
|
+
/**
|
|
164
|
+
* Check if a reference exists and is valid
|
|
165
|
+
*/
|
|
166
|
+
hasReference(referenceId: ReferenceId): Promise<boolean>;
|
|
167
|
+
/**
|
|
168
|
+
* Mark a reference for cleanup
|
|
169
|
+
*/
|
|
170
|
+
cleanupReference(referenceId: ReferenceId): Promise<boolean>;
|
|
171
|
+
/**
|
|
172
|
+
* Get current reference storage statistics (implements ContentReferenceStore)
|
|
173
|
+
*/
|
|
174
|
+
getStats(): Promise<ContentReferenceStats>;
|
|
175
|
+
/**
|
|
176
|
+
* Update reference configuration
|
|
177
|
+
*/
|
|
178
|
+
updateConfig(config: Partial<ContentReferenceConfig>): Promise<void>;
|
|
179
|
+
/**
|
|
180
|
+
* Perform cleanup based on current policies (implements ContentReferenceStore)
|
|
181
|
+
*/
|
|
182
|
+
performCleanup(): Promise<{
|
|
183
|
+
cleanedUp: number;
|
|
184
|
+
errors: string[];
|
|
185
|
+
}>;
|
|
186
|
+
/**
|
|
187
|
+
* Get reference configuration for debugging
|
|
188
|
+
*/
|
|
189
|
+
getReferenceConfig(): ContentReferenceConfig;
|
|
190
|
+
private enforceReferenceStorageLimits;
|
|
191
|
+
private calculateExpirationTime;
|
|
192
|
+
private getCleanupPolicy;
|
|
193
|
+
private detectContentType;
|
|
194
|
+
private createContentPreview;
|
|
195
|
+
private updateStatsAfterStore;
|
|
196
|
+
private updateReferenceStorageStats;
|
|
197
|
+
private recordPerformanceMetric;
|
|
198
|
+
private calculateAverage;
|
|
199
|
+
private startReferenceCleanupTimer;
|
|
200
|
+
/**
|
|
201
|
+
* Clean up resources (enhanced to include reference cleanup)
|
|
202
|
+
*/
|
|
203
|
+
dispose(): Promise<void>;
|
|
204
|
+
}
|
|
205
|
+
export {};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { BaseMessage } from '@langchain/core/messages';
|
|
2
|
+
import { TokenCounter } from './TokenCounter';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Result of adding a message to the memory window
|
|
6
|
+
*/
|
|
7
|
+
export interface AddMessageResult {
|
|
8
|
+
/** Whether the message was successfully added */
|
|
9
|
+
added: boolean;
|
|
10
|
+
/** Messages that were pruned to make room */
|
|
11
|
+
prunedMessages: BaseMessage[];
|
|
12
|
+
/** Current token count after operation */
|
|
13
|
+
currentTokenCount: number;
|
|
14
|
+
/** Remaining token capacity */
|
|
15
|
+
remainingCapacity: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Memory window that manages conversation history with token-based size limits
|
|
19
|
+
* Automatically prunes old messages to stay within token limits while preserving conversational context
|
|
20
|
+
*/
|
|
21
|
+
export declare class MemoryWindow {
|
|
22
|
+
private messages;
|
|
23
|
+
private maxTokens;
|
|
24
|
+
private reserveTokens;
|
|
25
|
+
private tokenCounter;
|
|
26
|
+
private systemPrompt;
|
|
27
|
+
private systemPromptTokens;
|
|
28
|
+
static readonly DEFAULT_MAX_TOKENS = 8000;
|
|
29
|
+
static readonly DEFAULT_RESERVE_TOKENS = 1000;
|
|
30
|
+
static readonly PRUNING_BATCH_SIZE = 2;
|
|
31
|
+
constructor(maxTokens?: number, reserveTokens?: number, tokenCounter?: TokenCounter);
|
|
32
|
+
/**
|
|
33
|
+
* Add a message to the memory window, pruning old messages if necessary
|
|
34
|
+
* @param message - The message to add
|
|
35
|
+
* @returns Result of the add operation including any pruned messages
|
|
36
|
+
*/
|
|
37
|
+
addMessage(message: BaseMessage): AddMessageResult;
|
|
38
|
+
/**
|
|
39
|
+
* Prune old messages to fit within token limits
|
|
40
|
+
* Removes messages in pairs to maintain conversational flow
|
|
41
|
+
* @returns Array of pruned messages
|
|
42
|
+
*/
|
|
43
|
+
pruneToFit(): BaseMessage[];
|
|
44
|
+
/**
|
|
45
|
+
* Get current token count including system prompt and messages
|
|
46
|
+
* @returns Current token count
|
|
47
|
+
*/
|
|
48
|
+
getCurrentTokenCount(): number;
|
|
49
|
+
/**
|
|
50
|
+
* Get remaining token capacity before hitting the reserve limit
|
|
51
|
+
* @returns Remaining tokens that can be used
|
|
52
|
+
*/
|
|
53
|
+
getRemainingTokenCapacity(): number;
|
|
54
|
+
/**
|
|
55
|
+
* Check if a message can be added without exceeding limits
|
|
56
|
+
* @param message - The message to check
|
|
57
|
+
* @returns True if message can be added within reserve limits
|
|
58
|
+
*/
|
|
59
|
+
canAddMessage(message: BaseMessage): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Get all messages in the memory window
|
|
62
|
+
* @returns Copy of current messages array
|
|
63
|
+
*/
|
|
64
|
+
getMessages(): BaseMessage[];
|
|
65
|
+
/**
|
|
66
|
+
* Clear all messages from the memory window
|
|
67
|
+
*/
|
|
68
|
+
clear(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Set the system prompt and update token calculations
|
|
71
|
+
* @param systemPrompt - The system prompt text
|
|
72
|
+
*/
|
|
73
|
+
setSystemPrompt(systemPrompt: string): void;
|
|
74
|
+
/**
|
|
75
|
+
* Get the current system prompt
|
|
76
|
+
* @returns Current system prompt
|
|
77
|
+
*/
|
|
78
|
+
getSystemPrompt(): string;
|
|
79
|
+
/**
|
|
80
|
+
* Get current configuration
|
|
81
|
+
* @returns Memory window configuration
|
|
82
|
+
*/
|
|
83
|
+
getConfig(): {
|
|
84
|
+
maxTokens: number;
|
|
85
|
+
reserveTokens: number;
|
|
86
|
+
currentTokens: number;
|
|
87
|
+
messageCount: number;
|
|
88
|
+
systemPromptTokens: number;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Update token limits
|
|
92
|
+
* @param maxTokens - New maximum token limit
|
|
93
|
+
* @param reserveTokens - New reserve token amount
|
|
94
|
+
*/
|
|
95
|
+
updateLimits(maxTokens: number, reserveTokens?: number): void;
|
|
96
|
+
/**
|
|
97
|
+
* Get statistics about the memory window
|
|
98
|
+
* @returns Memory usage statistics
|
|
99
|
+
*/
|
|
100
|
+
getStats(): {
|
|
101
|
+
totalMessages: number;
|
|
102
|
+
currentTokens: number;
|
|
103
|
+
maxTokens: number;
|
|
104
|
+
reserveTokens: number;
|
|
105
|
+
systemPromptTokens: number;
|
|
106
|
+
usagePercentage: number;
|
|
107
|
+
remainingCapacity: number;
|
|
108
|
+
canAcceptMore: boolean;
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Clean up resources
|
|
112
|
+
*/
|
|
113
|
+
dispose(): void;
|
|
114
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ReferenceId } from '../types/content-reference';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Content-based reference ID generator using SHA-256 (HCS-1 style)
|
|
5
|
+
*
|
|
6
|
+
* Generates deterministic reference IDs based on content hashing.
|
|
7
|
+
* Same content always produces the same reference ID.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ReferenceIdGenerator {
|
|
10
|
+
/**
|
|
11
|
+
* Generate a content-based reference ID using SHA-256 hashing
|
|
12
|
+
*
|
|
13
|
+
* @param content The content to generate a reference ID for
|
|
14
|
+
* @returns Deterministic reference ID based on content hash
|
|
15
|
+
*/
|
|
16
|
+
static generateId(content: Buffer): ReferenceId;
|
|
17
|
+
/**
|
|
18
|
+
* Validate that a string is a properly formatted reference ID
|
|
19
|
+
*
|
|
20
|
+
* @param id The ID to validate
|
|
21
|
+
* @returns true if the ID is valid format
|
|
22
|
+
*/
|
|
23
|
+
static isValidReferenceId(id: string): id is ReferenceId;
|
|
24
|
+
/**
|
|
25
|
+
* Extract reference ID from ref:// format
|
|
26
|
+
*
|
|
27
|
+
* @param input Input string that may contain a reference ID
|
|
28
|
+
* @returns Extracted reference ID or null if not found
|
|
29
|
+
*/
|
|
30
|
+
static extractReferenceId(input: string): ReferenceId | null;
|
|
31
|
+
/**
|
|
32
|
+
* Format a reference ID in the standard ref:// format
|
|
33
|
+
*
|
|
34
|
+
* @param referenceId The reference ID to format
|
|
35
|
+
* @returns Formatted reference string
|
|
36
|
+
*/
|
|
37
|
+
static formatReference(referenceId: ReferenceId): string;
|
|
38
|
+
/**
|
|
39
|
+
* Generate a test reference ID (for testing purposes only)
|
|
40
|
+
*
|
|
41
|
+
* @param testSeed A test seed to generate a fake but valid ID format
|
|
42
|
+
* @returns A valid format reference ID for testing
|
|
43
|
+
*/
|
|
44
|
+
static generateTestId(testSeed: string): ReferenceId;
|
|
45
|
+
}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { BaseMessage } from '@langchain/core/messages';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for SmartMemoryManager
|
|
5
|
+
*/
|
|
6
|
+
export interface SmartMemoryConfig {
|
|
7
|
+
/** Maximum tokens for active memory window */
|
|
8
|
+
maxTokens?: number;
|
|
9
|
+
/** Reserve tokens for response generation */
|
|
10
|
+
reserveTokens?: number;
|
|
11
|
+
/** Model name for token counting */
|
|
12
|
+
modelName?: string;
|
|
13
|
+
/** Maximum messages to store in content storage */
|
|
14
|
+
storageLimit?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Search options for history search
|
|
18
|
+
*/
|
|
19
|
+
export interface SearchOptions {
|
|
20
|
+
/** Whether to perform case-sensitive search */
|
|
21
|
+
caseSensitive?: boolean;
|
|
22
|
+
/** Maximum number of results to return */
|
|
23
|
+
limit?: number;
|
|
24
|
+
/** Whether to use regex pattern matching */
|
|
25
|
+
useRegex?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Memory statistics for active memory window
|
|
29
|
+
*/
|
|
30
|
+
export interface MemoryStats {
|
|
31
|
+
/** Total active messages in memory window */
|
|
32
|
+
totalActiveMessages: number;
|
|
33
|
+
/** Current token count including system prompt */
|
|
34
|
+
currentTokenCount: number;
|
|
35
|
+
/** Maximum token capacity */
|
|
36
|
+
maxTokens: number;
|
|
37
|
+
/** Remaining token capacity */
|
|
38
|
+
remainingCapacity: number;
|
|
39
|
+
/** System prompt token count */
|
|
40
|
+
systemPromptTokens: number;
|
|
41
|
+
/** Memory usage percentage */
|
|
42
|
+
usagePercentage: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Smart memory manager that combines active memory window with long-term storage
|
|
46
|
+
* Provides context-aware memory management with automatic pruning and searchable history
|
|
47
|
+
*/
|
|
48
|
+
export declare class SmartMemoryManager {
|
|
49
|
+
private memoryWindow;
|
|
50
|
+
private contentStorage;
|
|
51
|
+
private tokenCounter;
|
|
52
|
+
private config;
|
|
53
|
+
private static readonly DEFAULT_CONFIG;
|
|
54
|
+
constructor(config?: SmartMemoryConfig);
|
|
55
|
+
/**
|
|
56
|
+
* Add a message to the active memory window
|
|
57
|
+
* Automatically handles pruning and storage of displaced messages
|
|
58
|
+
* @param message - Message to add
|
|
59
|
+
*/
|
|
60
|
+
addMessage(message: BaseMessage): void;
|
|
61
|
+
/**
|
|
62
|
+
* Get all active messages from the memory window
|
|
63
|
+
* @returns Array of active messages in chronological order
|
|
64
|
+
*/
|
|
65
|
+
getMessages(): BaseMessage[];
|
|
66
|
+
/**
|
|
67
|
+
* Clear active memory window
|
|
68
|
+
* @param clearStorage - Whether to also clear the content storage (default: false)
|
|
69
|
+
*/
|
|
70
|
+
clear(clearStorage?: boolean): void;
|
|
71
|
+
/**
|
|
72
|
+
* Set the system prompt for the memory window
|
|
73
|
+
* @param systemPrompt - System prompt text
|
|
74
|
+
*/
|
|
75
|
+
setSystemPrompt(systemPrompt: string): void;
|
|
76
|
+
/**
|
|
77
|
+
* Get the current system prompt
|
|
78
|
+
* @returns Current system prompt text
|
|
79
|
+
*/
|
|
80
|
+
getSystemPrompt(): string;
|
|
81
|
+
/**
|
|
82
|
+
* Search through stored message history
|
|
83
|
+
* @param query - Search term or pattern
|
|
84
|
+
* @param options - Search configuration
|
|
85
|
+
* @returns Array of matching messages from history
|
|
86
|
+
*/
|
|
87
|
+
searchHistory(query: string, options?: SearchOptions): BaseMessage[];
|
|
88
|
+
/**
|
|
89
|
+
* Get recent messages from storage history
|
|
90
|
+
* @param count - Number of recent messages to retrieve
|
|
91
|
+
* @returns Array of recent messages from storage
|
|
92
|
+
*/
|
|
93
|
+
getRecentHistory(count: number): BaseMessage[];
|
|
94
|
+
/**
|
|
95
|
+
* Check if a message can be added without exceeding limits
|
|
96
|
+
* @param message - Message to test
|
|
97
|
+
* @returns True if message can be added
|
|
98
|
+
*/
|
|
99
|
+
canAddMessage(message: BaseMessage): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Get statistics about the active memory window
|
|
102
|
+
* @returns Memory usage statistics
|
|
103
|
+
*/
|
|
104
|
+
getMemoryStats(): MemoryStats;
|
|
105
|
+
/**
|
|
106
|
+
* Get statistics about the content storage
|
|
107
|
+
* @returns Storage usage statistics
|
|
108
|
+
*/
|
|
109
|
+
getStorageStats(): import('./ContentStorage').StorageStats;
|
|
110
|
+
/**
|
|
111
|
+
* Get combined statistics for both active memory and storage
|
|
112
|
+
* @returns Combined memory and storage statistics
|
|
113
|
+
*/
|
|
114
|
+
getOverallStats(): {
|
|
115
|
+
activeMemory: MemoryStats;
|
|
116
|
+
storage: import('./ContentStorage').StorageStats;
|
|
117
|
+
totalMessagesManaged: number;
|
|
118
|
+
activeMemoryUtilization: number;
|
|
119
|
+
storageUtilization: number;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Update the configuration and apply changes
|
|
123
|
+
* @param newConfig - New configuration options
|
|
124
|
+
*/
|
|
125
|
+
updateConfig(newConfig: Partial<SmartMemoryConfig>): void;
|
|
126
|
+
/**
|
|
127
|
+
* Get current configuration
|
|
128
|
+
* @returns Current configuration settings
|
|
129
|
+
*/
|
|
130
|
+
getConfig(): Required<SmartMemoryConfig>;
|
|
131
|
+
/**
|
|
132
|
+
* Get messages from storage within a time range
|
|
133
|
+
* @param startTime - Start of time range
|
|
134
|
+
* @param endTime - End of time range
|
|
135
|
+
* @returns Messages within the specified time range
|
|
136
|
+
*/
|
|
137
|
+
getHistoryFromTimeRange(startTime: Date, endTime: Date): BaseMessage[];
|
|
138
|
+
/**
|
|
139
|
+
* Get messages from storage by message type
|
|
140
|
+
* @param messageType - Type of messages to retrieve ('human', 'ai', 'system', etc.)
|
|
141
|
+
* @param limit - Maximum number of messages to return
|
|
142
|
+
* @returns Messages of the specified type
|
|
143
|
+
*/
|
|
144
|
+
getHistoryByType(messageType: string, limit?: number): BaseMessage[];
|
|
145
|
+
/**
|
|
146
|
+
* Get recent messages from storage within the last N minutes
|
|
147
|
+
* @param minutes - Number of minutes to look back
|
|
148
|
+
* @returns Messages from the last N minutes
|
|
149
|
+
*/
|
|
150
|
+
getRecentHistoryByTime(minutes: number): BaseMessage[];
|
|
151
|
+
/**
|
|
152
|
+
* Export the current state for persistence or analysis
|
|
153
|
+
* @returns Serializable representation of memory state
|
|
154
|
+
*/
|
|
155
|
+
exportState(): {
|
|
156
|
+
config: Required<SmartMemoryConfig>;
|
|
157
|
+
activeMessages: {
|
|
158
|
+
content: import('@langchain/core/messages').MessageContent;
|
|
159
|
+
type: import('@langchain/core/messages').MessageType;
|
|
160
|
+
}[];
|
|
161
|
+
systemPrompt: string;
|
|
162
|
+
memoryStats: MemoryStats;
|
|
163
|
+
storageStats: import('./ContentStorage').StorageStats;
|
|
164
|
+
storedMessages: {
|
|
165
|
+
content: import('@langchain/core/messages').MessageContent;
|
|
166
|
+
type: import('@langchain/core/messages').MessageType;
|
|
167
|
+
storedAt: string;
|
|
168
|
+
id: string;
|
|
169
|
+
}[];
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Get a summary of conversation context for external use
|
|
173
|
+
* Useful for providing context to other systems or for logging
|
|
174
|
+
* @param includeStoredContext - Whether to include recent stored messages
|
|
175
|
+
* @returns Context summary object
|
|
176
|
+
*/
|
|
177
|
+
getContextSummary(includeStoredContext?: boolean): {
|
|
178
|
+
activeMessageCount: number;
|
|
179
|
+
systemPrompt: string;
|
|
180
|
+
recentMessages: BaseMessage[];
|
|
181
|
+
memoryUtilization: number;
|
|
182
|
+
hasStoredHistory: boolean;
|
|
183
|
+
} | {
|
|
184
|
+
recentStoredMessages: BaseMessage[];
|
|
185
|
+
storageStats: import('./ContentStorage').StorageStats;
|
|
186
|
+
activeMessageCount: number;
|
|
187
|
+
systemPrompt: string;
|
|
188
|
+
recentMessages: BaseMessage[];
|
|
189
|
+
memoryUtilization: number;
|
|
190
|
+
hasStoredHistory: boolean;
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* Perform maintenance operations
|
|
194
|
+
* Optimizes storage and cleans up resources
|
|
195
|
+
*/
|
|
196
|
+
performMaintenance(): void;
|
|
197
|
+
/**
|
|
198
|
+
* Clean up resources and dispose of components
|
|
199
|
+
*/
|
|
200
|
+
dispose(): void;
|
|
201
|
+
}
|