@dexto/server 1.5.8 → 1.6.1

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 (58) hide show
  1. package/dist/events/a2a-sse-subscriber.d.ts +1 -1
  2. package/dist/hono/__tests__/test-fixtures.cjs +27 -6
  3. package/dist/hono/__tests__/test-fixtures.d.ts +2 -1
  4. package/dist/hono/__tests__/test-fixtures.d.ts.map +1 -1
  5. package/dist/hono/__tests__/test-fixtures.js +31 -6
  6. package/dist/hono/index.cjs +17 -2
  7. package/dist/hono/index.d.ts +874 -58
  8. package/dist/hono/index.d.ts.map +1 -1
  9. package/dist/hono/index.js +17 -2
  10. package/dist/hono/routes/a2a-tasks.d.ts +6 -6
  11. package/dist/hono/routes/agents.cjs +38 -27
  12. package/dist/hono/routes/agents.d.ts +2 -1
  13. package/dist/hono/routes/agents.d.ts.map +1 -1
  14. package/dist/hono/routes/agents.js +37 -31
  15. package/dist/hono/routes/discovery.cjs +99 -22
  16. package/dist/hono/routes/discovery.d.ts +14 -12
  17. package/dist/hono/routes/discovery.d.ts.map +1 -1
  18. package/dist/hono/routes/discovery.js +89 -22
  19. package/dist/hono/routes/llm.d.ts +2 -2
  20. package/dist/hono/routes/mcp.cjs +96 -14
  21. package/dist/hono/routes/mcp.d.ts +139 -4
  22. package/dist/hono/routes/mcp.d.ts.map +1 -1
  23. package/dist/hono/routes/mcp.js +97 -15
  24. package/dist/hono/routes/memory.d.ts +1 -1
  25. package/dist/hono/routes/models.d.ts +1 -1
  26. package/dist/hono/routes/resources.d.ts +1 -1
  27. package/dist/hono/routes/schedules.cjs +456 -0
  28. package/dist/hono/routes/schedules.d.ts +472 -0
  29. package/dist/hono/routes/schedules.d.ts.map +1 -0
  30. package/dist/hono/routes/schedules.js +439 -0
  31. package/dist/hono/routes/search.d.ts +1 -1
  32. package/dist/hono/routes/sessions.cjs +10 -4
  33. package/dist/hono/routes/sessions.d.ts +135 -5
  34. package/dist/hono/routes/sessions.d.ts.map +1 -1
  35. package/dist/hono/routes/sessions.js +10 -4
  36. package/dist/hono/routes/tools.cjs +12 -19
  37. package/dist/hono/routes/tools.d.ts +5 -3
  38. package/dist/hono/routes/tools.d.ts.map +1 -1
  39. package/dist/hono/routes/tools.js +12 -19
  40. package/dist/hono/routes/workspaces.cjs +136 -0
  41. package/dist/hono/routes/workspaces.d.ts +77 -0
  42. package/dist/hono/routes/workspaces.d.ts.map +1 -0
  43. package/dist/hono/routes/workspaces.js +112 -0
  44. package/dist/hono/schemas/responses.cjs +82 -7
  45. package/dist/hono/schemas/responses.d.ts +366 -16
  46. package/dist/hono/schemas/responses.d.ts.map +1 -1
  47. package/dist/hono/schemas/responses.js +75 -6
  48. package/dist/hono/start-server.cjs +3 -3
  49. package/dist/hono/start-server.d.ts +15 -6
  50. package/dist/hono/start-server.d.ts.map +1 -1
  51. package/dist/hono/start-server.js +3 -3
  52. package/dist/index.cjs +9 -0
  53. package/dist/index.d.ts +1 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +4 -0
  56. package/dist/mcp/mcp-handler.d.ts +2 -2
  57. package/dist/mcp/mcp-handler.d.ts.map +1 -1
  58. package/package.json +8 -5
@@ -18,7 +18,7 @@ import { AgentEventBus } from '@dexto/core';
18
18
  * Usage:
