@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 @@
1
+ {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../../src/hono/schemas/responses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,227 @@
1
+ import { z } from "zod";
2
+ import { LLMConfigBaseSchema as CoreLLMConfigBaseSchema } from "@dexto/core";
3
+ import { MemorySchema } from "@dexto/core";
4
+ import { LLMConfigBaseSchema } from "@dexto/core";
5
+ const LLMConfigResponseSchema = CoreLLMConfigBaseSchema.omit({ apiKey: true }).extend({
6
+ hasApiKey: z.boolean().optional().describe("Whether an API key is configured")
7
+ }).describe("LLM configuration (apiKey omitted for security)");
8
+ const LLMConfigSchema = CoreLLMConfigBaseSchema.describe("LLM configuration with API key");
9
+ import { AgentCardSchema } from "@dexto/core";
10
+ import {
11
+ McpServerConfigSchema,
12
+ StdioServerConfigSchema,
13
+ SseServerConfigSchema,
14
+ HttpServerConfigSchema
15
+ } from "@dexto/core";
16
+ import { ToolConfirmationConfigSchema } from "@dexto/core";
17
+ import { InternalResourceConfigSchema } from "@dexto/core";
18
+ const BinaryDataSchema = z.custom(
19
+ (val) => {
20
+ return typeof val === "string" || val instanceof Buffer || val instanceof Uint8Array || val instanceof URL;
21
+ },
22
+ { message: "Must be string, Buffer, Uint8Array, or URL" }
23
+ );
24
+ const SessionMetadataSchema = z.object({
25
+ id: z.string().describe("Unique session identifier"),
26
+ createdAt: z.number().int().positive().nullable().describe("Creation timestamp (Unix ms, null if unavailable)"),
27
+ lastActivity: z.number().int().positive().nullable().describe("Last activity timestamp (Unix ms, null if unavailable)"),
28
+ messageCount: z.number().int().nonnegative().describe("Total number of messages in session"),
29
+ title: z.string().optional().nullable().describe("Optional session title")
30
+ }).strict().describe("Session metadata");
31
+ const TextPartSchema = z.object({
32
+ type: z.literal("text").describe("Part type: text"),
33
+ text: z.string().describe("Text content")
34
+ }).strict().describe("Text content part");
35
+ const ImagePartSchema = z.object({
36
+ type: z.literal("image").describe("Part type: image"),
37
+ image: BinaryDataSchema.describe("Image data (string, binary, or URL)"),
38
+ mimeType: z.string().optional().describe("MIME type of the image")
39
+ }).strict().describe("Image content part");
40
+ const FilePartSchema = z.object({
41
+ type: z.literal("file").describe("Part type: file"),
42
+ data: BinaryDataSchema.describe("File data (string, binary, or URL)"),
43
+ mimeType: z.string().describe("MIME type of the file"),
44
+ filename: z.string().optional().describe("Optional filename")
45
+ }).strict().describe("File content part");
46
+ const ContentPartSchema = z.discriminatedUnion("type", [TextPartSchema, ImagePartSchema, FilePartSchema]).describe("Message content part (text, image, or file)");
47
+ const ToolCallSchema = z.object({
48
+ id: z.string().describe("Unique identifier for this tool call"),
49
+ type: z.literal("function").describe("Tool call type (currently only function is supported)"),
50
+ function: z.object({
51
+ name: z.string().describe("Name of the function to call"),
52
+ arguments: z.string().describe("Arguments for the function in JSON string format")
53
+ }).strict().describe("Function call details")
54
+ }).strict().describe("Tool call made by the assistant");
55
+ const TokenUsageSchema = z.object({
56
+ inputTokens: z.number().int().nonnegative().optional().describe("Number of input tokens"),
57
+ outputTokens: z.number().int().nonnegative().optional().describe("Number of output tokens"),
58
+ reasoningTokens: z.number().int().nonnegative().optional().describe("Number of reasoning tokens"),
59
+ totalTokens: z.number().int().nonnegative().optional().describe("Total tokens used")
60
+ }).strict().describe("Token usage accounting");
61
+ const InternalMessageSchema = z.object({
62
+ role: z.enum(["system", "user", "assistant", "tool"]).describe("Role of the message sender"),
63
+ timestamp: z.number().int().positive().optional().describe("Creation timestamp (Unix ms)"),
64
+ content: z.union([z.string(), z.null(), z.array(ContentPartSchema)]).describe("Message content (string, null, or array of parts)"),
65
+ reasoning: z.string().optional().describe("Optional model reasoning text"),
66
+ tokenUsage: TokenUsageSchema.optional().describe("Optional token usage accounting"),
67
+ model: z.string().optional().describe("Model identifier for assistant messages"),
68
+ provider: z.string().optional().describe("Provider identifier for assistant messages"),
69
+ router: z.string().optional().describe("Router metadata for assistant messages"),
70
+ toolCalls: z.array(ToolCallSchema).optional().describe("Tool calls made by the assistant"),
71
+ toolCallId: z.string().optional().describe("ID of the tool call this message responds to"),
72
+ name: z.string().optional().describe("Name of the tool that produced this result")
73
+ }).strict().describe("Internal message representation");
74
+ const SearchResultSchema = z.object({
75
+ sessionId: z.string().describe("Session ID where the message was found"),
76
+ message: InternalMessageSchema.describe("The message that matched the search"),
77
+ matchedText: z.string().describe("The specific text that matched the search query"),
78
+ context: z.string().describe("Context around the match for preview"),
79
+ messageIndex: z.number().int().nonnegative().describe("Index of the message within the session")
80
+ }).strict().describe("Result of a message search");
81
+ const SessionSearchResultSchema = z.object({
82
+ sessionId: z.string().describe("Session ID"),
83
+ matchCount: z.number().int().nonnegative().describe("Number of messages that matched in this session"),
84
+ firstMatch: SearchResultSchema.describe("Preview of the first matching message"),
85
+ metadata: z.object({
86
+ createdAt: z.number().int().positive().describe("Session creation timestamp"),
87
+ lastActivity: z.number().int().positive().describe("Last activity timestamp"),
88
+ messageCount: z.number().int().nonnegative().describe("Total messages in session")
89
+ }).strict().describe("Session metadata")
90
+ }).strict().describe("Result of a session search");
91
+ const WebhookSchema = z.object({
92
+ id: z.string().describe("Unique webhook identifier"),
93
+ url: z.string().url().describe("Webhook URL to send events to"),
94
+ events: z.array(z.string()).describe("Array of event types this webhook subscribes to"),
95
+ createdAt: z.number().int().positive().describe("Creation timestamp (Unix ms)")
96
+ }).strict().describe("Webhook subscription");
97
+ const CatalogModelInfoSchema = z.object({
98
+ name: z.string().describe("Model name identifier"),
99
+ maxInputTokens: z.number().int().positive().describe("Maximum input tokens"),
100
+ default: z.boolean().optional().describe("Whether this is a default model"),
101
+ supportedFileTypes: z.array(z.enum(["audio", "pdf", "image"])).describe("File types this model supports"),
102
+ supportedRouters: z.array(z.enum(["vercel", "in-built"])).optional().describe("Routing strategies this model supports"),
103
+ displayName: z.string().optional().describe("Human-readable display name"),
104
+ pricing: z.object({
105
+ inputPerM: z.number().describe("Input cost per million tokens (USD)"),
106
+ outputPerM: z.number().describe("Output cost per million tokens (USD)"),
107
+ cacheReadPerM: z.number().optional().describe("Cache read cost per million tokens"),
108
+ cacheWritePerM: z.number().optional().describe("Cache write cost per million tokens"),
109
+ currency: z.literal("USD").optional().describe("Currency"),
110
+ unit: z.literal("per_million_tokens").optional().describe("Unit")
111
+ }).optional().describe("Pricing information in USD per million tokens")
112
+ }).strict().describe("Model information from LLM registry");
113
+ const ProviderCatalogSchema = z.object({
114
+ name: z.string().describe("Provider display name"),
115
+ hasApiKey: z.boolean().describe("Whether API key is configured"),
116
+ primaryEnvVar: z.string().describe("Primary environment variable for API key"),
117
+ supportedRouters: z.array(z.enum(["vercel", "in-built"])).describe("Routing strategies supported by this provider"),
118
+ supportsBaseURL: z.boolean().describe("Whether custom base URLs are supported"),
119
+ models: z.array(CatalogModelInfoSchema).describe("Models available from this provider"),
120
+ supportedFileTypes: z.array(z.enum(["audio", "pdf", "image"])).describe("Provider-level file type support")
121
+ }).strict().describe("Provider catalog entry with models and capabilities");
122
+ const ModelFlatSchema = CatalogModelInfoSchema.extend({
123
+ provider: z.string().describe("Provider identifier for this model")
124
+ }).describe("Flattened model entry with provider information");
125
+ const AgentRegistryEntrySchema = z.object({
126
+ id: z.string().describe("Unique agent identifier"),
127
+ name: z.string().describe("Agent name"),
128
+ description: z.string().describe("Agent description"),
129
+ author: z.string().optional().describe("Agent author"),
130
+ tags: z.array(z.string()).optional().describe("Agent tags"),
131
+ type: z.enum(["builtin", "custom"]).describe("Agent type")
132
+ }).strict().describe("Agent registry entry");
133
+ const ResourceSchema = z.object({
134
+ uri: z.string().describe("Resource URI"),
135
+ name: z.string().optional().describe("Resource name"),
136
+ description: z.string().optional().describe("Resource description"),
137
+ mimeType: z.string().optional().describe("MIME type of the resource"),
138
+ source: z.enum(["mcp", "internal"]).describe("Source system that provides this resource"),
139
+ serverName: z.string().optional().describe("Original server/provider name (for MCP resources)"),
140
+ size: z.number().optional().describe("Size of the resource in bytes (if known)"),
141
+ lastModified: z.string().datetime().optional().describe("Last modified timestamp (ISO 8601 string)"),
142
+ metadata: z.record(z.unknown()).optional().describe("Additional metadata specific to the resource type")
143
+ }).strict().describe("Resource metadata");
144
+ const ToolSchema = z.object({
145
+ name: z.string().describe("Tool name"),
146
+ description: z.string().describe("Tool description"),
147
+ inputSchema: z.record(z.unknown()).describe("JSON Schema for tool input parameters")
148
+ }).strict().describe("Tool metadata");
149
+ const PromptArgumentSchema = z.object({
150
+ name: z.string().describe("Argument name"),
151
+ description: z.string().optional().describe("Argument description"),
152
+ required: z.boolean().optional().describe("Whether the argument is required")
153
+ }).strict().describe("Prompt argument definition");
154
+ const PromptDefinitionSchema = z.object({
155
+ name: z.string().describe("Prompt name"),
156
+ title: z.string().optional().describe("Prompt title"),
157
+ description: z.string().optional().describe("Prompt description"),
158
+ arguments: z.array(PromptArgumentSchema).optional().describe("Array of argument definitions")
159
+ }).strict().describe("Prompt definition (MCP-compliant)");
160
+ const PromptInfoSchema = z.object({
161
+ name: z.string().describe("Prompt name"),
162
+ title: z.string().optional().describe("Prompt title"),
163
+ description: z.string().optional().describe("Prompt description"),
164
+ arguments: z.array(PromptArgumentSchema).optional().describe("Array of argument definitions"),
165
+ source: z.enum(["mcp", "file", "starter", "custom"]).describe("Source of the prompt"),
166
+ metadata: z.record(z.unknown()).optional().describe("Additional metadata")
167
+ }).strict().describe("Enhanced prompt information");
168
+ const PromptSchema = z.object({
169
+ id: z.string().describe("Unique prompt identifier"),
170
+ name: z.string().describe("Prompt name"),
171
+ description: z.string().optional().describe("Prompt description"),
172
+ content: z.string().describe("Prompt template content"),
173
+ variables: z.array(z.string()).optional().describe("List of variable placeholders in the prompt")
174
+ }).strict().describe("Prompt template");
175
+ const OkResponseSchema = (dataSchema) => z.object({
176
+ ok: z.literal(true).describe("Indicates successful response"),
177
+ data: dataSchema.describe("Response data")
178
+ }).strict().describe("Successful API response");
179
+ const ErrorResponseSchema = z.object({
180
+ ok: z.literal(false).describe("Indicates failed response"),
181
+ error: z.object({
182
+ message: z.string().describe("Error message"),
183
+ code: z.string().optional().describe("Error code"),
184
+ details: z.unknown().optional().describe("Additional error details")
185
+ }).strict().describe("Error details")
186
+ }).strict().describe("Error API response");
187
+ const StatusResponseSchema = z.object({
188
+ status: z.string().describe("Operation status"),
189
+ message: z.string().optional().describe("Optional status message")
190
+ }).strict().describe("Status response");
191
+ const DeleteResponseSchema = z.object({
192
+ status: z.literal("deleted").describe("Indicates successful deletion"),
193
+ id: z.string().optional().describe("ID of the deleted resource")
194
+ }).strict().describe("Delete operation response");
195
+ export {
196
+ AgentCardSchema,
197
+ AgentRegistryEntrySchema,
198
+ CatalogModelInfoSchema,
199
+ DeleteResponseSchema,
200
+ ErrorResponseSchema,
201
+ HttpServerConfigSchema,
202
+ InternalMessageSchema,
203
+ InternalResourceConfigSchema,
204
+ LLMConfigBaseSchema,
205
+ LLMConfigResponseSchema,
206
+ LLMConfigSchema,
207
+ McpServerConfigSchema,
208
+ MemorySchema,
209
+ ModelFlatSchema,
210
+ OkResponseSchema,
211
+ PromptArgumentSchema,
212
+ PromptDefinitionSchema,
213
+ PromptInfoSchema,
214
+ PromptSchema,
215
+ ProviderCatalogSchema,
216
+ ResourceSchema,
217
+ SearchResultSchema,
218
+ SessionMetadataSchema,
219
+ SessionSearchResultSchema,
220
+ SseServerConfigSchema,
221
+ StatusResponseSchema,
222
+ StdioServerConfigSchema,
223
+ TokenUsageSchema,
224
+ ToolConfirmationConfigSchema,
225
+ ToolSchema,
226
+ WebhookSchema
227
+ };
@@ -0,0 +1,16 @@
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 __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var types_exports = {};
16
+ module.exports = __toCommonJS(types_exports);
@@ -0,0 +1,6 @@
1
+ import type { OpenAPIHono } from '@hono/zod-openapi';
2
+ import type { WebhookEventSubscriber } from '../events/webhook-subscriber.js';
3
+ export type DextoApp = OpenAPIHono & {
4
+ webhookSubscriber?: WebhookEventSubscriber;
5
+ };
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hono/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG;IACjC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;CAC9C,CAAC"}
File without changes
package/dist/index.cjs ADDED
@@ -0,0 +1,38 @@
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 __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var index_exports = {};
17
+ module.exports = __toCommonJS(index_exports);
18
+ __reExport(index_exports, require("./hono/index.js"), module.exports);
19
+ __reExport(index_exports, require("./hono/node/index.js"), module.exports);
20
+ __reExport(index_exports, require("./events/webhook-subscriber.js"), module.exports);
21
+ __reExport(index_exports, require("./events/a2a-sse-subscriber.js"), module.exports);
22
+ __reExport(index_exports, require("./events/webhook-types.js"), module.exports);
23
+ __reExport(index_exports, require("./events/types.js"), module.exports);
24
+ __reExport(index_exports, require("./mcp/mcp-handler.js"), module.exports);
25
+ __reExport(index_exports, require("./approval/manual-approval-handler.js"), module.exports);
26
+ __reExport(index_exports, require("./approval/approval-coordinator.js"), module.exports);
27
+ // Annotate the CommonJS export names for ESM import in node:
28
+ 0 && (module.exports = {
29
+ ...require("./hono/index.js"),
30
+ ...require("./hono/node/index.js"),
31
+ ...require("./events/webhook-subscriber.js"),
32
+ ...require("./events/a2a-sse-subscriber.js"),
33
+ ...require("./events/webhook-types.js"),
34
+ ...require("./events/types.js"),
35
+ ...require("./mcp/mcp-handler.js"),
36
+ ...require("./approval/manual-approval-handler.js"),
37
+ ...require("./approval/approval-coordinator.js")
38
+ });
@@ -0,0 +1,11 @@
1
+ export * from './hono/index.js';
2
+ export * from './hono/node/index.js';
3
+ export type { DextoApp } from './hono/types.js';
4
+ export * from './events/webhook-subscriber.js';
5
+ export * from './events/a2a-sse-subscriber.js';
6
+ export * from './events/webhook-types.js';
7
+ export * from './events/types.js';
8
+ export * from './mcp/mcp-handler.js';
9
+ export * from './approval/manual-approval-handler.js';
10
+ export * from './approval/approval-coordinator.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uCAAuC,CAAC;AACtD,cAAc,oCAAoC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export * from "./hono/index.js";
2
+ export * from "./hono/node/index.js";
3
+ export * from "./events/webhook-subscriber.js";
4
+ export * from "./events/a2a-sse-subscriber.js";
5
+ export * from "./events/webhook-types.js";
6
+ export * from "./events/types.js";
7
+ export * from "./mcp/mcp-handler.js";
8
+ export * from "./approval/manual-approval-handler.js";
9
+ export * from "./approval/approval-coordinator.js";
@@ -0,0 +1,145 @@
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 mcp_handler_exports = {};
20
+ __export(mcp_handler_exports, {
21
+ createMcpHttpHandlers: () => createMcpHttpHandlers,
22
+ createMcpTransport: () => createMcpTransport,
23
+ initializeAgentCardResource: () => initializeAgentCardResource,
24
+ initializeMcpServer: () => initializeMcpServer
25
+ });
26
+ module.exports = __toCommonJS(mcp_handler_exports);
27
+ var import_mcp = require("@modelcontextprotocol/sdk/server/mcp.js");
28
+ var import_streamableHttp = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
29
+ var import_stdio = require("@modelcontextprotocol/sdk/server/stdio.js");
30
+ var import_core = require("@dexto/core");
31
+ var import_zod = require("zod");
32
+ var import_crypto = require("crypto");
33
+ async function createMcpTransport(transportType = "http") {
34
+ import_core.logger.info(`Creating MCP transport of type: ${transportType}`);
35
+ switch (transportType) {
36
+ case "stdio":
37
+ return new import_stdio.StdioServerTransport();
38
+ case "sse":
39
+ throw new Error(
40
+ "SSE transport requires HTTP response context and should be created per-request"
41
+ );
42
+ default: {
43
+ return new import_streamableHttp.StreamableHTTPServerTransport({
44
+ sessionIdGenerator: import_crypto.randomUUID,
45
+ enableJsonResponse: true
46
+ });
47
+ }
48
+ }
49
+ }
50
+ async function initializeMcpServer(agent, agentCardData, mcpTransport) {
51
+ const mcpServer = new import_mcp.McpServer(
52
+ { name: agentCardData.name, version: agentCardData.version },
53
+ {
54
+ capabilities: {
55
+ resources: {}
56
+ }
57
+ }
58
+ );
59
+ const toolName = "chat_with_agent";
60
+ const toolDescription = "Allows you to chat with the an AI agent. Send a message to interact.";
61
+ mcpServer.tool(
62
+ toolName,
63
+ toolDescription,
64
+ { message: import_zod.z.string() },
65
+ async ({ message }) => {
66
+ agent.logger.info(
67
+ `MCP tool '${toolName}' received message: ${message.substring(0, 100)}${message.length > 100 ? "..." : ""}`
68
+ );
69
+ const session = await agent.createSession(`mcp-${(0, import_crypto.randomUUID)()}`);
70
+ try {
71
+ const text = await agent.run(message, void 0, void 0, session.id);
72
+ agent.logger.info(
73
+ `MCP tool '${toolName}' sending response: ${text?.substring(0, 100)}${(text?.length ?? 0) > 100 ? "..." : ""}`
74
+ );
75
+ return { content: [{ type: "text", text: text ?? "" }] };
76
+ } finally {
77
+ await agent.deleteSession(session.id).catch(
78
+ (err) => agent.logger.warn(`Failed to cleanup MCP session ${session.id}: ${err}`)
79
+ );
80
+ }
81
+ }
82
+ );
83
+ agent.logger.info(`Registered MCP tool: '${toolName}'`);
84
+ await initializeAgentCardResource(mcpServer, agentCardData, agent.logger);
85
+ agent.logger.info(`Initializing MCP protocol server connection...`);
86
+ await mcpServer.connect(mcpTransport);
87
+ agent.logger.info(`\u2705 MCP server protocol connected via transport.`);
88
+ return mcpServer;
89
+ }
90
+ async function initializeAgentCardResource(mcpServer, agentCardData, agentLogger) {
91
+ const agentCardResourceProgrammaticName = "agentCard";
92
+ const agentCardResourceUri = "dexto://agent/card";
93
+ try {
94
+ const readCallback = async (uri, _extra) => {
95
+ agentLogger.info(`MCP client requesting resource at ${uri.href}`);
96
+ return {
97
+ contents: [
98
+ {
99
+ uri: uri.href,
100
+ type: "application/json",
101
+ text: JSON.stringify(agentCardData, null, 2)
102
+ }
103
+ ]
104
+ };
105
+ };
106
+ mcpServer.resource(agentCardResourceProgrammaticName, agentCardResourceUri, readCallback);
107
+ agentLogger.info(
108
+ `Registered MCP Resource: '${agentCardResourceProgrammaticName}' at URI '${agentCardResourceUri}'`
109
+ );
110
+ } catch (e) {
111
+ agentLogger.warn(
112
+ `Error attempting to register MCP Resource '${agentCardResourceProgrammaticName}': ${e.message}. Check SDK.`
113
+ );
114
+ }
115
+ }
116
+ function createMcpHttpHandlers(mcpTransport) {
117
+ if (!(mcpTransport instanceof import_streamableHttp.StreamableHTTPServerTransport)) {
118
+ import_core.logger.info("Non-HTTP transport detected. Skipping HTTP route setup.");
119
+ return null;
120
+ }
121
+ const handlePost = async (req, res, body) => {
122
+ import_core.logger.info(`MCP POST /mcp received request body: ${JSON.stringify(body)}`);
123
+ try {
124
+ await mcpTransport.handleRequest(req, res, body);
125
+ } catch (err) {
126
+ import_core.logger.error(`MCP POST error: ${JSON.stringify(err, null, 2)}`);
127
+ }
128
+ };
129
+ const handleGet = async (req, res) => {
130
+ import_core.logger.info("MCP GET /mcp received request, attempting to establish SSE connection.");
131
+ try {
132
+ await mcpTransport.handleRequest(req, res);
133
+ } catch (err) {
134
+ import_core.logger.error(`MCP GET error: ${JSON.stringify(err, null, 2)}`);
135
+ }
136
+ };
137
+ return { handlePost, handleGet };
138
+ }
139
+ // Annotate the CommonJS export names for ESM import in node:
140
+ 0 && (module.exports = {
141
+ createMcpHttpHandlers,
142
+ createMcpTransport,
143
+ initializeAgentCardResource,
144
+ initializeMcpServer
145
+ });
@@ -0,0 +1,14 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
4
+ import type { AgentCard, IDextoLogger } from '@dexto/core';
5
+ import type { DextoAgent } from '@dexto/core';
6
+ export type McpTransportType = 'stdio' | 'sse' | 'http';
7
+ export declare function createMcpTransport(transportType?: McpTransportType): Promise<Transport>;
8
+ export declare function initializeMcpServer(agent: DextoAgent, agentCardData: AgentCard, mcpTransport: Transport): Promise<McpServer>;
9
+ export declare function initializeAgentCardResource(mcpServer: McpServer, agentCardData: AgentCard, agentLogger: IDextoLogger): Promise<void>;
10
+ export declare function createMcpHttpHandlers(mcpTransport: Transport): {
11
+ handlePost: (req: IncomingMessage, res: ServerResponse, body: unknown) => Promise<void>;
12
+ handleGet: (req: IncomingMessage, res: ServerResponse) => Promise<void>;
13
+ } | null;
14
+ //# sourceMappingURL=mcp-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-handler.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAExD,wBAAsB,kBAAkB,CACpC,aAAa,GAAE,gBAAyB,GACzC,OAAO,CAAC,SAAS,CAAC,CAiBpB;AAED,wBAAsB,mBAAmB,CACrC,KAAK,EAAE,UAAU,EACjB,aAAa,EAAE,SAAS,EACxB,YAAY,EAAE,SAAS,GACxB,OAAO,CAAC,SAAS,CAAC,CA+CpB;AAED,wBAAsB,2BAA2B,CAC7C,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,SAAS,EACxB,WAAW,EAAE,YAAY,GAC1B,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,SAAS;sBAM1B,eAAe,OAAO,cAAc,QAAQ,OAAO;qBASpD,eAAe,OAAO,cAAc;SAUrE"}
@@ -0,0 +1,118 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { logger } from "@dexto/core";
5
+ import { z } from "zod";
6
+ import { randomUUID } from "crypto";
7
+ async function createMcpTransport(transportType = "http") {
8
+ logger.info(`Creating MCP transport of type: ${transportType}`);
9
+ switch (transportType) {
10
+ case "stdio":
11
+ return new StdioServerTransport();
12
+ case "sse":
13
+ throw new Error(
14
+ "SSE transport requires HTTP response context and should be created per-request"
15
+ );
16
+ default: {
17
+ return new StreamableHTTPServerTransport({
18
+ sessionIdGenerator: randomUUID,
19
+ enableJsonResponse: true
20
+ });
21
+ }
22
+ }
23
+ }
24
+ async function initializeMcpServer(agent, agentCardData, mcpTransport) {
25
+ const mcpServer = new McpServer(
26
+ { name: agentCardData.name, version: agentCardData.version },
27
+ {
28
+ capabilities: {
29
+ resources: {}
30
+ }
31
+ }
32
+ );
33
+ const toolName = "chat_with_agent";
34
+ const toolDescription = "Allows you to chat with the an AI agent. Send a message to interact.";
35
+ mcpServer.tool(
36
+ toolName,
37
+ toolDescription,
38
+ { message: z.string() },
39
+ async ({ message }) => {
40
+ agent.logger.info(
41
+ `MCP tool '${toolName}' received message: ${message.substring(0, 100)}${message.length > 100 ? "..." : ""}`
42
+ );
43
+ const session = await agent.createSession(`mcp-${randomUUID()}`);
44
+ try {
45
+ const text = await agent.run(message, void 0, void 0, session.id);
46
+ agent.logger.info(
47
+ `MCP tool '${toolName}' sending response: ${text?.substring(0, 100)}${(text?.length ?? 0) > 100 ? "..." : ""}`
48
+ );
49
+ return { content: [{ type: "text", text: text ?? "" }] };
50
+ } finally {
51
+ await agent.deleteSession(session.id).catch(
52
+ (err) => agent.logger.warn(`Failed to cleanup MCP session ${session.id}: ${err}`)
53
+ );
54
+ }
55
+ }
56
+ );
57
+ agent.logger.info(`Registered MCP tool: '${toolName}'`);
58
+ await initializeAgentCardResource(mcpServer, agentCardData, agent.logger);
59
+ agent.logger.info(`Initializing MCP protocol server connection...`);
60
+ await mcpServer.connect(mcpTransport);
61
+ agent.logger.info(`\u2705 MCP server protocol connected via transport.`);
62
+ return mcpServer;
63
+ }
64
+ async function initializeAgentCardResource(mcpServer, agentCardData, agentLogger) {
65
+ const agentCardResourceProgrammaticName = "agentCard";
66
+ const agentCardResourceUri = "dexto://agent/card";
67
+ try {
68
+ const readCallback = async (uri, _extra) => {
69
+ agentLogger.info(`MCP client requesting resource at ${uri.href}`);
70
+ return {
71
+ contents: [
72
+ {
73
+ uri: uri.href,
74
+ type: "application/json",
75
+ text: JSON.stringify(agentCardData, null, 2)
76
+ }
77
+ ]
78
+ };
79
+ };
80
+ mcpServer.resource(agentCardResourceProgrammaticName, agentCardResourceUri, readCallback);
81
+ agentLogger.info(
82
+ `Registered MCP Resource: '${agentCardResourceProgrammaticName}' at URI '${agentCardResourceUri}'`
83
+ );
84
+ } catch (e) {
85
+ agentLogger.warn(
86
+ `Error attempting to register MCP Resource '${agentCardResourceProgrammaticName}': ${e.message}. Check SDK.`
87
+ );
88
+ }
89
+ }
90
+ function createMcpHttpHandlers(mcpTransport) {
91
+ if (!(mcpTransport instanceof StreamableHTTPServerTransport)) {
92
+ logger.info("Non-HTTP transport detected. Skipping HTTP route setup.");
93
+ return null;
94
+ }
95
+ const handlePost = async (req, res, body) => {
96
+ logger.info(`MCP POST /mcp received request body: ${JSON.stringify(body)}`);
97
+ try {
98
+ await mcpTransport.handleRequest(req, res, body);
99
+ } catch (err) {
100
+ logger.error(`MCP POST error: ${JSON.stringify(err, null, 2)}`);
101
+ }
102
+ };
103
+ const handleGet = async (req, res) => {
104
+ logger.info("MCP GET /mcp received request, attempting to establish SSE connection.");
105
+ try {
106
+ await mcpTransport.handleRequest(req, res);
107
+ } catch (err) {
108
+ logger.error(`MCP GET error: ${JSON.stringify(err, null, 2)}`);
109
+ }
110
+ };
111
+ return { handlePost, handleGet };
112
+ }
113
+ export {
114
+ createMcpHttpHandlers,
115
+ createMcpTransport,
116
+ initializeAgentCardResource,
117
+ initializeMcpServer
118
+ };