veryfront 0.1.144 → 0.1.145

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 (71) hide show
  1. package/esm/deno.js +1 -1
  2. package/esm/src/agent/ag-ui-handler.d.ts +77 -0
  3. package/esm/src/agent/ag-ui-handler.d.ts.map +1 -0
  4. package/esm/src/agent/ag-ui-handler.js +331 -0
  5. package/esm/src/agent/index.d.ts +2 -1
  6. package/esm/src/agent/index.d.ts.map +1 -1
  7. package/esm/src/agent/index.js +2 -1
  8. package/esm/src/agent/runtime/index.d.ts +2 -0
  9. package/esm/src/agent/runtime/index.d.ts.map +1 -1
  10. package/esm/src/agent/runtime/index.js +15 -7
  11. package/esm/src/agent/runtime/resume-session.d.ts +61 -0
  12. package/esm/src/agent/runtime/resume-session.d.ts.map +1 -0
  13. package/esm/src/agent/runtime/resume-session.js +232 -0
  14. package/esm/src/agent/runtime/tool-helpers.d.ts +4 -2
  15. package/esm/src/agent/runtime/tool-helpers.d.ts.map +1 -1
  16. package/esm/src/agent/runtime/tool-helpers.js +57 -4
  17. package/esm/src/agent/types.d.ts +2 -1
  18. package/esm/src/agent/types.d.ts.map +1 -1
  19. package/esm/src/internal-agents/session-manager.d.ts +8 -24
  20. package/esm/src/internal-agents/session-manager.d.ts.map +1 -1
  21. package/esm/src/internal-agents/session-manager.js +55 -178
  22. package/esm/src/mcp/index.d.ts +2 -0
  23. package/esm/src/mcp/index.d.ts.map +1 -1
  24. package/esm/src/mcp/index.js +2 -0
  25. package/esm/src/mcp/server.d.ts +1 -0
  26. package/esm/src/mcp/server.d.ts.map +1 -1
  27. package/esm/src/mcp/server.js +47 -8
  28. package/esm/src/mcp/session.d.ts +9 -0
  29. package/esm/src/mcp/session.d.ts.map +1 -0
  30. package/esm/src/mcp/session.js +25 -0
  31. package/esm/src/mcp/sse.d.ts +8 -0
  32. package/esm/src/mcp/sse.d.ts.map +1 -0
  33. package/esm/src/mcp/sse.js +17 -0
  34. package/esm/src/platform/cloud/resolver.d.ts.map +1 -1
  35. package/esm/src/platform/cloud/resolver.js +13 -3
  36. package/esm/src/provider/index.d.ts +2 -0
  37. package/esm/src/provider/index.d.ts.map +1 -1
  38. package/esm/src/provider/index.js +1 -0
  39. package/esm/src/provider/veryfront-cloud/context.d.ts +10 -0
  40. package/esm/src/provider/veryfront-cloud/context.d.ts.map +1 -0
  41. package/esm/src/provider/veryfront-cloud/context.js +11 -0
  42. package/esm/src/tool/index.d.ts +3 -1
  43. package/esm/src/tool/index.d.ts.map +1 -1
  44. package/esm/src/tool/index.js +1 -0
  45. package/esm/src/tool/remote-mcp.d.ts +14 -0
  46. package/esm/src/tool/remote-mcp.d.ts.map +1 -0
  47. package/esm/src/tool/remote-mcp.js +176 -0
  48. package/esm/src/tool/types.d.ts +12 -0
  49. package/esm/src/tool/types.d.ts.map +1 -1
  50. package/esm/src/utils/version-constant.d.ts +1 -1
  51. package/esm/src/utils/version-constant.js +1 -1
  52. package/package.json +1 -1
  53. package/src/deno.js +1 -1
  54. package/src/src/agent/ag-ui-handler.ts +451 -0
  55. package/src/src/agent/index.ts +21 -1
  56. package/src/src/agent/runtime/index.ts +28 -3
  57. package/src/src/agent/runtime/resume-session.ts +319 -0
  58. package/src/src/agent/runtime/tool-helpers.ts +89 -6
  59. package/src/src/agent/types.ts +2 -1
  60. package/src/src/internal-agents/session-manager.ts +69 -243
  61. package/src/src/mcp/index.ts +3 -0
  62. package/src/src/mcp/server.ts +54 -9
  63. package/src/src/mcp/session.ts +31 -0
  64. package/src/src/mcp/sse.ts +19 -0
  65. package/src/src/platform/cloud/resolver.ts +15 -3
  66. package/src/src/provider/index.ts +5 -0
  67. package/src/src/provider/veryfront-cloud/context.ts +28 -0
  68. package/src/src/tool/index.ts +9 -1
  69. package/src/src/tool/remote-mcp.ts +261 -0
  70. package/src/src/tool/types.ts +17 -0
  71. package/src/src/utils/version-constant.ts +1 -1
