@dexto/core 1.5.2 → 1.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/DextoAgent.cjs +296 -2
- package/dist/agent/DextoAgent.d.ts +114 -0
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +287 -2
- package/dist/agent/schemas.d.ts +93 -21
- package/dist/agent/schemas.d.ts.map +1 -1
- package/dist/approval/manager.cjs +16 -0
- package/dist/approval/manager.d.ts +10 -0
- package/dist/approval/manager.d.ts.map +1 -1
- package/dist/approval/manager.js +16 -0
- package/dist/approval/types.d.ts +11 -0
- package/dist/approval/types.d.ts.map +1 -1
- package/dist/context/compaction/overflow.cjs +6 -10
- package/dist/context/compaction/overflow.d.ts +14 -11
- package/dist/context/compaction/overflow.d.ts.map +1 -1
- package/dist/context/compaction/overflow.js +6 -10
- package/dist/context/compaction/providers/reactive-overflow-provider.cjs +15 -0
- package/dist/context/compaction/providers/reactive-overflow-provider.d.ts +15 -0
- package/dist/context/compaction/providers/reactive-overflow-provider.d.ts.map +1 -1
- package/dist/context/compaction/providers/reactive-overflow-provider.js +15 -0
- package/dist/context/compaction/schemas.cjs +22 -2
- package/dist/context/compaction/schemas.d.ts +45 -0
- package/dist/context/compaction/schemas.d.ts.map +1 -1
- package/dist/context/compaction/schemas.js +22 -2
- package/dist/context/compaction/strategies/reactive-overflow.cjs +166 -26
- package/dist/context/compaction/strategies/reactive-overflow.d.ts +21 -0
- package/dist/context/compaction/strategies/reactive-overflow.d.ts.map +1 -1
- package/dist/context/compaction/strategies/reactive-overflow.js +166 -26
- package/dist/context/manager.cjs +278 -31
- package/dist/context/manager.d.ts +192 -5
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +285 -32
- package/dist/context/types.d.ts +6 -0
- package/dist/context/types.d.ts.map +1 -1
- package/dist/context/utils.cjs +77 -11
- package/dist/context/utils.d.ts +86 -8
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +71 -11
- package/dist/events/index.cjs +7 -1
- package/dist/events/index.d.ts +58 -7
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +7 -1
- package/dist/filesystem/filesystem-service.cjs +18 -15
- package/dist/filesystem/filesystem-service.d.ts +3 -3
- package/dist/filesystem/filesystem-service.d.ts.map +1 -1
- package/dist/filesystem/filesystem-service.js +18 -15
- package/dist/filesystem/path-validator.cjs +16 -7
- package/dist/filesystem/path-validator.d.ts +10 -3
- package/dist/filesystem/path-validator.d.ts.map +1 -1
- package/dist/filesystem/path-validator.js +16 -7
- package/dist/filesystem/types.d.ts +4 -0
- package/dist/filesystem/types.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.cjs +19 -1
- package/dist/llm/executor/stream-processor.d.ts +3 -0
- package/dist/llm/executor/stream-processor.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.js +19 -1
- package/dist/llm/executor/turn-executor.cjs +219 -30
- package/dist/llm/executor/turn-executor.d.ts +62 -10
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +219 -30
- package/dist/llm/executor/types.d.ts +28 -0
- package/dist/llm/executor/types.d.ts.map +1 -1
- package/dist/llm/formatters/vercel.cjs +36 -28
- package/dist/llm/formatters/vercel.d.ts.map +1 -1
- package/dist/llm/formatters/vercel.js +36 -28
- package/dist/llm/services/factory.cjs +3 -2
- package/dist/llm/services/factory.d.ts +3 -1
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +3 -2
- package/dist/llm/services/vercel.cjs +34 -6
- package/dist/llm/services/vercel.d.ts +23 -3
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +34 -6
- package/dist/logger/v2/schemas.cjs +4 -0
- package/dist/logger/v2/schemas.d.ts +16 -0
- package/dist/logger/v2/schemas.d.ts.map +1 -1
- package/dist/logger/v2/schemas.js +4 -0
- package/dist/logger/v2/transport-factory.cjs +4 -1
- package/dist/logger/v2/transport-factory.d.ts.map +1 -1
- package/dist/logger/v2/transport-factory.js +4 -1
- package/dist/logger/v2/transports/silent-transport.cjs +33 -0
- package/dist/logger/v2/transports/silent-transport.d.ts +15 -0
- package/dist/logger/v2/transports/silent-transport.d.ts.map +1 -0
- package/dist/logger/v2/transports/silent-transport.js +10 -0
- package/dist/session/chat-session.cjs +20 -11
- package/dist/session/chat-session.d.ts +9 -4
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +20 -11
- package/dist/session/compaction-service.cjs +139 -0
- package/dist/session/compaction-service.d.ts +81 -0
- package/dist/session/compaction-service.d.ts.map +1 -0
- package/dist/session/compaction-service.js +106 -0
- package/dist/session/session-manager.cjs +146 -0
- package/dist/session/session-manager.d.ts +50 -0
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +146 -0
- package/dist/session/title-generator.cjs +2 -2
- package/dist/session/title-generator.js +2 -2
- package/dist/systemPrompt/in-built-prompts.cjs +36 -0
- package/dist/systemPrompt/in-built-prompts.d.ts +18 -1
- package/dist/systemPrompt/in-built-prompts.d.ts.map +1 -1
- package/dist/systemPrompt/in-built-prompts.js +25 -0
- package/dist/systemPrompt/manager.cjs +22 -0
- package/dist/systemPrompt/manager.d.ts +10 -0
- package/dist/systemPrompt/manager.d.ts.map +1 -1
- package/dist/systemPrompt/manager.js +22 -0
- package/dist/systemPrompt/registry.cjs +2 -1
- package/dist/systemPrompt/registry.d.ts +1 -1
- package/dist/systemPrompt/registry.d.ts.map +1 -1
- package/dist/systemPrompt/registry.js +2 -1
- package/dist/systemPrompt/schemas.cjs +7 -0
- package/dist/systemPrompt/schemas.d.ts +13 -13
- package/dist/systemPrompt/schemas.d.ts.map +1 -1
- package/dist/systemPrompt/schemas.js +7 -0
- package/dist/tools/error-codes.cjs +1 -0
- package/dist/tools/error-codes.d.ts +1 -0
- package/dist/tools/error-codes.d.ts.map +1 -1
- package/dist/tools/error-codes.js +1 -0
- package/dist/tools/errors.cjs +17 -0
- package/dist/tools/errors.d.ts +9 -0
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +17 -0
- package/dist/tools/internal-tools/provider.cjs +3 -2
- package/dist/tools/internal-tools/provider.d.ts +1 -1
- package/dist/tools/internal-tools/provider.d.ts.map +1 -1
- package/dist/tools/internal-tools/provider.js +3 -2
- package/dist/tools/tool-manager.cjs +77 -4
- package/dist/tools/tool-manager.d.ts +18 -0
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +78 -5
- package/dist/tools/types.d.ts +5 -3
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/index.cjs +3 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/package.json +1 -1
|
@@ -150,8 +150,10 @@ class ChatSession {
|
|
|
150
150
|
// Pass ResourceManager for blob storage
|
|
151
151
|
this.logger,
|
|
152
152
|
// Pass logger for dependency injection
|
|
153
|
-
compactionStrategy
|
|
153
|
+
compactionStrategy,
|
|
154
154
|
// Pass compaction strategy
|
|
155
|
+
runtimeConfig.compaction
|
|
156
|
+
// Pass compaction config for threshold settings
|
|
155
157
|
);
|
|
156
158
|
this.logger.debug(`ChatSession ${this.id}: Services initialized with storage`);
|
|
157
159
|
}
|
|
@@ -191,15 +193,15 @@ class ChatSession {
|
|
|
191
193
|
*
|
|
192
194
|
* @param content - String or ContentPart[] (text, images, files)
|
|
193
195
|
* @param options - { signal?: AbortSignal }
|
|
194
|
-
* @returns Promise that resolves to
|
|
196
|
+
* @returns Promise that resolves to object with text and compaction status
|
|
195
197
|
*
|
|
196
198
|
* @example
|
|
197
199
|
* ```typescript
|
|
198
200
|
* // Text only
|
|
199
|
-
* const
|
|
201
|
+
* const { text, didCompact } = await session.stream('What is the weather?');
|
|
200
202
|
*
|
|
201
203
|
* // Multiple images
|
|
202
|
-
* const
|
|
204
|
+
* const { text, didCompact } = await session.stream([
|
|
203
205
|
* { type: 'text', text: 'Compare these images' },
|
|
204
206
|
* { type: 'image', image: base64Data1, mimeType: 'image/png' },
|
|
205
207
|
* { type: 'image', image: base64Data2, mimeType: 'image/png' }
|
|
@@ -256,10 +258,10 @@ class ChatSession {
|
|
|
256
258
|
modifiedParts = modifiedParts.filter((p) => p.type !== "text");
|
|
257
259
|
modifiedParts.unshift({ type: "text", text: modifiedBeforePayload.text });
|
|
258
260
|
}
|
|
259
|
-
const
|
|
261
|
+
const streamResult = await this.llmService.stream(modifiedParts, { signal });
|
|
260
262
|
const llmConfig = this.services.stateManager.getLLMConfig(this.id);
|
|
261
263
|
const beforeResponsePayload = {
|
|
262
|
-
content:
|
|
264
|
+
content: streamResult.text,
|
|
263
265
|
provider: llmConfig.provider,
|
|
264
266
|
model: llmConfig.model,
|
|
265
267
|
sessionId: this.id
|
|
@@ -276,7 +278,12 @@ class ChatSession {
|
|
|
276
278
|
abortSignal: signal
|
|
277
279
|
}
|
|
278
280
|
);
|
|
279
|
-
return
|
|
281
|
+
return {
|
|
282
|
+
text: modifiedResponsePayload.content,
|
|
283
|
+
didCompact: streamResult.didCompact,
|
|
284
|
+
// Use spread to conditionally include compaction (exactOptionalPropertyTypes)
|
|
285
|
+
...streamResult.compaction && { compaction: streamResult.compaction }
|
|
286
|
+
};
|
|
280
287
|
} catch (error) {
|
|
281
288
|
const aborted = error instanceof Error && error.name === "AbortError" || typeof error === "object" && error !== null && error.aborted === true;
|
|
282
289
|
if (aborted) {
|
|
@@ -289,12 +296,12 @@ class ChatSession {
|
|
|
289
296
|
const history = await this.getHistory();
|
|
290
297
|
const lastAssistant = history.filter((m) => m.role === "assistant").pop();
|
|
291
298
|
if (lastAssistant && typeof lastAssistant.content === "string") {
|
|
292
|
-
return lastAssistant.content;
|
|
299
|
+
return { text: lastAssistant.content, didCompact: false };
|
|
293
300
|
}
|
|
294
301
|
} catch {
|
|
295
302
|
this.logger.debug("Failed to retrieve partial response from history on cancel");
|
|
296
303
|
}
|
|
297
|
-
return "";
|
|
304
|
+
return { text: "", didCompact: false };
|
|
298
305
|
}
|
|
299
306
|
if (error instanceof DextoRuntimeError && error.code === PluginErrorCode.PLUGIN_BLOCKED_EXECUTION && error.scope === ErrorScope.PLUGIN && error.type === ErrorType.FORBIDDEN) {
|
|
300
307
|
const textContent = parts.filter((p) => p.type === "text").map((p) => p.text).join("\n");
|
|
@@ -308,7 +315,7 @@ class ChatSession {
|
|
|
308
315
|
`Failed to save blocked interaction to history: ${saveError instanceof Error ? saveError.message : String(saveError)}`
|
|
309
316
|
);
|
|
310
317
|
}
|
|
311
|
-
return error.message;
|
|
318
|
+
return { text: error.message, didCompact: false };
|
|
312
319
|
}
|
|
313
320
|
this.logger.error(
|
|
314
321
|
`Error in ChatSession.stream: ${error instanceof Error ? error.message : String(error)}`
|
|
@@ -436,8 +443,10 @@ class ChatSession {
|
|
|
436
443
|
this.id,
|
|
437
444
|
this.services.resourceManager,
|
|
438
445
|
this.logger,
|
|
439
|
-
compactionStrategy
|
|
446
|
+
compactionStrategy,
|
|
440
447
|
// Pass compaction strategy
|
|
448
|
+
runtimeConfig.compaction
|
|
449
|
+
// Pass compaction config for threshold settings
|
|
441
450
|
);
|
|
442
451
|
this.llmService = newLLMService;
|
|
443
452
|
this.logger.info(
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var compaction_service_exports = {};
|
|
30
|
+
__export(compaction_service_exports, {
|
|
31
|
+
SessionCompactionService: () => SessionCompactionService
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(compaction_service_exports);
|
|
34
|
+
var import_types = require("../logger/v2/types.js");
|
|
35
|
+
var import_utils = require("../context/utils.js");
|
|
36
|
+
class SessionCompactionService {
|
|
37
|
+
constructor(sessionManager, compactionStrategy, logger) {
|
|
38
|
+
this.sessionManager = sessionManager;
|
|
39
|
+
this.compactionStrategy = compactionStrategy;
|
|
40
|
+
this.logger = logger.createChild(import_types.DextoLogComponent.SESSION);
|
|
41
|
+
}
|
|
42
|
+
logger;
|
|
43
|
+
/**
|
|
44
|
+
* Perform session-native compaction.
|
|
45
|
+
*
|
|
46
|
+
* This creates a new continuation session with the summary as initial context,
|
|
47
|
+
* then marks the old session as compacted.
|
|
48
|
+
*
|
|
49
|
+
* @param currentSession The session to compact
|
|
50
|
+
* @param options Compaction options
|
|
51
|
+
* @returns CompactionResult with new session, or null if compaction not needed/possible
|
|
52
|
+
*/
|
|
53
|
+
async compact(currentSession, options) {
|
|
54
|
+
const { reason, eventBus } = options;
|
|
55
|
+
const currentSessionId = currentSession.id;
|
|
56
|
+
this.logger.info(
|
|
57
|
+
`SessionCompactionService: Starting compaction for session ${currentSessionId} (reason: ${reason})`
|
|
58
|
+
);
|
|
59
|
+
const history = await currentSession.getHistory();
|
|
60
|
+
if (history.length <= 2) {
|
|
61
|
+
this.logger.debug("SessionCompactionService: History too short for compaction");
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const summaryMessages = await this.compactionStrategy.compact(history);
|
|
65
|
+
if (summaryMessages.length === 0) {
|
|
66
|
+
this.logger.debug("SessionCompactionService: Strategy returned no summary");
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const strategySummary = summaryMessages[0];
|
|
70
|
+
if (!strategySummary || !strategySummary.content) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const summaryText = this.extractTextContent(strategySummary.content);
|
|
74
|
+
if (!summaryText.trim()) {
|
|
75
|
+
this.logger.debug("SessionCompactionService: Empty summary text; skipping compaction");
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
const summaryMessage = {
|
|
79
|
+
role: "assistant",
|
|
80
|
+
content: [{ type: "text", text: summaryText }],
|
|
81
|
+
timestamp: Date.now(),
|
|
82
|
+
metadata: {
|
|
83
|
+
isSessionSummary: true,
|
|
84
|
+
// New marker for session-native compaction
|
|
85
|
+
continuedFrom: currentSessionId,
|
|
86
|
+
summarizedAt: Date.now(),
|
|
87
|
+
originalMessageCount: history.length,
|
|
88
|
+
originalFirstTimestamp: history[0]?.timestamp,
|
|
89
|
+
originalLastTimestamp: history[history.length - 1]?.timestamp
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const summaryTokens = (0, import_utils.estimateMessagesTokens)([summaryMessage]);
|
|
93
|
+
const { sessionId: newSessionId, session: newSession } = await this.sessionManager.createContinuationSession(currentSessionId);
|
|
94
|
+
const contextManager = newSession.getContextManager();
|
|
95
|
+
await contextManager.addMessage(summaryMessage);
|
|
96
|
+
await this.sessionManager.markSessionCompacted(currentSessionId, newSessionId);
|
|
97
|
+
this.logger.info(
|
|
98
|
+
`SessionCompactionService: Compaction complete. ${currentSessionId} \u2192 ${newSessionId}, ${history.length} messages \u2192 summary (~${summaryTokens} tokens)`
|
|
99
|
+
);
|
|
100
|
+
if (eventBus) {
|
|
101
|
+
const llmConfig = newSession.getLLMService().getConfig();
|
|
102
|
+
const modelId = typeof llmConfig.model === "string" ? llmConfig.model : llmConfig.model.modelId;
|
|
103
|
+
const { getModelDisplayName } = await import("../llm/registry.js");
|
|
104
|
+
const modelDisplayName = getModelDisplayName(modelId, llmConfig.provider);
|
|
105
|
+
eventBus.emit("session:continued", {
|
|
106
|
+
previousSessionId: currentSessionId,
|
|
107
|
+
newSessionId,
|
|
108
|
+
summaryTokens,
|
|
109
|
+
originalMessages: history.length,
|
|
110
|
+
reason,
|
|
111
|
+
sessionId: newSessionId,
|
|
112
|
+
// For consistency with other streaming events
|
|
113
|
+
model: modelId,
|
|
114
|
+
modelDisplayName
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
previousSessionId: currentSessionId,
|
|
119
|
+
newSessionId,
|
|
120
|
+
newSession,
|
|
121
|
+
summary: summaryMessage,
|
|
122
|
+
summaryTokens,
|
|
123
|
+
originalMessages: history.length
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Extract text content from message content.
|
|
128
|
+
*/
|
|
129
|
+
extractTextContent(content) {
|
|
130
|
+
if (typeof content === "string") {
|
|
131
|
+
return content;
|
|
132
|
+
}
|
|
133
|
+
return content.filter((part) => part.type === "text").map((part) => part.text).join("\n");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
137
|
+
0 && (module.exports = {
|
|
138
|
+
SessionCompactionService
|
|
139
|
+
});
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Compaction Service
|
|
3
|
+
*
|
|
4
|
+
* Handles session-native compaction where compacting a session creates a new
|
|
5
|
+
* continuation session with the summary as initial context. This provides
|
|
6
|
+
* clean session isolation with linking for traceability.
|
|
7
|
+
*
|
|
8
|
+
* ## Architecture
|
|
9
|
+
*
|
|
10
|
+
* Session A (compacted) --continuedTo--> Session B (active)
|
|
11
|
+
* ^ |
|
|
12
|
+
* +--------continuedFrom-----------------+
|
|
13
|
+
*
|
|
14
|
+
* When compaction triggers:
|
|
15
|
+
* 1. Generate summary of old messages via compaction strategy
|
|
16
|
+
* 2. Create new session with summary as first message (isSessionSummary marker)
|
|
17
|
+
* 3. Mark old session as compacted (continuedTo, compactedAt)
|
|
18
|
+
* 4. Emit session:continued event
|
|
19
|
+
* 5. Return new session for caller to switch to
|
|
20
|
+
*/
|
|
21
|
+
import type { ICompactionStrategy } from '../context/compaction/types.js';
|
|
22
|
+
import type { IDextoLogger } from '../logger/v2/types.js';
|
|
23
|
+
import type { SessionManager } from './session-manager.js';
|
|
24
|
+
import type { ChatSession } from './chat-session.js';
|
|
25
|
+
import type { InternalMessage } from '../context/types.js';
|
|
26
|
+
import type { AgentEventBus } from '../events/index.js';
|
|
27
|
+
/**
|
|
28
|
+
* Result returned when compaction creates a new continuation session.
|
|
29
|
+
*/
|
|
30
|
+
export interface CompactionResult {
|
|
31
|
+
/** The session that was compacted */
|
|
32
|
+
previousSessionId: string;
|
|
33
|
+
/** The new session created for continuation */
|
|
34
|
+
newSessionId: string;
|
|
35
|
+
/** The ChatSession instance for the new session */
|
|
36
|
+
newSession: ChatSession;
|
|
37
|
+
/** The summary message added to the new session */
|
|
38
|
+
summary: InternalMessage;
|
|
39
|
+
/** Estimated tokens in the summary */
|
|
40
|
+
summaryTokens: number;
|
|
41
|
+
/** Number of messages that were summarized */
|
|
42
|
+
originalMessages: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Options for performing compaction.
|
|
46
|
+
*/
|
|
47
|
+
export interface CompactOptions {
|
|
48
|
+
/** Why the compaction was triggered */
|
|
49
|
+
reason: 'overflow' | 'manual';
|
|
50
|
+
/** Optional AgentEventBus to emit session:continued event */
|
|
51
|
+
eventBus?: AgentEventBus;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Service for performing session-native compaction.
|
|
55
|
+
*
|
|
56
|
+
* Instead of adding a summary message to the same session and filtering at read-time,
|
|
57
|
+
* this service creates a new session with the summary as the first message.
|
|
58
|
+
* This provides cleaner session isolation while maintaining traceability via linking.
|
|
59
|
+
*/
|
|
60
|
+
export declare class SessionCompactionService {
|
|
61
|
+
private readonly sessionManager;
|
|
62
|
+
private readonly compactionStrategy;
|
|
63
|
+
private readonly logger;
|
|
64
|
+
constructor(sessionManager: SessionManager, compactionStrategy: ICompactionStrategy, logger: IDextoLogger);
|
|
65
|
+
/**
|
|
66
|
+
* Perform session-native compaction.
|
|
67
|
+
*
|
|
68
|
+
* This creates a new continuation session with the summary as initial context,
|
|
69
|
+
* then marks the old session as compacted.
|
|
70
|
+
*
|
|
71
|
+
* @param currentSession The session to compact
|
|
72
|
+
* @param options Compaction options
|
|
73
|
+
* @returns CompactionResult with new session, or null if compaction not needed/possible
|
|
74
|
+
*/
|
|
75
|
+
compact(currentSession: ChatSession, options: CompactOptions): Promise<CompactionResult | null>;
|
|
76
|
+
/**
|
|
77
|
+
* Extract text content from message content.
|
|
78
|
+
*/
|
|
79
|
+
private extractTextContent;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=compaction-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-service.d.ts","sourceRoot":"","sources":["../../src/session/compaction-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,qCAAqC;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,UAAU,EAAE,WAAW,CAAC;IACxB,mDAAmD;IACnD,OAAO,EAAE,eAAe,CAAC;IACzB,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,uCAAuC;IACvC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,qBAAa,wBAAwB;IAI7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAJvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAGjB,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,mBAAmB,EACxD,MAAM,EAAE,YAAY;IAKxB;;;;;;;;;OASG;IACG,OAAO,CACT,cAAc,EAAE,WAAW,EAC3B,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IA6GnC;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAS7B"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import "../chunk-PTJYTZNU.js";
|
|
2
|
+
import { DextoLogComponent } from "../logger/v2/types.js";
|
|
3
|
+
import { estimateMessagesTokens } from "../context/utils.js";
|
|
4
|
+
class SessionCompactionService {
|
|
5
|
+
constructor(sessionManager, compactionStrategy, logger) {
|
|
6
|
+
this.sessionManager = sessionManager;
|
|
7
|
+
this.compactionStrategy = compactionStrategy;
|
|
8
|
+
this.logger = logger.createChild(DextoLogComponent.SESSION);
|
|
9
|
+
}
|
|
10
|
+
logger;
|
|
11
|
+
/**
|
|
12
|
+
* Perform session-native compaction.
|
|
13
|
+
*
|
|
14
|
+
* This creates a new continuation session with the summary as initial context,
|
|
15
|
+
* then marks the old session as compacted.
|
|
16
|
+
*
|
|
17
|
+
* @param currentSession The session to compact
|
|
18
|
+
* @param options Compaction options
|
|
19
|
+
* @returns CompactionResult with new session, or null if compaction not needed/possible
|
|
20
|
+
*/
|
|
21
|
+
async compact(currentSession, options) {
|
|
22
|
+
const { reason, eventBus } = options;
|
|
23
|
+
const currentSessionId = currentSession.id;
|
|
24
|
+
this.logger.info(
|
|
25
|
+
`SessionCompactionService: Starting compaction for session ${currentSessionId} (reason: ${reason})`
|
|
26
|
+
);
|
|
27
|
+
const history = await currentSession.getHistory();
|
|
28
|
+
if (history.length <= 2) {
|
|
29
|
+
this.logger.debug("SessionCompactionService: History too short for compaction");
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const summaryMessages = await this.compactionStrategy.compact(history);
|
|
33
|
+
if (summaryMessages.length === 0) {
|
|
34
|
+
this.logger.debug("SessionCompactionService: Strategy returned no summary");
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const strategySummary = summaryMessages[0];
|
|
38
|
+
if (!strategySummary || !strategySummary.content) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
const summaryText = this.extractTextContent(strategySummary.content);
|
|
42
|
+
if (!summaryText.trim()) {
|
|
43
|
+
this.logger.debug("SessionCompactionService: Empty summary text; skipping compaction");
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const summaryMessage = {
|
|
47
|
+
role: "assistant",
|
|
48
|
+
content: [{ type: "text", text: summaryText }],
|
|
49
|
+
timestamp: Date.now(),
|
|
50
|
+
metadata: {
|
|
51
|
+
isSessionSummary: true,
|
|
52
|
+
// New marker for session-native compaction
|
|
53
|
+
continuedFrom: currentSessionId,
|
|
54
|
+
summarizedAt: Date.now(),
|
|
55
|
+
originalMessageCount: history.length,
|
|
56
|
+
originalFirstTimestamp: history[0]?.timestamp,
|
|
57
|
+
originalLastTimestamp: history[history.length - 1]?.timestamp
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const summaryTokens = estimateMessagesTokens([summaryMessage]);
|
|
61
|
+
const { sessionId: newSessionId, session: newSession } = await this.sessionManager.createContinuationSession(currentSessionId);
|
|
62
|
+
const contextManager = newSession.getContextManager();
|
|
63
|
+
await contextManager.addMessage(summaryMessage);
|
|
64
|
+
await this.sessionManager.markSessionCompacted(currentSessionId, newSessionId);
|
|
65
|
+
this.logger.info(
|
|
66
|
+
`SessionCompactionService: Compaction complete. ${currentSessionId} \u2192 ${newSessionId}, ${history.length} messages \u2192 summary (~${summaryTokens} tokens)`
|
|
67
|
+
);
|
|
68
|
+
if (eventBus) {
|
|
69
|
+
const llmConfig = newSession.getLLMService().getConfig();
|
|
70
|
+
const modelId = typeof llmConfig.model === "string" ? llmConfig.model : llmConfig.model.modelId;
|
|
71
|
+
const { getModelDisplayName } = await import("../llm/registry.js");
|
|
72
|
+
const modelDisplayName = getModelDisplayName(modelId, llmConfig.provider);
|
|
73
|
+
eventBus.emit("session:continued", {
|
|
74
|
+
previousSessionId: currentSessionId,
|
|
75
|
+
newSessionId,
|
|
76
|
+
summaryTokens,
|
|
77
|
+
originalMessages: history.length,
|
|
78
|
+
reason,
|
|
79
|
+
sessionId: newSessionId,
|
|
80
|
+
// For consistency with other streaming events
|
|
81
|
+
model: modelId,
|
|
82
|
+
modelDisplayName
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
previousSessionId: currentSessionId,
|
|
87
|
+
newSessionId,
|
|
88
|
+
newSession,
|
|
89
|
+
summary: summaryMessage,
|
|
90
|
+
summaryTokens,
|
|
91
|
+
originalMessages: history.length
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Extract text content from message content.
|
|
96
|
+
*/
|
|
97
|
+
extractTextContent(content) {
|
|
98
|
+
if (typeof content === "string") {
|
|
99
|
+
return content;
|
|
100
|
+
}
|
|
101
|
+
return content.filter((part) => part.type === "text").map((part) => part.text).join("\n");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export {
|
|
105
|
+
SessionCompactionService
|
|
106
|
+
};
|
|
@@ -516,6 +516,152 @@ class SessionManager {
|
|
|
516
516
|
sessionTTL: this.sessionTTL
|
|
517
517
|
};
|
|
518
518
|
}
|
|
519
|
+
/**
|
|
520
|
+
* Get the raw session data for a session ID.
|
|
521
|
+
* This is used for accessing continuation fields and other metadata.
|
|
522
|
+
*
|
|
523
|
+
* @param sessionId The session ID
|
|
524
|
+
* @returns Session data if found, undefined otherwise
|
|
525
|
+
*/
|
|
526
|
+
async getSessionData(sessionId) {
|
|
527
|
+
await this.ensureInitialized();
|
|
528
|
+
const sessionKey = `session:${sessionId}`;
|
|
529
|
+
return await this.services.storageManager.getDatabase().get(sessionKey);
|
|
530
|
+
}
|
|
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
|
+
}
|
|
519
665
|
/**
|
|
520
666
|
* Cleanup all sessions and resources.
|
|
521
667
|
* This should be called when shutting down the application.
|
|
@@ -34,6 +34,14 @@ 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;
|
|
37
45
|
}
|
|
38
46
|
/**
|
|
39
47
|
* Manages multiple chat sessions within a Dexto agent.
|
|
@@ -204,6 +212,48 @@ export declare class SessionManager {
|
|
|
204
212
|
maxSessions: number;
|
|
205
213
|
sessionTTL: number;
|
|
206
214
|
}>;
|
|
215
|
+
/**
|
|
216
|
+
* Get the raw session data for a session ID.
|
|
217
|
+
* This is used for accessing continuation fields and other metadata.
|
|
218
|
+
*
|
|
219
|
+
* @param sessionId The session ID
|
|
220
|
+
* @returns Session data if found, undefined otherwise
|
|
221
|
+
*/
|
|
222
|
+
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[]>;
|
|
207
257
|
/**
|
|
208
258
|
* Cleanup all sessions and resources.
|
|
209
259
|
* 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":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AAErD,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
|