@dexto/server 1.2.5

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 (174) hide show
  1. package/LICENSE +44 -0
  2. package/dist/a2a/adapters/index.cjs +42 -0
  3. package/dist/a2a/adapters/index.d.ts +10 -0
  4. package/dist/a2a/adapters/index.d.ts.map +1 -0
  5. package/dist/a2a/adapters/index.js +12 -0
  6. package/dist/a2a/adapters/message.cjs +193 -0
  7. package/dist/a2a/adapters/message.d.ts +50 -0
  8. package/dist/a2a/adapters/message.d.ts.map +1 -0
  9. package/dist/a2a/adapters/message.js +167 -0
  10. package/dist/a2a/adapters/state.cjs +57 -0
  11. package/dist/a2a/adapters/state.d.ts +36 -0
  12. package/dist/a2a/adapters/state.d.ts.map +1 -0
  13. package/dist/a2a/adapters/state.js +32 -0
  14. package/dist/a2a/adapters/task-view.cjs +85 -0
  15. package/dist/a2a/adapters/task-view.d.ts +58 -0
  16. package/dist/a2a/adapters/task-view.d.ts.map +1 -0
  17. package/dist/a2a/adapters/task-view.js +60 -0
  18. package/dist/a2a/index.cjs +51 -0
  19. package/dist/a2a/index.d.ts +15 -0
  20. package/dist/a2a/index.d.ts.map +1 -0
  21. package/dist/a2a/index.js +30 -0
  22. package/dist/a2a/jsonrpc/index.cjs +38 -0
  23. package/dist/a2a/jsonrpc/index.d.ts +11 -0
  24. package/dist/a2a/jsonrpc/index.d.ts.map +1 -0
  25. package/dist/a2a/jsonrpc/index.js +10 -0
  26. package/dist/a2a/jsonrpc/methods.cjs +183 -0
  27. package/dist/a2a/jsonrpc/methods.d.ts +110 -0
  28. package/dist/a2a/jsonrpc/methods.d.ts.map +1 -0
  29. package/dist/a2a/jsonrpc/methods.js +159 -0
  30. package/dist/a2a/jsonrpc/server.cjs +199 -0
  31. package/dist/a2a/jsonrpc/server.d.ts +100 -0
  32. package/dist/a2a/jsonrpc/server.d.ts.map +1 -0
  33. package/dist/a2a/jsonrpc/server.js +175 -0
  34. package/dist/a2a/jsonrpc/types.cjs +47 -0
  35. package/dist/a2a/jsonrpc/types.d.ts +91 -0
  36. package/dist/a2a/jsonrpc/types.d.ts.map +1 -0
  37. package/dist/a2a/jsonrpc/types.js +21 -0
  38. package/dist/a2a/types.cjs +16 -0
  39. package/dist/a2a/types.d.ts +250 -0
  40. package/dist/a2a/types.d.ts.map +1 -0
  41. package/dist/a2a/types.js +0 -0
  42. package/dist/approval/approval-coordinator.cjs +87 -0
  43. package/dist/approval/approval-coordinator.d.ts +52 -0
  44. package/dist/approval/approval-coordinator.d.ts.map +1 -0
  45. package/dist/approval/approval-coordinator.js +63 -0
  46. package/dist/approval/manual-approval-handler.cjs +100 -0
  47. package/dist/approval/manual-approval-handler.d.ts +32 -0
  48. package/dist/approval/manual-approval-handler.d.ts.map +1 -0
  49. package/dist/approval/manual-approval-handler.js +76 -0
  50. package/dist/events/a2a-sse-subscriber.cjs +271 -0
  51. package/dist/events/a2a-sse-subscriber.d.ts +94 -0
  52. package/dist/events/a2a-sse-subscriber.d.ts.map +1 -0
  53. package/dist/events/a2a-sse-subscriber.js +247 -0
  54. package/dist/events/types.cjs +16 -0
  55. package/dist/events/types.d.ts +15 -0
  56. package/dist/events/types.d.ts.map +1 -0
  57. package/dist/events/types.js +0 -0
  58. package/dist/events/webhook-subscriber.cjs +301 -0
  59. package/dist/events/webhook-subscriber.d.ts +64 -0
  60. package/dist/events/webhook-subscriber.d.ts.map +1 -0
  61. package/dist/events/webhook-subscriber.js +269 -0
  62. package/dist/events/webhook-types.cjs +16 -0
  63. package/dist/events/webhook-types.d.ts +91 -0
  64. package/dist/events/webhook-types.d.ts.map +1 -0
  65. package/dist/events/webhook-types.js +0 -0
  66. package/dist/hono/__tests__/test-fixtures.cjs +236 -0
  67. package/dist/hono/__tests__/test-fixtures.d.ts +65 -0
  68. package/dist/hono/__tests__/test-fixtures.d.ts.map +1 -0
  69. package/dist/hono/__tests__/test-fixtures.js +197 -0
  70. package/dist/hono/index.cjs +166 -0
  71. package/dist/hono/index.d.ts +2783 -0
  72. package/dist/hono/index.d.ts.map +1 -0
  73. package/dist/hono/index.js +141 -0
  74. package/dist/hono/middleware/auth.cjs +75 -0
  75. package/dist/hono/middleware/auth.d.ts +3 -0
  76. package/dist/hono/middleware/auth.d.ts.map +1 -0
  77. package/dist/hono/middleware/auth.js +51 -0
  78. package/dist/hono/middleware/cors.cjs +57 -0
  79. package/dist/hono/middleware/cors.d.ts +9 -0
  80. package/dist/hono/middleware/cors.d.ts.map +1 -0
  81. package/dist/hono/middleware/cors.js +33 -0
  82. package/dist/hono/middleware/error.cjs +131 -0
  83. package/dist/hono/middleware/error.d.ts +5 -0
  84. package/dist/hono/middleware/error.d.ts.map +1 -0
  85. package/dist/hono/middleware/error.js +105 -0
  86. package/dist/hono/middleware/redaction.cjs +45 -0
  87. package/dist/hono/middleware/redaction.d.ts +4 -0
  88. package/dist/hono/middleware/redaction.d.ts.map +1 -0
  89. package/dist/hono/middleware/redaction.js +20 -0
  90. package/dist/hono/node/index.cjs +139 -0
  91. package/dist/hono/node/index.d.ts +19 -0
  92. package/dist/hono/node/index.d.ts.map +1 -0
  93. package/dist/hono/node/index.js +115 -0
  94. package/dist/hono/routes/a2a-jsonrpc.cjs +119 -0
  95. package/dist/hono/routes/a2a-jsonrpc.d.ts +46 -0
  96. package/dist/hono/routes/a2a-jsonrpc.d.ts.map +1 -0
  97. package/dist/hono/routes/a2a-jsonrpc.js +95 -0
  98. package/dist/hono/routes/a2a-tasks.cjs +315 -0
  99. package/dist/hono/routes/a2a-tasks.d.ts +530 -0
  100. package/dist/hono/routes/a2a-tasks.d.ts.map +1 -0
  101. package/dist/hono/routes/a2a-tasks.js +291 -0
  102. package/dist/hono/routes/a2a.cjs +36 -0
  103. package/dist/hono/routes/a2a.d.ts +4 -0
  104. package/dist/hono/routes/a2a.d.ts.map +1 -0
  105. package/dist/hono/routes/a2a.js +12 -0
  106. package/dist/hono/routes/agents.cjs +735 -0
  107. package/dist/hono/routes/agents.d.ts +650 -0
  108. package/dist/hono/routes/agents.d.ts.map +1 -0
  109. package/dist/hono/routes/agents.js +711 -0
  110. package/dist/hono/routes/approvals.cjs +125 -0
  111. package/dist/hono/routes/approvals.d.ts +89 -0
  112. package/dist/hono/routes/approvals.d.ts.map +1 -0
  113. package/dist/hono/routes/approvals.js +101 -0
  114. package/dist/hono/routes/greeting.cjs +60 -0
  115. package/dist/hono/routes/greeting.d.ts +19 -0
  116. package/dist/hono/routes/greeting.d.ts.map +1 -0
  117. package/dist/hono/routes/greeting.js +36 -0
  118. package/dist/hono/routes/health.cjs +45 -0
  119. package/dist/hono/routes/health.d.ts +17 -0
  120. package/dist/hono/routes/health.d.ts.map +1 -0
  121. package/dist/hono/routes/health.js +21 -0
  122. package/dist/hono/routes/llm.cjs +298 -0
  123. package/dist/hono/routes/llm.d.ts +294 -0
  124. package/dist/hono/routes/llm.d.ts.map +1 -0
  125. package/dist/hono/routes/llm.js +287 -0
  126. package/dist/hono/routes/mcp.cjs +356 -0
  127. package/dist/hono/routes/mcp.d.ts +246 -0
  128. package/dist/hono/routes/mcp.d.ts.map +1 -0
  129. package/dist/hono/routes/mcp.js +332 -0
  130. package/dist/hono/routes/memory.cjs +192 -0
  131. package/dist/hono/routes/memory.d.ts +146 -0
  132. package/dist/hono/routes/memory.d.ts.map +1 -0
  133. package/dist/hono/routes/memory.js +168 -0
  134. package/dist/hono/routes/messages.cjs +320 -0
  135. package/dist/hono/routes/messages.d.ts +163 -0
  136. package/dist/hono/routes/messages.d.ts.map +1 -0
  137. package/dist/hono/routes/messages.js +296 -0
  138. package/dist/hono/routes/prompts.cjs +228 -0
  139. package/dist/hono/routes/prompts.d.ts +150 -0
  140. package/dist/hono/routes/prompts.d.ts.map +1 -0
  141. package/dist/hono/routes/prompts.js +204 -0
  142. package/dist/hono/routes/resources.cjs +110 -0
  143. package/dist/hono/routes/resources.d.ts +76 -0
  144. package/dist/hono/routes/resources.d.ts.map +1 -0
  145. package/dist/hono/routes/resources.js +86 -0
  146. package/dist/hono/routes/search.cjs +109 -0
  147. package/dist/hono/routes/search.d.ts +137 -0
  148. package/dist/hono/routes/search.d.ts.map +1 -0
  149. package/dist/hono/routes/search.js +85 -0
  150. package/dist/hono/routes/sessions.cjs +366 -0
  151. package/dist/hono/routes/sessions.d.ts +229 -0
  152. package/dist/hono/routes/sessions.d.ts.map +1 -0
  153. package/dist/hono/routes/sessions.js +342 -0
  154. package/dist/hono/routes/webhooks.cjs +228 -0
  155. package/dist/hono/routes/webhooks.d.ts +127 -0
  156. package/dist/hono/routes/webhooks.d.ts.map +1 -0
  157. package/dist/hono/routes/webhooks.js +204 -0
  158. package/dist/hono/schemas/responses.cjs +276 -0
  159. package/dist/hono/schemas/responses.d.ts +1418 -0
  160. package/dist/hono/schemas/responses.d.ts.map +1 -0
  161. package/dist/hono/schemas/responses.js +227 -0
  162. package/dist/hono/types.cjs +16 -0
  163. package/dist/hono/types.d.ts +6 -0
  164. package/dist/hono/types.d.ts.map +1 -0
  165. package/dist/hono/types.js +0 -0
  166. package/dist/index.cjs +38 -0
  167. package/dist/index.d.ts +11 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +9 -0
  170. package/dist/mcp/mcp-handler.cjs +145 -0
  171. package/dist/mcp/mcp-handler.d.ts +14 -0
  172. package/dist/mcp/mcp-handler.d.ts.map +1 -0
  173. package/dist/mcp/mcp-handler.js +118 -0
  174. package/package.json +59 -0
