@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
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat Session Management
|
|
3
|
+
* Manage chat session state, context, and lifecycle
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Session status
|
|
7
|
+
*/
|
|
8
|
+
export type SessionStatus = 'active' | 'idle' | 'expired' | 'closed';
|
|
9
|
+
/**
|
|
10
|
+
* Session configuration
|
|
11
|
+
*/
|
|
12
|
+
export interface SessionConfig {
|
|
13
|
+
/** Session timeout in milliseconds */
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
/** Maximum messages before auto-summarization */
|
|
16
|
+
maxMessages?: number;
|
|
17
|
+
/** Auto-save interval in milliseconds */
|
|
18
|
+
autoSaveIntervalMs?: number;
|
|
19
|
+
/** Session metadata */
|
|
20
|
+
metadata?: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Session state
|
|
24
|
+
*/
|
|
25
|
+
export interface SessionState {
|
|
26
|
+
/** Session ID */
|
|
27
|
+
id: string;
|
|
28
|
+
/** User ID */
|
|
29
|
+
userId?: string;
|
|
30
|
+
/** Session status */
|
|
31
|
+
status: SessionStatus;
|
|
32
|
+
/** Creation timestamp */
|
|
33
|
+
createdAt: Date;
|
|
34
|
+
/** Last activity timestamp */
|
|
35
|
+
lastActivityAt: Date;
|
|
36
|
+
/** Expiration timestamp */
|
|
37
|
+
expiresAt?: Date;
|
|
38
|
+
/** Session configuration */
|
|
39
|
+
config: SessionConfig;
|
|
40
|
+
/** Custom context data */
|
|
41
|
+
context: Record<string, unknown>;
|
|
42
|
+
/** Message count */
|
|
43
|
+
messageCount: number;
|
|
44
|
+
/** Token usage */
|
|
45
|
+
tokenUsage: {
|
|
46
|
+
input: number;
|
|
47
|
+
output: number;
|
|
48
|
+
total: number;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Session event types
|
|
53
|
+
*/
|
|
54
|
+
export type SessionEventType = 'created' | 'updated' | 'expired' | 'closed' | 'message_added' | 'context_changed';
|
|
55
|
+
/**
|
|
56
|
+
* Session event
|
|
57
|
+
*/
|
|
58
|
+
export interface SessionEvent {
|
|
59
|
+
type: SessionEventType;
|
|
60
|
+
sessionId: string;
|
|
61
|
+
timestamp: Date;
|
|
62
|
+
data?: unknown;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Session event handler
|
|
66
|
+
*/
|
|
67
|
+
export type SessionEventHandler = (event: SessionEvent) => void | Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Session storage interface
|
|
70
|
+
*/
|
|
71
|
+
export interface SessionStorage {
|
|
72
|
+
save(session: SessionState): Promise<void>;
|
|
73
|
+
load(sessionId: string): Promise<SessionState | null>;
|
|
74
|
+
delete(sessionId: string): Promise<void>;
|
|
75
|
+
listByUser(userId: string): Promise<SessionState[]>;
|
|
76
|
+
listActive(): Promise<SessionState[]>;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* In-memory session storage
|
|
80
|
+
*/
|
|
81
|
+
export declare class InMemorySessionStorage implements SessionStorage {
|
|
82
|
+
private sessions;
|
|
83
|
+
save(session: SessionState): Promise<void>;
|
|
84
|
+
load(sessionId: string): Promise<SessionState | null>;
|
|
85
|
+
delete(sessionId: string): Promise<void>;
|
|
86
|
+
listByUser(userId: string): Promise<SessionState[]>;
|
|
87
|
+
listActive(): Promise<SessionState[]>;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Chat session manager
|
|
91
|
+
*/
|
|
92
|
+
export declare class ChatSession {
|
|
93
|
+
private state;
|
|
94
|
+
private storage;
|
|
95
|
+
private eventHandlers;
|
|
96
|
+
private autoSaveTimer?;
|
|
97
|
+
private expirationTimer?;
|
|
98
|
+
constructor(config?: SessionConfig, storage?: SessionStorage, existingState?: SessionState);
|
|
99
|
+
private setupTimers;
|
|
100
|
+
private clearTimers;
|
|
101
|
+
private emit;
|
|
102
|
+
/**
|
|
103
|
+
* Get session ID
|
|
104
|
+
*/
|
|
105
|
+
get id(): string;
|
|
106
|
+
/**
|
|
107
|
+
* Get session status
|
|
108
|
+
*/
|
|
109
|
+
get status(): SessionStatus;
|
|
110
|
+
/**
|
|
111
|
+
* Check if session is active
|
|
112
|
+
*/
|
|
113
|
+
get isActive(): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Get session state
|
|
116
|
+
*/
|
|
117
|
+
getState(): SessionState;
|
|
118
|
+
/**
|
|
119
|
+
* Update last activity timestamp
|
|
120
|
+
*/
|
|
121
|
+
touch(): void;
|
|
122
|
+
/**
|
|
123
|
+
* Set context value
|
|
124
|
+
*/
|
|
125
|
+
setContext(key: string, value: unknown): void;
|
|
126
|
+
/**
|
|
127
|
+
* Get context value
|
|
128
|
+
*/
|
|
129
|
+
getContext<T>(key: string): T | undefined;
|
|
130
|
+
/**
|
|
131
|
+
* Get all context
|
|
132
|
+
*/
|
|
133
|
+
getAllContext(): Record<string, unknown>;
|
|
134
|
+
/**
|
|
135
|
+
* Clear context
|
|
136
|
+
*/
|
|
137
|
+
clearContext(): void;
|
|
138
|
+
/**
|
|
139
|
+
* Record message added
|
|
140
|
+
*/
|
|
141
|
+
recordMessage(inputTokens?: number, outputTokens?: number): void;
|
|
142
|
+
/**
|
|
143
|
+
* Set user ID
|
|
144
|
+
*/
|
|
145
|
+
setUserId(userId: string): void;
|
|
146
|
+
/**
|
|
147
|
+
* Subscribe to session events
|
|
148
|
+
*/
|
|
149
|
+
on(handler: SessionEventHandler): () => void;
|
|
150
|
+
/**
|
|
151
|
+
* Save session to storage
|
|
152
|
+
*/
|
|
153
|
+
save(): Promise<void>;
|
|
154
|
+
/**
|
|
155
|
+
* Mark session as expired
|
|
156
|
+
*/
|
|
157
|
+
expire(): Promise<void>;
|
|
158
|
+
/**
|
|
159
|
+
* Close session
|
|
160
|
+
*/
|
|
161
|
+
close(): Promise<void>;
|
|
162
|
+
/**
|
|
163
|
+
* Delete session
|
|
164
|
+
*/
|
|
165
|
+
delete(): Promise<void>;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Session manager for handling multiple sessions
|
|
169
|
+
*/
|
|
170
|
+
export declare class SessionManager {
|
|
171
|
+
private storage;
|
|
172
|
+
private activeSessions;
|
|
173
|
+
private defaultConfig;
|
|
174
|
+
constructor(storage?: SessionStorage, defaultConfig?: SessionConfig);
|
|
175
|
+
/**
|
|
176
|
+
* Create a new session
|
|
177
|
+
*/
|
|
178
|
+
create(config?: SessionConfig, userId?: string): Promise<ChatSession>;
|
|
179
|
+
/**
|
|
180
|
+
* Load an existing session
|
|
181
|
+
*/
|
|
182
|
+
load(sessionId: string): Promise<ChatSession | null>;
|
|
183
|
+
/**
|
|
184
|
+
* Get or create session for user
|
|
185
|
+
*/
|
|
186
|
+
getOrCreate(userId: string, config?: SessionConfig): Promise<ChatSession>;
|
|
187
|
+
/**
|
|
188
|
+
* List active sessions
|
|
189
|
+
*/
|
|
190
|
+
listActive(): Promise<SessionState[]>;
|
|
191
|
+
/**
|
|
192
|
+
* List sessions for user
|
|
193
|
+
*/
|
|
194
|
+
listByUser(userId: string): Promise<SessionState[]>;
|
|
195
|
+
/**
|
|
196
|
+
* Close all sessions for user
|
|
197
|
+
*/
|
|
198
|
+
closeAllForUser(userId: string): Promise<void>;
|
|
199
|
+
/**
|
|
200
|
+
* Cleanup expired sessions
|
|
201
|
+
*/
|
|
202
|
+
cleanup(): Promise<number>;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Create a session manager
|
|
206
|
+
*/
|
|
207
|
+
export declare function createSessionManager(storage?: SessionStorage, defaultConfig?: SessionConfig): SessionManager;
|
|
208
|
+
/**
|
|
209
|
+
* Create a single chat session
|
|
210
|
+
*/
|
|
211
|
+
export declare function createChatSession(config?: SessionConfig, storage?: SessionStorage): ChatSession;
|
|
212
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/session.js
ADDED
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat Session Management
|
|
3
|
+
* Manage chat session state, context, and lifecycle
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* In-memory session storage
|
|
7
|
+
*/
|
|
8
|
+
export class InMemorySessionStorage {
|
|
9
|
+
sessions = new Map();
|
|
10
|
+
async save(session) {
|
|
11
|
+
this.sessions.set(session.id, { ...session });
|
|
12
|
+
}
|
|
13
|
+
async load(sessionId) {
|
|
14
|
+
const session = this.sessions.get(sessionId);
|
|
15
|
+
return session ? { ...session } : null;
|
|
16
|
+
}
|
|
17
|
+
async delete(sessionId) {
|
|
18
|
+
this.sessions.delete(sessionId);
|
|
19
|
+
}
|
|
20
|
+
async listByUser(userId) {
|
|
21
|
+
const result = [];
|
|
22
|
+
for (const session of this.sessions.values()) {
|
|
23
|
+
if (session.userId === userId) {
|
|
24
|
+
result.push({ ...session });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
async listActive() {
|
|
30
|
+
const result = [];
|
|
31
|
+
for (const session of this.sessions.values()) {
|
|
32
|
+
if (session.status === 'active') {
|
|
33
|
+
result.push({ ...session });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Generate session ID
|
|
41
|
+
*/
|
|
42
|
+
function generateSessionId() {
|
|
43
|
+
return `sess_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Chat session manager
|
|
47
|
+
*/
|
|
48
|
+
export class ChatSession {
|
|
49
|
+
state;
|
|
50
|
+
storage;
|
|
51
|
+
eventHandlers = [];
|
|
52
|
+
autoSaveTimer;
|
|
53
|
+
expirationTimer;
|
|
54
|
+
constructor(config = {}, storage, existingState) {
|
|
55
|
+
this.storage = storage || new InMemorySessionStorage();
|
|
56
|
+
if (existingState) {
|
|
57
|
+
this.state = existingState;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const now = new Date();
|
|
61
|
+
this.state = {
|
|
62
|
+
id: generateSessionId(),
|
|
63
|
+
status: 'active',
|
|
64
|
+
createdAt: now,
|
|
65
|
+
lastActivityAt: now,
|
|
66
|
+
config,
|
|
67
|
+
context: {},
|
|
68
|
+
messageCount: 0,
|
|
69
|
+
tokenUsage: { input: 0, output: 0, total: 0 },
|
|
70
|
+
};
|
|
71
|
+
if (config.timeoutMs) {
|
|
72
|
+
this.state.expiresAt = new Date(now.getTime() + config.timeoutMs);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
this.setupTimers();
|
|
76
|
+
}
|
|
77
|
+
setupTimers() {
|
|
78
|
+
// Auto-save timer
|
|
79
|
+
if (this.state.config.autoSaveIntervalMs) {
|
|
80
|
+
this.autoSaveTimer = setInterval(() => this.save(), this.state.config.autoSaveIntervalMs);
|
|
81
|
+
}
|
|
82
|
+
// Expiration timer
|
|
83
|
+
if (this.state.expiresAt) {
|
|
84
|
+
const timeUntilExpiry = this.state.expiresAt.getTime() - Date.now();
|
|
85
|
+
if (timeUntilExpiry > 0) {
|
|
86
|
+
this.expirationTimer = setTimeout(() => this.expire(), timeUntilExpiry);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
clearTimers() {
|
|
91
|
+
if (this.autoSaveTimer) {
|
|
92
|
+
clearInterval(this.autoSaveTimer);
|
|
93
|
+
}
|
|
94
|
+
if (this.expirationTimer) {
|
|
95
|
+
clearTimeout(this.expirationTimer);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async emit(type, data) {
|
|
99
|
+
const event = {
|
|
100
|
+
type,
|
|
101
|
+
sessionId: this.state.id,
|
|
102
|
+
timestamp: new Date(),
|
|
103
|
+
data,
|
|
104
|
+
};
|
|
105
|
+
for (const handler of this.eventHandlers) {
|
|
106
|
+
await handler(event);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get session ID
|
|
111
|
+
*/
|
|
112
|
+
get id() {
|
|
113
|
+
return this.state.id;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get session status
|
|
117
|
+
*/
|
|
118
|
+
get status() {
|
|
119
|
+
return this.state.status;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Check if session is active
|
|
123
|
+
*/
|
|
124
|
+
get isActive() {
|
|
125
|
+
return this.state.status === 'active';
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get session state
|
|
129
|
+
*/
|
|
130
|
+
getState() {
|
|
131
|
+
return { ...this.state };
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Update last activity timestamp
|
|
135
|
+
*/
|
|
136
|
+
touch() {
|
|
137
|
+
this.state.lastActivityAt = new Date();
|
|
138
|
+
// Reset expiration timer
|
|
139
|
+
if (this.state.config.timeoutMs) {
|
|
140
|
+
this.clearTimers();
|
|
141
|
+
this.state.expiresAt = new Date(Date.now() + this.state.config.timeoutMs);
|
|
142
|
+
this.setupTimers();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Set context value
|
|
147
|
+
*/
|
|
148
|
+
setContext(key, value) {
|
|
149
|
+
this.state.context[key] = value;
|
|
150
|
+
this.touch();
|
|
151
|
+
this.emit('context_changed', { key, value });
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get context value
|
|
155
|
+
*/
|
|
156
|
+
getContext(key) {
|
|
157
|
+
return this.state.context[key];
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get all context
|
|
161
|
+
*/
|
|
162
|
+
getAllContext() {
|
|
163
|
+
return { ...this.state.context };
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Clear context
|
|
167
|
+
*/
|
|
168
|
+
clearContext() {
|
|
169
|
+
this.state.context = {};
|
|
170
|
+
this.emit('context_changed', { cleared: true });
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Record message added
|
|
174
|
+
*/
|
|
175
|
+
recordMessage(inputTokens = 0, outputTokens = 0) {
|
|
176
|
+
this.state.messageCount++;
|
|
177
|
+
this.state.tokenUsage.input += inputTokens;
|
|
178
|
+
this.state.tokenUsage.output += outputTokens;
|
|
179
|
+
this.state.tokenUsage.total += inputTokens + outputTokens;
|
|
180
|
+
this.touch();
|
|
181
|
+
this.emit('message_added', {
|
|
182
|
+
messageCount: this.state.messageCount,
|
|
183
|
+
tokenUsage: this.state.tokenUsage,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Set user ID
|
|
188
|
+
*/
|
|
189
|
+
setUserId(userId) {
|
|
190
|
+
this.state.userId = userId;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Subscribe to session events
|
|
194
|
+
*/
|
|
195
|
+
on(handler) {
|
|
196
|
+
this.eventHandlers.push(handler);
|
|
197
|
+
return () => {
|
|
198
|
+
const index = this.eventHandlers.indexOf(handler);
|
|
199
|
+
if (index !== -1) {
|
|
200
|
+
this.eventHandlers.splice(index, 1);
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Save session to storage
|
|
206
|
+
*/
|
|
207
|
+
async save() {
|
|
208
|
+
await this.storage.save(this.state);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Mark session as expired
|
|
212
|
+
*/
|
|
213
|
+
async expire() {
|
|
214
|
+
this.state.status = 'expired';
|
|
215
|
+
this.clearTimers();
|
|
216
|
+
await this.save();
|
|
217
|
+
await this.emit('expired');
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Close session
|
|
221
|
+
*/
|
|
222
|
+
async close() {
|
|
223
|
+
this.state.status = 'closed';
|
|
224
|
+
this.clearTimers();
|
|
225
|
+
await this.save();
|
|
226
|
+
await this.emit('closed');
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Delete session
|
|
230
|
+
*/
|
|
231
|
+
async delete() {
|
|
232
|
+
this.clearTimers();
|
|
233
|
+
await this.storage.delete(this.state.id);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Session manager for handling multiple sessions
|
|
238
|
+
*/
|
|
239
|
+
export class SessionManager {
|
|
240
|
+
storage;
|
|
241
|
+
activeSessions = new Map();
|
|
242
|
+
defaultConfig;
|
|
243
|
+
constructor(storage, defaultConfig = {}) {
|
|
244
|
+
this.storage = storage || new InMemorySessionStorage();
|
|
245
|
+
this.defaultConfig = defaultConfig;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Create a new session
|
|
249
|
+
*/
|
|
250
|
+
async create(config, userId) {
|
|
251
|
+
const mergedConfig = { ...this.defaultConfig, ...config };
|
|
252
|
+
const session = new ChatSession(mergedConfig, this.storage);
|
|
253
|
+
if (userId) {
|
|
254
|
+
session.setUserId(userId);
|
|
255
|
+
}
|
|
256
|
+
await session.save();
|
|
257
|
+
this.activeSessions.set(session.id, session);
|
|
258
|
+
return session;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Load an existing session
|
|
262
|
+
*/
|
|
263
|
+
async load(sessionId) {
|
|
264
|
+
// Check active cache
|
|
265
|
+
if (this.activeSessions.has(sessionId)) {
|
|
266
|
+
return this.activeSessions.get(sessionId);
|
|
267
|
+
}
|
|
268
|
+
// Load from storage
|
|
269
|
+
const state = await this.storage.load(sessionId);
|
|
270
|
+
if (!state)
|
|
271
|
+
return null;
|
|
272
|
+
const session = new ChatSession(state.config, this.storage, state);
|
|
273
|
+
if (session.isActive) {
|
|
274
|
+
this.activeSessions.set(sessionId, session);
|
|
275
|
+
}
|
|
276
|
+
return session;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Get or create session for user
|
|
280
|
+
*/
|
|
281
|
+
async getOrCreate(userId, config) {
|
|
282
|
+
// Find existing active session
|
|
283
|
+
const userSessions = await this.storage.listByUser(userId);
|
|
284
|
+
const activeSession = userSessions.find((s) => s.status === 'active');
|
|
285
|
+
if (activeSession) {
|
|
286
|
+
return this.load(activeSession.id);
|
|
287
|
+
}
|
|
288
|
+
// Create new session
|
|
289
|
+
return this.create(config, userId);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* List active sessions
|
|
293
|
+
*/
|
|
294
|
+
async listActive() {
|
|
295
|
+
return this.storage.listActive();
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* List sessions for user
|
|
299
|
+
*/
|
|
300
|
+
async listByUser(userId) {
|
|
301
|
+
return this.storage.listByUser(userId);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Close all sessions for user
|
|
305
|
+
*/
|
|
306
|
+
async closeAllForUser(userId) {
|
|
307
|
+
const sessions = await this.storage.listByUser(userId);
|
|
308
|
+
for (const state of sessions) {
|
|
309
|
+
if (state.status === 'active') {
|
|
310
|
+
const session = await this.load(state.id);
|
|
311
|
+
if (session) {
|
|
312
|
+
await session.close();
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Cleanup expired sessions
|
|
319
|
+
*/
|
|
320
|
+
async cleanup() {
|
|
321
|
+
const active = await this.storage.listActive();
|
|
322
|
+
let cleaned = 0;
|
|
323
|
+
for (const state of active) {
|
|
324
|
+
if (state.expiresAt && state.expiresAt < new Date()) {
|
|
325
|
+
const session = await this.load(state.id);
|
|
326
|
+
if (session) {
|
|
327
|
+
await session.expire();
|
|
328
|
+
cleaned++;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return cleaned;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Create a session manager
|
|
337
|
+
*/
|
|
338
|
+
export function createSessionManager(storage, defaultConfig) {
|
|
339
|
+
return new SessionManager(storage, defaultConfig);
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Create a single chat session
|
|
343
|
+
*/
|
|
344
|
+
export function createChatSession(config, storage) {
|
|
345
|
+
return new ChatSession(config, storage);
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Definition
|
|
3
|
+
* Define and manage LLM tools/functions in a type-safe way
|
|
4
|
+
*/
|
|
5
|
+
import { type ZodSchema } from 'zod';
|
|
6
|
+
/**
|
|
7
|
+
* JSON Schema representation for tool parameters
|
|
8
|
+
*/
|
|
9
|
+
export interface JsonSchema {
|
|
10
|
+
type: string;
|
|
11
|
+
properties?: Record<string, JsonSchema>;
|
|
12
|
+
required?: string[];
|
|
13
|
+
items?: JsonSchema;
|
|
14
|
+
enum?: string[];
|
|
15
|
+
description?: string;
|
|
16
|
+
default?: unknown;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Tool definition
|
|
20
|
+
*/
|
|
21
|
+
export interface ToolDefinition<TParams = unknown, TResult = unknown> {
|
|
22
|
+
/** Tool name */
|
|
23
|
+
name: string;
|
|
24
|
+
/** Tool description for the LLM */
|
|
25
|
+
description: string;
|
|
26
|
+
/** Zod schema for parameters */
|
|
27
|
+
parameters: ZodSchema<TParams>;
|
|
28
|
+
/** Tool execution function */
|
|
29
|
+
execute: (params: TParams) => Promise<TResult>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Tool in OpenAI function calling format
|
|
33
|
+
*/
|
|
34
|
+
export interface OpenAITool {
|
|
35
|
+
type: 'function';
|
|
36
|
+
function: {
|
|
37
|
+
name: string;
|
|
38
|
+
description: string;
|
|
39
|
+
parameters: JsonSchema;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Tool in Anthropic format
|
|
44
|
+
*/
|
|
45
|
+
export interface AnthropicTool {
|
|
46
|
+
name: string;
|
|
47
|
+
description: string;
|
|
48
|
+
input_schema: JsonSchema;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Tool call from LLM response
|
|
52
|
+
*/
|
|
53
|
+
export interface ToolCall {
|
|
54
|
+
id: string;
|
|
55
|
+
name: string;
|
|
56
|
+
arguments: Record<string, unknown>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Tool execution result
|
|
60
|
+
*/
|
|
61
|
+
export interface ToolResult {
|
|
62
|
+
toolCallId: string;
|
|
63
|
+
name: string;
|
|
64
|
+
result: unknown;
|
|
65
|
+
error?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Convert Zod schema to JSON Schema
|
|
69
|
+
*/
|
|
70
|
+
export declare function zodToJsonSchema(schema: ZodSchema): JsonSchema;
|
|
71
|
+
/**
|
|
72
|
+
* Define a tool with type-safe parameters
|
|
73
|
+
*/
|
|
74
|
+
export declare function defineTool<TParams, TResult>(config: ToolDefinition<TParams, TResult>): ToolDefinition<TParams, TResult>;
|
|
75
|
+
/**
|
|
76
|
+
* Convert tool definition to OpenAI format
|
|
77
|
+
*/
|
|
78
|
+
export declare function toOpenAITool(tool: ToolDefinition): OpenAITool;
|
|
79
|
+
/**
|
|
80
|
+
* Convert tool definition to Anthropic format
|
|
81
|
+
*/
|
|
82
|
+
export declare function toAnthropicTool(tool: ToolDefinition): AnthropicTool;
|
|
83
|
+
/**
|
|
84
|
+
* Tool executor for handling tool calls
|
|
85
|
+
*/
|
|
86
|
+
export declare class ToolExecutor {
|
|
87
|
+
private tools;
|
|
88
|
+
/**
|
|
89
|
+
* Register a tool
|
|
90
|
+
*/
|
|
91
|
+
register<TParams, TResult>(tool: ToolDefinition<TParams, TResult>): void;
|
|
92
|
+
/**
|
|
93
|
+
* Register multiple tools
|
|
94
|
+
*/
|
|
95
|
+
registerAll(tools: ToolDefinition[]): void;
|
|
96
|
+
/**
|
|
97
|
+
* Get a tool by name
|
|
98
|
+
*/
|
|
99
|
+
get(name: string): ToolDefinition | undefined;
|
|
100
|
+
/**
|
|
101
|
+
* List all registered tools
|
|
102
|
+
*/
|
|
103
|
+
list(): ToolDefinition[];
|
|
104
|
+
/**
|
|
105
|
+
* Get tools in OpenAI format
|
|
106
|
+
*/
|
|
107
|
+
toOpenAI(): OpenAITool[];
|
|
108
|
+
/**
|
|
109
|
+
* Get tools in Anthropic format
|
|
110
|
+
*/
|
|
111
|
+
toAnthropic(): AnthropicTool[];
|
|
112
|
+
/**
|
|
113
|
+
* Execute a tool call
|
|
114
|
+
*/
|
|
115
|
+
execute(call: ToolCall): Promise<ToolResult>;
|
|
116
|
+
/**
|
|
117
|
+
* Execute multiple tool calls
|
|
118
|
+
*/
|
|
119
|
+
executeAll(calls: ToolCall[]): Promise<ToolResult[]>;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create a new tool executor
|
|
123
|
+
*/
|
|
124
|
+
export declare function createToolExecutor(tools?: ToolDefinition[]): ToolExecutor;
|
|
125
|
+
//# sourceMappingURL=tools.d.ts.map
|