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.
- package/esm/deno.js +1 -1
- package/esm/src/agent/ag-ui-handler.d.ts +77 -0
- package/esm/src/agent/ag-ui-handler.d.ts.map +1 -0
- package/esm/src/agent/ag-ui-handler.js +331 -0
- package/esm/src/agent/index.d.ts +2 -1
- package/esm/src/agent/index.d.ts.map +1 -1
- package/esm/src/agent/index.js +2 -1
- package/esm/src/agent/runtime/index.d.ts +2 -0
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +15 -7
- package/esm/src/agent/runtime/resume-session.d.ts +61 -0
- package/esm/src/agent/runtime/resume-session.d.ts.map +1 -0
- package/esm/src/agent/runtime/resume-session.js +232 -0
- package/esm/src/agent/runtime/tool-helpers.d.ts +4 -2
- package/esm/src/agent/runtime/tool-helpers.d.ts.map +1 -1
- package/esm/src/agent/runtime/tool-helpers.js +57 -4
- package/esm/src/agent/types.d.ts +2 -1
- package/esm/src/agent/types.d.ts.map +1 -1
- package/esm/src/internal-agents/session-manager.d.ts +8 -24
- package/esm/src/internal-agents/session-manager.d.ts.map +1 -1
- package/esm/src/internal-agents/session-manager.js +55 -178
- package/esm/src/mcp/index.d.ts +2 -0
- package/esm/src/mcp/index.d.ts.map +1 -1
- package/esm/src/mcp/index.js +2 -0
- package/esm/src/mcp/server.d.ts +1 -0
- package/esm/src/mcp/server.d.ts.map +1 -1
- package/esm/src/mcp/server.js +47 -8
- package/esm/src/mcp/session.d.ts +9 -0
- package/esm/src/mcp/session.d.ts.map +1 -0
- package/esm/src/mcp/session.js +25 -0
- package/esm/src/mcp/sse.d.ts +8 -0
- package/esm/src/mcp/sse.d.ts.map +1 -0
- package/esm/src/mcp/sse.js +17 -0
- package/esm/src/platform/cloud/resolver.d.ts.map +1 -1
- package/esm/src/platform/cloud/resolver.js +13 -3
- package/esm/src/provider/index.d.ts +2 -0
- package/esm/src/provider/index.d.ts.map +1 -1
- package/esm/src/provider/index.js +1 -0
- package/esm/src/provider/veryfront-cloud/context.d.ts +10 -0
- package/esm/src/provider/veryfront-cloud/context.d.ts.map +1 -0
- package/esm/src/provider/veryfront-cloud/context.js +11 -0
- package/esm/src/tool/index.d.ts +3 -1
- package/esm/src/tool/index.d.ts.map +1 -1
- package/esm/src/tool/index.js +1 -0
- package/esm/src/tool/remote-mcp.d.ts +14 -0
- package/esm/src/tool/remote-mcp.d.ts.map +1 -0
- package/esm/src/tool/remote-mcp.js +176 -0
- package/esm/src/tool/types.d.ts +12 -0
- package/esm/src/tool/types.d.ts.map +1 -1
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
- package/src/deno.js +1 -1
- package/src/src/agent/ag-ui-handler.ts +451 -0
- package/src/src/agent/index.ts +21 -1
- package/src/src/agent/runtime/index.ts +28 -3
- package/src/src/agent/runtime/resume-session.ts +319 -0
- package/src/src/agent/runtime/tool-helpers.ts +89 -6
- package/src/src/agent/types.ts +2 -1
- package/src/src/internal-agents/session-manager.ts +69 -243
- package/src/src/mcp/index.ts +3 -0
- package/src/src/mcp/server.ts +54 -9
- package/src/src/mcp/session.ts +31 -0
- package/src/src/mcp/sse.ts +19 -0
- package/src/src/platform/cloud/resolver.ts +15 -3
- package/src/src/provider/index.ts +5 -0
- package/src/src/provider/veryfront-cloud/context.ts +28 -0
- package/src/src/tool/index.ts +9 -1
- package/src/src/tool/remote-mcp.ts +261 -0
- package/src/src/tool/types.ts +17 -0
- 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
|
|
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
|
|
28
|
+
export class AgentRunAlreadyExistsError extends RunAlreadyExistsError {
|
|
27
29
|
constructor(runId) {
|
|
28
|
-
super(
|
|
30
|
+
super(runId);
|
|
29
31
|
this.name = "AgentRunAlreadyExistsError";
|
|
30
32
|
}
|
|
31
33
|
}
|
|
32
|
-
export class
|
|
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(
|
|
36
|
+
super(runId, toolCallId);
|
|
41
37
|
this.name = "ToolResultNotWaitingError";
|
|
42
38
|
}
|
|
43
39
|
}
|
|
44
|
-
export class ToolResultConflictError extends
|
|
40
|
+
export class ToolResultConflictError extends WaitConflictError {
|
|
45
41
|
constructor(runId, toolCallId) {
|
|
46
|
-
super(
|
|
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
|
|
51
|
+
sessions;
|
|
57
52
|
constructor(options = {}) {
|
|
58
53
|
this.options = options;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
118
|
-
|
|
119
|
-
throw new AgentRunAlreadyExistsError(input.runId);
|
|
65
|
+
try {
|
|
66
|
+
return this.sessions.startRun(input);
|
|
120
67
|
}
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
throw
|
|
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
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
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
|
-
|
|
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
|
-
|
|
230
|
-
if (!session)
|
|
231
|
-
return;
|
|
232
|
-
this.finalizeSession(session, "completed");
|
|
116
|
+
this.sessions.completeRun(runId);
|
|
233
117
|
}
|
|
234
118
|
failRun(runId) {
|
|
235
|
-
|
|
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.
|
|
122
|
+
return this.sessions.getRunStatus(runId);
|
|
242
123
|
}
|
|
243
124
|
reset() {
|
|
244
|
-
|
|
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() {
|
package/esm/src/mcp/index.d.ts
CHANGED
|
@@ -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"}
|
package/esm/src/mcp/index.js
CHANGED
|
@@ -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";
|
package/esm/src/mcp/server.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/esm/src/mcp/server.js
CHANGED
|
@@ -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
|
-
//
|
|
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 @@
|
|
|
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":"
|
|
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:
|
|
33
|
-
|
|
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
|
+
}
|
package/esm/src/tool/index.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/esm/src/tool/index.js
CHANGED