19
19
  * ```typescript
20
20
  * const sseSubscriber = new A2ASseEventSubscriber();
21
- * sseSubscriber.subscribe(agent.agentEventBus);
21
+ * agent.registerSubscriber(sseSubscriber);
22
22
  *
23
23
  * // In route handler
24
24
  * const stream = sseSubscriber.createStream(taskId);
@@ -36,9 +36,16 @@ __export(test_fixtures_exports, {
36
36
  validators: () => validators
37
37
  });
38
38
  module.exports = __toCommonJS(test_fixtures_exports);
39
+ var import_agent_config = require("@dexto/agent-config");
40
+ var import_image_local = __toESM(require("@dexto/image-local"), 1);
39
41
  var import_core = require("@dexto/core");
42
+ var import_node_crypto = require("node:crypto");
43
+ var import_node_fs = require("node:fs");
44
+ var import_node_os = __toESM(require("node:os"), 1);
45
+ var import_node_path = __toESM(require("node:path"), 1);
40
46
  var import__ = require("../index.js");
41
47
  var import_node = require("../node/index.js");
48
+ var import_yaml = require("yaml");
42
49
  function createTestAgentConfig() {
43
50
  return {
44
51
  systemPrompt: "You are a test assistant.",
@@ -60,7 +67,10 @@ function createTestAgentConfig() {
60
67
  // Increased to accommodate all integration tests
61
68
  sessionTTL: 3600
62
69
  },
63
- toolConfirmation: {
70
+ tools: [],
71
+ hooks: [],
72
+ compaction: { type: "noop", enabled: false },
73
+ permissions: {
64
74
  mode: "auto-approve",
65
75
  timeout: 12e4
66
76
  },
@@ -72,7 +82,14 @@ function createTestAgentConfig() {
72
82
  }
73
83
  async function createTestAgent(config) {
74
84
  const agentConfig = config ?? createTestAgentConfig();
75
- const agent = new import_core.DextoAgent(agentConfig);
85
+ const validatedConfig = import_agent_config.AgentConfigSchema.parse(agentConfig);
86
+ const services = await (0, import_agent_config.resolveServicesFromConfig)(validatedConfig, import_image_local.default);
87
+ const agent = new import_core.DextoAgent(
88
+ (0, import_agent_config.toDextoAgentOptions)({
89
+ config: validatedConfig,
90
+ services
91
+ })
92
+ );
76
93
  await agent.start();
77
94
  return agent;
78
95
  }
@@ -85,16 +102,19 @@ async function startTestServer(agent, port, agentsContext) {
85
102
  });
86
103
  const getAgent = (_ctx) => agent;
87
104
  const getAgentCard = () => agentCard;
105
+ const agentConfigPath = import_node_path.default.join(import_node_os.default.tmpdir(), `dexto-test-agent-${(0, import_node_crypto.randomUUID)()}.yml`);
106
+ await import_node_fs.promises.writeFile(agentConfigPath, (0, import_yaml.stringify)(createTestAgentConfig()), "utf-8");
88
107
  const { WebhookEventSubscriber } = await import("../../events/webhook-subscriber.js");
89
108
  const { A2ASseEventSubscriber } = await import("../../events/a2a-sse-subscriber.js");
90
109
  const { ApprovalCoordinator } = await import("../../approval/approval-coordinator.js");
91
110
  const webhookSubscriber = new WebhookEventSubscriber();
92
111
  const sseSubscriber = new A2ASseEventSubscriber();
93
112
  const approvalCoordinator = new ApprovalCoordinator();
94
- webhookSubscriber.subscribe(agent.agentEventBus);
95
- sseSubscriber.subscribe(agent.agentEventBus);
113
+ agent.registerSubscriber(webhookSubscriber);
114
+ agent.registerSubscriber(sseSubscriber);
96
115
  const app = (0, import__.createDextoApp)({
97
116
  getAgent,
117
+ getAgentConfigPath: (_ctx) => agentConfigPath,
98
118
  getAgentCard,
99
119
  approvalCoordinator,
100
120
  webhookSubscriber,
@@ -136,6 +156,7 @@ async function startTestServer(agent, port, agentsContext) {
136
156
  else resolve();
137
157
  });
138
158
  });
159
+ await import_node_fs.promises.unlink(agentConfigPath).catch(() => void 0);
139
160
  if (agent.isStarted()) {
140
161
  await agent.stop();
141
162
  }
@@ -167,8 +188,8 @@ async function findAvailablePort() {
167
188
  }
168
189
  throw new Error(`Could not find an available port starting from ${startPort}`);
169
190
  }
170
- async function httpRequest(baseUrl, method, path, body, headers) {
171
- const url = `${baseUrl}${path}`;
191
+ async function httpRequest(baseUrl, method, path2, body, headers) {
192
+ const url = `${baseUrl}${path2}`;
172
193
  const options = {
173
194
  method,
174
195
  headers: {
@@ -1,5 +1,6 @@
1
+ import { type AgentConfig } from '@dexto/agent-config';
1
2
  import { DextoAgent } from '@dexto/core';
2
- import type { AgentConfig, AgentCard } from '@dexto/core';
3
+ import type { AgentCard } from '@dexto/core';
3
4
  import type { Server as HttpServer } from 'node:http';
4
5
  import type { DextoApp } from '../types.js';
5
6
  import { type NodeBridgeResult } from '../node/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"test-fixtures.d.ts","sourceRoot":"","sources":["../../../src/hono/__tests__/test-fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,CA4BnD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAK/E;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACjC,KAAK,EAAE,UAAU,EACjB,IAAI,CAAC,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,qBAAqB,CAAC,eAAe,CAAC,GACvD,OAAO,CAAC,UAAU,CAAC,CAwFrB;AAmCD;;GAEG;AACH,wBAAsB,WAAW,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC;IACP,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC,CAmCD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACnC,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,GACpD,IAAI,CAgBN;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;oBACH,OAAO,KAAG,OAAO;oBACjB,OAAO,KAAG,OAAO;qBAChB,OAAO,KAAG,OAAO;mBACnB,OAAO,KAAG,OAAO;oBAChB,OAAO,KAAG,OAAO;4BAET,OAAO,KAAG,OAAO;4BACjB,OAAO,KAAG,OAAO;2BAClB,OAAO,KAAG,OAAO;4BAChB,OAAO,KAAG,OAAO;CAG5C,CAAC"}
1
+ {"version":3,"file":"test-fixtures.d.ts","sourceRoot":"","sources":["../../../src/hono/__tests__/test-fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,KAAK,WAAW,EACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAmB,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAKtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGzD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,CA+BnD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAY/E;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACjC,KAAK,EAAE,UAAU,EACjB,IAAI,CAAC,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,qBAAqB,CAAC,eAAe,CAAC,GACvD,OAAO,CAAC,UAAU,CAAC,CA+FrB;AAmCD;;GAEG;AACH,wBAAsB,WAAW,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC;IACP,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC,CAmCD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACnC,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,GACpD,IAAI,CAgBN;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;oBACH,OAAO,KAAG,OAAO;oBACjB,OAAO,KAAG,OAAO;qBAChB,OAAO,KAAG,OAAO;mBACnB,OAAO,KAAG,OAAO;oBAChB,OAAO,KAAG,OAAO;4BAET,OAAO,KAAG,OAAO;4BACjB,OAAO,KAAG,OAAO;2BAClB,OAAO,KAAG,OAAO;4BAChB,OAAO,KAAG,OAAO;CAG5C,CAAC"}
@@ -1,6 +1,17 @@
1
+ import {
2
+ AgentConfigSchema,
3
+ resolveServicesFromConfig,
4
+ toDextoAgentOptions
5
+ } from "@dexto/agent-config";
6
+ import imageLocal from "@dexto/image-local";
1
7
  import { DextoAgent, createAgentCard } from "@dexto/core";
8
+ import { randomUUID } from "node:crypto";
9
+ import { promises as fs } from "node:fs";
10
+ import os from "node:os";
11
+ import path from "node:path";
2
12
  import { createDextoApp } from "../index.js";
3
13
  import { createNodeServer } from "../node/index.js";
14
+ import { stringify as yamlStringify } from "yaml";
4
15
  function createTestAgentConfig() {
5
16
  return {
6
17
  systemPrompt: "You are a test assistant.",
@@ -22,7 +33,10 @@ function createTestAgentConfig() {
22
33
  // Increased to accommodate all integration tests
23
34
  sessionTTL: 3600
24
35
  },
25
- toolConfirmation: {
36
+ tools: [],
37
+ hooks: [],
38
+ compaction: { type: "noop", enabled: false },
39
+ permissions: {
26
40
  mode: "auto-approve",
27
41
  timeout: 12e4
28
42
  },
@@ -34,7 +48,14 @@ function createTestAgentConfig() {
34
48
  }
35
49
  async function createTestAgent(config) {
36
50
  const agentConfig = config ?? createTestAgentConfig();
37
- const agent = new DextoAgent(agentConfig);
51
+ const validatedConfig = AgentConfigSchema.parse(agentConfig);
52
+ const services = await resolveServicesFromConfig(validatedConfig, imageLocal);
53
+ const agent = new DextoAgent(
54
+ toDextoAgentOptions({
55
+ config: validatedConfig,
56
+ services
57
+ })
58
+ );
38
59
  await agent.start();
39
60
  return agent;
40
61
  }
@@ -47,16 +68,19 @@ async function startTestServer(agent, port, agentsContext) {
47
68
  });
48
69
  const getAgent = (_ctx) => agent;
49
70
  const getAgentCard = () => agentCard;
71
+ const agentConfigPath = path.join(os.tmpdir(), `dexto-test-agent-${randomUUID()}.yml`);
72
+ await fs.writeFile(agentConfigPath, yamlStringify(createTestAgentConfig()), "utf-8");
50
73
  const { WebhookEventSubscriber } = await import("../../events/webhook-subscriber.js");
51
74
  const { A2ASseEventSubscriber } = await import("../../events/a2a-sse-subscriber.js");
52
75
  const { ApprovalCoordinator } = await import("../../approval/approval-coordinator.js");
53
76
  const webhookSubscriber = new WebhookEventSubscriber();
54
77
  const sseSubscriber = new A2ASseEventSubscriber();
55
78
  const approvalCoordinator = new ApprovalCoordinator();
56
- webhookSubscriber.subscribe(agent.agentEventBus);
57
- sseSubscriber.subscribe(agent.agentEventBus);
79
+ agent.registerSubscriber(webhookSubscriber);
80
+ agent.registerSubscriber(sseSubscriber);
58
81
  const app = createDextoApp({
59
82
  getAgent,
83
+ getAgentConfigPath: (_ctx) => agentConfigPath,
60
84
  getAgentCard,
61
85
  approvalCoordinator,
62
86
  webhookSubscriber,
@@ -98,6 +122,7 @@ async function startTestServer(agent, port, agentsContext) {
98
122
  else resolve();
99
123
  });
100
124
  });
125
+ await fs.unlink(agentConfigPath).catch(() => void 0);
101
126
  if (agent.isStarted()) {
102
127
  await agent.stop();
103
128
  }
@@ -129,8 +154,8 @@ async function findAvailablePort() {
129
154
  }
130
155
  throw new Error(`Could not find an available port starting from ${startPort}`);
131
156
  }
132
- async function httpRequest(baseUrl, method, path, body, headers) {
133
- const url = `${baseUrl}${path}`;
157
+ async function httpRequest(baseUrl, method, path2, body, headers) {
158
+ const url = `${baseUrl}${path2}`;
134
159
  const options = {
135
160
  method,
136
161
  headers: {
@@ -37,6 +37,8 @@ var import_webhooks = require("./routes/webhooks.js");
37
37
  var import_prompts = require("./routes/prompts.js");
38
38
  var import_resources = require("./routes/resources.js");
39
39
  var import_memory = require("./routes/memory.js");
40
+ var import_workspaces = require("./routes/workspaces.js");
41
+ var import_schedules = require("./routes/schedules.js");
40
42
  var import_agents = require("./routes/agents.js");
41
43
  var import_approvals = require("./routes/approvals.js");
42
44
  var import_queue = require("./routes/queue.js");
@@ -77,6 +79,7 @@ function createDextoApp(options) {
77
79
  const {
78
80
  apiPrefix,
79
81
  getAgent,
82
+ getAgentConfigPath,
80
83
  getAgentCard,
81
84
  approvalCoordinator,
82
85
  webhookSubscriber,
@@ -103,7 +106,15 @@ function createDextoApp(options) {
103
106
  app.use(middlewarePattern, import_redaction.prettyJsonMiddleware);
104
107
  app.use(middlewarePattern, import_redaction.redactionMiddleware);
105
108
  const routePrefix = normalizedPrefix;
106
- const fullApp = app.route("/health", (0, import_health.createHealthRouter)(getAgent)).route("/", (0, import_a2a.createA2aRouter)(getAgentCard)).route("/", (0, import_a2a_jsonrpc.createA2AJsonRpcRouter)(getAgent, sseSubscriber)).route("/", (0, import_a2a_tasks.createA2ATasksRouter)(getAgent, sseSubscriber)).route(routePrefix, (0, import_greeting.createGreetingRouter)(getAgent)).route(routePrefix, (0, import_messages.createMessagesRouter)(getAgent, approvalCoordinator)).route(routePrefix, (0, import_llm.createLlmRouter)(getAgent)).route(routePrefix, (0, import_sessions.createSessionsRouter)(getAgent)).route(routePrefix, (0, import_search.createSearchRouter)(getAgent)).route(routePrefix, (0, import_mcp.createMcpRouter)(getAgent)).route(routePrefix, (0, import_webhooks.createWebhooksRouter)(getAgent, webhookSubscriber)).route(routePrefix, (0, import_prompts.createPromptsRouter)(getAgent)).route(routePrefix, (0, import_resources.createResourcesRouter)(getAgent)).route(routePrefix, (0, import_memory.createMemoryRouter)(getAgent)).route(routePrefix, (0, import_approvals.createApprovalsRouter)(getAgent, approvalCoordinator)).route(routePrefix, (0, import_agents.createAgentsRouter)(getAgent, agentsContext || dummyAgentsContext)).route(routePrefix, (0, import_queue.createQueueRouter)(getAgent)).route(routePrefix, (0, import_openrouter.createOpenRouterRouter)()).route(routePrefix, (0, import_key.createKeyRouter)()).route(routePrefix, (0, import_tools.createToolsRouter)(getAgent)).route(routePrefix, (0, import_discovery.createDiscoveryRouter)()).route(routePrefix, (0, import_models.createModelsRouter)()).route(routePrefix, (0, import_dexto_auth.createDextoAuthRouter)(getAgent));
109
+ const resolvedGetAgentConfigPath = getAgentConfigPath ?? ((_ctx) => void 0);
110
+ const fullApp = app.route("/health", (0, import_health.createHealthRouter)(getAgent)).route("/", (0, import_a2a.createA2aRouter)(getAgentCard)).route("/", (0, import_a2a_jsonrpc.createA2AJsonRpcRouter)(getAgent, sseSubscriber)).route("/", (0, import_a2a_tasks.createA2ATasksRouter)(getAgent, sseSubscriber)).route(routePrefix, (0, import_greeting.createGreetingRouter)(getAgent)).route(routePrefix, (0, import_messages.createMessagesRouter)(getAgent, approvalCoordinator)).route(routePrefix, (0, import_llm.createLlmRouter)(getAgent)).route(routePrefix, (0, import_sessions.createSessionsRouter)(getAgent)).route(routePrefix, (0, import_search.createSearchRouter)(getAgent)).route(routePrefix, (0, import_mcp.createMcpRouter)(getAgent, resolvedGetAgentConfigPath)).route(routePrefix, (0, import_webhooks.createWebhooksRouter)(getAgent, webhookSubscriber)).route(routePrefix, (0, import_prompts.createPromptsRouter)(getAgent)).route(routePrefix, (0, import_resources.createResourcesRouter)(getAgent)).route(routePrefix, (0, import_memory.createMemoryRouter)(getAgent)).route(routePrefix, (0, import_workspaces.createWorkspacesRouter)(getAgent)).route(routePrefix, (0, import_schedules.createSchedulesRouter)(getAgent)).route(routePrefix, (0, import_approvals.createApprovalsRouter)(getAgent, approvalCoordinator)).route(
111
+ routePrefix,
112
+ (0, import_agents.createAgentsRouter)(
113
+ getAgent,
114
+ agentsContext || dummyAgentsContext,
115
+ resolvedGetAgentConfigPath
116
+ )
117
+ ).route(routePrefix, (0, import_queue.createQueueRouter)(getAgent)).route(routePrefix, (0, import_openrouter.createOpenRouterRouter)()).route(routePrefix, (0, import_key.createKeyRouter)()).route(routePrefix, (0, import_tools.createToolsRouter)(getAgent)).route(routePrefix, (0, import_discovery.createDiscoveryRouter)(resolvedGetAgentConfigPath)).route(routePrefix, (0, import_models.createModelsRouter)()).route(routePrefix, (0, import_dexto_auth.createDextoAuthRouter)(getAgent));
107
118
  fullApp.doc("/openapi.json", {
108
119
  openapi: "3.0.0",
109
120
  info: {
@@ -144,6 +155,10 @@ function createDextoApp(options) {
144
155
  name: "sessions",
145
156
  description: "Create and manage conversation sessions"
146
157
  },
158
+ {
159
+ name: "schedules",
160
+ description: "Create and manage automation schedules"
161
+ },
147
162
  {
148
163
  name: "llm",
149
164
  description: "Configure and switch between LLM providers and models"
@@ -194,7 +209,7 @@ function createDextoApp(options) {
194
209
  },
195
210
  {
196
211
  name: "tools",
197
- description: "List and inspect available tools from internal, custom, and MCP sources"
212
+ description: "List and inspect available tools from local and MCP sources"
198
213
  },
199
214
  {
200
215
  name: "models",