@dexto/core 1.5.4 → 1.5.6

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 (102) hide show
  1. package/dist/agent/DextoAgent.cjs +61 -155
  2. package/dist/agent/DextoAgent.d.ts +11 -54
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +61 -155
  5. package/dist/context/compaction/strategies/reactive-overflow.cjs +5 -3
  6. package/dist/context/compaction/strategies/reactive-overflow.d.ts +1 -0
  7. package/dist/context/compaction/strategies/reactive-overflow.d.ts.map +1 -1
  8. package/dist/context/compaction/strategies/reactive-overflow.js +5 -3
  9. package/dist/context/compaction/types.d.ts +13 -1
  10. package/dist/context/compaction/types.d.ts.map +1 -1
  11. package/dist/errors/types.cjs +0 -2
  12. package/dist/errors/types.d.ts +1 -5
  13. package/dist/errors/types.d.ts.map +1 -1
  14. package/dist/errors/types.js +0 -2
  15. package/dist/events/index.cjs +0 -2
  16. package/dist/events/index.d.ts +6 -25
  17. package/dist/events/index.d.ts.map +1 -1
  18. package/dist/events/index.js +0 -2
  19. package/dist/llm/executor/stream-processor.cjs +85 -27
  20. package/dist/llm/executor/stream-processor.d.ts +4 -0
  21. package/dist/llm/executor/stream-processor.d.ts.map +1 -1
  22. package/dist/llm/executor/stream-processor.js +85 -27
  23. package/dist/llm/executor/turn-executor.cjs +58 -130
  24. package/dist/llm/executor/turn-executor.d.ts +9 -43
  25. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  26. package/dist/llm/executor/turn-executor.js +58 -130
  27. package/dist/llm/executor/types.d.ts +0 -28
  28. package/dist/llm/executor/types.d.ts.map +1 -1
  29. package/dist/llm/services/vercel.cjs +2 -5
  30. package/dist/llm/services/vercel.d.ts +1 -6
  31. package/dist/llm/services/vercel.d.ts.map +1 -1
  32. package/dist/llm/services/vercel.js +2 -5
  33. package/dist/logger/logger.cjs +6 -7
  34. package/dist/logger/logger.d.ts +1 -0
  35. package/dist/logger/logger.d.ts.map +1 -1
  36. package/dist/logger/logger.js +6 -7
  37. package/dist/session/chat-session.cjs +19 -12
  38. package/dist/session/chat-session.d.ts +3 -6
  39. package/dist/session/chat-session.d.ts.map +1 -1
  40. package/dist/session/chat-session.js +19 -12
  41. package/dist/session/session-manager.cjs +0 -135
  42. package/dist/session/session-manager.d.ts +0 -43
  43. package/dist/session/session-manager.d.ts.map +1 -1
  44. package/dist/session/session-manager.js +0 -135
  45. package/dist/telemetry/telemetry.cjs +12 -5
  46. package/dist/telemetry/telemetry.d.ts.map +1 -1
  47. package/dist/telemetry/telemetry.js +12 -5
  48. package/dist/tools/schemas.cjs +2 -2
  49. package/dist/tools/schemas.js +2 -2
  50. package/package.json +15 -5
  51. package/dist/filesystem/error-codes.cjs +0 -53
  52. package/dist/filesystem/error-codes.d.ts +0 -31
  53. package/dist/filesystem/error-codes.d.ts.map +0 -1
  54. package/dist/filesystem/error-codes.js +0 -30
  55. package/dist/filesystem/errors.cjs +0 -303
  56. package/dist/filesystem/errors.d.ts +0 -109
  57. package/dist/filesystem/errors.d.ts.map +0 -1
  58. package/dist/filesystem/errors.js +0 -280
  59. package/dist/filesystem/filesystem-service.cjs +0 -534
  60. package/dist/filesystem/filesystem-service.d.ts +0 -97
  61. package/dist/filesystem/filesystem-service.d.ts.map +0 -1
  62. package/dist/filesystem/filesystem-service.js +0 -501
  63. package/dist/filesystem/index.cjs +0 -37
  64. package/dist/filesystem/index.d.ts +0 -11
  65. package/dist/filesystem/index.d.ts.map +0 -1
  66. package/dist/filesystem/index.js +0 -11
  67. package/dist/filesystem/path-validator.cjs +0 -250
  68. package/dist/filesystem/path-validator.d.ts +0 -103
  69. package/dist/filesystem/path-validator.d.ts.map +0 -1
  70. package/dist/filesystem/path-validator.js +0 -217
  71. package/dist/filesystem/types.cjs +0 -16
  72. package/dist/filesystem/types.d.ts +0 -175
  73. package/dist/filesystem/types.d.ts.map +0 -1
  74. package/dist/filesystem/types.js +0 -0
  75. package/dist/process/command-validator.cjs +0 -554
  76. package/dist/process/command-validator.d.ts +0 -49
  77. package/dist/process/command-validator.d.ts.map +0 -1
  78. package/dist/process/command-validator.js +0 -531
  79. package/dist/process/error-codes.cjs +0 -47
  80. package/dist/process/error-codes.d.ts +0 -25
  81. package/dist/process/error-codes.d.ts.map +0 -1
  82. package/dist/process/error-codes.js +0 -24
  83. package/dist/process/errors.cjs +0 -244
  84. package/dist/process/errors.d.ts +0 -87
  85. package/dist/process/errors.d.ts.map +0 -1
  86. package/dist/process/errors.js +0 -221
  87. package/dist/process/index.cjs +0 -37
  88. package/dist/process/index.d.ts +0 -11
  89. package/dist/process/index.d.ts.map +0 -1
  90. package/dist/process/index.js +0 -11
  91. package/dist/process/process-service.cjs +0 -497
  92. package/dist/process/process-service.d.ts +0 -69
  93. package/dist/process/process-service.d.ts.map +0 -1
  94. package/dist/process/process-service.js +0 -464
  95. package/dist/process/types.cjs +0 -16
  96. package/dist/process/types.d.ts +0 -107
  97. package/dist/process/types.d.ts.map +0 -1
  98. package/dist/process/types.js +0 -0
  99. package/dist/session/compaction-service.cjs +0 -139
  100. package/dist/session/compaction-service.d.ts +0 -81
  101. package/dist/session/compaction-service.d.ts.map +0 -1
  102. package/dist/session/compaction-service.js +0 -106
