@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,137 @@
1
+ import { OpenAPIHono } from '@hono/zod-openapi';
2
+ import type { DextoAgent } from '@dexto/core';
3
+ export declare function createSearchRouter(getAgent: () => DextoAgent): OpenAPIHono<import("hono").Env, {
4
+ "/search/messages": {
5
+ $get: {
6
+ input: {
7
+ query: {
8
+ q: string;
9
+ sessionId?: string | undefined;
10
+ role?: "system" | "user" | "assistant" | "tool" | undefined;
11
+ limit?: number | undefined;
12
+ offset?: number | undefined;
13
+ };
14
+ };
15
+ output: {
16
+ query: string;
17
+ results: {
18
+ message: {
19
+ content: string | ({
20
+ type: "text";
21
+ text: string;
22
+ } | {
23
+ type: "image";
24
+ image?: import("hono/utils/types").JSONValue;
25
+ mimeType?: string | undefined;
26
+ } | {
27
+ type: "file";
28
+ mimeType: string;
29
+ data?: import("hono/utils/types").JSONValue;
30
+ filename?: string | undefined;
31
+ })[] | null;
32
+ role: "system" | "user" | "assistant" | "tool";
33
+ provider?: string | undefined;
34
+ model?: string | undefined;
35
+ router?: string | undefined;
36
+ name?: string | undefined;
37
+ timestamp?: number | undefined;
38
+ reasoning?: string | undefined;
39
+ tokenUsage?: {
40
+ inputTokens?: number | undefined;
41
+ outputTokens?: number | undefined;
42
+ reasoningTokens?: number | undefined;
43
+ totalTokens?: number | undefined;
44
+ } | undefined;
45
+ toolCalls?: {
46
+ function: {
47
+ name: string;
48
+ arguments: string;
49
+ };
50
+ type: "function";
51
+ id: string;
52
+ }[] | undefined;
53
+ toolCallId?: string | undefined;
54
+ };
55
+ sessionId: string;
56
+ matchedText: string;
57
+ context: string;
58
+ messageIndex: number;
59
+ }[];
60
+ total: number;
61
+ hasMore: boolean;
62
+ };
63
+ outputFormat: "json";
64
+ status: 200;
65
+ };
66
+ };
67
+ } & {
68
+ "/search/sessions": {
69
+ $get: {
70
+ input: {
71
+ query: {
72
+ q: string;
73
+ };
74
+ };
75
+ output: {
76
+ query: string;
77
+ results: {
78
+ sessionId: string;
79
+ matchCount: number;
80
+ firstMatch: {
81
+ message: {
82
+ content: string | ({
83
+ type: "text";
84
+ text: string;
85
+ } | {
86
+ type: "image";
87
+ image?: import("hono/utils/types").JSONValue;
88
+ mimeType?: string | undefined;
89
+ } | {
90
+ type: "file";
91
+ mimeType: string;
92
+ data?: import("hono/utils/types").JSONValue;
93
+ filename?: string | undefined;
94
+ })[] | null;
95
+ role: "system" | "user" | "assistant" | "tool";
96
+ provider?: string | undefined;
97
+ model?: string | undefined;
98
+ router?: string | undefined;
99
+ name?: string | undefined;
100
+ timestamp?: number | undefined;
101
+ reasoning?: string | undefined;
102
+ tokenUsage?: {
103
+ inputTokens?: number | undefined;
104
+ outputTokens?: number | undefined;
105
+ reasoningTokens?: number | undefined;
106
+ totalTokens?: number | undefined;
107
+ } | undefined;
108
+ toolCalls?: {
109
+ function: {
110
+ name: string;
111
+ arguments: string;
112
+ };
113
+ type: "function";
114
+ id: string;
115
+ }[] | undefined;
116
+ toolCallId?: string | undefined;
117
+ };
118
+ sessionId: string;
119
+ matchedText: string;
120
+ context: string;
121
+ messageIndex: number;
122
+ };
123
+ metadata: {
124
+ createdAt: number;
125
+ lastActivity: number;
126
+ messageCount: number;
127
+ };
128
+ }[];
129
+ total: number;
130
+ hasMore: boolean;
131
+ };
132
+ outputFormat: "json";
133
+ status: 200;
134
+ };
135
+ };
136
+ }, "/">;
137
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/hono/routes/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA2B9C,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiG5D"}
@@ -0,0 +1,85 @@
1
+ import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
2
+ import { SearchResultSchema, SessionSearchResultSchema } from "../schemas/responses.js";
3
+ const MessageSearchQuery = z.object({
4
+ q: z.string().min(1, "Search query is required").describe("Search query string"),
5
+ limit: z.coerce.number().min(1).max(100).optional().describe("Maximum number of results to return (default: 20)"),
6
+ offset: z.coerce.number().min(0).optional().describe("Number of results to skip for pagination (default: 0)"),
7
+ sessionId: z.string().optional().describe("Limit search to a specific session"),
8
+ role: z.enum(["user", "assistant", "system", "tool"]).optional().describe("Filter by message role")
9
+ });
10
+ const SessionSearchQuery = z.object({
11
+ q: z.string().min(1, "Search query is required").describe("Search query string")
12
+ });
13
+ function createSearchRouter(getAgent) {
14
+ const app = new OpenAPIHono();
15
+ const messagesRoute = createRoute({
16
+ method: "get",
17
+ path: "/search/messages",
18
+ summary: "Search Messages",
19
+ description: "Searches for messages across all sessions or within a specific session",
20
+ tags: ["search"],
21
+ request: { query: MessageSearchQuery },
22
+ responses: {
23
+ 200: {
24
+ description: "Message search results",
25
+ content: {
26
+ "application/json": {
27
+ schema: z.object({
28
+ results: z.array(SearchResultSchema).describe("Array of search results"),
29
+ total: z.number().int().nonnegative().describe("Total number of results available"),
30
+ hasMore: z.boolean().describe(
31
+ "Whether there are more results beyond the current page"
32
+ ),
33
+ query: z.string().describe("Query that was searched")
34
+ }).strict().describe("Message search response")
35
+ }
36
+ }
37
+ }
38
+ }
39
+ });
40
+ const sessionsRoute = createRoute({
41
+ method: "get",
42
+ path: "/search/sessions",
43
+ summary: "Search Sessions",
44
+ description: "Searches for sessions that contain the specified query",
45
+ tags: ["search"],
46
+ request: { query: SessionSearchQuery },
47
+ responses: {
48
+ 200: {
49
+ description: "Session search results",
50
+ content: {
51
+ "application/json": {
52
+ schema: z.object({
53
+ results: z.array(SessionSearchResultSchema).describe("Array of session search results"),
54
+ total: z.number().int().nonnegative().describe("Total number of sessions with matches"),
55
+ hasMore: z.boolean().describe(
56
+ "Always false - session search returns all matching sessions without pagination"
57
+ ),
58
+ query: z.string().describe("Query that was searched")
59
+ }).strict().describe("Session search response")
60
+ }
61
+ }
62
+ }
63
+ }
64
+ });
65
+ return app.openapi(messagesRoute, async (ctx) => {
66
+ const agent = getAgent();
67
+ const { q, limit, offset, sessionId, role } = ctx.req.valid("query");
68
+ const options = {
69
+ limit: limit || 20,
70
+ offset: offset || 0,
71
+ ...sessionId && { sessionId },
72
+ ...role && { role }
73
+ };
74
+ const searchResults = await agent.searchMessages(q, options);
75
+ return ctx.json(searchResults);
76
+ }).openapi(sessionsRoute, async (ctx) => {
77
+ const agent = getAgent();
78
+ const { q } = ctx.req.valid("query");
79
+ const searchResults = await agent.searchSessions(q);
80
+ return ctx.json(searchResults);
81
+ });
82
+ }
83
+ export {
84
+ createSearchRouter
85
+ };
@@ -0,0 +1,366 @@
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 sessions_exports = {};
20
+ __export(sessions_exports, {
21
+ createSessionsRouter: () => createSessionsRouter
22
+ });
23
+ module.exports = __toCommonJS(sessions_exports);
24
+ var import_zod_openapi = require("@hono/zod-openapi");
25
+ var import_responses = require("../schemas/responses.js");
26
+ const CreateSessionSchema = import_zod_openapi.z.object({
27
+ sessionId: import_zod_openapi.z.string().optional().describe("A custom ID for the new session")
28
+ }).describe("Request body for creating a new session");
29
+ function createSessionsRouter(getAgent) {
30
+ const app = new import_zod_openapi.OpenAPIHono();
31
+ const listRoute = (0, import_zod_openapi.createRoute)({
32
+ method: "get",
33
+ path: "/sessions",
34
+ summary: "List Sessions",
35
+ description: "Retrieves a list of all active sessions",
36
+ tags: ["sessions"],
37
+ responses: {
38
+ 200: {
39
+ description: "List of all active sessions",
40
+ content: {
41
+ "application/json": {
42
+ schema: import_zod_openapi.z.object({
43
+ sessions: import_zod_openapi.z.array(import_responses.SessionMetadataSchema).describe("Array of session metadata objects")
44
+ }).strict()
45
+ }
46
+ }
47
+ }
48
+ }
49
+ });
50
+ const createRouteDef = (0, import_zod_openapi.createRoute)({
51
+ method: "post",
52
+ path: "/sessions",
53
+ summary: "Create Session",
54
+ description: "Creates a new session",
55
+ tags: ["sessions"],
56
+ request: { body: { content: { "application/json": { schema: CreateSessionSchema } } } },
57
+ responses: {
58
+ 201: {
59
+ description: "Session created successfully",
60
+ content: {
61
+ "application/json": {
62
+ schema: import_zod_openapi.z.object({
63
+ session: import_responses.SessionMetadataSchema.describe(
64
+ "Newly created session metadata"
65
+ )
66
+ }).strict()
67
+ }
68
+ }
69
+ }
70
+ }
71
+ });
72
+ const getRoute = (0, import_zod_openapi.createRoute)({
73
+ method: "get",
74
+ path: "/sessions/{sessionId}",
75
+ summary: "Get Session Details",
76
+ description: "Fetches details for a specific session",
77
+ tags: ["sessions"],
78
+ request: { params: import_zod_openapi.z.object({ sessionId: import_zod_openapi.z.string().describe("Session identifier") }) },
79
+ responses: {
80
+ 200: {
81
+ description: "Session details with metadata",
82
+ content: {
83
+ "application/json": {
84
+ schema: import_zod_openapi.z.object({
85
+ session: import_responses.SessionMetadataSchema.extend({
86
+ history: import_zod_openapi.z.number().int().nonnegative().describe("Number of messages in history")
87
+ }).strict().describe("Session metadata with history count")
88
+ }).strict()
89
+ }
90
+ }
91
+ }
92
+ }
93
+ });
94
+ const historyRoute = (0, import_zod_openapi.createRoute)({
95
+ method: "get",
96
+ path: "/sessions/{sessionId}/history",
97
+ summary: "Get Session History",
98
+ description: "Retrieves the conversation history for a session",
99
+ tags: ["sessions"],
100
+ request: { params: import_zod_openapi.z.object({ sessionId: import_zod_openapi.z.string().describe("Session identifier") }) },
101
+ responses: {
102
+ 200: {
103
+ description: "Session conversation history",
104
+ content: {
105
+ "application/json": {
106
+ schema: import_zod_openapi.z.object({
107
+ history: import_zod_openapi.z.array(import_responses.InternalMessageSchema).describe("Array of messages in conversation history")
108
+ }).strict()
109
+ }
110
+ }
111
+ }
112
+ }
113
+ });
114
+ const deleteRoute = (0, import_zod_openapi.createRoute)({
115
+ method: "delete",
116
+ path: "/sessions/{sessionId}",
117
+ summary: "Delete Session",
118
+ description: "Permanently deletes a session and all its conversation history. This action cannot be undone",
119
+ tags: ["sessions"],
120
+ request: { params: import_zod_openapi.z.object({ sessionId: import_zod_openapi.z.string().describe("Session identifier") }) },
121
+ responses: {
122
+ 200: {
123
+ description: "Session deleted successfully",
124
+ content: {
125
+ "application/json": {
126
+ schema: import_zod_openapi.z.object({
127
+ status: import_zod_openapi.z.literal("deleted").describe("Deletion status"),
128
+ sessionId: import_zod_openapi.z.string().describe("ID of the deleted session")
129
+ }).strict()
130
+ }
131
+ }
132
+ }
133
+ }
134
+ });
135
+ const cancelRoute = (0, import_zod_openapi.createRoute)({
136
+ method: "post",
137
+ path: "/sessions/{sessionId}/cancel",
138
+ summary: "Cancel Session Run",
139
+ description: "Cancels an in-flight agent run for the specified session",
140
+ tags: ["sessions"],
141
+ request: { params: import_zod_openapi.z.object({ sessionId: import_zod_openapi.z.string().describe("Session identifier") }) },
142
+ responses: {
143
+ 200: {
144
+ description: "Cancel operation result",
145
+ content: {
146
+ "application/json": {
147
+ schema: import_zod_openapi.z.object({
148
+ cancelled: import_zod_openapi.z.boolean().describe("Whether a run was cancelled"),
149
+ sessionId: import_zod_openapi.z.string().describe("Session ID")
150
+ }).strict()
151
+ }
152
+ }
153
+ }
154
+ }
155
+ });
156
+ const loadRoute = (0, import_zod_openapi.createRoute)({
157
+ method: "get",
158
+ path: "/sessions/{sessionId}/load",
159
+ summary: "Load Session",
160
+ description: "Validates and retrieves session information. The client should track the active session.",
161
+ tags: ["sessions"],
162
+ request: {
163
+ params: import_zod_openapi.z.object({ sessionId: import_zod_openapi.z.string().describe("Session identifier") })
164
+ },
165
+ responses: {
166
+ 200: {
167
+ description: "Session information retrieved successfully",
168
+ content: {
169
+ "application/json": {
170
+ schema: import_zod_openapi.z.object({
171
+ session: import_responses.SessionMetadataSchema.describe("Session metadata")
172
+ }).strict()
173
+ }
174
+ }
175
+ },
176
+ 404: {
177
+ description: "Session not found",
178
+ content: {
179
+ "application/json": {
180
+ schema: import_zod_openapi.z.object({
181
+ error: import_zod_openapi.z.string().describe("Error message")
182
+ }).strict()
183
+ }
184
+ }
185
+ }
186
+ }
187
+ });
188
+ const patchRoute = (0, import_zod_openapi.createRoute)({
189
+ method: "patch",
190
+ path: "/sessions/{sessionId}",
191
+ summary: "Update Session Title",
192
+ description: "Updates the title of an existing session",
193
+ tags: ["sessions"],
194
+ request: {
195
+ params: import_zod_openapi.z.object({ sessionId: import_zod_openapi.z.string().describe("Session identifier") }),
196
+ body: {
197
+ content: {
198
+ "application/json": {
199
+ schema: import_zod_openapi.z.object({
200
+ title: import_zod_openapi.z.string().min(1, "Title is required").max(120, "Title too long").describe("New title for the session (maximum 120 characters)")
201
+ })
202
+ }
203
+ }
204
+ }
205
+ },
206
+ responses: {
207
+ 200: {
208
+ description: "Session updated successfully",
209
+ content: {
210
+ "application/json": {
211
+ schema: import_zod_openapi.z.object({
212
+ session: import_responses.SessionMetadataSchema.describe("Updated session metadata")
213
+ }).strict()
214
+ }
215
+ }
216
+ }
217
+ }
218
+ });
219
+ const generateTitleRoute = (0, import_zod_openapi.createRoute)({
220
+ method: "post",
221
+ path: "/sessions/{sessionId}/generate-title",
222
+ summary: "Generate Session Title",
223
+ description: "Generates a descriptive title for the session using the first user message. Returns existing title if already set.",
224
+ tags: ["sessions"],
225
+ request: {
226
+ params: import_zod_openapi.z.object({ sessionId: import_zod_openapi.z.string().describe("Session identifier") })
227
+ },
228
+ responses: {
229
+ 200: {
230
+ description: "Title generated successfully",
231
+ content: {
232
+ "application/json": {
233
+ schema: import_zod_openapi.z.object({
234
+ title: import_zod_openapi.z.string().nullable().describe("Generated title, or null if generation failed"),
235
+ sessionId: import_zod_openapi.z.string().describe("Session ID")
236
+ }).strict()
237
+ }
238
+ }
239
+ },
240
+ 404: {
241
+ description: "Session not found (error format handled by middleware)"
242
+ }
243
+ }
244
+ });
245
+ return app.openapi(listRoute, async (ctx) => {
246
+ const agent = getAgent();
247
+ const sessionIds = await agent.listSessions();
248
+ const sessions = await Promise.all(
249
+ sessionIds.map(async (id) => {
250
+ try {
251
+ const metadata = await agent.getSessionMetadata(id);
252
+ return {
253
+ id,
254
+ createdAt: metadata?.createdAt || null,
255
+ lastActivity: metadata?.lastActivity || null,
256
+ messageCount: metadata?.messageCount || 0,
257
+ title: metadata?.title || null
258
+ };
259
+ } catch {
260
+ return {
261
+ id,
262
+ createdAt: null,
263
+ lastActivity: null,
264
+ messageCount: 0,
265
+ title: null
266
+ };
267
+ }
268
+ })
269
+ );
270
+ return ctx.json({ sessions });
271
+ }).openapi(createRouteDef, async (ctx) => {
272
+ const agent = getAgent();
273
+ const { sessionId } = ctx.req.valid("json");
274
+ const session = await agent.createSession(sessionId);
275
+ const metadata = await agent.getSessionMetadata(session.id);
276
+ return ctx.json(
277
+ {
278
+ session: {
279
+ id: session.id,
280
+ createdAt: metadata?.createdAt || Date.now(),
281
+ lastActivity: metadata?.lastActivity || Date.now(),
282
+ messageCount: metadata?.messageCount || 0,
283
+ title: metadata?.title || null
284
+ }
285
+ },
286
+ 201
287
+ );
288
+ }).openapi(getRoute, async (ctx) => {
289
+ const agent = getAgent();
290
+ const { sessionId } = ctx.req.param();
291
+ const metadata = await agent.getSessionMetadata(sessionId);
292
+ const history = await agent.getSessionHistory(sessionId);
293
+ return ctx.json({
294
+ session: {
295
+ id: sessionId,
296
+ createdAt: metadata?.createdAt || null,
297
+ lastActivity: metadata?.lastActivity || null,
298
+ messageCount: metadata?.messageCount || 0,
299
+ title: metadata?.title || null,
300
+ history: history.length
301
+ }
302
+ });
303
+ }).openapi(historyRoute, async (ctx) => {
304
+ const agent = getAgent();
305
+ const { sessionId } = ctx.req.param();
306
+ const history = await agent.getSessionHistory(sessionId);
307
+ return ctx.json({ history });
308
+ }).openapi(deleteRoute, async (ctx) => {
309
+ const agent = getAgent();
310
+ const { sessionId } = ctx.req.param();
311
+ await agent.deleteSession(sessionId);
312
+ return ctx.json({ status: "deleted", sessionId });
313
+ }).openapi(cancelRoute, async (ctx) => {
314
+ const agent = getAgent();
315
+ const { sessionId } = ctx.req.valid("param");
316
+ const cancelled = await agent.cancel(sessionId);
317
+ if (!cancelled) {
318
+ agent.logger.debug(`No in-flight run to cancel for session: ${sessionId}`);
319
+ }
320
+ return ctx.json({ cancelled, sessionId });
321
+ }).openapi(loadRoute, async (ctx) => {
322
+ const agent = getAgent();
323
+ const { sessionId } = ctx.req.valid("param");
324
+ const sessionIds = await agent.listSessions();
325
+ if (!sessionIds.includes(sessionId)) {
326
+ return ctx.json({ error: `Session not found: ${sessionId}` }, 404);
327
+ }
328
+ const metadata = await agent.getSessionMetadata(sessionId);
329
+ return ctx.json(
330
+ {
331
+ session: {
332
+ id: sessionId,
333
+ createdAt: metadata?.createdAt || null,
334
+ lastActivity: metadata?.lastActivity || null,
335
+ messageCount: metadata?.messageCount || 0,
336
+ title: metadata?.title || null
337
+ }
338
+ },
339
+ 200
340
+ );
341
+ }).openapi(patchRoute, async (ctx) => {
342
+ const agent = getAgent();
343
+ const { sessionId } = ctx.req.valid("param");
344
+ const { title } = ctx.req.valid("json");
345
+ await agent.setSessionTitle(sessionId, title);
346
+ const metadata = await agent.getSessionMetadata(sessionId);
347
+ return ctx.json({
348
+ session: {
349
+ id: sessionId,
350
+ createdAt: metadata?.createdAt || null,
351
+ lastActivity: metadata?.lastActivity || null,
352
+ messageCount: metadata?.messageCount || 0,
353
+ title: metadata?.title || title
354
+ }
355
+ });
356
+ }).openapi(generateTitleRoute, async (ctx) => {
357
+ const agent = getAgent();
358
+ const { sessionId } = ctx.req.valid("param");
359
+ const title = await agent.generateSessionTitle(sessionId);
360
+ return ctx.json({ title, sessionId });
361
+ });
362
+ }
363
+ // Annotate the CommonJS export names for ESM import in node:
364
+ 0 && (module.exports = {
365
+ createSessionsRouter
366
+ });