@dexto/core 1.5.6 → 1.5.7
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 +94 -26
- package/dist/agent/DextoAgent.d.ts +17 -7
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +95 -27
- package/dist/agent/schemas.d.ts +417 -66
- package/dist/agent/schemas.d.ts.map +1 -1
- package/dist/context/utils.cjs +49 -3
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +49 -3
- 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/image/types.d.ts +15 -0
- package/dist/image/types.d.ts.map +1 -1
- 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 +15 -0
- package/dist/llm/errors.d.ts +15 -8
- package/dist/llm/errors.d.ts.map +1 -1
- package/dist/llm/errors.js +15 -0
- package/dist/llm/executor/turn-executor.cjs +27 -0
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +27 -0
- package/dist/llm/registry.cjs +472 -28
- package/dist/llm/registry.d.ts +80 -4
- package/dist/llm/registry.d.ts.map +1 -1
- package/dist/llm/registry.js +464 -25
- package/dist/llm/resolver.cjs +13 -0
- package/dist/llm/resolver.d.ts.map +1 -1
- package/dist/llm/resolver.js +16 -1
- package/dist/llm/schemas.d.ts +59 -59
- package/dist/llm/services/factory.cjs +41 -25
- 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 +42 -26
- 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/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/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/session/chat-session.d.ts +1 -1
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/index.d.ts +1 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/session-manager.cjs +47 -3
- package/dist/session/session-manager.d.ts +10 -0
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +47 -3
- 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 +12 -0
- 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 +34 -0
- 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-manager.cjs +230 -79
- package/dist/tools/tool-manager.d.ts +89 -8
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +231 -80
- 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/service-initializer.cjs +8 -2
- package/dist/utils/service-initializer.d.ts +5 -1
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +8 -2
- package/package.json +1 -1
package/dist/agent/DextoAgent.js
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
var _DextoAgent_decorators, _init;
|
|
7
7
|
import { randomUUID } from "crypto";
|
|
8
8
|
import { setMaxListeners } from "events";
|
|
9
|
+
import { SkillsContributor } from "../systemPrompt/contributors.js";
|
|
9
10
|
import { expandMessageReferences } from "../resources/index.js";
|
|
10
11
|
import { expandBlobReferences } from "../context/utils.js";
|
|
11
12
|
import { PromptManager } from "../prompts/index.js";
|
|
@@ -20,6 +21,7 @@ import { validateInputForLLM } from "../llm/validation.js";
|
|
|
20
21
|
import { LLMError } from "../llm/errors.js";
|
|
21
22
|
import { AgentError } from "./errors.js";
|
|
22
23
|
import { MCPError } from "../mcp/errors.js";
|
|
24
|
+
import { MCPErrorCode } from "../mcp/error-codes.js";
|
|
23
25
|
import { DextoRuntimeError } from "../errors/DextoRuntimeError.js";
|
|
24
26
|
import { DextoValidationError } from "../errors/DextoValidationError.js";
|
|
25
27
|
import { ensureOk } from "../errors/result-bridge.js";
|
|
@@ -29,7 +31,7 @@ import {
|
|
|
29
31
|
getSupportedProviders,
|
|
30
32
|
getDefaultModelForProvider,
|
|
31
33
|
getProviderFromModel,
|
|
32
|
-
|
|
34
|
+
getAllModelsForProvider
|
|
33
35
|
} from "../llm/registry.js";
|
|
34
36
|
import { createAgentServices } from "../utils/service-initializer.js";
|
|
35
37
|
import { AgentConfigSchema, createAgentConfigSchema } from "./schemas.js";
|
|
@@ -78,6 +80,19 @@ class DextoAgent {
|
|
|
78
80
|
agentId: this.config.agentId,
|
|
79
81
|
component: DextoLogComponent.AGENT
|
|
80
82
|
});
|
|
83
|
+
const serviceOverrides = {};
|
|
84
|
+
if (options?.sessionLoggerFactory) {
|
|
85
|
+
serviceOverrides.sessionLoggerFactory = options.sessionLoggerFactory;
|
|
86
|
+
}
|
|
87
|
+
if (options && "mcpAuthProviderFactory" in options) {
|
|
88
|
+
serviceOverrides.mcpAuthProviderFactory = options.mcpAuthProviderFactory ?? null;
|
|
89
|
+
}
|
|
90
|
+
if (Object.keys(serviceOverrides).length > 0) {
|
|
91
|
+
this.serviceOverrides = serviceOverrides;
|
|
92
|
+
}
|
|
93
|
+
if (options?.mcpAuthProviderFactory) {
|
|
94
|
+
this.mcpAuthProviderFactory = options.mcpAuthProviderFactory;
|
|
95
|
+
}
|
|
81
96
|
this.agentEventBus = new AgentEventBus();
|
|
82
97
|
this.logger.info("DextoAgent created.");
|
|
83
98
|
}
|
|
@@ -110,8 +125,11 @@ class DextoAgent {
|
|
|
110
125
|
// Approval handler for manual tool confirmation and elicitation
|
|
111
126
|
// Set via setApprovalHandler() before start() if needed
|
|
112
127
|
approvalHandler;
|
|
128
|
+
mcpAuthProviderFactory = null;
|
|
113
129
|
// Active stream controllers per session - allows cancel() to abort iterators
|
|
114
130
|
activeStreamControllers = /* @__PURE__ */ new Map();
|
|
131
|
+
// Host overrides for service initialization (e.g. session logger factory)
|
|
132
|
+
serviceOverrides;
|
|
115
133
|
// Logger instance for this agent (dependency injection)
|
|
116
134
|
logger;
|
|
117
135
|
/**
|
|
@@ -131,8 +149,12 @@ class DextoAgent {
|
|
|
131
149
|
this.config,
|
|
132
150
|
this.configPath,
|
|
133
151
|
this.logger,
|
|
134
|
-
this.agentEventBus
|
|
152
|
+
this.agentEventBus,
|
|
153
|
+
this.serviceOverrides
|
|
135
154
|
);
|
|
155
|
+
if (this.mcpAuthProviderFactory) {
|
|
156
|
+
services.mcpManager.setAuthProviderFactory(this.mcpAuthProviderFactory);
|
|
157
|
+
}
|
|
136
158
|
for (const service of requiredServices) {
|
|
137
159
|
if (!services[service]) {
|
|
138
160
|
throw AgentError.initializationFailed(
|
|
@@ -170,9 +192,6 @@ Either:
|
|
|
170
192
|
memoryManager: services.memoryManager,
|
|
171
193
|
services
|
|
172
194
|
});
|
|
173
|
-
services.toolManager.setAgent(this);
|
|
174
|
-
await services.toolManager.initialize();
|
|
175
|
-
this.searchService = services.searchService;
|
|
176
195
|
const promptManager = new PromptManager(
|
|
177
196
|
this.mcpManager,
|
|
178
197
|
this.resourceManager,
|
|
@@ -183,6 +202,21 @@ Either:
|
|
|
183
202
|
);
|
|
184
203
|
await promptManager.initialize();
|
|
185
204
|
Object.assign(this, { promptManager });
|
|
205
|
+
services.toolManager.setAgent(this);
|
|
206
|
+
services.toolManager.setPromptManager(promptManager);
|
|
207
|
+
if (this.config.internalTools?.includes("invoke_skill")) {
|
|
208
|
+
const skillsContributor = new SkillsContributor(
|
|
209
|
+
"skills",
|
|
210
|
+
50,
|
|
211
|
+
// Priority after memories (40) but before most other content
|
|
212
|
+
promptManager,
|
|
213
|
+
this.logger
|
|
214
|
+
);
|
|
215
|
+
services.systemPromptManager.addContributor(skillsContributor);
|
|
216
|
+
this.logger.debug("Added SkillsContributor to system prompt");
|
|
217
|
+
}
|
|
218
|
+
await services.toolManager.initialize();
|
|
219
|
+
this.searchService = services.searchService;
|
|
186
220
|
this._isStarted = true;
|
|
187
221
|
this._isStopped = false;
|
|
188
222
|
this.logger.info("DextoAgent started successfully.");
|
|
@@ -941,6 +975,7 @@ Either:
|
|
|
941
975
|
*/
|
|
942
976
|
async endSession(sessionId) {
|
|
943
977
|
this.ensureStarted();
|
|
978
|
+
this.toolManager.clearSessionAutoApproveTools(sessionId);
|
|
944
979
|
return this.sessionManager.endSession(sessionId);
|
|
945
980
|
}
|
|
946
981
|
/**
|
|
@@ -950,6 +985,7 @@ Either:
|
|
|
950
985
|
*/
|
|
951
986
|
async deleteSession(sessionId) {
|
|
952
987
|
this.ensureStarted();
|
|
988
|
+
this.toolManager.clearSessionAutoApproveTools(sessionId);
|
|
953
989
|
return this.sessionManager.deleteSession(sessionId);
|
|
954
990
|
}
|
|
955
991
|
/**
|
|
@@ -1306,11 +1342,17 @@ Either:
|
|
|
1306
1342
|
// ============= LLM MANAGEMENT =============
|
|
1307
1343
|
/**
|
|
1308
1344
|
* Gets the current LLM configuration with all defaults applied.
|
|
1345
|
+
* @param sessionId Optional session ID to get config for specific session
|
|
1309
1346
|
* @returns Current LLM configuration
|
|
1310
1347
|
*/
|
|
1311
|
-
getCurrentLLMConfig() {
|
|
1348
|
+
getCurrentLLMConfig(sessionId) {
|
|
1312
1349
|
this.ensureStarted();
|
|
1313
|
-
|
|
1350
|
+
if (sessionId !== void 0 && (!sessionId || typeof sessionId !== "string")) {
|
|
1351
|
+
throw AgentError.apiValidationError(
|
|
1352
|
+
"sessionId must be a non-empty string when provided"
|
|
1353
|
+
);
|
|
1354
|
+
}
|
|
1355
|
+
return structuredClone(this.stateManager.getLLMConfig(sessionId));
|
|
1314
1356
|
}
|
|
1315
1357
|
/**
|
|
1316
1358
|
* Switches the LLM service while preserving conversation history.
|
|
@@ -1433,20 +1475,16 @@ Either:
|
|
|
1433
1475
|
*/
|
|
1434
1476
|
getSupportedModels() {
|
|
1435
1477
|
const result = {};
|
|
1436
|
-
const
|
|
1437
|
-
|
|
1438
|
-
const defaultModel = getDefaultModelForProvider(provider);
|
|
1439
|
-
const providerInfo = LLM_REGISTRY[provider];
|
|
1440
|
-
result[provider] = providerInfo.models.map((model) => ({
|
|
1441
|
-
...model,
|
|
1442
|
-
isDefault: model.name === defaultModel
|
|
1443
|
-
}));
|
|
1478
|
+
for (const provider of this.getSupportedProviders()) {
|
|
1479
|
+
result[provider] = this.getSupportedModelsForProvider(provider);
|
|
1444
1480
|
}
|
|
1445
1481
|
return result;
|
|
1446
1482
|
}
|
|
1447
1483
|
/**
|
|
1448
1484
|
* Gets supported models for a specific provider.
|
|
1449
1485
|
* Returns model information including metadata for the specified provider only.
|
|
1486
|
+
* For gateway providers like 'dexto' with supportsAllRegistryModels, returns
|
|
1487
|
+
* all models from all accessible providers with their original provider info.
|
|
1450
1488
|
*
|
|
1451
1489
|
* @param provider The provider to get models for
|
|
1452
1490
|
* @returns Array of model information for the specified provider
|
|
@@ -1464,12 +1502,15 @@ Either:
|
|
|
1464
1502
|
* ```
|
|
1465
1503
|
*/
|
|
1466
1504
|
getSupportedModelsForProvider(provider) {
|
|
1467
|
-
const
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1505
|
+
const models = getAllModelsForProvider(provider);
|
|
1506
|
+
return models.map((model) => {
|
|
1507
|
+
const originalProvider = "originalProvider" in model ? model.originalProvider : provider;
|
|
1508
|
+
const defaultModel = getDefaultModelForProvider(originalProvider ?? provider);
|
|
1509
|
+
return {
|
|
1510
|
+
...model,
|
|
1511
|
+
isDefault: model.name === defaultModel
|
|
1512
|
+
};
|
|
1513
|
+
});
|
|
1473
1514
|
}
|
|
1474
1515
|
/**
|
|
1475
1516
|
* Infers the provider from a model name.
|
|
@@ -1651,6 +1692,13 @@ Either:
|
|
|
1651
1692
|
throw error;
|
|
1652
1693
|
}
|
|
1653
1694
|
}
|
|
1695
|
+
getMcpAuthProvider(name) {
|
|
1696
|
+
if (!name || typeof name !== "string") {
|
|
1697
|
+
throw AgentError.apiValidationError("name is required and must be a non-empty string");
|
|
1698
|
+
}
|
|
1699
|
+
this.ensureStarted();
|
|
1700
|
+
return this.mcpManager.getAuthProvider(name);
|
|
1701
|
+
}
|
|
1654
1702
|
/**
|
|
1655
1703
|
* Executes a tool from any source (MCP servers, custom tools, or internal tools).
|
|
1656
1704
|
* This is the unified interface for tool execution that can handle all tool types.
|
|
@@ -1710,7 +1758,10 @@ Either:
|
|
|
1710
1758
|
*/
|
|
1711
1759
|
getMcpFailedConnections() {
|
|
1712
1760
|
this.ensureStarted();
|
|
1713
|
-
|
|
1761
|
+
const failures = this.mcpManager.getFailedConnections();
|
|
1762
|
+
return Object.fromEntries(
|
|
1763
|
+
Object.entries(failures).map(([name, error]) => [name, error.message])
|
|
1764
|
+
);
|
|
1714
1765
|
}
|
|
1715
1766
|
/**
|
|
1716
1767
|
* Gets the connection status of a single MCP server.
|
|
@@ -1734,7 +1785,12 @@ Either:
|
|
|
1734
1785
|
} else if (connectedClients.has(name)) {
|
|
1735
1786
|
status = "connected";
|
|
1736
1787
|
} else {
|
|
1737
|
-
|
|
1788
|
+
const errorCode = this.mcpManager.getFailedConnectionErrorCode(name);
|
|
1789
|
+
if (errorCode === MCPErrorCode.AUTH_REQUIRED) {
|
|
1790
|
+
status = "auth-required";
|
|
1791
|
+
} else {
|
|
1792
|
+
status = "error";
|
|
1793
|
+
}
|
|
1738
1794
|
}
|
|
1739
1795
|
const result = {
|
|
1740
1796
|
name,
|
|
@@ -1743,7 +1799,7 @@ Either:
|
|
|
1743
1799
|
status
|
|
1744
1800
|
};
|
|
1745
1801
|
if (failedConnections[name]) {
|
|
1746
|
-
result.error = failedConnections[name];
|
|
1802
|
+
result.error = failedConnections[name].message;
|
|
1747
1803
|
}
|
|
1748
1804
|
return result;
|
|
1749
1805
|
}
|
|
@@ -1770,7 +1826,12 @@ Either:
|
|
|
1770
1826
|
} else if (connectedClients.has(name)) {
|
|
1771
1827
|
status = "connected";
|
|
1772
1828
|
} else {
|
|
1773
|
-
|
|
1829
|
+
const errorCode = this.mcpManager.getFailedConnectionErrorCode(name);
|
|
1830
|
+
if (errorCode === MCPErrorCode.AUTH_REQUIRED) {
|
|
1831
|
+
status = "auth-required";
|
|
1832
|
+
} else {
|
|
1833
|
+
status = "error";
|
|
1834
|
+
}
|
|
1774
1835
|
}
|
|
1775
1836
|
const server = {
|
|
1776
1837
|
name,
|
|
@@ -1779,7 +1840,7 @@ Either:
|
|
|
1779
1840
|
status
|
|
1780
1841
|
};
|
|
1781
1842
|
if (failedConnections[name]) {
|
|
1782
|
-
server.error = failedConnections[name];
|
|
1843
|
+
server.error = failedConnections[name].message;
|
|
1783
1844
|
}
|
|
1784
1845
|
servers.push(server);
|
|
1785
1846
|
}
|
|
@@ -1928,10 +1989,11 @@ Either:
|
|
|
1928
1989
|
* - Prompt key resolution (resolving aliases)
|
|
1929
1990
|
* - Argument normalization (including special _context field)
|
|
1930
1991
|
* - Prompt execution and flattening
|
|
1992
|
+
* - Returning per-prompt overrides (allowedTools, model) for the invoker to apply
|
|
1931
1993
|
*
|
|
1932
1994
|
* @param name The prompt name or alias
|
|
1933
1995
|
* @param options Optional configuration for prompt resolution
|
|
1934
|
-
* @returns Promise resolving to the resolved text and
|
|
1996
|
+
* @returns Promise resolving to the resolved text, resource URIs, and optional overrides
|
|
1935
1997
|
*/
|
|
1936
1998
|
async resolvePrompt(name, options = {}) {
|
|
1937
1999
|
this.ensureStarted();
|
|
@@ -2067,6 +2129,12 @@ Either:
|
|
|
2067
2129
|
}
|
|
2068
2130
|
this.logger.debug("Approval handler registered");
|
|
2069
2131
|
}
|
|
2132
|
+
setMcpAuthProviderFactory(factory) {
|
|
2133
|
+
this.mcpAuthProviderFactory = factory;
|
|
2134
|
+
if (this._isStarted && this.services) {
|
|
2135
|
+
this.services.mcpManager.setAuthProviderFactory(factory);
|
|
2136
|
+
}
|
|
2137
|
+
}
|
|
2070
2138
|
/**
|
|
2071
2139
|
* Clear the current approval handler.
|
|
2072
2140
|
*
|