@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.
Files changed (46) hide show
  1. package/README.md +186 -0
  2. package/dist/conversation.d.ts +146 -0
  3. package/dist/conversation.d.ts.map +1 -0
  4. package/dist/conversation.js +239 -0
  5. package/dist/conversation.js.map +1 -0
  6. package/dist/events.d.ts +218 -0
  7. package/dist/events.d.ts.map +1 -0
  8. package/dist/events.js +299 -0
  9. package/dist/events.js.map +1 -0
  10. package/dist/executor.d.ts +144 -0
  11. package/dist/executor.d.ts.map +1 -0
  12. package/dist/executor.js +362 -0
  13. package/dist/executor.js.map +1 -0
  14. package/dist/index.d.ts +26 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +27 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/langchain.d.ts +210 -0
  19. package/dist/langchain.d.ts.map +1 -0
  20. package/dist/langchain.js +333 -0
  21. package/dist/langchain.js.map +1 -0
  22. package/dist/mcp.d.ts +208 -0
  23. package/dist/mcp.d.ts.map +1 -0
  24. package/dist/mcp.js +266 -0
  25. package/dist/mcp.js.map +1 -0
  26. package/dist/memory.d.ts +96 -0
  27. package/dist/memory.d.ts.map +1 -0
  28. package/dist/memory.js +248 -0
  29. package/dist/memory.js.map +1 -0
  30. package/dist/oauth.d.ts +158 -0
  31. package/dist/oauth.d.ts.map +1 -0
  32. package/dist/oauth.js +344 -0
  33. package/dist/oauth.js.map +1 -0
  34. package/dist/output.d.ts +262 -0
  35. package/dist/output.d.ts.map +1 -0
  36. package/dist/output.js +249 -0
  37. package/dist/output.js.map +1 -0
  38. package/dist/session.d.ts +212 -0
  39. package/dist/session.d.ts.map +1 -0
  40. package/dist/session.js +347 -0
  41. package/dist/session.js.map +1 -0
  42. package/dist/tools.d.ts +125 -0
  43. package/dist/tools.d.ts.map +1 -0
  44. package/dist/tools.js +195 -0
  45. package/dist/tools.js.map +1 -0
  46. 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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"}
@@ -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":"AAAA;;;GAGG;AAwFH;;GAEG;AACH,MAAM,OAAO,sBAAsB;IACzB,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEnD,KAAK,CAAC,IAAI,CAAC,OAAqB;QAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED;;GAEG;AACH,SAAS,iBAAiB;IACxB,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,WAAW;IACd,KAAK,CAAe;IACpB,OAAO,CAAiB;IACxB,aAAa,GAA0B,EAAE,CAAC;IAC1C,aAAa,CAAkC;IAC/C,eAAe,CAAiC;IAExD,YACE,SAAwB,EAAE,EAC1B,OAAwB,EACxB,aAA4B;QAE5B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,sBAAsB,EAAE,CAAC;QAEvD,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG;gBACX,EAAE,EAAE,iBAAiB,EAAE;gBACvB,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,GAAG;gBACd,cAAc,EAAE,GAAG;gBACnB,MAAM;gBACN,OAAO,EAAE,EAAE;gBACX,YAAY,EAAE,CAAC;gBACf,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;aAC9C,CAAC;YAEF,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,WAAW;QACjB,kBAAkB;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACzC,IAAI,CAAC,aAAa,GAAG,WAAW,CAC9B,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EACjB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CACrC,CAAC;QACJ,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACzB,MAAM,eAAe,GACnB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9C,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,GAAG,UAAU,CAC/B,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EACnB,eAAe,CAChB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,IAAsB,EAAE,IAAc;QACvD,MAAM,KAAK,GAAiB;YAC1B,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;YACxB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,IAAI;SACL,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvC,yBAAyB;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,CAC7B,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CACzC,CAAC;YACF,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,GAAW,EAAE,KAAc;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,UAAU,CAAI,GAAW;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAkB,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,cAAsB,CAAC,EAAE,eAAuB,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,WAAW,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,YAAY,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,WAAW,GAAG,YAAY,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;YACrC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;SAClC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,EAAE,CAAC,OAA4B;QAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IACjB,OAAO,CAAiB;IACxB,cAAc,GAAG,IAAI,GAAG,EAAuB,CAAC;IAChD,aAAa,CAAgB;IAErC,YACE,OAAwB,EACxB,gBAA+B,EAAE;QAEjC,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,sBAAsB,EAAE,CAAC;QACvD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,MAAsB,EACtB,MAAe;QAEf,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,MAAM,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5D,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAE7C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,qBAAqB;QACrB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;QAC7C,CAAC;QAED,oBAAoB;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,MAAsB;QACtD,+BAA+B;QAC/B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QAEtE,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAyB,CAAC;QAC7D,CAAC;QAED,qBAAqB;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACvD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC1C,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC/C,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;gBACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC1C,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;oBACvB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAwB,EACxB,aAA6B;IAE7B,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAsB,EACtB,OAAwB;IAExB,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC"}
@@ -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