@@ -1,4 +1,6 @@
1
1
  import * as dntShim from "../../_dnt.shims.js";
2
+ import { RunAlreadyExistsError, RunCancelledError, RunNotActiveError, RunResumeSessionManager, WaitConflictError, WaitNotPendingError, } from "../agent/runtime/resume-session.js";
3
+ export { RunNotActiveError };
2
4
  function stableJsonStringify(value, depth = 0) {
3
5
  if (depth > 64) {
4
6
  return JSON.stringify(value);
@@ -17,235 +19,110 @@ function stableJsonStringify(value, depth = 0) {
17
19
  function createToolResultKey(result, isError) {
18
20
  return `${isError ? "1" : "0"}:${stableJsonStringify(result)}`;
19
21
  }
20
- export class AgentRunCancelledError extends Error {
22
+ export class AgentRunCancelledError extends RunCancelledError {
21
23
  constructor(message = "Run cancelled") {
22
24
  super(message);
23
25
  this.name = "AgentRunCancelledError";
24
26
  }
25
27
  }
26
- export class AgentRunAlreadyExistsError extends Error {
28
+ export class AgentRunAlreadyExistsError extends RunAlreadyExistsError {
27
29
  constructor(runId) {
28
- super(`Run "${runId}" is already active`);
30
+ super(runId);
29
31
  this.name = "AgentRunAlreadyExistsError";
30
32
  }
31
33
  }
32
- export class RunNotActiveError extends Error {
33
- constructor(runId) {
34
- super(`Run "${runId}" is not active`);
35
- this.name = "RunNotActiveError";
36
- }
37
- }
38
- export class ToolResultNotWaitingError extends Error {
34
+ export class ToolResultNotWaitingError extends WaitNotPendingError {
39
35
  constructor(runId, toolCallId) {
40
- super(`Run "${runId}" is not waiting for tool call "${toolCallId}"`);
36
+ super(runId, toolCallId);
41
37
  this.name = "ToolResultNotWaitingError";
42
38
  }
43
39
  }
44
- export class ToolResultConflictError extends Error {
40
+ export class ToolResultConflictError extends WaitConflictError {
45
41
  constructor(runId, toolCallId) {
46
- super(`Conflicting tool result for run "${runId}" and tool call "${toolCallId}"`);
42
+ super(runId, toolCallId);
47
43
  this.name = "ToolResultConflictError";
48
44
  }
49
45
  }
50
46
  const DEFAULT_WAITING_FOR_TOOL_TTL_MS = 5 * 60 * 1000;
51
47
  const DEFAULT_SESSION_TTL_MS = 15 * 60 * 1000;
52
- const DEFAULT_MAX_CONCURRENT_SESSIONS = 100;
53
48
  const AGENT_RUN_SESSION_MANAGER_GLOBAL_KEY = "__veryfrontAgentRunSessionManager";
54
49
  export class AgentRunSessionManager {
55
50
  options;
56
- sessions = new Map();
51
+ sessions;
57
52
  constructor(options = {}) {
58
53
  this.options = options;
59
- }
60
- get waitingForToolTtlMs() {
61
- return this.options.waitingForToolTtlMs ?? DEFAULT_WAITING_FOR_TOOL_TTL_MS;
62
- }
63
- get sessionTtlMs() {
64
- return this.options.sessionTtlMs ?? null;
65
- }
66
- get setTimeoutFn() {
67
- return this.options.setTimeoutFn ?? dntShim.dntGlobalThis.setTimeout.bind(dntShim.dntGlobalThis);
68
- }
69
- get clearTimeoutFn() {
70
- return this.options.clearTimeoutFn ?? globalThis.clearTimeout.bind(dntShim.dntGlobalThis);
71
- }
72
- clearWaitingTimeout(session) {
73
- if (session.waitingTimeoutId === null) {
74
- return;
75
- }
76
- this.clearTimeoutFn(session.waitingTimeoutId);
77
- session.waitingTimeoutId = null;
78
- }
79
- clearSessionTimeout(session) {
80
- if (session.sessionTimeoutId === null) {
81
- return;
82
- }
83
- this.clearTimeoutFn(session.sessionTimeoutId);
84
- session.sessionTimeoutId = null;
85
- }
86
- scheduleSessionTimeout(session) {
87
- if (this.sessionTtlMs === null) {
88
- return;
89
- }
90
- this.clearSessionTimeout(session);
91
- session.sessionTimeoutId = this.setTimeoutFn(() => {
92
- this.cancelRun(session.runId);
93
- }, this.sessionTtlMs);
94
- }
95
- scheduleWaitingTimeout(session) {
96
- this.clearWaitingTimeout(session);
97
- session.waitingTimeoutId = this.setTimeoutFn(() => {
98
- this.cancelRun(session.runId);
99
- }, this.waitingForToolTtlMs);
100
- }
101
- touchSession(session) {
102
- if (session.status === "running" || session.status === "waiting") {
103
- this.scheduleSessionTimeout(session);
104
- }
105
- }
106
- finalizeSession(session, status) {
107
- session.status = status;
108
- this.clearWaitingTimeout(session);
109
- this.clearSessionTimeout(session);
110
- session.waitingTool = null;
111
- this.sessions.delete(session.runId);
112
- }
113
- get maxConcurrentSessions() {
114
- return this.options.maxConcurrentSessions ?? DEFAULT_MAX_CONCURRENT_SESSIONS;
54
+ const managerOptions = {
55
+ waitingTtlMs: this.options.waitingForToolTtlMs ?? DEFAULT_WAITING_FOR_TOOL_TTL_MS,
56
+ sessionTtlMs: this.options.sessionTtlMs ?? null,
57
+ maxConcurrentSessions: this.options.maxConcurrentSessions,
58
+ setTimeoutFn: this.options.setTimeoutFn,
59
+ clearTimeoutFn: this.options.clearTimeoutFn,
60
+ getConflictKey: (value) => value.key,
61
+ };
62
+ this.sessions = new RunResumeSessionManager(managerOptions);
115
63
  }
116
64
  startRun(input) {
117
- const existing = this.sessions.get(input.runId);
118
- if (existing && (existing.status === "running" || existing.status === "waiting")) {
119
- throw new AgentRunAlreadyExistsError(input.runId);
65
+ try {
66
+ return this.sessions.startRun(input);
120
67
  }
121
- if (this.sessions.size >= this.maxConcurrentSessions) {
122
- throw new Error(`Maximum concurrent sessions (${this.maxConcurrentSessions}) reached`);
68
+ catch (error) {
69
+ if (error instanceof RunAlreadyExistsError) {
70
+ throw new AgentRunAlreadyExistsError(input.runId);
71
+ }
72
+ throw error;
123
73
  }
124
- const session = {
125
- runId: input.runId,
126
- status: "running",
127
- abortController: new AbortController(),
128
- waitingTool: null,
129
- submittedResults: new Map(),
130
- waitingTimeoutId: null,
131
- sessionTimeoutId: null,
132
- };
133
- this.sessions.set(input.runId, session);
134
- this.touchSession(session);
135
- return session.abortController.signal;
136
74
  }
137
75
  async waitForToolResult(runId, toolCallId) {
138
- const session = this.sessions.get(runId);
139
- if (!session || session.status === "completed" || session.status === "failed") {
140
- throw new RunNotActiveError(runId);
141
- }
142
- if (session.abortController.signal.aborted || session.status === "cancelled") {
143
- throw new AgentRunCancelledError();
76
+ try {
77
+ const value = await this.sessions.waitForSignal(runId, toolCallId);
78
+ return { result: value.result, isError: value.isError };
144
79
  }
145
- const existingResult = session.submittedResults.get(toolCallId);
146
- if (existingResult) {
147
- session.status = "running";
148
- this.touchSession(session);
149
- return { result: existingResult.result, isError: existingResult.isError };
150
- }
151
- if (session.waitingTool && session.waitingTool.toolCallId !== toolCallId) {
152
- throw new ToolResultNotWaitingError(runId, toolCallId);
80
+ catch (error) {
81
+ if (error instanceof RunCancelledError) {
82
+ throw new AgentRunCancelledError();
83
+ }
84
+ if (error instanceof WaitNotPendingError) {
85
+ throw new ToolResultNotWaitingError(runId, toolCallId);
86
+ }
87
+ throw error;
153
88
  }
154
- session.status = "waiting";
155
- this.scheduleWaitingTimeout(session);
156
- this.touchSession(session);
157
- return await new Promise((resolve, reject) => {
158
- const abortHandler = () => {
159
- this.clearWaitingTimeout(session);
160
- session.waitingTool = null;
161
- session.status = "cancelled";
162
- reject(new AgentRunCancelledError());
163
- };
164
- session.abortController.signal.addEventListener("abort", abortHandler, { once: true });
165
- session.waitingTool = {
166
- toolCallId,
167
- resolve: (value) => {
168
- session.abortController.signal.removeEventListener("abort", abortHandler);
169
- this.clearWaitingTimeout(session);
170
- session.waitingTool = null;
171
- session.status = "running";
172
- this.touchSession(session);
173
- resolve({ result: value.result, isError: value.isError });
174
- },
175
- reject: (reason) => {
176
- session.abortController.signal.removeEventListener("abort", abortHandler);
177
- this.clearWaitingTimeout(session);
178
- session.waitingTool = null;
179
- reject(reason);
180
- },
181
- };
182
- });
183
89
  }
184
90
  submitToolResult(runId, input) {
185
- const session = this.sessions.get(runId);
186
- if (!session) {
187
- throw new RunNotActiveError(runId);
188
- }
189
91
  const normalized = {
190
92
  result: input.result,
191
93
  isError: Boolean(input.isError),
192
94
  key: createToolResultKey(input.result, Boolean(input.isError)),
193
95
  };
194
- const existingResult = session.submittedResults.get(input.toolCallId);
195
- if (existingResult) {
196
- if (existingResult.key === normalized.key) {
197
- return { accepted: true, duplicate: true };
96
+ try {
97
+ return this.sessions.submitSignal(runId, {
98
+ waitKey: input.toolCallId,
99
+ value: normalized,
100
+ });
101
+ }
102
+ catch (error) {
103
+ if (error instanceof WaitConflictError) {
104
+ throw new ToolResultConflictError(runId, input.toolCallId);
198
105
  }
199
- throw new ToolResultConflictError(runId, input.toolCallId);
200
- }
201
- if (session.status === "completed" || session.status === "failed" ||
202
- session.status === "cancelled") {
203
- throw new RunNotActiveError(runId);
204
- }
205
- if (!session.waitingTool || session.waitingTool.toolCallId !== input.toolCallId) {
206
- throw new ToolResultNotWaitingError(runId, input.toolCallId);
106
+ if (error instanceof WaitNotPendingError) {
107
+ throw new ToolResultNotWaitingError(runId, input.toolCallId);
108
+ }
109
+ throw error;
207
110
  }
208
- session.submittedResults.set(input.toolCallId, normalized);
209
- this.touchSession(session);
210
- session.waitingTool.resolve(normalized);
211
- return { accepted: true };
212
111
  }
213
112
  cancelRun(runId) {
214
- const session = this.sessions.get(runId);
215
- if (!session) {
216
- return false;
217
- }
218
- if (session.status === "completed" || session.status === "failed" ||
219
- session.status === "cancelled") {
220
- return false;
221
- }
222
- const waitingTool = session.waitingTool;
223
- session.abortController.abort(new AgentRunCancelledError());
224
- waitingTool?.reject(new AgentRunCancelledError());
225
- this.finalizeSession(session, "cancelled");
226
- return true;
113
+ return this.sessions.cancelRun(runId);
227
114
  }
228
115
  completeRun(runId) {
229
- const session = this.sessions.get(runId);
230
- if (!session)
231
- return;
232
- this.finalizeSession(session, "completed");
116
+ this.sessions.completeRun(runId);
233
117
  }
234
118
  failRun(runId) {
235
- const session = this.sessions.get(runId);
236
- if (!session)
237
- return;
238
- this.finalizeSession(session, "failed");
119
+ this.sessions.failRun(runId);
239
120
  }
240
121
  getRunStatus(runId) {
241
- return this.sessions.get(runId)?.status ?? null;
122
+ return this.sessions.getRunStatus(runId);
242
123
  }
243
124
  reset() {
244
- for (const session of this.sessions.values()) {
245
- this.clearWaitingTimeout(session);
246
- this.clearSessionTimeout(session);
247
- }
248
- this.sessions.clear();
125
+ this.sessions.reset();
249
126
  }
250
127
  }
251
128
  function getGlobalAgentRunSessionManager() {
@@ -25,4 +25,6 @@ import "../../_dnt.polyfills.js";
25
25
  export type { MCPServerConfig, MCPStats, MCPTool, ToolAnnotations, ToolListEntry, } from "./types.js";
26
26
  export { clearMCPRegistry, getMCPRegistry, getMCPStats, registerPrompt, registerResource, registerTool, } from "./registry.js";
27
27
  export { createMCPServer, type IntegrationLoaderConfig, MCPServer } from "./server.js";
28
+ export { formatSSEEvent, formatSSEPrimingEvent, formatSSERetry } from "./sse.js";
29
+ export { SessionManager } from "./session.js";
28
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,yBAAyB,CAAC;AAGjC,YAAY,EACV,eAAe,EACf,QAAQ,EACR,OAAO,EACP,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,EAAE,KAAK,uBAAuB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,yBAAyB,CAAC;AAGjC,YAAY,EACV,eAAe,EACf,QAAQ,EACR,OAAO,EACP,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,EAAE,KAAK,uBAAuB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEvF,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -24,3 +24,5 @@
24
24
  import "../../_dnt.polyfills.js";
25
25
  export { clearMCPRegistry, getMCPRegistry, getMCPStats, registerPrompt, registerResource, registerTool, } from "./registry.js";
26
26
  export { createMCPServer, MCPServer } from "./server.js";
27
+ export { formatSSEEvent, formatSSEPrimingEvent, formatSSERetry } from "./sse.js";
28
+ export { SessionManager } from "./session.js";
@@ -28,6 +28,7 @@ export declare class MCPServer {
28
28
  private config;
29
29
  private integrationLoader?;
30
30
  private integrationsLoaded;
31
+ private sessionManager;
31
32
  constructor(config: MCPServerConfig);
32
33
  /**
33
34
  * Configure integration tools to be loaded from the API.
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAG/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAI7D,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AAMjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAWzE,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;AA4DzD,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC,CAAC;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,iBAAiB,CAAC,CAA0B;IACpD,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,MAAM,EAAE,eAAe;IAQnC;;;;;;OAMG;IACH,oBAAoB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAK3D,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC;IAmBhG,OAAO,CAAC,QAAQ;IAoChB,OAAO,CAAC,UAAU;YA2BJ,SAAS;IA6BvB,OAAO,CAAC,QAAQ;IAgDhB,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,YAAY;IA6CpB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,SAAS;IAuCjB,OAAO,CAAC,QAAQ;IAUhB,iBAAiB,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;IAuD5E,OAAO,CAAC,qBAAqB;YAgBf,YAAY;IAsB1B,OAAO,CAAC,cAAc;YAqBR,0BAA0B;CAqBzC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAElE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAG/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAI7D,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AAMjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAYzE,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;AA4DzD,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC,CAAC;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,iBAAiB,CAAC,CAA0B;IACpD,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,cAAc,CAAwB;gBAElC,MAAM,EAAE,eAAe;IAQnC;;;;;;OAMG;IACH,oBAAoB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAK3D,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC;IAmBhG,OAAO,CAAC,QAAQ;IAoChB,OAAO,CAAC,UAAU;YA2BJ,SAAS;IA6BvB,OAAO,CAAC,QAAQ;IAgDhB,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,YAAY;IA6CpB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,SAAS;IAuCjB,OAAO,CAAC,QAAQ;IAUhB,iBAAiB,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;IAiG5E,OAAO,CAAC,qBAAqB;YAgBf,YAAY;IAsB1B,OAAO,CAAC,cAAc;YAsBR,0BAA0B;CAqBzC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAElE"}
@@ -10,6 +10,7 @@ import { VERSION } from "../utils/version.js";
10
10
  import { validateContentType } from "../security/input-validation/limits.js";
11
11
  import { VeryfrontError } from "../security/input-validation/errors.js";
12
12
  import { logger as baseLogger } from "../utils/index.js";
13
+ import { SessionManager } from "./session.js";
13
14
  const logger = baseLogger.component("mcp-server");
14
15
  const MAX_REQUEST_BODY_SIZE = 1_048_576; // 1 MB
15
16
  const MAX_CONTEXT_HEADER_LENGTH = 255;
@@ -68,6 +69,7 @@ export class MCPServer {
68
69
  config;
69
70
  integrationLoader;
70
71
  integrationsLoaded = false;
72
+ sessionManager = new SessionManager();
71
73
  constructor(config) {
72
74
  this.config = config;
73
75
  if (!config.auth || config.auth.type === "none") {
@@ -328,19 +330,33 @@ export class MCPServer {
328
330
  createHTTPHandler() {
329
331
  return async (request) => {
330
332
  const requestOrigin = request.headers.get("Origin");
333
+ // CORS preflight
331
334
  if (request.method === "OPTIONS") {
332
335
  return new dntShim.Response(null, { status: 204, headers: this.getCORSHeaders(requestOrigin) });
333
336
  }
337
+ // Origin validation (DNS rebinding protection)
334
338
  if (requestOrigin && this.config.cors?.enabled && this.config.cors.origins?.length) {
335
339
  if (!this.config.cors.origins.includes(requestOrigin)) {
336
340
  return createJSONRPCErrorResponse(403, -32600, "Forbidden: Origin not allowed");
337
341
  }
338
342
  }
343
+ // Auth check (applies to all methods including DELETE)
339
344
  if (this.config.auth?.type && this.config.auth.type !== "none") {
340
345
  const authorized = await this.validateAuth(request);
341
346
  if (!authorized)
342
347
  return new dntShim.Response("Unauthorized", { status: 401 });
343
348
  }
349
+ // DELETE = terminate session
350
+ if (request.method === "DELETE") {
351
+ const sessionId = request.headers.get("MCP-Session-Id");
352
+ if (sessionId)
353
+ this.sessionManager.terminate(sessionId);
354
+ return new dntShim.Response(null, { status: 200, headers: this.getCORSHeaders(requestOrigin) });
355
+ }
356
+ // Only POST allowed for JSON-RPC messages
357
+ if (request.method !== "POST") {
358
+ return new dntShim.Response("Method Not Allowed", { status: 405 });
359
+ }
344
360
  // Enforce request body size limit (fast path via Content-Length header)
345
361
  const contentLength = request.headers.get("content-length");
346
362
  if (contentLength && Number(contentLength) > MAX_REQUEST_BODY_SIZE) {
@@ -365,14 +381,37 @@ export class MCPServer {
365
381
  // expected: malformed JSON in request body
366
382
  return createJSONRPCErrorResponse(400, -32700, "Parse error");
367
383
  }
368
- // Extract end-user identity from request headers for per-user token flows
384
+ // Session management: initialize creates session, everything else requires it
385
+ const responseHeaders = {
386
+ ...this.getCORSHeaders(requestOrigin),
387
+ };
388
+ if (rpcRequest.method === "initialize") {
389
+ const context = this.extractRequestContext(request);
390
+ const rpcResponse = await this.handleRequest(rpcRequest, context);
391
+ const sessionId = this.sessionManager.create();
392
+ responseHeaders["MCP-Session-Id"] = sessionId;
393
+ return createJSONResponse(rpcResponse, { headers: responseHeaders });
394
+ }
395
+ // Post-init: require session ID when sessions are active
396
+ if (this.sessionManager.size > 0) {
397
+ const sessionId = request.headers.get("MCP-Session-Id");
398
+ if (!sessionId) {
399
+ return createJSONRPCErrorResponse(400, -32600, "Missing MCP-Session-Id header");
400
+ }
401
+ if (!this.sessionManager.isValid(sessionId)) {
402
+ return createJSONRPCErrorResponse(404, -32600, "Session not found or expired");
403
+ }
404
+ }
405
+ // Notifications have no id member — return 202 Accepted
406
+ // Note: id:0 is a valid request ID per JSON-RPC 2.0, so check for undefined
407
+ if (rpcRequest.id === undefined) {
408
+ const context = this.extractRequestContext(request);
409
+ await this.handleRequest(rpcRequest, context);
410
+ return new dntShim.Response(null, { status: 202, headers: responseHeaders });
411
+ }
369
412
  const context = this.extractRequestContext(request);
370
413
  const rpcResponse = await this.handleRequest(rpcRequest, context);
371
- return createJSONResponse(rpcResponse, {
372
- headers: {
373
- ...this.getCORSHeaders(requestOrigin),
374
- },
375
- });
414
+ return createJSONResponse(rpcResponse, { headers: responseHeaders });
376
415
  };
377
416
  }
378
417
  extractRequestContext(request) {
@@ -420,8 +459,8 @@ export class MCPServer {
420
459
  return {};
421
460
  return {
422
461
  "Access-Control-Allow-Origin": matchedOrigin,
423
- "Access-Control-Allow-Methods": "POST, OPTIONS",
424
- "Access-Control-Allow-Headers": "Content-Type, Authorization, X-End-User-Id, X-Project-Id",
462
+ "Access-Control-Allow-Methods": "POST, GET, DELETE, OPTIONS",
463
+ "Access-Control-Allow-Headers": "Content-Type, Authorization, MCP-Session-Id, X-End-User-Id, X-Project-Id",
425
464
  "Vary": "Origin",
426
465
  };
427
466
  }
@@ -0,0 +1,9 @@
1
+ export declare class SessionManager {
2
+ private sessions;
3
+ create(): string;
4
+ isValid(id: string): boolean;
5
+ terminate(id: string): void;
6
+ get size(): number;
7
+ clear(): void;
8
+ }
9
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/session.ts"],"names":[],"mappings":"AAMA,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAqB;IAErC,MAAM,IAAI,MAAM;IAMhB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI3B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Manages MCP sessions for the Streamable HTTP transport.
3
+ * Sessions are created during initialization and validated on subsequent requests.
4
+ */
5
+ import * as dntShim from "../../_dnt.shims.js";
6
+ export class SessionManager {
7
+ sessions = new Set();
8
+ create() {
9
+ const id = dntShim.crypto.randomUUID();
10
+ this.sessions.add(id);
11
+ return id;
12
+ }
13
+ isValid(id) {
14
+ return this.sessions.has(id);
15
+ }
16
+ terminate(id) {
17
+ this.sessions.delete(id);
18
+ }
19
+ get size() {
20
+ return this.sessions.size;
21
+ }
22
+ clear() {
23
+ this.sessions.clear();
24
+ }
25
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Stateless SSE formatting utilities per the Server-Sent Events standard.
3
+ * Used by the Streamable HTTP transport for MCP.
4
+ */
5
+ export declare function formatSSEEvent(data: unknown, id?: string): string;
6
+ export declare function formatSSERetry(ms: number): string;
7
+ export declare function formatSSEPrimingEvent(id: string): string;
8
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/sse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAExD"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Stateless SSE formatting utilities per the Server-Sent Events standard.
3
+ * Used by the Streamable HTTP transport for MCP.
4
+ */
5
+ export function formatSSEEvent(data, id) {
6
+ let event = "";
7
+ if (id)
8
+ event += `id: ${id}\n`;
9
+ event += `data: ${JSON.stringify(data)}\n\n`;
10
+ return event;
11
+ }
12
+ export function formatSSERetry(ms) {
13
+ return `retry: ${ms}\n\n`;
14
+ }
15
+ export function formatSSEPrimingEvent(id) {
16
+ return `id: ${id}\ndata: \n\n`;
17
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../src/src/platform/cloud/resolver.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,6BAA6B,gDAAgD,CAAC;AAC3F,eAAO,MAAM,uCAAuC,kDACH,CAAC;AAElD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;CAC1B;AA0CD,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,SAAS,CAE/D;AAED,wBAAgB,4BAA4B,IAAI,MAAM,GAAG,SAAS,CAEjE;AAED,wBAAgB,0BAA0B,IAAI,uBAAuB,CAKpE;AAED,wBAAgB,uBAAuB,IAAI,OAAO,CAgBjD;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAKtD;AAED,wBAAgB,sCAAsC,IAAI,MAAM,CAK/D"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../src/src/platform/cloud/resolver.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,6BAA6B,gDAAgD,CAAC;AAC3F,eAAO,MAAM,uCAAuC,kDACH,CAAC;AAElD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAmDD,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,SAAS,CAE/D;AAED,wBAAgB,4BAA4B,IAAI,MAAM,GAAG,SAAS,CAEjE;AAED,wBAAgB,0BAA0B,IAAI,uBAAuB,CAOpE;AAED,wBAAgB,uBAAuB,IAAI,OAAO,CAgBjD;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAKtD;AAED,wBAAgB,sCAAsC,IAAI,MAAM,CAK/D"}
@@ -2,6 +2,7 @@ import { getRuntimeConfig, isRuntimeConfigInitialized } from "../../config/index
2
2
  import { getApiBaseUrlEnv } from "../../config/env.js";
3
3
  import { getCurrentRequestContext } from "../adapters/fs/veryfront/multi-project-adapter.js";
4
4
  import { getEnv } from "../compat/process.js";
5
+ import { getCurrentVeryfrontCloudContext } from "../../provider/veryfront-cloud/context.js";
5
6
  export const DEFAULT_VERYFRONT_CLOUD_MODEL = "veryfront-cloud/anthropic/claude-sonnet-4-6";
6
7
  export const DEFAULT_VERYFRONT_CLOUD_EMBEDDING_MODEL = "veryfront-cloud/openai/text-embedding-3-small";
7
8
  function getRuntimeBootstrap() {
@@ -19,18 +20,26 @@ function normalizeCloudModelString(value, fallback) {
19
20
  const resolved = value?.trim() || fallback;
20
21
  return resolved.startsWith("veryfront-cloud/") ? resolved : `veryfront-cloud/${resolved}`;
21
22
  }
23
+ function normalizeServiceLayer(value) {
24
+ const normalized = value?.trim().toLowerCase();
25
+ return normalized?.length ? normalized : undefined;
26
+ }
22
27
  function getResolvedVeryfrontCloudContext() {
23
28
  const requestContext = getCurrentRequestContext();
29
+ const scopedContext = getCurrentVeryfrontCloudContext();
24
30
  const runtimeBootstrap = getRuntimeBootstrap();
25
31
  return {
26
32
  apiToken: requestContext?.token ??
33
+ scopedContext?.apiToken ??
27
34
  getEnv("VERYFRONT_API_TOKEN") ??
28
35
  runtimeBootstrap.apiToken,
29
36
  projectSlug: requestContext?.projectSlug ??
37
+ scopedContext?.projectSlug ??
30
38
  getEnv("VERYFRONT_PROJECT_SLUG") ??
31
39
  runtimeBootstrap.projectSlug,
32
- serviceLayer: getEnv("VERYFRONT_SERVICE_LAYER")?.trim().toLowerCase(),
33
- hasRequestContext: requestContext !== null,
40
+ serviceLayer: normalizeServiceLayer(scopedContext?.serviceLayer) ??
41
+ normalizeServiceLayer(getEnv("VERYFRONT_SERVICE_LAYER")),
42
+ hasRequestContext: requestContext !== null || scopedContext !== undefined,
34
43
  usesVeryfrontFs: runtimeBootstrap.usesVeryfrontFs,
35
44
  };
36
45
  }
@@ -41,8 +50,9 @@ export function getVeryfrontCloudProjectSlug() {
41
50
  return getResolvedVeryfrontCloudContext().projectSlug;
42
51
  }
43
52
  export function getVeryfrontCloudBootstrap() {
53
+ const scopedContext = getCurrentVeryfrontCloudContext();
44
54
  return {
45
- apiBaseUrl: getApiBaseUrlEnv(),
55
+ apiBaseUrl: scopedContext?.apiBaseUrl?.trim() || getApiBaseUrlEnv(),
46
56
  ...getResolvedVeryfrontCloudContext(),
47
57
  };
48
58
  }
@@ -18,4 +18,6 @@
18
18
  import "../../_dnt.polyfills.js";
19
19
  export { clearModelProviders, ensureModelReady, findAvailableCloudModel, getRegisteredModelProviders, hasModelProvider, registerModelProvider, resolveModel, } from "./model-registry.js";
20
20
  export type { ModelProviderFactory } from "./model-registry.js";
21
+ export { runWithVeryfrontCloudContext, runWithVeryfrontCloudContextAsync, } from "./veryfront-cloud/context.js";
22
+ export type { VeryfrontCloudContext } from "./veryfront-cloud/context.js";
21
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/provider/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,2BAA2B,EAC3B,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/provider/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,2BAA2B,EAC3B,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACL,4BAA4B,EAC5B,iCAAiC,GAClC,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -17,3 +17,4 @@
17
17
  */
18
18
  import "../../_dnt.polyfills.js";
19
19
  export { clearModelProviders, ensureModelReady, findAvailableCloudModel, getRegisteredModelProviders, hasModelProvider, registerModelProvider, resolveModel, } from "./model-registry.js";
20
+ export { runWithVeryfrontCloudContext, runWithVeryfrontCloudContextAsync, } from "./veryfront-cloud/context.js";
@@ -0,0 +1,10 @@
1
+ export interface VeryfrontCloudContext {
2
+ apiBaseUrl?: string;
3
+ apiToken?: string;
4
+ projectSlug?: string;
5
+ serviceLayer?: string;
6
+ }
7
+ export declare function runWithVeryfrontCloudContext<T>(context: VeryfrontCloudContext, fn: () => T): T;
8
+ export declare function runWithVeryfrontCloudContextAsync<T>(context: VeryfrontCloudContext, fn: () => Promise<T>): Promise<T>;
9
+ export declare function getCurrentVeryfrontCloudContext(): VeryfrontCloudContext | undefined;
10
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/src/provider/veryfront-cloud/context.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,wBAAgB,4BAA4B,CAAC,CAAC,EAC5C,OAAO,EAAE,qBAAqB,EAC9B,EAAE,EAAE,MAAM,CAAC,GACV,CAAC,CAEH;AAED,wBAAgB,iCAAiC,CAAC,CAAC,EACjD,OAAO,EAAE,qBAAqB,EAC9B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,wBAAgB,+BAA+B,IAAI,qBAAqB,GAAG,SAAS,CAEnF"}
@@ -0,0 +1,11 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ const veryfrontCloudContextStorage = new AsyncLocalStorage();
3
+ export function runWithVeryfrontCloudContext(context, fn) {
4
+ return veryfrontCloudContextStorage.run(context, fn);
5
+ }
6
+ export function runWithVeryfrontCloudContextAsync(context, fn) {
7
+ return veryfrontCloudContextStorage.run(context, fn);
8
+ }
9
+ export function getCurrentVeryfrontCloudContext() {
10
+ return veryfrontCloudContextStorage.getStore();
11
+ }
@@ -43,9 +43,11 @@
43
43
  * ```
44
44
  */
45
45
  import "../../_dnt.polyfills.js";
46
- export type { Tool, ToolConfig, ToolDefinition, ToolExecutionContext } from "./types.js";
46
+ export type { RemoteToolSource, Tool, ToolConfig, ToolDefinition, ToolExecutionContext, } from "./types.js";
47
47
  export { dynamicTool, tool } from "./factory.js";
48
48
  export type { DynamicToolConfig } from "./factory.js";
49
+ export { createRemoteMCPToolSource } from "./remote-mcp.js";
50
+ export type { RemoteMCPToolSourceConfig } from "./remote-mcp.js";
49
51
  export { toolRegistry } from "./registry.js";
50
52
  export { executeTool } from "./executor.js";
51
53
  export type { JsonSchema } from "./schema/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/tool/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,yBAAyB,CAAC;AAGjC,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEzF,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/tool/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,yBAAyB,CAAC;AAGjC,YAAY,EACV,gBAAgB,EAChB,IAAI,EACJ,UAAU,EACV,cAAc,EACd,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
@@ -44,5 +44,6 @@
44
44
  */
45
45
  import "../../_dnt.polyfills.js";
46
46
  export { dynamicTool, tool } from "./factory.js";
47
+ export { createRemoteMCPToolSource } from "./remote-mcp.js";
47
48
  export { toolRegistry } from "./registry.js";
48
49
  export { executeTool } from "./executor.js";