@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/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,8 +31,8 @@ import {
|
|
|
29
31
|
getSupportedProviders,
|
|
30
32
|
getDefaultModelForProvider,
|
|
31
33
|
getProviderFromModel,
|
|
32
|
-
|
|
33
|
-
} from "../llm/registry.js";
|
|
34
|
+
getAllModelsForProvider
|
|
35
|
+
} from "../llm/registry/index.js";
|
|
34
36
|
import { createAgentServices } from "../utils/service-initializer.js";
|
|
35
37
|
import { AgentConfigSchema, createAgentConfigSchema } from "./schemas.js";
|
|
36
38
|
import {
|
|
@@ -78,6 +80,25 @@ 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 (options?.toolManager) {
|
|
91
|
+
serviceOverrides.toolManager = options.toolManager;
|
|
92
|
+
}
|
|
93
|
+
if (options?.toolManagerFactory) {
|
|
94
|
+
serviceOverrides.toolManagerFactory = options.toolManagerFactory;
|
|
95
|
+
}
|
|
96
|
+
if (Object.keys(serviceOverrides).length > 0) {
|
|
97
|
+
this.serviceOverrides = serviceOverrides;
|
|
98
|
+
}
|
|
99
|
+
if (options?.mcpAuthProviderFactory) {
|
|
100
|
+
this.mcpAuthProviderFactory = options.mcpAuthProviderFactory;
|
|
101
|
+
}
|
|
81
102
|
this.agentEventBus = new AgentEventBus();
|
|
82
103
|
this.logger.info("DextoAgent created.");
|
|
83
104
|
}
|
|
@@ -110,8 +131,11 @@ class DextoAgent {
|
|
|
110
131
|
// Approval handler for manual tool confirmation and elicitation
|
|
111
132
|
// Set via setApprovalHandler() before start() if needed
|
|
112
133
|
approvalHandler;
|
|
134
|
+
mcpAuthProviderFactory = null;
|
|
113
135
|
// Active stream controllers per session - allows cancel() to abort iterators
|
|
114
136
|
activeStreamControllers = /* @__PURE__ */ new Map();
|
|
137
|
+
// Host overrides for service initialization (e.g. session logger factory)
|
|
138
|
+
serviceOverrides;
|
|
115
139
|
// Logger instance for this agent (dependency injection)
|
|
116
140
|
logger;
|
|
117
141
|
/**
|
|
@@ -131,8 +155,12 @@ class DextoAgent {
|
|
|
131
155
|
this.config,
|
|
132
156
|
this.configPath,
|
|
133
157
|
this.logger,
|
|
134
|
-
this.agentEventBus
|
|
158
|
+
this.agentEventBus,
|
|
159
|
+
this.serviceOverrides
|
|
135
160
|
);
|
|
161
|
+
if (this.mcpAuthProviderFactory) {
|
|
162
|
+
services.mcpManager.setAuthProviderFactory(this.mcpAuthProviderFactory);
|
|
163
|
+
}
|
|
136
164
|
for (const service of requiredServices) {
|
|
137
165
|
if (!services[service]) {
|
|
138
166
|
throw AgentError.initializationFailed(
|
|
@@ -170,9 +198,6 @@ Either:
|
|
|
170
198
|
memoryManager: services.memoryManager,
|
|
171
199
|
services
|
|
172
200
|
});
|
|
173
|
-
services.toolManager.setAgent(this);
|
|
174
|
-
await services.toolManager.initialize();
|
|
175
|
-
this.searchService = services.searchService;
|
|
176
201
|
const promptManager = new PromptManager(
|
|
177
202
|
this.mcpManager,
|
|
178
203
|
this.resourceManager,
|
|
@@ -183,6 +208,21 @@ Either:
|
|
|
183
208
|
);
|
|
184
209
|
await promptManager.initialize();
|
|
185
210
|
Object.assign(this, { promptManager });
|
|
211
|
+
services.toolManager.setAgent(this);
|
|
212
|
+
services.toolManager.setPromptManager(promptManager);
|
|
213
|
+
if (this.config.internalTools?.includes("invoke_skill")) {
|
|
214
|
+
const skillsContributor = new SkillsContributor(
|
|
215
|
+
"skills",
|
|
216
|
+
50,
|
|
217
|
+
// Priority after memories (40) but before most other content
|
|
218
|
+
promptManager,
|
|
219
|
+
this.logger
|
|
220
|
+
);
|
|
221
|
+
services.systemPromptManager.addContributor(skillsContributor);
|
|
222
|
+
this.logger.debug("Added SkillsContributor to system prompt");
|
|
223
|
+
}
|
|
224
|
+
await services.toolManager.initialize();
|
|
225
|
+
this.searchService = services.searchService;
|
|
186
226
|
this._isStarted = true;
|
|
187
227
|
this._isStopped = false;
|
|
188
228
|
this.logger.info("DextoAgent started successfully.");
|
|
@@ -258,6 +298,7 @@ Either:
|
|
|
258
298
|
} else {
|
|
259
299
|
this.logger.info("DextoAgent stopped successfully.");
|
|
260
300
|
}
|
|
301
|
+
this.agentEventBus.emit("agent:stopped");
|
|
261
302
|
} catch (error) {
|
|
262
303
|
this.logger.error("Failed to stop DextoAgent", {
|
|
263
304
|
error: error instanceof Error ? error.message : String(error)
|
|
@@ -941,6 +982,7 @@ Either:
|
|
|
941
982
|
*/
|
|
942
983
|
async endSession(sessionId) {
|
|
943
984
|
this.ensureStarted();
|
|
985
|
+
this.toolManager.clearSessionAutoApproveTools(sessionId);
|
|
944
986
|
return this.sessionManager.endSession(sessionId);
|
|
945
987
|
}
|
|
946
988
|
/**
|
|
@@ -950,6 +992,7 @@ Either:
|
|
|
950
992
|
*/
|
|
951
993
|
async deleteSession(sessionId) {
|
|
952
994
|
this.ensureStarted();
|
|
995
|
+
this.toolManager.clearSessionAutoApproveTools(sessionId);
|
|
953
996
|
return this.sessionManager.deleteSession(sessionId);
|
|
954
997
|
}
|
|
955
998
|
/**
|
|
@@ -1178,7 +1221,7 @@ Either:
|
|
|
1178
1221
|
return null;
|
|
1179
1222
|
}
|
|
1180
1223
|
const contributorContext = { mcpManager: this.mcpManager };
|
|
1181
|
-
const tools = await llmService.
|
|
1224
|
+
const tools = await llmService.getEnabledTools();
|
|
1182
1225
|
const beforeEstimate = await contextManager.getContextTokenEstimate(
|
|
1183
1226
|
contributorContext,
|
|
1184
1227
|
tools
|
|
@@ -1253,7 +1296,7 @@ Either:
|
|
|
1253
1296
|
const contextManager = session.getContextManager();
|
|
1254
1297
|
const contributorContext = { mcpManager: this.mcpManager };
|
|
1255
1298
|
const llmService = session.getLLMService();
|
|
1256
|
-
const tools = await llmService.
|
|
1299
|
+
const tools = await llmService.getEnabledTools();
|
|
1257
1300
|
const tokenEstimate = await contextManager.getContextTokenEstimate(
|
|
1258
1301
|
contributorContext,
|
|
1259
1302
|
tools
|
|
@@ -1274,7 +1317,7 @@ Either:
|
|
|
1274
1317
|
(msg) => msg.metadata?.isSummary === true || msg.metadata?.isSessionSummary === true
|
|
1275
1318
|
);
|
|
1276
1319
|
const llmConfig = runtimeConfig.llm;
|
|
1277
|
-
const { getModelDisplayName } = await import("../llm/registry.js");
|
|
1320
|
+
const { getModelDisplayName } = await import("../llm/registry/index.js");
|
|
1278
1321
|
const modelDisplayName = getModelDisplayName(llmConfig.model, llmConfig.provider);
|
|
1279
1322
|
const estimatedTokens = tokenEstimate.estimated;
|
|
1280
1323
|
const autoCompactBuffer = thresholdPercent > 0 && thresholdPercent < 1 ? Math.floor(maxContextTokens * (1 - thresholdPercent) / thresholdPercent) : 0;
|
|
@@ -1306,11 +1349,17 @@ Either:
|
|
|
1306
1349
|
// ============= LLM MANAGEMENT =============
|
|
1307
1350
|
/**
|
|
1308
1351
|
* Gets the current LLM configuration with all defaults applied.
|
|
1352
|
+
* @param sessionId Optional session ID to get config for specific session
|
|
1309
1353
|
* @returns Current LLM configuration
|
|
1310
1354
|
*/
|
|
1311
|
-
getCurrentLLMConfig() {
|
|
1355
|
+
getCurrentLLMConfig(sessionId) {
|
|
1312
1356
|
this.ensureStarted();
|
|
1313
|
-
|
|
1357
|
+
if (sessionId !== void 0 && (!sessionId || typeof sessionId !== "string")) {
|
|
1358
|
+
throw AgentError.apiValidationError(
|
|
1359
|
+
"sessionId must be a non-empty string when provided"
|
|
1360
|
+
);
|
|
1361
|
+
}
|
|
1362
|
+
return structuredClone(this.stateManager.getLLMConfig(sessionId));
|
|
1314
1363
|
}
|
|
1315
1364
|
/**
|
|
1316
1365
|
* Switches the LLM service while preserving conversation history.
|
|
@@ -1433,20 +1482,16 @@ Either:
|
|
|
1433
1482
|
*/
|
|
1434
1483
|
getSupportedModels() {
|
|
1435
1484
|
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
|
-
}));
|
|
1485
|
+
for (const provider of this.getSupportedProviders()) {
|
|
1486
|
+
result[provider] = this.getSupportedModelsForProvider(provider);
|
|
1444
1487
|
}
|
|
1445
1488
|
return result;
|
|
1446
1489
|
}
|
|
1447
1490
|
/**
|
|
1448
1491
|
* Gets supported models for a specific provider.
|
|
1449
1492
|
* Returns model information including metadata for the specified provider only.
|
|
1493
|
+
* For gateway providers like 'dexto-nova' with supportsAllRegistryModels, returns
|
|
1494
|
+
* all models from all accessible providers with their original provider info.
|
|
1450
1495
|
*
|
|
1451
1496
|
* @param provider The provider to get models for
|
|
1452
1497
|
* @returns Array of model information for the specified provider
|
|
@@ -1464,12 +1509,15 @@ Either:
|
|
|
1464
1509
|
* ```
|
|
1465
1510
|
*/
|
|
1466
1511
|
getSupportedModelsForProvider(provider) {
|
|
1467
|
-
const
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1512
|
+
const models = getAllModelsForProvider(provider);
|
|
1513
|
+
return models.map((model) => {
|
|
1514
|
+
const originalProvider = "originalProvider" in model ? model.originalProvider : provider;
|
|
1515
|
+
const defaultModel = getDefaultModelForProvider(originalProvider ?? provider);
|
|
1516
|
+
return {
|
|
1517
|
+
...model,
|
|
1518
|
+
isDefault: model.name === defaultModel
|
|
1519
|
+
};
|
|
1520
|
+
});
|
|
1473
1521
|
}
|
|
1474
1522
|
/**
|
|
1475
1523
|
* Infers the provider from a model name.
|
|
@@ -1651,6 +1699,13 @@ Either:
|
|
|
1651
1699
|
throw error;
|
|
1652
1700
|
}
|
|
1653
1701
|
}
|
|
1702
|
+
getMcpAuthProvider(name) {
|
|
1703
|
+
if (!name || typeof name !== "string") {
|
|
1704
|
+
throw AgentError.apiValidationError("name is required and must be a non-empty string");
|
|
1705
|
+
}
|
|
1706
|
+
this.ensureStarted();
|
|
1707
|
+
return this.mcpManager.getAuthProvider(name);
|
|
1708
|
+
}
|
|
1654
1709
|
/**
|
|
1655
1710
|
* Executes a tool from any source (MCP servers, custom tools, or internal tools).
|
|
1656
1711
|
* This is the unified interface for tool execution that can handle all tool types.
|
|
@@ -1694,6 +1749,90 @@ Either:
|
|
|
1694
1749
|
this.ensureStarted();
|
|
1695
1750
|
return await this.toolManager.getAllTools();
|
|
1696
1751
|
}
|
|
1752
|
+
/**
|
|
1753
|
+
* Gets tools enabled for LLM context (applies session overrides + global preferences).
|
|
1754
|
+
*/
|
|
1755
|
+
async getEnabledTools(sessionId) {
|
|
1756
|
+
this.ensureStarted();
|
|
1757
|
+
if (sessionId !== void 0 && (!sessionId || typeof sessionId !== "string")) {
|
|
1758
|
+
throw AgentError.apiValidationError("sessionId must be a non-empty string");
|
|
1759
|
+
}
|
|
1760
|
+
return this.toolManager.filterToolsForSession(
|
|
1761
|
+
await this.toolManager.getAllTools(),
|
|
1762
|
+
sessionId
|
|
1763
|
+
);
|
|
1764
|
+
}
|
|
1765
|
+
/**
|
|
1766
|
+
* Get global disabled tools (agent preferences).
|
|
1767
|
+
*/
|
|
1768
|
+
getGlobalDisabledTools() {
|
|
1769
|
+
this.ensureStarted();
|
|
1770
|
+
return this.toolManager.getGlobalDisabledTools();
|
|
1771
|
+
}
|
|
1772
|
+
/**
|
|
1773
|
+
* Set global disabled tools (agent preferences).
|
|
1774
|
+
*/
|
|
1775
|
+
setGlobalDisabledTools(toolNames) {
|
|
1776
|
+
this.ensureStarted();
|
|
1777
|
+
if (!Array.isArray(toolNames) || toolNames.some((name) => !name || typeof name !== "string")) {
|
|
1778
|
+
throw AgentError.apiValidationError("toolNames must be an array of non-empty strings");
|
|
1779
|
+
}
|
|
1780
|
+
this.toolManager.setGlobalDisabledTools(toolNames);
|
|
1781
|
+
}
|
|
1782
|
+
/**
|
|
1783
|
+
* Set session-level disabled tools (session override).
|
|
1784
|
+
*/
|
|
1785
|
+
setSessionDisabledTools(sessionId, toolNames) {
|
|
1786
|
+
this.ensureStarted();
|
|
1787
|
+
if (!sessionId || typeof sessionId !== "string") {
|
|
1788
|
+
throw AgentError.apiValidationError(
|
|
1789
|
+
"sessionId is required and must be a non-empty string"
|
|
1790
|
+
);
|
|
1791
|
+
}
|
|
1792
|
+
if (!Array.isArray(toolNames) || toolNames.some((name) => !name || typeof name !== "string")) {
|
|
1793
|
+
throw AgentError.apiValidationError("toolNames must be an array of non-empty strings");
|
|
1794
|
+
}
|
|
1795
|
+
this.toolManager.setSessionDisabledTools(sessionId, toolNames);
|
|
1796
|
+
}
|
|
1797
|
+
/**
|
|
1798
|
+
* Clear session-level disabled tools (session override).
|
|
1799
|
+
*/
|
|
1800
|
+
clearSessionDisabledTools(sessionId) {
|
|
1801
|
+
this.ensureStarted();
|
|
1802
|
+
if (!sessionId || typeof sessionId !== "string") {
|
|
1803
|
+
throw AgentError.apiValidationError(
|
|
1804
|
+
"sessionId is required and must be a non-empty string"
|
|
1805
|
+
);
|
|
1806
|
+
}
|
|
1807
|
+
this.toolManager.clearSessionDisabledTools(sessionId);
|
|
1808
|
+
}
|
|
1809
|
+
/**
|
|
1810
|
+
* Get session-level auto-approve tools.
|
|
1811
|
+
*/
|
|
1812
|
+
getSessionAutoApproveTools(sessionId) {
|
|
1813
|
+
this.ensureStarted();
|
|
1814
|
+
if (!sessionId || typeof sessionId !== "string") {
|
|
1815
|
+
throw AgentError.apiValidationError(
|
|
1816
|
+
"sessionId is required and must be a non-empty string"
|
|
1817
|
+
);
|
|
1818
|
+
}
|
|
1819
|
+
return this.toolManager.getSessionUserAutoApproveTools(sessionId) ?? [];
|
|
1820
|
+
}
|
|
1821
|
+
/**
|
|
1822
|
+
* Set session-level auto-approve tools (user selection).
|
|
1823
|
+
*/
|
|
1824
|
+
setSessionAutoApproveTools(sessionId, toolNames) {
|
|
1825
|
+
this.ensureStarted();
|
|
1826
|
+
if (!sessionId || typeof sessionId !== "string") {
|
|
1827
|
+
throw AgentError.apiValidationError(
|
|
1828
|
+
"sessionId is required and must be a non-empty string"
|
|
1829
|
+
);
|
|
1830
|
+
}
|
|
1831
|
+
if (!Array.isArray(toolNames) || toolNames.some((name) => !name || typeof name !== "string")) {
|
|
1832
|
+
throw AgentError.apiValidationError("toolNames must be an array of non-empty strings");
|
|
1833
|
+
}
|
|
1834
|
+
this.toolManager.setSessionUserAutoApproveTools(sessionId, toolNames);
|
|
1835
|
+
}
|
|
1697
1836
|
/**
|
|
1698
1837
|
* Gets all connected MCP clients.
|
|
1699
1838
|
* Used by the API layer to inspect client status.
|
|
@@ -1710,7 +1849,10 @@ Either:
|
|
|
1710
1849
|
*/
|
|
1711
1850
|
getMcpFailedConnections() {
|
|
1712
1851
|
this.ensureStarted();
|
|
1713
|
-
|
|
1852
|
+
const failures = this.mcpManager.getFailedConnections();
|
|
1853
|
+
return Object.fromEntries(
|
|
1854
|
+
Object.entries(failures).map(([name, error]) => [name, error.message])
|
|
1855
|
+
);
|
|
1714
1856
|
}
|
|
1715
1857
|
/**
|
|
1716
1858
|
* Gets the connection status of a single MCP server.
|
|
@@ -1734,7 +1876,12 @@ Either:
|
|
|
1734
1876
|
} else if (connectedClients.has(name)) {
|
|
1735
1877
|
status = "connected";
|
|
1736
1878
|
} else {
|
|
1737
|
-
|
|
1879
|
+
const errorCode = this.mcpManager.getFailedConnectionErrorCode(name);
|
|
1880
|
+
if (errorCode === MCPErrorCode.AUTH_REQUIRED) {
|
|
1881
|
+
status = "auth-required";
|
|
1882
|
+
} else {
|
|
1883
|
+
status = "error";
|
|
1884
|
+
}
|
|
1738
1885
|
}
|
|
1739
1886
|
const result = {
|
|
1740
1887
|
name,
|
|
@@ -1743,7 +1890,7 @@ Either:
|
|
|
1743
1890
|
status
|
|
1744
1891
|
};
|
|
1745
1892
|
if (failedConnections[name]) {
|
|
1746
|
-
result.error = failedConnections[name];
|
|
1893
|
+
result.error = failedConnections[name].message;
|
|
1747
1894
|
}
|
|
1748
1895
|
return result;
|
|
1749
1896
|
}
|
|
@@ -1770,7 +1917,12 @@ Either:
|
|
|
1770
1917
|
} else if (connectedClients.has(name)) {
|
|
1771
1918
|
status = "connected";
|
|
1772
1919
|
} else {
|
|
1773
|
-
|
|
1920
|
+
const errorCode = this.mcpManager.getFailedConnectionErrorCode(name);
|
|
1921
|
+
if (errorCode === MCPErrorCode.AUTH_REQUIRED) {
|
|
1922
|
+
status = "auth-required";
|
|
1923
|
+
} else {
|
|
1924
|
+
status = "error";
|
|
1925
|
+
}
|
|
1774
1926
|
}
|
|
1775
1927
|
const server = {
|
|
1776
1928
|
name,
|
|
@@ -1779,7 +1931,7 @@ Either:
|
|
|
1779
1931
|
status
|
|
1780
1932
|
};
|
|
1781
1933
|
if (failedConnections[name]) {
|
|
1782
|
-
server.error = failedConnections[name];
|
|
1934
|
+
server.error = failedConnections[name].message;
|
|
1783
1935
|
}
|
|
1784
1936
|
servers.push(server);
|
|
1785
1937
|
}
|
|
@@ -1928,10 +2080,11 @@ Either:
|
|
|
1928
2080
|
* - Prompt key resolution (resolving aliases)
|
|
1929
2081
|
* - Argument normalization (including special _context field)
|
|
1930
2082
|
* - Prompt execution and flattening
|
|
2083
|
+
* - Returning per-prompt overrides (allowedTools, model) for the invoker to apply
|
|
1931
2084
|
*
|
|
1932
2085
|
* @param name The prompt name or alias
|
|
1933
2086
|
* @param options Optional configuration for prompt resolution
|
|
1934
|
-
* @returns Promise resolving to the resolved text and
|
|
2087
|
+
* @returns Promise resolving to the resolved text, resource URIs, and optional overrides
|
|
1935
2088
|
*/
|
|
1936
2089
|
async resolvePrompt(name, options = {}) {
|
|
1937
2090
|
this.ensureStarted();
|
|
@@ -2067,6 +2220,12 @@ Either:
|
|
|
2067
2220
|
}
|
|
2068
2221
|
this.logger.debug("Approval handler registered");
|
|
2069
2222
|
}
|
|
2223
|
+
setMcpAuthProviderFactory(factory) {
|
|
2224
|
+
this.mcpAuthProviderFactory = factory;
|
|
2225
|
+
if (this._isStarted && this.services) {
|
|
2226
|
+
this.services.mcpManager.setAuthProviderFactory(factory);
|
|
2227
|
+
}
|
|
2228
|
+
}
|
|
2070
2229
|
/**
|
|
2071
2230
|
* Clear the current approval handler.
|
|
2072
2231
|
*
|
package/dist/agent/schemas.cjs
CHANGED
|
@@ -191,6 +191,11 @@ function createAgentConfigSchema(options = {}) {
|
|
|
191
191
|
memories: import_schemas3.MemoriesConfigSchema.describe(
|
|
192
192
|
"Memory configuration for system prompt inclusion (optional feature)"
|
|
193
193
|
).optional(),
|
|
194
|
+
agentFile: import_zod.z.object({
|
|
195
|
+
discoverInCwd: import_zod.z.boolean().default(true).describe(
|
|
196
|
+
"Whether to discover AGENTS.md/CLAUDE.md/GEMINI.md in the current working directory and include it in the system prompt"
|
|
197
|
+
)
|
|
198
|
+
}).strict().default({}).describe("Agent instruction file discovery configuration"),
|
|
194
199
|
image: import_zod.z.string().describe(
|
|
195
200
|
'Image package that provides required providers (e.g., "@dexto/image-local"). Optional - platform can load images via CLI flag, environment variable, or static imports.'
|
|
196
201
|
).optional(),
|