@@ -212,15 +212,15 @@ class ChatSession {
212
212
  *
213
213
  * @param content - String or ContentPart[] (text, images, files)
214
214
  * @param options - { signal?: AbortSignal }
215
- * @returns Promise that resolves to object with text and compaction status
215
+ * @returns Promise that resolves to object with text response
216
216
  *
217
217
  * @example
218
218
  * ```typescript
219
219
  * // Text only
220
- * const { text, didCompact } = await session.stream('What is the weather?');
220
+ * const { text } = await session.stream('What is the weather?');
221
221
  *
222
222
  * // Multiple images
223
- * const { text, didCompact } = await session.stream([
223
+ * const { text } = await session.stream([
224
224
  * { type: 'text', text: 'Compare these images' },
225
225
  * { type: 'image', image: base64Data1, mimeType: 'image/png' },
226
226
  * { type: 'image', image: base64Data2, mimeType: 'image/png' }
@@ -298,10 +298,7 @@ class ChatSession {
298
298
  }
299
299
  );
300
300
  return {
301
- text: modifiedResponsePayload.content,
302
- didCompact: streamResult.didCompact,
303
- // Use spread to conditionally include compaction (exactOptionalPropertyTypes)
304
- ...streamResult.compaction && { compaction: streamResult.compaction }
301
+ text: modifiedResponsePayload.content
305
302
  };
306
303
  } catch (error) {
307
304
  const aborted = error instanceof Error && error.name === "AbortError" || typeof error === "object" && error !== null && error.aborted === true;
@@ -314,13 +311,23 @@ class ChatSession {
314
311
  try {
315
312
  const history = await this.getHistory();
316
313
  const lastAssistant = history.filter((m) => m.role === "assistant").pop();
317
- if (lastAssistant && typeof lastAssistant.content === "string") {
318
- return { text: lastAssistant.content, didCompact: false };
314
+ if (lastAssistant) {
315
+ if (typeof lastAssistant.content === "string") {
316
+ return { text: lastAssistant.content };
317
+ }
318
+ if (Array.isArray(lastAssistant.content)) {
319
+ const text = lastAssistant.content.filter(
320
+ (part) => part.type === "text"
321
+ ).map((part) => part.text).join("");
322
+ if (text) {
323
+ return { text };
324
+ }
325
+ }
319
326
  }
320
327
  } catch {
321
328
  this.logger.debug("Failed to retrieve partial response from history on cancel");
322
329
  }
323
- return { text: "", didCompact: false };
330
+ return { text: "" };
324
331
  }
325
332
  if (error instanceof import_errors.DextoRuntimeError && error.code === import_error_codes.PluginErrorCode.PLUGIN_BLOCKED_EXECUTION && error.scope === import_errors.ErrorScope.PLUGIN && error.type === import_errors.ErrorType.FORBIDDEN) {
326
333
  const textContent = parts.filter((p) => p.type === "text").map((p) => p.text).join("\n");
@@ -334,7 +341,7 @@ class ChatSession {
334
341
  `Failed to save blocked interaction to history: ${saveError instanceof Error ? saveError.message : String(saveError)}`
335
342
  );
336
343
  }
337
- return { text: error.message, didCompact: false };
344
+ return { text: error.message };
338
345
  }
339
346
  this.logger.error(
340
347
  `Error in ChatSession.stream: ${error instanceof Error ? error.message : String(error)}`
@@ -403,7 +410,7 @@ class ChatSession {
403
410
  * @see {@link ContextManager.resetConversation} for the underlying implementation
404
411
  */
405
412
  async reset() {
406
- await this.historyProvider.clearHistory();
413
+ await this.llmService.getContextManager().resetConversation();
407
414
  this.services.agentEventBus.emit("session:reset", {
408
415
  sessionId: this.id
409
416
  });
@@ -12,7 +12,6 @@ import type { IDextoLogger } from '../logger/v2/types.js';
12
12
  import type { InternalMessage } from '../context/types.js';
13
13
  import type { UserMessageInput } from './message-queue.js';
14
14
  import type { ContentInput } from '../agent/types.js';
15
- import type { CompactionData } from '../llm/executor/types.js';
16
15
  /**
17
16
  * Represents an isolated conversation session within a Dexto agent.
18
17
  *
@@ -163,15 +162,15 @@ export declare class ChatSession {
163
162
  *
164
163
  * @param content - String or ContentPart[] (text, images, files)
165
164
  * @param options - { signal?: AbortSignal }
166
- * @returns Promise that resolves to object with text and compaction status
165
+ * @returns Promise that resolves to object with text response
167
166
  *
168
167
  * @example
169
168
  * ```typescript
170
169
  * // Text only
171
- * const { text, didCompact } = await session.stream('What is the weather?');
170
+ * const { text } = await session.stream('What is the weather?');
172
171
  *
173
172
  * // Multiple images
174
- * const { text, didCompact } = await session.stream([
173
+ * const { text } = await session.stream([
175
174
  * { type: 'text', text: 'Compare these images' },
176
175
  * { type: 'image', image: base64Data1, mimeType: 'image/png' },
177
176
  * { type: 'image', image: base64Data2, mimeType: 'image/png' }
@@ -182,8 +181,6 @@ export declare class ChatSession {
182
181
  signal?: AbortSignal;
183
182
  }): Promise<{
184
183
  text: string;
185
- didCompact: boolean;
186
- compaction?: CompactionData;
187
184
  }>;
188
185
  /**
189
186
  * Combine multiple abort signals into one.
@@ -1 +1 @@
1
- {"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"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"}
@@ -193,15 +193,15 @@ class ChatSession {
193
193
  *
194
194
  * @param content - String or ContentPart[] (text, images, files)
195
195
  * @param options - { signal?: AbortSignal }
196
- * @returns Promise that resolves to object with text and compaction status
196
+ * @returns Promise that resolves to object with text response
197
197
  *
198
198
  * @example
199
199
  * ```typescript
200
200
  * // Text only
201
- * const { text, didCompact } = await session.stream('What is the weather?');
201
+ * const { text } = await session.stream('What is the weather?');
202
202
  *
203
203
  * // Multiple images
204
- * const { text, didCompact } = await session.stream([
204
+ * const { text } = await session.stream([
205
205
  * { type: 'text', text: 'Compare these images' },
206
206
  * { type: 'image', image: base64Data1, mimeType: 'image/png' },
207
207
  * { type: 'image', image: base64Data2, mimeType: 'image/png' }
@@ -279,10 +279,7 @@ class ChatSession {
279
279
  }
280
280
  );
281
281
  return {
282
- text: modifiedResponsePayload.content,
283
- didCompact: streamResult.didCompact,
284
- // Use spread to conditionally include compaction (exactOptionalPropertyTypes)
285
- ...streamResult.compaction && { compaction: streamResult.compaction }
282
+ text: modifiedResponsePayload.content
286
283
  };
287
284
  } catch (error) {
288
285
  const aborted = error instanceof Error && error.name === "AbortError" || typeof error === "object" && error !== null && error.aborted === true;
@@ -295,13 +292,23 @@ class ChatSession {
295
292
  try {
296
293
  const history = await this.getHistory();
297
294
  const lastAssistant = history.filter((m) => m.role === "assistant").pop();
298
- if (lastAssistant && typeof lastAssistant.content === "string") {
299
- return { text: lastAssistant.content, didCompact: false };
295
+ if (lastAssistant) {
296
+ if (typeof lastAssistant.content === "string") {
297
+ return { text: lastAssistant.content };
298
+ }
299
+ if (Array.isArray(lastAssistant.content)) {
300
+ const text = lastAssistant.content.filter(
301
+ (part) => part.type === "text"
302
+ ).map((part) => part.text).join("");
303
+ if (text) {
304
+ return { text };
305
+ }
306
+ }
300
307
  }
301
308
  } catch {
302
309
  this.logger.debug("Failed to retrieve partial response from history on cancel");
303
310
  }
304
- return { text: "", didCompact: false };
311
+ return { text: "" };
305
312
  }
306
313
  if (error instanceof DextoRuntimeError && error.code === PluginErrorCode.PLUGIN_BLOCKED_EXECUTION && error.scope === ErrorScope.PLUGIN && error.type === ErrorType.FORBIDDEN) {
307
314
  const textContent = parts.filter((p) => p.type === "text").map((p) => p.text).join("\n");
@@ -315,7 +322,7 @@ class ChatSession {
315
322
  `Failed to save blocked interaction to history: ${saveError instanceof Error ? saveError.message : String(saveError)}`
316
323
  );
317
324
  }
318
- return { text: error.message, didCompact: false };
325
+ return { text: error.message };
319
326
  }
320
327
  this.logger.error(
321
328
  `Error in ChatSession.stream: ${error instanceof Error ? error.message : String(error)}`
@@ -384,7 +391,7 @@ class ChatSession {
384
391
  * @see {@link ContextManager.resetConversation} for the underlying implementation
385
392
  */
386
393
  async reset() {
387
- await this.historyProvider.clearHistory();
394
+ await this.llmService.getContextManager().resetConversation();
388
395
  this.services.agentEventBus.emit("session:reset", {
389
396
  sessionId: this.id
390
397
  });
@@ -518,7 +518,6 @@ class SessionManager {
518
518
  }
519
519
  /**
520
520
  * Get the raw session data for a session ID.
521
- * This is used for accessing continuation fields and other metadata.
522
521
  *
523
522
  * @param sessionId The session ID
524
523
  * @returns Session data if found, undefined otherwise
@@ -528,140 +527,6 @@ class SessionManager {
528
527
  const sessionKey = `session:${sessionId}`;
529
528
  return await this.services.storageManager.getDatabase().get(sessionKey);
530
529
  }
531
- /**
532
- * Creates a continuation session from a compacted session.
533
- * The new session will have the summary as its first message.
534
- *
535
- * @param fromSessionId The session being compacted
536
- * @returns The new session ID and ChatSession
537
- */
538
- async createContinuationSession(fromSessionId) {
539
- await this.ensureInitialized();
540
- const fromSessionData = await this.getSessionData(fromSessionId);
541
- if (!fromSessionData) {
542
- throw import_errors.SessionError.notFound(fromSessionId);
543
- }
544
- const activeSessionKeys = await this.services.storageManager.getDatabase().list("session:");
545
- if (activeSessionKeys.length >= this.maxSessions) {
546
- throw import_errors.SessionError.maxSessionsExceeded(activeSessionKeys.length, this.maxSessions);
547
- }
548
- const newSessionId = (0, import_crypto.randomUUID)();
549
- const originalLLMConfig = this.services.stateManager.getRuntimeConfig(fromSessionId).llm;
550
- this.services.stateManager.updateLLM(originalLLMConfig, newSessionId);
551
- const parentCompactionCount = fromSessionData.compactionCount ?? 0;
552
- const newSessionData = {
553
- id: newSessionId,
554
- createdAt: Date.now(),
555
- lastActivity: Date.now(),
556
- messageCount: 0,
557
- continuedFrom: fromSessionId,
558
- compactionCount: parentCompactionCount + 1,
559
- ...fromSessionData.userId !== void 0 && { userId: fromSessionData.userId },
560
- ...fromSessionData.metadata && {
561
- metadata: {
562
- ...fromSessionData.metadata,
563
- title: fromSessionData.metadata?.title
564
- // Preserve title
565
- }
566
- }
567
- };
568
- const sessionKey = `session:${newSessionId}`;
569
- try {
570
- await this.services.storageManager.getDatabase().set(sessionKey, newSessionData);
571
- await this.services.storageManager.getCache().set(sessionKey, newSessionData, this.sessionTTL / 1e3);
572
- } catch (error) {
573
- this.services.stateManager.clearSessionOverride(newSessionId);
574
- throw error;
575
- }
576
- const session = new import_chat_session.ChatSession(
577
- { ...this.services, sessionManager: this },
578
- newSessionId,
579
- this.logger
580
- );
581
- try {
582
- await session.init();
583
- } catch (error) {
584
- session.dispose();
585
- await this.services.storageManager.getDatabase().delete(sessionKey);
586
- await this.services.storageManager.getCache().delete(sessionKey);
587
- this.services.stateManager.clearSessionOverride(newSessionId);
588
- throw error;
589
- }
590
- this.sessions.set(newSessionId, session);
591
- this.logger.info(
592
- `Created continuation session ${newSessionId} from compacted session ${fromSessionId}`
593
- );
594
- return { sessionId: newSessionId, session };
595
- }
596
- /**
597
- * Marks a session as compacted and links it to its continuation session.
598
- *
599
- * @param sessionId The session being compacted
600
- * @param continuedToId The new session created from compaction
601
- */
602
- async markSessionCompacted(sessionId, continuedToId) {
603
- await this.ensureInitialized();
604
- const sessionKey = `session:${sessionId}`;
605
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
606
- if (!sessionData) {
607
- throw import_errors.SessionError.notFound(sessionId);
608
- }
609
- sessionData.continuedTo = continuedToId;
610
- sessionData.compactedAt = Date.now();
611
- sessionData.lastActivity = Date.now();
612
- await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
613
- await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
614
- this.logger.debug(`Marked session ${sessionId} as compacted \u2192 ${continuedToId}`);
615
- }
616
- /**
617
- * Gets the compaction count for a session.
618
- * Returns 0 if the session has never been compacted.
619
- *
620
- * @param sessionId The session ID
621
- * @returns Number of times this session chain has been compacted
622
- */
623
- async getCompactionCount(sessionId) {
624
- const sessionData = await this.getSessionData(sessionId);
625
- return sessionData?.compactionCount ?? 0;
626
- }
627
- /**
628
- * Gets the chain of linked sessions (ancestors and descendants).
629
- * Returns sessions in chronological order (oldest first).
630
- *
631
- * @param sessionId Any session ID in the chain
632
- * @returns Array of session data in the chain, ordered chronologically
633
- */
634
- async getSessionChain(sessionId) {
635
- await this.ensureInitialized();
636
- const chain = [];
637
- const visited = /* @__PURE__ */ new Set();
638
- let currentData = await this.getSessionData(sessionId);
639
- if (!currentData) {
640
- return [];
641
- }
642
- while (currentData?.continuedFrom && !visited.has(currentData.continuedFrom)) {
643
- visited.add(currentData.id);
644
- const parent = await this.getSessionData(currentData.continuedFrom);
645
- if (!parent) {
646
- break;
647
- }
648
- currentData = parent;
649
- }
650
- if (currentData && !visited.has(currentData.id)) {
651
- visited.add(currentData.id);
652
- }
653
- visited.clear();
654
- while (currentData && !visited.has(currentData.id)) {
655
- visited.add(currentData.id);
656
- chain.push(currentData);
657
- if (currentData.continuedTo) {
658
- currentData = await this.getSessionData(currentData.continuedTo);
659
- } else {
660
- break;
661
- }
662
- }
663
- return chain;
664
- }
665
530
  /**
666
531
  * Cleanup all sessions and resources.
667
532
  * This should be called when shutting down the application.
@@ -34,14 +34,6 @@ export interface SessionData {
34
34
  metadata?: Record<string, any>;
35
35
  tokenUsage?: SessionTokenUsage;
36
36
  estimatedCost?: number;
37
- /** Parent session that was compacted to create this session */
38
- continuedFrom?: string;
39
- /** Child session created when this session was compacted */
40
- continuedTo?: string;
41
- /** Timestamp when this session was compacted (created a continuation) */
42
- compactedAt?: number;
43
- /** Number of times this session chain has been compacted (inherited + 1 on each compaction) */
44
- compactionCount?: number;
45
37
  }
46
38
  /**
47
39
  * Manages multiple chat sessions within a Dexto agent.
@@ -214,46 +206,11 @@ export declare class SessionManager {
214
206
  }>;
215
207
  /**
216
208
  * Get the raw session data for a session ID.
217
- * This is used for accessing continuation fields and other metadata.
218
209
  *
219
210
  * @param sessionId The session ID
220
211
  * @returns Session data if found, undefined otherwise
221
212
  */
222
213
  getSessionData(sessionId: string): Promise<SessionData | undefined>;
223
- /**
224
- * Creates a continuation session from a compacted session.
225
- * The new session will have the summary as its first message.
226
- *
227
- * @param fromSessionId The session being compacted
228
- * @returns The new session ID and ChatSession
229
- */
230
- createContinuationSession(fromSessionId: string): Promise<{
231
- sessionId: string;
232
- session: ChatSession;
233
- }>;
234
- /**
235
- * Marks a session as compacted and links it to its continuation session.
236
- *
237
- * @param sessionId The session being compacted
238
- * @param continuedToId The new session created from compaction
239
- */
240
- markSessionCompacted(sessionId: string, continuedToId: string): Promise<void>;
241
- /**
242
- * Gets the compaction count for a session.
243
- * Returns 0 if the session has never been compacted.
244
- *
245
- * @param sessionId The session ID
246
- * @returns Number of times this session chain has been compacted
247
- */
248
- getCompactionCount(sessionId: string): Promise<number>;
249
- /**
250
- * Gets the chain of linked sessions (ancestors and descendants).
251
- * Returns sessions in chronological order (oldest first).
252
- *
253
- * @param sessionId Any session ID in the chain
254
- * @returns Array of session data in the chain, ordered chronologically
255
- */
256
- getSessionChain(sessionId: string): Promise<SessionData[]>;
257
214
  /**
258
215
  * Cleanup all sessions and resources.
259
216
  * This should be called when shutting down the application.
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
@@ -496,7 +496,6 @@ class SessionManager {
496
496
  }
497
497
  /**
498
498
  * Get the raw session data for a session ID.
499
- * This is used for accessing continuation fields and other metadata.
500
499
  *
501
500
  * @param sessionId The session ID
502
501
  * @returns Session data if found, undefined otherwise
@@ -506,140 +505,6 @@ class SessionManager {
506
505
  const sessionKey = `session:${sessionId}`;
507
506
  return await this.services.storageManager.getDatabase().get(sessionKey);
508
507
  }
509
- /**
510
- * Creates a continuation session from a compacted session.
511
- * The new session will have the summary as its first message.
512
- *
513
- * @param fromSessionId The session being compacted
514
- * @returns The new session ID and ChatSession
515
- */
516
- async createContinuationSession(fromSessionId) {
517
- await this.ensureInitialized();
518
- const fromSessionData = await this.getSessionData(fromSessionId);
519
- if (!fromSessionData) {
520
- throw SessionError.notFound(fromSessionId);
521
- }
522
- const activeSessionKeys = await this.services.storageManager.getDatabase().list("session:");
523
- if (activeSessionKeys.length >= this.maxSessions) {
524
- throw SessionError.maxSessionsExceeded(activeSessionKeys.length, this.maxSessions);
525
- }
526
- const newSessionId = randomUUID();
527
- const originalLLMConfig = this.services.stateManager.getRuntimeConfig(fromSessionId).llm;
528
- this.services.stateManager.updateLLM(originalLLMConfig, newSessionId);
529
- const parentCompactionCount = fromSessionData.compactionCount ?? 0;
530
- const newSessionData = {
531
- id: newSessionId,
532
- createdAt: Date.now(),
533
- lastActivity: Date.now(),
534
- messageCount: 0,
535
- continuedFrom: fromSessionId,
536
- compactionCount: parentCompactionCount + 1,
537
- ...fromSessionData.userId !== void 0 && { userId: fromSessionData.userId },
538
- ...fromSessionData.metadata && {
539
- metadata: {
540
- ...fromSessionData.metadata,
541
- title: fromSessionData.metadata?.title
542
- // Preserve title
543
- }
544
- }
545
- };
546
- const sessionKey = `session:${newSessionId}`;
547
- try {
548
- await this.services.storageManager.getDatabase().set(sessionKey, newSessionData);
549
- await this.services.storageManager.getCache().set(sessionKey, newSessionData, this.sessionTTL / 1e3);
550
- } catch (error) {
551
- this.services.stateManager.clearSessionOverride(newSessionId);
552
- throw error;
553
- }
554
- const session = new ChatSession(
555
- { ...this.services, sessionManager: this },
556
- newSessionId,
557
- this.logger
558
- );
559
- try {
560
- await session.init();
561
- } catch (error) {
562
- session.dispose();
563
- await this.services.storageManager.getDatabase().delete(sessionKey);
564
- await this.services.storageManager.getCache().delete(sessionKey);
565
- this.services.stateManager.clearSessionOverride(newSessionId);
566
- throw error;
567
- }
568
- this.sessions.set(newSessionId, session);
569
- this.logger.info(
570
- `Created continuation session ${newSessionId} from compacted session ${fromSessionId}`
571
- );
572
- return { sessionId: newSessionId, session };
573
- }
574
- /**
575
- * Marks a session as compacted and links it to its continuation session.
576
- *
577
- * @param sessionId The session being compacted
578
- * @param continuedToId The new session created from compaction
579
- */
580
- async markSessionCompacted(sessionId, continuedToId) {
581
- await this.ensureInitialized();
582
- const sessionKey = `session:${sessionId}`;
583
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
584
- if (!sessionData) {
585
- throw SessionError.notFound(sessionId);
586
- }
587
- sessionData.continuedTo = continuedToId;
588
- sessionData.compactedAt = Date.now();
589
- sessionData.lastActivity = Date.now();
590
- await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
591
- await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
592
- this.logger.debug(`Marked session ${sessionId} as compacted \u2192 ${continuedToId}`);
593
- }
594
- /**
595
- * Gets the compaction count for a session.
596
- * Returns 0 if the session has never been compacted.
597
- *
598
- * @param sessionId The session ID
599
- * @returns Number of times this session chain has been compacted
600
- */
601
- async getCompactionCount(sessionId) {
602
- const sessionData = await this.getSessionData(sessionId);
603
- return sessionData?.compactionCount ?? 0;
604
- }
605
- /**
606
- * Gets the chain of linked sessions (ancestors and descendants).
607
- * Returns sessions in chronological order (oldest first).
608
- *
609
- * @param sessionId Any session ID in the chain
610
- * @returns Array of session data in the chain, ordered chronologically
611
- */
612
- async getSessionChain(sessionId) {
613
- await this.ensureInitialized();
614
- const chain = [];
615
- const visited = /* @__PURE__ */ new Set();
616
- let currentData = await this.getSessionData(sessionId);
617
- if (!currentData) {
618
- return [];
619
- }
620
- while (currentData?.continuedFrom && !visited.has(currentData.continuedFrom)) {
621
- visited.add(currentData.id);
622
- const parent = await this.getSessionData(currentData.continuedFrom);
623
- if (!parent) {
624
- break;
625
- }
626
- currentData = parent;
627
- }
628
- if (currentData && !visited.has(currentData.id)) {
629
- visited.add(currentData.id);
630
- }
631
- visited.clear();
632
- while (currentData && !visited.has(currentData.id)) {
633
- visited.add(currentData.id);
634
- chain.push(currentData);
635
- if (currentData.continuedTo) {
636
- currentData = await this.getSessionData(currentData.continuedTo);
637
- } else {
638
- break;
639
- }
640
- }
641
- return chain;
642
- }
643
508
  /**
644
509
  * Cleanup all sessions and resources.
645
510
  * This should be called when shutting down the application.
@@ -123,15 +123,18 @@ class Telemetry {
123
123
  if (enabled) {
124
124
  let NodeSDK;
125
125
  let Resource;
126
- let getNodeAutoInstrumentations;
126
+ let HttpInstrumentation;
127
+ let UndiciInstrumentation;
127
128
  let ATTR_SERVICE_NAME;
128
129
  try {
129
130
  const sdkModule = await import("@opentelemetry/sdk-node");
130
131
  NodeSDK = sdkModule.NodeSDK;
131
132
  const resourcesModule = await import("@opentelemetry/resources");
132
133
  Resource = resourcesModule.Resource;
133
- const autoInstModule = await import("@opentelemetry/auto-instrumentations-node");
134
- getNodeAutoInstrumentations = autoInstModule.getNodeAutoInstrumentations;
134
+ const httpInstModule = await import("@opentelemetry/instrumentation-http");
135
+ HttpInstrumentation = httpInstModule.HttpInstrumentation;
136
+ const undiciInstModule = await import("@opentelemetry/instrumentation-undici");
137
+ UndiciInstrumentation = undiciInstModule.UndiciInstrumentation;
135
138
  const semanticModule = await import("@opentelemetry/semantic-conventions");
136
139
  ATTR_SERVICE_NAME = semanticModule.ATTR_SERVICE_NAME;
137
140
  } catch (importError) {
@@ -139,7 +142,8 @@ class Telemetry {
139
142
  if (err.code === "ERR_MODULE_NOT_FOUND") {
140
143
  throw import_errors.TelemetryError.dependencyNotInstalled([
141
144
  "@opentelemetry/sdk-node",
142
- "@opentelemetry/auto-instrumentations-node",
145
+ "@opentelemetry/instrumentation-http",
146
+ "@opentelemetry/instrumentation-undici",
143
147
  "@opentelemetry/resources",
144
148
  "@opentelemetry/semantic-conventions",
145
149
  "@opentelemetry/sdk-trace-base",
@@ -158,7 +162,10 @@ class Telemetry {
158
162
  sdk = new NodeSDK({
159
163
  resource,
160
164
  traceExporter,
161
- instrumentations: [getNodeAutoInstrumentations()]
165
+ instrumentations: [
166
+ new HttpInstrumentation(),
167
+ new UndiciInstrumentation()
168
+ ]
162
169
  });
163
170
  await sdk.start();
164
171
  const sigterm = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/telemetry/telemetry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAYtD,OAAO,CAAC,MAAM,CAAC;IACX,IAAI,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACX,MAAM,EAAE,MAAM,CAA4B;IACjD,IAAI,EAAE,MAAM,CAAmB;IAC/B,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,IAAI,CAAC,CAA0B;IACvC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAiC;IAC7D,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAA0D;IAEzF,OAAO;mBAYc,kBAAkB;IA0DvC;;;;;OAKG;WACU,IAAI,CACb,MAAM,GAAE,iBAAsB,EAC9B,QAAQ,CAAC,EAAE,OAAO,+BAA+B,EAAE,YAAY,GAChE,OAAO,CAAC,SAAS,CAAC;IAgHrB,MAAM,CAAC,aAAa;IAKpB;;;;OAIG;IACH,MAAM,CAAC,GAAG,IAAI,SAAS;IAOvB;;;OAGG;IACH,MAAM,CAAC,iBAAiB,IAAI,OAAO;IAInC;;;;;OAKG;WACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5C;;;OAGG;IACI,aAAa,IAAI,OAAO;IAI/B,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,GAAE,OAA8B;IAc5F,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI;IAI/C;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUxC;;;;;;;;;OASG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CA8BzC"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/telemetry/telemetry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAYtD,OAAO,CAAC,MAAM,CAAC;IACX,IAAI,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACX,MAAM,EAAE,MAAM,CAA4B;IACjD,IAAI,EAAE,MAAM,CAAmB;IAC/B,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,IAAI,CAAC,CAA0B;IACvC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAiC;IAC7D,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAA0D;IAEzF,OAAO;mBAYc,kBAAkB;IA0DvC;;;;;OAKG;WACU,IAAI,CACb,MAAM,GAAE,iBAAsB,EAC9B,QAAQ,CAAC,EAAE,OAAO,+BAA+B,EAAE,YAAY,GAChE,OAAO,CAAC,SAAS,CAAC;IA8HrB,MAAM,CAAC,aAAa;IAKpB;;;;OAIG;IACH,MAAM,CAAC,GAAG,IAAI,SAAS;IAOvB;;;OAGG;IACH,MAAM,CAAC,iBAAiB,IAAI,OAAO;IAInC;;;;;OAKG;WACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5C;;;OAGG;IACI,aAAa,IAAI,OAAO;IAI/B,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,GAAE,OAA8B;IAc5F,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI;IAI/C;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUxC;;;;;;;;;OASG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CA8BzC"}