@@ -0,0 +1,197 @@
1
+ import { DextoAgent, createAgentCard } from "@dexto/core";
2
+ import { createDextoApp } from "../index.js";
3
+ import { createNodeServer } from "../node/index.js";
4
+ function createTestAgentConfig() {
5
+ return {
6
+ systemPrompt: "You are a test assistant.",
7
+ llm: {
8
+ provider: "openai",
9
+ model: "gpt-5-nano",
10
+ apiKey: "test-key-123",
11
+ // Mock key for testing
12
+ router: "vercel",
13
+ maxIterations: 10
14
+ },
15
+ mcpServers: {},
16
+ storage: {
17
+ cache: { type: "in-memory" },
18
+ database: { type: "in-memory" },
19
+ blob: { type: "local", storePath: "/tmp/test-blobs" }
20
+ },
21
+ sessions: {
22
+ maxSessions: 10,
23
+ sessionTTL: 3600
24
+ },
25
+ toolConfirmation: {
26
+ mode: "auto-approve",
27
+ timeout: 12e4
28
+ },
29
+ elicitation: {
30
+ enabled: false,
31
+ timeout: 12e4
32
+ }
33
+ };
34
+ }
35
+ async function createTestAgent(config) {
36
+ const agentConfig = config ?? createTestAgentConfig();
37
+ const agent = new DextoAgent(agentConfig);
38
+ await agent.start();
39
+ return agent;
40
+ }
41
+ async function startTestServer(agent, port, agentsContext) {
42
+ const serverPort = port ?? await findAvailablePort();
43
+ const agentCard = createAgentCard({
44
+ defaultName: "test-agent",
45
+ defaultVersion: "1.0.0",
46
+ defaultBaseUrl: `http://localhost:${serverPort}`
47
+ });
48
+ const getAgent = () => agent;
49
+ const getAgentCard = () => agentCard;
50
+ const { WebhookEventSubscriber } = await import("../../events/webhook-subscriber.js");
51
+ const { A2ASseEventSubscriber } = await import("../../events/a2a-sse-subscriber.js");
52
+ const { ApprovalCoordinator } = await import("../../approval/approval-coordinator.js");
53
+ const webhookSubscriber = new WebhookEventSubscriber();
54
+ const sseSubscriber = new A2ASseEventSubscriber();
55
+ const approvalCoordinator = new ApprovalCoordinator();
56
+ webhookSubscriber.subscribe(agent.agentEventBus);
57
+ sseSubscriber.subscribe(agent.agentEventBus);
58
+ const app = createDextoApp({
59
+ getAgent,
60
+ getAgentCard,
61
+ approvalCoordinator,
62
+ webhookSubscriber,
63
+ sseSubscriber,
64
+ ...agentsContext ? { agentsContext } : {}
65
+ // Include agentsContext only if provided
66
+ });
67
+ const bridge = createNodeServer(app, {
68
+ getAgent: () => agent,
69
+ port: serverPort
70
+ });
71
+ const updatedAgentCard = createAgentCard({
72
+ defaultName: "test-agent",
73
+ defaultVersion: "1.0.0",
74
+ defaultBaseUrl: `http://localhost:${serverPort}`
75
+ });
76
+ await new Promise((resolve, reject) => {
77
+ bridge.server.listen(serverPort, "0.0.0.0", () => {
78
+ resolve();
79
+ });
80
+ bridge.server.on("error", reject);
81
+ });
82
+ const baseUrl = `http://localhost:${serverPort}`;
83
+ return {
84
+ server: bridge.server,
85
+ app,
86
+ bridge,
87
+ agent,
88
+ agentCard: updatedAgentCard,
89
+ baseUrl,
90
+ port: serverPort,
91
+ cleanup: async () => {
92
+ webhookSubscriber.cleanup();
93
+ sseSubscriber.cleanup();
94
+ approvalCoordinator.removeAllListeners();
95
+ await new Promise((resolve, reject) => {
96
+ bridge.server.close((err) => {
97
+ if (err) reject(err);
98
+ else resolve();
99
+ });
100
+ });
101
+ if (agent.isStarted()) {
102
+ await agent.stop();
103
+ }
104
+ }
105
+ };
106
+ }
107
+ async function findAvailablePort() {
108
+ const { createServer } = await import("node:http");
109
+ const startPort = 49152 + Math.floor(Math.random() * 1e3);
110
+ for (let port = startPort; port < 65535; port++) {
111
+ try {
112
+ await new Promise((resolve, reject) => {
113
+ const server = createServer();
114
+ server.on("error", (err) => {
115
+ if (err.code === "EADDRINUSE") {
116
+ reject(new Error(`Port ${port} is in use`));
117
+ } else {
118
+ reject(err);
119
+ }
120
+ });
121
+ server.listen(port, () => {
122
+ server.close(() => resolve());
123
+ });
124
+ });
125
+ return port;
126
+ } catch {
127
+ continue;
128
+ }
129
+ }
130
+ throw new Error(`Could not find an available port starting from ${startPort}`);
131
+ }
132
+ async function httpRequest(baseUrl, method, path, body, headers) {
133
+ const url = `${baseUrl}${path}`;
134
+ const options = {
135
+ method,
136
+ headers: {
137
+ "Content-Type": "application/json",
138
+ ...headers
139
+ }
140
+ };
141
+ if (body !== void 0) {
142
+ options.body = JSON.stringify(body);
143
+ }
144
+ const response = await fetch(url, options);
145
+ const text = await response.text();
146
+ let parsedBody;
147
+ try {
148
+ parsedBody = JSON.parse(text);
149
+ } catch {
150
+ parsedBody = text;
151
+ }
152
+ const headersObject = {};
153
+ response.headers.forEach((value, key) => {
154
+ headersObject[key] = value;
155
+ });
156
+ return {
157
+ status: response.status,
158
+ headers: headersObject,
159
+ body: parsedBody,
160
+ text
161
+ };
162
+ }
163
+ function expectResponseStructure(body, schema) {
164
+ if (typeof body !== "object" || body === null) {
165
+ throw new Error(`Expected object response, got ${typeof body}`);
166
+ }
167
+ const bodyObj = body;
168
+ for (const [key, validator] of Object.entries(schema)) {
169
+ if (!(key in bodyObj)) {
170
+ throw new Error(`Missing required field: ${key}`);
171
+ }
172
+ if (!validator(bodyObj[key])) {
173
+ throw new Error(
174
+ `Invalid type for field '${key}': expected validator to return true, got false`
175
+ );
176
+ }
177
+ }
178
+ }
179
+ const validators = {
180
+ string: (value) => typeof value === "string",
181
+ number: (value) => typeof value === "number",
182
+ boolean: (value) => typeof value === "boolean",
183
+ array: (value) => Array.isArray(value),
184
+ object: (value) => typeof value === "object" && value !== null && !Array.isArray(value),
185
+ optionalString: (value) => value === void 0 || typeof value === "string",
186
+ optionalNumber: (value) => value === void 0 || typeof value === "number",
187
+ optionalArray: (value) => value === void 0 || Array.isArray(value),
188
+ optionalObject: (value) => value === void 0 || typeof value === "object" && value !== null && !Array.isArray(value)
189
+ };
190
+ export {
191
+ createTestAgent,
192
+ createTestAgentConfig,
193
+ expectResponseStructure,
194
+ httpRequest,
195
+ startTestServer,
196
+ validators
197
+ };
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var hono_exports = {};
20
+ __export(hono_exports, {
21
+ createDextoApp: () => createDextoApp
22
+ });
23
+ module.exports = __toCommonJS(hono_exports);
24
+ var import_zod_openapi = require("@hono/zod-openapi");
25
+ var import_health = require("./routes/health.js");
26
+ var import_greeting = require("./routes/greeting.js");
27
+ var import_messages = require("./routes/messages.js");
28
+ var import_llm = require("./routes/llm.js");
29
+ var import_sessions = require("./routes/sessions.js");
30
+ var import_search = require("./routes/search.js");
31
+ var import_mcp = require("./routes/mcp.js");
32
+ var import_a2a = require("./routes/a2a.js");
33
+ var import_a2a_jsonrpc = require("./routes/a2a-jsonrpc.js");
34
+ var import_a2a_tasks = require("./routes/a2a-tasks.js");
35
+ var import_webhooks = require("./routes/webhooks.js");
36
+ var import_prompts = require("./routes/prompts.js");
37
+ var import_resources = require("./routes/resources.js");
38
+ var import_memory = require("./routes/memory.js");
39
+ var import_agents = require("./routes/agents.js");
40
+ var import_approvals = require("./routes/approvals.js");
41
+ var import_error = require("./middleware/error.js");
42
+ var import_redaction = require("./middleware/redaction.js");
43
+ var import_cors = require("./middleware/cors.js");
44
+ var import_auth = require("./middleware/auth.js");
45
+ var import_node_fs = require("node:fs");
46
+ var import_node_url = require("node:url");
47
+ var import_node_path = require("node:path");
48
+ const import_meta = {};
49
+ const __filename = (0, import_node_url.fileURLToPath)(import_meta.url);
50
+ const __dirname = (0, import_node_path.dirname)(__filename);
51
+ const packageJson = JSON.parse((0, import_node_fs.readFileSync)((0, import_node_path.join)(__dirname, "../../package.json"), "utf-8"));
52
+ const dummyAgentsContext = {
53
+ switchAgentById: async () => {
54
+ throw new Error("Multi-agent features not available in single-agent mode");
55
+ },
56
+ switchAgentByPath: async () => {
57
+ throw new Error("Multi-agent features not available in single-agent mode");
58
+ },
59
+ resolveAgentInfo: async () => {
60
+ throw new Error("Multi-agent features not available in single-agent mode");
61
+ },
62
+ ensureAgentAvailable: () => {
63
+ },
64
+ getActiveAgentId: () => void 0
65
+ };
66
+ function createDextoApp(options) {
67
+ const {
68
+ getAgent,
69
+ getAgentCard,
70
+ approvalCoordinator,
71
+ webhookSubscriber,
72
+ sseSubscriber,
73
+ agentsContext
74
+ } = options;
75
+ const app = new import_zod_openapi.OpenAPIHono({ strict: false });
76
+ app.use("*", (0, import_cors.createCorsMiddleware)());
77
+ app.use("*", (0, import_auth.createAuthMiddleware)());
78
+ app.onError((err, ctx) => (0, import_error.handleHonoError)(ctx, err));
79
+ app.use("/api/*", import_redaction.prettyJsonMiddleware);
80
+ app.use("/api/*", import_redaction.redactionMiddleware);
81
+ 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("/api", (0, import_greeting.createGreetingRouter)(getAgent)).route("/api", (0, import_messages.createMessagesRouter)(getAgent, approvalCoordinator)).route("/api", (0, import_llm.createLlmRouter)(getAgent)).route("/api", (0, import_sessions.createSessionsRouter)(getAgent)).route("/api", (0, import_search.createSearchRouter)(getAgent)).route("/api", (0, import_mcp.createMcpRouter)(getAgent)).route("/api", (0, import_webhooks.createWebhooksRouter)(getAgent, webhookSubscriber)).route("/api", (0, import_prompts.createPromptsRouter)(getAgent)).route("/api", (0, import_resources.createResourcesRouter)(getAgent)).route("/api", (0, import_memory.createMemoryRouter)(getAgent)).route("/api", (0, import_approvals.createApprovalsRouter)(getAgent, approvalCoordinator)).route("/api", (0, import_agents.createAgentsRouter)(getAgent, agentsContext || dummyAgentsContext));
82
+ fullApp.doc("/openapi.json", {
83
+ openapi: "3.0.0",
84
+ info: {
85
+ title: "Dexto API",
86
+ version: packageJson.version,
87
+ description: "OpenAPI spec for the Dexto REST API server"
88
+ },
89
+ servers: [
90
+ {
91
+ url: "http://localhost:3001",
92
+ description: "Local development server (default port)"
93
+ },
94
+ {
95
+ url: "http://localhost:{port}",
96
+ description: "Local development server (custom port)",
97
+ variables: {
98
+ port: {
99
+ default: "3001",
100
+ description: "API server port"
101
+ }
102
+ }
103
+ }
104
+ ],
105
+ tags: [
106
+ {
107
+ name: "system",
108
+ description: "System health and status endpoints"
109
+ },
110
+ {
111
+ name: "config",
112
+ description: "Agent configuration and greeting management"
113
+ },
114
+ {
115
+ name: "messages",
116
+ description: "Send messages to the agent and manage conversations"
117
+ },
118
+ {
119
+ name: "sessions",
120
+ description: "Create and manage conversation sessions"
121
+ },
122
+ {
123
+ name: "llm",
124
+ description: "Configure and switch between LLM providers and models"
125
+ },
126
+ {
127
+ name: "mcp",
128
+ description: "Manage Model Context Protocol (MCP) servers and tools"
129
+ },
130
+ {
131
+ name: "webhooks",
132
+ description: "Register and manage webhook endpoints for agent events"
133
+ },
134
+ {
135
+ name: "search",
136
+ description: "Search through messages and sessions"
137
+ },
138
+ {
139
+ name: "memory",
140
+ description: "Store and retrieve agent memories for context"
141
+ },
142
+ {
143
+ name: "prompts",
144
+ description: "Manage custom prompts and templates"
145
+ },
146
+ {
147
+ name: "resources",
148
+ description: "Access and manage resources from MCP servers and internal providers"
149
+ },
150
+ {
151
+ name: "agent",
152
+ description: "Current agent configuration and file operations"
153
+ },
154
+ {
155
+ name: "agents",
156
+ description: "Install, switch, and manage agent configurations"
157
+ }
158
+ ]
159
+ });
160
+ Object.assign(fullApp, { webhookSubscriber });
161
+ return fullApp;
162
+ }
163
+ // Annotate the CommonJS export names for ESM import in node:
164
+ 0 && (module.exports = {
165
+ createDextoApp
166
+ });