@tashiscool/agents 0.1.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/README.md +186 -0
- package/dist/conversation.d.ts +146 -0
- package/dist/conversation.d.ts.map +1 -0
- package/dist/conversation.js +239 -0
- package/dist/conversation.js.map +1 -0
- package/dist/events.d.ts +218 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +299 -0
- package/dist/events.js.map +1 -0
- package/dist/executor.d.ts +144 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +362 -0
- package/dist/executor.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/langchain.d.ts +210 -0
- package/dist/langchain.d.ts.map +1 -0
- package/dist/langchain.js +333 -0
- package/dist/langchain.js.map +1 -0
- package/dist/mcp.d.ts +208 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +266 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +96 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +248 -0
- package/dist/memory.js.map +1 -0
- package/dist/oauth.d.ts +158 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +344 -0
- package/dist/oauth.js.map +1 -0
- package/dist/output.d.ts +262 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +249 -0
- package/dist/output.js.map +1 -0
- package/dist/session.d.ts +212 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +347 -0
- package/dist/session.js.map +1 -0
- package/dist/tools.d.ts +125 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +195 -0
- package/dist/tools.js.map +1 -0
- package/package.json +45 -0
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Client
|
|
3
|
+
* Model Context Protocol client for tool registration and calling
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
/**
|
|
7
|
+
* Mock MCP client for development/testing
|
|
8
|
+
*/
|
|
9
|
+
export class MockMcpClient {
|
|
10
|
+
state = 'disconnected';
|
|
11
|
+
tools = [];
|
|
12
|
+
resources = [];
|
|
13
|
+
prompts = [];
|
|
14
|
+
toolHandlers = new Map();
|
|
15
|
+
constructor(config) {
|
|
16
|
+
// Config used for identification
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Register a mock tool
|
|
20
|
+
*/
|
|
21
|
+
registerTool(tool, handler) {
|
|
22
|
+
this.tools.push(tool);
|
|
23
|
+
this.toolHandlers.set(tool.name, handler);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Register a mock resource
|
|
27
|
+
*/
|
|
28
|
+
registerResource(resource) {
|
|
29
|
+
this.resources.push(resource);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Register a mock prompt
|
|
33
|
+
*/
|
|
34
|
+
registerPrompt(prompt) {
|
|
35
|
+
this.prompts.push(prompt);
|
|
36
|
+
}
|
|
37
|
+
getState() {
|
|
38
|
+
return this.state;
|
|
39
|
+
}
|
|
40
|
+
async connect() {
|
|
41
|
+
this.state = 'connecting';
|
|
42
|
+
// Simulate connection delay
|
|
43
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
44
|
+
this.state = 'connected';
|
|
45
|
+
}
|
|
46
|
+
async disconnect() {
|
|
47
|
+
this.state = 'disconnected';
|
|
48
|
+
}
|
|
49
|
+
async listTools() {
|
|
50
|
+
if (this.state !== 'connected') {
|
|
51
|
+
throw new Error('Not connected to MCP server');
|
|
52
|
+
}
|
|
53
|
+
return [...this.tools];
|
|
54
|
+
}
|
|
55
|
+
async callTool(name, args) {
|
|
56
|
+
if (this.state !== 'connected') {
|
|
57
|
+
throw new Error('Not connected to MCP server');
|
|
58
|
+
}
|
|
59
|
+
const handler = this.toolHandlers.get(name);
|
|
60
|
+
if (!handler) {
|
|
61
|
+
return {
|
|
62
|
+
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
63
|
+
isError: true,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return handler(args);
|
|
67
|
+
}
|
|
68
|
+
async listResources() {
|
|
69
|
+
if (this.state !== 'connected') {
|
|
70
|
+
throw new Error('Not connected to MCP server');
|
|
71
|
+
}
|
|
72
|
+
return [...this.resources];
|
|
73
|
+
}
|
|
74
|
+
async readResource(uri) {
|
|
75
|
+
if (this.state !== 'connected') {
|
|
76
|
+
throw new Error('Not connected to MCP server');
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
content: [{ type: 'resource', uri, text: `Content of ${uri}` }],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async listPrompts() {
|
|
83
|
+
if (this.state !== 'connected') {
|
|
84
|
+
throw new Error('Not connected to MCP server');
|
|
85
|
+
}
|
|
86
|
+
return [...this.prompts];
|
|
87
|
+
}
|
|
88
|
+
async getPrompt(name, args) {
|
|
89
|
+
if (this.state !== 'connected') {
|
|
90
|
+
throw new Error('Not connected to MCP server');
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
messages: [
|
|
94
|
+
{
|
|
95
|
+
role: 'user',
|
|
96
|
+
content: `Prompt: ${name}, Args: ${JSON.stringify(args)}`,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* MCP Tool adapter - converts MCP tools to standard ToolDefinition
|
|
104
|
+
*/
|
|
105
|
+
export class McpToolAdapter {
|
|
106
|
+
client;
|
|
107
|
+
prefix;
|
|
108
|
+
constructor(client, prefix = '') {
|
|
109
|
+
this.client = client;
|
|
110
|
+
this.prefix = prefix;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Convert MCP tool to ToolDefinition
|
|
114
|
+
*/
|
|
115
|
+
convertTool(mcpTool) {
|
|
116
|
+
const toolName = this.prefix
|
|
117
|
+
? `${this.prefix}_${mcpTool.name}`
|
|
118
|
+
: mcpTool.name;
|
|
119
|
+
// Convert JSON Schema to Zod schema (basic conversion)
|
|
120
|
+
const zodSchema = this.jsonSchemaToZod(mcpTool.inputSchema);
|
|
121
|
+
return {
|
|
122
|
+
name: toolName,
|
|
123
|
+
description: mcpTool.description || `MCP tool: ${mcpTool.name}`,
|
|
124
|
+
parameters: zodSchema,
|
|
125
|
+
execute: async (params) => {
|
|
126
|
+
const result = await this.client.callTool(mcpTool.name, params);
|
|
127
|
+
if (result.isError) {
|
|
128
|
+
throw new Error(result.content.find((c) => c.type === 'text')?.text || 'MCP tool error');
|
|
129
|
+
}
|
|
130
|
+
// Extract text content
|
|
131
|
+
const textContent = result.content
|
|
132
|
+
.filter((c) => c.type === 'text')
|
|
133
|
+
.map((c) => c.text)
|
|
134
|
+
.join('\n');
|
|
135
|
+
return textContent || result.content;
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Basic JSON Schema to Zod conversion
|
|
141
|
+
*/
|
|
142
|
+
jsonSchemaToZod(schema) {
|
|
143
|
+
if (!schema || schema.type === 'object') {
|
|
144
|
+
const shape = {};
|
|
145
|
+
if (schema?.properties) {
|
|
146
|
+
for (const [key, propSchema] of Object.entries(schema.properties)) {
|
|
147
|
+
let zodProp = this.jsonSchemaToZod(propSchema);
|
|
148
|
+
// Check if required
|
|
149
|
+
if (!schema.required?.includes(key)) {
|
|
150
|
+
zodProp = zodProp.optional();
|
|
151
|
+
}
|
|
152
|
+
shape[key] = zodProp;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return z.object(shape);
|
|
156
|
+
}
|
|
157
|
+
switch (schema.type) {
|
|
158
|
+
case 'string':
|
|
159
|
+
if (schema.enum) {
|
|
160
|
+
return z.enum(schema.enum);
|
|
161
|
+
}
|
|
162
|
+
return z.string();
|
|
163
|
+
case 'number':
|
|
164
|
+
return z.number();
|
|
165
|
+
case 'boolean':
|
|
166
|
+
return z.boolean();
|
|
167
|
+
case 'array':
|
|
168
|
+
return z.array(schema.items ? this.jsonSchemaToZod(schema.items) : z.unknown());
|
|
169
|
+
default:
|
|
170
|
+
return z.unknown();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get all tools as ToolDefinitions
|
|
175
|
+
*/
|
|
176
|
+
async getTools() {
|
|
177
|
+
const mcpTools = await this.client.listTools();
|
|
178
|
+
return mcpTools.map((t) => this.convertTool(t));
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get a specific tool by name
|
|
182
|
+
*/
|
|
183
|
+
async getTool(name) {
|
|
184
|
+
const tools = await this.getTools();
|
|
185
|
+
return tools.find((t) => t.name === name || t.name === `${this.prefix}_${name}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* MCP Server manager for multiple servers
|
|
190
|
+
*/
|
|
191
|
+
export class McpServerManager {
|
|
192
|
+
clients = new Map();
|
|
193
|
+
adapters = new Map();
|
|
194
|
+
/**
|
|
195
|
+
* Add an MCP server
|
|
196
|
+
*/
|
|
197
|
+
addServer(name, client) {
|
|
198
|
+
this.clients.set(name, client);
|
|
199
|
+
this.adapters.set(name, new McpToolAdapter(client, name));
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get a client by name
|
|
203
|
+
*/
|
|
204
|
+
getClient(name) {
|
|
205
|
+
return this.clients.get(name);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Connect to all servers
|
|
209
|
+
*/
|
|
210
|
+
async connectAll() {
|
|
211
|
+
const promises = Array.from(this.clients.values()).map((c) => c.connect());
|
|
212
|
+
await Promise.all(promises);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Disconnect from all servers
|
|
216
|
+
*/
|
|
217
|
+
async disconnectAll() {
|
|
218
|
+
const promises = Array.from(this.clients.values()).map((c) => c.disconnect());
|
|
219
|
+
await Promise.all(promises);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get all tools from all servers
|
|
223
|
+
*/
|
|
224
|
+
async getAllTools() {
|
|
225
|
+
const toolArrays = await Promise.all(Array.from(this.adapters.values()).map((a) => a.getTools()));
|
|
226
|
+
return toolArrays.flat();
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Get tools from a specific server
|
|
230
|
+
*/
|
|
231
|
+
async getToolsFromServer(name) {
|
|
232
|
+
const adapter = this.adapters.get(name);
|
|
233
|
+
if (!adapter) {
|
|
234
|
+
throw new Error(`Unknown MCP server: ${name}`);
|
|
235
|
+
}
|
|
236
|
+
return adapter.getTools();
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* List all connected servers
|
|
240
|
+
*/
|
|
241
|
+
listServers() {
|
|
242
|
+
return Array.from(this.clients.entries()).map(([name, client]) => ({
|
|
243
|
+
name,
|
|
244
|
+
state: client.getState(),
|
|
245
|
+
}));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Create an MCP server manager
|
|
250
|
+
*/
|
|
251
|
+
export function createMcpManager() {
|
|
252
|
+
return new McpServerManager();
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Create a mock MCP client for testing
|
|
256
|
+
*/
|
|
257
|
+
export function createMockMcpClient(config) {
|
|
258
|
+
return new MockMcpClient(config);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Create an MCP tool adapter
|
|
262
|
+
*/
|
|
263
|
+
export function createMcpToolAdapter(client, prefix) {
|
|
264
|
+
return new McpToolAdapter(client, prefix);
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/memory.d.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation Memory
|
|
3
|
+
* Manage conversation history with token-aware windowing
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Message role
|
|
7
|
+
*/
|
|
8
|
+
export type MessageRole = 'system' | 'user' | 'assistant' | 'tool';
|
|
9
|
+
/**
|
|
10
|
+
* Base message structure
|
|
11
|
+
*/
|
|
12
|
+
export interface Message {
|
|
13
|
+
role: MessageRole;
|
|
14
|
+
content: string;
|
|
15
|
+
name?: string;
|
|
16
|
+
toolCallId?: string;
|
|
17
|
+
metadata?: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Message with token count
|
|
21
|
+
*/
|
|
22
|
+
export interface TokenizedMessage extends Message {
|
|
23
|
+
tokens: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Token counter function
|
|
27
|
+
*/
|
|
28
|
+
export type TokenCounter = (text: string) => number;
|
|
29
|
+
/**
|
|
30
|
+
* Simple token estimation (4 chars per token)
|
|
31
|
+
*/
|
|
32
|
+
export declare function estimateTokens(text: string): number;
|
|
33
|
+
/**
|
|
34
|
+
* Memory configuration
|
|
35
|
+
*/
|
|
36
|
+
export interface MemoryConfig {
|
|
37
|
+
/** Maximum tokens to keep in memory */
|
|
38
|
+
maxTokens: number;
|
|
39
|
+
/** Token counter function */
|
|
40
|
+
tokenCounter?: TokenCounter;
|
|
41
|
+
/** System message to always include */
|
|
42
|
+
systemMessage?: string;
|
|
43
|
+
/** Number of recent messages to always keep */
|
|
44
|
+
preserveRecent?: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Memory statistics
|
|
48
|
+
*/
|
|
49
|
+
export interface MemoryStats {
|
|
50
|
+
messageCount: number;
|
|
51
|
+
totalTokens: number;
|
|
52
|
+
maxTokens: number;
|
|
53
|
+
utilizationPercent: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Conversation memory interface
|
|
57
|
+
*/
|
|
58
|
+
export interface ConversationMemory {
|
|
59
|
+
/** Add a message to memory */
|
|
60
|
+
add: (message: Message) => void;
|
|
61
|
+
/** Add multiple messages */
|
|
62
|
+
addAll: (messages: Message[]) => void;
|
|
63
|
+
/** Get messages within token budget */
|
|
64
|
+
getMessages: () => Message[];
|
|
65
|
+
/** Get all messages without windowing */
|
|
66
|
+
getAllMessages: () => Message[];
|
|
67
|
+
/** Clear all messages */
|
|
68
|
+
clear: () => void;
|
|
69
|
+
/** Get memory statistics */
|
|
70
|
+
getStats: () => MemoryStats;
|
|
71
|
+
/** Set system message */
|
|
72
|
+
setSystemMessage: (content: string) => void;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create a token-aware conversation memory
|
|
76
|
+
*/
|
|
77
|
+
export declare function createMemory(config: MemoryConfig): ConversationMemory;
|
|
78
|
+
/**
|
|
79
|
+
* Create a sliding window memory that keeps the last N messages
|
|
80
|
+
*/
|
|
81
|
+
export declare function createSlidingWindowMemory(windowSize: number, systemMessage?: string): ConversationMemory;
|
|
82
|
+
/**
|
|
83
|
+
* Create a summary-based memory that compresses old messages
|
|
84
|
+
*/
|
|
85
|
+
export interface SummaryMemoryConfig {
|
|
86
|
+
/** Maximum messages before summarization */
|
|
87
|
+
maxMessages: number;
|
|
88
|
+
/** Function to summarize messages */
|
|
89
|
+
summarizer: (messages: Message[]) => Promise<string>;
|
|
90
|
+
/** System message */
|
|
91
|
+
systemMessage?: string;
|
|
92
|
+
}
|
|
93
|
+
export declare function createSummaryMemory(config: SummaryMemoryConfig): ConversationMemory & {
|
|
94
|
+
summarize: () => Promise<void>;
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,OAAO;IAC/C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAEpD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,4BAA4B;IAC5B,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACtC,uCAAuC;IACvC,WAAW,EAAE,MAAM,OAAO,EAAE,CAAC;IAC7B,yCAAyC;IACzC,cAAc,EAAE,MAAM,OAAO,EAAE,CAAC;IAChC,yBAAyB;IACzB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,WAAW,CAAC;IAC5B,yBAAyB;IACzB,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,kBAAkB,CAoIrE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB,kBAAkB,CA8DpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,GAC1B,kBAAkB,GAAG;IAAE,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAoFzD"}
|
package/dist/memory.js
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation Memory
|
|
3
|
+
* Manage conversation history with token-aware windowing
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Simple token estimation (4 chars per token)
|
|
7
|
+
*/
|
|
8
|
+
export function estimateTokens(text) {
|
|
9
|
+
return Math.ceil(text.length / 4);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Create a token-aware conversation memory
|
|
13
|
+
*/
|
|
14
|
+
export function createMemory(config) {
|
|
15
|
+
const { maxTokens, preserveRecent = 2 } = config;
|
|
16
|
+
const tokenCounter = config.tokenCounter || estimateTokens;
|
|
17
|
+
let messages = [];
|
|
18
|
+
let systemMessage = null;
|
|
19
|
+
if (config.systemMessage) {
|
|
20
|
+
systemMessage = {
|
|
21
|
+
role: 'system',
|
|
22
|
+
content: config.systemMessage,
|
|
23
|
+
tokens: tokenCounter(config.systemMessage),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function add(message) {
|
|
27
|
+
const tokens = tokenCounter(message.content);
|
|
28
|
+
messages.push({ ...message, tokens });
|
|
29
|
+
}
|
|
30
|
+
function addAll(newMessages) {
|
|
31
|
+
for (const message of newMessages) {
|
|
32
|
+
add(message);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function getMessages() {
|
|
36
|
+
// Start with system message tokens
|
|
37
|
+
let availableTokens = maxTokens;
|
|
38
|
+
if (systemMessage) {
|
|
39
|
+
availableTokens -= systemMessage.tokens;
|
|
40
|
+
}
|
|
41
|
+
// Always include the most recent messages
|
|
42
|
+
const recentMessages = messages.slice(-preserveRecent);
|
|
43
|
+
const olderMessages = messages.slice(0, -preserveRecent);
|
|
44
|
+
// Calculate tokens for recent messages
|
|
45
|
+
const recentTokens = recentMessages.reduce((sum, m) => sum + m.tokens, 0);
|
|
46
|
+
availableTokens -= recentTokens;
|
|
47
|
+
// Add older messages from most recent, within budget
|
|
48
|
+
const includedOlder = [];
|
|
49
|
+
for (let i = olderMessages.length - 1; i >= 0; i--) {
|
|
50
|
+
const msg = olderMessages[i];
|
|
51
|
+
if (msg && msg.tokens <= availableTokens) {
|
|
52
|
+
includedOlder.unshift(msg);
|
|
53
|
+
availableTokens -= msg.tokens;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Build final message list
|
|
57
|
+
const result = [];
|
|
58
|
+
if (systemMessage) {
|
|
59
|
+
result.push({
|
|
60
|
+
role: systemMessage.role,
|
|
61
|
+
content: systemMessage.content,
|
|
62
|
+
name: systemMessage.name,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
for (const msg of [...includedOlder, ...recentMessages]) {
|
|
66
|
+
result.push({
|
|
67
|
+
role: msg.role,
|
|
68
|
+
content: msg.content,
|
|
69
|
+
name: msg.name,
|
|
70
|
+
toolCallId: msg.toolCallId,
|
|
71
|
+
metadata: msg.metadata,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
function getAllMessages() {
|
|
77
|
+
const result = [];
|
|
78
|
+
if (systemMessage) {
|
|
79
|
+
result.push({
|
|
80
|
+
role: systemMessage.role,
|
|
81
|
+
content: systemMessage.content,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
for (const msg of messages) {
|
|
85
|
+
result.push({
|
|
86
|
+
role: msg.role,
|
|
87
|
+
content: msg.content,
|
|
88
|
+
name: msg.name,
|
|
89
|
+
toolCallId: msg.toolCallId,
|
|
90
|
+
metadata: msg.metadata,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
function clear() {
|
|
96
|
+
messages = [];
|
|
97
|
+
}
|
|
98
|
+
function getStats() {
|
|
99
|
+
const messageTokens = messages.reduce((sum, m) => sum + m.tokens, 0);
|
|
100
|
+
const systemTokens = systemMessage?.tokens || 0;
|
|
101
|
+
const totalTokens = messageTokens + systemTokens;
|
|
102
|
+
return {
|
|
103
|
+
messageCount: messages.length + (systemMessage ? 1 : 0),
|
|
104
|
+
totalTokens,
|
|
105
|
+
maxTokens,
|
|
106
|
+
utilizationPercent: Math.round((totalTokens / maxTokens) * 100),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function setSystemMessage(content) {
|
|
110
|
+
systemMessage = {
|
|
111
|
+
role: 'system',
|
|
112
|
+
content,
|
|
113
|
+
tokens: tokenCounter(content),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
add,
|
|
118
|
+
addAll,
|
|
119
|
+
getMessages,
|
|
120
|
+
getAllMessages,
|
|
121
|
+
clear,
|
|
122
|
+
getStats,
|
|
123
|
+
setSystemMessage,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Create a sliding window memory that keeps the last N messages
|
|
128
|
+
*/
|
|
129
|
+
export function createSlidingWindowMemory(windowSize, systemMessage) {
|
|
130
|
+
let messages = [];
|
|
131
|
+
let system = null;
|
|
132
|
+
if (systemMessage) {
|
|
133
|
+
system = { role: 'system', content: systemMessage };
|
|
134
|
+
}
|
|
135
|
+
function add(message) {
|
|
136
|
+
messages.push(message);
|
|
137
|
+
if (messages.length > windowSize) {
|
|
138
|
+
messages = messages.slice(-windowSize);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function addAll(newMessages) {
|
|
142
|
+
for (const message of newMessages) {
|
|
143
|
+
add(message);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function getMessages() {
|
|
147
|
+
if (system) {
|
|
148
|
+
return [system, ...messages];
|
|
149
|
+
}
|
|
150
|
+
return [...messages];
|
|
151
|
+
}
|
|
152
|
+
function getAllMessages() {
|
|
153
|
+
return getMessages();
|
|
154
|
+
}
|
|
155
|
+
function clear() {
|
|
156
|
+
messages = [];
|
|
157
|
+
}
|
|
158
|
+
function getStats() {
|
|
159
|
+
const totalTokens = messages.reduce((sum, m) => sum + estimateTokens(m.content), 0);
|
|
160
|
+
return {
|
|
161
|
+
messageCount: messages.length + (system ? 1 : 0),
|
|
162
|
+
totalTokens,
|
|
163
|
+
maxTokens: windowSize * 500, // Rough estimate
|
|
164
|
+
utilizationPercent: Math.round((messages.length / windowSize) * 100),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function setSystemMessage(content) {
|
|
168
|
+
system = { role: 'system', content };
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
add,
|
|
172
|
+
addAll,
|
|
173
|
+
getMessages,
|
|
174
|
+
getAllMessages,
|
|
175
|
+
clear,
|
|
176
|
+
getStats,
|
|
177
|
+
setSystemMessage,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
export function createSummaryMemory(config) {
|
|
181
|
+
const { maxMessages, summarizer } = config;
|
|
182
|
+
let messages = [];
|
|
183
|
+
let summary = null;
|
|
184
|
+
let system = null;
|
|
185
|
+
if (config.systemMessage) {
|
|
186
|
+
system = { role: 'system', content: config.systemMessage };
|
|
187
|
+
}
|
|
188
|
+
function add(message) {
|
|
189
|
+
messages.push(message);
|
|
190
|
+
}
|
|
191
|
+
function addAll(newMessages) {
|
|
192
|
+
messages.push(...newMessages);
|
|
193
|
+
}
|
|
194
|
+
async function summarize() {
|
|
195
|
+
if (messages.length <= maxMessages)
|
|
196
|
+
return;
|
|
197
|
+
const toSummarize = messages.slice(0, -maxMessages);
|
|
198
|
+
const toKeep = messages.slice(-maxMessages);
|
|
199
|
+
const newSummary = await summarizer(toSummarize);
|
|
200
|
+
summary = summary ? `${summary}\n\n${newSummary}` : newSummary;
|
|
201
|
+
messages = toKeep;
|
|
202
|
+
}
|
|
203
|
+
function getMessages() {
|
|
204
|
+
const result = [];
|
|
205
|
+
if (system) {
|
|
206
|
+
result.push(system);
|
|
207
|
+
}
|
|
208
|
+
if (summary) {
|
|
209
|
+
result.push({
|
|
210
|
+
role: 'system',
|
|
211
|
+
content: `Previous conversation summary:\n${summary}`,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
result.push(...messages);
|
|
215
|
+
return result;
|
|
216
|
+
}
|
|
217
|
+
function getAllMessages() {
|
|
218
|
+
return getMessages();
|
|
219
|
+
}
|
|
220
|
+
function clear() {
|
|
221
|
+
messages = [];
|
|
222
|
+
summary = null;
|
|
223
|
+
}
|
|
224
|
+
function getStats() {
|
|
225
|
+
const totalTokens = messages.reduce((sum, m) => sum + estimateTokens(m.content), 0) +
|
|
226
|
+
(summary ? estimateTokens(summary) : 0);
|
|
227
|
+
return {
|
|
228
|
+
messageCount: messages.length + (system ? 1 : 0) + (summary ? 1 : 0),
|
|
229
|
+
totalTokens,
|
|
230
|
+
maxTokens: maxMessages * 500,
|
|
231
|
+
utilizationPercent: Math.round((messages.length / maxMessages) * 100),
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
function setSystemMessage(content) {
|
|
235
|
+
system = { role: 'system', content };
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
add,
|
|
239
|
+
addAll,
|
|
240
|
+
getMessages,
|
|
241
|
+
getAllMessages,
|
|
242
|
+
clear,
|
|
243
|
+
getStats,
|
|
244
|
+
setSystemMessage,
|
|
245
|
+
summarize,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
|