@dexto/core 1.5.6 → 1.5.8
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 +189 -30
- package/dist/agent/DextoAgent.d.ts +44 -9
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +190 -31
- package/dist/agent/schemas.cjs +5 -0
- package/dist/agent/schemas.d.ts +456 -66
- package/dist/agent/schemas.d.ts.map +1 -1
- package/dist/agent/schemas.js +5 -0
- package/dist/context/manager.cjs +1 -1
- package/dist/context/manager.js +1 -1
- package/dist/context/utils.cjs +90 -17
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +90 -17
- package/dist/errors/types.cjs +2 -1
- package/dist/errors/types.d.ts +2 -1
- package/dist/errors/types.d.ts.map +1 -1
- package/dist/errors/types.js +2 -1
- package/dist/events/index.cjs +4 -1
- package/dist/events/index.d.ts +37 -2
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +4 -1
- package/dist/image/types.d.ts +15 -0
- package/dist/image/types.d.ts.map +1 -1
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/llm/curation-config.cjs +82 -0
- package/dist/llm/curation-config.d.ts +13 -0
- package/dist/llm/curation-config.d.ts.map +1 -0
- package/dist/llm/curation-config.js +59 -0
- package/dist/llm/curation.cjs +57 -0
- package/dist/llm/curation.d.ts +16 -0
- package/dist/llm/curation.d.ts.map +1 -0
- package/dist/llm/curation.js +34 -0
- package/dist/llm/error-codes.cjs +1 -0
- package/dist/llm/error-codes.d.ts +1 -0
- package/dist/llm/error-codes.d.ts.map +1 -1
- package/dist/llm/error-codes.js +1 -0
- package/dist/llm/errors.cjs +16 -1
- package/dist/llm/errors.d.ts +15 -8
- package/dist/llm/errors.d.ts.map +1 -1
- package/dist/llm/errors.js +16 -1
- package/dist/llm/executor/provider-options.cjs +1 -1
- package/dist/llm/executor/provider-options.js +1 -1
- package/dist/llm/executor/turn-executor.cjs +35 -2
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +35 -2
- package/dist/llm/index.cjs +14 -3
- package/dist/llm/index.d.ts +3 -1
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +13 -2
- package/dist/llm/registry/auto-update.cjs +263 -0
- package/dist/llm/registry/auto-update.d.ts +27 -0
- package/dist/llm/registry/auto-update.d.ts.map +1 -0
- package/dist/llm/registry/auto-update.js +227 -0
- package/dist/llm/registry/index.cjs +806 -0
- package/dist/llm/{registry.d.ts → registry/index.d.ts} +67 -13
- package/dist/llm/registry/index.d.ts.map +1 -0
- package/dist/llm/registry/index.js +756 -0
- package/dist/llm/registry/models.generated.cjs +4861 -0
- package/dist/llm/registry/models.generated.d.ts +431 -0
- package/dist/llm/registry/models.generated.d.ts.map +1 -0
- package/dist/llm/registry/models.generated.js +4838 -0
- package/dist/llm/registry/models.manual.cjs +44 -0
- package/dist/llm/registry/models.manual.d.ts +22 -0
- package/dist/llm/registry/models.manual.d.ts.map +1 -0
- package/dist/llm/registry/models.manual.js +21 -0
- package/dist/llm/registry/sync.cjs +354 -0
- package/dist/llm/registry/sync.d.ts +41 -0
- package/dist/llm/registry/sync.d.ts.map +1 -0
- package/dist/llm/registry/sync.js +328 -0
- package/dist/llm/resolver.cjs +29 -7
- package/dist/llm/resolver.d.ts +1 -1
- package/dist/llm/resolver.d.ts.map +1 -1
- package/dist/llm/resolver.js +31 -8
- package/dist/llm/schemas.cjs +13 -1
- package/dist/llm/schemas.d.ts +59 -59
- package/dist/llm/schemas.d.ts.map +1 -1
- package/dist/llm/schemas.js +14 -1
- package/dist/llm/services/factory.cjs +43 -27
- package/dist/llm/services/factory.d.ts +20 -1
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +44 -28
- package/dist/llm/services/test-utils.integration.cjs +5 -1
- package/dist/llm/services/test-utils.integration.d.ts.map +1 -1
- package/dist/llm/services/test-utils.integration.js +5 -1
- package/dist/llm/services/vercel.cjs +4 -1
- package/dist/llm/services/vercel.d.ts +1 -0
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +4 -1
- package/dist/llm/types.cjs +5 -2
- package/dist/llm/types.d.ts +1 -1
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/llm/types.js +5 -2
- package/dist/llm/validation.cjs +1 -1
- package/dist/llm/validation.js +1 -1
- package/dist/logger/v2/dexto-logger.cjs +4 -0
- package/dist/logger/v2/dexto-logger.d.ts +3 -0
- package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
- package/dist/logger/v2/dexto-logger.js +4 -0
- package/dist/logger/v2/types.d.ts +2 -0
- package/dist/logger/v2/types.d.ts.map +1 -1
- package/dist/mcp/error-codes.cjs +1 -0
- package/dist/mcp/error-codes.d.ts +1 -0
- package/dist/mcp/error-codes.d.ts.map +1 -1
- package/dist/mcp/error-codes.js +1 -0
- package/dist/mcp/errors.cjs +13 -0
- package/dist/mcp/errors.d.ts +7 -0
- package/dist/mcp/errors.d.ts.map +1 -1
- package/dist/mcp/errors.js +13 -0
- package/dist/mcp/manager.cjs +46 -4
- package/dist/mcp/manager.d.ts +10 -2
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +46 -4
- package/dist/mcp/mcp-client.cjs +89 -5
- package/dist/mcp/mcp-client.d.ts +5 -1
- package/dist/mcp/mcp-client.d.ts.map +1 -1
- package/dist/mcp/mcp-client.js +89 -5
- package/dist/mcp/schemas.cjs +6 -1
- package/dist/mcp/schemas.d.ts +1 -1
- package/dist/mcp/schemas.d.ts.map +1 -1
- package/dist/mcp/schemas.js +6 -1
- package/dist/mcp/types.d.ts +5 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/prompts/index.d.ts +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/prompt-manager.cjs +90 -4
- package/dist/prompts/prompt-manager.d.ts +16 -6
- package/dist/prompts/prompt-manager.d.ts.map +1 -1
- package/dist/prompts/prompt-manager.js +90 -4
- package/dist/prompts/providers/config-prompt-provider.cjs +104 -10
- package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/config-prompt-provider.js +105 -11
- package/dist/prompts/providers/custom-prompt-provider.cjs +1 -0
- package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/custom-prompt-provider.js +1 -0
- package/dist/prompts/providers/mcp-prompt-provider.cjs +1 -0
- package/dist/prompts/providers/mcp-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/mcp-prompt-provider.js +1 -0
- package/dist/prompts/schemas.cjs +28 -2
- package/dist/prompts/schemas.d.ts +130 -0
- package/dist/prompts/schemas.d.ts.map +1 -1
- package/dist/prompts/schemas.js +28 -2
- package/dist/prompts/types.d.ts +55 -3
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/resources/handlers/filesystem-handler.cjs +25 -0
- package/dist/resources/handlers/filesystem-handler.d.ts +1 -0
- package/dist/resources/handlers/filesystem-handler.d.ts.map +1 -1
- package/dist/resources/handlers/filesystem-handler.js +25 -0
- package/dist/session/chat-session.cjs +1 -1
- package/dist/session/chat-session.d.ts +1 -1
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +1 -1
- package/dist/session/index.d.ts +1 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/message-queue.cjs +29 -5
- package/dist/session/message-queue.d.ts +3 -1
- package/dist/session/message-queue.d.ts.map +1 -1
- package/dist/session/message-queue.js +29 -5
- package/dist/session/session-manager.cjs +84 -3
- package/dist/session/session-manager.d.ts +12 -0
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +74 -3
- package/dist/session/types.d.ts +1 -0
- package/dist/session/types.d.ts.map +1 -1
- package/dist/systemPrompt/contributors.cjs +42 -0
- package/dist/systemPrompt/contributors.d.ts +13 -0
- package/dist/systemPrompt/contributors.d.ts.map +1 -1
- package/dist/systemPrompt/contributors.js +41 -0
- package/dist/tools/errors.cjs +7 -3
- package/dist/tools/errors.d.ts +5 -1
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +7 -3
- package/dist/tools/internal-tools/constants.cjs +2 -1
- package/dist/tools/internal-tools/constants.d.ts +1 -1
- package/dist/tools/internal-tools/constants.d.ts.map +1 -1
- package/dist/tools/internal-tools/constants.js +2 -1
- package/dist/tools/internal-tools/implementations/invoke-skill-tool.cjs +140 -0
- package/dist/tools/internal-tools/implementations/invoke-skill-tool.d.ts +24 -0
- package/dist/tools/internal-tools/implementations/invoke-skill-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/invoke-skill-tool.js +117 -0
- package/dist/tools/internal-tools/provider.cjs +15 -0
- package/dist/tools/internal-tools/provider.d.ts +15 -1
- package/dist/tools/internal-tools/provider.d.ts.map +1 -1
- package/dist/tools/internal-tools/provider.js +15 -0
- package/dist/tools/internal-tools/registry.cjs +6 -0
- package/dist/tools/internal-tools/registry.d.ts +35 -1
- package/dist/tools/internal-tools/registry.d.ts.map +1 -1
- package/dist/tools/internal-tools/registry.js +6 -0
- package/dist/tools/schemas.d.ts +1 -1
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/tool-call-metadata.cjs +75 -0
- package/dist/tools/tool-call-metadata.d.ts +16 -0
- package/dist/tools/tool-call-metadata.d.ts.map +1 -0
- package/dist/tools/tool-call-metadata.js +51 -0
- package/dist/tools/tool-manager.cjs +481 -103
- package/dist/tools/tool-manager.d.ts +131 -9
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +482 -104
- package/dist/utils/api-key-resolver.cjs +5 -2
- package/dist/utils/api-key-resolver.d.ts.map +1 -1
- package/dist/utils/api-key-resolver.js +5 -2
- package/dist/utils/env.cjs +49 -0
- package/dist/utils/env.d.ts +4 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +24 -0
- 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/dist/utils/service-initializer.cjs +25 -7
- package/dist/utils/service-initializer.d.ts +24 -1
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +25 -7
- package/package.json +6 -2
- package/dist/llm/registry.cjs +0 -1631
- package/dist/llm/registry.d.ts.map +0 -1
- package/dist/llm/registry.js +0 -1586
package/dist/prompts/types.d.ts
CHANGED
|
@@ -9,22 +9,57 @@ export interface PromptArgument {
|
|
|
9
9
|
required?: boolean | undefined;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* MCP-compliant prompt definition
|
|
13
|
-
*
|
|
12
|
+
* MCP-compliant prompt definition with Dexto extensions
|
|
13
|
+
* Base structure matches MCP SDK's Prompt, extended with Claude Code compatibility fields
|
|
14
14
|
*/
|
|
15
15
|
export interface PromptDefinition {
|
|
16
16
|
name: string;
|
|
17
17
|
title?: string | undefined;
|
|
18
18
|
description?: string | undefined;
|
|
19
19
|
arguments?: PromptArgument[] | undefined;
|
|
20
|
+
/** Exclude from auto-invocation list in system prompt */
|
|
21
|
+
disableModelInvocation?: boolean | undefined;
|
|
22
|
+
/** Show in slash command menu (false = hidden but auto-invocable by LLM) */
|
|
23
|
+
userInvocable?: boolean | undefined;
|
|
24
|
+
/** Tools allowed when this prompt is active (overrides global policies) */
|
|
25
|
+
allowedTools?: string[] | undefined;
|
|
26
|
+
/** Model to use when this prompt is invoked */
|
|
27
|
+
model?: string | undefined;
|
|
28
|
+
/** Execution context: 'inline' runs in current session, 'fork' spawns isolated subagent */
|
|
29
|
+
context?: 'inline' | 'fork' | undefined;
|
|
30
|
+
/** Agent ID from registry to use for fork execution */
|
|
31
|
+
agent?: string | undefined;
|
|
20
32
|
}
|
|
21
33
|
/**
|
|
22
34
|
* Enhanced prompt info with MCP-compliant structure
|
|
35
|
+
*
|
|
36
|
+
* ## Naming Convention
|
|
37
|
+
*
|
|
38
|
+
* Prompts have three name fields that serve different purposes:
|
|
39
|
+
*
|
|
40
|
+
* - **name**: Internal identifier used for resolution. May include prefixes like
|
|
41
|
+
* "config:namespace:id" for config prompts or just "promptName" for MCP/custom.
|
|
42
|
+
*
|
|
43
|
+
* - **displayName**: User-friendly base name without system prefixes. Set by providers
|
|
44
|
+
* to just the skill/prompt id (e.g., "plan" not "config:tools:plan"). For MCP and
|
|
45
|
+
* custom prompts, this equals `name` since they have no internal prefixes.
|
|
46
|
+
*
|
|
47
|
+
* - **commandName**: Collision-resolved slash command name computed by PromptManager.
|
|
48
|
+
* If multiple prompts share the same displayName, commandName adds a source prefix
|
|
49
|
+
* (e.g., "config:plan" vs "mcp:plan"). Otherwise, commandName equals displayName.
|
|
50
|
+
*
|
|
51
|
+
* UI components should use `commandName` for display and execution.
|
|
23
52
|
*/
|
|
24
53
|
export interface PromptInfo extends PromptDefinition {
|
|
25
54
|
source: 'mcp' | 'config' | 'custom';
|
|
26
|
-
/**
|
|
55
|
+
/** Base display name set by provider (e.g., "plan"). May equal `name` for simple prompts. */
|
|
27
56
|
displayName?: string | undefined;
|
|
57
|
+
/** Collision-resolved command name computed by PromptManager (e.g., "plan" or "config:plan") */
|
|
58
|
+
commandName?: string | undefined;
|
|
59
|
+
/** Execution context: 'inline' runs in current session, 'fork' spawns isolated subagent */
|
|
60
|
+
context?: 'inline' | 'fork' | undefined;
|
|
61
|
+
/** Agent ID from registry to use for fork execution */
|
|
62
|
+
agent?: string | undefined;
|
|
28
63
|
metadata?: Record<string, unknown>;
|
|
29
64
|
}
|
|
30
65
|
/**
|
|
@@ -38,6 +73,23 @@ export interface PromptListResult {
|
|
|
38
73
|
prompts: PromptInfo[];
|
|
39
74
|
nextCursor?: string | undefined;
|
|
40
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Result type for resolvePrompt including optional per-prompt overrides
|
|
78
|
+
*/
|
|
79
|
+
export interface ResolvedPromptResult {
|
|
80
|
+
/** The resolved prompt text with arguments applied */
|
|
81
|
+
text: string;
|
|
82
|
+
/** Resource URIs referenced by the prompt */
|
|
83
|
+
resources: string[];
|
|
84
|
+
/** Tools allowed when this prompt is active (overrides global policies) */
|
|
85
|
+
allowedTools?: string[] | undefined;
|
|
86
|
+
/** Model to use when this prompt is invoked */
|
|
87
|
+
model?: string | undefined;
|
|
88
|
+
/** Execution context: 'inline' runs in current session, 'fork' spawns isolated subagent */
|
|
89
|
+
context?: 'inline' | 'fork' | undefined;
|
|
90
|
+
/** Agent ID from registry to use for fork execution */
|
|
91
|
+
agent?: string | undefined;
|
|
92
|
+
}
|
|
41
93
|
/**
|
|
42
94
|
* Interface for prompt providers
|
|
43
95
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prompts/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prompts/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -256,6 +256,10 @@ class FileSystemResourceHandler {
|
|
|
256
256
|
return;
|
|
257
257
|
}
|
|
258
258
|
if (stat.isDirectory()) {
|
|
259
|
+
const basename = import_path.default.basename(canonical).toLowerCase();
|
|
260
|
+
if (this.shouldIgnoreDirectory(basename)) {
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
259
263
|
const entries = await import_fs.promises.readdir(canonical);
|
|
260
264
|
for (const entry of entries) {
|
|
261
265
|
const entryPath = import_path.default.join(canonical, entry);
|
|
@@ -272,6 +276,27 @@ class FileSystemResourceHandler {
|
|
|
272
276
|
);
|
|
273
277
|
}
|
|
274
278
|
}
|
|
279
|
+
shouldIgnoreDirectory(basename) {
|
|
280
|
+
const ignoredDirectories = [
|
|
281
|
+
"node_modules",
|
|
282
|
+
".git",
|
|
283
|
+
".turbo",
|
|
284
|
+
".next",
|
|
285
|
+
"dist",
|
|
286
|
+
"build",
|
|
287
|
+
"out",
|
|
288
|
+
"coverage",
|
|
289
|
+
".cache",
|
|
290
|
+
".vscode",
|
|
291
|
+
".idea",
|
|
292
|
+
".changeset",
|
|
293
|
+
".github",
|
|
294
|
+
".husky",
|
|
295
|
+
"tmp",
|
|
296
|
+
"temp"
|
|
297
|
+
];
|
|
298
|
+
return ignoredDirectories.includes(basename);
|
|
299
|
+
}
|
|
275
300
|
shouldIncludeFile(filePath, includeExtensions, includeHidden) {
|
|
276
301
|
const basename = import_path.default.basename(filePath).toLowerCase();
|
|
277
302
|
const ext = import_path.default.extname(filePath).toLowerCase();
|
|
@@ -27,6 +27,7 @@ export declare class FileSystemResourceHandler implements InternalResourceHandle
|
|
|
27
27
|
refresh(): Promise<void>;
|
|
28
28
|
private buildResourceCache;
|
|
29
29
|
private scanPath;
|
|
30
|
+
private shouldIgnoreDirectory;
|
|
30
31
|
private shouldIncludeFile;
|
|
31
32
|
/**
|
|
32
33
|
* Generate a clean, user-friendly filename from a potentially messy path
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-handler.d.ts","sourceRoot":"","sources":["../../../src/resources/handlers/filesystem-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEpF,qBAAa,yBAA0B,YAAW,uBAAuB;IACrE,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,MAAM,CAAe;gBAGzB,MAAM,EAAE,iCAAiC,EACzC,MAAM,EAAE,YAAY,EACpB,eAAe,CAAC,EAAE,MAAM;IAO5B,OAAO,IAAI,MAAM;IAIX,UAAU,CAAC,SAAS,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9D,aAAa,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIlD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,OAAO,CAAC,aAAa;IAWrB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAexB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0D5D,OAAO,CAAC,YAAY;IAoDd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAIhB,kBAAkB;YA8BlB,QAAQ;
|
|
1
|
+
{"version":3,"file":"filesystem-handler.d.ts","sourceRoot":"","sources":["../../../src/resources/handlers/filesystem-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEpF,qBAAa,yBAA0B,YAAW,uBAAuB;IACrE,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,MAAM,CAAe;gBAGzB,MAAM,EAAE,iCAAiC,EACzC,MAAM,EAAE,YAAY,EACpB,eAAe,CAAC,EAAE,MAAM;IAO5B,OAAO,IAAI,MAAM;IAIX,UAAU,CAAC,SAAS,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9D,aAAa,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIlD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,OAAO,CAAC,aAAa;IAWrB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAexB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0D5D,OAAO,CAAC,YAAY;IAoDd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAIhB,kBAAkB;YA8BlB,QAAQ;IAyEtB,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0C7B,OAAO,CAAC,WAAW;CA8CtB"}
|
|
@@ -224,6 +224,10 @@ class FileSystemResourceHandler {
|
|
|
224
224
|
return;
|
|
225
225
|
}
|
|
226
226
|
if (stat.isDirectory()) {
|
|
227
|
+
const basename = path.basename(canonical).toLowerCase();
|
|
228
|
+
if (this.shouldIgnoreDirectory(basename)) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
227
231
|
const entries = await fs.readdir(canonical);
|
|
228
232
|
for (const entry of entries) {
|
|
229
233
|
const entryPath = path.join(canonical, entry);
|
|
@@ -240,6 +244,27 @@ class FileSystemResourceHandler {
|
|
|
240
244
|
);
|
|
241
245
|
}
|
|
242
246
|
}
|
|
247
|
+
shouldIgnoreDirectory(basename) {
|
|
248
|
+
const ignoredDirectories = [
|
|
249
|
+
"node_modules",
|
|
250
|
+
".git",
|
|
251
|
+
".turbo",
|
|
252
|
+
".next",
|
|
253
|
+
"dist",
|
|
254
|
+
"build",
|
|
255
|
+
"out",
|
|
256
|
+
"coverage",
|
|
257
|
+
".cache",
|
|
258
|
+
".vscode",
|
|
259
|
+
".idea",
|
|
260
|
+
".changeset",
|
|
261
|
+
".github",
|
|
262
|
+
".husky",
|
|
263
|
+
"tmp",
|
|
264
|
+
"temp"
|
|
265
|
+
];
|
|
266
|
+
return ignoredDirectories.includes(basename);
|
|
267
|
+
}
|
|
243
268
|
shouldIncludeFile(filePath, includeExtensions, includeHidden) {
|
|
244
269
|
const basename = path.basename(filePath).toLowerCase();
|
|
245
270
|
const ext = path.extname(filePath).toLowerCase();
|
|
@@ -28,7 +28,7 @@ var import_events = require("../events/index.js");
|
|
|
28
28
|
var import_types = require("../logger/v2/types.js");
|
|
29
29
|
var import_errors = require("../errors/index.js");
|
|
30
30
|
var import_error_codes = require("../plugins/error-codes.js");
|
|
31
|
-
var import_registry = require("../llm/registry.js");
|
|
31
|
+
var import_registry = require("../llm/registry/index.js");
|
|
32
32
|
class ChatSession {
|
|
33
33
|
/**
|
|
34
34
|
* Creates a new ChatSession instance.
|
|
@@ -97,7 +97,7 @@ export declare class ChatSession {
|
|
|
97
97
|
* Calling cancel() aborts the in-flight LLM request and tool execution checks.
|
|
98
98
|
*/
|
|
99
99
|
private currentRunController;
|
|
100
|
-
|
|
100
|
+
readonly logger: IDextoLogger;
|
|
101
101
|
/**
|
|
102
102
|
* Creates a new ChatSession instance.
|
|
103
103
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACH,eAAe,EACf,aAAa,EAIhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,qBAAa,WAAW;IA6DhB,OAAO,CAAC,QAAQ;aAWA,EAAE,EAAE,MAAM;IAvE9B;;;;;;;;;;OAUG;IACH,SAAgB,QAAQ,EAAE,eAAe,CAAC;IAE1C;;;OAGG;IACH,OAAO,CAAC,eAAe,CAAgC;IAEvD;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAoB;IAEtC;;;OAGG;IACH,OAAO,CAAC,UAAU,CAA6D;IAE/E;;OAEG;IACH,OAAO,CAAC,wBAAwB,CACvB;IAET;;;OAGG;IACH,OAAO,CAAC,oBAAoB,CAAgC;IAE5D,
|
|
1
|
+
{"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
import { DextoLogComponent } from "../logger/v2/types.js";
|
|
10
10
|
import { DextoRuntimeError, ErrorScope, ErrorType } from "../errors/index.js";
|
|
11
11
|
import { PluginErrorCode } from "../plugins/error-codes.js";
|
|
12
|
-
import { getModelPricing, calculateCost } from "../llm/registry.js";
|
|
12
|
+
import { getModelPricing, calculateCost } from "../llm/registry/index.js";
|
|
13
13
|
class ChatSession {
|
|
14
14
|
/**
|
|
15
15
|
* Creates a new ChatSession instance.
|
package/dist/session/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { ChatSession } from './chat-session.js';
|
|
2
2
|
export { SessionManager } from './session-manager.js';
|
|
3
|
-
export type { SessionMetadata } from './session-manager.js';
|
|
3
|
+
export type { SessionMetadata, SessionLoggerFactory } from './session-manager.js';
|
|
4
4
|
export { SessionErrorCode } from './error-codes.js';
|
|
5
5
|
export { SessionError } from './errors.js';
|
|
6
6
|
export { MessageQueueService } from './message-queue.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -42,7 +42,8 @@ class MessageQueueService {
|
|
|
42
42
|
id: generateId(),
|
|
43
43
|
content: message.content,
|
|
44
44
|
queuedAt: Date.now(),
|
|
45
|
-
...message.metadata !== void 0 && { metadata: message.metadata }
|
|
45
|
+
...message.metadata !== void 0 && { metadata: message.metadata },
|
|
46
|
+
...message.kind !== void 0 && { kind: message.kind }
|
|
46
47
|
};
|
|
47
48
|
this.queue.push(queuedMsg);
|
|
48
49
|
this.logger.debug(`Message queued: ${queuedMsg.id}, position: ${this.queue.length}`);
|
|
@@ -87,13 +88,14 @@ class MessageQueueService {
|
|
|
87
88
|
count: messages.length,
|
|
88
89
|
ids: messages.map((m) => m.id),
|
|
89
90
|
coalesced: messages.length > 1,
|
|
90
|
-
content: combined.combinedContent
|
|
91
|
+
content: combined.combinedContent,
|
|
92
|
+
messages
|
|
91
93
|
});
|
|
92
94
|
return combined;
|
|
93
95
|
}
|
|
94
96
|
/**
|
|
95
97
|
* Coalesce multiple messages into one (multimodal-aware).
|
|
96
|
-
* Strategy: Combine with
|
|
98
|
+
* Strategy: Combine with per-kind formatting, preserve all media.
|
|
97
99
|
*/
|
|
98
100
|
coalesce(messages) {
|
|
99
101
|
if (messages.length === 1) {
|
|
@@ -108,10 +110,32 @@ class MessageQueueService {
|
|
|
108
110
|
lastQueuedAt: firstMsg.queuedAt
|
|
109
111
|
};
|
|
110
112
|
}
|
|
113
|
+
const getMessageKind = (message) => message.kind ?? "default";
|
|
114
|
+
const totalUserMessages = messages.filter(
|
|
115
|
+
(message) => getMessageKind(message) !== "background"
|
|
116
|
+
).length;
|
|
117
|
+
const hasBackgroundMessages = messages.some(
|
|
118
|
+
(message) => getMessageKind(message) === "background"
|
|
119
|
+
);
|
|
120
|
+
const getUserPrefix = (index, total, mixed) => {
|
|
121
|
+
if (mixed) {
|
|
122
|
+
return `User follow-up ${index + 1}`;
|
|
123
|
+
}
|
|
124
|
+
if (total <= 1) return null;
|
|
125
|
+
if (total === 2) {
|
|
126
|
+
return index === 0 ? "First" : "Also";
|
|
127
|
+
}
|
|
128
|
+
return `[${index + 1}]`;
|
|
129
|
+
};
|
|
111
130
|
const combinedContent = [];
|
|
131
|
+
let userIndex = 0;
|
|
112
132
|
for (const [i, msg] of messages.entries()) {
|
|
113
|
-
const
|
|
114
|
-
|
|
133
|
+
const kind = getMessageKind(msg);
|
|
134
|
+
const prefix = kind === "background" ? null : getUserPrefix(userIndex, totalUserMessages, hasBackgroundMessages);
|
|
135
|
+
if (kind !== "background") {
|
|
136
|
+
userIndex += 1;
|
|
137
|
+
}
|
|
138
|
+
let prefixText = prefix ? `${prefix}: ` : "";
|
|
115
139
|
for (const part of msg.content) {
|
|
116
140
|
if (part.type === "text") {
|
|
117
141
|
if (prefixText) {
|
|
@@ -12,6 +12,8 @@ export interface UserMessageInput {
|
|
|
12
12
|
content: ContentPart[];
|
|
13
13
|
/** Optional metadata to attach to the message */
|
|
14
14
|
metadata?: Record<string, unknown>;
|
|
15
|
+
/** Optional kind of queued message */
|
|
16
|
+
kind?: 'default' | 'background';
|
|
15
17
|
}
|
|
16
18
|
/**
|
|
17
19
|
* MessageQueueService handles queuing of user messages during agent execution.
|
|
@@ -80,7 +82,7 @@ export declare class MessageQueueService {
|
|
|
80
82
|
dequeueAll(): CoalescedMessage | null;
|
|
81
83
|
/**
|
|
82
84
|
* Coalesce multiple messages into one (multimodal-aware).
|
|
83
|
-
* Strategy: Combine with
|
|
85
|
+
* Strategy: Combine with per-kind formatting, preserve all media.
|
|
84
86
|
*/
|
|
85
87
|
private coalesce;
|
|
86
88
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../../src/session/message-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAS1D;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,2DAA2D;IAC3D,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../../src/session/message-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAS1D;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,2DAA2D;IAC3D,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,sCAAsC;IACtC,IAAI,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,mBAAmB;IAIxB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAJlB,OAAO,CAAC,KAAK,CAAuB;gBAGxB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,YAAY;IAGhC;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE;IAyBlF;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU,IAAI,gBAAgB,GAAG,IAAI;IAuBrC;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAuGhB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,MAAM,IAAI,aAAa,EAAE;IAIzB;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C;;;OAGG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAY9B"}
|
|
@@ -20,7 +20,8 @@ class MessageQueueService {
|
|
|
20
20
|
id: generateId(),
|
|
21
21
|
content: message.content,
|
|
22
22
|
queuedAt: Date.now(),
|
|
23
|
-
...message.metadata !== void 0 && { metadata: message.metadata }
|
|
23
|
+
...message.metadata !== void 0 && { metadata: message.metadata },
|
|
24
|
+
...message.kind !== void 0 && { kind: message.kind }
|
|
24
25
|
};
|
|
25
26
|
this.queue.push(queuedMsg);
|
|
26
27
|
this.logger.debug(`Message queued: ${queuedMsg.id}, position: ${this.queue.length}`);
|
|
@@ -65,13 +66,14 @@ class MessageQueueService {
|
|
|
65
66
|
count: messages.length,
|
|
66
67
|
ids: messages.map((m) => m.id),
|
|
67
68
|
coalesced: messages.length > 1,
|
|
68
|
-
content: combined.combinedContent
|
|
69
|
+
content: combined.combinedContent,
|
|
70
|
+
messages
|
|
69
71
|
});
|
|
70
72
|
return combined;
|
|
71
73
|
}
|
|
72
74
|
/**
|
|
73
75
|
* Coalesce multiple messages into one (multimodal-aware).
|
|
74
|
-
* Strategy: Combine with
|
|
76
|
+
* Strategy: Combine with per-kind formatting, preserve all media.
|
|
75
77
|
*/
|
|
76
78
|
coalesce(messages) {
|
|
77
79
|
if (messages.length === 1) {
|
|
@@ -86,10 +88,32 @@ class MessageQueueService {
|
|
|
86
88
|
lastQueuedAt: firstMsg.queuedAt
|
|
87
89
|
};
|
|
88
90
|
}
|
|
91
|
+
const getMessageKind = (message) => message.kind ?? "default";
|
|
92
|
+
const totalUserMessages = messages.filter(
|
|
93
|
+
(message) => getMessageKind(message) !== "background"
|
|
94
|
+
).length;
|
|
95
|
+
const hasBackgroundMessages = messages.some(
|
|
96
|
+
(message) => getMessageKind(message) === "background"
|
|
97
|
+
);
|
|
98
|
+
const getUserPrefix = (index, total, mixed) => {
|
|
99
|
+
if (mixed) {
|
|
100
|
+
return `User follow-up ${index + 1}`;
|
|
101
|
+
}
|
|
102
|
+
if (total <= 1) return null;
|
|
103
|
+
if (total === 2) {
|
|
104
|
+
return index === 0 ? "First" : "Also";
|
|
105
|
+
}
|
|
106
|
+
return `[${index + 1}]`;
|
|
107
|
+
};
|
|
89
108
|
const combinedContent = [];
|
|
109
|
+
let userIndex = 0;
|
|
90
110
|
for (const [i, msg] of messages.entries()) {
|
|
91
|
-
const
|
|
92
|
-
|
|
111
|
+
const kind = getMessageKind(msg);
|
|
112
|
+
const prefix = kind === "background" ? null : getUserPrefix(userIndex, totalUserMessages, hasBackgroundMessages);
|
|
113
|
+
if (kind !== "background") {
|
|
114
|
+
userIndex += 1;
|
|
115
|
+
}
|
|
116
|
+
let prefixText = prefix ? `${prefix}: ` : "";
|
|
93
117
|
for (const part of msg.content) {
|
|
94
118
|
if (part.type === "text") {
|
|
95
119
|
if (prefixText) {
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
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
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
var session_manager_exports = {};
|
|
20
30
|
__export(session_manager_exports, {
|
|
@@ -25,11 +35,15 @@ var import_crypto = require("crypto");
|
|
|
25
35
|
var import_chat_session = require("./chat-session.js");
|
|
26
36
|
var import_types = require("../logger/v2/types.js");
|
|
27
37
|
var import_errors = require("./errors.js");
|
|
38
|
+
function defaultSessionLoggerFactory(options) {
|
|
39
|
+
return options.baseLogger.createChild(import_types.DextoLogComponent.SESSION);
|
|
40
|
+
}
|
|
28
41
|
class SessionManager {
|
|
29
42
|
constructor(services, config = {}, logger) {
|
|
30
43
|
this.services = services;
|
|
31
44
|
this.maxSessions = config.maxSessions ?? 100;
|
|
32
45
|
this.sessionTTL = config.sessionTTL ?? 36e5;
|
|
46
|
+
this.sessionLoggerFactory = config.sessionLoggerFactory ?? defaultSessionLoggerFactory;
|
|
33
47
|
this.logger = logger.createChild(import_types.DextoLogComponent.SESSION);
|
|
34
48
|
}
|
|
35
49
|
sessions = /* @__PURE__ */ new Map();
|
|
@@ -43,6 +57,7 @@ class SessionManager {
|
|
|
43
57
|
// Per-session mutex for token usage updates to prevent lost updates from concurrent calls
|
|
44
58
|
tokenUsageLocks = /* @__PURE__ */ new Map();
|
|
45
59
|
logger;
|
|
60
|
+
sessionLoggerFactory;
|
|
46
61
|
/**
|
|
47
62
|
* Initialize the SessionManager with persistent storage.
|
|
48
63
|
* This must be called before using any session operations.
|
|
@@ -139,10 +154,34 @@ class SessionManager {
|
|
|
139
154
|
const existingMetadata = await this.services.storageManager.getDatabase().get(sessionKey);
|
|
140
155
|
if (existingMetadata) {
|
|
141
156
|
await this.updateSessionActivity(id);
|
|
157
|
+
const runtimeConfig = this.services.stateManager.getRuntimeConfig();
|
|
158
|
+
const agentId = runtimeConfig.agentCard?.name ?? runtimeConfig.agentId;
|
|
159
|
+
const sessionLogger = this.sessionLoggerFactory({
|
|
160
|
+
baseLogger: this.logger,
|
|
161
|
+
agentId,
|
|
162
|
+
sessionId: id
|
|
163
|
+
});
|
|
164
|
+
const sessionData2 = await this.services.storageManager.getDatabase().get(sessionKey);
|
|
165
|
+
if (sessionData2?.llmOverride) {
|
|
166
|
+
const { resolveApiKeyForProvider } = await import("../utils/api-key-resolver.js");
|
|
167
|
+
const apiKey = resolveApiKeyForProvider(sessionData2.llmOverride.provider);
|
|
168
|
+
if (!apiKey) {
|
|
169
|
+
this.logger.warn(
|
|
170
|
+
`Skipped LLM override restore for session ${id}: missing API key for provider ${sessionData2.llmOverride.provider}`,
|
|
171
|
+
{ sessionId: id, provider: sessionData2.llmOverride.provider }
|
|
172
|
+
);
|
|
173
|
+
} else {
|
|
174
|
+
const restoredConfig = {
|
|
175
|
+
...sessionData2.llmOverride,
|
|
176
|
+
apiKey
|
|
177
|
+
};
|
|
178
|
+
this.services.stateManager.updateLLM(restoredConfig, id);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
142
181
|
const session2 = new import_chat_session.ChatSession(
|
|
143
182
|
{ ...this.services, sessionManager: this },
|
|
144
183
|
id,
|
|
145
|
-
|
|
184
|
+
sessionLogger
|
|
146
185
|
);
|
|
147
186
|
await session2.init();
|
|
148
187
|
this.sessions.set(id, session2);
|
|
@@ -169,7 +208,18 @@ class SessionManager {
|
|
|
169
208
|
}
|
|
170
209
|
let session;
|
|
171
210
|
try {
|
|
172
|
-
|
|
211
|
+
const runtimeConfig = this.services.stateManager.getRuntimeConfig();
|
|
212
|
+
const agentId = runtimeConfig.agentCard?.name ?? runtimeConfig.agentId;
|
|
213
|
+
const sessionLogger = this.sessionLoggerFactory({
|
|
214
|
+
baseLogger: this.logger,
|
|
215
|
+
agentId,
|
|
216
|
+
sessionId: id
|
|
217
|
+
});
|
|
218
|
+
session = new import_chat_session.ChatSession(
|
|
219
|
+
{ ...this.services, sessionManager: this },
|
|
220
|
+
id,
|
|
221
|
+
sessionLogger
|
|
222
|
+
);
|
|
173
223
|
await session.init();
|
|
174
224
|
this.sessions.set(id, session);
|
|
175
225
|
await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
|
|
@@ -204,10 +254,33 @@ class SessionManager {
|
|
|
204
254
|
const sessionKey = `session:${sessionId}`;
|
|
205
255
|
const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
|
|
206
256
|
if (sessionData) {
|
|
257
|
+
const runtimeConfig = this.services.stateManager.getRuntimeConfig();
|
|
258
|
+
const agentId = runtimeConfig.agentCard?.name ?? runtimeConfig.agentId;
|
|
259
|
+
const sessionLogger = this.sessionLoggerFactory({
|
|
260
|
+
baseLogger: this.logger,
|
|
261
|
+
agentId,
|
|
262
|
+
sessionId
|
|
263
|
+
});
|
|
264
|
+
if (sessionData.llmOverride) {
|
|
265
|
+
const { resolveApiKeyForProvider } = await import("../utils/api-key-resolver.js");
|
|
266
|
+
const apiKey = resolveApiKeyForProvider(sessionData.llmOverride.provider);
|
|
267
|
+
if (!apiKey) {
|
|
268
|
+
this.logger.warn(
|
|
269
|
+
`Skipped LLM override restore for session ${sessionId}: missing API key for provider ${sessionData.llmOverride.provider}`,
|
|
270
|
+
{ sessionId, provider: sessionData.llmOverride.provider }
|
|
271
|
+
);
|
|
272
|
+
} else {
|
|
273
|
+
const restoredConfig = {
|
|
274
|
+
...sessionData.llmOverride,
|
|
275
|
+
apiKey
|
|
276
|
+
};
|
|
277
|
+
this.services.stateManager.updateLLM(restoredConfig, sessionId);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
207
280
|
const session = new import_chat_session.ChatSession(
|
|
208
281
|
{ ...this.services, sessionManager: this },
|
|
209
282
|
sessionId,
|
|
210
|
-
|
|
283
|
+
sessionLogger
|
|
211
284
|
);
|
|
212
285
|
await session.init();
|
|
213
286
|
this.sessions.set(sessionId, session);
|
|
@@ -494,6 +567,14 @@ class SessionManager {
|
|
|
494
567
|
throw import_errors.SessionError.notFound(sessionId);
|
|
495
568
|
}
|
|
496
569
|
await session.switchLLM(newLLMConfig);
|
|
570
|
+
const sessionKey = `session:${sessionId}`;
|
|
571
|
+
const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
|
|
572
|
+
if (sessionData) {
|
|
573
|
+
const { apiKey: _apiKey, ...configWithoutApiKey } = newLLMConfig;
|
|
574
|
+
sessionData.llmOverride = configWithoutApiKey;
|
|
575
|
+
await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
|
|
576
|
+
await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
|
|
577
|
+
}
|
|
497
578
|
this.services.agentEventBus.emit("llm:switched", {
|
|
498
579
|
newConfig: newLLMConfig,
|
|
499
580
|
historyRetained: true,
|
|
@@ -8,6 +8,11 @@ import type { ValidatedLLMConfig } from '../llm/schemas.js';
|
|
|
8
8
|
import type { StorageManager } from '../storage/index.js';
|
|
9
9
|
import type { PluginManager } from '../plugins/manager.js';
|
|
10
10
|
import type { TokenUsage } from '../llm/types.js';
|
|
11
|
+
export type SessionLoggerFactory = (options: {
|
|
12
|
+
baseLogger: IDextoLogger;
|
|
13
|
+
agentId: string;
|
|
14
|
+
sessionId: string;
|
|
15
|
+
}) => IDextoLogger;
|
|
11
16
|
/**
|
|
12
17
|
* Session-level token usage totals (accumulated across all messages).
|
|
13
18
|
* All fields required since we track cumulative totals (defaulting to 0).
|
|
@@ -24,7 +29,10 @@ export interface SessionMetadata {
|
|
|
24
29
|
export interface SessionManagerConfig {
|
|
25
30
|
maxSessions?: number;
|
|
26
31
|
sessionTTL?: number;
|
|
32
|
+
/** Host hook for creating a session-scoped logger (e.g. file logger) */
|
|
33
|
+
sessionLoggerFactory?: SessionLoggerFactory;
|
|
27
34
|
}
|
|
35
|
+
type PersistedLLMConfig = Omit<ValidatedLLMConfig, 'apiKey'>;
|
|
28
36
|
export interface SessionData {
|
|
29
37
|
id: string;
|
|
30
38
|
userId?: string;
|
|
@@ -34,6 +42,8 @@ export interface SessionData {
|
|
|
34
42
|
metadata?: Record<string, any>;
|
|
35
43
|
tokenUsage?: SessionTokenUsage;
|
|
36
44
|
estimatedCost?: number;
|
|
45
|
+
/** Persisted LLM config override for this session */
|
|
46
|
+
llmOverride?: PersistedLLMConfig;
|
|
37
47
|
}
|
|
38
48
|
/**
|
|
39
49
|
* Manages multiple chat sessions within a Dexto agent.
|
|
@@ -62,6 +72,7 @@ export declare class SessionManager {
|
|
|
62
72
|
private readonly pendingCreations;
|
|
63
73
|
private readonly tokenUsageLocks;
|
|
64
74
|
private logger;
|
|
75
|
+
private readonly sessionLoggerFactory;
|
|
65
76
|
constructor(services: {
|
|
66
77
|
stateManager: AgentStateManager;
|
|
67
78
|
systemPromptManager: SystemPromptManager;
|
|
@@ -217,4 +228,5 @@ export declare class SessionManager {
|
|
|
217
228
|
*/
|
|
218
229
|
cleanup(): Promise<void>;
|
|
219
230
|
}
|
|
231
|
+
export {};
|
|
220
232
|
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
|