@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.
Files changed (140) hide show
  1. package/dist/agent/DextoAgent.cjs +94 -26
  2. package/dist/agent/DextoAgent.d.ts +17 -7
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +95 -27
  5. package/dist/agent/schemas.d.ts +417 -66
  6. package/dist/agent/schemas.d.ts.map +1 -1
  7. package/dist/context/utils.cjs +49 -3
  8. package/dist/context/utils.d.ts.map +1 -1
  9. package/dist/context/utils.js +49 -3
  10. package/dist/errors/types.cjs +2 -1
  11. package/dist/errors/types.d.ts +2 -1
  12. package/dist/errors/types.d.ts.map +1 -1
  13. package/dist/errors/types.js +2 -1
  14. package/dist/image/types.d.ts +15 -0
  15. package/dist/image/types.d.ts.map +1 -1
  16. package/dist/llm/error-codes.cjs +1 -0
  17. package/dist/llm/error-codes.d.ts +1 -0
  18. package/dist/llm/error-codes.d.ts.map +1 -1
  19. package/dist/llm/error-codes.js +1 -0
  20. package/dist/llm/errors.cjs +15 -0
  21. package/dist/llm/errors.d.ts +15 -8
  22. package/dist/llm/errors.d.ts.map +1 -1
  23. package/dist/llm/errors.js +15 -0
  24. package/dist/llm/executor/turn-executor.cjs +27 -0
  25. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  26. package/dist/llm/executor/turn-executor.js +27 -0
  27. package/dist/llm/registry.cjs +472 -28
  28. package/dist/llm/registry.d.ts +80 -4
  29. package/dist/llm/registry.d.ts.map +1 -1
  30. package/dist/llm/registry.js +464 -25
  31. package/dist/llm/resolver.cjs +13 -0
  32. package/dist/llm/resolver.d.ts.map +1 -1
  33. package/dist/llm/resolver.js +16 -1
  34. package/dist/llm/schemas.d.ts +59 -59
  35. package/dist/llm/services/factory.cjs +41 -25
  36. package/dist/llm/services/factory.d.ts +20 -1
  37. package/dist/llm/services/factory.d.ts.map +1 -1
  38. package/dist/llm/services/factory.js +42 -26
  39. package/dist/llm/services/test-utils.integration.cjs +5 -1
  40. package/dist/llm/services/test-utils.integration.d.ts.map +1 -1
  41. package/dist/llm/services/test-utils.integration.js +5 -1
  42. package/dist/llm/types.cjs +5 -2
  43. package/dist/llm/types.d.ts +1 -1
  44. package/dist/llm/types.d.ts.map +1 -1
  45. package/dist/llm/types.js +5 -2
  46. package/dist/logger/v2/dexto-logger.cjs +4 -0
  47. package/dist/logger/v2/dexto-logger.d.ts +3 -0
  48. package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
  49. package/dist/logger/v2/dexto-logger.js +4 -0
  50. package/dist/logger/v2/types.d.ts +2 -0
  51. package/dist/logger/v2/types.d.ts.map +1 -1
  52. package/dist/mcp/error-codes.cjs +1 -0
  53. package/dist/mcp/error-codes.d.ts +1 -0
  54. package/dist/mcp/error-codes.d.ts.map +1 -1
  55. package/dist/mcp/error-codes.js +1 -0
  56. package/dist/mcp/errors.cjs +13 -0
  57. package/dist/mcp/errors.d.ts +7 -0
  58. package/dist/mcp/errors.d.ts.map +1 -1
  59. package/dist/mcp/errors.js +13 -0
  60. package/dist/mcp/manager.cjs +46 -4
  61. package/dist/mcp/manager.d.ts +10 -2
  62. package/dist/mcp/manager.d.ts.map +1 -1
  63. package/dist/mcp/manager.js +46 -4
  64. package/dist/mcp/mcp-client.cjs +89 -5
  65. package/dist/mcp/mcp-client.d.ts +5 -1
  66. package/dist/mcp/mcp-client.d.ts.map +1 -1
  67. package/dist/mcp/mcp-client.js +89 -5
  68. package/dist/mcp/schemas.cjs +6 -1
  69. package/dist/mcp/schemas.d.ts +1 -1
  70. package/dist/mcp/schemas.d.ts.map +1 -1
  71. package/dist/mcp/schemas.js +6 -1
  72. package/dist/mcp/types.d.ts +5 -0
  73. package/dist/mcp/types.d.ts.map +1 -1
  74. package/dist/prompts/index.d.ts +1 -1
  75. package/dist/prompts/index.d.ts.map +1 -1
  76. package/dist/prompts/prompt-manager.cjs +90 -4
  77. package/dist/prompts/prompt-manager.d.ts +16 -6
  78. package/dist/prompts/prompt-manager.d.ts.map +1 -1
  79. package/dist/prompts/prompt-manager.js +90 -4
  80. package/dist/prompts/providers/config-prompt-provider.cjs +104 -10
  81. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  82. package/dist/prompts/providers/config-prompt-provider.js +105 -11
  83. package/dist/prompts/providers/custom-prompt-provider.cjs +1 -0
  84. package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
  85. package/dist/prompts/providers/custom-prompt-provider.js +1 -0
  86. package/dist/prompts/providers/mcp-prompt-provider.cjs +1 -0
  87. package/dist/prompts/providers/mcp-prompt-provider.d.ts.map +1 -1
  88. package/dist/prompts/providers/mcp-prompt-provider.js +1 -0
  89. package/dist/prompts/schemas.cjs +28 -2
  90. package/dist/prompts/schemas.d.ts +130 -0
  91. package/dist/prompts/schemas.d.ts.map +1 -1
  92. package/dist/prompts/schemas.js +28 -2
  93. package/dist/prompts/types.d.ts +55 -3
  94. package/dist/prompts/types.d.ts.map +1 -1
  95. package/dist/session/chat-session.d.ts +1 -1
  96. package/dist/session/chat-session.d.ts.map +1 -1
  97. package/dist/session/index.d.ts +1 -1
  98. package/dist/session/index.d.ts.map +1 -1
  99. package/dist/session/session-manager.cjs +47 -3
  100. package/dist/session/session-manager.d.ts +10 -0
  101. package/dist/session/session-manager.d.ts.map +1 -1
  102. package/dist/session/session-manager.js +47 -3
  103. package/dist/systemPrompt/contributors.cjs +42 -0
  104. package/dist/systemPrompt/contributors.d.ts +13 -0
  105. package/dist/systemPrompt/contributors.d.ts.map +1 -1
  106. package/dist/systemPrompt/contributors.js +41 -0
  107. package/dist/tools/errors.cjs +7 -3
  108. package/dist/tools/errors.d.ts +5 -1
  109. package/dist/tools/errors.d.ts.map +1 -1
  110. package/dist/tools/errors.js +7 -3
  111. package/dist/tools/internal-tools/constants.cjs +2 -1
  112. package/dist/tools/internal-tools/constants.d.ts +1 -1
  113. package/dist/tools/internal-tools/constants.d.ts.map +1 -1
  114. package/dist/tools/internal-tools/constants.js +2 -1
  115. package/dist/tools/internal-tools/implementations/invoke-skill-tool.cjs +140 -0
  116. package/dist/tools/internal-tools/implementations/invoke-skill-tool.d.ts +24 -0
  117. package/dist/tools/internal-tools/implementations/invoke-skill-tool.d.ts.map +1 -0
  118. package/dist/tools/internal-tools/implementations/invoke-skill-tool.js +117 -0
  119. package/dist/tools/internal-tools/provider.cjs +15 -0
  120. package/dist/tools/internal-tools/provider.d.ts +12 -0
  121. package/dist/tools/internal-tools/provider.d.ts.map +1 -1
  122. package/dist/tools/internal-tools/provider.js +15 -0
  123. package/dist/tools/internal-tools/registry.cjs +6 -0
  124. package/dist/tools/internal-tools/registry.d.ts +34 -0
  125. package/dist/tools/internal-tools/registry.d.ts.map +1 -1
  126. package/dist/tools/internal-tools/registry.js +6 -0
  127. package/dist/tools/schemas.d.ts +1 -1
  128. package/dist/tools/schemas.d.ts.map +1 -1
  129. package/dist/tools/tool-manager.cjs +230 -79
  130. package/dist/tools/tool-manager.d.ts +89 -8
  131. package/dist/tools/tool-manager.d.ts.map +1 -1
  132. package/dist/tools/tool-manager.js +231 -80
  133. package/dist/utils/api-key-resolver.cjs +5 -2
  134. package/dist/utils/api-key-resolver.d.ts.map +1 -1
  135. package/dist/utils/api-key-resolver.js +5 -2
  136. package/dist/utils/service-initializer.cjs +8 -2
  137. package/dist/utils/service-initializer.d.ts +5 -1
  138. package/dist/utils/service-initializer.d.ts.map +1 -1
  139. package/dist/utils/service-initializer.js +8 -2
  140. package/package.json +1 -1
@@ -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
- LLM_REGISTRY
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
- return structuredClone(this.stateManager.getLLMConfig());
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 providers = getSupportedProviders();
1437
- for (const provider of providers) {
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 defaultModel = getDefaultModelForProvider(provider);
1468
- const providerInfo = LLM_REGISTRY[provider];
1469
- return providerInfo.models.map((model) => ({
1470
- ...model,
1471
- isDefault: model.name === defaultModel
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
- return this.mcpManager.getFailedConnections();
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
- status = "error";
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
- status = "error";
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 resource URIs
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
  *